Compare commits
31 Commits
Author | SHA1 | Date |
---|---|---|
Governikus | 684e3a1f06 | |
Governikus | 53fc9bb552 | |
Governikus | feb2a155e9 | |
Governikus | fb0491a6cb | |
Governikus | 9ba662c3bb | |
Governikus | 9484181f86 | |
André Klitzing | ebe1437537 | |
Christian Grasser | dab96eb2bd | |
André Klitzing | 806a4dc6d7 | |
André Klitzing | 84d957f9a8 | |
Governikus | c9adf39cdc | |
John Paul Adrian Glaubitz | 5914a27069 | |
John Paul Adrian Glaubitz | 5b8016c407 | |
Christian Grasser | 7dd727820c | |
Stephan Linz | 06836ad54b | |
Governikus | 3d08ce3e5f | |
Governikus | e626090014 | |
Governikus | b4c1fbe7a9 | |
André Klitzing | 8fe1abdaf5 | |
André Klitzing | ee73f4b147 | |
André Klitzing | 19b093efcd | |
Christian Grasser | 73d816c247 | |
Governikus | fd71d19839 | |
André Klitzing | a5b97b53eb | |
André Klitzing | 4c82591b8e | |
Governikus | b41ed2ead7 | |
André Klitzing | 38c4245d1c | |
Governikus | 8fce07113d | |
Sebastian Janzen | 2c9ceb430c | |
André Klitzing | 3b90861aa4 | |
André Klitzing | 7a463a2a06 |
13
.travis.yml
|
@ -1,16 +1,25 @@
|
||||||
language: shell
|
language: shell
|
||||||
sudo: required
|
sudo: required
|
||||||
|
|
||||||
|
cache:
|
||||||
|
ccache: true
|
||||||
|
directories:
|
||||||
|
- $HOME/.ccache
|
||||||
|
|
||||||
env:
|
env:
|
||||||
matrix:
|
matrix:
|
||||||
- CHECK=format
|
- CHECK=format
|
||||||
- CHECK=docs
|
- CHECK=docs
|
||||||
|
- CHECK=build TYPE=debug COMPILER=g++
|
||||||
|
- CHECK=build TYPE=release COMPILER=g++
|
||||||
|
- CHECK=build TYPE=debug COMPILER=clang++
|
||||||
|
- CHECK=build TYPE=release COMPILER=clang++
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- sudo resources/travis/setup.sh $CHECK
|
- sudo -E resources/travis/setup.sh
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- sudo resources/travis/build.sh $CHECK
|
- sudo -E resources/travis/build.sh
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email: false
|
email: false
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
# cmake --build . --target architecture
|
# cmake --build . --target architecture
|
||||||
########################################
|
########################################
|
||||||
|
|
||||||
SET(GRAPHVIZ_IGNORE_TARGETS AusweisAppGlobal;AusweisAppExternal;AusweisAppUiCli;cvc;fuzz;OpenSsl;tlscheck;Test;Script)
|
SET(GRAPHVIZ_IGNORE_TARGETS AusweisAppGlobal;AusweisAppExternal;cvc;fuzz;OpenSsl;tlscheck;Test;Script)
|
||||||
SET(GRAPHVIZ_EXTERNAL_LIBS OFF)
|
SET(GRAPHVIZ_EXTERNAL_LIBS OFF)
|
||||||
SET(GRAPHVIZ_EXECUTABLES ON)
|
SET(GRAPHVIZ_EXECUTABLES ON)
|
||||||
SET(GRAPHVIZ_GENERATE_PER_TARGET OFF)
|
SET(GRAPHVIZ_GENERATE_PER_TARGET OFF)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
CMAKE_MINIMUM_REQUIRED(VERSION 3.5.0)
|
CMAKE_MINIMUM_REQUIRED(VERSION 3.8.0)
|
||||||
|
|
||||||
IF(POLICY CMP0020)
|
IF(POLICY CMP0020)
|
||||||
CMAKE_POLICY(SET CMP0020 NEW)
|
CMAKE_POLICY(SET CMP0020 NEW)
|
||||||
|
@ -37,7 +37,7 @@ ELSE()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
PROJECT(AusweisApp2 VERSION 1.16.1 LANGUAGES ${LANGUAGES})
|
PROJECT(AusweisApp2 VERSION 1.18.2 LANGUAGES ${LANGUAGES})
|
||||||
|
|
||||||
# Set TWEAK if not defined in PROJECT_VERSION above to
|
# Set TWEAK if not defined in PROJECT_VERSION above to
|
||||||
# have a valid tweak version without propagating it
|
# have a valid tweak version without propagating it
|
||||||
|
@ -49,7 +49,8 @@ ENDIF()
|
||||||
IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
|
||||||
SET(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/dist" CACHE PATH "default install path" FORCE)
|
SET(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/dist" CACHE PATH "default install path" FORCE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
|
SET(CMAKE_DIR "${PROJECT_SOURCE_DIR}/cmake")
|
||||||
|
SET(CMAKE_MODULE_PATH "${CMAKE_DIR}")
|
||||||
OPTION(BUILD_SHARED_LIBS "Enable build of shared libraries")
|
OPTION(BUILD_SHARED_LIBS "Enable build of shared libraries")
|
||||||
|
|
||||||
INCLUDE(Helper)
|
INCLUDE(Helper)
|
||||||
|
@ -110,7 +111,7 @@ SET(SRC_DIR ${PROJECT_SOURCE_DIR}/src)
|
||||||
SET(TEST_DIR ${PROJECT_SOURCE_DIR}/test)
|
SET(TEST_DIR ${PROJECT_SOURCE_DIR}/test)
|
||||||
SET(RESOURCES_DIR ${PROJECT_SOURCE_DIR}/resources)
|
SET(RESOURCES_DIR ${PROJECT_SOURCE_DIR}/resources)
|
||||||
SET(PACKAGING_DIR ${RESOURCES_DIR}/packaging)
|
SET(PACKAGING_DIR ${RESOURCES_DIR}/packaging)
|
||||||
SET(COPYRIGHT_TEXT "Ⓒ\; 2014-2018 ${VENDOR}")
|
SET(COPYRIGHT_TEXT "Ⓒ\; 2014-2019 ${VENDOR}")
|
||||||
STRING(REPLACE " \& " " \& " COPYRIGHT_TEXT ${COPYRIGHT_TEXT})
|
STRING(REPLACE " \& " " \& " COPYRIGHT_TEXT ${COPYRIGHT_TEXT})
|
||||||
|
|
||||||
INCLUDE(Tools)
|
INCLUDE(Tools)
|
||||||
|
@ -133,7 +134,7 @@ ADD_SUBDIRECTORY(src)
|
||||||
|
|
||||||
IF("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
|
IF("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
|
||||||
INCLUDE(CTest)
|
INCLUDE(CTest)
|
||||||
CONFIGURE_FILE("${CMAKE_MODULE_PATH}/CTestCustom.cmake.in" "${CMAKE_BINARY_DIR}/CTestCustom.cmake" @ONLY)
|
CONFIGURE_FILE("${CMAKE_DIR}/CTestCustom.cmake.in" "${CMAKE_BINARY_DIR}/CTestCustom.cmake" @ONLY)
|
||||||
CONFIGURE_FILE("${RESOURCES_DIR}/sonar-project.properties.in" "${CMAKE_BINARY_DIR}/sonar-project.properties" @ONLY)
|
CONFIGURE_FILE("${RESOURCES_DIR}/sonar-project.properties.in" "${CMAKE_BINARY_DIR}/sonar-project.properties" @ONLY)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
|
|
@ -1,50 +1,7 @@
|
||||||
Nutzungsbedingungen
|
Nutzungsbedingungen
|
||||||
|
|
||||||
Allgemeines zur Installation
|
Bitte lesen Sie zunächst die Lizenzbestimmungen und deren Ergänzungen für die Überlassung und Nutzung der AusweisApp2 durch. Nachdem Sie diesen zugestimmt haben, können Sie die Installation fortsetzen. Datenschutzrechtliche Hinweise sind unter https://www.ausweisapp.bund.de/datenschutz/ abrufbar.
|
||||||
|
|
||||||
Bitte lesen Sie zunächst die Allgemeinen Geschäftsbedingungen so wie die Lizenzbedingungen für die Überlassung und Nutzung der AusweisApp2 durch. Nachdem Sie zugestimmt haben, können Sie die Installation fortsetzen.
|
|
||||||
|
|
||||||
|
|
||||||
Allgemeine Geschäftsbedingungen
|
|
||||||
|
|
||||||
§ 1 Nutzungsbedingungen und Datenschutzhinweis
|
|
||||||
(1) Diese Allgemeine Geschäftsbedingungen (AGB) des Bundes, vertreten durch das Bundesministerium des Innern, für Bau und Heimat (nachfolgend "Bund") und dem Nutzer gelten für die Überlassung und Nutzung der Software AusweisApp2 (nachfolgend AusweisApp2) und deren neue Versionen, die auf der Grundlage dieser Bedingungen überlassen werden.
|
|
||||||
(2) "Nutzer" im Sinne dieses Vertrages sind natürliche Personen.
|
|
||||||
|
|
||||||
§ 2 Vertragsgegenstand und Unentgeltlichkeit
|
|
||||||
(1) Die AusweisApp2 wird regelmäßig hinsichtlich ihrer Konformität zu den Technischen Richtlinien des Bundesamtes für Sicherheit in der Informationstechnik [TR-03124-2] zertifiziert sowie hinsichtlich ihrer Nutzerfreundlichkeit [EN ISO 9241 Teil 110 Ergonomie Mensch-System-Integration zur Prüfung der Benutzbarkeit und Funktionalität und Trusted Design Guidelines zur Prüfung der Vertrauenswürdigkeit] und auf Barrierefreiheit [BITV 2.0] überprüft.
|
|
||||||
(2) Die AusweisApp2 wird in maschinenlesbarer Form unentgeltlich überlassen. Der Quellcode der AusweisApp2 wird ebenfalls unentgeltlich veröffentlicht. Eine Auflistung der verwendeten Open Source-Bestandteile der AusweisApp2 findet sich im Anhang.
|
|
||||||
(3) Die AusweisApp2 wird von der Governikus GmbH & Co. KG (Governikus) als Erfüllungsgehilfe des Bundes überlassen.
|
|
||||||
|
|
||||||
§ 3 Verwendungszweck
|
|
||||||
Die AusweisApp2 und alle ihre Bestandteile dienen ausschließlich dazu, im Zusammenhang mit der Nutzung der Online-Ausweisfunktion des Personalausweises bzw. des elektronischen Aufenthaltstitels und der Übermittlung der damit verbundenen Daten gemäß den gesetzlichen Vorgaben verwendet zu werden.
|
|
||||||
|
|
||||||
§ 4 Pflichten und Obliegenheiten des Nutzers
|
|
||||||
(1) Der Nutzer verpflichtet sich, die AusweisApp2 entsprechend des in § 3 genannten Verwendungszweckes zu nutzen. Es liegt in seinem Interesse, dass in Verbindung mit der AusweisApp2 genutzte Hard- und Software des Nutzers immer auf dem neuesten Stand der Sicherheitstechnik (System- und Firmware Update, Virenscanner, Firewall usw.) sind.
|
|
||||||
(2) Es liegt im eigenen Interesse des Nutzers aber auch des Bundes, dass stets nur die neueste Version der AusweisApp2 (siehe § 5) verwendet wird.
|
|
||||||
|
|
||||||
§ 5 Pflege und Support
|
|
||||||
(1) Der Bund bietet nach eigenem Ermessen und ohne hierzu verpflichtet zu sein für Teile der AusweisApp2 zusätzliche kostenfreie Supportleistungen in Form von Dokumentationen und online Hilfen auf dem AusweisApp2-Portal im Internet unter der Adresse www.ausweisapp.bund.de an, sowie über die Hotline des Herstellers Governikus unter der E-Mail-Adresse: support@ausweisapp.de und der Tel.-Nr.: +49 1805 348 743. Auch stellt er verfügbare neue Versionen der AusweisApp2 zur Verfügung. Hieraus erwächst jedoch kein zusätzlicher Anspruch auf Mängelbeseitigung, auf Zertifizierung, auf Beibehaltung der Supportleistungen oder der Hotline und auf Überlassung neuer Versionen.
|
|
||||||
(2) Verfügbare neue Versionen der AusweisApp2 können im Internet kostenfrei auf dem AusweisApp2-Portal unter der Adresse www.ausweisapp.bund.de sowie über allgemein zugängliche AppStore heruntergeladen werden.
|
|
||||||
(3) Eventuelle Mängel der AusweisApp2 werden grundsätzlich dadurch behoben, dass der Bund jeweils eine neue Version der AusweisApp2 zum Herunterladen zur Verfügung stellt (siehe § 5 Absatz 1). Eine Pflicht zur Bereitstellung von neuen Versionen ergibt sich daraus grundsätzlich nicht.
|
|
||||||
|
|
||||||
§ 6 Hinweis auf gewerbliche und urheberrechtliche Schutzrechte
|
|
||||||
Die Zeichen AusweisApp2 und die entsprechenden Grafiken sowie das Signet zur Online-Ausweisfunktion sind für den Bund als Marken geschützt.
|
|
||||||
|
|
||||||
§ 7 Datenschutzhinweis
|
|
||||||
(1) Mit dieser Software werden personenbezogene Daten im Sinne des § 3 Absatz 1 des Bundesdatenschutzgesetzes (BDSG) zum Zwecke der Verarbeitung grundsätzlich nicht erhoben.
|
|
||||||
(2) Personenbezogene Daten aus dem Ausweischip werden ausschließlich zum Zweck des elektronischen Identitätsnachweises im Umfang der erteilten Berechtigung nach Einwilligung des Nutzers mit seiner Ausweis-PIN-Eingabe und auf dem Transportweg zwischen dem Ausweischip und dem Diensteanbieter sicher verschlüsselt und auch für Governikus nicht lesbar übertragen.
|
|
||||||
(3) Neben den reinen Daten, die zur Identifizierung/ Authentisierung benötigt werden, erhebt die Software nur mit Einverständnis des Nutzers Daten über die Art und Version der Anwendungsumgebung (Betriebssystem, Lesegeräte usw.) des Nutzers. Diese Daten kann der Nutzer bei Bedarf an Governikus übermitteln, um die ordnungsgemäße Verarbeitung prüfen zu lassen und Fehlern im Verarbeitungsprozess vorzubeugen. Die Nutzung der Daten erfolgt dann im Rahmen des § 14 BDSG durch Governikus im Auftrag des Bundes und nur für den genannten Zweck.
|
|
||||||
(4) Die in der AusweisApp2 enthaltene Selbstauskunft über die im Chip gespeicherten Daten, ist ein Dienst der durch Governikus über das Internet erbracht wird. Die Ausweisdaten werden dabei nur zur Anzeige des Nutzers gebracht und nicht dauerhaft bei Governikus gespeichert oder für andere Zwecke verwendet.
|
|
||||||
|
|
||||||
§ 8 Deutsches Recht
|
|
||||||
Auf diese Nutzungsbedingungen ist ausschließlich deutsches Recht unter Ausschluss des Übereinkommens der Vereinten Nationen über Verträge über den internationalen Warenkauf (CISG) anwendbar.
|
|
||||||
|
|
||||||
|
|
||||||
Anhang
|
|
||||||
|
|
||||||
Eingearbeitete Open Source-Komponenten
|
|
||||||
Qt, OpenSSL und http_parser.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -344,6 +301,68 @@ Unbeschadet besonderer Vereinbarungen zwischen den Parteien gilt Folgendes:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Lizenzergänzungen
|
||||||
|
|
||||||
|
§ 1 Nutzungsbedingungen
|
||||||
|
(1) Diese Allgemeine Geschäftsbedingungen (AGB) des Bundes, vertreten durch das Bundesamt für Sicherheit in der Informationstechnik (nachfolgend "Bund") und dem Nutzer gelten für die Überlassung und Nutzung der Software AusweisApp2 (nachfolgend AusweisApp2) und deren neue Versionen, die auf der Grundlage dieser Bedingungen überlassen werden.
|
||||||
|
(2) "Nutzer" im Sinne dieses Vertrages sind natürliche Personen.
|
||||||
|
|
||||||
|
§ 2 Vertragsgegenstand und Unentgeltlichkeit
|
||||||
|
(1) Die AusweisApp2 wird regelmäßig hinsichtlich ihrer Konformität zu den Technischen Richtlinien des Bundesamtes für Sicherheit in der Informationstechnik [TR-03124-2] zertifiziert sowie hinsichtlich ihrer Nutzerfreundlichkeit [EN ISO 9241 Teil 110 Ergonomie Mensch-System-Integration zur Prüfung der Benutzbarkeit und Funktionalität und Trusted Design Guidelines zur Prüfung der Vertrauenswürdigkeit] und auf Barrierefreiheit [BITV 2.0] überprüft.
|
||||||
|
(2) Die AusweisApp2 wird in maschinenlesbarer Form unentgeltlich überlassen. Der Quellcode der AusweisApp2 wird ebenfalls unentgeltlich veröffentlicht. Eine Auflistung der verwendeten Open Source-Bestandteile der AusweisApp2 findet sich im Anhang.
|
||||||
|
(3) Die AusweisApp2 wird von der Governikus GmbH & Co. KG (Governikus) als Erfüllungsgehilfe des Bundes überlassen.
|
||||||
|
|
||||||
|
§ 3 Verwendungszweck
|
||||||
|
Die AusweisApp2 und alle ihre Bestandteile dienen ausschließlich dazu, im Zusammenhang mit der Nutzung der Online-Ausweisfunktion des Personalausweises bzw. des elektronischen Aufenthaltstitels und der Übermittlung der damit verbundenen Daten gemäß den gesetzlichen Vorgaben verwendet zu werden.
|
||||||
|
|
||||||
|
§ 4 Pflichten und Obliegenheiten des Nutzers
|
||||||
|
(1) Der Nutzer verpflichtet sich, die AusweisApp2 entsprechend des in § 3 genannten Verwendungszweckes zu nutzen. Es liegt in seinem Interesse, dass in Verbindung mit der AusweisApp2 genutzte Hard- und Software des Nutzers immer auf dem neuesten Stand der Sicherheitstechnik (System- und Firmware Update, Virenscanner, Firewall usw.) sind.
|
||||||
|
(2) Es liegt im eigenen Interesse des Nutzers aber auch des Bundes, dass stets nur die neueste Version der AusweisApp2 (siehe § 5) verwendet wird.
|
||||||
|
|
||||||
|
§ 5 Pflege und Support
|
||||||
|
(1) Der Bund bietet nach eigenem Ermessen und ohne hierzu verpflichtet zu sein für Teile der AusweisApp2 zusätzliche kostenfreie Supportleistungen in Form von Dokumentationen und online Hilfen auf dem AusweisApp2-Portal im Internet unter der Adresse www.ausweisapp.bund.de an, sowie über die Hotline des Herstellers Governikus unter der E-Mail-Adresse: support@ausweisapp.de und der Tel.-Nr.: +49 421 204 95-995. Auch stellt er verfügbare neue Versionen der AusweisApp2 zur Verfügung. Hieraus erwächst jedoch kein Anspruch auf Mängelbeseitigung, auf Zertifizierung, auf Beibehaltung der Supportleistungen oder der Hotline und auf Überlassung neuer Versionen.
|
||||||
|
(2) Verfügbare neue Versionen der AusweisApp2 können im Internet kostenfrei auf dem AusweisApp2-Portal unter der Adresse www.ausweisapp.bund.de sowie über allgemein zugängliche AppStore heruntergeladen werden.
|
||||||
|
(3) Eventuelle Mängel der AusweisApp2 werden grundsätzlich dadurch behoben, dass der Bund jeweils eine neue Version der AusweisApp2 zum Herunterladen zur Verfügung stellt (siehe § 5 Absatz 1). Eine Pflicht zur Bereitstellung von neuen Versionen ergibt sich daraus nicht.
|
||||||
|
|
||||||
|
§ 6 Hinweis auf gewerbliche und urheberrechtliche Schutzrechte
|
||||||
|
Die Zeichen AusweisApp2 und die entsprechenden Grafiken sowie das Signet zur Online-Ausweisfunktion sind für den Bund als Marken geschützt.
|
||||||
|
|
||||||
|
§ 7 Deutsches Recht
|
||||||
|
Auf diese Nutzungsbedingungen ist ausschließlich deutsches Recht unter Ausschluss des Übereinkommens der Vereinten Nationen über Verträge über den internationalen Warenkauf (CISG) anwendbar.
|
||||||
|
|
||||||
|
|
||||||
|
Anhang
|
||||||
|
|
||||||
|
Ergänzende Lizenzhinweise
|
||||||
|
|
||||||
|
Die verwendeten Open-Source-Bibliotheken unterliegen den folgenden Nutzungsbedingungen:
|
||||||
|
|
||||||
|
OpenSSL
|
||||||
|
Lizenz: OpenSSL license & SSLeay license
|
||||||
|
Version: 1.1.1c
|
||||||
|
Adresse: https://www.openssl.org/
|
||||||
|
|
||||||
|
Qt
|
||||||
|
Lizenz: LGPL v3
|
||||||
|
Version: 5.12.4
|
||||||
|
Adresse: https://www.qt.io/
|
||||||
|
|
||||||
|
http_parser
|
||||||
|
Lizenz: MIT
|
||||||
|
Version: 2.9.2
|
||||||
|
Adresse: https://github.com/nodejs/http-parser/
|
||||||
|
|
||||||
|
Android Support Library V4
|
||||||
|
Lizenz: Apache 2.0
|
||||||
|
Version: 21.0.3
|
||||||
|
Adresse: https://developer.android.com/topic/libraries/support-library/
|
||||||
|
|
||||||
|
|
||||||
|
Die Lizenztexte lauten in ihrer originalen Fassung wie folgt:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Copyright (c) 1998-2017 The OpenSSL Project. All rights reserved.
|
Copyright (c) 1998-2017 The OpenSSL Project. All rights reserved.
|
||||||
|
|
||||||
|
@ -459,33 +478,6 @@ copied and put under another distribution licence
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Ergänzende Linzenzhinweise
|
|
||||||
|
|
||||||
Die verwendeten OpenSource-Bibliotheken unterliegen den folgenden Nutzungsbedingungen:
|
|
||||||
|
|
||||||
Qt
|
|
||||||
Lizenz: LGPL v3
|
|
||||||
Version: 5.11.2
|
|
||||||
Adresse: https://www.qt.io/
|
|
||||||
|
|
||||||
http_parser
|
|
||||||
Lizenz: MIT
|
|
||||||
Version: 2.8.1
|
|
||||||
Adresse: https://github.com/nodejs/http-parser/
|
|
||||||
|
|
||||||
Android Support Library V4
|
|
||||||
Lizenz: Apache 2.0
|
|
||||||
Version: 21.0.3
|
|
||||||
Adresse: https://developer.android.com/topic/libraries/support-library/
|
|
||||||
|
|
||||||
|
|
||||||
Die Lizenztexte lauten in ihrer originalen Fassung wie folgt:
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
|
||||||
The Qt Toolkit is Copyright (C) 2016 The Qt Company Ltd.
|
The Qt Toolkit is Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
@ -867,28 +859,3 @@ IN THE SOFTWARE.
|
||||||
of your accepting any such warranty or additional liability.
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
APPENDIX: How to apply the Apache License to your work.
|
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following
|
|
||||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
||||||
replaced with your own identifying information. (Don't include
|
|
||||||
the brackets!) The text should be enclosed in the appropriate
|
|
||||||
comment syntax for the file format. We also recommend that a
|
|
||||||
file or class name and description of purpose be included on the
|
|
||||||
same "printed page" as the copyright notice for easier
|
|
||||||
identification within third-party archives.
|
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
|
|
84
LICENSE.txt
|
@ -294,6 +294,38 @@ Unbeschadet besonderer Vereinbarungen zwischen den Parteien gilt Folgendes:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Anhang
|
||||||
|
|
||||||
|
Ergänzende Lizenzhinweise
|
||||||
|
|
||||||
|
Die verwendeten Open-Source-Bibliotheken unterliegen den folgenden Nutzungsbedingungen:
|
||||||
|
|
||||||
|
OpenSSL
|
||||||
|
Lizenz: OpenSSL license & SSLeay license
|
||||||
|
Version: 1.1.1c
|
||||||
|
Adresse: https://www.openssl.org/
|
||||||
|
|
||||||
|
Qt
|
||||||
|
Lizenz: LGPL v3
|
||||||
|
Version: 5.12.4
|
||||||
|
Adresse: https://www.qt.io/
|
||||||
|
|
||||||
|
http_parser
|
||||||
|
Lizenz: MIT
|
||||||
|
Version: 2.9.2
|
||||||
|
Adresse: https://github.com/nodejs/http-parser/
|
||||||
|
|
||||||
|
Android Support Library V4
|
||||||
|
Lizenz: Apache 2.0
|
||||||
|
Version: 21.0.3
|
||||||
|
Adresse: https://developer.android.com/topic/libraries/support-library/
|
||||||
|
|
||||||
|
|
||||||
|
Die Lizenztexte lauten in ihrer originalen Fassung wie folgt:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Copyright (c) 1998-2017 The OpenSSL Project. All rights reserved.
|
Copyright (c) 1998-2017 The OpenSSL Project. All rights reserved.
|
||||||
|
|
||||||
|
@ -409,33 +441,6 @@ copied and put under another distribution licence
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Ergänzende Linzenzhinweise
|
|
||||||
|
|
||||||
Die verwendeten OpenSource-Bibliotheken unterliegen den folgenden Nutzungsbedingungen:
|
|
||||||
|
|
||||||
Qt
|
|
||||||
Lizenz: LGPL v3
|
|
||||||
Version: 5.11.2
|
|
||||||
Adresse: https://www.qt.io/
|
|
||||||
|
|
||||||
http_parser
|
|
||||||
Lizenz: MIT
|
|
||||||
Version: 2.8.1
|
|
||||||
Adresse: https://github.com/nodejs/http-parser/
|
|
||||||
|
|
||||||
Android Support Library V4
|
|
||||||
Lizenz: Apache 2.0
|
|
||||||
Version: 21.0.3
|
|
||||||
Adresse: https://developer.android.com/topic/libraries/support-library/
|
|
||||||
|
|
||||||
|
|
||||||
Die Lizenztexte lauten in ihrer originalen Fassung wie folgt:
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
|
||||||
The Qt Toolkit is Copyright (C) 2016 The Qt Company Ltd.
|
The Qt Toolkit is Copyright (C) 2016 The Qt Company Ltd.
|
||||||
|
@ -817,28 +822,3 @@ IN THE SOFTWARE.
|
||||||
of your accepting any such warranty or additional liability.
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
APPENDIX: How to apply the Apache License to your work.
|
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following
|
|
||||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
||||||
replaced with your own identifying information. (Don't include
|
|
||||||
the brackets!) The text should be enclosed in the appropriate
|
|
||||||
comment syntax for the file format. We also recommend that a
|
|
||||||
file or class name and description of purpose be included on the
|
|
||||||
same "printed page" as the copyright notice for easier
|
|
||||||
identification within third-party archives.
|
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
|
|
|
@ -134,7 +134,7 @@ Für iOS wird die AusweisApp2 mittels XCode gebaut!
|
||||||
|
|
||||||
$ cd build
|
$ cd build
|
||||||
$ cmake -DCMAKE_PREFIX_PATH=/Users/governikus/Toolchain/dist -DCMAKE_TOOLCHAIN_FILE=../AusweisApp2/cmake/iOS.toolchain.cmake -DCMAKE_BUILD_TYPE=release ../AusweisApp2 -GXcode
|
$ cmake -DCMAKE_PREFIX_PATH=/Users/governikus/Toolchain/dist -DCMAKE_TOOLCHAIN_FILE=../AusweisApp2/cmake/iOS.toolchain.cmake -DCMAKE_BUILD_TYPE=release ../AusweisApp2 -GXcode
|
||||||
$ xcodebuild -target install -configuration Release
|
$ xcodebuild -configuration Release
|
||||||
$ xcodebuild -target ipa -configuration Release
|
$ xcodebuild -target ipa -configuration Release
|
||||||
|
|
||||||
|
|
||||||
|
|
31
appveyor.yml
|
@ -3,29 +3,22 @@ version: "{build}"
|
||||||
environment:
|
environment:
|
||||||
matrix:
|
matrix:
|
||||||
- PlatformToolset: mingw-w64
|
- PlatformToolset: mingw-w64
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
QTPath: C:\Qt\5.11\mingw53_32
|
QTPath: C:\Qt\5.12\mingw73_64
|
||||||
OPENSSLPath: C:\OpenSSL-v11-Win32
|
OPENSSLPath: C:\OpenSSL-v111-Win64
|
||||||
|
|
||||||
- PlatformToolset: v140
|
- PlatformToolset: v141
|
||||||
platform: x64
|
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
|
||||||
QTPath: C:\Qt\5.11\msvc2015_64
|
|
||||||
OPENSSLPath: C:\OpenSSL-v11-Win64
|
|
||||||
ARCHI: amd64
|
|
||||||
|
|
||||||
- PlatformToolset: v140
|
|
||||||
platform: Win32
|
platform: Win32
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
QTPath: C:\Qt\5.11\msvc2015
|
QTPath: C:\Qt\5.12\msvc2017
|
||||||
OPENSSLPath: C:\OpenSSL-v11-Win32
|
OPENSSLPath: C:\OpenSSL-v111-Win32
|
||||||
ARCHI: x86
|
ARCHI: x86
|
||||||
|
|
||||||
- PlatformToolset: v141
|
- PlatformToolset: v141
|
||||||
platform: x64
|
platform: x64
|
||||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
QTPath: C:\Qt\5.11\msvc2017_64
|
QTPath: C:\Qt\5.12\msvc2017_64
|
||||||
OPENSSLPath: C:\OpenSSL-v11-Win64
|
OPENSSLPath: C:\OpenSSL-v111-Win64
|
||||||
ARCHI: amd64
|
ARCHI: amd64
|
||||||
|
|
||||||
configuration:
|
configuration:
|
||||||
|
@ -33,8 +26,7 @@ configuration:
|
||||||
#- Debug
|
#- Debug
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- if "%PlatformToolset%"=="mingw-w64" set PATH=C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\bin;%PATH:C:\Program Files\Git\usr\bin;=%
|
- if "%PlatformToolset%"=="mingw-w64" set PATH=C:\mingw-w64\x86_64-7.3.0-posix-seh-rt_v5-rev0\mingw64\bin;%PATH:C:\Program Files\Git\usr\bin;=%
|
||||||
- if "%PlatformToolset%"=="v140" call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %archi%
|
|
||||||
- if "%PlatformToolset%"=="v141" call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" %archi%
|
- if "%PlatformToolset%"=="v141" call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" %archi%
|
||||||
|
|
||||||
build:
|
build:
|
||||||
|
@ -47,7 +39,6 @@ before_build:
|
||||||
$generator = switch ($env:PLATFORMTOOLSET)
|
$generator = switch ($env:PLATFORMTOOLSET)
|
||||||
{
|
{
|
||||||
"v141" {"Visual Studio 15 2017"}
|
"v141" {"Visual Studio 15 2017"}
|
||||||
"v140" {"Visual Studio 14 2015"}
|
|
||||||
"mingw-w64" {"MinGW Makefiles"}
|
"mingw-w64" {"MinGW Makefiles"}
|
||||||
}
|
}
|
||||||
if ($env:PLATFORM -eq "x64")
|
if ($env:PLATFORM -eq "x64")
|
||||||
|
@ -58,7 +49,7 @@ before_build:
|
||||||
build_script:
|
build_script:
|
||||||
- cd "%APPVEYOR_BUILD_FOLDER%"
|
- cd "%APPVEYOR_BUILD_FOLDER%"
|
||||||
- set OPENSSL_ROOT=%OPENSSLPath%
|
- set OPENSSL_ROOT=%OPENSSLPath%
|
||||||
- set PATH=%QTPATH%;%QTPATH%/bin;%OPENSSLPath%;%PATH%
|
- set PATH=%PATH%;%QTPATH%;%QTPATH%/bin;%OPENSSLPath%
|
||||||
- echo %PATH%
|
- echo %PATH%
|
||||||
- echo %OPENSSL_ROOT%
|
- echo %OPENSSL_ROOT%
|
||||||
- mkdir _build
|
- mkdir _build
|
||||||
|
@ -76,7 +67,7 @@ build_script:
|
||||||
|
|
||||||
test_script:
|
test_script:
|
||||||
- cd "%APPVEYOR_BUILD_FOLDER%"/_build
|
- cd "%APPVEYOR_BUILD_FOLDER%"/_build
|
||||||
- set PATH=%QTPATH%;%QTPATH%/bin;%PATH%
|
- set PATH=%PATH%;%QTPATH%;%QTPATH%/bin
|
||||||
- echo %PATH%
|
- echo %PATH%
|
||||||
- ctest --output-on-failure -C "%CONFIGURATION%"
|
- ctest --output-on-failure -C "%CONFIGURATION%"
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,11 @@ IF(MAC OR LINUX OR WIN32)
|
||||||
STRING(TIMESTAMP APPCAST_DATE "%Y-%m-%dT%H:%M:%S")
|
STRING(TIMESTAMP APPCAST_DATE "%Y-%m-%dT%H:%M:%S")
|
||||||
|
|
||||||
FOREACH(filePath ${_files})
|
FOREACH(filePath ${_files})
|
||||||
FILE_SIZE(fileSize ${filePath})
|
IF(CMAKE_VERSION VERSION_LESS "3.14")
|
||||||
|
FILE_SIZE(fileSize ${filePath})
|
||||||
|
ELSE()
|
||||||
|
FILE(SIZE ${filePath} fileSize)
|
||||||
|
ENDIF()
|
||||||
GET_FILENAME_COMPONENT(file ${filePath} NAME)
|
GET_FILENAME_COMPONENT(file ${filePath} NAME)
|
||||||
|
|
||||||
IF(NOT DEFINED fileSize)
|
IF(NOT DEFINED fileSize)
|
||||||
|
|
|
@ -6,11 +6,15 @@ ADD_DEFINITIONS(-DQT_NO_FOREACH)
|
||||||
ADD_DEFINITIONS(-DQT_NO_KEYWORDS)
|
ADD_DEFINITIONS(-DQT_NO_KEYWORDS)
|
||||||
ADD_DEFINITIONS(-DQT_NO_EXCEPTIONS)
|
ADD_DEFINITIONS(-DQT_NO_EXCEPTIONS)
|
||||||
|
|
||||||
|
IF(NOT MSVC AND NOT CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
|
||||||
|
ADD_DEFINITIONS(-DQT_STRICT_ITERATORS)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
IF(CMAKE_VERSION VERSION_LESS "3.12")
|
IF(CMAKE_VERSION VERSION_LESS "3.12")
|
||||||
ADD_DEFINITIONS(-DQT_RESTRICTED_CAST_FROM_ASCII)
|
ADD_DEFINITIONS(-DQT_RESTRICTED_CAST_FROM_ASCII)
|
||||||
ELSE()
|
ELSE()
|
||||||
ADD_COMPILE_DEFINITIONS($<$<CONFIG:Debug>:QT_RESTRICTED_CAST_FROM_ASCII>)
|
ADD_COMPILE_DEFINITIONS($<$<CONFIG:Debug>:QT_RESTRICTED_CAST_FROM_ASCII>)
|
||||||
ADD_COMPILE_DEFINITIONS($<$<CONFIG:Release>:QT_NO_CAST_FROM_ASCII>)
|
ADD_COMPILE_DEFINITIONS($<$<NOT:$<CONFIG:Debug>>:QT_NO_CAST_FROM_ASCII>)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(QT_VENDOR STREQUAL "Governikus")
|
IF(QT_VENDOR STREQUAL "Governikus")
|
||||||
|
@ -18,7 +22,7 @@ IF(QT_VENDOR STREQUAL "Governikus")
|
||||||
ADD_DEFINITIONS(-DQT_DEPRECATED_WARNINGS)
|
ADD_DEFINITIONS(-DQT_DEPRECATED_WARNINGS)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
SET(CMAKE_CXX_STANDARD 11)
|
SET(CMAKE_CXX_STANDARD 17)
|
||||||
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
|
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
SET(CMAKE_CXX_EXTENSIONS OFF)
|
SET(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
@ -34,22 +38,23 @@ IF(MSVC)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ADD_FLAG(/Qspectre)
|
ADD_FLAG(/Qspectre)
|
||||||
ELSE()
|
ELSE()
|
||||||
ADD_DEFINITIONS(-DQT_STRICT_ITERATORS)
|
|
||||||
|
|
||||||
STRING(REPLACE "-fexceptions" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
STRING(REPLACE "-fexceptions" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
STRING(REPLACE "-frtti" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
STRING(REPLACE "-frtti" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wcast-qual -Wshadow")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wcast-qual -Wshadow")
|
||||||
SET(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -g")
|
SET(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -g")
|
||||||
|
|
||||||
IF(ANDROID AND CMAKE_ANDROID_ARCH_ABI STREQUAL "arm64-v8a")
|
IF(ANDROID AND CMAKE_ANDROID_ARCH_ABI STREQUAL "arm64-v8a")
|
||||||
SET(USE_LD bfd)
|
SET(PREFER_LD bfd CACHE STRING "")
|
||||||
ELSE()
|
ELSE()
|
||||||
SET(USE_LD gold)
|
SET(PREFER_LD gold CACHE STRING "")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
ADD_FLAG(-fuse-ld=${USE_LD} VAR CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS LINK -fuse-ld=${USE_LD})
|
ADD_FLAG(-fuse-ld=${PREFER_LD} VAR CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS USE_SAME_FOR_LINKER USE_LINKER_ONLY)
|
||||||
ADD_FLAG(-flto VAR CMAKE_EXE_LINKER_FLAGS_RELEASE CMAKE_SHARED_LINKER_FLAGS_RELEASE LINK -flto)
|
ADD_FLAG(-flto VAR CMAKE_EXE_LINKER_FLAGS_RELEASE CMAKE_SHARED_LINKER_FLAGS_RELEASE USE_SAME_FOR_LINKER)
|
||||||
ADD_FLAG(-fno-rtti VAR CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_MINSIZEREL)
|
|
||||||
|
IF(NOT CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
|
||||||
|
ADD_FLAG(-fno-rtti VAR CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_MINSIZEREL)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
ADD_FLAG(-fno-exceptions)
|
ADD_FLAG(-fno-exceptions)
|
||||||
ADD_FLAG(-fstack-protector-strong -fstack-protector)
|
ADD_FLAG(-fstack-protector-strong -fstack-protector)
|
||||||
|
@ -74,6 +79,8 @@ ELSE()
|
||||||
ADD_FLAG(-Wunreachable-code-aggressive)
|
ADD_FLAG(-Wunreachable-code-aggressive)
|
||||||
ADD_FLAG(-Wnewline-eof)
|
ADD_FLAG(-Wnewline-eof)
|
||||||
ADD_FLAG(-Wdate-time)
|
ADD_FLAG(-Wdate-time)
|
||||||
|
ADD_FLAG(-Wunused)
|
||||||
|
ADD_FLAG(-Wunused-template)
|
||||||
ADD_FLAG(-Wno-gnu-zero-variadic-macro-arguments) # Qt (qDebug) is not compatible
|
ADD_FLAG(-Wno-gnu-zero-variadic-macro-arguments) # Qt (qDebug) is not compatible
|
||||||
|
|
||||||
|
|
||||||
|
@ -119,7 +126,7 @@ ELSE()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(APPLE AND NOT IOS)
|
IF(APPLE AND NOT IOS)
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ObjC++ -mmacosx-version-min=10.11")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ObjC++ -mmacosx-version-min=10.12")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
|
@ -131,5 +138,5 @@ INCLUDE(CompilerFlagsPersoSim)
|
||||||
OPTION(COVERAGE "Enable code coverage")
|
OPTION(COVERAGE "Enable code coverage")
|
||||||
IF(COVERAGE)
|
IF(COVERAGE)
|
||||||
MESSAGE(STATUS "Enable code coverage instrumentation")
|
MESSAGE(STATUS "Enable code coverage instrumentation")
|
||||||
ADD_FLAG(--coverage LINK --coverage VAR CMAKE_CXX_FLAGS_DEBUG)
|
ADD_FLAG(--coverage VAR CMAKE_CXX_FLAGS_DEBUG USE_SAME_FOR_LINKER)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
SET(REMOTE_CONFIG_URL_PROD https://appl.governikus-asp.de/ausweisapp2)
|
SET(REMOTE_CONFIG_URL_PROD https://appl.governikus-asp.de/ausweisapp2)
|
||||||
IF(JENKINS_APPCAST)
|
IF(JENKINS_APPCAST)
|
||||||
SET(REMOTE_CONFIG_URL https://vtf-aajenkins.tf.bos-test.de/job/${JENKINS_APPCAST}/lastSuccessfulBuild/artifact CACHE STRING "Remote config download URL" FORCE)
|
SET(REMOTE_CONFIG_URL https://ausweisapp-ci.govkg.de/job/${JENKINS_APPCAST}/lastSuccessfulBuild/artifact CACHE STRING "Remote config download URL" FORCE)
|
||||||
ELSE()
|
ELSE()
|
||||||
SET(REMOTE_CONFIG_URL ${REMOTE_CONFIG_URL_PROD} CACHE STRING "Remote config download URL" FORCE)
|
SET(REMOTE_CONFIG_URL ${REMOTE_CONFIG_URL_PROD} CACHE STRING "Remote config download URL" FORCE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
@ -21,7 +21,4 @@ FUNCTION(CONFIGURE_DEFAULT_FILES _destination)
|
||||||
|
|
||||||
# Copy secure storage file, so that the AusweisApp2 can be started from the build directory.
|
# Copy secure storage file, so that the AusweisApp2 can be started from the build directory.
|
||||||
CONFIGURE_FILE(${RESOURCES_DIR}/config.json.in ${_destination}/config.json @ONLY)
|
CONFIGURE_FILE(${RESOURCES_DIR}/config.json.in ${_destination}/config.json @ONLY)
|
||||||
|
|
||||||
# Copy qtlogging.ini file
|
|
||||||
CONFIGURE_FILE(${RESOURCES_DIR}/qtlogging.ini ${_destination}/qtlogging.ini COPYONLY)
|
|
||||||
ENDFUNCTION()
|
ENDFUNCTION()
|
||||||
|
|
|
@ -3,7 +3,9 @@ INCLUDE(CheckCXXCompilerFlag)
|
||||||
# Check if a compiler flag is supported by current compiler.
|
# Check if a compiler flag is supported by current compiler.
|
||||||
#
|
#
|
||||||
# Options
|
# Options
|
||||||
# NOQUOTES: Do not add quotes to the variable (not used if it is a TARGET)
|
# NOQUOTES: Do not add quotes to the variable (not used if it is a TARGET).
|
||||||
|
# USE_SAME_FOR_LINKER: Use flag value for linker, too.
|
||||||
|
# USE_LINKER_ONLY: Use flag for linker only. Only recognized for USE_SAME_FOR_LINKER.
|
||||||
#
|
#
|
||||||
# Parameter
|
# Parameter
|
||||||
# NAME: Add a human readable name. This is for configure output only to
|
# NAME: Add a human readable name. This is for configure output only to
|
||||||
|
@ -15,7 +17,7 @@ INCLUDE(CheckCXXCompilerFlag)
|
||||||
# If VAR parameter is a cmake TARGET the compiler flag will be added
|
# If VAR parameter is a cmake TARGET the compiler flag will be added
|
||||||
# to the COMPILE_FLAGS property of this TARGET only.
|
# to the COMPILE_FLAGS property of this TARGET only.
|
||||||
FUNCTION(ADD_FLAG)
|
FUNCTION(ADD_FLAG)
|
||||||
SET(options NOQUOTES)
|
SET(options NOQUOTES USE_SAME_FOR_LINKER USE_LINKER_ONLY)
|
||||||
SET(oneValueArgs NAME)
|
SET(oneValueArgs NAME)
|
||||||
SET(multiValueArgs LINK VAR)
|
SET(multiValueArgs LINK VAR)
|
||||||
cmake_parse_arguments(_PARAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
cmake_parse_arguments(_PARAM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||||
|
@ -36,7 +38,30 @@ FUNCTION(ADD_FLAG)
|
||||||
STRING(REPLACE "-" "_" flagname ${flagname})
|
STRING(REPLACE "-" "_" flagname ${flagname})
|
||||||
STRING(REPLACE " " "_" flagname ${flagname})
|
STRING(REPLACE " " "_" flagname ${flagname})
|
||||||
|
|
||||||
CHECK_CXX_COMPILER_FLAG(${flag} ${flagname})
|
# GCC will ignore unknown warning options when used in the -Wno- form. It will complain
|
||||||
|
# about it though, if something else goes wrong. To check if this is a warning which can be
|
||||||
|
# disabled, we remove the negation for the test only:
|
||||||
|
STRING(REPLACE "-Wno-" "-W" flagtest ${flag})
|
||||||
|
|
||||||
|
# This enforces warnings like "-Wunused-command-line-argument" to fail
|
||||||
|
# the check.
|
||||||
|
SET(errorflag "")
|
||||||
|
IF(NOT MSVC)
|
||||||
|
SET(errorflag "-Werror")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(_PARAM_USE_SAME_FOR_LINKER)
|
||||||
|
IF(CMAKE_VERSION VERSION_LESS "3.14")
|
||||||
|
SET(CMAKE_REQUIRED_LIBRARIES ${_PARAM_LINK} ${flagtest})
|
||||||
|
ELSE()
|
||||||
|
SET(CMAKE_REQUIRED_LINK_OPTIONS ${_PARAM_LINK} ${flagtest})
|
||||||
|
ENDIF()
|
||||||
|
IF(_PARAM_USE_LINKER_ONLY)
|
||||||
|
SET(flagtest "")
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
CHECK_CXX_COMPILER_FLAG("${flagtest} ${errorflag}" ${flagname})
|
||||||
IF(${flagname})
|
IF(${flagname})
|
||||||
FOREACH(var ${_PARAM_VAR})
|
FOREACH(var ${_PARAM_VAR})
|
||||||
IF (${var} MATCHES "^AusweisApp")
|
IF (${var} MATCHES "^AusweisApp")
|
||||||
|
@ -267,25 +292,27 @@ IF((WIN32 AND NOT WINDOWS_STORE) OR LINUX OR MAC OR CYGWIN OR BSD)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
FUNCTION(FILE_SIZE _outSize _file)
|
IF(CMAKE_VERSION VERSION_LESS "3.14") # Use FILE(SIZE)
|
||||||
IF(LINUX)
|
FUNCTION(FILE_SIZE _outSize _file)
|
||||||
SET(SIZE_COMMAND stat -c "%s" "${_file}")
|
IF(LINUX)
|
||||||
ELSEIF(MAC)
|
SET(SIZE_COMMAND stat -c "%s" "${_file}")
|
||||||
SET(SIZE_COMMAND stat -f "%z" "${_file}")
|
ELSEIF(MAC)
|
||||||
ELSE()
|
SET(SIZE_COMMAND stat -f "%z" "${_file}")
|
||||||
RETURN()
|
ELSE()
|
||||||
ENDIF()
|
RETURN()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
EXECUTE_PROCESS(COMMAND ${SIZE_COMMAND}
|
EXECUTE_PROCESS(COMMAND ${SIZE_COMMAND}
|
||||||
OUTPUT_VARIABLE SIZE_OUTPUT
|
OUTPUT_VARIABLE SIZE_OUTPUT
|
||||||
RESULT_VARIABLE SIZE_RESULT
|
RESULT_VARIABLE SIZE_RESULT
|
||||||
ERROR_QUIET
|
ERROR_QUIET
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
|
||||||
IF(${SIZE_RESULT} EQUAL 0)
|
IF(${SIZE_RESULT} EQUAL 0)
|
||||||
SET(${_outSize} ${SIZE_OUTPUT} PARENT_SCOPE)
|
SET(${_outSize} ${SIZE_OUTPUT} PARENT_SCOPE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDFUNCTION()
|
ENDFUNCTION()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
IF(NOT COMMAND FIND_HOST_PACKAGE)
|
IF(NOT COMMAND FIND_HOST_PACKAGE)
|
||||||
MACRO(FIND_HOST_PACKAGE)
|
MACRO(FIND_HOST_PACKAGE)
|
||||||
|
@ -350,6 +377,7 @@ IF(WIN32)
|
||||||
|
|
||||||
IF(WIN_TIMESTAMP)
|
IF(WIN_TIMESTAMP)
|
||||||
IF(NOT WIN_TIMESTAMP_URL)
|
IF(NOT WIN_TIMESTAMP_URL)
|
||||||
|
# http://rfc3161timestamp.globalsign.com/advanced
|
||||||
SET(WIN_TIMESTAMP_URL http://timestamp.digicert.com)
|
SET(WIN_TIMESTAMP_URL http://timestamp.digicert.com)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
SET(SIGNTOOL_PARAMS ${SIGNTOOL_PARAMS} /tr ${WIN_TIMESTAMP_URL} /td ${WIN_SIGN_HASHALGO})
|
SET(SIGNTOOL_PARAMS ${SIGNTOOL_PARAMS} /tr ${WIN_TIMESTAMP_URL} /td ${WIN_SIGN_HASHALGO})
|
||||||
|
|
|
@ -40,17 +40,19 @@ SET(DEPENDENCY_CHECK "
|
||||||
|
|
||||||
|
|
||||||
IF(WIN32)
|
IF(WIN32)
|
||||||
IF(MSVC)
|
IF(MSVC OR CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
|
||||||
SET(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION .)
|
SET(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION .)
|
||||||
IF(NOT CMAKE_VERSION VERSION_LESS "3.6")
|
SET(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
|
||||||
SET(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
|
|
||||||
ENDIF()
|
|
||||||
INCLUDE(InstallRequiredSystemLibraries)
|
INCLUDE(InstallRequiredSystemLibraries)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(TARGET Qt5::Qml)
|
IF(TARGET Qt5::Qml)
|
||||||
|
FETCH_TARGET_LOCATION(libEgl "Qt5::Gui_EGL")
|
||||||
|
FETCH_TARGET_LOCATION(libGLES "Qt5::Gui_GLESv2")
|
||||||
FETCH_TARGET_LOCATION(libQuickControls2 "Qt5::QuickControls2")
|
FETCH_TARGET_LOCATION(libQuickControls2 "Qt5::QuickControls2")
|
||||||
INSTALL(FILES ${libQuickControls2} DESTINATION . COMPONENT Runtime)
|
INSTALL(FILES ${libQuickControls2} DESTINATION . COMPONENT Runtime)
|
||||||
|
INSTALL(FILES ${libEgl} DESTINATION . COMPONENT Runtime)
|
||||||
|
INSTALL(FILES ${libGLES} DESTINATION . COMPONENT Runtime)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
FETCH_TARGET_LOCATION(libSvg "Qt5::Svg")
|
FETCH_TARGET_LOCATION(libSvg "Qt5::Svg")
|
||||||
FETCH_TARGET_LOCATION(pluginSvg "Qt5::QSvgPlugin")
|
FETCH_TARGET_LOCATION(pluginSvg "Qt5::QSvgPlugin")
|
||||||
|
@ -148,7 +150,6 @@ ELSEIF(APPLE AND NOT IOS)
|
||||||
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtNetwork.framework")
|
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtNetwork.framework")
|
||||||
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtSvg.framework")
|
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtSvg.framework")
|
||||||
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtWidgets.framework")
|
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtWidgets.framework")
|
||||||
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtPrintSupport.framework") # remove if disabled in Qt
|
|
||||||
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtWebSockets.framework")
|
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtWebSockets.framework")
|
||||||
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtConcurrent.framework")
|
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtConcurrent.framework")
|
||||||
IF(TARGET Qt5::Qml)
|
IF(TARGET Qt5::Qml)
|
||||||
|
@ -156,6 +157,9 @@ ELSEIF(APPLE AND NOT IOS)
|
||||||
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuick.framework")
|
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuick.framework")
|
||||||
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickControls2.framework")
|
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickControls2.framework")
|
||||||
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickTemplates2.framework")
|
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickTemplates2.framework")
|
||||||
|
IF(NOT "${Qt5Core_VERSION}" VERSION_LESS "5.12")
|
||||||
|
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtQuickShapes.framework")
|
||||||
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
IF(TARGET Qt5::Bluetooth)
|
IF(TARGET Qt5::Bluetooth)
|
||||||
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtBluetooth.framework")
|
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/Frameworks/QtBluetooth.framework")
|
||||||
|
@ -163,8 +167,13 @@ ELSEIF(APPLE AND NOT IOS)
|
||||||
|
|
||||||
FETCH_TARGET_LOCATION(opensslCryptoName "OpenSSL::Crypto" NAME)
|
FETCH_TARGET_LOCATION(opensslCryptoName "OpenSSL::Crypto" NAME)
|
||||||
FETCH_TARGET_LOCATION(opensslSslName "OpenSSL::SSL" NAME)
|
FETCH_TARGET_LOCATION(opensslSslName "OpenSSL::SSL" NAME)
|
||||||
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/MacOS/${opensslCryptoName}")
|
IF(CMAKE_VERSION VERSION_LESS "3.13")
|
||||||
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "/Contents/MacOS/${opensslSslName}")
|
SET(OPENSSL_LIB_LOCATION "/Contents/MacOS")
|
||||||
|
ELSE()
|
||||||
|
SET(OPENSSL_LIB_LOCATION "/Contents/Frameworks")
|
||||||
|
ENDIF()
|
||||||
|
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "${OPENSSL_LIB_LOCATION}/${opensslCryptoName}")
|
||||||
|
LIST(APPEND ADDITIONAL_BUNDLE_FILES_TO_SIGN "${OPENSSL_LIB_LOCATION}/${opensslSslName}")
|
||||||
|
|
||||||
# set it to parent scope to be able to access it from Packaging.cmake
|
# set it to parent scope to be able to access it from Packaging.cmake
|
||||||
SET(ADDITIONAL_BUNDLE_FILES_TO_SIGN ${ADDITIONAL_BUNDLE_FILES_TO_SIGN} PARENT_SCOPE)
|
SET(ADDITIONAL_BUNDLE_FILES_TO_SIGN ${ADDITIONAL_BUNDLE_FILES_TO_SIGN} PARENT_SCOPE)
|
||||||
|
@ -201,14 +210,18 @@ ELSEIF(ANDROID)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
LIST(APPEND JAVA_FILES "${_java_file}")
|
LIST(APPEND JAVA_FILES "${_java_file}")
|
||||||
ENDFOREACH()
|
ENDFOREACH()
|
||||||
|
|
||||||
|
INSTALL(FILES ${PACKAGING_DIR}/android/res/values/strings.xml DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/values COMPONENT Runtime)
|
||||||
ELSE()
|
ELSE()
|
||||||
SET(ANDROID_MANIFEST AndroidManifest.xml.apk.in)
|
SET(ANDROID_MANIFEST AndroidManifest.xml.apk.in)
|
||||||
|
|
||||||
FOREACH(entry ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi)
|
FOREACH(entry ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi)
|
||||||
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/${entry}/${ANDROID_LAUNCHER_ICON} DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/drawable-${entry} COMPONENT Runtime RENAME npa.png)
|
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/${entry}/background_npa.png DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/mipmap-${entry} COMPONENT Runtime RENAME npa_background.png)
|
||||||
|
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/${entry}/foreground_${ANDROID_LAUNCHER_ICON} DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/mipmap-${entry} COMPONENT Runtime RENAME npa_foreground.png)
|
||||||
|
INSTALL(FILES ${RESOURCES_IMG_ANDROID_DIR}/${entry}/${ANDROID_LAUNCHER_ICON} DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/mipmap-${entry} COMPONENT Runtime RENAME npa.png)
|
||||||
ENDFOREACH()
|
ENDFOREACH()
|
||||||
|
|
||||||
INSTALL(FILES ${PACKAGING_DIR}/android/styles.xml DESTINATION ${ANDROID_PACKAGE_SRC_DIR}/res/values COMPONENT Runtime)
|
INSTALL(DIRECTORY ${PACKAGING_DIR}/android/res DESTINATION ${ANDROID_PACKAGE_SRC_DIR} COMPONENT Runtime)
|
||||||
|
|
||||||
FILE(GLOB_RECURSE JAVA_FILES "${SRC_DIR}/*.java")
|
FILE(GLOB_RECURSE JAVA_FILES "${SRC_DIR}/*.java")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
@ -223,7 +236,10 @@ ELSEIF(ANDROID)
|
||||||
SET(ANDROID_VERSION_NAME ${PROJECT_VERSION})
|
SET(ANDROID_VERSION_NAME ${PROJECT_VERSION})
|
||||||
ENDIF()
|
ENDIF()
|
||||||
CONFIGURE_FILE(${PACKAGING_DIR}/android/${ANDROID_MANIFEST} ${ANDROID_PACKAGE_SRC_DIR}/AndroidManifest.xml @ONLY)
|
CONFIGURE_FILE(${PACKAGING_DIR}/android/${ANDROID_MANIFEST} ${ANDROID_PACKAGE_SRC_DIR}/AndroidManifest.xml @ONLY)
|
||||||
CONFIGURE_FILE(${PACKAGING_DIR}/android/fileprovider.xml ${ANDROID_PACKAGE_SRC_DIR}/res/xml/fileprovider.xml COPYONLY)
|
CONFIGURE_FILE(${PACKAGING_DIR}/android/backup_rules.xml ${ANDROID_PACKAGE_SRC_DIR}/res/xml/backup_rules.xml COPYONLY)
|
||||||
|
IF(NOT ANDROID_BUILD_AAR)
|
||||||
|
CONFIGURE_FILE(${PACKAGING_DIR}/android/fileprovider.xml ${ANDROID_PACKAGE_SRC_DIR}/res/xml/fileprovider.xml COPYONLY)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
SET(ANDROID_APP_BINARY "${CMAKE_INSTALL_PREFIX}/${ANDROID_DEST}/libAusweisApp2.so")
|
SET(ANDROID_APP_BINARY "${CMAKE_INSTALL_PREFIX}/${ANDROID_DEST}/libAusweisApp2.so")
|
||||||
SET(SYMBOL_FOLDER "${CMAKE_BINARY_DIR}/debug.symbols/${CMAKE_ANDROID_ARCH_ABI}")
|
SET(SYMBOL_FOLDER "${CMAKE_BINARY_DIR}/debug.symbols/${CMAKE_ANDROID_ARCH_ABI}")
|
||||||
|
@ -290,7 +306,7 @@ ENDIF()
|
||||||
|
|
||||||
IF(WIN32)
|
IF(WIN32)
|
||||||
IF(SIGNTOOL_CMD)
|
IF(SIGNTOOL_CMD)
|
||||||
CONFIGURE_FILE(${CMAKE_MODULE_PATH}/SignFiles.cmake.in ${CMAKE_BINARY_DIR}/SignFiles.cmake @ONLY)
|
CONFIGURE_FILE(${CMAKE_DIR}/SignFiles.cmake.in ${CMAKE_BINARY_DIR}/SignFiles.cmake @ONLY)
|
||||||
INSTALL(CODE
|
INSTALL(CODE
|
||||||
"
|
"
|
||||||
EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" -DSIGN_EXT=*.exe -P \"${CMAKE_BINARY_DIR}/SignFiles.cmake\" WORKING_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${DEFAULT_FILE_DESTINATION}\")
|
EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" -DSIGN_EXT=*.exe -P \"${CMAKE_BINARY_DIR}/SignFiles.cmake\" WORKING_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${DEFAULT_FILE_DESTINATION}\")
|
||||||
|
@ -311,11 +327,6 @@ IF(NOT ANDROID_BUILD_AAR)
|
||||||
INSTALL(FILES ${RCC} DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
|
INSTALL(FILES ${RCC} DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(NOT ANDROID AND NOT IOS)
|
|
||||||
# qtlogging.ini
|
|
||||||
INSTALL(FILES ${RESOURCES_DIR}/qtlogging.ini DESTINATION ${DEFAULT_FILE_DESTINATION} COMPONENT Runtime)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
# qt qml plugins
|
# qt qml plugins
|
||||||
IF(DESKTOP AND TARGET Qt5::Qml)
|
IF(DESKTOP AND TARGET Qt5::Qml)
|
||||||
FOREACH(entry QtQuick QtQuick.2 QtQml QtGraphicalEffects Qt)
|
FOREACH(entry QtQuick QtQuick.2 QtQml QtGraphicalEffects Qt)
|
||||||
|
|
|
@ -13,7 +13,7 @@ FIND_PACKAGE(Qt5Svg ${MIN_QT_VERSION} REQUIRED)
|
||||||
FIND_PACKAGE(Qt5LinguistTools ${MIN_QT_VERSION} REQUIRED)
|
FIND_PACKAGE(Qt5LinguistTools ${MIN_QT_VERSION} REQUIRED)
|
||||||
FIND_PACKAGE(Qt5WebSockets ${MIN_QT_VERSION} REQUIRED)
|
FIND_PACKAGE(Qt5WebSockets ${MIN_QT_VERSION} REQUIRED)
|
||||||
|
|
||||||
IF(NOT DESKTOP AND NOT ANDROID_BUILD_AAR OR "${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
|
IF(NOT ANDROID_BUILD_AAR)
|
||||||
FIND_PACKAGE(Qt5Qml ${MIN_QT_VERSION} REQUIRED)
|
FIND_PACKAGE(Qt5Qml ${MIN_QT_VERSION} REQUIRED)
|
||||||
FIND_PACKAGE(Qt5Quick ${MIN_QT_VERSION} REQUIRED)
|
FIND_PACKAGE(Qt5Quick ${MIN_QT_VERSION} REQUIRED)
|
||||||
FIND_PACKAGE(Qt5QuickControls2 ${MIN_QT_VERSION} REQUIRED)
|
FIND_PACKAGE(Qt5QuickControls2 ${MIN_QT_VERSION} REQUIRED)
|
||||||
|
@ -78,7 +78,7 @@ ENDIF()
|
||||||
IF(MINGW)
|
IF(MINGW)
|
||||||
SET(PCSC_LIBRARIES -lwinscard)
|
SET(PCSC_LIBRARIES -lwinscard)
|
||||||
SET(WIN_DEFAULT_LIBS "-lAdvapi32" "-lKernel32" "-lOle32" "-lSetupapi" "-lVersion" "-lws2_32")
|
SET(WIN_DEFAULT_LIBS "-lAdvapi32" "-lKernel32" "-lOle32" "-lSetupapi" "-lVersion" "-lws2_32")
|
||||||
ELSEIF(MSVC)
|
ELSEIF(MSVC OR CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
|
||||||
SET(PCSC_LIBRARIES winscard.lib)
|
SET(PCSC_LIBRARIES winscard.lib)
|
||||||
SET(WIN_DEFAULT_LIBS setupapi.lib version.lib Ws2_32.lib)
|
SET(WIN_DEFAULT_LIBS setupapi.lib version.lib Ws2_32.lib)
|
||||||
ELSEIF(ANDROID)
|
ELSEIF(ANDROID)
|
||||||
|
@ -86,6 +86,7 @@ ELSEIF(ANDROID)
|
||||||
ELSEIF(IOS)
|
ELSEIF(IOS)
|
||||||
FIND_LIBRARY(IOS_ASSETSLIBRARY AssetsLibrary)
|
FIND_LIBRARY(IOS_ASSETSLIBRARY AssetsLibrary)
|
||||||
FIND_LIBRARY(IOS_UIKIT UIKit)
|
FIND_LIBRARY(IOS_UIKIT UIKit)
|
||||||
|
FIND_LIBRARY(IOS_STOREKIT StoreKit)
|
||||||
FIND_LIBRARY(IOS_MOBILECORESERVICES MobileCoreServices)
|
FIND_LIBRARY(IOS_MOBILECORESERVICES MobileCoreServices)
|
||||||
FIND_LIBRARY(IOS_COREBLUETOOTH CoreBluetooth)
|
FIND_LIBRARY(IOS_COREBLUETOOTH CoreBluetooth)
|
||||||
FIND_LIBRARY(IOS_COREFOUNDATION CoreFoundation)
|
FIND_LIBRARY(IOS_COREFOUNDATION CoreFoundation)
|
||||||
|
@ -98,6 +99,8 @@ ELSEIF(IOS)
|
||||||
FIND_LIBRARY(IOS_SYSTEMCONFIGURATION SystemConfiguration)
|
FIND_LIBRARY(IOS_SYSTEMCONFIGURATION SystemConfiguration)
|
||||||
FIND_LIBRARY(IOS_AUDIOTOOLBOX AudioToolbox)
|
FIND_LIBRARY(IOS_AUDIOTOOLBOX AudioToolbox)
|
||||||
FIND_LIBRARY(IOS_IMAGEIO ImageIO)
|
FIND_LIBRARY(IOS_IMAGEIO ImageIO)
|
||||||
|
FIND_LIBRARY(IOS_CORENFC CoreNFC)
|
||||||
|
FIND_LIBRARY(IOS_MESSAGEUI MessageUI)
|
||||||
ELSEIF(MAC)
|
ELSEIF(MAC)
|
||||||
FIND_PATH(PCSC_INCLUDE_DIRS WinSCard.h)
|
FIND_PATH(PCSC_INCLUDE_DIRS WinSCard.h)
|
||||||
FIND_LIBRARY(PCSC_LIBRARIES NAMES PCSC WinSCard)
|
FIND_LIBRARY(PCSC_LIBRARIES NAMES PCSC WinSCard)
|
||||||
|
|
|
@ -9,7 +9,11 @@ MESSAGE(STATUS "CMAKE_VERSION: ${CMAKE_VERSION}")
|
||||||
MESSAGE(STATUS "CMAKE_SYSROOT: ${CMAKE_SYSROOT}")
|
MESSAGE(STATUS "CMAKE_SYSROOT: ${CMAKE_SYSROOT}")
|
||||||
MESSAGE(STATUS "CMAKE_SYSROOT_LINK: ${CMAKE_SYSROOT_LINK}")
|
MESSAGE(STATUS "CMAKE_SYSROOT_LINK: ${CMAKE_SYSROOT_LINK}")
|
||||||
MESSAGE(STATUS "CMAKE_SYSROOT_COMPILE: ${CMAKE_SYSROOT_COMPILE}")
|
MESSAGE(STATUS "CMAKE_SYSROOT_COMPILE: ${CMAKE_SYSROOT_COMPILE}")
|
||||||
|
IF(APPLE)
|
||||||
|
MESSAGE(STATUS "CMAKE_OSX_SYSROOT: ${CMAKE_OSX_SYSROOT}")
|
||||||
|
ENDIF()
|
||||||
MESSAGE(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
|
MESSAGE(STATUS "CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}")
|
||||||
|
MESSAGE(STATUS "CMAKE_CXX_SIMULATE_ID: ${CMAKE_CXX_SIMULATE_ID}")
|
||||||
|
|
||||||
IF(ANDROID)
|
IF(ANDROID)
|
||||||
MESSAGE(STATUS "CMAKE_ANDROID_NDK: ${CMAKE_ANDROID_NDK}")
|
MESSAGE(STATUS "CMAKE_ANDROID_NDK: ${CMAKE_ANDROID_NDK}")
|
||||||
|
@ -25,10 +29,6 @@ IF(ANDROID)
|
||||||
|
|
||||||
MESSAGE(STATUS "ANDROID_NDK_REVISION: ${ANDROID_NDK_REVISION}")
|
MESSAGE(STATUS "ANDROID_NDK_REVISION: ${ANDROID_NDK_REVISION}")
|
||||||
MESSAGE(STATUS "ANDROID_SDK_REVISION: ${ANDROID_SDK_REVISION}")
|
MESSAGE(STATUS "ANDROID_SDK_REVISION: ${ANDROID_SDK_REVISION}")
|
||||||
|
|
||||||
ELSEIF(IOS)
|
|
||||||
MESSAGE(STATUS "CMAKE_IOS_SDK_ROOT: ${CMAKE_IOS_SDK_ROOT}")
|
|
||||||
MESSAGE(STATUS "CMAKE_IOS_DEVELOPER_ROOT: ${CMAKE_IOS_DEVELOPER_ROOT}")
|
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ SET(CPACK_PACKAGE_CONTACT "info@governikus.com")
|
||||||
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Governikus AusweisApp2")
|
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Governikus AusweisApp2")
|
||||||
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/README.rst")
|
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/README.rst")
|
||||||
SET(CPACK_PACKAGE_FILE_NAME ${FILENAME})
|
SET(CPACK_PACKAGE_FILE_NAME ${FILENAME})
|
||||||
|
SET(CPACK_PACKAGE_INSTALL_DIRECTORY ${PROJECT_NAME})
|
||||||
|
|
||||||
IF(VENDOR_GOVERNIKUS)
|
IF(VENDOR_GOVERNIKUS)
|
||||||
SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE.officially.txt")
|
SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE.officially.txt")
|
||||||
|
@ -90,23 +91,33 @@ IF(WIN32)
|
||||||
SET(CPACK_WIX_UI_DIALOG ${RESOURCES_DIR}/images/wix_dialog.jpg)
|
SET(CPACK_WIX_UI_DIALOG ${RESOURCES_DIR}/images/wix_dialog.jpg)
|
||||||
SET(CPACK_WIX_EXTENSIONS WixUtilExtension)
|
SET(CPACK_WIX_EXTENSIONS WixUtilExtension)
|
||||||
SET(CPACK_WIX_LIGHT_EXTRA_FLAGS -loc ${PACKAGING_DIR}/win/WIX.Texts.de-DE.wxl -loc ${PACKAGING_DIR}/win/WIX.Texts.en-US.wxl)
|
SET(CPACK_WIX_LIGHT_EXTRA_FLAGS -loc ${PACKAGING_DIR}/win/WIX.Texts.de-DE.wxl -loc ${PACKAGING_DIR}/win/WIX.Texts.en-US.wxl)
|
||||||
|
# suppress warning LGHT1076/ICE61 caused by AllowSameVersionUpgrades
|
||||||
|
SET(CPACK_WIX_LIGHT_EXTRA_FLAGS -sw1076 ${CPACK_WIX_LIGHT_EXTRA_FLAGS})
|
||||||
|
|
||||||
IF(SIGNTOOL_CMD)
|
IF(SIGNTOOL_CMD)
|
||||||
MESSAGE(STATUS "MSI can be signed with 'make package.sign'")
|
MESSAGE(STATUS "MSI can be signed with 'make package.sign'")
|
||||||
ADD_CUSTOM_TARGET(package.sign COMMAND ${SIGNTOOL_CMD} ${SIGNTOOL_PARAMS} ${PROJECT_BINARY_DIR}/${CPACK_PACKAGE_FILE_NAME}.msi)
|
SET(MSI ${PROJECT_BINARY_DIR}/${CPACK_PACKAGE_FILE_NAME}.msi)
|
||||||
|
ADD_CUSTOM_TARGET(package.sign COMMAND ${SIGNTOOL_CMD} ${SIGNTOOL_PARAMS} ${MSI}
|
||||||
|
COMMAND ${SIGNTOOL_CMD} verify /v /pa ${MSI})
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
ELSEIF(IOS)
|
ELSEIF(IOS)
|
||||||
FILE(WRITE ${PROJECT_BINARY_DIR}/ipa.cmake "
|
FILE(WRITE ${PROJECT_BINARY_DIR}/ipa.cmake "
|
||||||
SET(BUNDLE_DIRS \"\${CONFIG}-iphoneos;\${CONFIG};UninstalledProducts;UninstalledProducts/iphoneos\")
|
FUNCTION(FIND_BUNDLE _name _out_bundle _out_parent_dir)
|
||||||
|
SET(BUNDLE_DIRS \"\${CONFIG}-iphoneos;\${CONFIG};UninstalledProducts;UninstalledProducts/iphoneos\")
|
||||||
|
|
||||||
FOREACH(dir \${BUNDLE_DIRS})
|
FOREACH(dir \${BUNDLE_DIRS})
|
||||||
SET(tmpBundleDir ${PROJECT_BINARY_DIR}/src/\${dir}/${PROJECT_NAME}.app)
|
SET(tmpDir ${PROJECT_BINARY_DIR}/src/\${dir})
|
||||||
IF(EXISTS \"\${tmpBundleDir}\")
|
SET(tmpBundleDir \${tmpDir}/\${_name})
|
||||||
SET(BundleDir \"\${tmpBundleDir}\")
|
IF(EXISTS \"\${tmpBundleDir}\")
|
||||||
BREAK()
|
SET(\${_out_bundle} \"\${tmpBundleDir}\" PARENT_SCOPE)
|
||||||
ENDIF()
|
SET(\${_out_parent_dir} \"\${tmpDir}\" PARENT_SCOPE)
|
||||||
ENDFOREACH()
|
BREAK()
|
||||||
|
ENDIF()
|
||||||
|
ENDFOREACH()
|
||||||
|
ENDFUNCTION()
|
||||||
|
|
||||||
|
FIND_BUNDLE(${PROJECT_NAME}.app BundleDir ParentDir)
|
||||||
|
|
||||||
IF(BundleDir)
|
IF(BundleDir)
|
||||||
MESSAGE(STATUS \"Use bundle: \${BundleDir}\")
|
MESSAGE(STATUS \"Use bundle: \${BundleDir}\")
|
||||||
|
@ -114,9 +125,15 @@ ELSEIF(IOS)
|
||||||
MESSAGE(FATAL_ERROR \"Bundle directory does not exist\")
|
MESSAGE(FATAL_ERROR \"Bundle directory does not exist\")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_directory \${BundleDir} Payload/AusweisApp2.app)
|
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy_directory \${BundleDir} Payload/${PROJECT_NAME}.app)
|
||||||
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E tar cf \"${CPACK_PACKAGE_FILE_NAME}.ipa\" --format=zip Payload)
|
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E tar cf \"${CPACK_PACKAGE_FILE_NAME}.ipa\" --format=zip Payload)
|
||||||
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E remove_directory Payload)
|
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E remove_directory Payload)
|
||||||
|
|
||||||
|
FIND_BUNDLE(${PROJECT_NAME}.app.dSYM dSYM ParentDir)
|
||||||
|
IF(dSYM)
|
||||||
|
MESSAGE(STATUS \"Use dSYM: \${dSYM}\")
|
||||||
|
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E tar cf \"\${CMAKE_BINARY_DIR}/${CPACK_PACKAGE_FILE_NAME}.dSYM.zip\" --format=zip ${PROJECT_NAME}.app.dSYM WORKING_DIRECTORY \${ParentDir})
|
||||||
|
ENDIF()
|
||||||
")
|
")
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(ipa COMMAND ${CMAKE_COMMAND} -DCONFIG=$<CONFIGURATION> -P ${CMAKE_BINARY_DIR}/ipa.cmake)
|
ADD_CUSTOM_TARGET(ipa COMMAND ${CMAKE_COMMAND} -DCONFIG=$<CONFIGURATION> -P ${CMAKE_BINARY_DIR}/ipa.cmake)
|
||||||
|
@ -161,88 +178,72 @@ ELSEIF(ANDROID)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
MESSAGE(STATUS "Using androiddeployqt: ${androiddeployqt}")
|
MESSAGE(STATUS "Using androiddeployqt: ${androiddeployqt}")
|
||||||
|
|
||||||
OPTION(ANDROID_USE_GRADLE "Use gradle for androiddeployqt" ON)
|
FILE(READ "${QT_HOST_PREFIX}/src/android/templates/build.gradle" BUILD_GRADLE)
|
||||||
|
|
||||||
IF(ANDROID_USE_GRADLE)
|
IF(ANDROID_BUILD_AAR)
|
||||||
FILE(READ "${QT_HOST_PREFIX}/src/android/templates/build.gradle" BUILD_GRADLE)
|
STRING(REPLACE "apply plugin: 'com.android.application'" "apply plugin: 'com.android.library'" BUILD_GRADLE "${BUILD_GRADLE}")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
IF(ANDROID_BUILD_AAR)
|
FILE(WRITE "${CMAKE_INSTALL_PREFIX}/build.gradle" "${BUILD_GRADLE}")
|
||||||
STRING(REPLACE "apply plugin: 'com.android.application'" "apply plugin: 'com.android.library'" BUILD_GRADLE "${BUILD_GRADLE}")
|
FILE(READ "${PACKAGING_DIR}/android/build.gradle.append" BUILD_GRADLE)
|
||||||
ENDIF()
|
FILE(APPEND "${CMAKE_INSTALL_PREFIX}/build.gradle" "${BUILD_GRADLE}")
|
||||||
|
OPTION(ANDROID_LINT "Lint Android package" ON)
|
||||||
FILE(WRITE "${CMAKE_INSTALL_PREFIX}/build.gradle" "${BUILD_GRADLE}")
|
IF(NOT ANDROID_LINT)
|
||||||
|
FILE(APPEND "${CMAKE_INSTALL_PREFIX}/build.gradle" "tasks.lint.enabled = false")
|
||||||
FILE(READ "${PACKAGING_DIR}/android/build.gradle.append" BUILD_GRADLE)
|
|
||||||
FILE(APPEND "${CMAKE_INSTALL_PREFIX}/build.gradle" "${BUILD_GRADLE}")
|
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(ANDROID_BUILD_AAR)
|
IF(ANDROID_BUILD_AAR)
|
||||||
SET(ANDROID_FILE_EXT aar)
|
SET(ANDROID_FILE_EXT aar)
|
||||||
CONFIGURE_FILE(${PACKAGING_DIR}/android/pom.xml.in ${CMAKE_INSTALL_PREFIX}/${CPACK_PACKAGE_FILE_NAME}.pom @ONLY)
|
CONFIGURE_FILE(${PACKAGING_DIR}/android/pom.xml.in ${CMAKE_INSTALL_PREFIX}/${CPACK_PACKAGE_FILE_NAME}.pom @ONLY)
|
||||||
|
CONFIGURE_FILE("${PACKAGING_DIR}/android/lint.aar.xml" "${CMAKE_INSTALL_PREFIX}/lint.xml" COPYONLY)
|
||||||
ELSE()
|
ELSE()
|
||||||
SET(ANDROID_FILE_EXT apk)
|
SET(ANDROID_FILE_EXT apk)
|
||||||
|
CONFIGURE_FILE("${PACKAGING_DIR}/android/lint.apk.xml" "${CMAKE_INSTALL_PREFIX}/lint.xml" COPYONLY)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
MESSAGE(STATUS "Prepare ${ANDROID_FILE_EXT} file generation")
|
MESSAGE(STATUS "Prepare ${ANDROID_FILE_EXT} file generation")
|
||||||
|
|
||||||
IF(${CMAKE_BUILD_TYPE} STREQUAL "RELEASE" OR ${CMAKE_BUILD_TYPE} STREQUAL "RELWITHDEBINFO" OR ${CMAKE_BUILD_TYPE} STREQUAL "MINSIZEREL")
|
IF(${CMAKE_BUILD_TYPE} STREQUAL "RELEASE" OR ${CMAKE_BUILD_TYPE} STREQUAL "RELWITHDEBINFO" OR ${CMAKE_BUILD_TYPE} STREQUAL "MINSIZEREL")
|
||||||
|
SET(DEPLOY_CMD_SIGN --release)
|
||||||
|
|
||||||
IF(ANDROID_BUILD_AAR)
|
IF(ANDROID_BUILD_AAR)
|
||||||
SET(ANDROID_FILE dist-release.aar)
|
SET(ANDROID_FILE dist-release.aar)
|
||||||
SET(DEPLOY_CMD_SIGN --release)
|
|
||||||
ELSEIF(APK_SIGN_KEYSTORE AND APK_SIGN_KEYSTORE_ALIAS AND APK_SIGN_KEYSTORE_PSW)
|
ELSEIF(APK_SIGN_KEYSTORE AND APK_SIGN_KEYSTORE_ALIAS AND APK_SIGN_KEYSTORE_PSW)
|
||||||
MESSAGE(STATUS "Release build will be signed using: ${APK_SIGN_KEYSTORE} | Alias: ${APK_SIGN_KEYSTORE_ALIAS}")
|
MESSAGE(STATUS "Release build will be signed using: ${APK_SIGN_KEYSTORE} | Alias: ${APK_SIGN_KEYSTORE_ALIAS}")
|
||||||
SET(DEPLOY_CMD_SIGN --sign ${APK_SIGN_KEYSTORE} ${APK_SIGN_KEYSTORE_ALIAS} --storepass ${APK_SIGN_KEYSTORE_PSW} --digestalg SHA-256 --sigalg SHA256WithRSA)
|
SET(DEPLOY_CMD_SIGN --sign ${APK_SIGN_KEYSTORE} ${APK_SIGN_KEYSTORE_ALIAS} --storepass ${APK_SIGN_KEYSTORE_PSW} --digestalg SHA-256 --sigalg SHA256WithRSA)
|
||||||
IF(ANDROID_USE_GRADLE)
|
SET(ANDROID_FILE dist-release-signed.apk)
|
||||||
SET(ANDROID_FILE dist-release-signed.apk)
|
|
||||||
ELSE()
|
|
||||||
SET(ANDROID_FILE QtApp-release-signed.apk)
|
|
||||||
ENDIF()
|
|
||||||
ELSE()
|
ELSE()
|
||||||
MESSAGE(FATAL_ERROR "Cannot sign release build! Set APK_SIGN_KEYSTORE, APK_SIGN_KEYSTORE_ALIAS and APK_SIGN_KEYSTORE_PSW!")
|
SET(ANDROID_FILE dist-release-unsigned.apk)
|
||||||
|
MESSAGE(WARNING "Cannot sign release build! Set APK_SIGN_KEYSTORE, APK_SIGN_KEYSTORE_ALIAS and APK_SIGN_KEYSTORE_PSW!")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
ELSE()
|
ELSE()
|
||||||
IF(ANDROID_USE_GRADLE)
|
SET(ANDROID_FILE dist-debug.${ANDROID_FILE_EXT})
|
||||||
SET(ANDROID_FILE dist-debug.${ANDROID_FILE_EXT})
|
ENDIF()
|
||||||
|
|
||||||
|
SET(DEPLOY_CMD ${androiddeployqt} --verbose --gradle --input ${ANDROID_DEPLOYMENT_SETTINGS} --output ${CMAKE_INSTALL_PREFIX} ${DEPLOY_CMD_SIGN})
|
||||||
|
SET(SOURCE_ANDROID_FILE ${CMAKE_INSTALL_PREFIX}/build/outputs/${ANDROID_FILE_EXT})
|
||||||
|
|
||||||
|
IF("${Qt5Core_VERSION}" VERSION_GREATER_EQUAL "5.12.0" AND NOT ANDROID_BUILD_AAR)
|
||||||
|
IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
|
||||||
|
SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/debug)
|
||||||
ELSE()
|
ELSE()
|
||||||
SET(ANDROID_FILE QtApp-debug.apk)
|
SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/release)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
SET(DEPLOY_CMD ${androiddeployqt} --verbose --input ${ANDROID_DEPLOYMENT_SETTINGS} --output ${CMAKE_INSTALL_PREFIX} ${DEPLOY_CMD_SIGN})
|
SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/${ANDROID_FILE})
|
||||||
|
|
||||||
IF(ANDROID_USE_GRADLE)
|
|
||||||
SET(DEPLOY_CMD ${DEPLOY_CMD} --gradle)
|
|
||||||
SET(SOURCE_ANDROID_FILE ${CMAKE_INSTALL_PREFIX}/build/outputs/${ANDROID_FILE_EXT})
|
|
||||||
|
|
||||||
IF("${Qt5Core_VERSION}" VERSION_GREATER_EQUAL "5.12.0" AND NOT ANDROID_BUILD_AAR)
|
|
||||||
IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
|
|
||||||
SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/debug)
|
|
||||||
ELSE()
|
|
||||||
SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/release)
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
SET(SOURCE_ANDROID_FILE ${SOURCE_ANDROID_FILE}/${ANDROID_FILE})
|
|
||||||
ELSE()
|
|
||||||
IF(ANDROID_BUILD_AAR)
|
|
||||||
MESSAGE(FATAL_ERROR "Use gradle to build an AAR")
|
|
||||||
ENDIF()
|
|
||||||
SET(SOURCE_ANDROID_FILE ${CMAKE_INSTALL_PREFIX}/bin/${ANDROID_FILE})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
SET(DESTINATION_ANDROID_FILE ${CMAKE_INSTALL_PREFIX}/${CPACK_PACKAGE_FILE_NAME}.${ANDROID_FILE_EXT})
|
SET(DESTINATION_ANDROID_FILE ${CMAKE_INSTALL_PREFIX}/${CPACK_PACKAGE_FILE_NAME}.${ANDROID_FILE_EXT})
|
||||||
# Add DEPENDS install someday
|
# Add DEPENDS install someday
|
||||||
# http://public.kitware.com/Bug/view.php?id=8438
|
# https://gitlab.kitware.com/cmake/cmake/issues/8438
|
||||||
ADD_CUSTOM_TARGET(${ANDROID_FILE_EXT}
|
ADD_CUSTOM_TARGET(${ANDROID_FILE_EXT}
|
||||||
COMMAND ${DEPLOY_CMD}
|
COMMAND ${DEPLOY_CMD}
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${SOURCE_ANDROID_FILE} ${DESTINATION_ANDROID_FILE})
|
COMMAND ${CMAKE_COMMAND} -E copy ${SOURCE_ANDROID_FILE} ${DESTINATION_ANDROID_FILE})
|
||||||
|
|
||||||
IF(ANDROID_USE_GRADLE)
|
ADD_CUSTOM_COMMAND(TARGET ${ANDROID_FILE_EXT} POST_BUILD
|
||||||
ADD_CUSTOM_COMMAND(TARGET ${ANDROID_FILE_EXT} POST_BUILD
|
|
||||||
COMMAND ${CMAKE_INSTALL_PREFIX}/gradlew sourcesJar lint
|
COMMAND ${CMAKE_INSTALL_PREFIX}/gradlew sourcesJar lint
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy build/libs/dist-sources.jar ${CPACK_PACKAGE_FILE_NAME}-sources.jar
|
COMMAND ${CMAKE_COMMAND} -E copy build/libs/dist-sources.jar ${CPACK_PACKAGE_FILE_NAME}-sources.jar
|
||||||
WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX})
|
WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX})
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(NOT ANDROID_BUILD_AAR)
|
IF(NOT ANDROID_BUILD_AAR)
|
||||||
FIND_PROGRAM(apksigner apksigner HINTS ${ANDROID_SDK}/build-tools/${ANDROID_BUILD_TOOLS_REVISION} CMAKE_FIND_ROOT_PATH_BOTH)
|
FIND_PROGRAM(apksigner apksigner HINTS ${ANDROID_SDK}/build-tools/${ANDROID_BUILD_TOOLS_REVISION} CMAKE_FIND_ROOT_PATH_BOTH)
|
||||||
|
|
|
@ -1,44 +1,4 @@
|
||||||
IF(COVERAGE)
|
IF(COVERAGE)
|
||||||
|
|
||||||
# LCov (http://ltp.sourceforge.net/coverage/lcov.php)
|
|
||||||
FIND_PROGRAM(LCOV_BIN lcov CMAKE_FIND_ROOT_PATH_BOTH)
|
|
||||||
IF(LCOV_BIN)
|
|
||||||
SET(LCOV_FILE "${PROJECT_BINARY_DIR}/coverage.info")
|
|
||||||
SET(LCOV_GLOBAL_CMD ${LCOV_BIN} -q -o ${LCOV_FILE})
|
|
||||||
SET(LCOV_CMD ${LCOV_GLOBAL_CMD} -c -d ${PROJECT_BINARY_DIR} -b ${PROJECT_SOURCE_DIR})
|
|
||||||
SET(LCOV_RM_CMD ${LCOV_GLOBAL_CMD} -r ${LCOV_FILE} "*/test/*" "*/include/*" "*/src/external/*" "moc_*" "*.moc" "qrc_*" "ui_*")
|
|
||||||
|
|
||||||
IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
|
||||||
IF(WIN32)
|
|
||||||
SET(CLANG_GCOV py)
|
|
||||||
ELSE()
|
|
||||||
SET(CLANG_GCOV sh)
|
|
||||||
ENDIF()
|
|
||||||
SET(LCOV_CMD ${LCOV_CMD} --gcov-tool ${RESOURCES_DIR}/jenkins/clang-gcov.${CLANG_GCOV})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
ADD_CUSTOM_COMMAND(OUTPUT ${LCOV_FILE} COMMAND ${LCOV_CMD} COMMAND ${LCOV_RM_CMD})
|
|
||||||
ADD_CUSTOM_TARGET(lcov COMMAND ${LCOV_BIN} -l ${LCOV_FILE} DEPENDS ${LCOV_FILE})
|
|
||||||
|
|
||||||
FIND_PROGRAM(GENHTML_BIN genhtml CMAKE_FIND_ROOT_PATH_BOTH)
|
|
||||||
IF(GENHTML_BIN)
|
|
||||||
SET(REPORT_DIR "${PROJECT_BINARY_DIR}/coverage.report")
|
|
||||||
SET(GENHTML_CMD ${GENHTML_BIN} -q -p ${PROJECT_SOURCE_DIR} --num-spaces=4 -o ${REPORT_DIR} ${LCOV_FILE})
|
|
||||||
FIND_PROGRAM(FILT_BIN c++filt CMAKE_FIND_ROOT_PATH_BOTH)
|
|
||||||
IF(FILT_BIN)
|
|
||||||
SET(GENHTML_CMD ${GENHTML_CMD} --demangle-cpp)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
ADD_CUSTOM_COMMAND(OUTPUT ${REPORT_DIR} COMMAND ${GENHTML_CMD} DEPENDS ${LCOV_FILE})
|
|
||||||
ADD_CUSTOM_TARGET(lcov.report DEPENDS ${REPORT_DIR})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
SET(LCOV_XML "${PROJECT_BINARY_DIR}/coverage.xml")
|
|
||||||
SET(LCOV_COBERTURA_CMD ${RESOURCES_DIR}/jenkins/lcov_cobertura.py ${LCOV_FILE} -b ${PROJECT_SOURCE_DIR} -o ${LCOV_XML})
|
|
||||||
ADD_CUSTOM_COMMAND(OUTPUT ${LCOV_XML} COMMAND ${LCOV_COBERTURA_CMD} DEPENDS ${LCOV_FILE})
|
|
||||||
ADD_CUSTOM_TARGET(lcov.xml DEPENDS ${LCOV_XML})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
# gcovr (http://gcovr.com/)
|
# gcovr (http://gcovr.com/)
|
||||||
FIND_PROGRAM(GCOVR_BIN gcovr CMAKE_FIND_ROOT_PATH_BOTH)
|
FIND_PROGRAM(GCOVR_BIN gcovr CMAKE_FIND_ROOT_PATH_BOTH)
|
||||||
IF(GCOVR_BIN)
|
IF(GCOVR_BIN)
|
||||||
|
@ -48,7 +8,6 @@ IF(COVERAGE)
|
||||||
ADD_CUSTOM_COMMAND(OUTPUT ${GCOVR_FILE} COMMAND ${GCOVR_CMD} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
|
ADD_CUSTOM_COMMAND(OUTPUT ${GCOVR_FILE} COMMAND ${GCOVR_CMD} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
|
||||||
ADD_CUSTOM_TARGET(gcovr DEPENDS ${GCOVR_FILE})
|
ADD_CUSTOM_TARGET(gcovr DEPENDS ${GCOVR_FILE})
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
# CppCheck (http://cppcheck.sourceforge.net)
|
# CppCheck (http://cppcheck.sourceforge.net)
|
||||||
|
@ -118,32 +77,34 @@ ENDIF()
|
||||||
|
|
||||||
FIND_PROGRAM(UNCRUSTIFY uncrustify CMAKE_FIND_ROOT_PATH_BOTH)
|
FIND_PROGRAM(UNCRUSTIFY uncrustify CMAKE_FIND_ROOT_PATH_BOTH)
|
||||||
IF(UNCRUSTIFY)
|
IF(UNCRUSTIFY)
|
||||||
FILE(GLOB_RECURSE FILES_JAVA ${PROJECT_SOURCE_DIR}/*.java)
|
|
||||||
FILE(GLOB_RECURSE FILES_CPP ${PROJECT_SOURCE_DIR}/*.cpp)
|
|
||||||
FILE(GLOB_RECURSE FILES_H ${PROJECT_SOURCE_DIR}/*.h)
|
|
||||||
FILE(GLOB_RECURSE FILES_MM ${PROJECT_SOURCE_DIR}/*.mm)
|
|
||||||
FILE(GLOB_RECURSE FILES_M ${PROJECT_SOURCE_DIR}/*.m)
|
|
||||||
SET(FILES ${FILES_JAVA} ${FILES_CPP} ${FILES_H} ${FILES_MM} ${FILES_M})
|
|
||||||
SET(FORMATTING_FILE ${PROJECT_BINARY_DIR}/formatting.files)
|
|
||||||
|
|
||||||
FILE(WRITE ${FORMATTING_FILE} "")
|
|
||||||
FOREACH(file ${FILES})
|
|
||||||
IF(NOT "${file}" MATCHES "/external/")
|
|
||||||
FILE(APPEND ${FORMATTING_FILE} ${file})
|
|
||||||
FILE(APPEND ${FORMATTING_FILE} "\n")
|
|
||||||
ENDIF()
|
|
||||||
ENDFOREACH()
|
|
||||||
|
|
||||||
SET(UNCRUSTIFY_CFG ${PROJECT_SOURCE_DIR}/uncrustify.cfg)
|
|
||||||
SET(UNCRUSTIFY_CMD ${UNCRUSTIFY} -c ${UNCRUSTIFY_CFG} --replace --no-backup -q -F ${FORMATTING_FILE})
|
|
||||||
|
|
||||||
EXECUTE_PROCESS(COMMAND ${UNCRUSTIFY} --version OUTPUT_VARIABLE UNCRUSTIFY_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
|
EXECUTE_PROCESS(COMMAND ${UNCRUSTIFY} --version OUTPUT_VARIABLE UNCRUSTIFY_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
STRING(REPLACE "uncrustify " "" UNCRUSTIFY_VERSION ${UNCRUSTIFY_VERSION})
|
STRING(REPLACE "uncrustify " "" UNCRUSTIFY_VERSION ${UNCRUSTIFY_VERSION})
|
||||||
|
STRING(REPLACE "Uncrustify-" "" UNCRUSTIFY_VERSION ${UNCRUSTIFY_VERSION})
|
||||||
|
|
||||||
SET(UNCRUSTIFY_NEEDED_VERSION "0.67")
|
SET(UNCRUSTIFY_NEEDED_VERSION "0.69")
|
||||||
IF("${UNCRUSTIFY_VERSION}" STRLESS "${UNCRUSTIFY_NEEDED_VERSION}")
|
IF("${UNCRUSTIFY_VERSION}" STRLESS "${UNCRUSTIFY_NEEDED_VERSION}")
|
||||||
MESSAGE(WARNING "Uncrustify seems to be too old. Use at least ${UNCRUSTIFY_NEEDED_VERSION}... you are using: ${UNCRUSTIFY_VERSION}")
|
MESSAGE(WARNING "Uncrustify seems to be too old. Use at least ${UNCRUSTIFY_NEEDED_VERSION}... you are using: ${UNCRUSTIFY_VERSION}")
|
||||||
ELSE()
|
ELSE()
|
||||||
|
MESSAGE(STATUS "Found uncrustify ${UNCRUSTIFY_VERSION}")
|
||||||
|
FILE(GLOB_RECURSE FILES_JAVA ${PROJECT_SOURCE_DIR}/*.java)
|
||||||
|
FILE(GLOB_RECURSE FILES_CPP ${PROJECT_SOURCE_DIR}/*.cpp)
|
||||||
|
FILE(GLOB_RECURSE FILES_H ${PROJECT_SOURCE_DIR}/*.h)
|
||||||
|
FILE(GLOB_RECURSE FILES_H_IN ${PROJECT_SOURCE_DIR}/*.h.in)
|
||||||
|
FILE(GLOB_RECURSE FILES_MM ${PROJECT_SOURCE_DIR}/*.mm)
|
||||||
|
FILE(GLOB_RECURSE FILES_M ${PROJECT_SOURCE_DIR}/*.m)
|
||||||
|
SET(FILES ${FILES_JAVA} ${FILES_CPP} ${FILES_H_IN} ${FILES_H} ${FILES_MM} ${FILES_M})
|
||||||
|
SET(FORMATTING_FILE ${PROJECT_BINARY_DIR}/formatting.files)
|
||||||
|
|
||||||
|
FILE(WRITE ${FORMATTING_FILE} "")
|
||||||
|
FOREACH(file ${FILES})
|
||||||
|
IF(NOT "${file}" MATCHES "/external/")
|
||||||
|
FILE(APPEND ${FORMATTING_FILE} ${file})
|
||||||
|
FILE(APPEND ${FORMATTING_FILE} "\n")
|
||||||
|
ENDIF()
|
||||||
|
ENDFOREACH()
|
||||||
|
|
||||||
|
SET(UNCRUSTIFY_CFG ${PROJECT_SOURCE_DIR}/uncrustify.cfg)
|
||||||
|
SET(UNCRUSTIFY_CMD ${UNCRUSTIFY} -c ${UNCRUSTIFY_CFG} --replace --no-backup -q -F ${FORMATTING_FILE})
|
||||||
ADD_CUSTOM_TARGET(format COMMAND ${UNCRUSTIFY_CMD} SOURCES ${UNCRUSTIFY_CFG} ${FILES})
|
ADD_CUSTOM_TARGET(format COMMAND ${UNCRUSTIFY_CMD} SOURCES ${UNCRUSTIFY_CFG} ${FILES})
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
@ -172,108 +133,138 @@ ENDFUNCTION()
|
||||||
|
|
||||||
FIND_PROGRAM(CONVERT convert CMAKE_FIND_ROOT_PATH_BOTH)
|
FIND_PROGRAM(CONVERT convert CMAKE_FIND_ROOT_PATH_BOTH)
|
||||||
IF(CONVERT)
|
IF(CONVERT)
|
||||||
IF(IOS)
|
SET(BACKGROUND_COLOR "#dcebf6")
|
||||||
SET(CONVERT_CMD convert -alpha off)
|
|
||||||
SET(BACKGROUND_COLOR "#5489c2")
|
ADD_CUSTOM_TARGET(npaicons.docs
|
||||||
ELSE()
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 96x96 npa.svg npa_docs.png
|
||||||
SET(CONVERT_CMD convert)
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
SET(BACKGROUND_COLOR "transparent")
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(npaicons.win
|
ADD_CUSTOM_TARGET(npaicons.win
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -define icon:auto-resize=256,96,64,48,40,32,24,20,16 npa.svg npa.ico
|
COMMAND ${CONVERT} -background transparent -define icon:auto-resize=256,96,64,48,40,32,24,20,16 npa.svg npa.ico
|
||||||
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(npaicons.android.preview
|
ADD_CUSTOM_TARGET(npaicons.android.background
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 36x36 npa_preview.svg android/ldpi/npa_preview.png
|
COMMAND ${CONVERT} -background transparent -resize 81x81 android/npa_background.svg android/ldpi/background_npa.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 160 -resize 48x48 npa_preview.svg android/mdpi/npa_preview.png
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 108x108 android/npa_background.svg android/mdpi/background_npa.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 240 -resize 72x72 npa_preview.svg android/hdpi/npa_preview.png
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 162x162 android/npa_background.svg android/hdpi/background_npa.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 320 -resize 96x96 npa_preview.svg android/xhdpi/npa_preview.png
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 216x216 android/npa_background.svg android/xhdpi/background_npa.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 480 -resize 144x144 npa_preview.svg android/xxhdpi/npa_preview.png
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 324x324 android/npa_background.svg android/xxhdpi/background_npa.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 640 -resize 192x192 npa_preview.svg android/xxxhdpi/npa_preview.png
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 432x432 android/npa_background.svg android/xxxhdpi/background_npa.png
|
||||||
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(npaicons.android.beta
|
ADD_CUSTOM_TARGET(npaicons.android.foreground.preview
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 36x36 npa_beta.svg android/ldpi/npa_beta.png
|
COMMAND ${CONVERT} -background transparent -resize 54x54 -gravity center -extent 81x81 android/npa_preview.svg android/ldpi/foreground_npa_preview.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 160 -resize 48x48 npa_beta.svg android/mdpi/npa_beta.png
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 72x72 -gravity center -extent 108x108 android/npa_preview.svg android/mdpi/foreground_npa_preview.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 240 -resize 72x72 npa_beta.svg android/hdpi/npa_beta.png
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 108x108 -gravity center -extent 162x162 android/npa_preview.svg android/hdpi/foreground_npa_preview.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 320 -resize 96x96 npa_beta.svg android/xhdpi/npa_beta.png
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 144x144 -gravity center -extent 216x216 android/npa_preview.svg android/xhdpi/foreground_npa_preview.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 480 -resize 144x144 npa_beta.svg android/xxhdpi/npa_beta.png
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 216x216 -gravity center -extent 324x324 android/npa_preview.svg android/xxhdpi/foreground_npa_preview.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 640 -resize 192x192 npa_beta.svg android/xxxhdpi/npa_beta.png
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 288x288 -gravity center -extent 432x432 android/npa_preview.svg android/xxxhdpi/foreground_npa_preview.png
|
||||||
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(npaicons.android
|
ADD_CUSTOM_TARGET(npaicons.android.legacy.preview
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 36x36 npa.svg android/ldpi/npa.png
|
COMMAND ${CONVERT} -background transparent -resize 36x36 npa_preview.svg android/ldpi/npa_preview.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 160 -resize 48x48 npa.svg android/mdpi/npa.png
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 48x48 npa_preview.svg android/mdpi/npa_preview.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 240 -resize 72x72 npa.svg android/hdpi/npa.png
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 72x72 npa_preview.svg android/hdpi/npa_preview.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 320 -resize 96x96 npa.svg android/xhdpi/npa.png
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 96x96 npa_preview.svg android/xhdpi/npa_preview.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 480 -resize 144x144 npa.svg android/xxhdpi/npa.png
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 144x144 npa_preview.svg android/xxhdpi/npa_preview.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 640 -resize 192x192 npa.svg android/xxxhdpi/npa.png
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 192x192 npa_preview.svg android/xxxhdpi/npa_preview.png
|
||||||
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
|
ADD_CUSTOM_TARGET(npaicons.android.foreground.beta
|
||||||
|
COMMAND ${CONVERT} -background transparent -resize 54x54 -gravity center -extent 81x81 android/npa_beta.svg android/ldpi/foreground_npa_beta.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 72x72 -gravity center -extent 78x78 android/npa_beta.svg android/mdpi/foreground_npa_beta.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 108x108 -gravity center -extent 162x162 android/npa_beta.svg android/hdpi/foreground_npa_beta.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 144x144 -gravity center -extent 216x216 android/npa_beta.svg android/xhdpi/foreground_npa_beta.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 216x216 -gravity center -extent 324x324 android/npa_beta.svg android/xxhdpi/foreground_npa_beta.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 288x288 -gravity center -extent 432x432 android/npa_beta.svg android/xxxhdpi/foreground_npa_beta.png
|
||||||
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
|
ADD_CUSTOM_TARGET(npaicons.android.legacy.beta
|
||||||
|
COMMAND ${CONVERT} -background transparent -resize 36x36 npa_beta.svg android/ldpi/npa_beta.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 48x48 npa_beta.svg android/mdpi/npa_beta.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 72x72 npa_beta.svg android/hdpi/npa_beta.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 96x96 npa_beta.svg android/xhdpi/npa_beta.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 144x144 npa_beta.svg android/xxhdpi/npa_beta.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 192x192 npa_beta.svg android/xxxhdpi/npa_beta.png
|
||||||
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
|
|
||||||
|
ADD_CUSTOM_TARGET(npaicons.android.foreground
|
||||||
|
COMMAND ${CONVERT} -background transparent -resize 54x54 -gravity center -extent 81x81 android/npa.svg android/ldpi/foreground_npa.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 72x72 -gravity center -extent 108x108 android/npa.svg android/mdpi/foreground_npa.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 108x108 -gravity center -extent 162x162 android/npa.svg android/hdpi/foreground_npa.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 144x144 -gravity center -extent 216x216 android/npa.svg android/xhdpi/foreground_npa.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 216x216 -gravity center -extent 324x324 android/npa.svg android/xxhdpi/foreground_npa.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 288x288 -gravity center -extent 432x432 android/npa.svg android/xxxhdpi/foreground_npa.png
|
||||||
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
|
ADD_CUSTOM_TARGET(npaicons.android.legacy
|
||||||
|
COMMAND ${CONVERT} -background transparent -resize 36x36 npa.svg android/ldpi/npa.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 160 -resize 48x48 npa.svg android/mdpi/npa.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 240 -resize 72x72 npa.svg android/hdpi/npa.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 320 -resize 96x96 npa.svg android/xhdpi/npa.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 480 -resize 144x144 npa.svg android/xxhdpi/npa.png
|
||||||
|
COMMAND ${CONVERT} -background transparent -units PixelsPerInch -resample 640 -resize 192x192 npa.svg android/xxxhdpi/npa.png
|
||||||
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
|
ADD_CUSTOM_TARGET(npaicons.playstore
|
||||||
|
COMMAND ${CONVERT} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 1120 -resize 336x336 -gravity center -extent 512x512 ${RESOURCES_DIR}/images/npa.svg playstore.png
|
||||||
|
COMMAND ${CONVERT} -background '${BACKGROUND_COLOR}' -units PixelsPerInch -resample 1120 -resize 336x336 -gravity center -extent 512x512 ${RESOURCES_DIR}/images/npa_preview.svg playstore_preview.png
|
||||||
|
)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(npaicons.ios.beta
|
ADD_CUSTOM_TARGET(npaicons.ios.beta
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 20x20 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 20x20 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@2x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 40x40 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@2x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 60x60 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@3x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 60x60 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@3x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 29x29 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 29x29 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 58x58 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 58x58 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 87x87 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@3x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 87x87 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall@3x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 40x40 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 80x80 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40@2x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 80x80 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40@2x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40@3x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 120x120 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/iconSmall40@3x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon60@2x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 120x120 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon60@2x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 180x180 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon60@3x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 180x180 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon60@3x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 76x76 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 76x76 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 152x152 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76@2x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 152x152 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76@2x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 167x167 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 167x167 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1024x1024 npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon1024.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 1024x1024 iOS/appIcons/npa_beta.svg iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon1024.png
|
||||||
|
COMMAND ${CONVERT} -background none -resize 256x256 npa_beta.svg iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage.png
|
||||||
|
COMMAND ${CONVERT} -background none -resize 512x512 npa_beta.svg iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage@2x.png
|
||||||
|
COMMAND ${CONVERT} -background none -resize 768x768 npa_beta.svg iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage@3x.png
|
||||||
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(npaicons.ios
|
ADD_CUSTOM_TARGET(npaicons.ios
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 20x20 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 20x20 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20@2x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 40x40 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20@2x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 60x60 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20@3x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 60x60 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon20@3x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 29x29 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 29x29 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 58x58 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 58x58 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall@2x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 87x87 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall@3x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 87x87 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall@3x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 40x40 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 40x40 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 80x80 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@2x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 80x80 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@2x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@3x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 120x120 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/iconSmall40@3x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 120x120 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon60@2x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 120x120 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon60@2x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 180x180 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon60@3x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 180x180 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon60@3x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 76x76 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 76x76 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 152x152 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76@2x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 152x152 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76@2x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 167x167 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 167x167 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1024x1024 npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png
|
COMMAND ${CONVERT} -alpha off -background '${BACKGROUND_COLOR}' -resize 1024x1024 iOS/appIcons/npa.svg iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png
|
||||||
|
COMMAND ${CONVERT} -background none -resize 256x256 npa.svg iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png
|
||||||
|
COMMAND ${CONVERT} -background none -resize 512x512 npa.svg iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png
|
||||||
|
COMMAND ${CONVERT} -background none -resize 768x768 npa.svg iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png
|
||||||
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
SET(BACKGROUND_COLOR "rgb\(220,235,246\)")
|
ADD_CUSTOM_TARGET(npaicons DEPENDS npaicons.docs npaicons.win npaicons.ios npaicons.ios.beta npaicons.playstore npaicons.android.background npaicons.android.foreground npaicons.android.foreground.beta npaicons.android.foreground.preview npaicons.android.legacy npaicons.android.legacy.beta npaicons.android.legacy.preview)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(npaicons.iphone
|
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 320x320 -gravity center -extent 640x1136 npa.svg iOS/launchImages/Default-568h@2x.png
|
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 320x320 -gravity center -extent 640x1136 npa.svg iOS/launchImages/launchImage568@2x.png
|
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 480x480 -gravity center -extent 960x1704 npa.svg iOS/launchImages/launchImage568@3x.png
|
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 353x353 -gravity center -extent 705x1334 npa.svg iOS/launchImages/launchImage667@2x.png
|
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 563x563 -gravity center -extent 1125x2001 npa.svg iOS/launchImages/launchImage667@3x.png
|
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 414x414 -gravity center -extent 828x1472 npa.svg iOS/launchImages/launchImage736@2x.png
|
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 621x621 -gravity center -extent 1242x2208 npa.svg iOS/launchImages/launchImage736@3x.png
|
|
||||||
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(npaicons.ipad
|
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 768x768 -gravity center -extent 2048x1536 npa.svg iOS/launchImages/launchImage1024@2x.png
|
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1152x1152 -gravity center -extent 3072x2304 npa.svg iOS/launchImages/launchImage1024@3x.png
|
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 834x834 -gravity center -extent 2224x1668 npa.svg iOS/launchImages/launchImage1112@2x.png
|
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1251x1251 -gravity center -extent 3336x2502 npa.svg iOS/launchImages/launchImage1112@3x.png
|
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1024x1024 -gravity center -extent 2732x2048 npa.svg iOS/launchImages/launchImage1366@2x.png
|
|
||||||
COMMAND ${CONVERT_CMD} -background '${BACKGROUND_COLOR}' -resize 1536x1536 -gravity center -extent 4098x3072 npa.svg iOS/launchImages/launchImage1366@3x.png
|
|
||||||
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(npaicons DEPENDS npaicons.win npaicons.ios npaicons.ios.beta npaicons.iphone npaicons.ipad npaicons.android npaicons.android.beta npaicons.android.preview)
|
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
FIND_PROGRAM(PNGQUANT pngquant CMAKE_FIND_ROOT_PATH_BOTH)
|
FIND_PROGRAM(PNGQUANT pngquant CMAKE_FIND_ROOT_PATH_BOTH)
|
||||||
IF(PNGQUANT)
|
IF(PNGQUANT)
|
||||||
SET(PNGQUANT_CMD pngquant -f -o)
|
SET(PNGQUANT_CMD pngquant -f -o)
|
||||||
|
|
||||||
|
ADD_CUSTOM_TARGET(pngquant.npaicons.docs
|
||||||
|
COMMAND ${PNGQUANT_CMD} npa_docs.png -- npa_docs.png
|
||||||
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(pngquant.ios.beta
|
ADD_CUSTOM_TARGET(pngquant.ios.beta
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png
|
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@2x.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@2x.png
|
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@2x.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon20@2x.png
|
||||||
|
@ -290,6 +281,9 @@ SET(PNGQUANT_CMD pngquant -f -o)
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76@2x.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76@2x.png
|
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76@2x.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon76@2x.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png
|
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon1024.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon1024.png
|
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon1024.png -- iOS/appIcons/beta/Images.xcassets/AppIcon.appiconset/icon1024.png
|
||||||
|
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage.png -- iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage.png
|
||||||
|
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage@2x.png -- iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage@2x.png
|
||||||
|
COMMAND ${PNGQUANT_CMD} iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage@3x.png -- iOS/appIcons/beta/Images.xcassets/LaunchImage.imageset/launchImage@3x.png
|
||||||
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(pngquant.ios
|
ADD_CUSTOM_TARGET(pngquant.ios
|
||||||
|
@ -308,28 +302,30 @@ SET(PNGQUANT_CMD pngquant -f -o)
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76@2x.png -- iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76@2x.png
|
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76@2x.png -- iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon76@2x.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png -- iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png
|
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png -- iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon83.5@2x.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png -- iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png
|
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png -- iOS/appIcons/Images.xcassets/AppIcon.appiconset/icon1024.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/launchImages/Default-568h@2x.png -- iOS/launchImages/Default-568h@2x.png
|
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png -- iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage.png
|
||||||
|
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png -- iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@2x.png
|
||||||
|
COMMAND ${PNGQUANT_CMD} iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png -- iOS/appIcons/Images.xcassets/LaunchImage.imageset/launchImage@3x.png
|
||||||
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(pngquant.iphone
|
ADD_CUSTOM_TARGET(pngquant.android.background
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage568@2x.png -- iOS/launchImages/launchImage568@2x.png
|
COMMAND ${PNGQUANT_CMD} android/ldpi/background_npa.png -- android/ldpi/background_npa.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage568@3x.png -- iOS/launchImages/launchImage568@3x.png
|
COMMAND ${PNGQUANT_CMD} android/mdpi/background_npa.png -- android/mdpi/background_npa.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage667@2x.png -- iOS/launchImages/launchImage667@2x.png
|
COMMAND ${PNGQUANT_CMD} android/hdpi/background_npa.png -- android/hdpi/background_npa.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage667@3x.png -- iOS/launchImages/launchImage667@3x.png
|
COMMAND ${PNGQUANT_CMD} android/xhdpi/background_npa.png -- android/xhdpi/background_npa.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage736@2x.png -- iOS/launchImages/launchImage736@2x.png
|
COMMAND ${PNGQUANT_CMD} android/xxhdpi/background_npa.png -- android/xxhdpi/background_npa.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage736@3x.png -- iOS/launchImages/launchImage736@3x.png
|
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/background_npa.png -- android/xxxhdpi/background_npa.png
|
||||||
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(pngquant.ipad
|
ADD_CUSTOM_TARGET(pngquant.android.foreground.preview
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1024@2x.png -- iOS/launchImages/launchImage1024@2x.png
|
COMMAND ${PNGQUANT_CMD} android/ldpi/foreground_npa_preview.png -- android/ldpi/foreground_npa_preview.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1024@3x.png -- iOS/launchImages/launchImage1024@3x.png
|
COMMAND ${PNGQUANT_CMD} android/mdpi/foreground_npa_preview.png -- android/mdpi/foreground_npa_preview.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1112@2x.png -- iOS/launchImages/launchImage1112@2x.png
|
COMMAND ${PNGQUANT_CMD} android/hdpi/foreground_npa_preview.png -- android/hdpi/foreground_npa_preview.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1112@3x.png -- iOS/launchImages/launchImage1112@3x.png
|
COMMAND ${PNGQUANT_CMD} android/xhdpi/foreground_npa_preview.png -- android/xhdpi/foreground_npa_preview.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1366@2x.png -- iOS/launchImages/launchImage1366@2x.png
|
COMMAND ${PNGQUANT_CMD} android/xxhdpi/foreground_npa_preview.png -- android/xxhdpi/foreground_npa_preview.png
|
||||||
COMMAND ${PNGQUANT_CMD} iOS/launchImages/launchImage1366@3x.png -- iOS/launchImages/launchImage1366@3x.png
|
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/foreground_npa_preview.png -- android/xxxhdpi/foreground_npa_preview.png
|
||||||
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(pngquant.android.preview
|
ADD_CUSTOM_TARGET(pngquant.android.legacy.preview
|
||||||
COMMAND ${PNGQUANT_CMD} android/ldpi/npa_preview.png -- android/ldpi/npa_preview.png
|
COMMAND ${PNGQUANT_CMD} android/ldpi/npa_preview.png -- android/ldpi/npa_preview.png
|
||||||
COMMAND ${PNGQUANT_CMD} android/mdpi/npa_preview.png -- android/mdpi/npa_preview.png
|
COMMAND ${PNGQUANT_CMD} android/mdpi/npa_preview.png -- android/mdpi/npa_preview.png
|
||||||
COMMAND ${PNGQUANT_CMD} android/hdpi/npa_preview.png -- android/hdpi/npa_preview.png
|
COMMAND ${PNGQUANT_CMD} android/hdpi/npa_preview.png -- android/hdpi/npa_preview.png
|
||||||
|
@ -338,7 +334,16 @@ SET(PNGQUANT_CMD pngquant -f -o)
|
||||||
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa_preview.png -- android/xxxhdpi/npa_preview.png
|
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa_preview.png -- android/xxxhdpi/npa_preview.png
|
||||||
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(pngquant.android.beta
|
ADD_CUSTOM_TARGET(pngquant.android.foreground.beta
|
||||||
|
COMMAND ${PNGQUANT_CMD} android/ldpi/foreground_npa_beta.png -- android/ldpi/foreground_npa_beta.png
|
||||||
|
COMMAND ${PNGQUANT_CMD} android/mdpi/foreground_npa_beta.png -- android/mdpi/foreground_npa_beta.png
|
||||||
|
COMMAND ${PNGQUANT_CMD} android/hdpi/foreground_npa_beta.png -- android/hdpi/foreground_npa_beta.png
|
||||||
|
COMMAND ${PNGQUANT_CMD} android/xhdpi/foreground_npa_beta.png -- android/xhdpi/foreground_npa_beta.png
|
||||||
|
COMMAND ${PNGQUANT_CMD} android/xxhdpi/foreground_npa_beta.png -- android/xxhdpi/foreground_npa_beta.png
|
||||||
|
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/foreground_npa_beta.png -- android/xxxhdpi/foreground_npa_beta.png
|
||||||
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
|
ADD_CUSTOM_TARGET(pngquant.android.legacy.beta
|
||||||
COMMAND ${PNGQUANT_CMD} android/ldpi/npa_beta.png -- android/ldpi/npa_beta.png
|
COMMAND ${PNGQUANT_CMD} android/ldpi/npa_beta.png -- android/ldpi/npa_beta.png
|
||||||
COMMAND ${PNGQUANT_CMD} android/mdpi/npa_beta.png -- android/mdpi/npa_beta.png
|
COMMAND ${PNGQUANT_CMD} android/mdpi/npa_beta.png -- android/mdpi/npa_beta.png
|
||||||
COMMAND ${PNGQUANT_CMD} android/hdpi/npa_beta.png -- android/hdpi/npa_beta.png
|
COMMAND ${PNGQUANT_CMD} android/hdpi/npa_beta.png -- android/hdpi/npa_beta.png
|
||||||
|
@ -347,7 +352,16 @@ SET(PNGQUANT_CMD pngquant -f -o)
|
||||||
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa_beta.png -- android/xxxhdpi/npa_beta.png
|
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa_beta.png -- android/xxxhdpi/npa_beta.png
|
||||||
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(pngquant.android
|
ADD_CUSTOM_TARGET(pngquant.android.foreground
|
||||||
|
COMMAND ${PNGQUANT_CMD} android/ldpi/foreground_npa.png -- android/ldpi/foreground_npa.png
|
||||||
|
COMMAND ${PNGQUANT_CMD} android/mdpi/foreground_npa.png -- android/mdpi/foreground_npa.png
|
||||||
|
COMMAND ${PNGQUANT_CMD} android/hdpi/foreground_npa.png -- android/hdpi/foreground_npa.png
|
||||||
|
COMMAND ${PNGQUANT_CMD} android/xhdpi/foreground_npa.png -- android/xhdpi/foreground_npa.png
|
||||||
|
COMMAND ${PNGQUANT_CMD} android/xxhdpi/foreground_npa.png -- android/xxhdpi/foreground_npa.png
|
||||||
|
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/foreground_npa.png -- android/xxxhdpi/foreground_npa.png
|
||||||
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
|
ADD_CUSTOM_TARGET(pngquant.android.legacy
|
||||||
COMMAND ${PNGQUANT_CMD} android/ldpi/npa.png -- android/ldpi/npa.png
|
COMMAND ${PNGQUANT_CMD} android/ldpi/npa.png -- android/ldpi/npa.png
|
||||||
COMMAND ${PNGQUANT_CMD} android/mdpi/npa.png -- android/mdpi/npa.png
|
COMMAND ${PNGQUANT_CMD} android/mdpi/npa.png -- android/mdpi/npa.png
|
||||||
COMMAND ${PNGQUANT_CMD} android/hdpi/npa.png -- android/hdpi/npa.png
|
COMMAND ${PNGQUANT_CMD} android/hdpi/npa.png -- android/hdpi/npa.png
|
||||||
|
@ -356,7 +370,7 @@ SET(PNGQUANT_CMD pngquant -f -o)
|
||||||
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa.png -- android/xxxhdpi/npa.png
|
COMMAND ${PNGQUANT_CMD} android/xxxhdpi/npa.png -- android/xxxhdpi/npa.png
|
||||||
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
WORKING_DIRECTORY ${RESOURCES_DIR}/images)
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(pngquant DEPENDS pngquant.ios pngquant.ios.beta pngquant.iphone pngquant.ipad pngquant.android pngquant.android.beta pngquant.android.preview)
|
ADD_CUSTOM_TARGET(pngquant DEPENDS pngquant.npaicons.docs pngquant.ios pngquant.ios.beta pngquant.android.background pngquant.android.foreground pngquant.android.foreground.beta pngquant.android.foreground.preview pngquant.android.legacy pngquant.android.legacy.beta pngquant.android.legacy.preview)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(NOT JAVA_EXECUTABLE)
|
IF(NOT JAVA_EXECUTABLE)
|
||||||
|
|
|
@ -54,6 +54,7 @@ ENDIF()
|
||||||
|
|
||||||
OPTION(ANDROID_BUILD_AAR "Build AAR file instead of APK" OFF)
|
OPTION(ANDROID_BUILD_AAR "Build AAR file instead of APK" OFF)
|
||||||
|
|
||||||
SET(CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH} CACHE string "android find search path root")
|
SET(CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH} CACHE STRING "android find search path root")
|
||||||
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||||
|
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
||||||
|
|
|
@ -1,217 +1,35 @@
|
||||||
# This file is based off of the Platform/Darwin.cmake and Platform/UnixPaths.cmake
|
CMAKE_MINIMUM_REQUIRED(VERSION 3.14)
|
||||||
# files which are included with CMake 2.8.4
|
|
||||||
# It has been altered for iOS development
|
|
||||||
|
|
||||||
# Options:
|
SET(CMAKE_SYSTEM_NAME iOS)
|
||||||
#
|
SET(CMAKE_OSX_ARCHITECTURES "arm64")
|
||||||
# IOS_PLATFORM = OS (default) or SIMULATOR or SIMULATOR64
|
SET(CMAKE_OSX_DEPLOYMENT_TARGET 13.0)
|
||||||
# This decides if SDKS will be selected from the iPhoneOS.platform or iPhoneSimulator.platform folders
|
|
||||||
# OS - the default, used to build for iPhone and iPad physical devices, which have an arm arch.
|
|
||||||
# SIMULATOR - used to build for the Simulator platforms, which have an x86 arch.
|
|
||||||
#
|
|
||||||
# CMAKE_IOS_DEVELOPER_ROOT = automatic(default) or /path/to/platform/Developer folder
|
|
||||||
# By default this location is automatcially chosen based on the IOS_PLATFORM value above.
|
|
||||||
# If set manually, it will override the default location and force the user of a particular Developer Platform
|
|
||||||
#
|
|
||||||
# CMAKE_IOS_SDK_ROOT = automatic(default) or /path/to/platform/Developer/SDKs/SDK folder
|
|
||||||
# By default this location is automatcially chosen based on the CMAKE_IOS_DEVELOPER_ROOT value.
|
|
||||||
# In this case it will always be the most up-to-date SDK found in the CMAKE_IOS_DEVELOPER_ROOT path.
|
|
||||||
# If set manually, this will force the use of a specific SDK version
|
|
||||||
|
|
||||||
# Macros:
|
SET(UNIX True)
|
||||||
#
|
SET(APPLE True)
|
||||||
# set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE)
|
SET(IOS True)
|
||||||
# A convenience macro for setting xcode specific properties on targets
|
|
||||||
# example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1")
|
|
||||||
#
|
|
||||||
# find_host_package (PROGRAM ARGS)
|
|
||||||
# A macro used to find executable programs on the host system, not within the iOS environment.
|
|
||||||
# Thanks to the android-cmake project for providing the command
|
|
||||||
|
|
||||||
# Standard settings
|
SET(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
||||||
set (CMAKE_SYSTEM_NAME Darwin)
|
|
||||||
set (CMAKE_SYSTEM_VERSION 1)
|
|
||||||
set (UNIX True)
|
|
||||||
set (APPLE True)
|
|
||||||
set (IOS True)
|
|
||||||
|
|
||||||
find_program(xcrun_bin xcrun CMAKE_FIND_ROOT_PATH_BOTH)
|
SET(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "YES")
|
||||||
if(NOT xcrun_bin)
|
SET(CMAKE_XCODE_ATTRIBUTE_BITCODE_GENERATION_MODE "bitcode")
|
||||||
message(FATAL_ERROR "Cannot find xcrun")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
function(XCRUN _out _find)
|
SET(CMAKE_FIND_ROOT_PATH ${CMAKE_PREFIX_PATH} CACHE STRING "iOS find search path root")
|
||||||
execute_process(COMMAND ${xcrun_bin} --sdk iphoneos -f ${_find} OUTPUT_VARIABLE tmp_out OUTPUT_STRIP_TRAILING_WHITESPACE)
|
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||||
set(${_out} "${tmp_out}" PARENT_SCOPE)
|
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||||
endfunction()
|
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
||||||
|
|
||||||
# https://cmake.org/Bug/view.php?id=15329
|
# work-around: cmake will fail if this is missing!
|
||||||
set(CMAKE_MACOSX_BUNDLE YES)
|
macro(find_host_package)
|
||||||
set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO")
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
|
||||||
# Required as of cmake 2.8.10
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
|
||||||
set (CMAKE_OSX_DEPLOYMENT_TARGET "" CACHE STRING "Force unset of the deployment target for iOS" FORCE)
|
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER)
|
||||||
|
set(IOS FALSE)
|
||||||
# Determine the cmake host system version so we know where to find the iOS SDKs
|
find_package(${ARGN})
|
||||||
find_program (CMAKE_UNAME uname /bin /usr/bin /usr/local/bin)
|
set(IOS TRUE)
|
||||||
if (CMAKE_UNAME)
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
|
||||||
exec_program(uname ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION)
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
|
||||||
string (REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" DARWIN_MAJOR_VERSION "${CMAKE_HOST_SYSTEM_VERSION}")
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
|
||||||
endif (CMAKE_UNAME)
|
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
|
||||||
|
endmacro(find_host_package)
|
||||||
XCRUN(CMAKE_C_COMPILER clang)
|
|
||||||
XCRUN(CMAKE_CXX_COMPILER clang++)
|
|
||||||
XCRUN(CMAKE_AR ar)
|
|
||||||
set(CMAKE_AR ${CMAKE_AR} CACHE FILEPATH "" FORCE)
|
|
||||||
|
|
||||||
# All iOS/Darwin specific settings - some may be redundant
|
|
||||||
set (CMAKE_SHARED_LIBRARY_PREFIX "lib")
|
|
||||||
set (CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
|
|
||||||
set (CMAKE_SHARED_MODULE_PREFIX "lib")
|
|
||||||
set (CMAKE_SHARED_MODULE_SUFFIX ".so")
|
|
||||||
set (CMAKE_MODULE_EXISTS 1)
|
|
||||||
set (CMAKE_DL_LIBS "")
|
|
||||||
|
|
||||||
set (CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
|
|
||||||
set (CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ")
|
|
||||||
set (CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
|
|
||||||
set (CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
|
|
||||||
|
|
||||||
# Hidden visibilty is required for cxx on iOS
|
|
||||||
set (CMAKE_C_FLAGS_INIT "")
|
|
||||||
set (CMAKE_CXX_FLAGS_INIT "-fvisibility=hidden -fvisibility-inlines-hidden")
|
|
||||||
|
|
||||||
set (CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
|
|
||||||
set (CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
|
|
||||||
|
|
||||||
set (CMAKE_PLATFORM_HAS_INSTALLNAME 1)
|
|
||||||
set (CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -headerpad_max_install_names")
|
|
||||||
set (CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names")
|
|
||||||
set (CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,")
|
|
||||||
set (CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,")
|
|
||||||
set (CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a")
|
|
||||||
|
|
||||||
# hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old build tree
|
|
||||||
# (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the cache
|
|
||||||
# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun)
|
|
||||||
# hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did before, Alex
|
|
||||||
if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
|
|
||||||
find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool)
|
|
||||||
endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
|
|
||||||
|
|
||||||
# Setup iOS platform unless specified manually with IOS_PLATFORM
|
|
||||||
if (NOT DEFINED IOS_PLATFORM)
|
|
||||||
set (IOS_PLATFORM "OS")
|
|
||||||
endif (NOT DEFINED IOS_PLATFORM)
|
|
||||||
set (IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform")
|
|
||||||
|
|
||||||
# Setup building for arm64 or not
|
|
||||||
if (NOT DEFINED BUILD_ARM64)
|
|
||||||
set (BUILD_ARM64 true)
|
|
||||||
endif (NOT DEFINED BUILD_ARM64)
|
|
||||||
set (BUILD_ARM64 ${BUILD_ARM64} CACHE STRING "Build arm64 arch or not")
|
|
||||||
|
|
||||||
# Check the platform selection and setup for developer root
|
|
||||||
if (${IOS_PLATFORM} STREQUAL "OS")
|
|
||||||
set (IOS_PLATFORM_LOCATION "iPhoneOS.platform")
|
|
||||||
|
|
||||||
# This causes the installers to properly locate the output libraries
|
|
||||||
set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos")
|
|
||||||
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
|
|
||||||
set (SIMULATOR true)
|
|
||||||
set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform")
|
|
||||||
|
|
||||||
# This causes the installers to properly locate the output libraries
|
|
||||||
set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator")
|
|
||||||
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR64")
|
|
||||||
set (SIMULATOR true)
|
|
||||||
set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform")
|
|
||||||
|
|
||||||
# This causes the installers to properly locate the output libraries
|
|
||||||
set (CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator")
|
|
||||||
else (${IOS_PLATFORM} STREQUAL "OS")
|
|
||||||
message (FATAL_ERROR "Unsupported IOS_PLATFORM value selected. Please choose OS or SIMULATOR")
|
|
||||||
endif (${IOS_PLATFORM} STREQUAL "OS")
|
|
||||||
|
|
||||||
# Setup iOS developer location unless specified manually with CMAKE_IOS_DEVELOPER_ROOT
|
|
||||||
# Note Xcode 4.3 changed the installation location, choose the most recent one available
|
|
||||||
exec_program(/usr/bin/xcode-select ARGS -print-path OUTPUT_VARIABLE CMAKE_XCODE_DEVELOPER_DIR)
|
|
||||||
set (XCODE_POST_43_ROOT "${CMAKE_XCODE_DEVELOPER_DIR}/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
|
|
||||||
set (XCODE_PRE_43_ROOT "/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
|
|
||||||
if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
|
|
||||||
if (EXISTS ${XCODE_POST_43_ROOT})
|
|
||||||
set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_POST_43_ROOT})
|
|
||||||
elseif(EXISTS ${XCODE_PRE_43_ROOT})
|
|
||||||
set (CMAKE_IOS_DEVELOPER_ROOT ${XCODE_PRE_43_ROOT})
|
|
||||||
endif (EXISTS ${XCODE_POST_43_ROOT})
|
|
||||||
endif (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
|
|
||||||
set (CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT} CACHE PATH "Location of iOS Platform")
|
|
||||||
|
|
||||||
# Find and use the most recent iOS sdk unless specified manually with CMAKE_IOS_SDK_ROOT
|
|
||||||
if (NOT DEFINED CMAKE_IOS_SDK_ROOT)
|
|
||||||
file (GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*")
|
|
||||||
if (_CMAKE_IOS_SDKS)
|
|
||||||
list (SORT _CMAKE_IOS_SDKS)
|
|
||||||
list (REVERSE _CMAKE_IOS_SDKS)
|
|
||||||
list (GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT)
|
|
||||||
else (_CMAKE_IOS_SDKS)
|
|
||||||
message (FATAL_ERROR "No iOS SDK's found in default search path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.")
|
|
||||||
endif (_CMAKE_IOS_SDKS)
|
|
||||||
message (STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}")
|
|
||||||
endif (NOT DEFINED CMAKE_IOS_SDK_ROOT)
|
|
||||||
set (CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Location of the selected iOS SDK")
|
|
||||||
|
|
||||||
# Set the sysroot default to the most recent SDK
|
|
||||||
set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS support")
|
|
||||||
|
|
||||||
# set the architecture for iOS
|
|
||||||
if (${IOS_PLATFORM} STREQUAL "OS")
|
|
||||||
set (IOS_ARCH arm64)
|
|
||||||
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
|
|
||||||
set (IOS_ARCH i386)
|
|
||||||
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR64")
|
|
||||||
set (IOS_ARCH x86_64)
|
|
||||||
endif (${IOS_PLATFORM} STREQUAL "OS")
|
|
||||||
|
|
||||||
set (CMAKE_OSX_ARCHITECTURES ${IOS_ARCH} CACHE string "Build architecture for iOS")
|
|
||||||
|
|
||||||
# Set the find root to the iOS developer roots and to user defined paths
|
|
||||||
set (CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_IOS_SDK_ROOT} ${CMAKE_PREFIX_PATH} CACHE string "iOS find search path root")
|
|
||||||
|
|
||||||
# default to searching for frameworks first
|
|
||||||
set (CMAKE_FIND_FRAMEWORK FIRST)
|
|
||||||
|
|
||||||
# set up the default search directories for frameworks
|
|
||||||
set (CMAKE_SYSTEM_FRAMEWORK_PATH
|
|
||||||
${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks
|
|
||||||
${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks
|
|
||||||
${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks
|
|
||||||
)
|
|
||||||
|
|
||||||
# only search the iOS sdks, not the remainder of the host filesystem
|
|
||||||
set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
|
|
||||||
set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
|
||||||
set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
|
||||||
|
|
||||||
|
|
||||||
# This little macro lets you set any XCode specific property
|
|
||||||
macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
|
|
||||||
set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
|
|
||||||
endmacro (set_xcode_property)
|
|
||||||
|
|
||||||
|
|
||||||
# This macro lets you find executable programs on the host system
|
|
||||||
macro (find_host_package)
|
|
||||||
set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
||||||
set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
|
|
||||||
set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
|
|
||||||
set (IOS FALSE)
|
|
||||||
|
|
||||||
find_package(${ARGN})
|
|
||||||
|
|
||||||
set (IOS TRUE)
|
|
||||||
set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
|
|
||||||
set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
|
||||||
set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
|
||||||
endmacro (find_host_package)
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,228 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
|
||||||
|
<!--Created by yEd 3.18.1-->
|
||||||
|
<key attr.name="Beschreibung" attr.type="string" for="graph" id="d0"/>
|
||||||
|
<key for="port" id="d1" yfiles.type="portgraphics"/>
|
||||||
|
<key for="port" id="d2" yfiles.type="portgeometry"/>
|
||||||
|
<key for="port" id="d3" yfiles.type="portuserdata"/>
|
||||||
|
<key attr.name="url" attr.type="string" for="node" id="d4"/>
|
||||||
|
<key attr.name="description" attr.type="string" for="node" id="d5"/>
|
||||||
|
<key for="node" id="d6" yfiles.type="nodegraphics"/>
|
||||||
|
<key for="graphml" id="d7" yfiles.type="resources"/>
|
||||||
|
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
|
||||||
|
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
|
||||||
|
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
|
||||||
|
<graph edgedefault="directed" id="G">
|
||||||
|
<data key="d0" xml:space="preserve"/>
|
||||||
|
<node id="n0">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="249.93318675648084" width="150.73691016175417" x="379.82322525840146" y="-15.0"/>
|
||||||
|
<y:Fill color="#E0E0E0" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" rotationAngle="90.0" textColor="#000000" verticalTextPosition="bottom" visible="true" width="49.609375" x="9.991977284848872" xml:space="preserve" y="146.38688006175698">Internet<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.5" nodeRatioX="-0.4337124711251771" nodeRatioY="0.2841945985857549" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle3d"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n1">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="402.28247680692664" width="162.91206076630084" x="130.0970161695911" y="-19.152021620717733"/>
|
||||||
|
<y:Fill color="#E0E0E0" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="79.45603038315042" y="199.14123840346332">
|
||||||
|
<y:LabelModel>
|
||||||
|
<y:SmartNodeLabelModel distance="4.0"/>
|
||||||
|
</y:LabelModel>
|
||||||
|
<y:ModelParameter>
|
||||||
|
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
|
||||||
|
</y:ModelParameter>
|
||||||
|
</y:NodeLabel>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" rotationAngle="90.0" textColor="#000000" verticalTextPosition="bottom" visible="true" width="78.396484375" x="9.113003096740954" xml:space="preserve" y="308.695703503948">Lokales Netz<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.5" nodeRatioX="-0.4440618266451515" nodeRatioY="0.4622397449460143" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle3d"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n2">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="283.8426393358113" width="150.73691016175417" x="138.89277718906638" y="-15.0"/>
|
||||||
|
<y:Fill color="#D0D0D0" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" rotationAngle="90.0" textColor="#000000" verticalTextPosition="bottom" visible="true" width="97.181640625" x="8.098407213028707" xml:space="preserve" y="166.02446489063328">Lokaler Rechner<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.5" nodeRatioX="-0.44627455741040206" nodeRatioY="0.4272958641151755" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle3d"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n3">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="32.0" width="110.0" x="166.95265436079174" y="97.8883879466967"/>
|
||||||
|
<y:Fill color="#FFFFFF" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="82.333984375" x="13.8330078125" xml:space="preserve" y="6.93359375">AusweisApp2<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n4">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="32.0" width="110.0" x="409.06939432176046" y="97.8883879466967"/>
|
||||||
|
<y:Fill color="#FFFFFF" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.939453125" x="22.0302734375" xml:space="preserve" y="6.93359375">eID-Server<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n5">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="32.0" width="110.0" x="409.06939432176046" y="-7.134920941481575"/>
|
||||||
|
<y:Fill color="#FFFFFF" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="89.060546875" x="10.4697265625" xml:space="preserve" y="6.93359375">Dienstanbieter<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n6">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="32.0" width="110.0" x="166.95265436079174" y="-7.1349209414815675"/>
|
||||||
|
<y:Fill color="#FFFFFF" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="50.142578125" x="29.9287109375" xml:space="preserve" y="6.93359375">Browser<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n7">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="30.0" width="110.0" x="409.06939432176046" y="199.59487324412942"/>
|
||||||
|
<y:Fill color="#FFFFFF" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="88.029296875" x="10.9853515625" xml:space="preserve" y="5.93359375">Update-Server<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n8">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="32.0" width="110.0" x="166.95265436079174" y="326.6678526626905"/>
|
||||||
|
<y:Fill color="#FFFFFF" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="104.494140625" x="2.7529296875" xml:space="preserve" y="6.93359375">Mobiles Endgerät<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n9">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="32.0" width="101.0" x="171.45265436079177" y="202.91169683487496"/>
|
||||||
|
<y:Fill color="#FFFFFF" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="97.7265625" x="1.63671875" xml:space="preserve" y="6.93359375">Drittanwendung<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<edge id="e0" source="n6" target="n5">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
<edge id="e1" source="n5" target="n4">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
<edge id="e2" source="n6" target="n3">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="30.71875" x="-34.70611583776903" xml:space="preserve" y="28.92603874253608">eID1<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="19.34674322102171" distanceToCenter="true" position="right" ratio="0.5329867452764283" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
<edge id="e3" source="n3" target="n4">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="30.71875" x="51.6604446461962" xml:space="preserve" y="-21.17213706476275">eID3<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="12.10572917405711" distanceToCenter="true" position="left" ratio="0.5105195151628484" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
<edge id="e4" source="n3" target="n8">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="54.54734563920826" sy="14.111612053303304" tx="26.398238238132535" ty="-16.02468140151575">
|
||||||
|
<y:Point x="276.5" y="269.0"/>
|
||||||
|
</y:Path>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="36.30859375" x="-59.09839513686407" xml:space="preserve" y="149.37254155441815">SaK1,
|
||||||
|
SaK2 <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="1.8153536324476993" distanceToCenter="false" position="right" ratio="0.7870346060615276" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
<edge id="e5" source="n3" target="n7">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="54.971035876728166" sy="15.038770784339903" tx="-53.5611005145696" ty="-15.000980657566373"/>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="22.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="45.220703125" x="46.57289611424528" xml:space="preserve" y="33.28619210241317">Update<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="11.307275195559956" distanceToCenter="true" position="right" ratio="0.6189315207731947" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
<edge id="e6" source="n5" target="n3">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="0.0" sy="0.0" tx="27.54734563920826" ty="-1.888387946696696"/>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="337.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="30.71875" x="-101.58040528438903" xml:space="preserve" y="9.329639509720586">eID2<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="15.099869002821848" distanceToCenter="true" position="right" ratio="0.3864086416472374" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
<edge id="e7" source="n3" target="n9">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="53.359375" x="-55.679685116747294" xml:space="preserve" y="28.445254182778">eID-SDK<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="28.999999999999986" distanceToCenter="true" position="right" ratio="0.5222764299898304" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
</graph>
|
||||||
|
<data key="d7">
|
||||||
|
<y:Resources/>
|
||||||
|
</data>
|
||||||
|
</graphml>
|
|
@ -0,0 +1,486 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%âãÏÓ
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/Title ()
|
||||||
|
/Author ()
|
||||||
|
/Subject ()
|
||||||
|
/Keywords ()
|
||||||
|
/Creator (yExport 1.5)
|
||||||
|
/Producer (org.freehep.graphicsio.pdf.YPDFGraphics2D 1.5)
|
||||||
|
/CreationDate (D:20190314162821+01'00')
|
||||||
|
/ModDate (D:20190314162821+01'00')
|
||||||
|
/Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Catalog
|
||||||
|
/Pages 3 0 R
|
||||||
|
/ViewerPreferences 4 0 R
|
||||||
|
/OpenAction [5 0 R /Fit]
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/FitWindow true
|
||||||
|
/CenterWindow false
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Parent 3 0 R
|
||||||
|
/Type /Page
|
||||||
|
/Contents 6 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Length 7 0 R
|
||||||
|
/Filter [/ASCII85Decode /FlateDecode]
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb"07bDmmlYpD<3YG`ONb288R7KN^+E7KR^$OLorOO`PFrBDE3CRLU2hHAq,"!0?'JK13>8rk"O%s'OJ
|
||||||
|
H[5T]kC5_Fb<LKu0<iuMrm/p:?U+Pga6SAmI^FuF*Ig)XT7$T^IDsg!^]+#S5Q9D_ci<RNIf9#Ura5Ka
|
||||||
|
J,OlR?>9H;huEBDJ,_b5[ibEiJ,emX:QPPCJ)[rokN73ZmrS(aGFG!cCPMjcfDj^FJ'#7]eJ8,GduOg[
|
||||||
|
09>7_d,4gC'<69T`Er9(7rRG`LG/Zph-8q0YJ9&nK>7E\0E9LepeQ83D&!#k&q$dk>5e9ncPc4js*b/W
|
||||||
|
kPeTF]JGkHVN3q#%q#<kE_'rsKC'KDq#92g$2u>MI-XX8l1G/PLHj@b\$qlYQMi^<s$M/3c>W^O2hq/`
|
||||||
|
Eh;=SlT^d7hu+Q_omp(ar7@M)We#PeqY,QUr*J3))qNnN;#cE%nW*YC./tEHrVI,.mIPfPQWc")lefJI
|
||||||
|
<(lgmpRh8#]"6dtrJtjbo^dPsFP$@Ts2U2sO`RYf`?-<>d$aBkgTi2OlUPf7IDbb@VIa-a+)`hq5>#4K
|
||||||
|
an[[3RE9Zc5$G)Ki:Tr[:T(n8RXX[c>]N"Vm5]Z.oX['Zr,H]ErR&28>0AI0DU-arEmQ3\j4X>bpte1*
|
||||||
|
7-hu)?Z"sJ6\g0B>kBRdN9\'$N:[SJO-[cfY<sgQ%-Z6e#PC74X4GH[Fe>hBch5N&qT/Pq!_0QDO0m4i
|
||||||
|
mP>Z%3r8bo3n22hN)q9tN^)71SNa.'cEi6I.rf6FO,^ou[a%JbN%$]UZ%dY?Y6<?6f<I0FmGKbGT?G8M
|
||||||
|
Ho@l4FJ^S8R3[7tGi?CXZV`r%g>?kN\39kP#A/SYX+-?iS#?"eb_tr]j7L!4_tSM(rZ-UkC45"rRW4)0
|
||||||
|
%tSVk[EdFE7g2$`IH'("Vap&4>RK]-q4P,U.k>a*9,pnd5'l>gO1k(*W@;HZASjWWC6^UJLXIn[H^rV9
|
||||||
|
VgGkYCAqB,a.1tX5H'fqIpLJm=Yno_=Oj,CKA%KG%'%P<jWV7bb<naaj38FnTe2@7(24UH,eC=R"[4bD
|
||||||
|
qEeslR-.<cd4/8k"NGk]h1l`hZRQDgo^jPCmF8e!<Z-omIl$df[&PYJUQ2ZX%N:c41iqQGGtAaOg%ot"
|
||||||
|
Zdc5N8fcI0l*%$$\2I`!Jb.ZBaV3:&Z(JQd]uiboJ!T*dM8V!a5&ST=[?clFM.T[>17p_!O/n$h:!D+g
|
||||||
|
V^G`_[$'H&a4S"\lSg;:`9*H8a!=/#i_8?qL=,2;rKj_F+l+,QY3#4Y_m);GU$+AKiS_0M@iHB%/a)$_
|
||||||
|
)<7Y!b]mKDHZ6<6;_*%:4SrqQ+;!Er?lXP0G^Yh+1VRp"d)ZskH+pic*^'epAE`r7En>U&l/BQ64/gU(
|
||||||
|
DnPhna7J598!N31P[VE`"%R#kGeN.)Ob:J_D+<faa'O/;7j$s&h\j7u@`=9Ge4XulFO9=?8t_rKk#GXf
|
||||||
|
*E:d4$"PG0OPq&,Gurku)\*0bfH_#).5$1E_lS/1d(uc*QTte8gg.o><-H"hk`!6Z's61'-@p!i638$R
|
||||||
|
X@+Q\V74Xsg=]sd3DXFG/*,esl_$#aj_=D7rT0C=HujDmBbb^A/l+R=Y2VS2+KUFi1e5j?$l`![0ACT?
|
||||||
|
G0h/no!D#OlTD:9*)Ga$eT\"_[*sNlC#UqsUH:M4CX>60j_8@6&uhKc%C<FAo/&hNdt":MfZKi"1>3+R
|
||||||
|
[5^rD]ui.@f'-+;mIIW:pZU"nWBD+po<l.l%AV80o!J#d;*HX/1MiQfitliJ9W&tRn&s2*]?]'(p%16t
|
||||||
|
s5iQjnE"`,c"gS/V&^GEJeej%r=.#J2:pAp^=jI?E6[L;.P;4nm`77%_kANdb5M3tK2^Foml3.je$F5K
|
||||||
|
.PqsZp\D]I>Q0BGp[nAF%aDtt1m`hq*Nkm%3O@8#k&Trbo?k.p6,k_tHrol3RYt\5\bN;kP%P@;C+ZfN
|
||||||
|
f<tG86)`]I_%XdJ6Mpq`U4<&1c8#@7G;DVi%UE`AF:-ED[#Q,Uq!pY>ANTI@3\>jONpdMX_#s_H*oX'l
|
||||||
|
ncAX*+7%>/>;4Fp5#D-oHMu--rpVk$qF;(o0p%!Is12-71m%0)s$#r8n(!u<@K!kCNN\T(iP.Ous1&C6
|
||||||
|
g``VVU3(MSp1GKBY@@%Fn]Lt5aR48"=9l?!NpEO.oGp/VTga`o3/4$dWqR@!TYaO0;u^"YFC7eEnc2of
|
||||||
|
+tcBo*r4QN13-\$M<F*8THkPDJN%\1NdhCsfc?dsmi<*,>6k)t,FT@G&tqfP%EOK)GU1$n"qXD*`99+E
|
||||||
|
!<)I^7s_oD#U?>_r9?<'S]PE'E7,N]JAF2cB5q#NP4M<1IZE;i8!@h=QsE4ncG`CW*59_eVp5"XcMG@=
|
||||||
|
Uf,hg[ed6Dg5MfjQ1.Z-kN5F\`]WWs?fK9@E>J(2D`o!Heb$C;YX5TUNid*[Qh0q7V8""$Nq>W&L5kuB
|
||||||
|
GVG]S)hsMWGc3VmWqfKeEW!riUXRoH9aBL;[b>^\$*$,nZo#tFO7s_Rpu4s.kK$P37[Q#:Smt>F;[VhN
|
||||||
|
<ZP%#EZEuKNhp`CDb&*m$6E0X).n-3V$6!47'AZ2G0SPiCusX=F?b`i8u_#WihHc$:#M\<'q&]Jpr]h9
|
||||||
|
r`1++\WGf`##>cMJjF5']l<&$4EM5+Ga@',r,qOtZ[+>7%6,oVBTelXcC7N?'Fc'f;iT?a'0;S(ND=Z#
|
||||||
|
N\`?/"+1Sjp7:n31Y&hg2r<>7bgYNm:cZ3Zf:r>rf[ZmT[4hOM/E9$Ka4^X$Nin5bY.](a"V4er.u%lA
|
||||||
|
I$Pc;S;aDP3A*EoiP:tZN&ICV,6AF+]1.4UDOI*c:Vfo4CRr#%7h0+Y':,9JTag9<lI!Uj\/q?.Tas:L
|
||||||
|
k\Hc8]$uL&aed2t])<<hA+af6(c4Vu:*3m11`1b0!iI?7b'&/5TkEeX;2B69<T.1O.[u\nZ^ePZ*@@,j
|
||||||
|
!RKoB#l6ZUm4ubY9mRg8>@E;>=t:+64W>+^R;um`-1E<3obK^=Gbj\PJ#sI_Pc3Um04Y$H0qjX5-Sc[3
|
||||||
|
k9qGDbhkL2RNp,:;TE5eJoQ#mhKBCF#F/0GQogli75FpeT!uT4Yi?:B%Q\l!%`+D73BmXJNQVgJL>iaq
|
||||||
|
m"aNjHCA&[#X2b?j`(RG>h:q<T@lme%`*eD`Z^_)lbE`7*e/D?XtV'DHO.WR5#4BG++uG6*J+a>+di%5
|
||||||
|
a?+h0iT>^Clu<=!gjF:hXcORh*eN^RW:O'2mcB43?`V3jpj?eOHO)g]A#I9hfWZH/@K,P3bT3VYETiZb
|
||||||
|
Vr-&pRGbi-q9Gms-`.d7+ZRpZk/T.m(aO[X#Q:<&Bs6P_h[]WC0-/T$GRFW`hR)=AM!stt`ABQuF^(oi
|
||||||
|
k.-=BMBDL3cQ6!6lp2k3+F;=>3WD(]+#5-Jg^fllE!gQnQU:lbl6EjZR2RlCA/RC>;?)ii$L"mS'lEH6
|
||||||
|
m-*rVe]\RL>k*At-7/[PrXOlL-V9D[on<\tnNbqA_n]>hQod#5:C2W@R%Xc%1dJ/so-iH*hr&ihAtWS+
|
||||||
|
:bt/d;j*gSfT]ka(<k/^%M(VAW!5!ghehCG8G"Bcf%":==>4j+M[l(e)@s&tbmrHLCGf33Yg*nDCii9%
|
||||||
|
N/,`^25^%<HlWH`#,dEm=7H51ShQs%Pbmo$H(EJYL!S%1ZO44c7F2/4/912\j6EZmI>*gkHC/BA01i]C
|
||||||
|
g=n2-rae<%L\0Y&/+I5hEE;=l/H4Y('21E<aogPp8[li(%US!83U-]ZRYD?&JH?nfkmT`8'6b8]+&rdV
|
||||||
|
nbuD(jYW]a^i3e2,Bc%NcU,k<]Y@t,b2rR,(V-N\qtm*4e9J_QkP^-ppZ%UR47>CIc>e.0q.eU+H2j!%
|
||||||
|
d(&t'957ei5G1@K4sS>5IH:>/$X,1O+#$9!kP`;Xg#W*dK(fAjJ?)g9]qC5RJY?Zomm"L;UW'b?!7B??
|
||||||
|
q[`CA#?oGa9)et]pU.TF+/:Lfo)=1\P:uA`C`FGTVm2WE*OCsljo#96YhQ11MZ<8/48eYq;Z?KtgbMV4
|
||||||
|
B9%*CKE60'nu4<n*aH\?EGucWG*E$WOW-OpLV[sM*P/[t36k7lr&YAjk^Xhj?N[7cqu!=?ooAM8o_^c\
|
||||||
|
"/o]I5S'<c\YM9-Aud@@2HFJlC0`:#!>OFVeNu<jA)FilX_E4HFEC@HiGO'L)m%Ua+cFHt*#C.S66$nf
|
||||||
|
G)U2$;#H>l8;,4Cn+])=`Mqnrh;-M_q!t-Y0:HQq5?mXM++ErCJ#AS$/Dtu1nA#`]QMX/4fH1H$]$W.O
|
||||||
|
?bGD`/LKdfO"ss,cO\YMr`G6<hL^<]pOV$?g?Ws3o7t'qX`UB)H,Jr4R/Gk?SO9f99Q^3aSa*2*I%U90
|
||||||
|
JNnX&"Sk*[^UKm+Q1[6:G@IlW(lA3d-JF$gma'[^'`H3Cq_&WM^J)$71=?*E7/JVNmCu?%s"`"$b=)7-
|
||||||
|
9+u/g;UR5=2ngY<L;)](1i.k#DAHr2OQ+mJ^pqB/d]gPu&oi`PA#L8l$1f@OTuC=VNn@!l-YrJ/9>%gU
|
||||||
|
U&,t6;oE":(H2O)4WN9f0<P6dHYN6mn[D*(G=I7h8PN+^M.*eLgs<F&q1)$A#G&UNeAN*uU&#uL4/Ce[
|
||||||
|
((om"-_`iOL,/td:0GmE0@B&N.:_HV:=!iF3Bb"_ZdlZI?C:E>S([9"M[lk3CXkI:H@Nhn=bnG'5$["^
|
||||||
|
hN60+bY]TcbO?B^/WcZr<C7Eh0Mn1r6`12,mni!WkMU<ZDAGF0:]IS+)BeY)hs4^$9JBM%!A]f6NHb&:
|
||||||
|
gtE:af$BBE@Hcof:TWJj#Y3PYcIS'CQ5$.rno3rc_>n9u%$8>DJ;!'J_Z1",q1H!o]Q.u"dj)el)XjEJ
|
||||||
|
ZT\eZ7kkpufa\o`3#g(no>0)iDEBhI)=-&XR@SDe5n3V*fhS0`=V5oOi,"r]\'DT\+*W$M2AlEo`11<p
|
||||||
|
UiFi`BkqiO>G#`A#091GlSUp7?SeF$!dPSoLYA#5[LQRrU<M$J<rA;fhk:&`;1;:CjPc"Cn7_IoR!pgK
|
||||||
|
r9.3HJQZ!J3[\\]K"'0J%P]t9[,^[Zi%<X+?]n@bHgAQ]19d[eU2X5-7lN=H7aLbS-&5sL]lfb]1F#U!
|
||||||
|
#!<g(cae#;:ma5#ASa:d.L$g&-JgR=O,.g?W:`EJR$VH$B=oqn/rZo&(T<_]d:QJ[a5jD$@C@nVrp71<
|
||||||
|
(o!]`M`JdC]Q:e'pX=eP]<f8B?g@fXQjO-14Yl1AhL#+2QD767%K+g^O6#Q[/H]W,ZF#n:PHs4@@B=aB
|
||||||
|
ipGsYG]@'&cjM:9la.XW@)AUk9j1K0iK0$QE\_EdZnRE[AZk3t1pFu7+$<W+p&tDm'Lif96(ND=U@8\"
|
||||||
|
1eBJ1Is*mY0acf77,]'pc9CQ0L6(;L_Ol94Vdu1F11V5U5B.+!2[]TCcMRr;i?)$?`7`I'N@1Ii%k`h/
|
||||||
|
=)4\ZfCQd7D`81X]B-l*d@B9]f/u3UDn:4>dCf"0mn.i[]2mpm@u?hc&e?q+&dqI8^amkFD(DmHO_H>N
|
||||||
|
T`%8B`'GLK>7![%&r'mqkKUE"D`Ce7YcS%S2'X2P@8jSG&dru;OUlHYI,s(R%G;fu&/.1sXqT-KYnEM7
|
||||||
|
]+W<IVL9a+qY/'dTE-j\1g]dA'6[3afb(-K_fI3Xg?I0HBtSD>HfRPq6h<2++]dWlQo'!Idb(cqj4-gU
|
||||||
|
;Au2%VS')h?9"iO5/c\_8`B/#rCnSKo6GN!Sj_n4D;(g7N>J*>m7QCB=k-aqA!UkNBl#2n0lVD/hdtU3
|
||||||
|
Jbt=PLssCjZa`c&7dX7q06"G:#L*tY&AD1H)WOJ#?>4eYJ)k'e3B!:O^9q^G/5AEQHfRO6/6t]HSc3O,
|
||||||
|
ji_l;jc/<pK9mL:*P2\BJaYRA0OgSgm,20Kce';p%CV_;K/[>cI^C`!*dQ$jBJ[lKc5DAsS8n&ZY2_ME
|
||||||
|
D][m2g5YD4kDW\\^[ft@3sel#rJu#SiVu3!efV6ps&fi65O:Qp+qq9BONC\5iB6Xsj':e/q=<_+EBK:B
|
||||||
|
H#Xf$,8D="oY1:%fCaISBEiNS_1t]gpt6Y>_-gBhs'80Mo60s\i#0Bb%Y`C*$q:R6#J1RtE<pX!@Tid-
|
||||||
|
4E*SV*uJhRn;t!>Qnc7X<??B4PQ?U'Om`V=pZR0<lp:UPCl%I4-Xn#P,1uJtZ/b0rKRD+``UdpuhMS7d
|
||||||
|
K8+iS*93$?/q.H5(&SGH/Jel+`Uk]9D"m9peNCV,e+GYY6TrfW]9E*Hp"eVU*r9nU/%n,F,<-kn42S=:
|
||||||
|
2=bVOr$N`Pk\&,od2t<>2&q$t)>H-M<hcDVJ*Aq.Q]s[7FUXLOV9_LJ_LtH$&'"t9U//Xt5!:Lq/Q[pQ
|
||||||
|
NUO78k`anposQV]"DD>?U,MkhJ=EZ>B.LV"R+Zf5RIt"7)Etg'Dpk(0X#c.WNq?E02^39u)u&/+%r(4J
|
||||||
|
mA823+X?EL_u6p&>rZV3\:Y?U`/uF@QL$]X<ai6JShCr1Mu#7NWW1ahelq^2N/dr/QcO[;ZW6Tr['Kj%
|
||||||
|
)A!_P,.O1#a&@EAqX/N;F4"oAdOu3HpdE$?@sBr7oAD_GbqV%JbhBFH-80ot_tjN)%dGEL6rc%n[Bc'F
|
||||||
|
j<3P=VlK4$,/[HOT<R5D'+KG7g(%%s'.".cMJ,+44UlCi\hu.W?!d7-]`e]HoZO;\iKVR(pXBf3g+e/V
|
||||||
|
<afC@J<qZIg:+Si@g$eKa7H[m5MKVZIXQZ7It3_2hXPkUq8\o9AGmAVDLG!=\,W:D6n!(PI$Xr#&bCP_
|
||||||
|
RdYV<Cp\IlL\<<L;Qu:"(Xp,"QZ(8H71BI"eQT_0;?'I`!lp:b!-6a46dpD([:+@AZSCL<s6'Q46.dEM
|
||||||
|
rT1@RT,\e.ZaVRS2Q6=60b;D"!9jQ]+#J'.ll7iNak-]U]'[1hD&'X\idp?^*8Db];k'3"547E$I5Kg%
|
||||||
|
etlY9=[L0\$MG7_,JKuPeq^A6&,^Q)"]-ocMD6`4)(-FJXes2F[W_%KqrRE2r,R'\hQMj.1/$#^hsmO*
|
||||||
|
s$ae>gc)a?i4jNWH<tM,r_CQc'JR&/\(E0dP"QHa1O0_fjcr%^GuZ7J>U#HlCF"1*VBh#+:/S(Q(#4l;
|
||||||
|
+g9%Q>`l[NZZV#8EocfV@`U(4Bnj8]L`2)mX"l)\>[F-(L*9VjF&(I2aQ1kR_eTXhjU-959W)iT"W-k@
|
||||||
|
Gua;3.dBr'09$^XhJM(!j;"2nq&uq<e=o1gQ"-.^"im$m=*SdW.*d<ka=GKRQ"FuiViXsr8R>\]]uZ?Q
|
||||||
|
+g253k`o4#iUN"2kYhq9<MX/o]Rl'Q53*G`fI>l]fe*LPOY.ROXQ_^qlM?QiAN]$RYrsX`<Mm6gih-*6
|
||||||
|
Q#O<V&N^MrZrbhIn2sN^EDC*.JH?'c8<@2sWVd2'+2?_T$d?1b=5q`*]b.c;B>lJmEO#/SB1'C*Uq/#>
|
||||||
|
&_4`(3Q&[)i#8]3_,\'j6&(,m"1tLCm9S+M/)k;=Z-49!Xj(u:80p[d)c^m%2GOlF,+^r<8@1Y>^7h^9
|
||||||
|
7:6`I:sp6HYT1<b9>_Q7[\hVE3^On/e[^ge;'$>dDSj$BbXKo4d>.A@U-E-o1ln/0Ips884hn1t>;sf+
|
||||||
|
B]]#0H[/iGhR:u^l@qb-U,,*a7c\o6E^W:\E=RFP+sN"[YM3e1=+(qur3`83PZOdog+[ng_5QT=#Al$6
|
||||||
|
0r'^K)YI7\StrVND=m1AKrl5Of4h!Yh70fmBAs3NkXB,Dd=rmD%EG1Pr3?NDoV1k8D=m1-<m\kNiEiec
|
||||||
|
*RXa[g=VIm01WT,D:gthC'm1>_k%.f=FL`+D/;FZEV6eV-.@4/0BFm3,A=uWdtVA[#(ARAomK4o)dAKU
|
||||||
|
BOcl_lcY):D045FST?fGobVE$S+b,-!LDS2c\OSABS`!6djhuomF4Dk>LOQBj_56.#)VRmIr*M!@!f>>
|
||||||
|
j)DD#_R$J@^-eoPp[KV-'ga0K+0P''&g(B@D=-?\M1N=Q8aG;95(<])9g&-aZVP;9a5_eq?VW8gR[PJo
|
||||||
|
$&J]>\gR["Y=gg&1s*a6qNf]@^"D&BAAA_OeTB";4HOUf4^2e'A:)mPXj&P6VJ5KnBdCq[Tg&GIOL`EX
|
||||||
|
k_?SZGLQm=9=&6!>k@EO7Vsufhp+`AgH,1$XctER`GmJ\4[8J'j08I7oC)IH@\s"oqtBccPc_qCP@mYK
|
||||||
|
/2#Nc75IA2jC8Yq8B=0:mW;=![J#]4K4TmpA/*@[/5n+&L%Ie:IYf_CFHN+S"*;NSQ_M6lpDP,Wc2*Nt
|
||||||
|
]-:es@;D`KAG3LaT5j#3BPP,\;`p"O:5lfR'N#e-d]OmOj".0"Bj>1]:1E`H;JK.Xed(UqU!I46Aq*1U
|
||||||
|
W]JteWEN=.?)tGW8[_L(N4"O!-bgqk`\Suk9hAi-cG2P&Er9pW`9aki82Ftk*F$-s=oS!f*I\kp[iUiE
|
||||||
|
a0&(D-L(>dmr!$e^3mX\q#3Tmieqpd&I)E*$YW1[8mn9I'\ed(86Pe786rY/e5[f`U&r>621uo?7Ngh%
|
||||||
|
1=>;.>sq&aSfP*h+>NYa,5iHPX3aupV3Qkj[\(]@AUdF$BLj_GDTcb5k-OAQ`FI1HN]p7Z)L[Hc]K6E7
|
||||||
|
+g\:K;aF4'HFNblIE,+bWO2P`^]b+i?^`!Il+PNeo\R#&of-d[BPZH9nBdIPH\elgZQWTlaZ$'&+S5CO
|
||||||
|
Zap]rhQ[`X2L9Ktp)Iap?&VC/R#Q!tQ$:I8q1b$&2[rf56YKGBgd]_;K'GXS1`XfO0IMT(N);MbKcL2:
|
||||||
|
_fBGJB-iu'l3R()ML,oe>%PV4OVt)).BRkphs3k9;n=C@qkA>d0P29=PTDnB&a-moXN^-H2F.59pdt=<
|
||||||
|
C*9hbC[TM^QEY,/1"2@$%j!`ogT7t_&Rl.jk%Pb>)4\ZWB>&U'ntk_V_[)Jp:n,jbI7:bL2$XA-NI7WK
|
||||||
|
J?6<lK`9SG2'gId^TEbOQ]M]+:ih%V1hi<lPr[D6FD(3@<_,Eudr;+*:%br,c$uJK)s0LZZ@N!g8YK*C
|
||||||
|
3jZNLr'Wp@%1Lp?OmC5EI>qKGTiUNn9mGmTAbp^RIn_064tko#IG.f$r$&4jf6mTtTe<<!I@cbg.:]Gb
|
||||||
|
1u,K>L5+*k`Ck-TSHCK%RX5QhGBu2pKR19Q47]phaUr1:$Fj\'PNH,=a\3VFFH9k.8(UGSo(*)jVq]4b
|
||||||
|
R>g(*dS.Z")ZV].jSnH2`>()fRYbNg-MXF_:JL:8hC6][KUiO?aY<%oFH7T9/Mn,qO[UcUB?bq5M3^_M
|
||||||
|
;Z+bu_U;+iQIM%/ilF!@Mku7QA8o1j5OgZ*d<q_94\"YqdS+81GuLnoV<tl]Y*k4tmu2$/1J,?%c,?mZ
|
||||||
|
$]P,N*eRNX>g7pFHae./9WhRRq]4'YFe)NYKk%GV[+R:uGAMGZ2S8EDPh%gM\gT-@D%;!Klk7+?4^6a:
|
||||||
|
<JfM'f^7?D>qDsIk&C>4dN&51`IHY%/H3aTc$ETZP)1'l0<P9!oFAoCdmA:\Ia6$!*/YV9c<#[#E]KC%
|
||||||
|
B>;TI-)W?dTg,,Uj5l1)I<t>;AREg@AIq`*c@\`Z0i%c#drWm%ftb">4T`LpmV9%PC@<>fipL)B^3:T5
|
||||||
|
n)B[Xn#kgFVnJ!rV%e9C@84!g&]YKT.m,o4eZ<o(-O5"M,<1)>Sp<'TMS4pNg9GiBq;/eeHhI$1bZES'
|
||||||
|
m+jO0+k,ja1]4?/qRH"N?->D(h7ictG?9:\<NVkGg9l,FCBq![*p]ZUM7opWguYtfEAm^Uo/lm@c;"bA
|
||||||
|
<6%aJ]4fFWf_=edm_d#h5]fLuQlAB"_S1DDL-Vp@Cit5W-!KQ<G9-S;`R?:00&D!M0&f8?Q8A6/h:A=,
|
||||||
|
U%YY`htO;6J"FpF0<im5I16S`LTi<P`GP6_8U/;M#QFq5a.M,"^MEWnZ4eGmS0orJL0?jlqO,(l_ui-<
|
||||||
|
E%=i?O7LL=7$L9!/%'1<,a'3R')!8;arf+`aqkdb\$I[!0GU^.aM2MSXdf'3bT$m+Q_IVk7(FYXM3Pu@
|
||||||
|
>'rba(.CZni5)dbD=gp/1l[f2Mm9<6=8br"#JtJ1EV.B\#M/*cZt$algB)P@RH"5T\^Zr\Mi73d)gta*
|
||||||
|
MkP36SDrJDck(&k(h]D%CWcCsT.gMNr)@+'(&W7<F%r5r\4!sK2jGW;G_Ui0&N-U:Efi&E,H$S,HXt_o
|
||||||
|
oQqJPoW]@4r2S36K/SDA.@r#277$I(mJ4dA3XQeMqh@a<qSbP)kOf%MR$:56M`<T?:8,?n-)I%]41YNj
|
||||||
|
lNC=hN^rF1d+pRUG$9(#jTua0bc.ZV&ts!J;df`n8JAtWCtl9IEDT8kAWH<XX]F,_Qj(1oW,<Vd0&JQk
|
||||||
|
gd"`9[?K8YX!:co9"M.sQQWI8Vj#95)2,UIfr8(<"'ui,'2im`c>mqn1JkJlKs`P?]p2YmSW'Q,kbDkp
|
||||||
|
N$4[_,,N=^f#Rc'h&je<maamn'.?mOJ6tW\>Xp9>m&D<"QfEc^&WN0%^J'W$C)7Fq24;QoX^E1DQd>-A
|
||||||
|
P*@&qpri3(<@27*_oO8XWr>cf4B+_=e/S'+X:3CqN@"frZJ<ZH>K7!7a=!br2jS>O<.0lme#54a.$eBU
|
||||||
|
iiO`-JWi)tKf&l>a*tmLf(t+[16V@M#j<c'jg)LT)UYdJPiC7@7d4jXUW+,tADGY2eMK3QT<q0FCXH<_
|
||||||
|
QLH9F-K-JF[uD\8EBHYj5'R'TK[Y/(0B1Pl=2IGKkjQN8DqZoq3N?n4ag1A[I^c5;0N)FsZs"l`;PrHp
|
||||||
|
/=QOjWa(&1b0WQtaG/-L<2DjjR#N_6(/e=*TZff%4Y)I:'Y]DP_+F]3-ohHo8nD)jWf]'Coj9[EkA8Y#
|
||||||
|
c_5c_jTlg"](M@KQ_d`c_:U<]\"T]CB<,pZFY[0rRr*AFTZ9h)ae`$`E2/\,1_>Qn%+pL!:hhH`#gY1\
|
||||||
|
Z^.W;#U<YYRV/OTAkFiMc(LP_6k$CM)m[#A[hZ;8n>=>G2q4a#.?8U1HYaptUR2)6R3h9Ip2t!0p:uA5
|
||||||
|
egG!GCp\7Ob4gSFWCu\J/Hr7fV/6F^:UF0UccP?')E$9UWf?&@\n-GH)nTl_.J^X@Q6qiB?k5b(r6'O3
|
||||||
|
YNguP]K9YOW;;@BQ^:_659'NSgc`[33t5(Ee5*M&>8('c3Pp(YHaYXj0%%/\3p#"<lo`[fJ&NS%S,A`E
|
||||||
|
=6Fo"j*;opr!(49m.j`,qEduZRQNk4Z.nGsC/"D?QgFItjh(T+YNn#k:stj?#9Up'`E,WJ$>&tbJ$+cI
|
||||||
|
3n:_BB`8fbU.lA3T]a-4):-b9qH.N:gb8,K-!@^/XWguSBLq5X]Ac!4dT<J!DH,g(L@WA?mu?@DXf<u%
|
||||||
|
B9'126,'E2beI;W-atVd#>=dI=WEk.1cbPUHmI38qh]AGZDo_L8NU1Cft77hH"43.>C5a8\o$DR1uA`s
|
||||||
|
pmZ[ZM;P.IG39b`NAg%si,=66GL9U5Ki0#`-]l42PVt=t,i.+CWV2I>.gTJFLgu]5Qp++hc@6!M9RWWe
|
||||||
|
=_7G5$Oa2#foks5<Mp6r'Hkqp1>Xs'q>aOfD;PpoU$=;5e<`+]D>DU]I<(dMLioW>-f$g0e&'2KT>(FT
|
||||||
|
0.]5CSQVu&rD7$h0^\?Z,$RJ"8XXoM.%M)KFqUY#'#V*LMajlCXRLgXL*&g]WZjK$^3O:MZ[3#dX5/l7
|
||||||
|
MXPBXUs`bF>CX=dqm8&:qfV7oNF=VY)Pcf`?=Ol_^>Q%HN[4u`N=jarHDtlDN,WKQ;KMBZ8[#C7N0>u<
|
||||||
|
=(@b')Pf40ad?Vj(`g0,.""&09TKj)i2\R>]>b,@6=Y[cH9=#R<5'oW0ol4Z&SWP`%up,'`?)LR?<c"u
|
||||||
|
2/cQ+'RjeUZ[O;E(g>BAa(N"A]30uVhfjHL@a^J*.l#(7^"Ui/5Q.i"Zk#R*S\t&p4eLHk7'<D!@"0l&
|
||||||
|
]^S<BHh')?@b,,cA%Ffb<C@_q#f!0P!7s*f/!=FdZ@V+_C7hM]%gd8QHLC8_9QmDCJ#IZ*94s__4CmH9
|
||||||
|
S[b-^q:?]s1I(H5Eb=PsFWNFUKk3#].T>fMD1:h%@F8`=!ee#I.'YD/NJP/^L[Pbggb.c,7#!NB<J"$t
|
||||||
|
D>ZBFeeeu#9u8BL?[&L=h3G%RmS`!kFm0^o-6[bR&Gj@-IbH%_*NRd=Z'O\dfGUoAht;V-GWaPq^$'XD
|
||||||
|
$]hM`^_/aO2MouFm?UIU24JU>,RfB$6J-,fMpZ]cPCUo*4DYXgk>eu_+Si[*eR:0Zj4Yd0E^%KD<onFm
|
||||||
|
`:Ek82Mjm&UY@%J9.Ofk6J!Qh[cunnR?ljLT6Snj8M!:tRakh<?ON@A=seUHWjj=\8_@30C_BFFJ(Q%)
|
||||||
|
#:L+PKWnYr(?6t%lEHX_E,?6WdcB0:5?R^7Ieio%m/"jA$U'":=dcXI7-H&j%jWX1q:aNA9Kdl`c^UME
|
||||||
|
..hoGX&gO`olo'_Ld1osYF`LskAp6CiQ(Oa[Y/iEhm;KQn^[4?S"@B[-YRl3q6^+:Ksi29]sT;(=F*0F
|
||||||
|
Rih4YE(I_qNQq*CjL&;hqQ`"/5gPPEf]BoJa"H9HUH[7H4l1lG/#pm!kL9"3a+s(lZsCDXiombm%sh>!
|
||||||
|
%E0q9p0GDEm,Ha\RfQW8QgZ(8XBiR)j7[o6;82%pb;ZP]d7PpIm;e/TEo2%#n7]PZ3D81P\Y7[;(]+Pu
|
||||||
|
&)Da"Ge+ZF?+uT'AG^V`mDjDGh@IdShL$o9^/g;#^;m;9ERTtuGIasH<K+]552M4u\@[,Er\I`5/;<f@
|
||||||
|
nRd&/'(<g1BK10*:JLEK'o2JabUXm9^%=]!B_i%^Ib8[e)R)Orl]>CmURWi2"Xi3(%ssW=>Y;)kb26+b
|
||||||
|
ij)n)H2/NKar1^,c!I4#g-2UP-n1hRN(BN1e&V'A\::+Ec>!kppQu[G\DAk86b(&#([q-kj1Y>fFRS[D
|
||||||
|
n!M:h0!-!$h8M.n+1Opa->$:6]J7paOZ?\1XXhO$8PCmlR2C-/-i->pA&[31%@Nd&0MF6+XfP(G5[""3
|
||||||
|
k`4(Zca)P:"eS,1Z79@]]`VhPF8bppia"WMmAB`ZYB3dZdf&)/X);(^b1:I8$U*tXHMW^pD0O#Qc(%P8
|
||||||
|
mchVBC1-24b7@]3Du+<ND?K$`S13jA<^p`+PiY=^7\aU=L@-%b@_<:OUqCYI"^P[glb.]8mbkDO<d.s,
|
||||||
|
H-87j<H3@)O5[9(6F^g.O&5L%`HV*kknn(d<S=c;A,V_KZh9b%\ejWb"47VrlT<\Z1P$5;Q-=,!mT!e'
|
||||||
|
Knn"%qY9P?,+j:m-UePC<q9Rl4OZ5/g_6'QATCSi2E1V;P^F,!Z`sH$ZaCS3Sjaf_G>uGq4o*k#gsb+r
|
||||||
|
r"3;l&+7PGUt^dtjN]ojs1pi-5I`)Hc"jppA')m6'.sX>#1YLk^3lj\gsDCo,./#jM%&Zc<^M$k*$l@C
|
||||||
|
f!DI%7-g3<'(/c^Go+S[\Q#[L?fa9c[K6*#hg'&-aZa=)^85K`3]#DAblSmRSYA4C.[+8e,OcZrY1^0p
|
||||||
|
<Ninh4f^Vhn?4Y6hXj.:hD!ap2Ga#ph&1Ucn#+KV=IO_Z"?k&L7HI3^o#:S#L2O2NiQ53u;@ehEbtM5-
|
||||||
|
0lM?n<nILV]:R^U7$#k1c7JG,?d@E$B7E.JL;JC-FYM/@\Vp$-Z-4;UY6Z^`_j&iG?eT3cHsk-5M<BXV
|
||||||
|
\'[BN_[>1)o1o;!Vj@tP@jTheQ/,IT48d_7\FI'nG!V7MgXZqT]9djVJTPU$[`nAT-OP,2rFpNhq5+pK
|
||||||
|
=ih=d/qJ@t[`XU<0-W02<GPiG6t#g.\A,'@*trG->99bh&MJlUM/V\I7Dr8,*FE,@oPfiV7:^$,E%`D*
|
||||||
|
2r0C*.(k@eksY`LDFlK*1W91`+u8Jr],-T:%:,0GH<Ai\'BQZ7=UjR`"B'YCGnH14Xf@!D+rUqE,3NFG
|
||||||
|
(QiVG59[eR++'k=*8Xm1;T1h5hgs"0(mnVtY4HTc,1jA10-]mjf8GGKOn[3e!MjcF]SPd$0%Z$&%.rXf
|
||||||
|
6m-)Go#u9>]SMS@[+b<jR@3a`pEHmRah<M#Qf(fGqr-#0eB>`ZKfo'PlcdtY<O#M7hY=::;d[^bosgs;
|
||||||
|
'k#0PS6(:-o^aP/$EKC95Hc!6o.#5-<iNq;h"SI=YL]pM1!;e_;F'PVPq)HPRUsKf=J^Pf_^^@c8R[nD
|
||||||
|
/;7*H:n1UD+''i_WJjp&(e:0!dAn71Vd`e\IU337O&kNlG$ajL]'!(RraD)/oD)g[12Nj`N^$:;kf8'Q
|
||||||
|
V=6,6'<IIADrR,0mjNfORt'+%L%+3[NJSJ?phF'9.&'-KQa61Q0/O@IHuP(b]Z!D,kb3"(VC3A7\:h'*
|
||||||
|
V()YOETt`N;^"IRCrfWrT\e7o#VBaqlMoDEK`<La<R49kl/E<"C%qmR(;h3;q1dr*ImU*uT@gWf+(raO
|
||||||
|
26,&_VCkQM1Al97L[+fQW'/F.74N3!r<HM[a<DE^Zl><cWf1s<.MRT;86%UhOJ4+$]<0<,jt@IolL1S*
|
||||||
|
7hoBgA\8bC4AZcD5V,C"B8L+\qe^^B`n-iMC+H&f(]2%Ye-2tAV33r%1hRPV;Of2gk<Z=!(.O&rZFSVs
|
||||||
|
Q'hYA9?@H8IAJHWZtaKGR1q0IOBtHU_nF#HWt5jq9X7bq*Y\t0MA3Z/7e[A@H2#:*AgfU+olP_M%MnQG
|
||||||
|
<CW8n;Uf6L[hX+4&pXmsetI^;@9e+%jVkk13]/!1d1rU\.Rmg#kOY$DDhL7)U%'[Fqu\=oL.)q[bqh/L
|
||||||
|
S!UlfS.nGVDCbC+/!Uk@Ya",8=S&I.=*oPlRXXdD`JS._buF;lj3.,WD(N.1XX_TVRF6i$dBd>sJoe$d
|
||||||
|
YSH)PWin[!OV)N.AV+^.mYF\6<j^7fj2(LHrJHW5m:OjM;(iN,X9pIA>:lmW5*mi]72JC[%\]]>etP$!
|
||||||
|
>_QWt\RQATC.7(u`u7D)Z:EMid6^`+3VPT#/E+9BUX^*uLh%6;A*k4X?`1o02&B#gXf29Nb"+5cZM]Z,
|
||||||
|
?u"t>bY)E>f9`eVbBL%5r-HX>6SO#[CUR!Z2WanRrdOL@]mMDGJ#g!F%mMVRMh\5k"_Jqrf0JYUI&!!-
|
||||||
|
Em?In<P^(eMs+hpGM\T<Ar1H\Mq_6C\8N,%UD"UbdepN#_UPnX$WGPmXYQ2SQJu<O[()pNM@OW6AQQ8O
|
||||||
|
*49*0/RR*!@/,!dg=m#MLp(pD>\U8_<`DQsrN.P=<u&F6,le\9]A^R[r,j_-AKI5_O88WrI@>0S=?UuT
|
||||||
|
UXck<NGBNG9J'u2G_jJK<Aac6:KG2,A#<.#.'CC4d]^fn=DL^lV@92.?G)[F4>(^?4&+$RisOnBG4Y0h
|
||||||
|
p1>Od3u1mrKc[C_+s_LX`H:hQC`W2*B(^;tZcf-hob.9V9n/+N%8P1#b9sLX.U@+"e$tY<Ug'bX.IK7*
|
||||||
|
;=[]^`7/XHX#'rjbbO/pEQm,?=o;rP4dXl+ZINj@GD>+oM\,]F+jZOjGc6LOBbF(bRRSOJ?CU541n;QA
|
||||||
|
$-+;`.*^0&mB<q;50\sE^116oC6qoV`gJm\o9d^UTD;g\<IB*qDDa$KRa/qk=Y&?]h#*)15?j=E,/s<M
|
||||||
|
r#>!KLHkg!C&V.t/,*kgRM(Y@q4XCpj7lr%0)LO(Wr5%6Ujk=/<Us9MT!%]To^71:0$Oaa1[5,1a6GWB
|
||||||
|
fmouud;i6gDnWLW>T6,@'la?l:JiEoU$&Nj_7hZ@nTa0+93>+AhAoRI?.+_A/>LI-gesCZq@nXgL0#MH
|
||||||
|
.0DM/ka:?1NBL/B0.!oIq9jVT5M3I=&d(m38"hn?N8WL#22d5)jlRMkW2;k>U:k(P!LS.'m;ZC\]co`3
|
||||||
|
4_cLO50Sg'\;TB%?J./_Q;=p0?ULGl*?eU+qhoWs<MpC#-:@[YI\AbgX&kVIYD[+4@>&P,aas:&r?57R
|
||||||
|
c>h]U>*4:0nf?+Pe(KVspZpi<@8W**oA9!K2c_bBMXq0acAM=N:+4R\:1hBpJ&q_^WZ4g8IP\<&_(njp
|
||||||
|
DsF2-,AsZA-N'ZpMdt1PD6]QCO_N5&P-_\'%]MDII+cLQWN(tgf'`[/U'Y@_bU2a>XG4c3P1g>uB,m[I
|
||||||
|
%0:)4Q4MQQ7D$<]Api"OC90BLZVEY7^CF43`QH]m`@tKEl*V.Kd]+)u4&%bJiX11GM,;A#Z)6_.7CDt[
|
||||||
|
M3p+5VY;I\P$,13Lbr-oiNq'0F@iNLI#mMGT0ED+*VeaLqW<Ch4K4*phlPfF6s<[?YI1Ck?)H#,[+1_V
|
||||||
|
X8c>KcH=]`9o$![JX"c-1#k9PlV(NI<_^=Yp2&=jX*SrY7*:r7c+[1JB^.5aU;&>Z1so*C$HYV%W;/Pm
|
||||||
|
42EA/e[/@HOZmni`DN(a47oD8mnW,M)irtMDR-)9[.rA-OjF!+Lq2O!R:O>n%8=(fTQE&mPpD>pG0Kp7
|
||||||
|
$KgncZ.d*9%7@F2:/QRQa..#JgA)qZ*KDF-jqR!Dm$MB<ES3(5B%?09CtB1?*EI2p0A1n+%dUR'A>72+
|
||||||
|
`Hn=]G2SOY'!_VG<'tggEnLKkPSJ7RSfZO$!)<"#=$!Ds)DA(9jkt6;]eZ19*H9WQA]J%:0tQ^RfaDId
|
||||||
|
FuYcj=M,*\V8Gp""d^6N5L-V%o8$bfHq/;-1hO3(3-NP]oiI'6A%*;WTfjf^d2EN7&`[Wd9`E/f%Waj=
|
||||||
|
\*4,l0q<DR-hTQ5fZ"_WC[uL6`3*<.E*GkHRhicNDQ?p;RX3WB0![XcG-%=^e,2rl>'Xc!:6RC7gU/$[
|
||||||
|
D7U+!`"sXhlUuR<SNNM$l1mb9`mq!D\*^Q#]o0D>X7u#Ced(TurGqbk.T:)/GDC<7HZttYWP,pUCCN@4
|
||||||
|
jEoL`p?q?0K5'd(VXa([75aquh,?C>]5pb2l[*h/EA_OfDPpoJjd)KHH^F8TU%`Pm6LP:mH^FN,p[+Z"
|
||||||
|
HJiu@m[h_S(n8-(j&c0DQEFu)>>h#=pT[c`7PWJlhKPR;:VG)ZG2Q\H3oB;EHKop9#E@=)dI+/eq2Rs"
|
||||||
|
ep8c&YYeS"eN)Y?[_3']S*sY$"HM-HLaHr!]aNWiZZX:EAL-8Fmfp56$Tqne`ga$DWQ*%SObji9_:GVB
|
||||||
|
:K%e+s0d+Ra%lK[UDPM"B"q2pL*K6np*K(O^LMcmT+Jm7-hcrrh@9^[\,<=e'c_],<fqt)2X/[$bhB*4
|
||||||
|
$2BJsf8)TD-,%$$]jK+3oc$S;3\W(1e4*K:n!3O`oUt^LqS`*A^[aQ=>\i/m:-2T=*/8`?<@:,Ca'q>#
|
||||||
|
]U_.k2clQpK@.N_^P^mdo0=FE3V4l-db+JaXLAo4c*Cs%=0nKpCBS-4i7MMQNM0/)Q8Q[!SXa'eji!a>
|
||||||
|
]U/;miiA#1WE'#7;%kSjX:S/,V62!3pC;Ijii=t11l90[53M[hApe?QGag:VkF1]t$JkE00-S-Q;=r#8
|
||||||
|
!]^+ERA!YF1YHZWP4fNj<:Ak6L1596gK3d/etZl-3J,N"GZ)rMI:L-:b#asqO7<\&naNBe^c$Oo&@ft0
|
||||||
|
Mm"8/*;X/n2ij0MMJuoH"@VX[[Egl_ikDRc[(_C+H.>TA1hB0W51mY#+gtP6)WU!t@pS+63p?\nN>Ii(
|
||||||
|
b6)7&2sYA"qI2:^hq"P$:6o\bH*E\>m`Xcj2n@TT>o$YV@BHOt#N*4(?#W`sbM0s^]Tnb4q5/=4<Fr8I
|
||||||
|
\dE7Pc<q]U>dpbG4T!r>[TBSrEg:G9(m.hg`s?@-]c>HT9g$!%XN]S[bE;--Fo*-qFrkA4pkJUW7hYQE
|
||||||
|
qr$,kOg2gk42-+k.eCr.di7LMX_,XLbR_*=`f3g$?4&q#n4L0TH=p5l'L[U5iuEr`D5*?!Hbrn>$oA9s
|
||||||
|
M^)ta(5FN4'MZ;0h*pe7icN)ud+<5#BQn?&cCo-QWFqFNQ]uakN7Oi]/d#nC>.sj]4Yk[b:Qeq$G3uMW
|
||||||
|
&N?qcS`3pDOjD%>*glh2l;KI@.5`bQc1g^ScY+#N<pHL9TCuQaAG6q:/fD[HLK:Tsa'TYS8j\PFdK[b.
|
||||||
|
1e!K$_kP&j"JQVI>2N[N^S<d>Wd^Bn204`*!].iJMK3lS\oi@a@3-h=EuCSkIOs-Vg\IDu"H(E/q6i3K
|
||||||
|
m\.N8X2a]nEAs90Q^R08Tre/[h<u=>C^6U_WNi7r:2s*g=f*3olT;6K`"k=p76+B9XmC/Z4I3U;I^`p$
|
||||||
|
$8mf*9<Mic[5^#s*=l&hJ+i+M4a9Lj\$bHNG,Xg-9@9g"^56uRS7)U^IVCFAVp'tT<$MQqc7=7dPSpUB
|
||||||
|
IsI(ZPf2%j@sFFM?h<@HKVVc:2BMS&g7;6S\Q38db1^8qVOT+FXEn.K&9m*<\4`l;EnVGsG3@Gqf%NQL
|
||||||
|
c+YCu=\_a[;TqfB`rE([jrV04GF"5DHuSH-ghrk_Nd6&1h-nmLj&T^:8*'AI^VSH=.C83p0iQ3e4l[lm
|
||||||
|
prWe/2iZu+%%BXp'Q<s[2XRE@)PCe/Ll390.(!UVGc0G&T(H6Fdk?Y&Q1fF7V^Tiu9(s.H<Q7Ya=!,Lm
|
||||||
|
<t3o_(tY7,K<&b/#*p,E^!c=#l;a"uPru)%AC&\[L3A0.ch>l\.-;,/1Sa]]B]ntf`Rb4LQ&s)%/)b_t
|
||||||
|
YICmB5pK<6iZ"W93aIN+e?2.Ye6;5Z`T#7#6(Oa"8\s-"#B`7gmYN'Ig_VhT'uLA7_(S6ZN6CX`]r\7%
|
||||||
|
N,#eB:LOd_A*p0hSj=5erO:@[rj#">b_'s]_kHOTjaG%]R9BA)1p]bl6roO1B2BKea,dD5a[g1fXtR52
|
||||||
|
;6sJM*6Y!QR;M81>nQ"L1ud))lZW7#3F\lC.8#s^D7+4LnGmXTBJTK0B!5>[^`n-+Y'_^FN?L^F%d=AP
|
||||||
|
8hY/6`>4#ZDA!61AHBbgQY;I8_o'#0oV^7d6`-Sed#5JRCR'&d")b0.WF9o!ln$M+6^YuWk'+0A8I9)H
|
||||||
|
(T3'Ak3ah4/PY#6GU0ScR?QIbG%n1'SU?q3I5KM9r+*M`ZfG*EfXYHq3]"N\)T3\aB5F4Z'ZuoGKG:uR
|
||||||
|
9S4Q7`g=+F_J7d=IpHGSl3FjWe)<qUm>e.]]Q:58ZKUb&>H@Of9\qGpjYs6nb$/,^@I>:9Jn[*p6Z)&]
|
||||||
|
g*PGQO4c;E`*/XP@l]`WPQ"nT*_qOgk.I7uPXYY>b=0!Fb;%Z]h]rOr#Sm=u*,0Oo]raX`Uhd*)A(BCD
|
||||||
|
h79j]hsE6M?+3nW.WO'XHdR+W0C">#L5#]Me[,"em[Hg060Z=@qp)!Yil'p!:J;QPh2Tu2Vf6,1aeeLr
|
||||||
|
]B\+Hqd,k,U2IQOT9sp>\$=L2DP7_BDpjOA`7.L/dtt&J?TVqQNr6iF]5pJ6iLX?4%c"GSEFMi%5X,qT
|
||||||
|
.c%m99YL6>WMrrDG\O804Y_*UeF&0m2c6KFQlPGIdq`'SL2Q14o93d,ceHT)jnRs/48SNtQsGG.G.u=i
|
||||||
|
`r(j&S*J2m'soDhP.UX,,lb"APq$o>>,QAD9XO/&;!lqI]9Tr1iaFZ9">Pn3;.]cE/WOp#g9mi_LGjAD
|
||||||
|
BCrs]U)3UIhU2:L``mNllD^0TiDB&XY'jc_i%C8W:)ZQ!c!$%tp.;1*0HG$J[11U6'Lk9llV;D$3U1dG
|
||||||
|
U19K!/uhjiPJt1AZ+Gk>V^r8rr+K%m90ZGpAk=e^(3&Z$^Fh-N]m%\I<\X4fV_"L(+$=V3--f\PUd4(a
|
||||||
|
BGBXK\_906FAdjimTo?=-#R"&QVNtpA5H,>=0^?Ep1OAF88%P#l54E*JWkEhS`UUhI?Cm$a5(X)G"d`'
|
||||||
|
1pqXkC1E,c%D+-7QrJuEdn([]L=pp`c?cpUAoue"s)ui90ZK;Tl`QHWI8RD4eh5WjPkh-0:SZuc15!:Y
|
||||||
|
a#kPpOg;GE7lM9G(><3Z.P0V/U8+Tok,W@M#4B:$h:gDC5cr[R)[=%uG/@k(1oXK]UMRaYH<+#fbS&^4
|
||||||
|
8,XTh]YE%O>^OFMi+;8D%D!UuXr2IEXY],342,m__,Ps*)[sb?AH2X`mi,kbG^"TKk6JcSDTO0=fWKcC
|
||||||
|
^Y!F(6@cmSdNXsNiM\9H3H2ERT>tt6i[]2Tma&XVmlC641j=@3E'-@kl^k<4^ZWqX@uCBs9K,5a9g3Gh
|
||||||
|
47C>Jd3mgWe$IRVEJ)>\-/"l\l#M"If(N&%dj[CJYA<b*kB_*pbHA,n]URL3c@iq6X#0`U4TCH?q*3D^
|
||||||
|
qks2UmsB$@!c\FXr<fW1[,bXiq\ASf)#i236pG(FafFb*#!A0'L1Js`1PQWS=I+)=q((sEZ'@9""1@C@
|
||||||
|
."R]PWc;:,4GoCe/@rK..F+V$77*XX9X<7RCQ$m02Hl%ca4TXYRC\ou0_jt#7UI.Y+.]0thJ"-XUD>Z2
|
||||||
|
c%)]F6THPE(N#p3#XrWY0)"rBB>sPm:TIjf?:;NZ8o=?MZZ+;!9[+L`-Ei5Q@JhKSbD_pCj"3#nU9s5k
|
||||||
|
DS@*:G'^O&ECY77+_lTe$mUpYEAiPA2ne2s>9WK6/3->)GpJ[_`-C>WOo3Bc4^5#saHj;\MH9Fm?aQON
|
||||||
|
RCC#i=pEI(RmfF4gJT#ZDgL<li>IpC5IPCOU1]0;r\*m8ErCDU%*&eCm(!W[q"l"pSb./Zmk91.41;fU
|
||||||
|
^X?3*4O0t>?[+)FF%gN=dMM#7`A+-,MnjO.*<Hp:buZtp^\aaAoO'Y6f=K&>n/^7cj7ubm4\&lC;W5"f
|
||||||
|
%iinc'\5@Sn&=lO\7F\K"f<j`ZNOT6ML2Ri]2\,$/,Ha0D&o?lQ/^IPl`6h<So+G/+b)#Bkjg"FF_C`b
|
||||||
|
2Y+O-)O^#..5KDFB:sXRQJu0<C,(u2<blD$D7'ekC'ieN0o*YjCpP),^Z&@tm<!!A[9k=$j4`P&fY/0J
|
||||||
|
^Yl_-L2F?,;^*_i-1V7I/`9s-Xg@e;n[n1k<a],`rc\*P!L;oUs11,V.:&[:+\ugMl;s4sRok_,IU2WJ
|
||||||
|
r>N2SgT$W]XfU&+.n[t`<:);Bfu[9i`nE)gmPbWGeOoY'a<:F3(;k'5^;.Rdk*s<i%b50tX<@+UbB0"T
|
||||||
|
Vf]Sqhg.#S^glnJK]Yr:8,DZA\$^PUWRl$ob`->sYq2BAmmIpQm)R6=4=CG:_erd0_(i%Gb0sGiE]Ad=
|
||||||
|
PQMH-jb2jN-(.V:d.V+=G*>pe1TXQB,Qi-;MFq8[M';dtEp^;Yj"u[-CgUg<4)M`2Qh0+?g]`,nj\h2q
|
||||||
|
1mbpU$/r=iE[gTO\)Hr1r^tilR5gW-20JF)l;1iHVI3GO&e-a=:F/c:c61L+eYZSF>]eJaPQ"SE'+M,l
|
||||||
|
B6^nY%$d_?(8G"`K>T1b;7k8'GO_6KlA"Q6c^R-\'R>doR\E%7fKUs:jf.?&%do$-Qh_S:RLJ[lY0#$4
|
||||||
|
?\/Vf=m&)G3AakHTH3$EQ@ucM'\YBNENsqePS2.X./SkPZ=cmPLpLZH%_Q:c0+Y]Xi&t;A@e1uKgC<_a
|
||||||
|
>=Q+-g7+*JjSG+4c(Pq%-"u%[/R?Gt=a5Y73hQ6ZLRoP;U#Wpuk(f[d"3[gB[8c7onSBkUrs%V63;<5H
|
||||||
|
SI8PH;r5@Nq=2hYXK9;A-dOm?`VS%j7oY]PV)55h[d9!R>*Z9j.*=6&4^E<uB!b/L/\G/K2;,?<[$/Y/
|
||||||
|
C:mA?pE`IT1$!AjYfalb%BH1spL^J:T_HHbK+uN$>l(QpCcT#qV^elUg.!M/;(jl[<]p(Tll5)`7`HK4
|
||||||
|
gZfB:a,hY"r8,<8ld>CuMPp5*5$t,'(D\`9't!$mIds^]lZUQEO/f<^&UjYDDmhd^^23IGF8U0ckZbM;
|
||||||
|
Epf*&V`=PFWd2uQPi$8kI""R#UPdNPG!ZYK.*AV,`:AqZ-e7@"Z\G+.=/K/oMQ^6Ll-ijlF0dF4\nPn[
|
||||||
|
9.[BYQ<HF5Bg:#9)HlC:Hg5PZp&t[sE\*e]LVeV\PAi`keFG>$GRC$AAVr7G;nLA8NN[]b'Xfp_hO&S\
|
||||||
|
2s3be+$3R/fXhcVMtO[7a[cSS)D13fB?bZA41_\O@'h8Q%g^pU>_^oA@9l-I7kkBWH6/s";,U)qj"h%^
|
||||||
|
%;aA2Vb]6#H[*[s!^)1AqjTR6XaM^+"\CMJ!;'s,^@jum!',/8c^5N%1f7b9\Suu;he+jR1r_2Plbt`H
|
||||||
|
Q[X]*aZ<c$q6g.M3&)b^.=KN/dT12&;u0_YLl:C19Z.p@64kXXXjshga,&&gH4<[.jnHMBG1u.@pD@c>
|
||||||
|
jE_#3Im6[2o#ops,(96p<sk)SF33GE>]VIg0DD-\5hU6&_ndeUHBic19/b(8nPh'UPcgM*.m#1]H./r#
|
||||||
|
/9+'9ZU:ZE8+J="^ml:U(Pu<ZDqUj;%7_MP%X7C:5tbL1r2rHSH2C%O[9)_mZ4G8M#JW[7K%L>#3nD?S
|
||||||
|
OH2/#/Xo]:Z>\nhk'9Oi[gRXFP1ScfpF)-uV;^?nICh)i"UDea/AgX1pIoungK!c-S%M=-m5[.8?TpD,
|
||||||
|
^2!m>l\HGql"A50o1Qu^Po-ORU$Hpa\Y0efgf#SD=-uWGO/J3Ro@N![.O=KA0"4gnTsX<tBs6pn#YrtQ
|
||||||
|
bb$*eUT^r7SYhjBE]T@*CZaATh=?I1*Q>,k[\@q+cO]Iscen>gA8t-"f"r?n=1(XZoP!oQVDV$lQ_lY,
|
||||||
|
/25kG455AhD)C*1Up#\0gH5V:]NCC_k3H>/>f,6+=;oVTiW`#%5KN1;41q=l&^\Obg>P^k_KV\bP\sN]
|
||||||
|
K:D@ls)X&i[anqF8"'gWDQVGaM2GbfTeH3KA*'OsO3ekKQRV&eEWr&d*0Oeg\#-@u;Qebh=bL8!UZus*
|
||||||
|
gi$9-qB2$D@217k1s/Wd(3ei,f3+9n,jWPWRWEPij-_h_>.[_#Xn<_#Du<qF2[HL^gIE+%o]o"?R8k8]
|
||||||
|
^Ynud`a:i*m!bM</?X?m8,HAp-Ypcs]iLrDUM^9f`\T3CQ`k^^I_;FJ^WX4Zik2&?NBmpBXBg&%d;N-J
|
||||||
|
"pYB-ZAc(m.A`f)q'g\i-UK-8e0VG:V8js]-C8FI"]trB40j07JJGu$MMO:7.>^#j][n?8J6C8].K,"1
|
||||||
|
h!h2+`VuHA%H1He"@R$,j`:b9+PrfT'RPdaiLR<6Ol.c",(s_k.Z.:Pmd*052UNo-P46E&nP?=^b46<N
|
||||||
|
l+-!kkIXA+5sLHKk,h8K8mO5hCXkl.J(9lDHU?tTk>?k;q!6q@j<N4[jqnp3_)i<niY-l?,Mu_)0#TE8
|
||||||
|
hpIdWAoB)<eM-F/@:`1p`S3=fc\(p.ZnrkC&AGnm9H/IhhTBH_66CH]NJ73"CR`b7mcj<qS-7rb`f1K?
|
||||||
|
cjGjt*!%sHqEl-B8X^M4<gcA]%$!*-<=LU#<QOm^4VJUra9Z:W:A-jcXd5g%jPcl9WkrP-o@\6WD5)mF
|
||||||
|
(Iuf@]neQB(%#"$qJrmGD;4eZGq-VB&%R#%1b$$b`5tiA0/@M;J=8*Zn5R8YR;%mH(?CD?GRM>U`Et;4
|
||||||
|
$c(i)cCnlB_!mms!oqr`aP+*'i*77MqUc7@2Pe)tIL>>n0b'"Q2EGWIF-iEeGM@$CoMHU(U%<G-7>oa^
|
||||||
|
X[lse9q8(2&umD_OZR]iQ)iCOFQo_RQT[%a2;bH;cKZ"3cU+8hmr\JMEJ?@VXP9pW2NH1#Zkn2EGha:!
|
||||||
|
5d0gV4,0>pfSY$GU$*!2`HLmqn$IIH8_2N18FYuYCD?5?ebT[_gN`HVF$Fin#1&"5_[0bJSHgE-l4`Th
|
||||||
|
nlBe9]m(KUUI/$]cPhl)RCXj\Q$df5eM?SV>,s?/UUo7H^&j$_7gdI<;Z)E^/j_W1.b[Uuo##T/?Bjk]
|
||||||
|
%L*/R%Lq)2p=l$a-Z`=[FSd.o$)m]SD,tmUd4`NJAP3iI"T+*_AG"'GN3R94D@Y5:C>d]eC'f1jFXn4X
|
||||||
|
$L/MaWi,-\p=897^UF.I@jm:!.k%;cO2dpI@:Pjs`h5BnmMO.ZLVf[bY#6*?aP.N"@E'L`pI=968_Y(r
|
||||||
|
;q_kdR\Zlrg="YVn29ZFpkWqFUpul,j55>+\u974J&0+NLU[+EqJ.ZV:1:TTfs8AA5S;Pk!-R<aKg>+H
|
||||||
|
gGK0g?9,d_h&*IM>j>C5A+3HOWRHpZ*J<,"]c<]Y6T2OC@O]IkORga])UQ$7\L6hGWJJ;J"Ih!NA76I*
|
||||||
|
E?$s<<(7&b;%_T+hHkF?=f*2I^-C1h5AFU'M=Y$8NQjP[^TI'M:nl8Xa<R_4MRrP`Hs[+3!A0`6>4,''
|
||||||
|
!UPm]Q2b'$3W.DSn"$Sn_NK_oar6mX/aNDq7)"CKR.:pZXaAW[P)9XSWb,]L>`k/;mUf_rN$9rt7k5cV
|
||||||
|
\)%#,??!#cYE[/X6bU,5BNE^7L=^Ega'Xj8WT3)/V=B;oNA2ToTN4Qbbr3U]%'?Kcs5iQjn7C5PF`/_K
|
||||||
|
prbC4?:_-,NoVn5GAPS]Q37H@Eo1:"ro0jh.)m2CfaQ+[CPcMW;aD\Ii\f7oGLZ1kZfnoAZ6`cC[s>(l
|
||||||
|
(bi*pg&)sj5.8+LCdk`TS=OUR#Nf^E)X)"A@J?3&UD+_DC^?Z\r>_bEZ$H-lDfejXeG6Fgk(P8qJ^StR
|
||||||
|
XQ(4/BCo9#qSBdQ3#ahV0#nr[p)A+s:Y#d49f)\mWKd.p.)H+I'&J,,)6LaFJQc3)JESC?P?q\8#f+6&
|
||||||
|
nOqZp;#B=TimO1pdAT%(o./UAeM9$Da:YNlpS$'A<CtK9mt#^4bk]Po<Z@aa!t:tkE'U$%o]]jEXLui>
|
||||||
|
XEu6])ie>bQ"T0QBnQk[)h\[lcC<W<7^?oa9sXKO34-b$`'lbkj+/eKVf#gfO5$O?7WOaZOu7t2kr(6C
|
||||||
|
iPJlZ^J&6WS2Y8CE%>-#1)Dc,o:d?-GCbC/H!["46a3M1H[@95[b-ZldgPkHH,!t=C)TP]j-9#OfEdlu
|
||||||
|
hDBN<0\.-P`nDH<:T`GRN!;6=D;9mV2]$,?%WU;r0lhT&@$!_?8"p!6fFgNPK.KEN#B$#`lR@rD0:3Ak
|
||||||
|
jN$'qD4?dt\#J9q5P>meLc>*;;'6omiCu=ikO2SeeBF)`pq0c(i=rHdcqRGS&ofR^-J0\fk0f(EbAmO)
|
||||||
|
O+7%fXVo2SlhO^?$pUg2nUt*s>V@gI7f:-WX5esm,Mlk[MKm.B)=\3GB%2U=o682NFED_4bO@mNZG2'a
|
||||||
|
@UY:j9DKN99]`[Qhq'ZXCY:M;9DMXpf<T>-kZY'614CG)Ja^[kNL0GP7IbmC#WLT?6$s!<$;,3FPrCtE
|
||||||
|
3XA_s;\'g,3@]W@;>%;:J\Q&hr/`d&r[*;G.WK95f[;,(FLDM@l/M3>BeVfDNlB%MhZ!fa^9A-'@3A>P
|
||||||
|
a3;e3VhPo1Lcb%;Q"Lp2&uMDJMU/6[X'"FW__l8@>r?fNkEli;"/2MU</r-)(,na@IDNFs*bN^;5&SWh
|
||||||
|
:i.<@D^"dn5$I3iKJh-9)6m4M8Ws'tfAT$>GZ$(BcOtuI!Z0]i`pmu-O^k,VaO$j:fni`6'uVbthpIcn
|
||||||
|
fP*n3r,U#mdYpHKFLf%oHiD3_,1"ht2].Q^=G5'(lY]X0]<)eHO0%!3_d@DL:gSNYc;DWiK8PkEeD$nq
|
||||||
|
&bh!:aqhJ+=>"-u,un).HlT\&0NB&Y2IH7tZ!5;Tg5=F\V!2KrB@n`aDL[+]]c#PELSEG0O-WX=0m:=T
|
||||||
|
oIMJnk>S]Qs+t0D^-t-P<$f\GJ#&>M(@U54G&Uq<<4(_]#IX7H#f]8n-kkG*VO8p0M;/ds#`:V-U22AL
|
||||||
|
&&Nf"a%7I4@NL:So:XUjiGd=cLrHKh7itI::\CY2a@'jU"a+uYT0@G9M@dYl@h79I4H-ETIrr-r42r5*
|
||||||
|
,'<I)if1'k;/n_XU(XH3.q;KPnNOr)J&@V!s!)kQMIP+FG7<+e[_&STMFfMW/&k!%?^+[*m>rs@0?HK7
|
||||||
|
oN"u@Y)"=bRT,u5&hJ+=`8+3@dI.5#8IldpDCaHmGp3Pa7^lpgHT@qVl1?WIVc6q=QrRMlS5QC_8Z)BW
|
||||||
|
D]VZ,P+I+\0[./[aofP_MoT#MBlbXO6USFqAPI&Ahs/^f-arF\e7:(O)&PuoEeMop-4:WEGH18#[\I1!
|
||||||
|
>![KgV%d1.]"N:u-qB%#lGUk]m"CHb?26$kN!H%T\UVMAT!^X#_qfrT=Xr\OPYBR8eL<Z/.YgEG5'9(3
|
||||||
|
:6apTb*0m*)7X4JiYG>2YY'o>(_ODZpXGrP_GR(N'BWoF&`h!:H]?3E>9VK+Jjn@STBQ<4o3XlE#7^m@
|
||||||
|
1Dkl:R()gqmV;]TQ]CQB3#s@&8Dfo>?X;11',R]HF;R%O"]iq]Xml/UNk%/q''XQQ*4%MrRV\Se2i_o8
|
||||||
|
"5o[[?/#oc::u#/ETYMmpn^`!\ai/?VPo;/FPcD]S)N:56,;f*9*n34V0;5S/<gil("N]S%A_7OU"-4t
|
||||||
|
8e&h08"QL9$)m;R8)+!F]&[k6pcXO)Q,hWe+pj3pY+ZeaH_C#)1V[@'qjD_a4#7(-#'\+DW8eP27#Q8p
|
||||||
|
WYOs%6!K5LY=*l$M!WAs:us.lT(WR7b0h<&W2;h[X:2X'CDX=238jIsbG%XJI4c,9WOlsO:Vp7]Hfnp?
|
||||||
|
!o;=243tW(Mh47+L(_i+HkmP]Nk&D-Z\*")!dfV#SbG4,-G9gHN.O2`$i"D25>l"="j0-3(sQgC>.C9(
|
||||||
|
S[thl7eb9^K].\`$j+ZLiu<H;GjH6NL6,ImOp5R*UFLK5V!^P0%AK9>ID;(-h1dY]L0lPcNKDgZ1u]ig
|
||||||
|
[qR]K9m_Et@2+0F3+C6h[hcH"i&5geq8:gMH/CQa9'2C*PfTddh;W$Em+\a?iX.kh3hlkL;S@5"K`c2s
|
||||||
|
S)\I79^1)&qRWYJ1Wn[\<:1YA.P=?8::.s\Ne1pCltu=U3K(VW`VHt=d-,a958c:#+5RE;"XiD+"jYIB
|
||||||
|
`eIn@rjk'`A]>(p#`X(bc-Q:P/S"7`HJianGo"]4nn<,!mi\X_l73F@#a8iXE^LsI"L2Dqf*B:CJGl;$
|
||||||
|
9qgUL7pXc<^I7oLNq&D'-+@<./_\c@o":,Dl.5XtaMuA8JO*/(IMp&_C:NiE8JX0-g8p"RDis"N*j%82
|
||||||
|
Ta:Dp)RF+JMk5WB$WOq]IdjKlb8bn>R7aka&GiUPoS)hCok7(a;W\AC)C5o6=.#n7"boT'Bm#=^V^le"
|
||||||
|
ak@nsE8OEM@2,m-Un@I!-)^AaMdKpDCtTB)3-PL/fk`Uc#e;I]N6-OcX:B!9ZDhA]muWL#M09p],R];Z
|
||||||
|
HDL'^fg_;mbLS6q>bR;EFmQJ?+&sOuT0%:LWUfmj2H`8L<tRGYo/H@m,uLd$Z*KrGPXSc?+>$D$aUj%Y
|
||||||
|
mFah?77hUP(N-AQ%>WeKcbEshB/'oS<D6$ZH1?;(G2)Nrhs]h*GK`.?lN>&?$*Q6-bpK%pb-BB[h?[Si
|
||||||
|
p!F,C%B.``P9eni3f[K(i3u@$:2cuma(G?_D-0FP,4a\=64Jp>ge3<84$!!80+NBtP5Wc\(IgQ@dDJV1
|
||||||
|
R&PDF7(`^a]9fHk;4,!aNa/J=CgJ=`ZAn>d:$Q?B98)Yam9ZNuBmMKu:u+6sL6m]rB9m$1!gADe9>h/a
|
||||||
|
om2Hk_dlgB'!\$LFYAlNn.N"GjEu3+ed).=%npJk]L9D+3kHK4+d'!70+fZYNPMK^e=1fAI'"Gr+p>$,
|
||||||
|
lQp#*_Krm`L<\>f!:K=hiG(k(Fj*L3;K"\aW)[#`H\l(CoD'J4>UQSPA-DIAWu'+1/51.^N?p>gX"X:@
|
||||||
|
iYUOUq?;efjH_BHbhj9-AZtJ`5?n)l1+^bWX6-QtFL)$L,$%*G;r(a8'&XO%'l9(BdOJlf`sBk@=aV%#
|
||||||
|
)J9F\*E9qBNQP5/6+dqa:I/_Eqh:`)6D(9>\SeG\n94?[jKA5NeS%pef:A2Bb-L+tB$3H]T+,TC86a.J
|
||||||
|
\=qQVD%Zb(]G"N5-4F<U\H/!/\$f:U.?%bh+e0G3(`f>lf2;mKmTNgn_:koMYboC^(Kt^-/^tB8*aGBo
|
||||||
|
T;_Ok`173<7BtdO.s4`m>,tf>9dlh9Vn):7[Z=HpY>pf_\%Gn:V*fMYMj_u:Z5&1!M/'IZSEbal-Pb25
|
||||||
|
AhRtlo^oRk_W=>[<5rcTn1T6)6(N>*j]=0)OPbnfFs'FU+rZd%FE(<BB,)>Z1p5m.>V'G%Xr0fIRXGPZ
|
||||||
|
AKRf4K2p1Tnk:tXS,t&9kcPsd!/-[%7K+DjGsjk(_BfZWlHkHJ"q5.@.l?-D>6n!7?$&/#YoB^F1]X(u
|
||||||
|
G=Ojkl_e=><UHkE/GBK%Y?b=B+QN(9o&?u^-`e_[em!:/Wf#'M(S]_<bH9Dj;42j5TZ]JZT8<2p^m6Cg
|
||||||
|
E[70C(115!.TB9]f;pI2O#1`C75hb%U^X_;*IhA-XJ26FW>/9j_,@pi=e^0cA`83)]N*A7CFVJHG@Kl!
|
||||||
|
-1ru1KkX%*->'7"=]nLL<>B+=EqJU]H+gVC1"e33en3V&AZ0./oj--keU<0q'pGESPtQfi/+n?S0o2a-
|
||||||
|
bk5!JIa-0Yj[lU!4Duekh2]Xi\bJ48W_0JYMgF=A\#`NOoGOR"aoJtF?WDL$>FC<2PkdYT:<?VOc.oF.
|
||||||
|
cdeVOJOR&O!`-]V'&d<o`NQDn)r3<^PLX9O>OAnrddkgg+9n&Lb$G`@E)iLj'^C!fQ`"ZJ/SdEu4[\3/
|
||||||
|
A$R.U8"\19Dmb!C[f%t)bsqAS]NF@@nFF/M<2kA"f*C>S;:u^)kI,<Ko3\SnHtt1.&_UMO^8Kje$4"<6
|
||||||
|
Iq!?r.s&RJIJ!;DBgGe,r>d+"9_sU;?OTAOi26A`=hh>R%(l;KDg7?"EV*(q5T=lIp+UI1VBI*3@5l^s
|
||||||
|
h+l^t01X"IhZh[0pq,C&[L*ILof'TnY=e"\f+?XFe=.b;?i0fteD.(H*JEQU^&.mg2]tbI_Vln'T5iY/
|
||||||
|
UQ9,,BM[)7\#SXae(b@cjqb)Kgjns;c)i>)j30>=IV60n##snWc*aglQ7BCub')#=81/LnDDb!?Olckt
|
||||||
|
UPK5<WnU0fX,3/iK]WKoQ>:A'BtNM.PLnTSjp#([lY70R;:6+8IhnL-(6^Mu%DgXX1cL.n5;]j_1_X=!
|
||||||
|
>HGb"2kd:_H)id2Xb'6DWGTtgEU4G-9QSrc\07n1e^3*)Y3+lKdbM8WhFhoW\XE9?gpUo\d`mlPYoI1Y
|
||||||
|
8nb3@Q>TiZ/Cg!NR&ma!1cNX&.B^2^=b-t1Hr&F,1)IGMlQe;G?qYt/Ru@%s2)im810p`e!RL&B)Q8SU
|
||||||
|
0*4l"nqaoUE7muYdl"W"Z,WZO!UoEE>O9GoIXPmIgcPCJDVV)=2)dYDZcge'7%q.[X/^.dV5-b*"-PTI
|
||||||
|
RTiecK&;!LMc(V;FAKfSJ18aFH6Et!9"gYh80pg,c6LSnql[KlAgfJp_d=2rQR7H0WN%d6m^qGHS"\3a
|
||||||
|
U/a/6,[GXJ9atdJgeUCJo4i0YUV#YXg.\Z[)%+X5>G\n#Qbt[>^3<l-NI=F%Wr]=-o#sYFh5\IS*j.jf
|
||||||
|
XWB"@BCYM3[D(I7CXM>Ijl5SGRN&58>g86`@CbO_'I:rjdT8<?BW]e>S2+I8p7]$*7*9)SX0!jBdbKZM
|
||||||
|
e_CS&k!ncF?#q7Rp[c36n*eqP25!r%lDE0>gpV!9<C%J!\NOJeX<l#b1X-B-,hLf[IGXs,X6iit-/^fW
|
||||||
|
LZZU%:(PTd];F\YdjqRNl#\elgFgb<ih>6(hN?r4h[@]rJ`H\R5I%WreZ/i.*]rKi^PI[+3%O),nH%_f
|
||||||
|
2r4=mW`>#+ol'Voc3oVC/Lb,1)LdQli[EL)5SmYlphWhtp$.n);r.-f0`"KO%;QGecF3!MN'O#8cS06P
|
||||||
|
ETonDO1,8^.sfc#CEuFYXdX[XV<ZoSPK(3/mE01oe;mYepu#',MTbI"<NL9[9_:XV_QAt86<+%lHFAaD
|
||||||
|
,ZXYYR_u"8ZZtTc2MYLWOT!_c@&\C9s!^[A`n_1Q#FfGg9foWG`WsuLMX!mZTF(:jXXB)F%]]@IM!qtl
|
||||||
|
;o@ATY=<p&[?+Q0bHR*))r*b`?J?RlS[Ss-4gU@D+oA;2V>T&mps)GU=]Y(M?bGb=OTq$Fo=1iBkT>K0
|
||||||
|
9O/8ZoZ8SgLg]^QhA*gb+dums6VrJe&\gW<&fuW8J$>jir\u!58LFhg.RA:b?AlYBT);/,;JbHj,*n#4
|
||||||
|
[O0<(5]Ae[?,&>bL*h!V4st7pXn.m9#enDh\Pg4Iha(r#A<%dY"NRpF-0l@eehD2UC#V6<0d;Wi;FT7I
|
||||||
|
6&:#J-I_+H]U61'VVB618,bp6j]\Jko,-siSR5"<mT.<4$%H7)U/=1GHkq^Y9Au?OdS.NqkcK]PM#PT\
|
||||||
|
GP(!j/nIJM3EGqW]4EjJa*O?I0U&tF5MdM&^K?:oH=EH[%.j0eIBVAlS,/T5>*^d?<De&bXt<SqJD_Fh
|
||||||
|
9pS"CE,D>;U2$m\kTF4h`K^NYh;6;;eKDtN\!H`[2N>:@FD723q80/32Hl-C3RSA74>LlPR9-[BKa`HV
|
||||||
|
4_)BS2^Vt=g)b0Z(%LI'UIV-;fW'+2USf"CBSuNgeg1#D<W.-Hh?8qRQSGA)\S:fn0$RngpkEB\pO=fe
|
||||||
|
?\#8]1]4!ViF]LW\K$%;fS*=*QoY:m&9#M"3%8<?Zgf!IrC5#q]I>B%RFT._1Xr^eF",Oa=6EhGmG=;X
|
||||||
|
XsiO0?=4^rZPFI'."47+SVlFDQ,2gh93a-66#>+ViVljTd1VLN@5HJ[mBQ0iNI@EVh"@Njf#T7e$?M5V
|
||||||
|
fs<RU=?_RW+N=Ykp*>aZV)AJqkeZ[&*SU7p'XMgs,>(:1S7?fo>@khb<LM^V:^5F$WP,5gT2Vlf=FMVL
|
||||||
|
='V#7aeu2kWMSnI4+6^d0d&qB.8!T2@kIA^0!<u;H,V>bMEF5sZCOIsa.-)D1ss5S4c?R]<]Dn2Gq/'e
|
||||||
|
1.IcR75s1KU]#$--h$)<4rfQr_AkL%?(Sn<k,kpIqjNVKapt34Zj4hS&+u9UrG^p8c&8Bn<A.\Dn"Y%Z
|
||||||
|
l"?/V,2[YYD1r6kd>PYZ:f'SV3"%(aX.gF`:DC3Y9+Kp1hIJ\sl+JL54gRn<Ufuf0-0Es+jE&(^`;>#)
|
||||||
|
#KJG-lo*H#m_7C/oH`::Dt:a0UkX8)9Rh'X!48'8#MrGWO:T-B\U<?&Xs"kgR=#8kO':!2Q@&[)&,F"5
|
||||||
|
Y05pZ7Fp4,Mi)R<j9'1nN[l3=0CY&6Q;(bS\HX3!n>6&E&$.`p>s?3jj^<$arUsF4.bj!um!^I&I`R9g
|
||||||
|
"0BTLAe'KA@)g0qnq!jl>WsiC+M.c\b-E04I-aouYbGfVd"^MPKj7rkOhfF`aKu<ZDEFn'4`D-a9Z=kQ
|
||||||
|
_;N[H=Rpc#nU:EN?Z"un[.&!_mDS>@%_qu&kHFLP^]-[Q7Jr9d^&B0oX%at6<dENQ41<0`f)P[.^RZGG
|
||||||
|
gQ2@N#MUmq~>
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
30549
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/Parent null
|
||||||
|
/Type /Pages
|
||||||
|
/MediaBox [0.0000 0.0000 431.00 434.00]
|
||||||
|
/Resources 8 0 R
|
||||||
|
/Kids [5 0 R]
|
||||||
|
/Count 1
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
[/PDF /Text /ImageC]
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/S /Transparency
|
||||||
|
/CS /DeviceRGB
|
||||||
|
/I true
|
||||||
|
/K false
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Alpha1
|
||||||
|
<<
|
||||||
|
/ca 1.0000
|
||||||
|
/CA 1.0000
|
||||||
|
/BM /Normal
|
||||||
|
/AIS false
|
||||||
|
>>
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/ProcSet 9 0 R
|
||||||
|
/ExtGState 11 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 12
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000015 00000 n
|
||||||
|
0000000315 00000 n
|
||||||
|
0000031292 00000 n
|
||||||
|
0000000445 00000 n
|
||||||
|
0000000521 00000 n
|
||||||
|
0000000609 00000 n
|
||||||
|
0000031268 00000 n
|
||||||
|
0000031746 00000 n
|
||||||
|
0000031462 00000 n
|
||||||
|
0000031501 00000 n
|
||||||
|
0000031603 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/Size 12
|
||||||
|
/Root 2 0 R
|
||||||
|
/Info 1 0 R
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
31819
|
||||||
|
%%EOF
|
|
@ -0,0 +1,228 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
|
||||||
|
<!--Created by yEd 3.18.1-->
|
||||||
|
<key attr.name="Beschreibung" attr.type="string" for="graph" id="d0"/>
|
||||||
|
<key for="port" id="d1" yfiles.type="portgraphics"/>
|
||||||
|
<key for="port" id="d2" yfiles.type="portgeometry"/>
|
||||||
|
<key for="port" id="d3" yfiles.type="portuserdata"/>
|
||||||
|
<key attr.name="url" attr.type="string" for="node" id="d4"/>
|
||||||
|
<key attr.name="description" attr.type="string" for="node" id="d5"/>
|
||||||
|
<key for="node" id="d6" yfiles.type="nodegraphics"/>
|
||||||
|
<key for="graphml" id="d7" yfiles.type="resources"/>
|
||||||
|
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
|
||||||
|
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
|
||||||
|
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
|
||||||
|
<graph edgedefault="directed" id="G">
|
||||||
|
<data key="d0" xml:space="preserve"/>
|
||||||
|
<node id="n0">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="249.93318675648084" width="150.73691016175417" x="379.82322525840146" y="-15.0"/>
|
||||||
|
<y:Fill color="#E0E0E0" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" rotationAngle="90.0" textColor="#000000" verticalTextPosition="bottom" visible="true" width="49.609375" x="9.991977284848872" xml:space="preserve" y="146.38688006175698">Internet<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.5" nodeRatioX="-0.4337124711251771" nodeRatioY="0.2841945985857549" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle3d"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n1">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="402.28247680692664" width="162.91206076630084" x="130.0970161695911" y="-19.152021620717733"/>
|
||||||
|
<y:Fill color="#E0E0E0" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="4.0" x="79.45603038315042" y="199.14123840346332">
|
||||||
|
<y:LabelModel>
|
||||||
|
<y:SmartNodeLabelModel distance="4.0"/>
|
||||||
|
</y:LabelModel>
|
||||||
|
<y:ModelParameter>
|
||||||
|
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
|
||||||
|
</y:ModelParameter>
|
||||||
|
</y:NodeLabel>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" rotationAngle="90.0" textColor="#000000" verticalTextPosition="bottom" visible="true" width="84.970703125" x="9.113003096740954" xml:space="preserve" y="302.121484753948">Local network<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.5" nodeRatioX="-0.4440618266451515" nodeRatioY="0.4622397449460143" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle3d"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n2">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="283.8426393358113" width="150.73691016175417" x="138.89277718906638" y="-15.0"/>
|
||||||
|
<y:Fill color="#D0D0D0" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" rotationAngle="90.0" textColor="#000000" verticalTextPosition="bottom" visible="true" width="86.833984375" x="8.098407213028707" xml:space="preserve" y="176.37212114063328">Local machine<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="-0.5" labelRatioY="0.5" nodeRatioX="-0.44627455741040206" nodeRatioY="0.4272958641151755" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle3d"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n3">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="32.0" width="110.0" x="166.95265436079174" y="97.8883879466967"/>
|
||||||
|
<y:Fill color="#FFFFFF" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="82.333984375" x="13.8330078125" xml:space="preserve" y="6.93359375">AusweisApp2<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n4">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="32.0" width="110.0" x="409.06939432176046" y="97.8883879466967"/>
|
||||||
|
<y:Fill color="#FFFFFF" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="65.939453125" x="22.0302734375" xml:space="preserve" y="6.93359375">eID-Server<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n5">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="32.0" width="110.0" x="409.06939432176046" y="-7.134920941481575"/>
|
||||||
|
<y:Fill color="#FFFFFF" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="99.255859375" x="5.3720703125" xml:space="preserve" y="6.93359375">Service-Provider<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n6">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="32.0" width="110.0" x="166.95265436079174" y="-7.1349209414815675"/>
|
||||||
|
<y:Fill color="#FFFFFF" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="50.142578125" x="29.9287109375" xml:space="preserve" y="6.93359375">Browser<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n7">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="30.0" width="110.0" x="409.06939432176046" y="199.59487324412942"/>
|
||||||
|
<y:Fill color="#FFFFFF" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="88.029296875" x="10.9853515625" xml:space="preserve" y="5.93359375">Update-Server<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n8">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="32.0" width="110.0" x="166.95265436079174" y="326.6678526626905"/>
|
||||||
|
<y:Fill color="#FFFFFF" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="83.4296875" x="13.28515625" xml:space="preserve" y="6.93359375">Mobile device<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<node id="n9">
|
||||||
|
<data key="d6">
|
||||||
|
<y:ShapeNode>
|
||||||
|
<y:Geometry height="32.0" width="101.0" x="171.45265436079177" y="202.91169683487496"/>
|
||||||
|
<y:Fill color="#FFFFFF" transparent="false"/>
|
||||||
|
<y:BorderStyle color="#000000" raised="false" type="line" width="1.0"/>
|
||||||
|
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" textColor="#000000" verticalTextPosition="bottom" visible="true" width="98.01953125" x="1.490234375" xml:space="preserve" y="6.93359375">Third-Party App<y:LabelModel><y:SmartNodeLabelModel distance="4.0"/></y:LabelModel><y:ModelParameter><y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/></y:ModelParameter></y:NodeLabel>
|
||||||
|
<y:Shape type="rectangle"/>
|
||||||
|
</y:ShapeNode>
|
||||||
|
</data>
|
||||||
|
</node>
|
||||||
|
<edge id="e0" source="n6" target="n5">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
<edge id="e1" source="n5" target="n4">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
<edge id="e2" source="n6" target="n3">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="30.71875" x="-34.70611583776903" xml:space="preserve" y="28.92603874253608">eID1<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="19.34674322102171" distanceToCenter="true" position="right" ratio="0.5329867452764283" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
<edge id="e3" source="n3" target="n4">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="30.71875" x="51.6604446461962" xml:space="preserve" y="-21.17213706476275">eID3<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="12.10572917405711" distanceToCenter="true" position="left" ratio="0.5105195151628484" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
<edge id="e4" source="n3" target="n8">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="54.54734563920826" sy="14.111612053303304" tx="26.398238238132535" ty="-16.02468140151575">
|
||||||
|
<y:Point x="276.5" y="269.0"/>
|
||||||
|
</y:Path>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="32.265625" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="36.77734375" x="-59.55753414077361" xml:space="preserve" y="149.35286035153882">SaC1,
|
||||||
|
SaC2 <y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="0.0" distance="1.8153536324476993" distanceToCenter="false" position="right" ratio="0.7870346060615276" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
<edge id="e5" source="n3" target="n7">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="54.971035876728166" sy="15.038770784339903" tx="-53.5611005145696" ty="-15.000980657566373"/>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="22.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="45.220703125" x="46.57289611424528" xml:space="preserve" y="33.28619210241317">Update<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="11.307275195559956" distanceToCenter="true" position="right" ratio="0.6189315207731947" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
<edge id="e6" source="n5" target="n3">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="0.0" sy="0.0" tx="27.54734563920826" ty="-1.888387946696696"/>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" rotationAngle="337.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="30.71875" x="-101.58040528438903" xml:space="preserve" y="9.329639509720586">eID2<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="15.099869002821848" distanceToCenter="true" position="right" ratio="0.3864086416472374" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
<edge id="e7" source="n3" target="n9">
|
||||||
|
<data key="d10">
|
||||||
|
<y:PolyLineEdge>
|
||||||
|
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
|
||||||
|
<y:LineStyle color="#000000" type="line" width="1.0"/>
|
||||||
|
<y:Arrows source="standard" target="standard"/>
|
||||||
|
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.1328125" horizontalTextPosition="center" iconTextGap="4" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" verticalTextPosition="bottom" visible="true" width="53.359375" x="-54.679685116747294" xml:space="preserve" y="29.445254182778">eID-SDK<y:LabelModel><y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/></y:LabelModel><y:ModelParameter><y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="27.99999999999999" distanceToCenter="true" position="right" ratio="0.5445528599796611" segment="-1"/></y:ModelParameter><y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/></y:EdgeLabel>
|
||||||
|
<y:BendStyle smoothed="false"/>
|
||||||
|
</y:PolyLineEdge>
|
||||||
|
</data>
|
||||||
|
</edge>
|
||||||
|
</graph>
|
||||||
|
<data key="d7">
|
||||||
|
<y:Resources/>
|
||||||
|
</data>
|
||||||
|
</graphml>
|
|
@ -0,0 +1,468 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%âãÏÓ
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/Title ()
|
||||||
|
/Author ()
|
||||||
|
/Subject ()
|
||||||
|
/Keywords ()
|
||||||
|
/Creator (yExport 1.5)
|
||||||
|
/Producer (org.freehep.graphicsio.pdf.YPDFGraphics2D 1.5)
|
||||||
|
/CreationDate (D:20190314163036+01'00')
|
||||||
|
/ModDate (D:20190314163036+01'00')
|
||||||
|
/Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/Type /Catalog
|
||||||
|
/Pages 3 0 R
|
||||||
|
/ViewerPreferences 4 0 R
|
||||||
|
/OpenAction [5 0 R /Fit]
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/FitWindow true
|
||||||
|
/CenterWindow false
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Parent 3 0 R
|
||||||
|
/Type /Page
|
||||||
|
/Contents 6 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Length 7 0 R
|
||||||
|
/Filter [/ASCII85Decode /FlateDecode]
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb"07]8gIEYpH@3=6'lG`nq;HU]q#?JTHO2)Ze_H+eg^#qu;6@[?d6V4qYm\$7oMj5RP_=iVW!/%s**.
|
||||||
|
R<a6SkC5_Fb<LKu0<iuMro<2=kE#Z<nbV2,O&kePit'3(PE-fhYP@n_gQ2C2j+!Tnr*TKua8c1oJ'1(V
|
||||||
|
qu?N`9)Ie$rqBe"rVuaJ5Ou#Wrl[Nt*rkmtnQTA`k3L[7cHXtOe(jk(1]3$>rd,1U-0L:i=8Y:TIS=F(
|
||||||
|
Gr3QprpoNF:qc0Jp9N!d]oD1s55Yq6DiMfPrWV1$r:]1.s3m;/:ODl[./o>TG[#6sqXaBP1Z2X>r=$3]
|
||||||
|
rO0joB.Q>CDgfPG55YrQOOUE<gFp;#qh$Opn4/>p>EA&AY90u5r37;kH-7(=fj=sKIqZ%Cq8FHT`_bP^
|
||||||
|
c?&o2r<JPdX1r/C5*1Y^J)70-)T]Ces#TY9hlAhGL@om$l<hpl^>cmjb!/F+s7(_Wqu#?mV3Xd#qY+nj
|
||||||
|
e^Aj"rF\<aY3msmr^XGAqYC.2\nh8;s7]$3bIQ3qijY$WkY1cqD:oT8orY[6^0u@0dk\.lO#IoIDl#)1
|
||||||
|
jF!HWbiDj<hHI&Ai:U,`:T(n8RXX\6>]N"Vm5]Z.oX[&/s)E#HrR&28>0AI0DU-arEmQ3\j4X>gpte1*
|
||||||
|
7-hu)?Z"sJ6\g0B>kBRdN9\'$N:[SJ\!G#9Y<sgQ%-Z6e#PC74X4GH[Fe>hBch5N&HHZ2I!_0QDO0m4i
|
||||||
|
mP>Z%3dUgG3n22hN)q9tN^)71SNa.'cEi6I.rf6FO,^ou[a%JbN%$]UZ%dY?Y6<?6f<I0FmGKbGT?Gta
|
||||||
|
Ho@l4FJ^S8R3[7tGiAZaAu!)j[(kR%EI7[8*gd8VYPqSJCnBM01,$AfO43^o%H$X=q6(V<;!S4Ud>Tl?
|
||||||
|
IL(#tX`_WAhC@_lkT0,04$?cfiDMr(bm1Aq=]q`i=lQ*;n^]5RJ*`/m92./<05L0.<i_ai5Eq2Mg>f88
|
||||||
|
3Sh$4<V+P"hra;)r'@1Oqs0F%b*qkg_l=4.+4LcTAPcrM0+Za,?61l%*,ij4%W-b*ZUi!\+jlkR/F]@<
|
||||||
|
dMH)&_E<n5LfV?l-SXu[loqLYSlKLWU8LL1CT$:u[*!?0qO=`KU/bKeDfqS0EmVn_Vj[GUbY+s<c.:3.
|
||||||
|
R&,P.=6c`E:4G^?^pO3t$Cp;)9:iXGNW%)?kuB?>q6Ld5:F'g$p2ORXXgPh79Ji5bOnn@sHsAg^Bk!rO
|
||||||
|
4[%chV3N$M36'fL>ea.@,<!T,hBk6,&SD`K1lOWEm_=/J%dE+PF"Na9)NNWN%RmSs%0sX2(u*^<D)qWf
|
||||||
|
cPT/(@)i*7gOkutRp*(<k1OCR!J1"U!or4F_!A+uT(/@-Jjunnch#E3pZOnF-U[(+PIo+E:Ceh%fg1nS
|
||||||
|
J)e625+W#:4/+jHV[O6!))sqr_Wr_4)*&O]en1^!HL/VkI.Vtrqje>O'J!eVTO,3&TS$9`<rsDu1p>mO
|
||||||
|
kb-Xa9-?SFJIKStcF`Ymhf)+/_^9qb8oY.?*G3hPJIZ"g]*(0.jR+ecTX+H[5\K_;X_?7V0F;:]()"^X
|
||||||
|
@jP<(/%o5[f$5=@aa%&O>Tkc`=pL=t/l/O'mOu>VkF85.:TKl#G'VfXFVX(R#@U>cV`AdhB%V>HIbCUi
|
||||||
|
["Hq3Q`!i@>j#f9icmN9WkM,cVk*g&:D9@_*o54h>(c6?02F\$P">Q4Bpb_sSYm>4Sd$b-``E**Q-ioW
|
||||||
|
X2TA<kuF=k[8*@JC6th=]LS%69^TrHR]k9'Bc)7>Q`$D;O7IRARUP5M(r*!g@ljRUHXE@fhK?gZXf'Kj
|
||||||
|
q(H*iK.e;K2m73YQZcn]$<fF1p,=gpem):_q.aOB__md5Wjk$U]-Gp4%#:_,.eiC5*1Xm;s,'0b3B_.j
|
||||||
|
X[7(`I%NXYZ/op!IS\:>`M'h%QKE57Wl&tC1M=.bdTd9RBg,_P0k<t!_073?Uq&JYSVuBo/pS6&T[lHA
|
||||||
|
G[6e_)F=TS">,L@6Mppdd9lnc46@X[DMEstd<0V.V\%ZSlcAUO&-'OM[NiPce++;^nbp9gB^gN;&PTm)
|
||||||
|
&(i!'=HC2/"Tp>`#AS`jYM]/p+9'8Vs/<aU""EI/kFLn4JUF*dY60:R?JYE4XP[7/pe(>srnF4GcSbK=
|
||||||
|
LS-\cdU?q_cSkR%@e&^X`P=^Dq^Xk3"5Fs[HKc`(`t'u5aJ]A#oIO(WAnZc'6buOrB7\N_0ssUU\<]Nf
|
||||||
|
NbglL[iK&@]DrSjd<S#L17!JMFH)<1$I.oI;2=lUMOuI&s87[j"fauS&R>KZ,8?U-f?""Z$'c@`V@oP/
|
||||||
|
T'8elpE!a2Fb3s`7c'P,p'?tm&-iW`kr=U5ig60:9(uhEDj_s.qCoNT]$A8e<ues"n%6j>aNjXu4/>cA
|
||||||
|
&R4(-Kf7s>H6ms'pUU+JZ8#.%fU"QR7%?]Ycs)RN68a0D&?J^0NaqD/q;o7PHKhW$;s;N')&WrKi[M\K
|
||||||
|
AM=.QWrbG])*UJF))?$4"&K2qh&&2qi%gK:GT0N?QSd.g]d#a2HbNZS1Mb@=*nM-LqE*,Q(eW`"d<a1'
|
||||||
|
1l^E>K(2&#SlDQq9jjoB)aYWBB?XkSB/X-g0Dou\ai8O:+I\26<Z#A,-5S49CdkA4D0G7FjsHfqB>2Ul
|
||||||
|
"(J@,HPsDqAJeXZUNIr1a_%E6!<)$W2E;(u*"&q7_(X'(P)8rI+ZV#UEX]ieF:$fDk+O]4C>;IB.nP<`
|
||||||
|
_@OG,k]l^M<\Tl\K3i4,+1&0fV[Am3k/*m]gZU,/G=iNgKKH$Y?/_nc:'7GaF?+;\cc51A2Rk95=RDjk
|
||||||
|
_bD7kfFLom.&EYN]@#U]Q@_]d7[^UP/)/:4XZgRgT6.YB)COmUZ+<_l3Xo%U1kB(;)ZI6+bu-3Lis3kf
|
||||||
|
UGf"7FF?u#rDNIe;QD$GcP/nnm6tNWg`Q#Oa>Gd<WjV<2YQQhLhDb;dkB.R4o@NNb+`MtNN[\qR;).Ko
|
||||||
|
]OC;rc1dAC'^Qf%]CoYt#JnDciq%n@XF-<tfOLmYKm$^7jhe\S>2>/Drtsa6[q$F^(In^P9](Kn=Bal3
|
||||||
|
pI=DCV`qE#Z^9Hi7lrnj5!Pg8q/j9`]?A/tO5c``A\QNn;0"STG0hsW30BRl0U#ET]PF,Z\MB'&ZO1Yu
|
||||||
|
_d"`\FF>Li\YA^^)3be9HVEl!G.>X_YcmigOO9VB&S7%3<7#:>C4bl[;%`\E7Zg4J/L<>7cm+N?`eX<?
|
||||||
|
>-Uk]\4QMl3d/fgiE4^RnEJTTOq0O!(+el,purh<VlrnjORRAtSX%Ll)nta6,N6cRpX%k]ZT9*K,ImH&
|
||||||
|
HO'h"$EA$4:*"Bd_'q&[m\(sc@IBhd+e*i":q28h?\@`ZO1BYUi>sajmNM5&KmO)C(qOk74Tn-$KR3tW
|
||||||
|
KGm>l#Nbl*%uKbdHO)7=lQ4Ke?2'HMdli@iqfE@b_48D+1aQ5Im$s;^Z%l_Ap8:QVY2SfBA!YI>E"<so
|
||||||
|
;RhLB;3*RhpQ-VD%iI;":i#,SjrS91gkU7?I'r$S&&B6Xi>t&Y)sc`0RW.sglZi_@K5qKn<@0$%HY=Ep
|
||||||
|
f>9\XWCsaJ8EdX?+OAY^#G#0d7sj7D_``+ghUamn*@0E+m,M@&4iEPoE"CW*?2"oc0QfS76f=h;pQ2Vk
|
||||||
|
LYu8E#7tJp5MSWh?*iBg\?Nk6o_KSU\O6CF\;,Bm<[Z\/mr,^kHBu/#m\)8lC[RmKkXq"baH=)i%#6pA
|
||||||
|
-ZdtTintOEr)Xm+U!ldS;;iQOI%LW[c/8$h?84tC.h;<8A%@@U*7s-j3q'B)P`FSYg7"('f@/$7n_O'"
|
||||||
|
d#NP;ijU`!6O,ao\$'SbeJ`J>3PXs@o'VODF1Ye,p.4Gno+-T9s4P+8@KV\86fE9='[t:>rUb9BQfh^,
|
||||||
|
e,c/S+/@T1/'"_arFtTjLjQui^%=7Dp6#N=1S3.PU)fdW^9D:+*ONt`*KB(-/6YQHKc;q.QG;3m>OoJp
|
||||||
|
>+YZWEk<#K.UfZX^E[*b1_uY[h?p71ig9PDmCr%[3$`;=eX=LYc(['0[\I>8[/=KXMjEfPf:p5cbBAdZ
|
||||||
|
4dt>=I%B/=S+1hVqhYpWCGCigHGcJ"jLm<b(+k$H>ec8d1$s0MWnc0S37)c*f$I\C__PPRaWp-!Hp'su
|
||||||
|
mDh?<O</id_`&!uRca*s6gH^Vd=G&p@lABZEs3p$Mq21kK>@P*CF<]_R-pV=mDb1N%*((CSu-:pa)l]M
|
||||||
|
363HWYi9'jr3fJ"H)n<%4/T@`a"a.Da"Ef6:?PEnTt*m"`8_ekUb3&i8[$oi@7Hl?-C]AdP4Ih0CnLBo
|
||||||
|
1T`36f^\##h"QhIO8i!tFQ\+]jm,//mP"Q7?Ro*67j(c6R&*;XPPsHZoWt"YY4<B9nXgTMp8ph&#A_Wr
|
||||||
|
fH:)pO1r71"'o7=C4Bp#htb55r`77p@3k"FYQ&#$J+\!qeHReVn]s;I;ZlhZoj7t'r4N^'l`bhV6/sK]
|
||||||
|
=86t`g\r%HrM,Bj#WDU%oX'*.])UmUrg0DW?]OQ(3P,7Pkl-pDqd5BOIlY+?ZQ7k373k'&]b(L+BYF(\
|
||||||
|
FD!Z!Y+o2j-@Z?BFpV*5cKhftISLc<9etHDUWj3dGFLM]B5d/OFkAj087l`upZ8*0W@5AM-fQ`eR\,A7
|
||||||
|
"et=BcN7I/q>&>2NY23:lG[BEn5D$\%/_9.Z[^21Cks]S`P8HR9Rjm8<.-A1gXrtqrQE)0L,4:+a1!/-
|
||||||
|
k_Is`SZ[roV>r-Rf5P9Gq%g*Z=#0Ym[U_A\XWQGkoA.nRQRb4E9Gl@QTX:p"rI!jE/TbB=\bt*k'SRsG
|
||||||
|
dM=8Xj9hI'gZ8d4rjfXG\O^b[Z/c63b\=Xn_,kfoEeP"hmW.E^SO7GibSQ"=l'^t;O=PlVXr'(-ElNS'
|
||||||
|
ZV-=M/>gbSb5%4UQ,IY'/']#Q"_6_hNl`$R+]g@9EZd`P2!@30j5=afEQIKf)RhSradk%chu[QHU<+-0
|
||||||
|
L:Qn)=5Y^7`T;uNO=Q&QXuM_PJQ'+6,jD0N\6K'cnUe1>O@jPIDW5j$$67KOE0abFDabt6/%pbjRoB.T
|
||||||
|
@6Wl_j1@fK4hJErb']o;G>WCC\KeZEf]<Il1LI\50[h%qcRR-s>co&72jVW%XOu_h<uS/sjDs?+aVDjZ
|
||||||
|
/"d;BOt-<%-4R7X&c3]]K)I!@%EX/BBftOL:];n!pZZ_/niCs>`dG@$5N/2P2[[/=*h%E!-&u=*SP-K\
|
||||||
|
j_+f:5,bRM(5F-D3"2:qJR=H)('i`dm[h6,J20AD-0W`>;MG!r4tM_S"4GrH^#Tr!hmO?Gi\2>f7jf*r
|
||||||
|
MZ[mlKhIo06WsY>a1ON=:S/Ik:Q+8+>fO020P_maNe;;.AJU&pYW*WGiolP.AoZbBm9t#,5nZ#4"$Ki2
|
||||||
|
D$opeZjU%W*H'N67h-HcXrr,;4F"RI/Iog=EF<*HlC^qWs6am\$ban)T7$B9L7`Eu+p.u)^>[Eh7\SXQ
|
||||||
|
g;0_P*I\iFIT7IpmbkK^[7BudCE0#-aFi=X4$XmYQ@p9O_]d@D4!(%6M?@t<pCO9W<r9gTJ8X!Ld",l@
|
||||||
|
nc8W]8Su6Qcjq1<RY."Me9IM%,P$Jkq;VI'<,NLj4Yrl-iW.fs/Ip,:57aL>1\^"[nNH.uZKN0EDYX)J
|
||||||
|
m"dFR&7.'f`E+$LR_Sfg=ikXA`YX(FA>Ga0iTJ%3Ne74;UV7^RPV37\asp6Ri%_K6_a-nQ1hrE#`\V@s
|
||||||
|
k;PN'+>juCC+t$r!kS:0?Z8ho@AAR63;i3o0YtrPV$7p<o]=SQ"-jK"',*R]Ff>D::H;Ud*Bi:Yo60^g
|
||||||
|
Kcb*@bVo!1$3WoC[=r[`<N)8:5$ga2Y/_./_%5GWJe)XB3!Bdif"BrU'7?s035o--'+:^WjP^f-/XumW
|
||||||
|
A7d1+.1YXm81g?@_3\+aS73d:9@Nf?-FXApi/G[`+gaSp(`lFl`a).B(/Al=UgD8a$Hs-D0H!Vo.)IEh
|
||||||
|
dg_p/IGE08)t[!n1r:]'C4673&3?uSGM+2G_h[?UG"f&XMA:<1LJt:m"47CP358cWZ=6!;>>PIB0C%\e
|
||||||
|
1:%W=S74ce\ZMdU29.@W^@V*i2u]35s3EaWqSS(Z"2aot5([Q9V^_4o59/k'"-a=Gr[X#l0deW0#QI?f
|
||||||
|
N'G!os7X$10-/:F0iT]qOm*HbE%rBWj-9/DKbIa1kG\X1L[Y](Pl/MRT("6N*m\qh"k!(%iH<`C^u^PZ
|
||||||
|
?spp"S/lZ!N7lejXSm]/e:mc^I,KdB5C;<*15!?W#r^Ps7bfsg+G*[E_gU_SIcA8Onnfu8$>8]k6bcU7
|
||||||
|
p;,[Cn,]ST[cR="\S0o?9[=?hK?l_]c1>"a])Dk#]`X^NG>b'F^0A7r6XO_Gjk7u0#`]go*T:/"*k/QK
|
||||||
|
T8]Q:T.t7S\(Q/[E:iZSaSlPe.oB4<^RWms>"sdg<Q@AX<Z6GO_pm3`:V(&s[*aeK:S43org'V)\]/hs
|
||||||
|
EqIZGc?`]_H35uZ;,J9.b(,t`;eIVn&t%?ud@'Z9cPirRDpk(06Tp>GN_Z8fHGgI.2t";k76:dRdqF<j
|
||||||
|
q7-c>;a,B`XI8#W3ilX4:I6YdGFGYN@On9&/9^]#3`?!gf;uCD.iB?0i\-Eeb%Id;WG#oLL@:S@BG]Xs
|
||||||
|
8TR#Ea0"fJ7lD1^[O1sY@NZ1<Hp!.-dlJ#b;pcTFA-9.rD4SdA)WjbB_Kcu5;.)dl1Y&n=Q$aiEJ$SV7
|
||||||
|
3urtW"KsBM>CN=*cVE5'C2K]`@:'V+-`<jcN`!:J-+M.aI\9b#%?PZ#WacO%H2*s\WGBNWSm$i!`<'A?
|
||||||
|
oP!.ASrV.Vg)ei:[-F:N'he,gr/CUT-W.P:[)G8Tj<a-<G];t)+rn#T081W;_2.*_*2ng`%rBU?kG)F[
|
||||||
|
c.b:dDu#TKNF]Yg??I7c(@>)NZY2iLebZ,#&5[/g&iW\iaCTE$:%'C[`mHf=N>XC'ID@93p./eFq(0oT
|
||||||
|
a+hk*X\688HJ;6>6aAj?\j.,BboG"BE53hn`ZB*KD=:bHX3a9M%h&mcX4l4H@5G7Ca'B[aO2`-l]!TX.
|
||||||
|
b7XPR_8@FB`0[jgqQSN9JNkca!%K<^0uh0cj"OJ(X(h-UX^+$AIeimO^Kd@ppNa#B-BA&e0CYf#s$ae>
|
||||||
|
gc)a?i4o&Eot9-8r10!P3)mK$\(E0dP&V2iYIk5/o#dSj]IFU5/s4<G23PU%;j,(&Vl3VdlCcfOnd5V6
|
||||||
|
,NKRMgHo4,Ed;d^j;$N.6XJ_jYWq1`NY9s/=6RD-aHb2De$]K:H1es4/&]9R$@,WFVf6p8"3_YRWndPQ
|
||||||
|
e>JC7)CopCgU^J-.hi!*%s`j1+oNRf*4rl#6"C=JKf=d?ir%tp]Y[oYBnjO4'_:N5afC?)(KipIjAk.C
|
||||||
|
^%.'B:`f07IB"HoMNgeu<sPl(OB6#Z4-EZV],Z>h\nLlFVW1dZlTb*.nW6hkp9<UXRGLPnJ*mPA($a49
|
||||||
|
bT9$;[&c-Y4]#m5:1a,aiA';$?WS`VU&X-hggbn<KBu4#R^>!T=7WHF`@06%Sf#kr079I28pWm"0M]o4
|
||||||
|
E0?MnAZ4W=h7K?TL8Y3dW+G@%d:=ceC/2#ChN?RH>_do16GA4P'mF<N,`s>2fcu8?$Trhqe7Dhe-F&g_
|
||||||
|
,r3r6_gB!PHr4EiC0dX1<aDoKMW4E84='>4c+<5c1*cWAqN)b%oR"f?k)hIc:CQ9na@J)B\nS$./'""2
|
||||||
|
bM0&j[^A"jpHWp(SI(`C,2[I*,8saHA,+$!Lbtj>DQ@JVojpOi?mBteWJ^PF%E"MJN1.K?TT(6XB!eg1
|
||||||
|
UHU3^P;F&Q%HMH/gR>s'SMiOZNCt3M(`Pa[]uYpAD)cRiE%K`$O]p+$0,fo#7aGtYJi6@7pPRMAdGn`G
|
||||||
|
F#9S]EMWK[L<W)eVXTd-m"qBpj`W%dA%U:1e_dNp9^cQ,P_20oTFFCd)id?+puR=^pCRRGCe7[&N@"G&
|
||||||
|
0-e'8d7nCucK0:[>!@b/XMKHFlCqp]^`52LbF<42h=Pl*T_PX'Ng91BLFe(rFG.RWr\guD>K(Tlg*Yc]
|
||||||
|
Uf-(n<@)_kW!Y8.Bt1l%8UPKF\$_.c-\h5aZ-DE<H2eHn;0D5TB:mUQNsDNnW)nF*2+QpF]UI]g-j.Gl
|
||||||
|
J[k8B5).LpZjuE@ep\nIINYbi@iFi%c5#tf[Jc<V=lZnJ_k`]t]f2dM1t.-SFR()kO.Xf/E?jnM&NZ4i
|
||||||
|
bquunh_C,EBOlUtO8cS3oT+;I>J_Q\o`Y!d`#k#Wo4QC!`W$W*je(G>ht'aS)E&pZ:>dZUa*=%%RN`hh
|
||||||
|
cppDD,.aY0!j/kc"<8u_4=$\8F0al5\5kql;3cl-Rkp/ZS:S62q+K+BdsI&bX_)uPdToZKJYm,uRJlOG
|
||||||
|
B@r^k9hi*>MMKUA`42j>&]TGWK@W%&B1Y6Q/;tg[3Jk_i8?#;eE$)U%KZ7G:mI#HkC1j+*lVuqESWZ:i
|
||||||
|
\g6%/>/ja"c,hV1]$]ZYY:420jpXr,OlHtQ'!p&A,L*%KG&6QkAbjO4GPGb3;dU%'fQG<e,X&p%]:0a3
|
||||||
|
G)bZ(K^UR)'43:@6l9SD/YF]_.=lmk<c(LD,`lP(^ePYXmmL)RO@U,-6^<Ut80-!Y'/=OP&08T5G0%:G
|
||||||
|
d_?(POT+&ShqKEQ9=6sN<IV"Qo[gI*1Koej`if.(ZDqU#Huek)3nELf['sWgP0*[O[ej*\;L"CPmrlI@
|
||||||
|
n+]HsQ-'%<\6sm`9Cp%P]iR7_hMY2I@DpY\#LL,[7+<KA(AC3)l&&VTcF%0r@eS%36M,`I:/'A,^lmcu
|
||||||
|
0k`a(7TDt&7^o^hYF*Z-%3mrQ)GGuOfJKmdgISUtW#dcd_r7*nF(1NR(cBrDp^p>T/Vj%J<cSm]VocG.
|
||||||
|
jLk3@>33YtaUD.&.]IMhhs3k9;n=C@qkA>d0P29=PTDnB&a-mO<p"T_)kd1-glb.Rl6u'*f%cnF/7I):
|
||||||
|
6Op<qO>H(AHraOO#UtYrbgSH[1,t38CqY-lL+09<%3NgpDb<J0p(ct$79lMsiI(bGeTE#,^TOU\EJF@-
|
||||||
|
X^&Dh:mDQ:]#GsO<af%,k#cEGS^!@%+o*ff_i`M-e_?NMs+unWfGR;E%g4jb$DkVeRI@!7-Q7;L@)rP2
|
||||||
|
>W*8houM#:[:8TA_F)X%e(:r&CDqKlGnK6)e&FFk0#BZ$c1b!KlB3(7k@odE1</$:_d.%hBG_1`]_!Q*
|
||||||
|
3T*f1q<?l+:@I>+:lk?\7m?Yt3TA7d!S:"Wd[WrdR7ZG&mP2q3FNjs!`V$Z7pPhNr)8TIPR>g)g!,*\a
|
||||||
|
RI.s.0]\[Z@qd:bV<k+WpDWLbAhq5!#0g\GpKkGOONnW1ahb#HlV+VYV4#Oq)^$u$RDjlVRER4],L+/h
|
||||||
|
CF0ij'01JUit]2FgXo"X)hm]766E\"'Ii0=^%.Gsmg?U;18[fZ>VeZ8HJjjBV-dX.=8*QE53$B)A'"eW
|
||||||
|
f'+s#C2NE`6oWY=<p:?Zbn&36e!RmZo1QIDI1N&;$Ncmq:\-]U3V71[9*!<3Cite>-1^ZGDU34b@S%;)
|
||||||
|
LS#Y3g!S\^r3n7onTX\@f%[4C9[!KcC&MtIG<!=*f%b^TA2>teLLLIRo+g5L>Y_+h>[BNQD:og'j7tQ=
|
||||||
|
^::W;2qkme^7`0Ok2S!3W.^.]f\GZ36!NIRfA?0+#iE7palBA6Mg1&iG9-M9Ff`97?f&K.Ra[o&meLTj
|
||||||
|
Z$0!)dbVNkj+rmL4?LO4XEF>1%ed%qE;89qgSHFo/nSh<hK@n+pL<O?e#+s.EGMh'f8tb]]5u4VBAM.Z
|
||||||
|
IJ</5IT#(j]<?R*ouCChlC"h]He5NGi0nXp]ehgU=#H2Rgt"+'B"r_BLL8okBgJ!KfI:YRNVP*u]t92p
|
||||||
|
iF6FB\g'>]D)Zmtp[5l25?n*!^Cm[@fXm/ln)ERGHP^V7HP^ZG&'l,?d;E`^D5b/6rV+"kpn-a@p^=aA
|
||||||
|
D-t>8rujK48GjG*H4msOqh'BMgZ-WIhX>bSZKN>Nn]@6Rlco!\;"P,f$_oCQrk@WY&7hZN.Dpt%TlpSa
|
||||||
|
O8/nfqD^*<@#R%n`/lD$*51sUb047/Oo9u%X@/l]0PXX;QE9AgP_<)C[,tk%X9YcR`!e"/AEPV)@o
|
||||||
|
Bq:WQU%e9>"Z_+#Qb/AddWDc(%9f/`3fW%,EMD2i)%4&Wd6'-%^G,mEe,KYm/Y4J&po%QD02p6Je=-je
|
||||||
|
G*0^a*Tra<H9/qLIJXB>+j!c\.ao;*7N0:8l&@m]3Q&;H;Z;A,<Xd/T0h]#FB,&"/Q[/L^Vca2TKQ55)
|
||||||
|
37^FP$^tudS>V=s<hU<[d_Lt,#mh@'8fnWbgW2NUHis<$.YFTC6b(J)Ah/JsOaWQK)F\p'Nd'o;QF@oG
|
||||||
|
QDRSS!@e2M"BjlT$;S?%9h:4TY)u`l8PG(l<ZeR2aoa)N@n#<1,,p^t"2m9<.^NFgD%5R`d)4a[;$cD6
|
||||||
|
Eu#M(LZkKK.'l+.SeYidZVkW&1fA%:;hiZ%g$,'\C.Nj:Hp;f8F2(UVi1-63k;1Y$#8b"0ktS^Ko1`eU
|
||||||
|
OA+)[1c6G(WP9nI>-0s]2g.jc*GZu#W\j4?H_=I5bmHG'R_,93H9?M>`HFj^`Z`dA'k-"p?C#e=H"[A+
|
||||||
|
$A*nWljfQZUI<ehTRXpV(jbAtEk\Y<hEe:Rlo1J&,9SCKFg.f/R>X;_3]eSQ@?]BtIU\DLSt/o?JUXKF
|
||||||
|
VcdB3Eb%(P5^u_pfKe##Z1qEFohd$je@OL9lE=D6Q*4/gh?(Fp^=%#3KN>8]rc#N3]:omMd/DI]GlD/C
|
||||||
|
X3(8ACSgtJ^O1K#?INGld#r8u,R-o6IVU*JTO.0*D(_(PQ0JO;BQ02.9,fA`0*8<KfT+2ESSr;]NZ?,<
|
||||||
|
bs[>]&^WlCa"Tmfb9$2_N1S&n/UT?q*Kg(a+*huST/fQT=Y#*PR3d^c;#`I0VW;7<l#O0h`f,j8AN9RG
|
||||||
|
Zo=7!o,6cO.tOT\GYH'WhVpoZNlmV?1FeCSnO8t>5JJWEGQVUO/,oO&0('KnJ4s?.*W*fWCsVDVPJ/^?
|
||||||
|
!5(Vf(<.!t;Ef&N[)L!#Oio,EA_%:*Vi7Z0Qog$0oo?g$j9[/&"rspdougprKD1OlO^Rb*5#>^#>ZcV"
|
||||||
|
5,bB]#GoP_g)mG$noG?8*iU>724!&CY5;0t1P\b)2B\EVDZ]UUKt:Xdc?Aj*H$Zon.Nk^To.hRkc@9Bj
|
||||||
|
5;O8p;LX-ODlm48JIe:X*,T3?Zbj>S<H8-I'R]Atr)W-9$=q_iH0Nj8@<jU>H*NeSh6!F&rMJj&D95k^
|
||||||
|
ietdq-@Aj^Ytgf*jl9@cG^WE,P?q45PA[TTJU2fE7PuJgB<[R!\i7dUO?c@S/[naZ7[$)C^:fUnh0_DL
|
||||||
|
5TY7p$"PG0OK_A#SPcm"6KH(080GiGXH5[Pm2e$[e!GA,OO!?j[7fXQ!pKjf8g'YkNfZMnV&9n:kXqM`
|
||||||
|
-?6WVqk)NHTKsB"Oi\q[:7kM@cQnUk'mOMD;hbi0OKI&#!b(`s+b@r1.6f)>YfdWUgkLdPN2=)uW&$Io
|
||||||
|
>)RQTrUTb)I<iQ+NYGCX4rklWGe.NKIE2&oc8Xr6\GT;#EkB.qOU$VumMI"R_Rh'lcgL$bll<&@d*jAE
|
||||||
|
\&]MFKLfXX'h;mm-7bs/GSaKSP:'/qiR4JrbNE]VZ/(JM=T=.p)V!>7;hq8#-rAnO4KX?&_XmW^s8GF'
|
||||||
|
ohM-t1[p0H+:[AcX9>eS(K,h&]USYSR=VDRG'NW47%pA@abhh],=lAk^'V1u-!Pp1)skXFY4c2U";=qU
|
||||||
|
oKt:U/*4Ph7l(i(2Z-u)n/"5Vpr^NX?M,#kX/E2MA*>AJ4nY&m?M0Q9T99C"`iH![q=CS`#[]^u^V+s9
|
||||||
|
Cem3*[T>V'[\o^K*aUuurP*Z9n8lk;2L]ES)jMR^nBa2Q<1f#;Db?JYYU#_<<OJFFCEV02^f?JV68Aj7
|
||||||
|
E-1nuR71@^Q`$.GK'-$S$[iaP'IUNAX>QKf%1D=D1(jTU)TZj^^K`li]'ipH55A7r?'/@BRj$MSneG=:
|
||||||
|
g_oq_BtnbnJ_lkrK33P(P'Gp)9_H%Spmg5cT5gpF7iGXS3UY>!Q#XsYX:3ok&]9ZFcgk*pC-"7/=7;Q9
|
||||||
|
:l\RG?_O>;:I#VPF]ZUmZd)Y&Wa&?nkbZ&Qc$\q'?/0LFc"aPI"*]s3VV<_LJfa=/&0=qnfFKIfaf*Y%
|
||||||
|
."$NLZY&23It,AdD1sW%f.XktVf'*]q/Q9SN.XQF2E(LaE+n5nE9fpKW*iOO]pd)][L^ogZU;6--[i(Z
|
||||||
|
\F:0QgY&Y\7:N;t+'UNt@[RTeX%IW-*`uA[`1!U'B:2c3L-,R-2E@M;iLSV[W:>:Xd*@\X[],H[/,]IN
|
||||||
|
;/74*h$H%)k*Qt]D8,"r[G`d#_qVcIXD6o5SG7#oj#A&$P[;)TSl@>'1ogC8r6pLZk;Hf"UO^XF?^`hm
|
||||||
|
,;u>0pO6=h_HCQ%pr[68raFWFeBQ/\XVEhQ8g?oaF^"1(WqeqL$c"4IemajRXgM@ST51RE.JtMU-(Ui/
|
||||||
|
CN\]AX'sI\q9/,..hM/c1p%L":#S#3R`4qtoWLLW-5]HO\$\e:;JX7]lbdWB4Mu*S=UMp#U!Qu"gXT3L
|
||||||
|
a'G=I-t7m6/'nX<$$q^UIM:X:DejhQiA^;7\lrlNk$D`'q"9%09amNZamk/D"LH#4I+)921(g:HM'_]8
|
||||||
|
kBHR[q6hB8e8Xo^SsX0\'o+sSgd<1Ji9)6kHY2>+m,>+_eOOBaI0?K3oF]!7O79WPO7:DfO*"Qp=!(j(
|
||||||
|
66BVH6Q`T4LH]2B_$g7Tdi$=\^W.F^N.+PYljn*k@DDSps#Hu5s-2sMhWYGiFjm0E_]eP$KD:!J1b6Jf
|
||||||
|
3eauJ2KN5NjGRlOW;f8t*%!3(56am`a%1nC;&^FRSRd!)$5'[He^'_M?cg2]6M,),2.5o&jI[2fe(d#]
|
||||||
|
k*=<^5;(g#Zdir9TDFFFOj[Ohi"sgWZa+RTlpB%!(4*I6EP#k+C$+3k%]l)!JXO,Dq9AboWS29k@b4OY
|
||||||
|
hT?_R@&l,Z@6)3eKufkM.mHGbGcUH1WOuTlC9&ms2&CPVc2q*Sq7-%Y-P,512BKaXGD$7lR6ErDcI'UT
|
||||||
|
pqGu0BJ.h;ZSgbPosn`$218[:V<3?m22h,JlggIZBf:s-r^>IUbaVD[R^51AX?#>l5Im]Ni0MGS:AYt?
|
||||||
|
mKn9OVe$M\Ik42E#jtj6eK1j&2*p$(."puJ8iX=.J(pN@g7+'dii>lCa^1dt$AI<HVtE9aVr7mT6oK%5
|
||||||
|
=E>c=hb(C,"P9_8T_u%VODR.tRKI$C#d$*WDD)hbCX.BCG*Ta"X=erZX?$!Qhg'&/KZ#Dts#F6fp2Kqm
|
||||||
|
_75R#:=5V\Pt;Htbo$l#ag%p-qk[G:bc9OOR^92d29-c74+klTIJ4V/=EA`$LG`.4Y/78#8%2PeH7l<[
|
||||||
|
r\?<7S!hWE0lP[T.m2X2CX1::FbF>NnX&k@kh4j;bE:]BZ&:C/(%/6H>:2duEMBVi]YcOlo1OFq%N*jh
|
||||||
|
(?5,js66;,^=[JMfR;BWGi.@Rb]mN#/#DU/U=di5/uZnK@(W*$Q2k:0ZH-%HpiCG)8%-WOiPLbOb)4`7
|
||||||
|
2N:kSg\#R1AL1-.\HFf4]!X#"!@R6T,dgQSaapH_pS.UdPo3\K^Q>574$E5;0M6'N9gf;nX!Y/m:`*'_
|
||||||
|
[MG2@=hVZY]*+nh[:P!dc:_Dj/4N#4c=Nu?RdE@794e0f=3eDE461)^(N]2KTkgr0o<G>H'>gJ$S+!D#
|
||||||
|
NJ?"o_O:3]1N7VsP1K=HhGdY@<B6,-$g`Mbb/-%#N(^bahgO.3lrB+tKBN>-d(TVTWN$AeG=HH;_C?oE
|
||||||
|
#\QK6cFe,!B4'i4=9GfelP"Qi7Q\t[kNf?-oKQQNk@*D7k65G\J\"VMEVW$G=m1l=Zki0\f(@8MF%U-a
|
||||||
|
NAU4*3n31)I-Pi=]NZ/W:?#ff,#>bg.8-Z3D<:Z\Bi+s.20,R0\ZO\pV8<s\mQ"2<pOd7OZ2g^\AT?f)
|
||||||
|
WaW58q9(a/!EtO_(4<O0.1<Jlj-0^\4\f.;npdBVfkDSq<?P?'1OBl.P,@!7S>G?@WhHXuM'&WHk`]:k
|
||||||
|
'tD43$[S)u*2QaQR+n[WqpE!lpTT/D>$ZK?UOSf>i-EoR21*lX=e-O^S?ee0o5Vp)GO9KV=k=pJq>?7.
|
||||||
|
P]^^VZ9n?Wm`*'=YP;j;XiQ\XNN7bG!IOp%V]S)MAs1bYlfb$^25WlMND'%]>foBWND"25SZ4QRAPM2O
|
||||||
|
0C!Cc%)$F]lMoDEK`<LpWb3>i)U&eqBD;\s'uM)opBAV/s+F4c5I#.A)b4"tRm]-&dB\J*1kn4ImSKGr
|
||||||
|
(m/`q:8-[Ej1<+M4@MPYMJL=.V15M>Dc?uJf7BqSMBPFGUiosf6I&pr,(HfUAX<1oN2E>6G%HL8@^-M.
|
||||||
|
9-!!F?cKQbI/So$[K8a>.mOa9icQLT:pPO\(&V5$-.jRHl+4q1(p^^)\!<*578(`^.t+6ENiZu5Gf1FL
|
||||||
|
Uc^.t?#dZp0cl('Al,\"d4`?j"fB99JC/e_W#SC1i[pSk;Ac;V_nmUHW5t8`M[/Msct'7@q_"2P;sAuh
|
||||||
|
MFi;1PYI<]NBidj2'6r/"mW+6&=DG.r2%s`pU8VGnLS6n""2J#AuBg;(#$fPD-l(t-nD[)s40fUhF\s1
|
||||||
|
4KLK"5n_a2.^$ja@(=Q2hc?iR;:A2rs#n)$?f&eC3mjtU4.ZaoW#Il]jsrF3=q=g<Ni;d]<#1Vc<dH+&
|
||||||
|
QKsP:pI0lr)LX_:Tp2/c:YX-mTqPdJ[YI%FT<4F0/"]I>eaSr?`ab0`'2d/G.$CpBAd!=ZnrKp:(S"`j
|
||||||
|
GY"fH]4`?:B:+%:F`d-0WmU*t"5I-.g1G^BF^M&dQ8KIRX0&?#f#kQBr$C?DC`\sip`B$iR)nlmCu4_'
|
||||||
|
CE>^31Q1PZSCuofKPX!3_<gV\ce?RoP4l@g0rF$oDP3[Q4b4I\^bsJb+ePQAPn`i6:K=?Mefm/DgmrZN
|
||||||
|
MoCbH.Kf&gAMA$;5$Q5<BM6)u>*sUoBOQePX]<YEhING7-ZM`>:acsY=S>E-_,9Mee++Y&1Rs%O<MC1t
|
||||||
|
Er/qLAL97bLaoEg`)nB%)lni<o+Guad7*Q.j,]+d#k>]@Ia#jHldLgYa6MX3S(h[_T?]<S?*9JMCcoXH
|
||||||
|
g<'bXia_d0]Y`Z+.-!rAoW,88f%Q=t.4\=On(HJ*aoZ4()fn;&?:5p=:bHKA^NsU42U]$DEA^a(iG))]
|
||||||
|
*_;Du]g#^kIA0kmSb;>)kt&M+InSB8,J/P+1[=;JCV!-%gt";7ANoA0.=$f_Nbt"C<?=r6`Op"Q=L"*L
|
||||||
|
ju(B<oIPGJ4A$*^-!Ta`I:jsKY6^9j)"NXLMheV!9p8]8A,]$nh4C1G=7tFP&R*srBo_%gJ#tU%.3f:o
|
||||||
|
@ombQQW2h]R6($4R*15Vq-NGgI!Sr`m(mO"*s\h*4aT@iok/&\8YendSpu;sn*oMT@_0<=fMCqgCc);7
|
||||||
|
a7DY]s,,i`c+30kSuUrD^l\QOFB-Fq70$ZYc&3j=X\5u%q:p6FITORpaTajjNL$W>q!+FKkLq?5["os2
|
||||||
|
3/03eLRttKo6k3<^tfOI?,E$jna<%_m#l8!AJo?.j-IjSmo'q?)GPcVV[V?[JROE@0E;gU9dZ"1bEq(d
|
||||||
|
r%MF_+eGOcnPgLAWtN7_X][cf./2H*75YN`'^[3iph"+U[E!8apPeS#Hdl)(]pTNqE#6R4*q#oaZTKRM
|
||||||
|
.5XQ`T)B_4\5,K(e>a#b-',lIg+RP<B_BMgr,FII/bmn3+ZWAKTKhL0QQ>7kVA8?^0AdAt1tbnT^<__L
|
||||||
|
C0`(0YP)>]+`=ATitV40-f`b2E6MuYPPC$)>`o2pWZ4g8DDJOjIBk1HhUG79Y)JMog!Mmr44A%`Z'uAg
|
||||||
|
C!kq'Zag8MWAh`/Cu^@O28q<91Kic[q04(J7NosHX[_i?4ks3u`!"=h*`gT&mJcOAcUBpR8Hp%-:`7t2
|
||||||
|
<(4dK$Ca'J_!/E![']*e`N2YO8d(Mao9,O@27$nZU0;u>6qj$Ue,'eiafO2*6lN+/phVgG/npT1n$2Mj
|
||||||
|
@O$_T*#RAjFp,d0;@aY-=iD25['$33CK3s49W&V>X#k6$s0J;.b[lo*a)]uHUhn#.OVm8fceqEgCALr8
|
||||||
|
B=i=he[+!UP+jh'B&BoOS,1<]f8iQh:%Zo*6F+rLC-GGJ/3(UJRb!?7)=siF.N6cXgn?[/I!82,h09@+
|
||||||
|
GEX=AoDR=(ci'lr^uF(9AB-G79X4b%EEirg,tVU5*P=3R>3GH_0q3['L*>5)Vl2kd@nuauZ.d)(s%0J.
|
||||||
|
CCSrOV`:kja#&:&bDs+iX&^$E]7.Q*cfEM\Z@c4hgfB]Y1YK%#&ThU).W.+1G4<A3O<'?dFoXa<`E\k0
|
||||||
|
#Bh1S@isHj%P*7Q9<);Y3*g!sN+ZT)gpM1U0paF\QQ7T'JRlk4a-$F\OZtH=<Y@!olqlK9\'?:(=20.Y
|
||||||
|
Np*?SbjH3bm$cJiY9"q/mP.m4HVbcY2'+q*k0o)[rm(;f\Y$"YoRk.WI^dZ=gUhi4ZWc^qaie+\qOudI
|
||||||
|
?#B2(I@BK1RV/Y"LY_nQZ5allCOS'gmkH&!9u[TXf5cPRkq:a'+,gB*0C;JUnp#V]k8+^b=J'os2JZ*8
|
||||||
|
G;%&XmEWE#qk1X7?`\1bD#3#Ei>pD(h55[:n*]UI"88lBhn+oVGB]A_VS0URqjk*<pQ,ksFTJ@_[W^i*
|
||||||
|
HIhiYl2S8>hqme!@:\SfSmcs^o9)K0j",o@(Wc;&nPeo26hBrcmI&dnSZ?1CmM-X)p[6nd<NUC:WcRVm
|
||||||
|
f#maT*fn"7e]Ub%c`qZO?=BCCp1$8Y^-0ErX`_:a]B`h<UF8TqGXeZ`NRAXg\UK*HmkQ)qq;,]LB'`ek
|
||||||
|
CUV:?"n)9@3b.U[XiK9-CjQtC`86J4=+=-Xb=rSE(-KFa.\!?8LXpt0]7FH>rTR1<[4hSBU'(oqOC7HK
|
||||||
|
fUr2$rV:q0#ihQ0\)4t!LF3Y@YsR>\i6&o9])="i@&i:qiLVo9P[esFDgF[`@D-#lq4&K!*V1sjmlqeg
|
||||||
|
2R5C"%<T\XJU-P%kN`f9qs83n_S=IO_2UDI7Ga#!+%`jsc%D#r_V:RJN2NP2dG^aJ=1q0spPsL@TkB2s
|
||||||
|
B^WWG4e6h9Q8b:?h8F],Q+esWhBKlGJ.0-_Nh*h$.inET9BLjihFh/j?R<Gjg(2]Ob5s2Idsn?4-8qu$
|
||||||
|
cGQkMn>eH?84pBJpmg5cT5g@>`>LTQd<,P\'c-<c"?8E!?5ZcDa.DQdem1^&1YH\%&hSEFK9dUo1_d!#
|
||||||
|
fY5Ko7us8?oiT_66q,QK21b)C=eS:SI`"3k&>!(%gcY/X<fjSrl`P/'(.5I7DANimdknH*=dC9$W*8)s
|
||||||
|
etoS0i6G2JZUdj/9t0fB2imJb6?Hmg6^B@=3],](Z,GI"PYo*dXtO_D=gtf;^Jd)gfK@e[!pAqAW+](U
|
||||||
|
U<@&iLg'`Y,!&`k?A\,MeW4sEXgb]]YQ2D:>uXi".'UqA`2qkMjP!/sQl(]_g1[>5caA.ZaJuWI`d#kX
|
||||||
|
08Bs0(Q[CmPCJ.9,Pa"Xp,OgC4OS`L%J+j6TGEO-qd;DI1%W'K)h.FQ,`N0LZ$aG)-^fFR[pi.&13=rf
|
||||||
|
:[tLMNhn@gDF^2N3/?L!];VRL(uS75B[YZg7+D#(XPkElX_Quk*1:8qW*.R0%Lu*4OEdYYLVmcR]anb_
|
||||||
|
gIh2kGF0(]Y$TZc4Q[sGe]03mmBCaGbGsc/ihfj1g%a"u\#Q_!-D>63@ug9E8:B:R[PHlrqpW80P`.h<
|
||||||
|
lFZ7OD74aNnAiL:#Q1r>3C^Qq=)t+)h"eD,D&0m6IcoO^4s0Vei1ZTdN9T*80RFMcl',(joQTPubQhDg
|
||||||
|
.4Cu:h*Y'ckA=Kq5a]aNrIu14KN:'IDl)*m`&dZ]`>jjCWdG\Ir`OASH/FHtdX<og"tqT%lg((PD"Z[h
|
||||||
|
)8/R%g-9'g9K"nk*E_ROqh?1Sdbd=YQf;_khRI[RceeYMM]099.oUd@`uQe\4^,Ru=^?Nt;Xmb(-n*>`
|
||||||
|
\lJ4\=3GHW/^-(sN0jnpU5c!n3DZV:\osZC9ce#V/!"j,/KgKlgt!8389'J85Bof&U/CHF>".c:.?9pr
|
||||||
|
>R[3%9m2Ak+JL&CGY2h!YBWYsDBuBY#enJ\W_oh))C:<>e>YUh4JaZ%61GXhCj2K1aE^B`U/0qq[:u3R
|
||||||
|
\BWq\PslmfCFENOns%:NLt4#G;etW5Fa6SrU*8\KF_Z>qV`5H)5_NVRY#0Isg>sd61^Ik+bq*)CBmdt]
|
||||||
|
*CkPKPjKBn,\ThSQbZ%rc1P-X@X2\VR^:'+F1pqJ2M*\!@;.]M0uYl^ibr`@)=H-g[f,2)^,!>;XeaVr
|
||||||
|
][\:o'&M)X26p!W#M2]_OrHkSB>Er.0r`k[nf?YuGjCTAK4`i$,e<LY70GSGle-!"g+>+3n8+@PZdpUP
|
||||||
|
8@f2*WP9F+mLlMI\/&p^<?^>H>Pr=rC=-<GZT6H>2p^(AZ4(X:Sp`8WDZ/H2*Hl!iOr:ju`K=:+%m2]_
|
||||||
|
>;KIM^!5_A2pP+a,eLT7C[X+9e2*F9btH<j[>'.B3%q/dVJPj5euGMnk/F-3j)<Ds_HuG[qdq*nEp'nk
|
||||||
|
FfiJuFWX6RHFXe@I]LUCd5kQ/#J]YmO/SCNet;^h:<75?>=VG*(R&aKkXk]\%uo09D.b2`o@lIJo>ORL
|
||||||
|
P'd"AheiV(F_f:AD[/'d0#,BID@(bRP'E2cXX!#<,=st9rn:'gGi68ehtAKK(J!ki%lh>k]^O6P7g^3Y
|
||||||
|
^7/I(D.hMdjgTYRIlY8d/?[Z#CDBA,/*-Z5eT?4IE1Zgce1]_TrS+p`Yhol^ZXj:)`[<k8'E/8BS$5-W
|
||||||
|
(&RTPWo*/=n([=-bpJ'`O@I4S$BB0D^X'5:MX)d1o%)e1lrJUej7t[bJ&1uQDW)p<]fe%X0E*lUfP81:
|
||||||
|
<-%*RCPj#u;3*RK[B/H82>q'LFbbK!Fc`^ukGaF2"DS^I9eXbskS+aT431mVOCiPGmjW8CUV_65Y5!nG
|
||||||
|
et#uq)0)&BS;8mn]JVeqajoRSD^Df;4Da%k=*+"/0;BgQZF)285hE%4]PU(<3I\'JcMVgdK],%9P88$;
|
||||||
|
0Ddj1rWYeR52P5IiG\LK/QVm1qRb\C^O7ecIsb1p_`-r3Y]\3d;8XG9K@P;:WA??.#+TIfBBqIul1FFU
|
||||||
|
S]pG7r]Q1F8\3+$:5j;BkFNaD[cM//kaej1eo`"'[mkHgrI*8s/PX%NSPs,d5@u0[Z2<49@BEPQg@e8<
|
||||||
|
\a+ES-8es`1:$a"%_O[h%'3:poBu%gpWh`HeuJ0aq,t%5c0Ig?rN*k=fC81084b*WD-`d2W*].j#T)<u
|
||||||
|
^9b!DZb"=c+hRJ1=sL5D=LP`dEc9T$QVXjN_"`r)cYR4'XCaBDM77@?[rY)RCrssij(g+'`A:"mnW./_
|
||||||
|
.`ji7L9p=:eerj4aAJ,l:.QTVJ$`6_'>uc<,;*-(a3&DB)04^/NLtbX%:7kQ]mkV+]KC3q]*diGEL+Qa
|
||||||
|
8l&'-@QV[XAk6RQ:2n%WS!B\'5[*4H7cIUpdOpu31ZZMZn$V@W$Ym%2(&:GloLLVCR`4N%8Qn6q1(),^
|
||||||
|
7op)ga2OAPEoad,BfXllY^+-DA!3QtA6<NEjhZ0g\OVobB+Fk"GbX![fe)&;6HjClZoK\76T<ofi[Ho%
|
||||||
|
p#iT/7Rt'\R?.:`YtNm0PTsI)7D,)r\;4W/D>6;H-PX2.fJuE0k%M+KY"MX-<_9mr\[mQNpD&gC9MP=0
|
||||||
|
Wr8Z>I?92i>-$j"F&A_S(Q/MC_(4)FWP=aUjD)SQoZj^E>f>"Fd"^crHGMT//p>4CFtk<l5PB=NibI&5
|
||||||
|
h5LfD.hRJ<Vi>=[!pK&ZbaXnUMco5)4M8p#Zk2o@\(bX6XkPL5BI33]2O?7!cWXk)GsU2Wh<Oe+>l1X3
|
||||||
|
2Ye/qcno*?E>6..8*a!la_kpU'h(!IVij[r?YU+/WdMC2%'mLc+8"+Em#0FO04d?3p>%-BME@\OPWXqQ
|
||||||
|
L95>6c?WD!?rk<YUEV>u7<;9P^DWPU<(2N=JW+6.q*\`FZ\GsgWLAmLB=h"5B:[rG]j((h\dNLFn$g'_
|
||||||
|
>$V1g.;F(nRZ6R\,i3CjFX)3:b:g*a9$H!rXt,p,e>]Z!71MD=Wd;LVF`c6#/E8m8V8/rYn[C"cTYGdK
|
||||||
|
DbK:`nl>DsX^sr`K[h%j=''G?i8mtD\Y>rsH;XS$?<-NO`kABXqMp_d5:uV9r!LnXNE2jJ3m-kZ(![>n
|
||||||
|
\EO?-Z"Eu!s,'P>2?,<)H[4Uq^3_cp=)?cPk?i2Mb*WL:ZNSc5\,BOmjW'<A"!.3j3c.pA\""Q4lI]-f
|
||||||
|
^U9Wigg_8/s'-LgDWN,p<-ab.T'#W]rC-H>:](;Jc[T3Cr2o!>bB>T9I%Is9hif]l1!:jl2@3^0+f_a:
|
||||||
|
cq;&%a^]PQc)M:i'lRd>f#^(XF$B+"hUp)n44Y'`fbLYsoc$-X*ln(Kj5&kQB?bCSZ<JU5=7!Q5&!p64
|
||||||
|
8<:Ybm-DArO85r6VeFl:/O`ECC%;q*as2t3`M]-]aQsg-A4VK?HBq[qiD?=gO`CeIT[?lPhC4ctn-<9:
|
||||||
|
V3Al'C!rn`Uhh'WBU#r8o+6$3pd#A,)*"a"i&O,1G/XdB^?DjCn(X0"odLt073<s7d,X8%Zgd41hN,A:
|
||||||
|
,78nPkEB-DiLKQq,%\.(ZYI(AdtZhSKi-[(nVWkq7[*6gg)*OVY#^$om67G-0mp1/Fh6C'g6e$65oV=p
|
||||||
|
-LgA"FJ@0;d%q2h7N4u*g.!#[j)`oko;OC%n^JjSGIq"bJQimC2]>C1?*n&3&?G'jdY@e@B`g:T?<q:o
|
||||||
|
=N+<jFNLA(gX,e$X*df7)igFH$la&BnaIh!Lk7Oh53'(0cOtP_kgIJcs'GB5eTA\a0@T^od81?q3rXX7
|
||||||
|
;:0^[6s4[\o?n:`ogemLZmTY0pV"k)^S>]&i98LoP[;)hmJ6:4>)+RG%4JFC*E@Yf#K*eTH'F+%]Z9V*
|
||||||
|
6gs3kWghqKQ01#P;^Z$Cl7Ui&euTg[W%qFS,m%O8Pp+=^%Eu/XWbM_uAbE"cQDc'4!+n*kUqdd]GT.OL
|
||||||
|
Mu>fb)T&i)mtfPtWb!^m=*8Ni2"Y,1Sq2DF[-Bim`5:#T=F*fiEaDk*l[sV;j7.t'SN--X%J6pZb\[!8
|
||||||
|
oA-gTcjs)Ko2a\:R(?n^euHW4"V(#qRm!J;`:Kq"-N%k'<Z$p9(J%+fOB1g(WE'!QlJ$T"iD!YXbNF*A
|
||||||
|
je^WLarNFR&SO?&A_-;GMX>]9SfImh2[J;J2#<O[R#tX.X)?[bT25bIMdP62`UZ"S]F-pC`oAULCP4bd
|
||||||
|
7n:es79sG9BEKp9bhs)met!jRLZF2qphjIIn[,o`lqhc'H8nRDWt.Y"AYBc_ph6]XkSW<,2A/5U3cR'F
|
||||||
|
pL[O&?dW2F@F&lF_;Acf(f(X#Wd(LhTEQdVGR2UCLmC8@FMDprfL6Iq6?!]PVU>C^=!r!j_[eYfVm*3D
|
||||||
|
AKoEJkZJNPir1NgiG95sg^aQXjl5L[a)79OdHMI`r"RSej,Vr?Atu\m)0a1?J%,BrlocIj*#:SR=%78<
|
||||||
|
<c>qh?#S^Z?!2`o^/G8@\OnF/*N1Ft4YR6ro"CLRX<+X\I?>n4rLJs50$_&9)UE'6j;>R"Hf:<Na3EQK
|
||||||
|
oZE*ma(OO#)4_AZ)g^\o>\lq!r(bGEQ"5l&J^ET*3l?3gWn(fjkhk4nbl-0S)t`8:/f3IkS]M"he>GZ[
|
||||||
|
d7Q$GLu*R-TrP,*NQ9H@%:hOQn%2bH;N00VN!!SN?'i/)L+Kqi0[i;_'li%jM2HHi1\A3F`f&8N9<&jf
|
||||||
|
LPBUTqeaTlP;t-h])?tZ!]"r(bmI)PIl^ma3O5S0fO(]cnY^"*ZfW14DX@ljn7t+n"?hCDRDin@H=h<s
|
||||||
|
MLTb/m]Z#-B+0J1F;Laidt>$+nKO-eGl[lAgWA#V%#R-":J3Wn(WMZCEagiK3+LenC#>QT&sG5M/T"Sp
|
||||||
|
Uo8"]&h71^?ue#M`&M\9D>'"ipjkM5cB/$G9Qs`9kl9kM[BL>risO+urVQ[DV5jCB%G`*L&WN&1#E,IN
|
||||||
|
?aHosCq(*heWLocs$/ePG78A%2)R[HLMTqhE`#TiG'd4bcS,iJD.V1U"#UX)IF+l=N"eZ>J;u+uS%(pV
|
||||||
|
#jHWHDDfNuDaFF\l`_BeYjoTObZc04?G,?]2o$$=s$/P:NE4Q1A(A.OHJt+mPL\K2-RMT9-Z@5o/7l<E
|
||||||
|
7#fAf7s2a<j2P^JY"HJ]Sr%h("dJTlmlaWk1%T^IWgUXsM^ZiTQ6Z%,QQ<2a;pc$UPF%;CX\]\bjQW@E
|
||||||
|
<puTE26l)uB756g&'$Y,A)ZCpG[K7GQk4gNX!=]XRq"F4f#/N,prh:Xi6/(D\TI.IJmMq(f,p)T;+d's
|
||||||
|
J%fB=SnGLAR\JRr(r!c#78Wr6&bj`oZOR8,3#,]Q]6O8nf\Oor3bf1W!"r&c2bS1D!M_dBjp."lDmAnM
|
||||||
|
79D7f,S\eQ]Q(%XJigkbOqT("*:^@*)cm4$_>KM7F*3*QF0oooQ)F%$lf`9=?GXZbK-eO_/<WKqK6:K\
|
||||||
|
)n=+<3TfPsY)ZZ>6T<BOPGD+-G+C[hJ(m?bgm.9%#ITTSkU8B2l@bW$W0!S?$KmbgqmB5F.LNm"Ldo>i
|
||||||
|
]]$_*R*4.G+@ieNgeC;n^QP+PRffiHk'Z3D&U;<UfRk/qi.+!)khX9s=D(EJ=Z%?k)iepN.3J1ddg-cM
|
||||||
|
>gGIpL:Ti/P)$'dWX:9#+l:Wn3l7T/_L2Xkmk.-?i=.-4,TJ5a-*IC?fg[!B=^7;JnWsQ3"ADAB%Qb@`
|
||||||
|
Fqt0:3:ije!-^`fB"4ZUB@7>RT\SD\MTBXNaHc#@J&<VN=6'St7KWOQ5LS0iR4mF8]5]4L)J,%HGJl](
|
||||||
|
.Ud87BMb7Lj5/cNGY'+3J@P$C(r:p,E7_pCPpcVT[Y/V.,VP2<JP,Gl5i@'"C!k[U3!ee][]OW&JP)l>
|
||||||
|
^X)n2$*j@+@Y>k=jg*%279OAr&Z7'bm!5pPfeTH$bW)Xk0D_'D(I]#('0:2K`:2kJs8M&^J)?^r7q'`q
|
||||||
|
Rpl*Nc%mb&>N'mbGr+Frem9@]]G^5Lo2`dck08^+\2U0HFIh;,6]pX$\sD<1Y%<(h4iIn@6C77%`0e\_
|
||||||
|
427t36J&MU6C78H\uoW%GgWoMRr':WDHXp'+]7$M#ErUQ72C>6`oHPp4[\[ss2jZ:Z?e;hM,721oe:V.
|
||||||
|
P9ON#+re2]m3hK_'2U$*'06P3M.6pgNm$LQc8Is?*#MJ@%Kf]!8a8ZTm=$JQKmboh"&Y+51H4Wa(fIL^
|
||||||
|
lI1)1D&<*_Y+j0^'\)#3HBp`\<!DR0Q,J)$Ll@mU)N"e"[#@90\ind^GDeZT&U5-Se>l;V-t['>@h\`D
|
||||||
|
8:@"h<n:BM#;Z>O[/s!aoX>+.JM!gF/(tVj56;X%([(QPa2g!_:Lm!PM49(/'t4;#?Tu6"0/N618DJSR
|
||||||
|
Aka\n0lB%K^LDOrnN/ilLc602?SLMY5I'W&&[n/u(gfCnBnm(^[TC[:-ILM&N8EC74+u,$fjs]578uX[
|
||||||
|
=<L)<i_4uE6TbB9<@m;,#pENWfX$bl>Bmmh*UW>4>@&TK$FSW\aou$TXj,TcGS4Ya[>[I?T)3dK'gD+i
|
||||||
|
/Xd!'^T^2bU7M%P&7s2EbihRK\R&_Z*W4),q<1,H35IKUBB$@47JFE.V@%#]2r2=PME'prXJJ>239$MA
|
||||||
|
HD%oAbTi.d&oRh2BN;h'"ZL`II5L1@PbX8s"KH%ZhDFlm@lLKf*o:IWBuBEo\n33eq1eDDS\WtNM79Si
|
||||||
|
7Po2Vbeup7loO;CI_;l#s7Hh.lMZ)/Gi"KfX?N<56*kh>'+t^2_&%q&P7id4'ejXp6S]3Qg8jelM`>08
|
||||||
|
nrm:F/T\Zph<("?mLJC4=VDto"n6Z*L-gK7V*6iIFMg^.lgui;XAfr3c`2tJXOJ^Ma`RRSc,5B]]s`K#
|
||||||
|
ek%M*%(@i1CJECBf&`r"\n#A8X[>g`-f'ae-*6RW<p2;XPbdCHf%DAX(IlJaf<'A1f\PFX.>>QA]:j1/
|
||||||
|
3BCDA(,&>-$_@:&<g_h_&#.cus+^&+lY\]-\<N#?VlEfp1/[L-<dLKA%OZnbmKnP8Gt_.?*fDpqag0nA
|
||||||
|
/S'+&FJg68:53jP+lk2U>2<YmGr#Wba07X^b"l4b'Y]/hfoTG1^]!*P?Q6$F0se[)L#G/Vbr`"p;SV0:
|
||||||
|
'E/*b+YG^*'r@s0(A7=<`G-)-L5nZQf5j>1c?r_9ISO&jh5[uk^'do(9fmjBPbT/tG!:"b6bEGZmkpV<
|
||||||
|
2'9StKpF5@\i)uGoV"&q=B40s^k14YiLZ4f\Ga=+K)b&n=(.(Ah+MH`aCs-@V1rL),OO]>!p[DaBY0a&
|
||||||
|
(Gs>N^IRZsh&L!EK8V!/?E.3RTjKcODmK0Jj3!BU)t(oe#T;D<,GL2o`"=TXVkR33<t5"(FS,e5HUMC_
|
||||||
|
-A*eMXD@2@5*Vo@3Dc&r<*:*EE7QXR$ZT860pb<Ff(`Jo0LPT]$sLMNH[BgH^e:=^[VD`-gTr:FUh_C+
|
||||||
|
[cb!4i,Rs!gj#K\RD9jU\BMRQ7[%/5gHiUrU]p639r#_&bE%6UGs^>][;\K/Zb!/>UO-Zj_Dm=ESIFfi
|
||||||
|
Ku:[`LW*c<J2]lY9dn9jg[(l]SMR6,%!_Y>k&fLal&&-ON1.^=(RIV4r#cnt'<g0_RM=Rh905.4p_i(I
|
||||||
|
f*GW=q`Sn^S$+r[hQ6^lju#X[#>Bu5\kt%s'u@Tns!5bMMpiOqa@c-V_'9q=1\_rFqdW7%B'JWIO^6V.
|
||||||
|
[&5s+WZ7jG(+o(8jj;e%6q?)rB@0eh38[aY)GcsM:Bhi\]M!BI=N[*?S=t.c%Dt+%EH.GYks?4^BEWNs
|
||||||
|
Ibn.E)12,.",@7X><(*TUX=5@T\55l)A#]si`2:cPtMfjK/E9:'MA])PC>HENjg'PJbR!DIo_s,Q1$$.
|
||||||
|
622Oo>p+E!-^/Z4>BaUfjg2aqW6TH%_r>F@Y,Fo-2'VmuL!FU6I5*lgl-)HpY6?apd5i(,$g/;(K%5/:
|
||||||
|
0&=*rWQ#N52(DK8qQM%5L%2SDBMI_hjpTu`,nFus\>MLm_kia-\j_k4'kO`4m1@8P%%S<S-sY*?F69fo
|
||||||
|
SC4;tIYk2rAOFDQmKg2*q/2".>@8Uc9_K-;FVY+A:F4bBa,#(pbEO/Q."'DeNG$?l])5^>DL(1JSP64s
|
||||||
|
Vrnt,`7a;`-c&c-I4h#%T@g3#S=o`uH^0a"$1V/6aI!0XPTVQ>DJ:NRXc/!/&tS^7Yu^jY6gq8B^LH7Y
|
||||||
|
g'KW:9M5&)nU2I-g[Pa1n*0YOR.iDe#DRjEVqO7H2Yi;.Ng6d>7M&4pO&dZG5b/CS,h]'FEU9t3^KmRT
|
||||||
|
SlU_tD"_5eL3;Ds+s3^NbYCo^8qak,*;b7Ts.?o6^U;7=&UZTbS.ZueZeeV)?=B)sPR&`5C\T?@,M+@R
|
||||||
|
gF3_`akLBL8i3N:h,>M^+5)*8<&\)9Fq.J1:!u!I6;D`1Na"C_``"(7L?`(eSJ!+/FB1UP@P+JBVaQ:!
|
||||||
|
PR(Bh7^`BaNTWP;9P98YM0KV3p2cm];!<'uM3((e![GUm2a8VZ[<e>U+_YHB;^,JE5Rkq4M%&-A&&uBD
|
||||||
|
PR,krd+#=!,$\_K@n3ZLMYr_&jZDp\hr?cb:A/DL@DZSlbITuNI5'W^31k\Y?\#cR(G)q_>IO;]Iq-E`
|
||||||
|
]scC=DTX:Y_t%!Bl;^7-3F[+EEL0_&l8#C/G<MUTnUtCmR%G+M+i6nf3+@%I0D=:W`2ankh9:ML1$WU)
|
||||||
|
1odW.(T4/<#V"1D0nS7cQst)4;G\Rm,<K*F5D"CX?42F?)eNa/?m//:=i30T*lq4^WOcobdP1<!GZZA0
|
||||||
|
-F,=M7"VT/\NMLo#"SIT2HHc%CFLZ4FY+EQXYH&=a=?k!#!T3SM,lSE7R=]d7)bcE[R-"c4_6(tSVlc0
|
||||||
|
\2K)n4@3jFNpmdlMcj456#7Dt6CMi,WHnUZ<c2'O#n&3b(!fGpm[hV>#e6TAK#Q(9,NKMXUdCNJQ#<Xs
|
||||||
|
_r6QZA1,(BlM]of$VOk[Wp%%*VlUF=Mi,4#&mUaL&>a@eXaW(4;[2F>6>)'chnk`5LT-d^:[hKq#5a3]
|
||||||
|
Uh-M?R\6K-D@1:e"\k4lo/)-*A>P-;[J1Pp"roEc#fq1L-(?'$H5EXI<iYVJV7eT)47]phPm+MifObRS
|
||||||
|
eK;ZNDn@!Gor>NS<AhjhPthj4X5$`e$ZDkSQ/T?gHi9Y>euW%DanBCt,0NY7S<WW_0HJG4M6F#J3Bp1s
|
||||||
|
kH([M;UmBnb/kf$Dp)!,b0aL<6V644339no/#'V_9;1$MM<=1h*IJZen#a_Q6<VO.Z&=42=.AJE@JZ#P
|
||||||
|
OBH&a7<oh&C,%`F2X>E'[rjKggO<:N;mO)<R6s@!c,qeFeS-n&h4in2a#>)9]S>=Bb15314Wd2X?26MX
|
||||||
|
fo"/X/YXtISb;=`bq,G1e/T0&q/kIZ6+V(.dT7/jFSa_ha!pUO[nb%I]q$aEpTCrF5mkd_'8m+%rgmO@
|
||||||
|
9\Qd'8`dPPU_m[GfH=cuNiEBC-u<4S[AP(5/&iMl.=Li))c,._8:U!eU&Cf"-L9'$oH*u(<njOpMLHGT
|
||||||
|
Hq?\Hl&rS,6dbZ/e8)/fr@?$(g=`ti@Y;'1PHqZPAqj<g%)H]XWE_&bV%QbYY-A(:^3:.Qc?0s_RJa^t
|
||||||
|
H5'l2,ZF!TIWC9dPbEBa&_(CjP!+uL?-W)!@p["FiA[o;i[e*Fl60(UleYp(;d$Xb>'[8<)3^;uV9pj?
|
||||||
|
mD<IB<`r)),:j$@#?m!(%*\%"q9'tBVV>7O<\$ZT2!quU*[]p3\hDWY@^:8^rO/`SoO_EKWBg\g?-R?9
|
||||||
|
M$'>-4c)&;VYIPr`04M,T1d>WAuX)%MmJt:TU=%&N`XgMM*JbbbR_ooBB=/2c`p*mNplk"cdF<r3lUoS
|
||||||
|
)C`a91Zn<#M02lMC1'bF0UX7;fh)BiA5W:9]KEMOm9edfF4lh^oaN^dmt"JfgMXCP\mFEnhsX?8\gFUT
|
||||||
|
-;E3uC!o7\\gC^Ho6nYb\!rd4NV:k-P6NM[2/,FO8Ok;aFB)@sC!q70l?PsbY#agl\h[+,(U^:a)t$S-
|
||||||
|
#09\[;<]YibKlM%>uQ_na\64oeHcUZ9_AZc\u&q>Mpg^;gMfk*-r&<hC\#,:C!p"$etstLA/@rCWr=Q6
|
||||||
|
!0l@hTh-IGIYK2o+RFk1]d*3MWRVXVaetKk+O[(!<LWPd>%LFS[[V=>ZRk=jV"[n%"u1$L-6c/fk\AP,
|
||||||
|
_B\ct)Og<T?BJ0ToJTEC\hXn2L*Oo8$*-A%Vk5^@qM@%C+D!<$PK&!:jI.oe--W*D>fs2o;3T#Bj`36C
|
||||||
|
ROmo3Oj?VLm%d4*-E>D@0`&no4+k+H#;jeLXa>o%>B`e&Fp^*@+KI\0I;aAYq-uoYpZk21k2)M-PNFLB
|
||||||
|
Y"@Z!Y/&Pn;qWCm8Ok:R>^gn,-=%AC&=R]@oXa;0(_83q5\:B@eho83UcC70I\g56TiFBYBS:*J<Ojc[
|
||||||
|
8K/"2g@3/%QAH=.b-S&/Gfm2Jp?F%_l"F'kc'4LcV^fU*!6A6*-AD,n8QY"nR3iBmQ>=p'6BdF1C=<#k
|
||||||
|
F%r+l*ESFOjY#/UCGP^%aKhQBG@bt\nD:<>=69FK-=&bJa>E-O.n:Ch$t&2EUe)<gC=8=Q__l/++DK8j
|
||||||
|
^8g]lUG$B16((N[I;%%G617m=`bI$\?CE^T]M$[H%@\\=m[d^JXpQ3W9tDg$a`M)dNHA#V46,<Y?'DF7
|
||||||
|
/VQ%GLMWFEK.c>N-I"7sf;&khhu6f[m8GHc04TKFdT81sPBK,49q$-k>a&bQ]On;58*hGab#N_KJYF'5
|
||||||
|
@9k?.9tDf]d5>VQn%Y;J,fL6fg16(TdNNU(PP/$kdT]d:RHD/Kf8_`$Ff1sLdT]dLRO2l,`AHh@32T8o
|
||||||
|
X#0(CbP+\ohV2gN:m:&09<L?tcTdNI1_Q0I;Pm#eKfb\Lc1uL!^=qEoY";R$Bs(#H$;EQbQZRk_.N:YW
|
||||||
|
G2d=_==#A0dbKc(2<gci-bXc$gKOR?c\jelWjH/@"$P(Pbn4FI)Je]$/!J7_djX"C<hY"X4D,?XAEnQc
|
||||||
|
;)2AC@OTqYUMXcUICMk<h^1?eF8Z?NMB'?!3e9\6<LUsKh,u\QH#&PE/1m]0V\uV6@hr^D<DZ,d:j#s,
|
||||||
|
m3>eO\oBe[)-N.$[W^9>TQMDfdW@84-Bqim[hn1dU+a:n-,I$&9d2;]?1gglpmX$!JJ8EOPbH=sAq.Gb
|
||||||
|
g7jJ;bRpXWd]C2gkGha]0V0V*$p&=<E?OL<\5n4\VY,e/+_YDrUtC/]:WjrCmtlYTD,i25rqW-.=Q-tR
|
||||||
|
61?i.#sroSJ&FS/>+>60:0)/Z^KM*0f65.u:WDhb=_,G3ad]bj&YM'c)&N;qr+rZ<Q6F0i.?Dn]WH[r.
|
||||||
|
pg[b;m4>QJJJ%E.Q!QX41C_YPk=($75%:2oj,BT@iDaa"[MjXYM%k;!)5iDYG&Vsj3B]VeQCgUl%dETK
|
||||||
|
.*cA:Pr^LHR>>g*O77#"<tU7@f;W2EZ?h2>%S'`'mte<)_:s2]mk&h$Lr`M/;tMPRAr7qak*t-5Gbs0K
|
||||||
|
=9rrqSr0quDg%kp06M`#e_dZM0Jr]I0c;5J-_Fs>n5>e4$#(`+!q37k$K/[HIRdaG5/8_,i,h)MDWF,1
|
||||||
|
<h-UI`HkjU;d#=K^;4dd@T!#P?s`eL(hi5^Fg+n[f@L`2[9._bGcK%;f=&#DMt-nI/)#HP<@%omIpQ/A
|
||||||
|
O?cH>BjdrWr+.3H@U%eNU]7]8HtR$BV.jOR(onh4BK<N`M"A0AUHEgVAiDt4a*,?u[,]u0"C2q8Fm-\2
|
||||||
|
au4Q6_G97g`oo@FfGuQs=Fi=9p.L(rDnT5nhV6`LU#]OjpGe5%iu=H;Wm!COSA:ZFMPD48CurW&CkgeV
|
||||||
|
m)/D=Iq&ZcG0F@Hn)k?3AJAf9IY"uc5II"?j_jVaI5tn6djE@?)'Z_oF"ZQ1Cs?To('-9Ehmf0K)nA<d
|
||||||
|
_hi6$MXi)rh]Q+3\/m<a@An4tr`+@&(6?[EREbVcIH*=[pK>BLoXr*\RAE7/cI":len,$-\$pE+]*G?o
|
||||||
|
)AGuW=V)/:^t`4SNr,CqBG``YJ<s(7JT7\PN[hqY@ET#2ii]=F;/JLp>4]#sp+!4ieQ4MMlVO3ueET,D
|
||||||
|
Z[cIr!5J@p*(?FMB\cq(+l>XZU<2Ql/L@=BY+1GF!Ah<#@Z-hs=BJ54OliX=gIg:e*(BOA]?u)9rfd)]
|
||||||
|
)@K'1Y:p42d*OAY&):-2[g5]*=qfW?Sn7r"qQ#e%9NBNR84kB+Ec:VpH)4rs&,(G2b`G.jTIqPX5J-@s
|
||||||
|
q$9Ra`-SXELa\#$'3VJl@6*.Ansu$;?5*^;`G/<>*B^REI/AqOmalZpZYD_cK4C5QbV.(64FFPVi0/C:
|
||||||
|
@.F>35NDq7IPTT.K9sMKJgMRYmo+MQ#MoQj>Wsj*,32+aj^(Tt3ZLf$^K$IPZ(>dQ#CNp1QOi:gaZ`mg
|
||||||
|
/]OsH+A%?9?uF+S4ts#bg@;T`nc<+?&,F#1YH#d$(d6tJ+Hm=e.3JJSOq2s/6U'G//*$g(MF'K@\Of+O
|
||||||
|
E4).XLE_B,,QR9B$[M4_A&%TNnm*kb(_0`rFdq9nh[>&*qt4c,RIlE,kehF0=G/fNVr-6Fn+PlA:OKR@
|
||||||
|
0@n!I]t")X!W?C)nbr&ArZD/:;>rfNXk,c?DMX#-*T`P&7sr;L(rlDZJ,GAVj1kTghn[Tm1&~>
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
29153
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/Parent null
|
||||||
|
/Type /Pages
|
||||||
|
/MediaBox [0.0000 0.0000 431.00 434.00]
|
||||||
|
/Resources 8 0 R
|
||||||
|
/Kids [5 0 R]
|
||||||
|
/Count 1
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
[/PDF /Text /ImageC]
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/S /Transparency
|
||||||
|
/CS /DeviceRGB
|
||||||
|
/I true
|
||||||
|
/K false
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Alpha1
|
||||||
|
<<
|
||||||
|
/ca 1.0000
|
||||||
|
/CA 1.0000
|
||||||
|
/BM /Normal
|
||||||
|
/AIS false
|
||||||
|
>>
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/ProcSet 9 0 R
|
||||||
|
/ExtGState 11 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 12
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000015 00000 n
|
||||||
|
0000000315 00000 n
|
||||||
|
0000029896 00000 n
|
||||||
|
0000000445 00000 n
|
||||||
|
0000000521 00000 n
|
||||||
|
0000000609 00000 n
|
||||||
|
0000029872 00000 n
|
||||||
|
0000030350 00000 n
|
||||||
|
0000030066 00000 n
|
||||||
|
0000030105 00000 n
|
||||||
|
0000030207 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/Size 12
|
||||||
|
/Root 2 0 R
|
||||||
|
/Info 1 0 R
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
30423
|
||||||
|
%%EOF
|
|
@ -6,7 +6,9 @@ Windows
|
||||||
|
|
||||||
Der Installer der AusweisApp2 kann über die Kommandozeile gestartet werden, um
|
Der Installer der AusweisApp2 kann über die Kommandozeile gestartet werden, um
|
||||||
den Installationsprozess zu konfigurieren und systemweite Standardeinstellungen
|
den Installationsprozess zu konfigurieren und systemweite Standardeinstellungen
|
||||||
vorzugeben. Neben den üblichen Parametern [1]_ enthält das folgende Kommando
|
vorzugeben.
|
||||||
|
Der Rückgabewert von msiexec informiert über das Ergebnis der Installation [#msiexecreturnvalues]_.
|
||||||
|
Neben den üblichen Parametern [#standardarguments]_ enthält das folgende Kommando
|
||||||
alle unterstützten Parameter, die im Anschluss erläutert werden.
|
alle unterstützten Parameter, die im Anschluss erläutert werden.
|
||||||
|
|
||||||
.. code-block:: winbatch
|
.. code-block:: winbatch
|
||||||
|
@ -15,7 +17,7 @@ alle unterstützten Parameter, die im Anschluss erläutert werden.
|
||||||
|
|
||||||
INSTALL_ROOT
|
INSTALL_ROOT
|
||||||
Gibt das Installationsverzeichnis an. Ohne Angabe wird der Ordner
|
Gibt das Installationsverzeichnis an. Ohne Angabe wird der Ordner
|
||||||
"C:\\Programme (x86)\\AusweisApp2 X.YY.Z" genutzt.
|
"C:\\Programme (x86)\\AusweisApp2" genutzt.
|
||||||
|
|
||||||
SYSTEMSETTINGS
|
SYSTEMSETTINGS
|
||||||
Betrifft die Erstellung von Firewall-Regeln der Windows Firewall. Ohne Angabe
|
Betrifft die Erstellung von Firewall-Regeln der Windows Firewall. Ohne Angabe
|
||||||
|
@ -69,7 +71,9 @@ UPDATECHECK
|
||||||
false oder true kann diese Überprüfung deaktiviert bzw. aktiviert werden.
|
false oder true kann diese Überprüfung deaktiviert bzw. aktiviert werden.
|
||||||
Die Einstellung kann dann durch den Benutzer in der AusweisApp2 nicht geändert
|
Die Einstellung kann dann durch den Benutzer in der AusweisApp2 nicht geändert
|
||||||
werden. Ohne Angabe ist die Überprüfung aktiviert, der Benutzer kann die
|
werden. Ohne Angabe ist die Überprüfung aktiviert, der Benutzer kann die
|
||||||
Einstellung jedoch ändern.
|
Einstellung jedoch ändern. Der UPDATECHECK Parameter beeinflusst weder die
|
||||||
|
Aktualisierung der Diensteanbieterliste noch die Aktualisierung der
|
||||||
|
Kartenleserinformationen.
|
||||||
|
|
||||||
ONSCREENKEYBOARD
|
ONSCREENKEYBOARD
|
||||||
Für die Eingabe von PIN, CAN und PUK kann eine Bildschirmtastatur verwendet
|
Für die Eingabe von PIN, CAN und PUK kann eine Bildschirmtastatur verwendet
|
||||||
|
@ -83,7 +87,7 @@ HISTORY
|
||||||
von HISTORY auf false oder true kann der Verlauf deaktiviert bzw. aktiviert
|
von HISTORY auf false oder true kann der Verlauf deaktiviert bzw. aktiviert
|
||||||
werden. Der Benutzer kann diese Einstellung anpassen.
|
werden. Der Benutzer kann diese Einstellung anpassen.
|
||||||
|
|
||||||
Alternativ kann mit Orca [2]_ eine MST-Datei erzeugt werden, die die oben
|
Alternativ kann mit Orca [#orca]_ eine MST-Datei erzeugt werden, die die oben
|
||||||
genannten Parameter definiert. Die Parameter sind in den Tabellen "Directory"
|
genannten Parameter definiert. Die Parameter sind in den Tabellen "Directory"
|
||||||
und "Property" verfügbar. Übergeben lässt sich die MST-Datei mit dem folgenden
|
und "Property" verfügbar. Übergeben lässt sich die MST-Datei mit dem folgenden
|
||||||
Kommando:
|
Kommando:
|
||||||
|
@ -143,5 +147,109 @@ common.keylessPassword ONSCREENKEYBOARD
|
||||||
history.enable HISTORY
|
history.enable HISTORY
|
||||||
====================== ====================
|
====================== ====================
|
||||||
|
|
||||||
.. [1] https://docs.microsoft.com/de-de/windows/desktop/msi/standard-installer-command-line-options
|
.. [#msiexecreturnvalues] https://docs.microsoft.com/de-de/windows/desktop/msi/error-codes
|
||||||
.. [2] https://docs.microsoft.com/de-de/windows/desktop/Msi/orca-exe
|
.. [#standardarguments] https://docs.microsoft.com/de-de/windows/desktop/msi/standard-installer-command-line-options
|
||||||
|
.. [#orca] https://docs.microsoft.com/de-de/windows/desktop/Msi/orca-exe
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Anforderungen an die Einsatzumgebung
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Rechte für Installation und Ausführung
|
||||||
|
''''''''''''''''''''''''''''''''''''''
|
||||||
|
|
||||||
|
Für die Installation der AusweisApp2 sind Administratorrechte erforderlich.
|
||||||
|
|
||||||
|
Die Ausführung der AusweisApp2 erfordert keine Administratorrechte.
|
||||||
|
|
||||||
|
|
||||||
|
Verwendete Netzwerk-Ports
|
||||||
|
'''''''''''''''''''''''''
|
||||||
|
|
||||||
|
In :numref:`porttable_de` werden alle von der AusweisApp2 genutzten Ports
|
||||||
|
aufgelistet.
|
||||||
|
Eine schematische Darstellung der einzelnen Verbindungen, die von der
|
||||||
|
AusweisApp2 genutzt werden, ist in :numref:`communicationmodel_de` dargestellt.
|
||||||
|
|
||||||
|
Die AusweisApp2 startet einen HTTP-Server, der über Port 24727 erreichbar
|
||||||
|
ist.
|
||||||
|
Der Server empfängt nur auf der localhost Netzwerkschnittstelle.
|
||||||
|
Die Erreichbarkeit dieses lokalen Servers ist für die Onlineausweisfunktion
|
||||||
|
notwendig, da Diensteanbieter mit einem HTTP-Redirect auf den lokalen Server
|
||||||
|
umleiten um den Ausweisvorgang in der AusweisApp2 fortzuführen (eID1).
|
||||||
|
Außerdem wird über den Server die Verwendung der AusweisApp2 von anderen
|
||||||
|
Anwendungen über eine Websocket-Schnittstelle angeboten (SDK-Funktion, eID-SDK).
|
||||||
|
Daher müssen eingehende lokale Netzwerkverbindungen auf dem TCP Port 24727
|
||||||
|
ermöglicht werden.
|
||||||
|
|
||||||
|
Für die Verwendung von der "Smartphone als Kartenleser"-Funktion über WLAN
|
||||||
|
müssen außerdem Broadcasts auf UDP Port 24727 im lokalen Subnetz empfangen
|
||||||
|
werden können.
|
||||||
|
Hierzu muss eventuell die AP Isolation im Router deaktiviert werden.
|
||||||
|
|
||||||
|
.. _communicationmodel_de:
|
||||||
|
.. figure:: CommunicationModel_de.pdf
|
||||||
|
|
||||||
|
Kommunikationsmodell der AusweisApp2
|
||||||
|
|
||||||
|
Der Installer der AusweisApp2 bietet die Option, für alle angebotenen
|
||||||
|
Funktionen der AusweisApp2 die erforderlichen Firewall-Regeln in der
|
||||||
|
Windows-Firewall zu registrieren.
|
||||||
|
Erfolgt die Registrierung der Firewall-Regeln nicht, wird der Benutzer bei
|
||||||
|
einem Verbindungsaufbau der AusweisApp2 mit einem Dialog der Windows-Firewall
|
||||||
|
aufgefordert, die ausgehenden Datenverbindungen zuzulassen.
|
||||||
|
Durch Registrierung der Firewall-Regeln während der Installation werden diese
|
||||||
|
Aufforderungen unterbunden.
|
||||||
|
|
||||||
|
Für die lokalen Verbindungen eID1 und eID-SDK müssen (unter den gängigen
|
||||||
|
Standardeinstellungen der Windows-Firewall) keine Regeln in der
|
||||||
|
Windows-Firewall eingetragen werden.
|
||||||
|
|
||||||
|
Die durch den Installer angelegten Regeln werden in Tabelle :numref:`firewalltable_de`
|
||||||
|
aufgelistet.
|
||||||
|
|
||||||
|
|
||||||
|
TLS-Verbindungen
|
||||||
|
''''''''''''''''
|
||||||
|
|
||||||
|
Es ist generell nicht möglich, die AusweisApp2 mit einem TLS-Termination-Proxy
|
||||||
|
zu verwenden, da die übertragenen TLS-Zertifikate über eine Verschränkung mit
|
||||||
|
dem Berechtigungszertifikat aus der Personalausweis-PKI validiert werden.
|
||||||
|
CA-Zertifikate im Windows-Truststore werden daher ignoriert.
|
||||||
|
|
||||||
|
.. raw:: latex
|
||||||
|
|
||||||
|
\begin{landscape}
|
||||||
|
|
||||||
|
.. _porttable_de:
|
||||||
|
.. csv-table:: Netzwerkverbindungen der AusweisApp2
|
||||||
|
:header: "Referenz", "Protokoll", "Port", "Richtung", "Optional", "Zweck", "Anmerkungen"
|
||||||
|
:widths: 8, 8, 8, 8, 8, 35, 25
|
||||||
|
|
||||||
|
"eID1", TCP, 24727, "eingehend", "Nein", "Online-Ausweisvorgang, eID-Aktivierung [#TR-03124]_", "Nur erreichbar von localhost [#TR-03124]_"
|
||||||
|
"eID2", TCP, 443, "ausgehend", "Nein", "Online-Ausweisvorgang, Verbindung zum Dienstanbieter, TLS-1-2-Kanal [#TR-03124]_", "TLS-Zertifikate verschränkt mit Berechtigungs-Zertifikat [#TR-03124]_"
|
||||||
|
"eID3", TCP, 443, "ausgehend", "Nein", "Online-Ausweisvorgang, Verbindung zum eID-Server, TLS-2-Kanal [#TR-03124]_", "TLS-Zertifikate verschränkt mit Berechtigungs-Zertifikat [#TR-03124]_"
|
||||||
|
"eID-SDK", TCP, 24727, "eingehend", "Nein", "Verwendung der SDK-Schnittstelle", "Nur erreichbar von localhost [#TR-03124]_"
|
||||||
|
"SaK1", UDP, 24727, "eingehend", "Ja", "Smartphone als Kartenleser, Erkennung [#TR-03112]_", "Broadcasts"
|
||||||
|
"SaK2", TCP, , "ausgehend", "Ja", "Smartphone als Kartenleser, Verwendung [#TR-03112]_", "Verbindung im lokalen Subnetz"
|
||||||
|
"Update", TCP, 443, "ausgehend", "Ja", "Updates [#govurl]_ zu Dienstanbietern und Kartenlesern sowie Informationen zu neuen AusweisApp2-Versionen [#updatecheck]_ .", "Die Zertifikate der TLS-Verbindung werden mit in der AusweisApp2 mitgelieferten CA-Zertifikaten validiert. Im Betriebssystem hinterlegte CA-Zertifikate werden ignoriert."
|
||||||
|
|
||||||
|
.. [#TR-03124] Siehe TR-03124 des BSI
|
||||||
|
.. [#TR-03112] Siehe TR-03112-6 des BSI
|
||||||
|
.. [#govurl] Erreichbar unter dem URL https://appl.governikus-asp.de/ausweisapp2/
|
||||||
|
.. [#updatecheck] Die Überprüfung auf neue AusweisApp2-Versionen kann deaktiviert werden, siehe
|
||||||
|
Kommandozeilenparameter UPDATECHECK
|
||||||
|
|
||||||
|
.. _firewalltable_de:
|
||||||
|
.. csv-table:: Firewallregeln der AusweisApp2
|
||||||
|
:header: "Name", "Protokoll", "Port", "Richtung", "Umgesetzte Verbindung"
|
||||||
|
:widths: 25, 15, 15, 15, 30
|
||||||
|
:align: left
|
||||||
|
|
||||||
|
"AusweisApp2-Firewall-Rule", TCP, \*, "ausgehend", "eID2, eID3, SaK2, Update"
|
||||||
|
"AusweisApp2-Firewall-Rule-SaC-In", UDP, 24727, "eingehend", "SaK1"
|
||||||
|
|
||||||
|
.. raw:: latex
|
||||||
|
|
||||||
|
\end{landscape}
|
||||||
|
|
|
@ -5,9 +5,10 @@ Windows
|
||||||
-------
|
-------
|
||||||
|
|
||||||
Start the installer of AusweisApp2 using the command line to configure the
|
Start the installer of AusweisApp2 using the command line to configure the
|
||||||
installation process and preset system-wide default settings. In addition to the
|
installation process and preset system-wide default settings.
|
||||||
usual arguments [1]_, the following command contains all supported arguments,
|
The return value of msiexec indicates the result of the installation [#msiexecreturnvalues]_.
|
||||||
which are explained below.
|
In addition to the usual arguments [#standardarguments]_, the following command
|
||||||
|
contains all supported arguments, which are explained below.
|
||||||
|
|
||||||
.. code-block:: winbatch
|
.. code-block:: winbatch
|
||||||
|
|
||||||
|
@ -15,7 +16,7 @@ which are explained below.
|
||||||
|
|
||||||
INSTALL_ROOT
|
INSTALL_ROOT
|
||||||
States the installation directory. If not specified, the folder
|
States the installation directory. If not specified, the folder
|
||||||
"C:\\Program Files (x86)\\AusweisApp2 X.YY.Z" is used.
|
"C:\\Program Files (x86)\\AusweisApp2" is used.
|
||||||
|
|
||||||
SYSTEMSETTINGS
|
SYSTEMSETTINGS
|
||||||
Concerns the settings of firewall rules of the Windows Firewall. When not
|
Concerns the settings of firewall rules of the Windows Firewall. When not
|
||||||
|
@ -64,6 +65,8 @@ UPDATECHECK
|
||||||
UPDATECHECK to false or true deactivates or activates the update check
|
UPDATECHECK to false or true deactivates or activates the update check
|
||||||
respectively. Users are unable to change this setting in the AusweisApp2. Not
|
respectively. Users are unable to change this setting in the AusweisApp2. Not
|
||||||
specified, the update check is activated, but users can adjust the settings.
|
specified, the update check is activated, but users can adjust the settings.
|
||||||
|
The UPDATECHECK parameter affects neither updates of the service
|
||||||
|
provider list nor updates of card reader information.
|
||||||
|
|
||||||
ONSCREENKEYBOARD
|
ONSCREENKEYBOARD
|
||||||
An on-screen keyboard is available to enter PIN, CAN or PUK. It is deactivated or
|
An on-screen keyboard is available to enter PIN, CAN or PUK. It is deactivated or
|
||||||
|
@ -76,7 +79,7 @@ HISTORY
|
||||||
content). Indicating HISTORY as false or true, the history function is
|
content). Indicating HISTORY as false or true, the history function is
|
||||||
deactivated or activated. Users are able to adjust the settings.
|
deactivated or activated. Users are able to adjust the settings.
|
||||||
|
|
||||||
Alternatively, Orca [2]_ can be used to create an MST file that defines the
|
Alternatively, Orca [#orca]_ can be used to create an MST file that defines the
|
||||||
above arguments. The arguments are available in the "Directory" and "Property"
|
above arguments. The arguments are available in the "Directory" and "Property"
|
||||||
tables. The MST file can be transferred with the following command:
|
tables. The MST file can be transferred with the following command:
|
||||||
|
|
||||||
|
@ -132,5 +135,101 @@ common.keylessPassword ONSCREENKEYBOARD
|
||||||
history.enable HISTORY
|
history.enable HISTORY
|
||||||
====================== ====================
|
====================== ====================
|
||||||
|
|
||||||
.. [1] https://docs.microsoft.com/en-us/windows/desktop/msi/standard-installer-command-line-options
|
.. [#msiexecreturnvalues] https://docs.microsoft.com/en-us/windows/desktop/msi/error-codes
|
||||||
.. [2] https://docs.microsoft.com/en-us/windows/desktop/Msi/orca-exe
|
.. [#standardarguments] https://docs.microsoft.com/en-us/windows/desktop/msi/standard-installer-command-line-options
|
||||||
|
.. [#orca] https://docs.microsoft.com/en-us/windows/desktop/Msi/orca-exe
|
||||||
|
|
||||||
|
|
||||||
|
Operational Environment Requirements
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
Required authorization for installation and execution
|
||||||
|
'''''''''''''''''''''''''''''''''''''''''''''''''''''
|
||||||
|
|
||||||
|
Administrator privileges are required to install the AusweisApp2.
|
||||||
|
|
||||||
|
The execution of the AusweisApp2 does not require administrator privileges.
|
||||||
|
|
||||||
|
Used network ports
|
||||||
|
''''''''''''''''''
|
||||||
|
|
||||||
|
All network ports used by the AusweisApp2 are listed in :numref:`porttable_en`.
|
||||||
|
:numref:`communicationmodel_en` shows a schematic representation of the
|
||||||
|
individual connections made by the AusweisApp2.
|
||||||
|
|
||||||
|
The AusweisApp2 starts a HTTP-Server on port 24727.
|
||||||
|
The server binds only to the localhost network interface.
|
||||||
|
The availability of the local server is necessary for the online eID function,
|
||||||
|
because service providers will redirect the user with a HTTP redirect to the
|
||||||
|
local server to continue the authentication process in the AusweisApp2 (eID1).
|
||||||
|
The server is also used to offer other local applications to use the
|
||||||
|
AusweisApp2 via a websocket interface (SDK function, eID-SDK).
|
||||||
|
Therefore local incoming network connections to TCP Port 24727 must be
|
||||||
|
permitted.
|
||||||
|
|
||||||
|
Broadcast on UDP port 24727 in the local subnet have to be receivable by the
|
||||||
|
AusweisApp2 to use the "Smartphone as Card Reader" functionality.
|
||||||
|
It may be necessary to deactive AP isolation on your router.
|
||||||
|
|
||||||
|
.. _communicationmodel_en:
|
||||||
|
.. figure:: CommunicationModel_en.pdf
|
||||||
|
|
||||||
|
Communication model of the AusweisApp2
|
||||||
|
|
||||||
|
The installer of the AusweisApp2 provides an option to register all needed
|
||||||
|
firewall rules in the Windows Firewall.
|
||||||
|
If the rules are not registered, the user will be prompted by the Windows
|
||||||
|
Firewall to allow the outgoing connections once the AusweisApp2 tries to
|
||||||
|
connect to a server.
|
||||||
|
These prompts are suppressed by registering the firewall rules during
|
||||||
|
installation.
|
||||||
|
No rules have to be added to the Windows Firewall for the local connections
|
||||||
|
eID1 and eID-SDK (when using the standard settings).
|
||||||
|
|
||||||
|
In table :numref:`firewalltable_en` all firewall rules registered by the
|
||||||
|
installer are listed.
|
||||||
|
|
||||||
|
TLS connections
|
||||||
|
'''''''''''''''
|
||||||
|
|
||||||
|
Transmitted TLS certificates are solely validated via the interlacing with
|
||||||
|
the authorization certificate issued by the german eID PKI.
|
||||||
|
CA certificates in the Windows truststore are thus ignored.
|
||||||
|
It is therefore generally not possible to use the AusweisApp2 behind a
|
||||||
|
TLS termination proxy.
|
||||||
|
|
||||||
|
.. raw:: latex
|
||||||
|
|
||||||
|
\begin{landscape}
|
||||||
|
|
||||||
|
.. _porttable_en:
|
||||||
|
.. csv-table:: Network connections of the AusweisApp2
|
||||||
|
:header: "Reference", "Protocol", "Port", "Direction", "Optional", "Purpose", "Note"
|
||||||
|
:widths: 8, 8, 8, 8, 8, 35, 25
|
||||||
|
|
||||||
|
"eID1", TCP, 24727, "incoming", "no", "Online eID function, eID activation [#TR-03124]_", "Only accessible from localhost [#TR-03124]_"
|
||||||
|
"eID2", TCP, 443, "outgoing", "no", "Online eID function, connection to the service provider, TLS-1-2 channel [#TR-03124]_", "TLS certificates interlaced with authorization certificate [#TR-03124]_"
|
||||||
|
"eID3", TCP, 443, "outgoing", "no", "Online eID function, connection to eID-Server, TLS-2 channel [#TR-03124]_", "TLS certificates interlaced with authorization certificate [#TR-03124]_"
|
||||||
|
"eID-SDK", TCP, 24727, "incoming", "no", "Usage of the SDK functionality", "Only accessible from localhost [#TR-03124]_"
|
||||||
|
"SaC1", UDP, 24727, "incoming", "yes", "Smartphone as Card Reader, detection [#TR-03112]_", "Broadcasts"
|
||||||
|
"SaC2", TCP, , "outgoing", "yes", "Smartphone as Card Reader, usage [#TR-03112]_", "Connection in local subnet"
|
||||||
|
"Update", TCP, 443, "outgoing", "yes", "Updates [#govurl]_ of service provider and card reader information as well as informations on new AusweisApp2 versions [#updatecheck]_ .", "TLS certificates will be validated against CA certificates included in the AusweisApp2. CA certificates provided by the OS are ignored."
|
||||||
|
|
||||||
|
.. [#TR-03124] See TR-03124 specification from the BSI
|
||||||
|
.. [#TR-03112] See TR-03112-6 specifiaction from the BSI
|
||||||
|
.. [#govurl] All updates are based on the URL https://appl.governikus-asp.de/ausweisapp2/
|
||||||
|
.. [#updatecheck] Automatic checks for new AusweisApp2 versions can be deactivated, see commandline parameter
|
||||||
|
UPDATECHECK.
|
||||||
|
|
||||||
|
.. _firewalltable_en:
|
||||||
|
.. csv-table:: Firewall rules of the AusweisApp2
|
||||||
|
:header: "Name", "Protocol", "Port", "Direction", "Connection reference"
|
||||||
|
:widths: 25, 15, 15, 15, 30
|
||||||
|
:align: left
|
||||||
|
|
||||||
|
"AusweisApp2-Firewall-Rule", TCP, \*, "outgoing", "eID2, eID3, SaC2, Update"
|
||||||
|
"AusweisApp2-Firewall-Rule-SaC-In", UDP, 24727, "incoming", "SaC1"
|
||||||
|
|
||||||
|
.. raw:: latex
|
||||||
|
|
||||||
|
\end{landscape}
|
||||||
|
|
|
@ -42,7 +42,7 @@ master_doc = 'index'
|
||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = 'AusweisApp2 Installation'
|
project = 'AusweisApp2 Installation'
|
||||||
copyright = '2018, Governikus GmbH & Co. KG'
|
copyright = '2018-2019, Governikus GmbH & Co. KG'
|
||||||
author = 'Governikus GmbH & Co. KG'
|
author = 'Governikus GmbH & Co. KG'
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
|
@ -120,7 +120,8 @@ latex_elements = {
|
||||||
|
|
||||||
# Additional stuff for the LaTeX preamble.
|
# Additional stuff for the LaTeX preamble.
|
||||||
'preamble': '''
|
'preamble': '''
|
||||||
\hypersetup{pdfauthor={Governikus GmbH \& Co. KG},
|
\\usepackage{lscape}
|
||||||
|
\\hypersetup{pdfauthor={Governikus GmbH \& Co. KG},
|
||||||
pdftitle={AusweisApp2},
|
pdftitle={AusweisApp2},
|
||||||
pdfsubject={Installation},
|
pdfsubject={Installation},
|
||||||
pdfkeywords={installation},
|
pdfkeywords={installation},
|
||||||
|
@ -151,7 +152,7 @@ latex_documents = [
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
# the title page.
|
# the title page.
|
||||||
latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/android/xhdpi/npa.png'
|
latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/npa_docs.png'
|
||||||
|
|
||||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||||
# not chapters.
|
# not chapters.
|
||||||
|
|
|
@ -6,7 +6,7 @@ Table of contents
|
||||||
\clearpage
|
\clearpage
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 3
|
||||||
:caption: Installation
|
:caption: Installation
|
||||||
|
|
||||||
README.de
|
README.de
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
AusweisApp2 1.16.2
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
**Releasedatum:** 15. Mai 2019
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Anwender
|
||||||
|
""""""""
|
||||||
|
- Der Abbruch-Dialog beim Wechsel in den PIN-Änderungsmodus aus einem
|
||||||
|
laufenden Ausweisvorgang heraus wird nicht länger angezeigt.
|
||||||
|
|
||||||
|
- Alte Log-Dateien werden unter Android automatisch bereinigt.
|
||||||
|
|
||||||
|
- Gekoppelte Smartphones als Kartenleser (SaK) werden jetzt korrekt als
|
||||||
|
verfügbar angezeigt, wenn die Verbindung automatisch durch die AA2
|
||||||
|
hergestellt wurde.
|
||||||
|
|
||||||
|
- Erklärungstexte der mobilen App wurden verbessert.
|
||||||
|
|
||||||
|
- In der mobilen App erfolgt kein Browser-Redirect mehr, wenn die
|
||||||
|
Transport-PIN innerhalb eines Ausweisvorgangs in eine 6-stellige PIN
|
||||||
|
überführt wird.
|
||||||
|
|
||||||
|
- Der Fehlerdialog wurde um die Möglichkeit erweitert, eine Email an den
|
||||||
|
Support der AusweisApp2 zu senden, mit der Bitte die Protokolldatei
|
||||||
|
anzuhängen. Die Email enthält automatisch ermittelte Daten zum
|
||||||
|
verwendeten System sowie die letzten, kritischen Fehlermeldungen.
|
||||||
|
|
||||||
|
- Hinterlegte Daten zu Kartenlesern und Diensteanbietern wurden aktualisiert.
|
||||||
|
|
||||||
|
- Die Versionsnummer der AusweisApp2 ist nicht mehr Teil des
|
||||||
|
Installationspfads, um Probleme mit Antiviren-Software zu vermeiden.
|
||||||
|
|
||||||
|
- Ein Absturz beim Start einer Authentisierung, wenn die AusweisApp2
|
||||||
|
im Hintergrund läuft, ist behoben.
|
||||||
|
|
||||||
|
- Die Erkennung von Smartphones als Kartenleser wurde verbessert.
|
||||||
|
|
||||||
|
- Die Erkennung der Kartenleser in der Diagnose wurde korrigiert.
|
||||||
|
|
||||||
|
- Sonstige kleinere Fehler korrigiert.
|
||||||
|
|
||||||
|
|
||||||
|
Entwickler
|
||||||
|
""""""""""
|
||||||
|
- Der Standard-Logger der jeweiligen Plattform kann mittels
|
||||||
|
Parameter "--no-loghandler" deaktiviert werden.
|
||||||
|
|
||||||
|
- Anleitung "Installation in Firmennetzwerken" wurde erweitert.
|
|
@ -0,0 +1,21 @@
|
||||||
|
AusweisApp2 1.18.0
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
**Releasedatum:** 24. September 2019
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Anwender
|
||||||
|
""""""""
|
||||||
|
- Aktivierung der NFC-Funktion für iOS 13.
|
||||||
|
|
||||||
|
- Kleinere Fehlerbehebungen.
|
||||||
|
|
||||||
|
|
||||||
|
Entwickler
|
||||||
|
""""""""""
|
||||||
|
- Aktualisierung von OpenSSL auf die Version 1.1.1c.
|
||||||
|
|
||||||
|
- Aktualisierung von Qt auf die Version 5.12.4.
|
||||||
|
|
||||||
|
- Ein Compiler mit C++17-Support ist erforderlich.
|
|
@ -0,0 +1,10 @@
|
||||||
|
AusweisApp2 1.18.1
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
**Releasedatum:** 24. September 2019
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Entwickler
|
||||||
|
""""""""""
|
||||||
|
- Anpassungen an der Info.plist.
|
|
@ -0,0 +1,15 @@
|
||||||
|
AusweisApp2 1.18.2
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
**Releasedatum:** 26. September 2019
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Anwender
|
||||||
|
""""""""
|
||||||
|
- Kleinere Fehlerbehebungen.
|
||||||
|
|
||||||
|
|
||||||
|
Entwickler
|
||||||
|
""""""""""
|
||||||
|
- Anpassungen an der Info.plist.
|
|
@ -3,6 +3,11 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>AusweisApp2 Release Notes</title>
|
<title>AusweisApp2 Release Notes</title>
|
||||||
|
<style>
|
||||||
|
.important {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body class="wy-body-for-nav" role="document">
|
<body class="wy-body-for-nav" role="document">
|
||||||
<div class="wy-grid-for-nav">
|
<div class="wy-grid-for-nav">
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
Abkündigungen
|
Abkündigungen
|
||||||
=============
|
=============
|
||||||
|
|
||||||
Mit der Version 1.18.0 der AusweisApp2 wird die Unterstützung
|
Mit der Version 1.20.0 der AusweisApp2 wird die Unterstützung
|
||||||
folgender Systeme eingestellt.
|
folgender Systeme eingestellt.
|
||||||
|
|
||||||
|
- OS X 10.11
|
||||||
- x86-Architektur unter Android
|
- x86-Architektur unter Android
|
||||||
|
|
||||||
|
|
||||||
Mit der Version 1.16.0 der AusweisApp2 wird die Unterstützung
|
Mit der Version 1.16.0 der AusweisApp2 wurde die Unterstützung
|
||||||
folgender Systeme eingestellt.
|
folgender Systeme eingestellt.
|
||||||
|
|
||||||
- OS X 10.10
|
- OS X 10.10
|
||||||
|
@ -15,7 +16,7 @@ folgender Systeme eingestellt.
|
||||||
- Android 4.4
|
- Android 4.4
|
||||||
|
|
||||||
|
|
||||||
Mit der Version 1.16.0 der AusweisApp2 wird die Unterstützung
|
Mit der Version 1.16.0 der AusweisApp2 wurde die Unterstützung
|
||||||
folgender TLS-Cipher eingestellt.
|
folgender TLS-Cipher eingestellt.
|
||||||
|
|
||||||
- DHE-DSS-AES256-GCM-SHA384
|
- DHE-DSS-AES256-GCM-SHA384
|
||||||
|
|
|
@ -4,7 +4,6 @@ Release Notes
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
1.16.1
|
1.18.0
|
||||||
1.16.0
|
|
||||||
announce
|
announce
|
||||||
issues
|
issues
|
||||||
|
|
|
@ -42,7 +42,7 @@ master_doc = 'index'
|
||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = 'AusweisApp2'
|
project = 'AusweisApp2'
|
||||||
copyright = '2016-2018, Governikus GmbH & Co. KG'
|
copyright = '2016-2019, Governikus GmbH & Co. KG'
|
||||||
author = 'Governikus GmbH & Co. KG'
|
author = 'Governikus GmbH & Co. KG'
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
|
@ -151,7 +151,7 @@ latex_documents = [
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
# the title page.
|
# the title page.
|
||||||
latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/android/xhdpi/npa.png'
|
latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/npa_docs.png'
|
||||||
|
|
||||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||||
# not chapters.
|
# not chapters.
|
||||||
|
|
|
@ -5,7 +5,7 @@ Die AusweisApp2 ist eine Software, die Sie auf Ihrem Computer installieren, um s
|
||||||
Ihrem Personalausweis bzw. Ihrem elektronischen Aufenthaltstitel online auszuweisen.
|
Ihrem Personalausweis bzw. Ihrem elektronischen Aufenthaltstitel online auszuweisen.
|
||||||
|
|
||||||
Für die Nutzung der Online-Ausweisfunktion benötigen die Nutzerinnen und Nutzer eine
|
Für die Nutzung der Online-Ausweisfunktion benötigen die Nutzerinnen und Nutzer eine
|
||||||
Software, mit deren Hilfe eine sichere Verbindung zwischen Kartenlesegerät oder Smartphone,
|
Software, mit deren Hilfe eine sichere Verbindung zwischen Kartenleser oder Smartphone,
|
||||||
Personalausweis und eID-Diensteanbieter hergestellt werden kann. Sie ermöglicht den
|
Personalausweis und eID-Diensteanbieter hergestellt werden kann. Sie ermöglicht den
|
||||||
verschlüsselten Datenaustausch zwischen Personalausweis und eID-Dienst.
|
verschlüsselten Datenaustausch zwischen Personalausweis und eID-Dienst.
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,20 @@
|
||||||
Bekannte Fehler
|
Bekannte Fehler
|
||||||
===============
|
===============
|
||||||
|
|
||||||
|
.. important::
|
||||||
|
Auf Windows wird beim Update einer Version der AusweisApp2 älter
|
||||||
|
als Version 1.16.0 auf eine aktuelle Version der AusweisApp2 die
|
||||||
|
ältere Version nicht erkannt und auch nicht entfernt. Bitte gehen
|
||||||
|
Sie in die Systemsteuerung Ihres Endgeräts und deinstallieren Sie
|
||||||
|
die ältere Version manuell. Danach kann die bereits installierte,
|
||||||
|
aktuelle Version aufgerufen werden.
|
||||||
|
|
||||||
Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2.
|
Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2.
|
||||||
|
|
||||||
|
- Mit der NFC-Schnittstelle des iPhone 7 und iPhone 7 Plus werden viele
|
||||||
|
Ausweise nicht erkannt (hauptsächlich NFC-A) und es kommt zu Abbrüchen der
|
||||||
|
Authentisierung.
|
||||||
|
|
||||||
- Auf Windows 10 Plattformen mit aktivierter Benutzerkontensteuerung kann
|
- Auf Windows 10 Plattformen mit aktivierter Benutzerkontensteuerung kann
|
||||||
es bei Benutzern mit eingeschränkten Berechtigungen zu Problemen mit der
|
es bei Benutzern mit eingeschränkten Berechtigungen zu Problemen mit der
|
||||||
Online-Ausweisfunktion kommen.
|
Online-Ausweisfunktion kommen.
|
||||||
|
@ -19,8 +31,8 @@ Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2.
|
||||||
leichten Irritationen bei der angegebenen Bedienung kommen.
|
leichten Irritationen bei der angegebenen Bedienung kommen.
|
||||||
|
|
||||||
- Wenn die AusweisApp2 heruntergefahren wird, während eine Authentisierung
|
- Wenn die AusweisApp2 heruntergefahren wird, während eine Authentisierung
|
||||||
oder eine PIN-Änderung mit Komfort-Kartenlesegerät durchgeführt wird,
|
oder eine PIN-Änderung mit Komfort-Kartenleser durchgeführt wird, kann es
|
||||||
kann es unter Windows und macOS zu einem Absturz kommen.
|
unter Windows und macOS zu einem Absturz kommen.
|
||||||
|
|
||||||
- Unter Umständen kommt es zu Stabilitätsproblemen der NFC-Schnittstelle
|
- Unter Umständen kommt es zu Stabilitätsproblemen der NFC-Schnittstelle
|
||||||
auf Android.
|
auf Android.
|
||||||
|
@ -31,12 +43,17 @@ Die nachfolgende Liste bezieht sich auf die aktuelle Version der AusweisApp2.
|
||||||
- Unter macOS wird der Hinweis bei falscher PIN-Bestätigung während der
|
- Unter macOS wird der Hinweis bei falscher PIN-Bestätigung während der
|
||||||
PIN-Änderung nur sehr kurz angezeigt.
|
PIN-Änderung nur sehr kurz angezeigt.
|
||||||
|
|
||||||
- Bei der Nutzung eines entfernten Kartenlesegeräts mit aktiviertem
|
- Bei der Nutzung eines entfernten Kartenlesers mit aktiviertem Tastaturmodus
|
||||||
Tastaturmodus kann bei einer Authentisierung nicht in die PIN-Änderung
|
kann bei einer Authentisierung nicht in die PIN-Änderung gewechselt werden,
|
||||||
gewechselt werden, wenn nur eine 5-stellige PIN vorhanden ist.
|
wenn nur eine 5-stellige PIN vorhanden ist.
|
||||||
|
|
||||||
|
- Unter Windows wird bei der neuen grafischen Oberfläche der
|
||||||
|
"Datei speichern unter"-Dialog nicht automatisch bei Beginn einer
|
||||||
|
Authentisierung geschlossen.
|
||||||
|
|
||||||
|
- Unter macOS können per Tastatur mit den Standardsystemeinstellungen nur
|
||||||
|
Textfelder angesprungen werden. Mit Änderung der Tastaturnavigationsoption
|
||||||
|
unter "Systemeinstellungen/Tastatur/Kurzbefehle" auf "Alle Steuerungen" kann
|
||||||
|
das Verhalten von macOS geändert werden, sodass auch alle anderen
|
||||||
|
Komponenten in der App fokussiert werden können.
|
||||||
|
|
||||||
- Bei der Nutzung eines entfernten Kartenlesegeräts mit aktiviertem
|
|
||||||
Tastaturmodus merkt sich das entfernte Kartenlesegerät fälschlicherweise
|
|
||||||
die zuletzt ausgewählte Länge der PIN (5/6 Stellen). Ein Neustart des
|
|
||||||
Fernzugriffs auf dem entfernten Kartenlesegerät setzt die Länge auf
|
|
||||||
6 Stellen zurück.
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ master_doc = 'appcast'
|
||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = 'AusweisApp2'
|
project = 'AusweisApp2'
|
||||||
copyright = '2016-2018, Governikus GmbH & Co. KG'
|
copyright = '2016-2019, Governikus GmbH & Co. KG'
|
||||||
author = 'Governikus GmbH & Co. KG'
|
author = 'Governikus GmbH & Co. KG'
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
|
|
|
@ -8,8 +8,6 @@ der AusweisApp2 unterstützt.
|
||||||
|
|
||||||
Betriebssysteme
|
Betriebssysteme
|
||||||
"""""""""""""""
|
"""""""""""""""
|
||||||
- OS X 10.11
|
|
||||||
|
|
||||||
- macOS 10.12
|
- macOS 10.12
|
||||||
|
|
||||||
- macOS 10.13
|
- macOS 10.13
|
||||||
|
@ -48,9 +46,9 @@ und sollte daher mit allen marktüblichen Browsern verwendet werden können.
|
||||||
Im Rahmen der Qualitätssicherung werden die folgenden Browserversionen
|
Im Rahmen der Qualitätssicherung werden die folgenden Browserversionen
|
||||||
getestet.
|
getestet.
|
||||||
|
|
||||||
- Firefox 64
|
- Firefox 66
|
||||||
|
|
||||||
- Chrome 71
|
- Chrome 74
|
||||||
|
|
||||||
- Internet Explorer 11
|
- Internet Explorer 11
|
||||||
|
|
||||||
|
@ -60,9 +58,9 @@ getestet.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Kartenlesegeräte
|
Kartenleser
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
Alle Kartenlesegeräte, die die Onlineausweisfunktionalität unterstützen und nach
|
Alle Kartenleser, die die Onlineausweisfunktionalität unterstützen und nach
|
||||||
BSI TR-03119 zertifiziert sind. Details hierzu befinden sich auf der Homepage
|
BSI TR-03119 zertifiziert sind. Details hierzu befinden sich auf der Homepage
|
||||||
des BSI unter "Nach Technischen Richtlinien zertifizierte Produkte".
|
des BSI unter "Nach Technischen Richtlinien zertifizierte Produkte".
|
||||||
|
|
||||||
|
@ -93,7 +91,7 @@ Aktuelle Informationen zu Kartenlesern finden Sie auf unserer Webseite:
|
||||||
https://www.ausweisapp.bund.de/fragen-und-antworten/voraussetzungen/
|
https://www.ausweisapp.bund.de/fragen-und-antworten/voraussetzungen/
|
||||||
|
|
||||||
Alle NFC-fähigen Smartphones bzw. Tablets, die die Onlineausweisfunktionalität
|
Alle NFC-fähigen Smartphones bzw. Tablets, die die Onlineausweisfunktionalität
|
||||||
unterstützen, können als Kartenlesegerät verwendet werden.
|
unterstützen, können als Kartenleser verwendet werden.
|
||||||
Dabei ist es notwendig die mobile AusweisApp2 auf dem jeweiligen Smartphone
|
Dabei ist es notwendig die mobile AusweisApp2 auf dem jeweiligen Smartphone
|
||||||
zu installieren und zu starten.
|
zu installieren und zu starten.
|
||||||
|
|
||||||
|
@ -116,23 +114,23 @@ folgenden Browser zu verwenden.
|
||||||
|
|
||||||
- Firefox Klar 8
|
- Firefox Klar 8
|
||||||
|
|
||||||
- Chrome 71
|
- Chrome 73
|
||||||
|
|
||||||
- Android System WebView 70
|
- Android System WebView 73
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Kartenlesegeräte
|
Kartenleser
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
Alle NFC-fähigen Smartphones bzw. Tablets, die die Onlineausweisfunktionalität
|
Alle NFC-fähigen Smartphones bzw. Tablets, die die Onlineausweisfunktionalität
|
||||||
unterstützen. Details hierzu befinden sich auf der Homepage:
|
unterstützen. Details hierzu befinden sich auf der Homepage:
|
||||||
https://www.ausweisapp.bund.de/mobile-geraete/
|
https://www.ausweisapp.bund.de/mobile-geraete/
|
||||||
|
|
||||||
Ebenfalls ist es möglich ein weiteres Smartphone als Kartenlesegerät zu
|
Ebenfalls ist es möglich ein weiteres Smartphone als Kartenleser zu verwenden.
|
||||||
verwenden. Dabei ist es notwendig die mobile AusweisApp2 auf dem jeweiligen
|
Dabei ist es notwendig die mobile AusweisApp2 auf dem jeweiligen Smartphone zu
|
||||||
Smartphone zu installieren und zu starten.
|
installieren und zu starten.
|
||||||
|
|
||||||
Darüber hinaus ist die Verwendung eines Bluetooth-Kartenlesegeräts möglich.
|
Darüber hinaus ist die Verwendung eines Bluetooth-Kartenlesers möglich.
|
||||||
Folgendes Bluetooth-Kartenlesegerät wird von der AusweiApp2 unterstützt:
|
Folgender Bluetooth-Kartenleser wird von der AusweiApp2 unterstützt:
|
||||||
|
|
||||||
- cyberJack wave
|
- cyberJack wave
|
||||||
|
|
|
@ -1,11 +1,22 @@
|
||||||
Versionen
|
Versionen
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
Versionszweig 1.18
|
||||||
|
------------------
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
1.18.2
|
||||||
|
1.18.1
|
||||||
|
1.18.0
|
||||||
|
|
||||||
|
|
||||||
Versionszweig 1.16
|
Versionszweig 1.16
|
||||||
------------------
|
------------------
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
|
1.16.2
|
||||||
1.16.1
|
1.16.1
|
||||||
1.16.0
|
1.16.0
|
||||||
|
|
||||||
|
|
|
@ -659,7 +659,7 @@ in the listing below.
|
||||||
|
|
||||||
Implementation
|
Implementation
|
||||||
""""""""""""""
|
""""""""""""""
|
||||||
As it is common on the Android platform, information is send to applications
|
As it is common on the Android platform, information is sent to applications
|
||||||
encapsulated in instances of the **Intent** class. In order to process newly
|
encapsulated in instances of the **Intent** class. In order to process newly
|
||||||
discovered NFC tags, Intents which are given to the application need to be
|
discovered NFC tags, Intents which are given to the application need to be
|
||||||
checked for the parcelable NFC extra as shown in the code listing below.
|
checked for the parcelable NFC extra as shown in the code listing below.
|
||||||
|
|
|
@ -42,7 +42,7 @@ master_doc = 'index'
|
||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = 'AusweisApp2 SDK'
|
project = 'AusweisApp2 SDK'
|
||||||
copyright = '2016-2018, Governikus GmbH & Co. KG'
|
copyright = '2016-2019, Governikus GmbH & Co. KG'
|
||||||
author = 'Governikus GmbH & Co. KG'
|
author = 'Governikus GmbH & Co. KG'
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
|
@ -149,7 +149,7 @@ latex_documents = [
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
# the title page.
|
# the title page.
|
||||||
latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/android/xhdpi/npa.png'
|
latex_logo = '@SPHINX_DOCS_DIR@/../../resources/images/npa_docs.png'
|
||||||
|
|
||||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||||
# not chapters.
|
# not chapters.
|
||||||
|
|
|
@ -235,7 +235,7 @@ a result and an url parameter to indicate the end of an authentication.
|
||||||
"minor": "http://www.bsi.bund.de/ecard/api/1.1/resultminor/al/common#internalError",
|
"minor": "http://www.bsi.bund.de/ecard/api/1.1/resultminor/al/common#internalError",
|
||||||
"language": "en",
|
"language": "en",
|
||||||
"description": "An internal error has occurred during processing.",
|
"description": "An internal error has occurred during processing.",
|
||||||
"message": "The ID card has been removed. The process is aborted."
|
"message": "The connection to the ID card has been lost. The process was aborted."
|
||||||
},
|
},
|
||||||
"url": "https://test.governikus-eid.de/gov_autent/async?refID=_abcdefgh"
|
"url": "https://test.governikus-eid.de/gov_autent/async?refID=_abcdefgh"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
CMAKE_MINIMUM_REQUIRED(VERSION 3.5.0)
|
CMAKE_MINIMUM_REQUIRED(VERSION 3.8.0)
|
||||||
|
|
||||||
IF(POLICY CMP0010)
|
IF(POLICY CMP0010)
|
||||||
CMAKE_POLICY(SET CMP0010 NEW)
|
CMAKE_POLICY(SET CMP0010 NEW)
|
||||||
|
@ -82,13 +82,12 @@ ELSE()
|
||||||
SET(PATCH_CMD ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/patch.py --debug -v)
|
SET(PATCH_CMD ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/patch.py --debug -v)
|
||||||
MESSAGE(STATUS "Cannot find 'patch' command... using patch.py")
|
MESSAGE(STATUS "Cannot find 'patch' command... using patch.py")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
SET(PATCH_CMD ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PROJECT_SOURCE_DIR}/patches)
|
||||||
|
|
||||||
IF(NOT DESTINATION_DIR)
|
IF(NOT DESTINATION_DIR)
|
||||||
SET(DESTINATION_DIR ${PROJECT_BINARY_DIR}/dist)
|
SET(DESTINATION_DIR ${PROJECT_BINARY_DIR}/dist)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
SET(PATCHES_DIR ${PROJECT_SOURCE_DIR}/../patches)
|
|
||||||
|
|
||||||
IF(NOT PACKAGES_DIR)
|
IF(NOT PACKAGES_DIR)
|
||||||
SET(PACKAGES_DIR $ENV{PACKAGES_DIR})
|
SET(PACKAGES_DIR $ENV{PACKAGES_DIR})
|
||||||
IF(NOT PACKAGES_DIR)
|
IF(NOT PACKAGES_DIR)
|
||||||
|
@ -103,11 +102,11 @@ INCLUDE(Messages)
|
||||||
|
|
||||||
|
|
||||||
################################## Versions
|
################################## Versions
|
||||||
SET(QT 5.11.2)
|
SET(QT 5.12.4)
|
||||||
SET(QT_HASH c6104b840b6caee596fa9a35bc5f57f67ed5a99d6a36497b6fe66f990a53ca81)
|
SET(QT_HASH 85da5e0ee498759990180d5b8192efaa6060a313c5018b772f57d446bdd425e1)
|
||||||
|
|
||||||
SET(OPENSSL 1.1.1)
|
SET(OPENSSL 1.1.1c)
|
||||||
SET(OPENSSL_HASH 2836875a0f89c03d0fdf483941512613a50cfb421d6fd94b9f41d7279d586a3d)
|
SET(OPENSSL_HASH f6fb3079ad15076154eda9413fed42877d668e7069d9b87396d0804fdb3f4c90)
|
||||||
|
|
||||||
################################## Files
|
################################## Files
|
||||||
SET(QT_FILE qt-everywhere-src-${QT}.tar.xz)
|
SET(QT_FILE qt-everywhere-src-${QT}.tar.xz)
|
||||||
|
@ -117,7 +116,7 @@ SET(OPENSSL_FILE openssl-${OPENSSL}.tar.gz)
|
||||||
IF("${QT}" MATCHES "alpha|beta|rc")
|
IF("${QT}" MATCHES "alpha|beta|rc")
|
||||||
SET(QT_DEST_DIR development_releases)
|
SET(QT_DEST_DIR development_releases)
|
||||||
ELSE()
|
ELSE()
|
||||||
SET(QT_DEST_DIR official_releases)
|
SET(QT_DEST_DIR archive) # official_releases
|
||||||
ENDIF()
|
ENDIF()
|
||||||
STRING(SUBSTRING ${QT} 0 4 QT_SUBVERSION)
|
STRING(SUBSTRING ${QT} 0 4 QT_SUBVERSION)
|
||||||
|
|
||||||
|
@ -131,7 +130,8 @@ SET(ENABLED_TARGETS)
|
||||||
#########################################################################
|
#########################################################################
|
||||||
LIST(APPEND ENABLED_TARGETS openssl)
|
LIST(APPEND ENABLED_TARGETS openssl)
|
||||||
|
|
||||||
SET(OPENSSL_CONFIGURE_FLAGS no-camellia no-bf no-aria no-seed no-poly1305 no-srp no-gost no-ocsp no-idea no-mdc2 no-rc2 no-rc4 no-rc5 no-srtp no-hw no-sm2 no-sm3 no-sm4)
|
SET(OPENSSL_CONFIGURE_FLAGS no-camellia no-bf no-aria no-seed no-poly1305 no-srp no-gost no-idea no-mdc2 no-rc2 no-rc4 no-rc5 no-srtp no-hw no-sm2 no-sm3 no-sm4)
|
||||||
|
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-ocsp no-ct no-dgram)
|
||||||
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-cast no-chacha no-blake2 no-rmd160 no-scrypt no-siphash no-whirlpool no-md4 no-des)
|
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-cast no-chacha no-blake2 no-rmd160 no-scrypt no-siphash no-whirlpool no-md4 no-des)
|
||||||
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-tls1 no-tls1-method no-tls1_1 no-tls1_1-method no-tls1_3 no-ssl3 no-ssl3-method no-dtls no-dtls1-method no-dtls1_2-method)
|
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-tls1 no-tls1-method no-tls1_1 no-tls1_1-method no-tls1_3 no-ssl3 no-ssl3-method no-dtls no-dtls1-method no-dtls1_2-method)
|
||||||
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-deprecated no-engine no-async no-dso no-comp no-ts no-makedepend no-tests shared)
|
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-deprecated no-engine no-async no-dso no-comp no-ts no-makedepend no-tests shared)
|
||||||
|
@ -139,6 +139,7 @@ SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-deprecated no-engine n
|
||||||
IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
|
IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
|
||||||
SET(OPENSSL_CONFIGURE_FLAGS --debug ${OPENSSL_CONFIGURE_FLAGS})
|
SET(OPENSSL_CONFIGURE_FLAGS --debug ${OPENSSL_CONFIGURE_FLAGS})
|
||||||
ELSE()
|
ELSE()
|
||||||
|
SET(OPENSSL_CONFIGURE_FLAGS no-ui-console no-filenames ${OPENSSL_CONFIGURE_FLAGS})
|
||||||
ADD_FLAG(-Os NOQUOTES VAR OPENSSL_COMPILER_FLAGS)
|
ADD_FLAG(-Os NOQUOTES VAR OPENSSL_COMPILER_FLAGS)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
@ -146,14 +147,20 @@ ADD_FLAG(-fstack-protector-strong -fstack-protector NOQUOTES VAR OPENSSL_COMPILE
|
||||||
|
|
||||||
IF(IOS)
|
IF(IOS)
|
||||||
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} ios64-cross)
|
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} ios64-cross)
|
||||||
SET(OPENSSL_ENV export CROSS_TOP=${CMAKE_IOS_DEVELOPER_ROOT} && export CROSS_SDK=iPhoneOS.sdk &&)
|
STRING(REGEX REPLACE "/SDKs/.*" "" CROSS_TOP_DEV_ROOT "${CMAKE_OSX_SYSROOT}")
|
||||||
|
SET(OPENSSL_ENV export CROSS_TOP=${CROSS_TOP_DEV_ROOT} && export CROSS_SDK=iPhoneOS.sdk &&)
|
||||||
ELSEIF(APPLE)
|
ELSEIF(APPLE)
|
||||||
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} darwin64-x86_64-cc)
|
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} darwin64-x86_64-cc)
|
||||||
SET(OPENSSL_COMPILER_FLAGS ${OPENSSL_COMPILER_FLAGS} -mmacosx-version-min=10.11)
|
SET(OPENSSL_COMPILER_FLAGS ${OPENSSL_COMPILER_FLAGS} -mmacosx-version-min=10.12)
|
||||||
ELSEIF(MINGW)
|
ELSEIF(MINGW)
|
||||||
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} mingw)
|
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} mingw)
|
||||||
ELSEIF(MSVC)
|
ELSEIF(MSVC)
|
||||||
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-asm VC-WIN32)
|
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} no-asm)
|
||||||
|
IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
|
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} VC-WIN64A)
|
||||||
|
ELSE()
|
||||||
|
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} VC-WIN32)
|
||||||
|
ENDIF()
|
||||||
ELSEIF(ANDROID)
|
ELSEIF(ANDROID)
|
||||||
IF(CMAKE_ANDROID_ARCH_ABI STREQUAL "armeabi-v7a")
|
IF(CMAKE_ANDROID_ARCH_ABI STREQUAL "armeabi-v7a")
|
||||||
SET(OPENSSL_ARCH android-arm)
|
SET(OPENSSL_ARCH android-arm)
|
||||||
|
@ -180,10 +187,10 @@ ELSEIF(ANDROID)
|
||||||
ELSEIF(BSD)
|
ELSEIF(BSD)
|
||||||
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} BSD-x86_64)
|
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} BSD-x86_64)
|
||||||
ELSEIF(LINUX)
|
ELSEIF(LINUX)
|
||||||
IF(CMAKE_SYSTEM_PROCESSOR STREQUAL "i686")
|
IF(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
SET(OPENSSL_ARCH linux-generic32)
|
|
||||||
ELSE()
|
|
||||||
SET(OPENSSL_ARCH linux-x86_64)
|
SET(OPENSSL_ARCH linux-x86_64)
|
||||||
|
ELSE()
|
||||||
|
SET(OPENSSL_ARCH linux-generic32)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} ${OPENSSL_ARCH})
|
SET(OPENSSL_CONFIGURE_FLAGS ${OPENSSL_CONFIGURE_FLAGS} ${OPENSSL_ARCH})
|
||||||
ELSE()
|
ELSE()
|
||||||
|
@ -195,11 +202,8 @@ ExternalProject_Add(openssl
|
||||||
URL_HASH SHA256=${OPENSSL_HASH}
|
URL_HASH SHA256=${OPENSSL_HASH}
|
||||||
DOWNLOAD_DIR ${PACKAGES_DIR}
|
DOWNLOAD_DIR ${PACKAGES_DIR}
|
||||||
|
|
||||||
PATCH_COMMAND ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-android-shlib_variant.patch &&
|
PATCH_COMMAND ${PATCH_CMD}/openssl-android-shlib_variant.patch &&
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-Ignore-disabled-ciphers.patch &&
|
${PATCH_CMD}/openssl-Adjust-iOS-target.patch
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-DSA-mod-inverse-fix.patch &&
|
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-Timing-vulnerability-in-DSA-signature-generation-CVE.patch &&
|
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/openssl-Timing-vulnerability-in-ECDSA-signature-generation-C.patch
|
|
||||||
CONFIGURE_COMMAND ${OPENSSL_ENV} ${PERL_EXECUTABLE} Configure --prefix=${DESTINATION_DIR} ${OPENSSL_CONFIGURE_FLAGS} "${OPENSSL_COMPILER_FLAGS}"
|
CONFIGURE_COMMAND ${OPENSSL_ENV} ${PERL_EXECUTABLE} Configure --prefix=${DESTINATION_DIR} ${OPENSSL_CONFIGURE_FLAGS} "${OPENSSL_COMPILER_FLAGS}"
|
||||||
BUILD_COMMAND ${OPENSSL_ENV} ${MAKE} ${MAKE_JOBS}
|
BUILD_COMMAND ${OPENSSL_ENV} ${MAKE} ${MAKE_JOBS}
|
||||||
BUILD_IN_SOURCE 1
|
BUILD_IN_SOURCE 1
|
||||||
|
@ -235,32 +239,45 @@ LIST(APPEND ENABLED_TARGETS qt)
|
||||||
|
|
||||||
IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
|
IF(${CMAKE_BUILD_TYPE} STREQUAL "DEBUG")
|
||||||
SET(QT_CONFIGURE_FLAGS -debug -qml-debug)
|
SET(QT_CONFIGURE_FLAGS -debug -qml-debug)
|
||||||
SET(QT_PATCH_COMMAND ${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Enable-debug-output-for-OpenSSL.patch &&)
|
SET(QT_PATCH_COMMAND ${PATCH_CMD}/qt-Enable-debug-output-for-OpenSSL.patch &&)
|
||||||
ELSE()
|
ELSE()
|
||||||
SET(QT_CONFIGURE_FLAGS -release -optimize-size -no-qml-debug)
|
SET(QT_CONFIGURE_FLAGS -release -optimize-size -no-qml-debug)
|
||||||
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} $<$<CONFIG:RelWithDebInfo>:-force-debug-info>)
|
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} $<$<CONFIG:RelWithDebInfo>:-force-debug-info>)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -prefix ${DESTINATION_DIR} -opensource -confirm-license -c++std c++11 -qt-zlib -no-mtdev -qt-libpng -qt-libjpeg -no-dbus -no-harfbuzz -qt-pcre -system-proxies -no-compile-examples -nomake examples -nomake tests -no-sql-sqlite -openssl-linked -I ${DESTINATION_DIR}/include -L ${DESTINATION_DIR}/lib)
|
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -prefix ${DESTINATION_DIR} -opensource -confirm-license)
|
||||||
|
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -nomake examples -nomake tests -no-mtdev -no-dbus -no-harfbuzz -no-compile-examples -no-sql-sqlite)
|
||||||
|
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -qt-zlib -qt-libpng -qt-libjpeg -qt-pcre)
|
||||||
|
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -system-proxies -openssl-linked -I ${DESTINATION_DIR}/include -L ${DESTINATION_DIR}/lib)
|
||||||
|
|
||||||
IF(NOT ANDROID)
|
IF(CMAKE_CXX_COMPILER_LAUNCHER STREQUAL "ccache")
|
||||||
LIST(APPEND NO_FEATURES bearermanagement)
|
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -ccache)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
LIST(APPEND NO_FEATURES ftp paint_debug lcdnumber mdiarea)
|
|
||||||
|
LIST(APPEND NO_FEATURES dtls winrt_bt ftp paint_debug lcdnumber mdiarea)
|
||||||
LIST(APPEND NO_FEATURES calendarwidget colordialog cups dial fontcombobox fontdialog)
|
LIST(APPEND NO_FEATURES calendarwidget colordialog cups dial fontcombobox fontdialog)
|
||||||
LIST(APPEND NO_FEATURES imageformat_bmp imageformat_ppm imageformat_xbm)
|
LIST(APPEND NO_FEATURES imageformat_bmp imageformat_ppm imageformat_xbm)
|
||||||
LIST(APPEND NO_FEATURES sharedmemory textodfwriter filesystemwatcher)
|
LIST(APPEND NO_FEATURES sharedmemory textodfwriter bearermanagement)
|
||||||
LIST(APPEND NO_FEATURES undocommand undogroup undostack undoview)
|
LIST(APPEND NO_FEATURES undocommand undogroup undostack undoview)
|
||||||
LIST(APPEND NO_FEATURES printer printdialog printpreviewdialog printpreviewwidget)
|
LIST(APPEND NO_FEATURES printer printdialog printpreviewdialog printpreviewwidget)
|
||||||
LIST(APPEND NO_FEATURES splashscreen syntaxhighlighter dom sql)
|
LIST(APPEND NO_FEATURES splashscreen syntaxhighlighter dom sql qdoc)
|
||||||
FOREACH(feature ${NO_FEATURES})
|
FOREACH(feature ${NO_FEATURES})
|
||||||
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -no-feature-${feature})
|
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} -no-feature-${feature})
|
||||||
ENDFOREACH()
|
ENDFOREACH()
|
||||||
|
|
||||||
SET(QT_CONFIGURE_FLAGS_OTHER -no-journald -no-directfb -no-linuxfb)
|
|
||||||
SET(QT_CONFIGURE_FLAGS_SKIP_MODULES -skip qtwebglplugin -skip qtscxml -skip qtxmlpatterns -skip qtwebchannel -skip qtwebengine -skip qtscript -skip qtactiveqt -skip qtlocation -skip qtserialbus -skip qtserialport -skip qtgamepad -skip qtvirtualkeyboard -skip qtcanvas3d -skip qtcharts -skip qtdatavis3d -skip qt3d -skip qtpurchasing -skip qtwayland -skip qtremoteobjects -skip qtspeech -skip qtwebview -skip multimedia -skip qtquickcontrols)
|
|
||||||
|
|
||||||
|
LIST(APPEND SKIP_MODULES qtwebglplugin qtscxml qtxmlpatterns qtwebchannel)
|
||||||
|
LIST(APPEND SKIP_MODULES qtwebengine qtscript qtactiveqt qtlocation qtserialbus)
|
||||||
|
LIST(APPEND SKIP_MODULES qtserialport qtgamepad qtvirtualkeyboard qtcanvas3d qtcharts)
|
||||||
|
LIST(APPEND SKIP_MODULES qtdatavis3d qt3d qtpurchasing qtwayland qtremoteobjects)
|
||||||
|
LIST(APPEND SKIP_MODULES qtspeech qtwebview multimedia qtquickcontrols)
|
||||||
|
FOREACH(module ${SKIP_MODULES})
|
||||||
|
SET(QT_CONFIGURE_FLAGS_SKIP_MODULES ${QT_CONFIGURE_FLAGS_SKIP_MODULES} -skip ${module})
|
||||||
|
ENDFOREACH()
|
||||||
|
|
||||||
|
|
||||||
|
SET(QT_CONFIGURE_FLAGS_OTHER -no-journald -no-directfb -no-linuxfb)
|
||||||
SET(QT_CONFIGURE ./configure)
|
SET(QT_CONFIGURE ./configure)
|
||||||
IF(IOS)
|
IF(IOS)
|
||||||
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER} -sdk iphoneos -xplatform macx-ios-clang)
|
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER} -sdk iphoneos -xplatform macx-ios-clang)
|
||||||
|
@ -278,7 +295,16 @@ ELSEIF(APPLE)
|
||||||
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER} -framework -sdk ${osx_sdk})
|
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER} -framework -sdk ${osx_sdk})
|
||||||
ELSEIF(WIN32)
|
ELSEIF(WIN32)
|
||||||
IF(MSVC)
|
IF(MSVC)
|
||||||
SET(QT_PLATFORM win32-msvc2015)
|
IF(MSVC_TOOLSET_VERSION STREQUAL "140")
|
||||||
|
SET(QT_PLATFORM win32-msvc2015)
|
||||||
|
ELSEIF(MSVC_TOOLSET_VERSION STREQUAL "141")
|
||||||
|
SET(QT_PLATFORM win32-msvc2017)
|
||||||
|
ELSEIF(MSVC_TOOLSET_VERSION STREQUAL "142")
|
||||||
|
SET(QT_PLATFORM win32-msvc2019)
|
||||||
|
ELSE()
|
||||||
|
MESSAGE(FATAL_ERROR "Version of MSVC not supported")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
SET(QT_OPENSSL OPENSSL_LIBS=-llibcrypto\ -llibssl)
|
SET(QT_OPENSSL OPENSSL_LIBS=-llibcrypto\ -llibssl)
|
||||||
ELSE()
|
ELSE()
|
||||||
SET(QT_PLATFORM win32-g++)
|
SET(QT_PLATFORM win32-g++)
|
||||||
|
@ -288,6 +314,8 @@ ELSEIF(WIN32)
|
||||||
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_OPENSSL} -opengl dynamic -no-icu -no-sql-odbc -platform ${QT_PLATFORM})
|
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_OPENSSL} -opengl dynamic -no-icu -no-sql-odbc -platform ${QT_PLATFORM})
|
||||||
SET(QT_CONFIGURE configure.bat)
|
SET(QT_CONFIGURE configure.bat)
|
||||||
ELSEIF(ANDROID)
|
ELSEIF(ANDROID)
|
||||||
|
FIND_PACKAGE(Java COMPONENTS Development REQUIRED)
|
||||||
|
|
||||||
IF(CMAKE_COMPILER_IS_GNUCXX)
|
IF(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
SET(ANDROID_XPLATFORM android-g++)
|
SET(ANDROID_XPLATFORM android-g++)
|
||||||
ELSE()
|
ELSE()
|
||||||
|
@ -303,8 +331,12 @@ ELSEIF(ANDROID)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
SET(QT_ENV export OPENSSL_LIBS=-lcrypto-gov\ -lssl-gov &&)
|
SET(QT_ENV export OPENSSL_LIBS=-lcrypto-gov\ -lssl-gov &&)
|
||||||
ELSE()
|
ELSEIF(BSD)
|
||||||
|
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER})
|
||||||
|
ELSEIF(LINUX)
|
||||||
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER} -no-libproxy)
|
SET(QT_CONFIGURE_FLAGS ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_OTHER} -no-libproxy)
|
||||||
|
ELSE()
|
||||||
|
MESSAGE(FATAL_ERROR "Unsupported system")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(IOS OR ANDROID)
|
IF(IOS OR ANDROID)
|
||||||
|
@ -318,21 +350,18 @@ ExternalProject_Add(qt
|
||||||
DOWNLOAD_DIR ${PACKAGES_DIR}
|
DOWNLOAD_DIR ${PACKAGES_DIR}
|
||||||
|
|
||||||
PATCH_COMMAND ${QT_PATCH_COMMAND}
|
PATCH_COMMAND ${QT_PATCH_COMMAND}
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Disable-unused-imageformats.patch &&
|
${PATCH_CMD}/qt-Disable-unused-imageformats.patch &&
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Add-IsoDep-to-the-techList-on-Android.patch &&
|
${PATCH_CMD}/qt-Add-work-around-for-freebsd-build.patch &&
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Introduce-reportError-to-fix-QMetaObject-invokeMethod.patch &&
|
${PATCH_CMD}/qt-Remove-Qt-Labs-specific-plugins-from-the-build.patch &&
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Add-work-around-for-freebsd-build.patch &&
|
${PATCH_CMD}/qt-Remove-unused-plugins-from-the-build.patch &&
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Remove-Qt-Labs-specific-plugins-from-the-build.patch &&
|
${PATCH_CMD}/qt-disable-designer.patch &&
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-configure-refactor-directx-checks.patch &&
|
${PATCH_CMD}/qt-Disable-qmltime-for-shared-build.patch &&
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-configure-detect-fxc.exe-more-thoroughly.patch &&
|
${PATCH_CMD}/qt-Add-Q_CORE_EXPORT-to-lcEventDispatcher.patch &&
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-disable-designer.patch &&
|
${PATCH_CMD}/qt-Fix-build-with-no-feature-printer.patch &&
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-fix-macOS-no-printer.patch &&
|
${PATCH_CMD}/qt-Fix-build-with-no-feature-printer-on-macOS.patch &&
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Use-QUrl-toString-when-forming-the-Host-header.patch &&
|
${PATCH_CMD}/qt-Core-IO-Bluetooth-fix-ambiguous-conversions.patch &&
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-QUrl-Support-IPv6-addresses-with-zone-id.patch &&
|
${PATCH_CMD}/qt-Core-IO-Bluetooth-fix-ambiguous-conversions-for-macO.patch &&
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Android-fix-compile-with-NDK-r18.patch &&
|
${PATCH_CMD}/qt-Adjust-iOS-target.patch &&
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Android-Fix-crash.patch &&
|
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-QObject-Fix-isSignalConnected-when-signals-have-been.patch &&
|
|
||||||
${PATCH_CMD} -p1 ${PATCH_OPTIONS} ${PATCHES_DIR}/qt-Use-user-provided-session-data-if-available.patch &&
|
|
||||||
${CMAKE_COMMAND} -E touch qtbase/.gitignore
|
${CMAKE_COMMAND} -E touch qtbase/.gitignore
|
||||||
CONFIGURE_COMMAND ${QT_ENV} ${QT_CONFIGURE} ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_SKIP_MODULES}
|
CONFIGURE_COMMAND ${QT_ENV} ${QT_CONFIGURE} ${QT_CONFIGURE_FLAGS} ${QT_CONFIGURE_FLAGS_SKIP_MODULES}
|
||||||
BUILD_COMMAND ${MAKE} ${MAKE_JOBS}
|
BUILD_COMMAND ${MAKE} ${MAKE_JOBS}
|
||||||
|
@ -347,7 +376,11 @@ FOREACH(var ${ENABLED_TARGETS})
|
||||||
EXTERNALPROJECT_GET_PROPERTY(${var} INSTALL_DIR)
|
EXTERNALPROJECT_GET_PROPERTY(${var} INSTALL_DIR)
|
||||||
LIST(APPEND CLEAN_TARGETS ${INSTALL_DIR})
|
LIST(APPEND CLEAN_TARGETS ${INSTALL_DIR})
|
||||||
ENDFOREACH()
|
ENDFOREACH()
|
||||||
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${DESTINATION_DIR};${CLEAN_TARGETS}")
|
IF(CMAKE_VERSION VERSION_LESS "3.15")
|
||||||
|
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${DESTINATION_DIR};${CLEAN_TARGETS}")
|
||||||
|
ELSE()
|
||||||
|
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_CLEAN_FILES "${DESTINATION_DIR};${CLEAN_TARGETS}")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
OPTION(COMPRESS_DEPENDS "Disable DEPENDS for compress target" ON)
|
OPTION(COMPRESS_DEPENDS "Disable DEPENDS for compress target" ON)
|
||||||
IF(COMPRESS_DEPENDS)
|
IF(COMPRESS_DEPENDS)
|
||||||
|
@ -368,9 +401,7 @@ IF(DVCS_FOUND)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF(IOS)
|
IF(ANDROID)
|
||||||
SET(SYSTEM_NAME iOS)
|
|
||||||
ELSEIF(ANDROID)
|
|
||||||
SET(SYSTEM_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_CXX_COMPILER_ID}_${CMAKE_ANDROID_ARCH_ABI})
|
SET(SYSTEM_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_CXX_COMPILER_ID}_${CMAKE_ANDROID_ARCH_ABI})
|
||||||
ELSE()
|
ELSE()
|
||||||
SET(SYSTEM_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_CXX_COMPILER_ID})
|
SET(SYSTEM_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_CXX_COMPILER_ID})
|
||||||
|
@ -383,8 +414,14 @@ IF(WIN32)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
SET(COMPRESSION cfJ)
|
IF(CMAKE_VERSION VERSION_LESS "3.15")
|
||||||
SET(COMPRESSION_FILENDING tar.xz)
|
SET(COMPRESSION cfJ)
|
||||||
|
SET(COMPRESSION_FILENDING tar.xz)
|
||||||
|
ELSE()
|
||||||
|
SET(COMPRESSION cf)
|
||||||
|
SET(COMPRESSION_OPTION --zstd)
|
||||||
|
SET(COMPRESSION_FILENDING tar.zstd)
|
||||||
|
ENDIF()
|
||||||
ADD_CUSTOM_TARGET(compress.pre ${compressed_filename}
|
ADD_CUSTOM_TARGET(compress.pre ${compressed_filename}
|
||||||
COMMAND ${CMAKE_COMMAND} -E remove_directory "${DESTINATION_DIR}/doc"
|
COMMAND ${CMAKE_COMMAND} -E remove_directory "${DESTINATION_DIR}/doc"
|
||||||
COMMAND ${CMAKE_COMMAND} -E remove_directory "${DESTINATION_DIR}/share"
|
COMMAND ${CMAKE_COMMAND} -E remove_directory "${DESTINATION_DIR}/share"
|
||||||
|
@ -394,6 +431,6 @@ ADD_CUSTOM_TARGET(compress.pre ${compressed_filename}
|
||||||
|
|
||||||
SET(compressed_filename Toolchain_${SYSTEM_NAME}_${stamp}.${COMPRESSION_FILENDING})
|
SET(compressed_filename Toolchain_${SYSTEM_NAME}_${stamp}.${COMPRESSION_FILENDING})
|
||||||
ADD_CUSTOM_COMMAND(OUTPUT ${compressed_filename}
|
ADD_CUSTOM_COMMAND(OUTPUT ${compressed_filename}
|
||||||
COMMAND ${CMAKE_COMMAND} -E tar "${COMPRESSION}" "${compressed_filename}" "${DESTINATION_DIR}"
|
COMMAND ${CMAKE_COMMAND} -E tar "${COMPRESSION}" "${compressed_filename}" ${COMPRESSION_OPTION} "${DESTINATION_DIR}"
|
||||||
DEPENDS compress.pre)
|
DEPENDS compress.pre)
|
||||||
ADD_CUSTOM_TARGET(compress DEPENDS ${compressed_filename})
|
ADD_CUSTOM_TARGET(compress DEPENDS ${compressed_filename})
|
||||||
|
|
|
@ -4,15 +4,13 @@ Libraries
|
||||||
Um die AusweisApp2 zu bauen ist eine Toolchain erforderlich, die die
|
Um die AusweisApp2 zu bauen ist eine Toolchain erforderlich, die die
|
||||||
Abhängigkeiten und die Compilertools beinhaltet.
|
Abhängigkeiten und die Compilertools beinhaltet.
|
||||||
|
|
||||||
Unterstützte Compiler:
|
Unterstützte C++17 Compiler:
|
||||||
|
|
||||||
- MinGW 32 / 64 >= 4.9
|
- MinGW / GCC >= 7.3
|
||||||
|
|
||||||
- GCC >= 4.9
|
- Clang >= 5.0
|
||||||
|
|
||||||
- Clang >= 3.4
|
- MSVC >= 2017
|
||||||
|
|
||||||
- MSVC >= 2015
|
|
||||||
|
|
||||||
|
|
||||||
Notwendige Bibliotheken:
|
Notwendige Bibliotheken:
|
||||||
|
@ -32,7 +30,7 @@ Notwendige Bibliotheken:
|
||||||
|
|
||||||
Notwendige Tools:
|
Notwendige Tools:
|
||||||
|
|
||||||
- CMake >= 3.5.0 (>= 3.7.1 für Android)
|
- CMake >= 3.8.0 (3.14.0 >= für iOS)
|
||||||
|
|
||||||
- http://www.cmake.org
|
- http://www.cmake.org
|
||||||
|
|
||||||
|
@ -102,7 +100,7 @@ MinGW
|
||||||
- http://sourceforge.net/projects/mingw-w64/
|
- http://sourceforge.net/projects/mingw-w64/
|
||||||
|
|
||||||
- Dabei wurde das folgende Paket getestet:
|
- Dabei wurde das folgende Paket getestet:
|
||||||
https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/5.3.0/threads-posix/dwarf/i686-5.3.0-release-posix-dwarf-rt_v4-rev0.7z/download
|
https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/7.3.0/threads-posix/dwarf/i686-7.3.0-release-posix-dwarf-rt_v5-rev0.7z/download
|
||||||
|
|
||||||
|
|
||||||
MSYS2
|
MSYS2
|
||||||
|
@ -147,7 +145,7 @@ Vorbereitung
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
Für das Windows SDK 10.0.15063.0 und neuer:
|
Für das Windows SDK 10.0.15063.0 und neuer (getestet: 10.0.17763.0):
|
||||||
WindowsSdkVerBinPath = C:\Program Files (x86)\Windows Kits\10\bin\%VERSION%
|
WindowsSdkVerBinPath = C:\Program Files (x86)\Windows Kits\10\bin\%VERSION%
|
||||||
Für alle älteren Versionen:
|
Für alle älteren Versionen:
|
||||||
WindowsSdkDir = C:\Program Files (x86)\Windows Kits\10
|
WindowsSdkDir = C:\Program Files (x86)\Windows Kits\10
|
||||||
|
|
|
@ -368,7 +368,7 @@ class PatchSet(object):
|
||||||
header.append(fe.line)
|
header.append(fe.line)
|
||||||
fe.next()
|
fe.next()
|
||||||
if fe.is_empty:
|
if fe.is_empty:
|
||||||
if p == None:
|
if p is None:
|
||||||
debug("no patch data found") # error is shown later
|
debug("no patch data found") # error is shown later
|
||||||
self.errors += 1
|
self.errors += 1
|
||||||
else:
|
else:
|
||||||
|
@ -956,7 +956,6 @@ class PatchSet(object):
|
||||||
if exists(backupname):
|
if exists(backupname):
|
||||||
warning("can't backup original file to %s - aborting" % backupname)
|
warning("can't backup original file to %s - aborting" % backupname)
|
||||||
else:
|
else:
|
||||||
import shutil
|
|
||||||
shutil.move(filename, backupname)
|
shutil.move(filename, backupname)
|
||||||
if self.write_hunks(backupname, filename, p.hunks):
|
if self.write_hunks(backupname, filename, p.hunks):
|
||||||
info("successfully patched %d/%d:\t %s" % (i+1, total, filename))
|
info("successfully patched %d/%d:\t %s" % (i+1, total, filename))
|
||||||
|
@ -1020,7 +1019,6 @@ class PatchSet(object):
|
||||||
|
|
||||||
lineno = 1
|
lineno = 1
|
||||||
line = fp.readline()
|
line = fp.readline()
|
||||||
hno = None
|
|
||||||
try:
|
try:
|
||||||
for hno, h in enumerate(hunks):
|
for hno, h in enumerate(hunks):
|
||||||
# skip to first line of the hunk
|
# skip to first line of the hunk
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
From 0628b87d65feb0209303e91bf7529628c4dd80f4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
|
||||||
|
Date: Fri, 1 Feb 2019 13:27:04 +0100
|
||||||
|
Subject: [PATCH] Adjust iOS target
|
||||||
|
|
||||||
|
---
|
||||||
|
Configurations/15-ios.conf | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git x/Configurations/15-ios.conf y/Configurations/15-ios.conf
|
||||||
|
index 1bb9f48d06..fb0ece9aff 100644
|
||||||
|
--- x/Configurations/15-ios.conf
|
||||||
|
+++ y/Configurations/15-ios.conf
|
||||||
|
@@ -24,7 +24,7 @@ my %targets = (
|
||||||
|
"ios64-xcrun" => {
|
||||||
|
inherit_from => [ "ios-common", asm("aarch64_asm") ],
|
||||||
|
CC => "xcrun -sdk iphoneos cc",
|
||||||
|
- cflags => add("-arch arm64 -mios-version-min=7.0.0 -fno-common"),
|
||||||
|
+ cflags => add("-arch arm64 -mios-version-min=13.0 -fno-common -fembed-bitcode"),
|
||||||
|
bn_ops => "SIXTY_FOUR_BIT_LONG RC4_CHAR",
|
||||||
|
perlasm_scheme => "ios64",
|
||||||
|
},
|
||||||
|
--
|
||||||
|
2.20.1
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
From f63dce0a614ad26176dfbf4069264a4ec36c11b1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
|
||||||
|
Date: Tue, 20 Nov 2018 16:05:20 +0100
|
||||||
|
Subject: [PATCH] android shlib_variant
|
||||||
|
|
||||||
|
---
|
||||||
|
Configurations/15-android.conf | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git x/Configurations/15-android.conf y/Configurations/15-android.conf
|
||||||
|
index 7b496a4529..559e11e27f 100644
|
||||||
|
--- x/Configurations/15-android.conf
|
||||||
|
+++ y/Configurations/15-android.conf
|
||||||
|
@@ -170,6 +170,8 @@ my %targets = (
|
||||||
|
bn_ops => sub { android_ndk()->{bn_ops} },
|
||||||
|
bin_cflags => "-pie",
|
||||||
|
enable => [ ],
|
||||||
|
+ shlib_variant => '-gov',
|
||||||
|
+ shared_extension => '.so',
|
||||||
|
},
|
||||||
|
"android-arm" => {
|
||||||
|
################################################################
|
||||||
|
--
|
||||||
|
2.20.1
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
From 81839e57d5f3d86d6663f58d5d6b7b0605a6986e Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
|
||||||
|
Date: Tue, 30 Jul 2019 12:49:14 +0200
|
||||||
|
Subject: [PATCH] Add Q_CORE_EXPORT to lcEventDispatcher*
|
||||||
|
|
||||||
|
Undefined symbols for architecture arm64:
|
||||||
|
"lcEventDispatcher()", referenced from:
|
||||||
|
_qt_main_wrapper in libqios.a(qioseventdispatcher.o)
|
||||||
|
+[QIOSApplicationStateTracker applicationDidFinishLaunching:] in libqios.a(qioseventdispatcher.o)
|
||||||
|
user_main_trampoline() in libqios.a(qioseventdispatcher.o)
|
||||||
|
+[QIOSApplicationStateTracker applicationWillTerminate] in libqios.a(qioseventdispatcher.o)
|
||||||
|
QIOSJumpingEventDispatcher::interruptEventLoopExec() in libqios.a(qioseventdispatcher.o)
|
||||||
|
ld: symbol(s) not found for architecture arm64
|
||||||
|
|
||||||
|
Change-Id: I43677cf3bce0588753731d81d533f85b0ea1e223
|
||||||
|
Fixes: QTBUG-75457
|
||||||
|
---
|
||||||
|
src/corelib/kernel/qeventdispatcher_cf.mm | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git x/qtbase/src/corelib/kernel/qeventdispatcher_cf.mm y/qtbase/src/corelib/kernel/qeventdispatcher_cf.mm
|
||||||
|
index b7b379e2c1..ac711d74ee 100644
|
||||||
|
--- x/qtbase/src/corelib/kernel/qeventdispatcher_cf.mm
|
||||||
|
+++ y/qtbase/src/corelib/kernel/qeventdispatcher_cf.mm
|
||||||
|
@@ -148,8 +148,8 @@ static CFStringRef runLoopMode(NSDictionary *dictionary)
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
-Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher");
|
||||||
|
-Q_LOGGING_CATEGORY(lcEventDispatcherTimers, "qt.eventdispatcher.timers");
|
||||||
|
+Q_CORE_EXPORT Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher");
|
||||||
|
+Q_CORE_EXPORT Q_LOGGING_CATEGORY(lcEventDispatcherTimers, "qt.eventdispatcher.timers");
|
||||||
|
|
||||||
|
class RunLoopDebugger : public QObject
|
||||||
|
{
|
||||||
|
--
|
||||||
|
2.22.0
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
From 9e482ce286ad39677e64392e0ca18afc4cf5396c Mon Sep 17 00:00:00 2001
|
From c06988f6a5816e8ebbcebfcf7e9799cd5b90a91d Mon Sep 17 00:00:00 2001
|
||||||
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
|
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
|
||||||
Date: Fri, 13 Apr 2018 08:22:18 +0200
|
Date: Fri, 13 Apr 2018 08:22:18 +0200
|
||||||
Subject: [PATCH] Add work-around for freebsd build
|
Subject: Add work-around for freebsd build
|
||||||
|
|
||||||
Change-Id: I14e66e072f9667479815693e3dbbac71385797e7
|
Change-Id: I14e66e072f9667479815693e3dbbac71385797e7
|
||||||
Task-number: QTBUG-65425
|
Task-number: QTBUG-65425
|
||||||
|
@ -10,7 +10,7 @@ Task-number: QTBUG-65425
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git x/qtbase/qmake/Makefile.unix y/qtbase/qmake/Makefile.unix
|
diff --git x/qtbase/qmake/Makefile.unix y/qtbase/qmake/Makefile.unix
|
||||||
index 426387f0c2..b785127ed2 100644
|
index 0f69b6b487..26ac96c473 100644
|
||||||
--- x/qtbase/qmake/Makefile.unix
|
--- x/qtbase/qmake/Makefile.unix
|
||||||
+++ y/qtbase/qmake/Makefile.unix
|
+++ y/qtbase/qmake/Makefile.unix
|
||||||
@@ -269,7 +269,7 @@ qlibraryinfo.o: $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp
|
@@ -269,7 +269,7 @@ qlibraryinfo.o: $(SOURCE_PATH)/src/corelib/global/qlibraryinfo.cpp
|
||||||
|
@ -23,5 +23,5 @@ index 426387f0c2..b785127ed2 100644
|
||||||
qnumeric.o: $(SOURCE_PATH)/src/corelib/global/qnumeric.cpp
|
qnumeric.o: $(SOURCE_PATH)/src/corelib/global/qnumeric.cpp
|
||||||
$(CXX) -c -o $@ $(CXXFLAGS) $<
|
$(CXX) -c -o $@ $(CXXFLAGS) $<
|
||||||
--
|
--
|
||||||
2.17.0
|
2.21.0
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
From 86b0caf2e167953ef1e50f32edb96e1e64eeba7e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
|
||||||
|
Date: Fri, 19 Jul 2019 15:19:08 +0200
|
||||||
|
Subject: Adjust iOS target
|
||||||
|
|
||||||
|
Change-Id: I6c7f0616d52b0d118ffd8c031f3f51212b8ed821
|
||||||
|
---
|
||||||
|
mkspecs/macx-ios-clang/qmake.conf | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git x/qtbase/mkspecs/macx-ios-clang/qmake.conf y/qtbase/mkspecs/macx-ios-clang/qmake.conf
|
||||||
|
index 88e96ef32e..b3372a8232 100644
|
||||||
|
--- x/qtbase/mkspecs/macx-ios-clang/qmake.conf
|
||||||
|
+++ y/qtbase/mkspecs/macx-ios-clang/qmake.conf
|
||||||
|
@@ -2,7 +2,7 @@
|
||||||
|
# qmake configuration for macx-ios-clang
|
||||||
|
#
|
||||||
|
|
||||||
|
-QMAKE_IOS_DEPLOYMENT_TARGET = 11.0
|
||||||
|
+QMAKE_IOS_DEPLOYMENT_TARGET = 13.0
|
||||||
|
|
||||||
|
# Universal target (iPhone and iPad)
|
||||||
|
QMAKE_APPLE_TARGETED_DEVICE_FAMILY = 1,2
|
||||||
|
--
|
||||||
|
2.22.0
|
||||||
|
|
|
@ -0,0 +1,253 @@
|
||||||
|
From daf0e91b5be5a136d93b0e66efc3681f28a2ffde Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
|
||||||
|
Date: Fri, 19 Jul 2019 11:06:59 +0200
|
||||||
|
Subject: [PATCH] Core/IO/Bluetooth - fix ambiguous conversions for macOS
|
||||||
|
|
||||||
|
This is a sibling of QTBUG-76847 on macOS instead of iOS.
|
||||||
|
---
|
||||||
|
.../qbluetoothdevicediscoveryagent_osx.mm | 6 ++---
|
||||||
|
src/bluetooth/qbluetoothlocaldevice_osx.mm | 2 +-
|
||||||
|
src/bluetooth/qbluetoothserver_osx.mm | 6 ++---
|
||||||
|
src/bluetooth/qbluetoothserviceinfo_osx.mm | 2 +-
|
||||||
|
src/bluetooth/qbluetoothsocket_osx.mm | 26 +++++++++----------
|
||||||
|
src/bluetooth/qbluetoothtransferreply_osx.mm | 10 +++----
|
||||||
|
6 files changed, 26 insertions(+), 26 deletions(-)
|
||||||
|
|
||||||
|
diff --git x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm
|
||||||
|
index 4657da82..bdc3c85e 100644
|
||||||
|
--- x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm
|
||||||
|
+++ y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_osx.mm
|
||||||
|
@@ -181,7 +181,7 @@ QBluetoothDeviceDiscoveryAgentPrivate::QBluetoothDeviceDiscoveryAgentPrivate(con
|
||||||
|
|
||||||
|
QBluetoothDeviceDiscoveryAgentPrivate::~QBluetoothDeviceDiscoveryAgentPrivate()
|
||||||
|
{
|
||||||
|
- if (inquiryLE && agentState != NonActive) {
|
||||||
|
+ if (inquiryLE.data() && agentState != NonActive) {
|
||||||
|
// We want the LE scan to stop as soon as possible.
|
||||||
|
if (dispatch_queue_t leQueue = OSXBluetooth::qt_LE_queue()) {
|
||||||
|
// Local variable to be retained ...
|
||||||
|
@@ -195,7 +195,7 @@ QBluetoothDeviceDiscoveryAgentPrivate::~QBluetoothDeviceDiscoveryAgentPrivate()
|
||||||
|
|
||||||
|
bool QBluetoothDeviceDiscoveryAgentPrivate::isValid() const
|
||||||
|
{
|
||||||
|
- return hostController && [hostController powerState] == kBluetoothHCIPowerStateON;
|
||||||
|
+ return hostController.data() && [hostController powerState] == kBluetoothHCIPowerStateON;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QBluetoothDeviceDiscoveryAgentPrivate::isActive() const
|
||||||
|
@@ -292,7 +292,7 @@ void QBluetoothDeviceDiscoveryAgentPrivate::startLE()
|
||||||
|
|
||||||
|
// Check queue and create scanner:
|
||||||
|
inquiryLE.reset([[LEDeviceInquiryObjC alloc] initWithNotifier:notifier.data()]);
|
||||||
|
- if (inquiryLE)
|
||||||
|
+ if (inquiryLE.data())
|
||||||
|
notifier.take(); // Whatever happens next, inquiryLE is already the owner ...
|
||||||
|
|
||||||
|
dispatch_queue_t leQueue(qt_LE_queue());
|
||||||
|
diff --git x/qtconnectivity/src/bluetooth/qbluetoothlocaldevice_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothlocaldevice_osx.mm
|
||||||
|
index 52b7bba8..e7dd9906 100644
|
||||||
|
--- x/qtconnectivity/src/bluetooth/qbluetoothlocaldevice_osx.mm
|
||||||
|
+++ y/qtconnectivity/src/bluetooth/qbluetoothlocaldevice_osx.mm
|
||||||
|
@@ -149,7 +149,7 @@ QBluetoothLocalDevicePrivate::QBluetoothLocalDevicePrivate(QBluetoothLocalDevice
|
||||||
|
|
||||||
|
bool QBluetoothLocalDevicePrivate::isValid() const
|
||||||
|
{
|
||||||
|
- return hostController;
|
||||||
|
+ return hostController.data();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QBluetoothLocalDevicePrivate::requestPairing(const QBluetoothAddress &address, Pairing pairing)
|
||||||
|
diff --git x/qtconnectivity/src/bluetooth/qbluetoothserver_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothserver_osx.mm
|
||||||
|
index eefaf4da..5d3b8fc4 100644
|
||||||
|
--- x/qtconnectivity/src/bluetooth/qbluetoothserver_osx.mm
|
||||||
|
+++ y/qtconnectivity/src/bluetooth/qbluetoothserver_osx.mm
|
||||||
|
@@ -142,7 +142,7 @@ void QBluetoothServerPrivate::stopListener()
|
||||||
|
|
||||||
|
void QBluetoothServerPrivate::openNotify(IOBluetoothRFCOMMChannel *channel)
|
||||||
|
{
|
||||||
|
- Q_ASSERT_X(listener, Q_FUNC_INFO, "invalid listener (nil)");
|
||||||
|
+ Q_ASSERT_X(listener.data(), Q_FUNC_INFO, "invalid listener (nil)");
|
||||||
|
Q_ASSERT_X(channel, Q_FUNC_INFO, "invalid channel (nil)");
|
||||||
|
Q_ASSERT_X(q_ptr, Q_FUNC_INFO, "invalid q_ptr (null)");
|
||||||
|
|
||||||
|
@@ -154,7 +154,7 @@ void QBluetoothServerPrivate::openNotify(IOBluetoothRFCOMMChannel *channel)
|
||||||
|
|
||||||
|
void QBluetoothServerPrivate::openNotify(IOBluetoothL2CAPChannel *channel)
|
||||||
|
{
|
||||||
|
- Q_ASSERT_X(listener, Q_FUNC_INFO, "invalid listener (nil)");
|
||||||
|
+ Q_ASSERT_X(listener.data(), Q_FUNC_INFO, "invalid listener (nil)");
|
||||||
|
Q_ASSERT_X(channel, Q_FUNC_INFO, "invalid channel (nil)");
|
||||||
|
Q_ASSERT_X(q_ptr, Q_FUNC_INFO, "invalid q_ptr (null)");
|
||||||
|
|
||||||
|
@@ -293,7 +293,7 @@ bool QBluetoothServer::listen(const QBluetoothAddress &address, quint16 port)
|
||||||
|
|
||||||
|
OSXBluetooth::qt_test_iobluetooth_runloop();
|
||||||
|
|
||||||
|
- if (d_ptr->listener) {
|
||||||
|
+ if (d_ptr->listener.data()) {
|
||||||
|
qCWarning(QT_BT_OSX) << "already in listen mode, close server first";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
diff --git x/qtconnectivity/src/bluetooth/qbluetoothserviceinfo_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothserviceinfo_osx.mm
|
||||||
|
index 34de4695..7ce4c645 100644
|
||||||
|
--- x/qtconnectivity/src/bluetooth/qbluetoothserviceinfo_osx.mm
|
||||||
|
+++ y/qtconnectivity/src/bluetooth/qbluetoothserviceinfo_osx.mm
|
||||||
|
@@ -152,7 +152,7 @@ bool QBluetoothServiceInfoPrivate::unregisterService()
|
||||||
|
if (!registered)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
- Q_ASSERT_X(serviceRecord, Q_FUNC_INFO, "service registered, but serviceRecord is nil");
|
||||||
|
+ Q_ASSERT_X(serviceRecord.data(), Q_FUNC_INFO, "service registered, but serviceRecord is nil");
|
||||||
|
|
||||||
|
[serviceRecord removeServiceRecord];
|
||||||
|
serviceRecord.reset(nil);
|
||||||
|
diff --git x/qtconnectivity/src/bluetooth/qbluetoothsocket_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothsocket_osx.mm
|
||||||
|
index 7f630146..2a856092 100644
|
||||||
|
--- x/qtconnectivity/src/bluetooth/qbluetoothsocket_osx.mm
|
||||||
|
+++ y/qtconnectivity/src/bluetooth/qbluetoothsocket_osx.mm
|
||||||
|
@@ -101,13 +101,13 @@ void QBluetoothSocketPrivate::connectToService(const QBluetoothAddress &address,
|
||||||
|
|
||||||
|
if (socketType == QBluetoothServiceInfo::RfcommProtocol) {
|
||||||
|
rfcommChannel.reset([[ObjCRFCOMMChannel alloc] initWithDelegate:this]);
|
||||||
|
- if (rfcommChannel)
|
||||||
|
+ if (rfcommChannel.data())
|
||||||
|
status = [rfcommChannel connectAsyncToDevice:address withChannelID:port];
|
||||||
|
else
|
||||||
|
status = kIOReturnNoMemory;
|
||||||
|
} else if (socketType == QBluetoothServiceInfo::L2capProtocol) {
|
||||||
|
l2capChannel.reset([[ObjCL2CAPChannel alloc] initWithDelegate:this]);
|
||||||
|
- if (l2capChannel)
|
||||||
|
+ if (l2capChannel.data())
|
||||||
|
status = [l2capChannel connectAsyncToDevice:address withPSM:port];
|
||||||
|
else
|
||||||
|
status = kIOReturnNoMemory;
|
||||||
|
@@ -181,10 +181,10 @@ QString QBluetoothSocketPrivate::peerName() const
|
||||||
|
|
||||||
|
NSString *nsName = nil;
|
||||||
|
if (socketType == QBluetoothServiceInfo::RfcommProtocol) {
|
||||||
|
- if (rfcommChannel)
|
||||||
|
+ if (rfcommChannel.data())
|
||||||
|
nsName = [rfcommChannel peerName];
|
||||||
|
} else if (socketType == QBluetoothServiceInfo::L2capProtocol) {
|
||||||
|
- if (l2capChannel)
|
||||||
|
+ if (l2capChannel.data())
|
||||||
|
nsName = [l2capChannel peerName];
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -198,10 +198,10 @@ QBluetoothAddress QBluetoothSocketPrivate::peerAddress() const
|
||||||
|
{
|
||||||
|
BluetoothDeviceAddress addr = {};
|
||||||
|
if (socketType == QBluetoothServiceInfo::RfcommProtocol) {
|
||||||
|
- if (rfcommChannel)
|
||||||
|
+ if (rfcommChannel.data())
|
||||||
|
addr = [rfcommChannel peerAddress];
|
||||||
|
} else if (socketType == QBluetoothServiceInfo::L2capProtocol) {
|
||||||
|
- if (l2capChannel)
|
||||||
|
+ if (l2capChannel.data())
|
||||||
|
addr = [l2capChannel peerAddress];
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -211,10 +211,10 @@ QBluetoothAddress QBluetoothSocketPrivate::peerAddress() const
|
||||||
|
quint16 QBluetoothSocketPrivate::peerPort() const
|
||||||
|
{
|
||||||
|
if (socketType == QBluetoothServiceInfo::RfcommProtocol) {
|
||||||
|
- if (rfcommChannel)
|
||||||
|
+ if (rfcommChannel.data())
|
||||||
|
return [rfcommChannel getChannelID];
|
||||||
|
} else if (socketType == QBluetoothServiceInfo::L2capProtocol) {
|
||||||
|
- if (l2capChannel)
|
||||||
|
+ if (l2capChannel.data())
|
||||||
|
return [l2capChannel getPSM];
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -231,7 +231,7 @@ void QBluetoothSocketPrivate::_q_writeNotify()
|
||||||
|
Q_ASSERT_X(socketType == QBluetoothServiceInfo::L2capProtocol
|
||||||
|
|| socketType == QBluetoothServiceInfo::RfcommProtocol,
|
||||||
|
Q_FUNC_INFO, "invalid socket type");
|
||||||
|
- Q_ASSERT_X(l2capChannel || rfcommChannel, Q_FUNC_INFO,
|
||||||
|
+ Q_ASSERT_X(l2capChannel.data() || rfcommChannel.data(), Q_FUNC_INFO,
|
||||||
|
"invalid socket (no open channel)");
|
||||||
|
Q_ASSERT_X(q_ptr, Q_FUNC_INFO, "invalid q_ptr (null)");
|
||||||
|
|
||||||
|
@@ -275,13 +275,13 @@ bool QBluetoothSocketPrivate::setChannel(IOBluetoothRFCOMMChannel *channel)
|
||||||
|
|
||||||
|
openMode = QIODevice::ReadWrite;
|
||||||
|
rfcommChannel.reset([[ObjCRFCOMMChannel alloc] initWithDelegate:this channel:channel]);
|
||||||
|
- if (rfcommChannel) {// We do not handle errors, up to an external user.
|
||||||
|
+ if (rfcommChannel.data()) {// We do not handle errors, up to an external user.
|
||||||
|
q_ptr->setOpenMode(QIODevice::ReadWrite);
|
||||||
|
state = QBluetoothSocket::ConnectedState;
|
||||||
|
socketType = QBluetoothServiceInfo::RfcommProtocol;
|
||||||
|
}
|
||||||
|
|
||||||
|
- return rfcommChannel;
|
||||||
|
+ return rfcommChannel.data();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QBluetoothSocketPrivate::setChannel(IOBluetoothL2CAPChannel *channel)
|
||||||
|
@@ -299,13 +299,13 @@ bool QBluetoothSocketPrivate::setChannel(IOBluetoothL2CAPChannel *channel)
|
||||||
|
|
||||||
|
openMode = QIODevice::ReadWrite;
|
||||||
|
l2capChannel.reset([[ObjCL2CAPChannel alloc] initWithDelegate:this channel:channel]);
|
||||||
|
- if (l2capChannel) {// We do not handle errors, up to an external user.
|
||||||
|
+ if (l2capChannel.data()) {// We do not handle errors, up to an external user.
|
||||||
|
q_ptr->setOpenMode(QIODevice::ReadWrite);
|
||||||
|
state = QBluetoothSocket::ConnectedState;
|
||||||
|
socketType = QBluetoothServiceInfo::L2capProtocol;
|
||||||
|
}
|
||||||
|
|
||||||
|
- return l2capChannel;
|
||||||
|
+ return l2capChannel.data();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
diff --git x/qtconnectivity/src/bluetooth/qbluetoothtransferreply_osx.mm y/qtconnectivity/src/bluetooth/qbluetoothtransferreply_osx.mm
|
||||||
|
index 65c8f82d..40a747f8 100644
|
||||||
|
--- x/qtconnectivity/src/bluetooth/qbluetoothtransferreply_osx.mm
|
||||||
|
+++ y/qtconnectivity/src/bluetooth/qbluetoothtransferreply_osx.mm
|
||||||
|
@@ -136,13 +136,13 @@ QBluetoothTransferReplyOSXPrivate::~QBluetoothTransferReplyOSXPrivate()
|
||||||
|
// The OBEX session will be closed then. If
|
||||||
|
// somehow IOBluetooth/OBEX still has a reference to our
|
||||||
|
// session, it will not call any of delegate's callbacks.
|
||||||
|
- if (session)
|
||||||
|
+ if (session.data())
|
||||||
|
[session closeSession];
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QBluetoothTransferReplyOSXPrivate::isActive() const
|
||||||
|
{
|
||||||
|
- return agent || (session && [session hasActiveRequest]);
|
||||||
|
+ return agent.data() || (session.data() && [session hasActiveRequest]);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QBluetoothTransferReplyOSXPrivate::startOPP(const QBluetoothAddress &device)
|
||||||
|
@@ -218,7 +218,7 @@ void QBluetoothTransferReplyOSXPrivate::sendConnect(const QBluetoothAddress &dev
|
||||||
|
void QBluetoothTransferReplyOSXPrivate::sendPut()
|
||||||
|
{
|
||||||
|
Q_ASSERT_X(inputStream, Q_FUNC_INFO, "invalid input stream (null)");
|
||||||
|
- Q_ASSERT_X(session, Q_FUNC_INFO, "invalid OBEX session (nil)");
|
||||||
|
+ Q_ASSERT_X(session.data(), Q_FUNC_INFO, "invalid OBEX session (nil)");
|
||||||
|
Q_ASSERT_X([session isConnected], Q_FUNC_INFO, "not connected");
|
||||||
|
Q_ASSERT_X(![session hasActiveRequest], Q_FUNC_INFO,
|
||||||
|
"session already has an active request");
|
||||||
|
@@ -268,7 +268,7 @@ void QBluetoothTransferReplyOSXPrivate::OBEXConnectError(OBEXError errorCode, OB
|
||||||
|
Q_UNUSED(errorCode)
|
||||||
|
Q_UNUSED(response)
|
||||||
|
|
||||||
|
- if (session) {
|
||||||
|
+ if (session.data()) {
|
||||||
|
setReplyError(QBluetoothTransferReply::SessionError,
|
||||||
|
QCoreApplication::translate(TRANSFER_REPLY, TR_CONNECT_FAILED));
|
||||||
|
} else {
|
||||||
|
@@ -283,7 +283,7 @@ void QBluetoothTransferReplyOSXPrivate::OBEXConnectError(OBEXError errorCode, OB
|
||||||
|
void QBluetoothTransferReplyOSXPrivate::OBEXConnectSuccess()
|
||||||
|
{
|
||||||
|
// Now that OBEX connect succeeded, we can send an OBEX put request.
|
||||||
|
- if (!session) {
|
||||||
|
+ if (!session.data()) {
|
||||||
|
// We're still in OBEXConnect(), it'll take care of next steps.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.22.0
|
||||||
|
|
|
@ -0,0 +1,97 @@
|
||||||
|
From cd287186955f1c654a1f35197f0515ffc222e734 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Timur Pocheptsov <timur.pocheptsov@qt.io>
|
||||||
|
Date: Wed, 3 Jul 2019 15:26:31 +0200
|
||||||
|
Subject: [PATCH] Core/IO/Bluetooth - fix ambiguous conversions
|
||||||
|
|
||||||
|
... somewhat prospective fix (I do not have the new iOS yet), so far build
|
||||||
|
never failed with my current SDK.
|
||||||
|
|
||||||
|
Fixes: QTBUG-76847
|
||||||
|
Change-Id: Iab75c3cd47144cd83b679b1dbf82339e29c07bd1
|
||||||
|
---
|
||||||
|
src/bluetooth/osx/osxbtperipheralmanager.mm | 4 ++--
|
||||||
|
src/bluetooth/qbluetoothdevicediscoveryagent_ios.mm | 6 +++---
|
||||||
|
src/bluetooth/qlowenergycontroller_osx.mm | 6 +++---
|
||||||
|
3 files changed, 8 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git x/qtconnectivity/src/bluetooth/osx/osxbtperipheralmanager.mm y/qtconnectivity/src/bluetooth/osx/osxbtperipheralmanager.mm
|
||||||
|
index 1998340a..39f9808c 100644
|
||||||
|
--- x/qtconnectivity/src/bluetooth/osx/osxbtperipheralmanager.mm
|
||||||
|
+++ y/qtconnectivity/src/bluetooth/osx/osxbtperipheralmanager.mm
|
||||||
|
@@ -340,7 +340,7 @@ bool qt_validate_value_range(const QLowEnergyCharacteristicData &data)
|
||||||
|
- (void)startAdvertising
|
||||||
|
{
|
||||||
|
state = PeripheralState::waitingForPowerOn;
|
||||||
|
- if (manager)
|
||||||
|
+ if (manager.data())
|
||||||
|
[manager setDelegate:nil];
|
||||||
|
manager.reset([[CBPeripheralManager alloc] initWithDelegate:self
|
||||||
|
queue:OSXBluetooth::qt_LE_queue()]);
|
||||||
|
@@ -405,7 +405,7 @@ bool qt_validate_value_range(const QLowEnergyCharacteristicData &data)
|
||||||
|
|
||||||
|
- (void) addServicesToPeripheral
|
||||||
|
{
|
||||||
|
- Q_ASSERT(manager);
|
||||||
|
+ Q_ASSERT(manager.data());
|
||||||
|
|
||||||
|
if (nextServiceToAdd < services.size())
|
||||||
|
[manager addService:services[nextServiceToAdd++]];
|
||||||
|
diff --git x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_ios.mm y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_ios.mm
|
||||||
|
index c50d546d..557785b4 100644
|
||||||
|
--- x/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_ios.mm
|
||||||
|
+++ y/qtconnectivity/src/bluetooth/qbluetoothdevicediscoveryagent_ios.mm
|
||||||
|
@@ -132,7 +132,7 @@ QBluetoothDeviceDiscoveryAgentPrivate::QBluetoothDeviceDiscoveryAgentPrivate(con
|
||||||
|
|
||||||
|
QBluetoothDeviceDiscoveryAgentPrivate::~QBluetoothDeviceDiscoveryAgentPrivate()
|
||||||
|
{
|
||||||
|
- if (inquiryLE) {
|
||||||
|
+ if (inquiryLE.data()) {
|
||||||
|
// We want the LE scan to stop as soon as possible.
|
||||||
|
if (dispatch_queue_t leQueue = OSXBluetooth::qt_LE_queue()) {
|
||||||
|
// Local variable to be retained ...
|
||||||
|
@@ -151,7 +151,7 @@ bool QBluetoothDeviceDiscoveryAgentPrivate::isActive() const
|
||||||
|
if (stopPending)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
- return inquiryLE;
|
||||||
|
+ return !!inquiryLE.data();
|
||||||
|
}
|
||||||
|
|
||||||
|
void QBluetoothDeviceDiscoveryAgentPrivate::start(QBluetoothDeviceDiscoveryAgent::DiscoveryMethods /*methods*/)
|
||||||
|
@@ -178,7 +178,7 @@ void QBluetoothDeviceDiscoveryAgentPrivate::start(QBluetoothDeviceDiscoveryAgent
|
||||||
|
this, &QBluetoothDeviceDiscoveryAgentPrivate::LEdeviceFound);
|
||||||
|
|
||||||
|
inquiryLE.reset([[LEDeviceInquiryObjC alloc] initWithNotifier:notifier.data()]);
|
||||||
|
- if (inquiryLE)
|
||||||
|
+ if (inquiryLE.data())
|
||||||
|
notifier.take(); // Whatever happens next, inquiryLE is already the owner ...
|
||||||
|
|
||||||
|
dispatch_queue_t leQueue(qt_LE_queue());
|
||||||
|
diff --git x/qtconnectivity/src/bluetooth/qlowenergycontroller_osx.mm y/qtconnectivity/src/bluetooth/qlowenergycontroller_osx.mm
|
||||||
|
index 8bcdc22e..9aaee855 100644
|
||||||
|
--- x/qtconnectivity/src/bluetooth/qlowenergycontroller_osx.mm
|
||||||
|
+++ y/qtconnectivity/src/bluetooth/qlowenergycontroller_osx.mm
|
||||||
|
@@ -165,7 +165,7 @@ QLowEnergyControllerPrivateOSX::QLowEnergyControllerPrivateOSX(QLowEnergyControl
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
centralManager.reset([[ObjCCentralManager alloc] initWith:notifier.data()]);
|
||||||
|
- if (!centralManager) {
|
||||||
|
+ if (!centralManager.data()) {
|
||||||
|
qCWarning(QT_BT_OSX) << "failed to initialize central manager";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
@@ -200,9 +200,9 @@ QLowEnergyControllerPrivateOSX::~QLowEnergyControllerPrivateOSX()
|
||||||
|
bool QLowEnergyControllerPrivateOSX::isValid() const
|
||||||
|
{
|
||||||
|
#ifdef Q_OS_TVOS
|
||||||
|
- return centralManager;
|
||||||
|
+ return centralManager.data();
|
||||||
|
#else
|
||||||
|
- return centralManager || peripheralManager;
|
||||||
|
+ return centralManager.data() || peripheralManager.data();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.22.0
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
From 9040ffde6a172f634249af58cd7f1bd3fcc33a00 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
|
||||||
|
Date: Tue, 30 Jul 2019 10:42:57 +0200
|
||||||
|
Subject: [PATCH] Disable qmltime for shared build
|
||||||
|
|
||||||
|
=== BUILD TARGET qmltime OF PROJECT qmltime WITH CONFIGURATION Release ===
|
||||||
|
Code Signing Error: Signing for "qmltime" requires a development team. Select a development team in the Signing & Capabilities editor.
|
||||||
|
Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 13.0'
|
||||||
|
** BUILD FAILED **
|
||||||
|
|
||||||
|
Fixes: QTBUG-67135
|
||||||
|
---
|
||||||
|
tools/tools.pro | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git x/qtdeclarative/tools/tools.pro y/qtdeclarative/tools/tools.pro
|
||||||
|
index d3ec38071..d431ee835 100644
|
||||||
|
--- x/qtdeclarative/tools/tools.pro
|
||||||
|
+++ y/qtdeclarative/tools/tools.pro
|
||||||
|
@@ -20,8 +20,7 @@ qtConfig(thread):!android|android_app {
|
||||||
|
qtHaveModule(quick) {
|
||||||
|
!static: {
|
||||||
|
SUBDIRS += \
|
||||||
|
- qmlscene \
|
||||||
|
- qmltime
|
||||||
|
+ qmlscene
|
||||||
|
|
||||||
|
qtConfig(regularexpression):qtConfig(process) {
|
||||||
|
SUBDIRS += \
|
||||||
|
--
|
||||||
|
2.22.0
|
||||||
|
|
|
@ -1,17 +1,18 @@
|
||||||
From e1c05843ae1609075807d5a789fc4e6cd8154520 Mon Sep 17 00:00:00 2001
|
From 2674afcd19c8ce6a23a3c69bb9d41d82838adf86 Mon Sep 17 00:00:00 2001
|
||||||
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
|
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
|
||||||
Date: Mon, 25 Sep 2017 14:10:56 +0200
|
Date: Tue, 18 Jun 2019 07:47:39 +0200
|
||||||
Subject: [PATCH] Disable unused imageformats
|
Subject: Disable unused imageformats
|
||||||
|
|
||||||
|
Change-Id: Iace4d751b615d1e54d94e9f8ab774ef39b111a79
|
||||||
---
|
---
|
||||||
src/plugins/imageformats/imageformats.pro | 3 +--
|
src/plugins/imageformats/imageformats.pro | 3 +--
|
||||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git x/qtimageformats/src/plugins/imageformats/imageformats.pro y/qtimageformats/src/plugins/imageformats/imageformats.pro
|
diff --git x/qtimageformats/src/plugins/imageformats/imageformats.pro y/qtimageformats/src/plugins/imageformats/imageformats.pro
|
||||||
index d6c59ee..f1fb6d0 100644
|
index be1e20a..06feab3 100644
|
||||||
--- x/qtimageformats/src/plugins/imageformats/imageformats.pro
|
--- x/qtimageformats/src/plugins/imageformats/imageformats.pro
|
||||||
+++ y/qtimageformats/src/plugins/imageformats/imageformats.pro
|
+++ y/qtimageformats/src/plugins/imageformats/imageformats.pro
|
||||||
@@ -18,8 +18,7 @@ config_jasper {
|
@@ -22,8 +22,7 @@ qtConfig(jasper) {
|
||||||
SUBDIRS += macjp2
|
SUBDIRS += macjp2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,5 +23,5 @@ index d6c59ee..f1fb6d0 100644
|
||||||
webp
|
webp
|
||||||
-}
|
-}
|
||||||
--
|
--
|
||||||
2.16.2
|
2.21.0
|
||||||
|
|
|
@ -0,0 +1,159 @@
|
||||||
|
From fdb01d0c01261008f9055339db55c6e9693f18c8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
|
||||||
|
Date: Tue, 23 Jul 2019 12:44:45 +0200
|
||||||
|
Subject: [PATCH 2/2] Fix build with -no-feature-printer on macOS
|
||||||
|
|
||||||
|
Fixes: QTBUG-62675
|
||||||
|
Change-Id: I3bfcd6d78c3124769ff8662941472333c795fdbe
|
||||||
|
---
|
||||||
|
src/plugins/platforms/cocoa/cocoa.pro | 42 +++++++++++--------
|
||||||
|
.../platforms/cocoa/qcocoanativeinterface.mm | 6 +--
|
||||||
|
.../platforms/cocoa/qpaintengine_mac.mm | 4 ++
|
||||||
|
3 files changed, 32 insertions(+), 20 deletions(-)
|
||||||
|
|
||||||
|
diff --git x/qtbase/src/plugins/platforms/cocoa/cocoa.pro y/qtbase/src/plugins/platforms/cocoa/cocoa.pro
|
||||||
|
index 083b7c1655..4249bae2b1 100644
|
||||||
|
--- x/qtbase/src/plugins/platforms/cocoa/cocoa.pro
|
||||||
|
+++ y/qtbase/src/plugins/platforms/cocoa/cocoa.pro
|
||||||
|
@@ -20,8 +20,6 @@ SOURCES += main.mm \
|
||||||
|
qcocoamenuloader.mm \
|
||||||
|
qcocoahelpers.mm \
|
||||||
|
qmultitouch_mac.mm \
|
||||||
|
- qcocoaaccessibilityelement.mm \
|
||||||
|
- qcocoaaccessibility.mm \
|
||||||
|
qcocoacursor.mm \
|
||||||
|
qcocoaclipboard.mm \
|
||||||
|
qcocoadrag.mm \
|
||||||
|
@@ -55,8 +53,6 @@ HEADERS += qcocoaintegration.h \
|
||||||
|
qcocoamenuloader.h \
|
||||||
|
qcocoahelpers.h \
|
||||||
|
qmultitouch_mac_p.h \
|
||||||
|
- qcocoaaccessibilityelement.h \
|
||||||
|
- qcocoaaccessibility.h \
|
||||||
|
qcocoacursor.h \
|
||||||
|
qcocoaclipboard.h \
|
||||||
|
qcocoadrag.h \
|
||||||
|
@@ -81,15 +77,24 @@ qtConfig(vulkan) {
|
||||||
|
HEADERS += qcocoavulkaninstance.h
|
||||||
|
}
|
||||||
|
|
||||||
|
+qtConfig(accessibility) {
|
||||||
|
+ SOURCES += qcocoaaccessibilityelement.mm \
|
||||||
|
+ qcocoaaccessibility.mm
|
||||||
|
+ HEADERS += qcocoaaccessibilityelement.h \
|
||||||
|
+ qcocoaaccessibility.h
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
RESOURCES += qcocoaresources.qrc
|
||||||
|
|
||||||
|
LIBS += -framework AppKit -framework CoreServices -framework Carbon -framework IOKit -framework QuartzCore -framework CoreVideo -framework Metal -framework IOSurface -lcups
|
||||||
|
|
||||||
|
QT += \
|
||||||
|
core-private gui-private \
|
||||||
|
- accessibility_support-private clipboard_support-private theme_support-private \
|
||||||
|
+ clipboard_support-private theme_support-private \
|
||||||
|
fontdatabase_support-private graphics_support-private
|
||||||
|
|
||||||
|
+qtConfig(accessibility): QT += accessibility_support-private
|
||||||
|
+
|
||||||
|
qtConfig(vulkan): QT += vulkan_support-private
|
||||||
|
|
||||||
|
CONFIG += no_app_extension_api_only
|
||||||
|
@@ -97,17 +102,19 @@ CONFIG += no_app_extension_api_only
|
||||||
|
qtHaveModule(widgets) {
|
||||||
|
QT_FOR_CONFIG += widgets
|
||||||
|
|
||||||
|
- SOURCES += \
|
||||||
|
- qpaintengine_mac.mm \
|
||||||
|
- qprintengine_mac.mm \
|
||||||
|
- qcocoaprintersupport.mm \
|
||||||
|
- qcocoaprintdevice.mm \
|
||||||
|
-
|
||||||
|
- HEADERS += \
|
||||||
|
- qpaintengine_mac_p.h \
|
||||||
|
- qprintengine_mac_p.h \
|
||||||
|
- qcocoaprintersupport.h \
|
||||||
|
- qcocoaprintdevice.h \
|
||||||
|
+ SOURCES += qpaintengine_mac.mm
|
||||||
|
+ HEADERS += qpaintengine_mac_p.h
|
||||||
|
+
|
||||||
|
+ qtHaveModule(printsupport) {
|
||||||
|
+ SOURCES += \
|
||||||
|
+ qprintengine_mac.mm \
|
||||||
|
+ qcocoaprintersupport.mm \
|
||||||
|
+ qcocoaprintdevice.mm
|
||||||
|
+ HEADERS += \
|
||||||
|
+ qcocoaprintersupport.h \
|
||||||
|
+ qcocoaprintdevice.h \
|
||||||
|
+ qprintengine_mac_p.h
|
||||||
|
+ }
|
||||||
|
|
||||||
|
qtConfig(colordialog) {
|
||||||
|
SOURCES += qcocoacolordialoghelper.mm
|
||||||
|
@@ -124,7 +131,8 @@ qtHaveModule(widgets) {
|
||||||
|
HEADERS += qcocoafontdialoghelper.h
|
||||||
|
}
|
||||||
|
|
||||||
|
- QT += widgets-private printsupport-private
|
||||||
|
+ QT += widgets-private
|
||||||
|
+ qtHaveModule(printsupport): QT += printsupport-private
|
||||||
|
}
|
||||||
|
|
||||||
|
OTHER_FILES += cocoa.json
|
||||||
|
diff --git x/qtbase/src/plugins/platforms/cocoa/qcocoanativeinterface.mm y/qtbase/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
|
||||||
|
index 7979e430ac..8c0bd1d158 100644
|
||||||
|
--- x/qtbase/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
|
||||||
|
+++ y/qtbase/src/plugins/platforms/cocoa/qcocoanativeinterface.mm
|
||||||
|
@@ -59,7 +59,7 @@
|
||||||
|
#include "qguiapplication.h"
|
||||||
|
#include <qdebug.h>
|
||||||
|
|
||||||
|
-#ifndef QT_NO_WIDGETS
|
||||||
|
+#if !defined(QT_NO_WIDGETS) && defined(QT_PRINTSUPPORT_LIB)
|
||||||
|
#include "qcocoaprintersupport.h"
|
||||||
|
#include "qprintengine_mac_p.h"
|
||||||
|
#include <qpa/qplatformprintersupport.h>
|
||||||
|
@@ -153,7 +153,7 @@ QPlatformNativeInterface::NativeResourceForIntegrationFunction QCocoaNativeInter
|
||||||
|
|
||||||
|
QPlatformPrinterSupport *QCocoaNativeInterface::createPlatformPrinterSupport()
|
||||||
|
{
|
||||||
|
-#if !defined(QT_NO_WIDGETS) && !defined(QT_NO_PRINTER)
|
||||||
|
+#if !defined(QT_NO_WIDGETS) && !defined(QT_NO_PRINTER) && defined(QT_PRINTSUPPORT_LIB)
|
||||||
|
return new QCocoaPrinterSupport();
|
||||||
|
#else
|
||||||
|
qFatal("Printing is not supported when Qt is configured with -no-widgets");
|
||||||
|
@@ -163,7 +163,7 @@ QPlatformPrinterSupport *QCocoaNativeInterface::createPlatformPrinterSupport()
|
||||||
|
|
||||||
|
void *QCocoaNativeInterface::NSPrintInfoForPrintEngine(QPrintEngine *printEngine)
|
||||||
|
{
|
||||||
|
-#if !defined(QT_NO_WIDGETS) && !defined(QT_NO_PRINTER)
|
||||||
|
+#if !defined(QT_NO_WIDGETS) && !defined(QT_NO_PRINTER) && defined(QT_PRINTSUPPORT_LIB)
|
||||||
|
QMacPrintEnginePrivate *macPrintEnginePriv = static_cast<QMacPrintEngine *>(printEngine)->d_func();
|
||||||
|
if (macPrintEnginePriv->state == QPrinter::Idle && !macPrintEnginePriv->isPrintSessionInitialized())
|
||||||
|
macPrintEnginePriv->initialize();
|
||||||
|
diff --git x/qtbase/src/plugins/platforms/cocoa/qpaintengine_mac.mm y/qtbase/src/plugins/platforms/cocoa/qpaintengine_mac.mm
|
||||||
|
index 3677877538..00b2267f0d 100644
|
||||||
|
--- x/qtbase/src/plugins/platforms/cocoa/qpaintengine_mac.mm
|
||||||
|
+++ y/qtbase/src/plugins/platforms/cocoa/qpaintengine_mac.mm
|
||||||
|
@@ -38,14 +38,18 @@
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "qpaintengine_mac_p.h"
|
||||||
|
+#if defined(QT_PRINTSUPPORT_LIB)
|
||||||
|
#include "qprintengine_mac_p.h"
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
#include <qbitmap.h>
|
||||||
|
#include <qpaintdevice.h>
|
||||||
|
#include <qpainterpath.h>
|
||||||
|
#include <qpixmapcache.h>
|
||||||
|
#include <private/qpaintengine_raster_p.h>
|
||||||
|
+#if defined(QT_PRINTSUPPORT_LIB)
|
||||||
|
#include <qprinter.h>
|
||||||
|
+#endif
|
||||||
|
#include <qstack.h>
|
||||||
|
#include <qwidget.h>
|
||||||
|
#include <qvarlengtharray.h>
|
||||||
|
--
|
||||||
|
2.22.0
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
From d8ac3ad8e4dfc26c6b2f4bb696d4ec8cc23d8cbf Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kai Koehne <kai.koehne@qt.io>
|
||||||
|
Date: Tue, 9 Jul 2019 17:19:26 +0200
|
||||||
|
Subject: [PATCH 1/2] Fix build with -no-feature-printer
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Skip printsupport subdirectory if printer feature is disabled. Also
|
||||||
|
removed android-embedded condition for the plugin: Such a
|
||||||
|
configuration should just disable the printer feature.
|
||||||
|
|
||||||
|
Fixes: QTBUG-76941
|
||||||
|
Change-Id: Ifca7d2311a575c1589ad6a87a775bd016591ee2c
|
||||||
|
Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io>
|
||||||
|
---
|
||||||
|
src/src.pro | 10 +++++++---
|
||||||
|
1 file changed, 7 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git x/qtbase/src/src.pro y/qtbase/src/src.pro
|
||||||
|
index 1c76a2e46f..b704ccd7ab 100644
|
||||||
|
--- x/qtbase/src/src.pro
|
||||||
|
+++ y/qtbase/src/src.pro
|
||||||
|
@@ -1,8 +1,10 @@
|
||||||
|
TEMPLATE = subdirs
|
||||||
|
|
||||||
|
-QT_FOR_CONFIG += core-private gui-private
|
||||||
|
+QT_FOR_CONFIG += core-private gui-private printsupport
|
||||||
|
+
|
||||||
|
include($$OUT_PWD/corelib/qtcore-config.pri)
|
||||||
|
include($$OUT_PWD/gui/qtgui-config.pri)
|
||||||
|
+include($$OUT_PWD/printsupport/qtprintsupport-config.pri)
|
||||||
|
|
||||||
|
force_bootstrap|!qtConfig(commandlineparser): \
|
||||||
|
CONFIG += force_dbus_bootstrap
|
||||||
|
@@ -221,11 +223,13 @@ qtConfig(gui) {
|
||||||
|
src_testlib.depends += src_gui # if QtGui is enabled, QtTest requires QtGui's headers
|
||||||
|
qtConfig(widgets) {
|
||||||
|
SUBDIRS += src_tools_uic src_widgets
|
||||||
|
- !android-embedded: SUBDIRS += src_printsupport
|
||||||
|
TOOLS += src_tools_uic
|
||||||
|
src_plugins.depends += src_widgets
|
||||||
|
- !android-embedded: src_plugins.depends += src_printsupport
|
||||||
|
src_testlib.depends += src_widgets # if QtWidgets is enabled, QtTest requires QtWidgets's headers
|
||||||
|
+ qtConfig(printer) {
|
||||||
|
+ SUBDIRS += src_printsupport
|
||||||
|
+ src_plugins.depends += src_printsupport
|
||||||
|
+ }
|
||||||
|
qtConfig(opengl) {
|
||||||
|
SUBDIRS += src_opengl
|
||||||
|
src_plugins.depends += src_opengl
|
||||||
|
--
|
||||||
|
2.22.0
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
From c69fef8cde15345cb53748456a2e7136258f42a4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
|
||||||
|
Date: Mon, 16 Apr 2018 08:34:42 +0200
|
||||||
|
Subject: Remove Qt Labs specific plugins from the build
|
||||||
|
|
||||||
|
Change-Id: I8f1444d4be2806e983979ceff73223c7452da5c2
|
||||||
|
---
|
||||||
|
src/imports/imports.pro | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git x/qtquickcontrols2/src/imports/imports.pro y/qtquickcontrols2/src/imports/imports.pro
|
||||||
|
index e32bded7..2345616e 100644
|
||||||
|
--- x/qtquickcontrols2/src/imports/imports.pro
|
||||||
|
+++ y/qtquickcontrols2/src/imports/imports.pro
|
||||||
|
@@ -1,7 +1,6 @@
|
||||||
|
TEMPLATE = subdirs
|
||||||
|
SUBDIRS += \
|
||||||
|
controls \
|
||||||
|
- calendar \
|
||||||
|
platform \
|
||||||
|
templates
|
||||||
|
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
From 0aa601d4cfdded1bd1c9924244795c4bb3d1b227 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
|
||||||
|
Date: Mon, 16 Apr 2018 08:53:54 +0200
|
||||||
|
Subject: Remove unused plugins from the build
|
||||||
|
|
||||||
|
Change-Id: I780168aa4481c4bc6c9570effd80d34ce097d08a
|
||||||
|
---
|
||||||
|
src/imports/imports.pro | 5 +----
|
||||||
|
1 file changed, 1 insertion(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git x/qtdeclarative/src/imports/imports.pro y/qtdeclarative/src/imports/imports.pro
|
||||||
|
index 24e93fec1..aced2e417 100644
|
||||||
|
--- x/qtdeclarative/src/imports/imports.pro
|
||||||
|
+++ y/qtdeclarative/src/imports/imports.pro
|
||||||
|
@@ -3,10 +3,8 @@ TEMPLATE = subdirs
|
||||||
|
SUBDIRS += \
|
||||||
|
builtins \
|
||||||
|
qtqml \
|
||||||
|
- models \
|
||||||
|
- labsmodels
|
||||||
|
+ models
|
||||||
|
|
||||||
|
-qtConfig(thread): SUBDIRS += folderlistmodel
|
||||||
|
qtHaveModule(sql): SUBDIRS += localstorage
|
||||||
|
qtConfig(settings): SUBDIRS += settings
|
||||||
|
qtConfig(statemachine): SUBDIRS += statemachine
|
||||||
|
@@ -21,7 +19,6 @@ qtHaveModule(quick) {
|
||||||
|
wavefrontmesh
|
||||||
|
|
||||||
|
qtHaveModule(testlib): SUBDIRS += testlib
|
||||||
|
- qtConfig(systemsemaphore): SUBDIRS += sharedimage
|
||||||
|
qtConfig(quick-particles): \
|
||||||
|
SUBDIRS += particles
|
||||||
|
|
||||||
|
--
|
||||||
|
2.21.0
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
From 0b9dc418d21a54b748637f4853dbe340c2dbc33e Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
|
||||||
|
Date: Tue, 16 Oct 2018 17:55:29 +0200
|
||||||
|
Subject: [PATCH] disable designer
|
||||||
|
|
||||||
|
---
|
||||||
|
src/linguist/linguist.pro | 9 ---------
|
||||||
|
src/src.pro | 7 -------
|
||||||
|
2 files changed, 16 deletions(-)
|
||||||
|
|
||||||
|
diff --git x/qttools/src/linguist/linguist.pro y/qttools/src/linguist/linguist.pro
|
||||||
|
index 3f54c396..61903c08 100644
|
||||||
|
--- x/qttools/src/linguist/linguist.pro
|
||||||
|
+++ y/qttools/src/linguist/linguist.pro
|
||||||
|
@@ -3,16 +3,7 @@ SUBDIRS = \
|
||||||
|
lrelease \
|
||||||
|
lupdate \
|
||||||
|
lconvert
|
||||||
|
-!no-png:qtHaveModule(widgets) {
|
||||||
|
- QT_FOR_CONFIG += widgets
|
||||||
|
- qtConfig(process):qtConfig(pushbutton):qtConfig(toolbutton) {
|
||||||
|
- SUBDIRS += linguist
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
|
||||||
|
-qtNomakeTools( \
|
||||||
|
- linguist \
|
||||||
|
-)
|
||||||
|
|
||||||
|
equals(QMAKE_HOST.os, Windows): CMAKE_BIN_SUFFIX = ".exe"
|
||||||
|
|
||||||
|
diff --git x/qttools/src/src.pro y/qttools/src/src.pro
|
||||||
|
index 7a1af007..a9d4ac4b 100644
|
||||||
|
--- x/qttools/src/src.pro
|
||||||
|
+++ y/qttools/src/src.pro
|
||||||
|
@@ -5,13 +5,6 @@ qtHaveModule(widgets) {
|
||||||
|
message("Some graphics-related tools are unavailable without PNG support")
|
||||||
|
} else {
|
||||||
|
QT_FOR_CONFIG += widgets
|
||||||
|
- qtConfig(pushbutton):qtConfig(toolbutton) {
|
||||||
|
- SUBDIRS = assistant \
|
||||||
|
- designer \
|
||||||
|
- pixeltool
|
||||||
|
-
|
||||||
|
- linguist.depends = designer
|
||||||
|
- }
|
||||||
|
qtHaveModule(quick):qtConfig(thread):qtConfig(toolbutton): SUBDIRS += distancefieldgenerator
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
|
@ -0,0 +1,98 @@
|
||||||
|
function Controller()
|
||||||
|
{
|
||||||
|
installer.setMessageBoxAutomaticAnswer("OverwriteTargetDirectory", QMessageBox.Yes);
|
||||||
|
installer.setMessageBoxAutomaticAnswer("TargetDirectoryInUse", QMessageBox.Ok);
|
||||||
|
installer.setMessageBoxAutomaticAnswer("cancelInstallation", QMessageBox.Yes);
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.WelcomePageCallback = function()
|
||||||
|
{
|
||||||
|
console.log("Welcome");
|
||||||
|
var widget = gui.currentPageWidget();
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
widget.completeChanged.connect(function()
|
||||||
|
{
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.CredentialsPageCallback = function()
|
||||||
|
{
|
||||||
|
console.log("Credentials");
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.IntroductionPageCallback = function()
|
||||||
|
{
|
||||||
|
console.log("Introduction");
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.TargetDirectoryPageCallback = function()
|
||||||
|
{
|
||||||
|
console.log("TargetDirectory: " + installer.value("TargetDir"));
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.ComponentSelectionPageCallback = function()
|
||||||
|
{
|
||||||
|
var packages = installer.value("Packages")
|
||||||
|
console.log("ComponentSelection: " + packages);
|
||||||
|
var widget = gui.currentPageWidget();
|
||||||
|
widget.deselectAll();
|
||||||
|
|
||||||
|
packages = packages.split(",");
|
||||||
|
var components = installer.components();
|
||||||
|
for (var i in packages)
|
||||||
|
{
|
||||||
|
pkg = packages[i];
|
||||||
|
for (var j in components)
|
||||||
|
{
|
||||||
|
if (components[j].name === pkg)
|
||||||
|
{
|
||||||
|
widget.selectComponent(pkg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.LicenseAgreementPageCallback = function()
|
||||||
|
{
|
||||||
|
console.log("LicenseAgreement");
|
||||||
|
var widget = gui.currentPageWidget();
|
||||||
|
widget.AcceptLicenseRadioButton.setChecked(true);
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.ReadyForInstallationPageCallback = function()
|
||||||
|
{
|
||||||
|
console.log("ReadyForInstallation");
|
||||||
|
gui.clickButton(buttons.CommitButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.PerformInstallationPageCallback = function()
|
||||||
|
{
|
||||||
|
console.log("PerformInstallation");
|
||||||
|
installer.installationFinished.connect(function()
|
||||||
|
{
|
||||||
|
gui.clickButton(buttons.NextButton);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.prototype.FinishedPageCallback = function()
|
||||||
|
{
|
||||||
|
console.log("Finished");
|
||||||
|
var widget = gui.currentPageWidget();
|
||||||
|
if (widget.LaunchQtCreatorCheckBoxForm)
|
||||||
|
{
|
||||||
|
widget.LaunchQtCreatorCheckBoxForm.launchQtCreatorCheckBox.setChecked(false);
|
||||||
|
}
|
||||||
|
else if (widget.RunItCheckBox)
|
||||||
|
{
|
||||||
|
widget.RunItCheckBox.setChecked(false);
|
||||||
|
}
|
||||||
|
gui.clickButton(buttons.FinishButton);
|
||||||
|
}
|
|
@ -0,0 +1,95 @@
|
||||||
|
CMAKE_MINIMUM_REQUIRED(VERSION 3.11.0)
|
||||||
|
|
||||||
|
###########################################
|
||||||
|
# Usage: cmake -DVERSION=5.10.0 -P qt.cmake
|
||||||
|
###########################################
|
||||||
|
|
||||||
|
IF(NOT PACKAGES_DIR)
|
||||||
|
SET(PACKAGES_DIR $ENV{PACKAGES_DIR})
|
||||||
|
IF(NOT PACKAGES_DIR)
|
||||||
|
SET(PACKAGES_DIR ${CMAKE_BINARY_DIR})
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
MESSAGE(STATUS "Use PACKAGES_DIR: ${PACKAGES_DIR}")
|
||||||
|
|
||||||
|
IF(NOT VERSION)
|
||||||
|
MESSAGE(FATAL_ERROR "Please provide Qt version (-DVERSION=5.10.0)")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
FUNCTION(READ_FILE _filename _regex _out)
|
||||||
|
FILE(STRINGS "${CMAKE_BINARY_DIR}/${_filename}" content REGEX "${_regex}")
|
||||||
|
STRING(REGEX MATCH "${_regex}" _unused "${content}")
|
||||||
|
SET(${_out} ${CMAKE_MATCH_1} PARENT_SCOPE)
|
||||||
|
ENDFUNCTION()
|
||||||
|
|
||||||
|
FUNCTION(FETCH_XML _url _out_url)
|
||||||
|
SET(_filename Updates.xml)
|
||||||
|
FILE(DOWNLOAD "${_url}/${_filename}" "${CMAKE_BINARY_DIR}/${_filename}")
|
||||||
|
|
||||||
|
READ_FILE("${_filename}" "<DownloadableArchives>(.+)</DownloadableArchives>" archive)
|
||||||
|
READ_FILE("${_filename}" "<Name>(.+)</Name>" name)
|
||||||
|
READ_FILE("${_filename}" "<Version>([-|\.|0-9]+)<\/Version>" version)
|
||||||
|
|
||||||
|
SET(${_out_url} "${_url}/${name}/${version}${archive}" PARENT_SCOPE)
|
||||||
|
ENDFUNCTION()
|
||||||
|
|
||||||
|
FUNCTION(FETCH_HASH _url _hash_algo _out_hash)
|
||||||
|
STRING(TOLOWER "${_hash_algo}" suffix)
|
||||||
|
|
||||||
|
GET_FILENAME_COMPONENT(filename "${_url}" NAME)
|
||||||
|
FILE(DOWNLOAD "${_url}.${suffix}" "${CMAKE_BINARY_DIR}/${filename}.${suffix}")
|
||||||
|
FILE(STRINGS ${CMAKE_BINARY_DIR}/${filename}.${suffix} content)
|
||||||
|
STRING(REGEX MATCH "^[a-z|0-9]+" hash "${content}")
|
||||||
|
|
||||||
|
IF(NOT hash)
|
||||||
|
MESSAGE(FATAL_ERROR "Cannot fetch hash: ${_url}.${suffix}")
|
||||||
|
ENDIF()
|
||||||
|
SET(${_out_hash} ${hash} PARENT_SCOPE)
|
||||||
|
ENDFUNCTION()
|
||||||
|
|
||||||
|
INCLUDE(FetchContent)
|
||||||
|
SET(FETCHCONTENT_QUIET FALSE)
|
||||||
|
SET(HASH_ALGO SHA256)
|
||||||
|
SET(QT_SDK_URL https://download.qt.io/online/qtsdkrepository)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
############################ OpenSSL
|
||||||
|
SET(OPENSSL_URL ${QT_SDK_URL}/linux_x64/desktop/tools_openssl_x64)
|
||||||
|
FETCH_XML("${OPENSSL_URL}" OPENSSL_URL)
|
||||||
|
FETCH_HASH("${OPENSSL_URL}" ${HASH_ALGO} OPENSSL_HASH)
|
||||||
|
|
||||||
|
FetchContent_Populate(openssl
|
||||||
|
URL ${OPENSSL_URL}
|
||||||
|
URL_HASH SHA256=${OPENSSL_HASH}
|
||||||
|
DOWNLOAD_DIR ${PACKAGES_DIR}
|
||||||
|
)
|
||||||
|
FetchContent_GetProperties(openssl)
|
||||||
|
|
||||||
|
FILE(COPY "${openssl_SOURCE_DIR}/OpenSSL/binary/" DESTINATION b/${VERSION}/gcc_64)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
############################ Qt
|
||||||
|
STRING(SUBSTRING ${VERSION} 0 4 SUBVERSION)
|
||||||
|
SET(QT_FILE qt-opensource-linux-x64-${VERSION}.run)
|
||||||
|
SET(QT_URL https://download.qt.io/archive/qt/${SUBVERSION}/${VERSION}/${QT_FILE})
|
||||||
|
|
||||||
|
FETCH_HASH("${QT_URL}" ${HASH_ALGO} QT_HASH)
|
||||||
|
|
||||||
|
FetchContent_Populate(qt
|
||||||
|
URL ${QT_URL}
|
||||||
|
URL_HASH SHA256=${QT_HASH}
|
||||||
|
DOWNLOAD_DIR ${PACKAGES_DIR}
|
||||||
|
DOWNLOAD_NO_EXTRACT TRUE
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
SET(ENV{XDG_DATA_HOME} ${CMAKE_BINARY_DIR})
|
||||||
|
SET(ENV{XDG_DATA_DIRS} ${CMAKE_BINARY_DIR})
|
||||||
|
SET(ENV{HOME} ${CMAKE_BINARY_DIR})
|
||||||
|
STRING(REPLACE "." "" PKGVERSION "${VERSION}")
|
||||||
|
GET_FILENAME_COMPONENT(source_dir "${CMAKE_SCRIPT_MODE_FILE}" DIRECTORY)
|
||||||
|
EXECUTE_PROCESS(COMMAND chmod +x ${PACKAGES_DIR}/${QT_FILE})
|
||||||
|
EXECUTE_PROCESS(COMMAND ${PACKAGES_DIR}/${QT_FILE} --script ${source_dir}/qt-install.qs -v --platform minimal TargetDir=b Packages=qt.qt5.${PKGVERSION}.gcc_64)
|
||||||
|
EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E create_symlink b/${VERSION}/gcc_64 dist)
|
|
@ -1,78 +0,0 @@
|
||||||
From f1b12b8713a739f27d74e6911580b2e70aea2fa4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pauli <paul.dale@oracle.com>
|
|
||||||
Date: Mon, 29 Oct 2018 06:50:51 +1000
|
|
||||||
Subject: [PATCH 1/3] DSA mod inverse fix
|
|
||||||
|
|
||||||
There is a side channel attack against the division used to calculate one of
|
|
||||||
the modulo inverses in the DSA algorithm. This change takes advantage of the
|
|
||||||
primality of the modulo and Fermat's little theorem to calculate the inverse
|
|
||||||
without leaking information.
|
|
||||||
|
|
||||||
Thanks to Samuel Weiser for finding and reporting this.
|
|
||||||
|
|
||||||
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
|
|
||||||
Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
|
|
||||||
(Merged from https://github.com/openssl/openssl/pull/7487)
|
|
||||||
|
|
||||||
(cherry picked from commit 415c33563528667868c3c653a612e6fc8736fd79)
|
|
||||||
---
|
|
||||||
crypto/dsa/dsa_ossl.c | 32 +++++++++++++++++++++++++++++++-
|
|
||||||
1 file changed, 31 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git x/crypto/dsa/dsa_ossl.c y/crypto/dsa/dsa_ossl.c
|
|
||||||
index ac1f65a51a..ca20811200 100644
|
|
||||||
--- x/crypto/dsa/dsa_ossl.c
|
|
||||||
+++ y/crypto/dsa/dsa_ossl.c
|
|
||||||
@@ -23,6 +23,8 @@ static int dsa_do_verify(const unsigned char *dgst, int dgst_len,
|
|
||||||
DSA_SIG *sig, DSA *dsa);
|
|
||||||
static int dsa_init(DSA *dsa);
|
|
||||||
static int dsa_finish(DSA *dsa);
|
|
||||||
+static BIGNUM *dsa_mod_inverse_fermat(const BIGNUM *k, const BIGNUM *q,
|
|
||||||
+ BN_CTX *ctx);
|
|
||||||
|
|
||||||
static DSA_METHOD openssl_dsa_meth = {
|
|
||||||
"OpenSSL DSA method",
|
|
||||||
@@ -259,7 +261,7 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in,
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
/* Compute part of 's = inv(k) (m + xr) mod q' */
|
|
||||||
- if ((kinv = BN_mod_inverse(NULL, k, dsa->q, ctx)) == NULL)
|
|
||||||
+ if ((kinv = dsa_mod_inverse_fermat(k, dsa->q, ctx)) == NULL)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
BN_clear_free(*kinvp);
|
|
||||||
@@ -393,3 +395,31 @@ static int dsa_finish(DSA *dsa)
|
|
||||||
BN_MONT_CTX_free(dsa->method_mont_p);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
+ * Compute the inverse of k modulo q.
|
|
||||||
+ * Since q is prime, Fermat's Little Theorem applies, which reduces this to
|
|
||||||
+ * mod-exp operation. Both the exponent and modulus are public information
|
|
||||||
+ * so a mod-exp that doesn't leak the base is sufficient. A newly allocated
|
|
||||||
+ * BIGNUM is returned which the caller must free.
|
|
||||||
+ */
|
|
||||||
+static BIGNUM *dsa_mod_inverse_fermat(const BIGNUM *k, const BIGNUM *q,
|
|
||||||
+ BN_CTX *ctx)
|
|
||||||
+{
|
|
||||||
+ BIGNUM *res = NULL;
|
|
||||||
+ BIGNUM *r, *e;
|
|
||||||
+
|
|
||||||
+ if ((r = BN_new()) == NULL)
|
|
||||||
+ return NULL;
|
|
||||||
+
|
|
||||||
+ BN_CTX_start(ctx);
|
|
||||||
+ if ((e = BN_CTX_get(ctx)) != NULL
|
|
||||||
+ && BN_set_word(r, 2)
|
|
||||||
+ && BN_sub(e, q, r)
|
|
||||||
+ && BN_mod_exp_mont(r, k, e, q, ctx, NULL))
|
|
||||||
+ res = r;
|
|
||||||
+ else
|
|
||||||
+ BN_free(r);
|
|
||||||
+ BN_CTX_end(ctx);
|
|
||||||
+ return res;
|
|
||||||
+}
|
|
||||||
--
|
|
||||||
2.19.1
|
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
From 2bcd8e6e1fe62ef5667c1bb8ad1bfe54a0aeaa99 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Matt Caswell <matt@openssl.org>
|
|
||||||
Date: Wed, 24 Oct 2018 10:11:00 +0100
|
|
||||||
Subject: [PATCH] Ignore disabled ciphers when deciding if we are using ECC
|
|
||||||
|
|
||||||
use_ecc() was always returning 1 because there are default (TLSv1.3)
|
|
||||||
ciphersuites that use ECC - even if those ciphersuites are disabled by
|
|
||||||
other options.
|
|
||||||
|
|
||||||
Fixes #7471
|
|
||||||
---
|
|
||||||
ssl/statem/extensions_clnt.c | 4 ++++
|
|
||||||
1 file changed, 4 insertions(+)
|
|
||||||
|
|
||||||
diff --git x/ssl/statem/extensions_clnt.c y/ssl/statem/extensions_clnt.c
|
|
||||||
index 4b5e6fe2b87..dcadc2a3231 100644
|
|
||||||
--- x/ssl/statem/extensions_clnt.c
|
|
||||||
+++ y/ssl/statem/extensions_clnt.c
|
|
||||||
@@ -128,6 +128,10 @@ static int use_ecc(SSL *s)
|
|
||||||
for (i = 0; i < end; i++) {
|
|
||||||
const SSL_CIPHER *c = sk_SSL_CIPHER_value(cipher_stack, i);
|
|
||||||
|
|
||||||
+ /* Skip disabled ciphers */
|
|
||||||
+ if (ssl_cipher_disabled(s, c, SSL_SECOP_CIPHER_SUPPORTED, 0))
|
|
||||||
+ continue;
|
|
||||||
+
|
|
||||||
alg_k = c->algorithm_mkey;
|
|
||||||
alg_a = c->algorithm_auth;
|
|
||||||
if ((alg_k & (SSL_kECDHE | SSL_kECDHEPSK))
|
|
||||||
|
|
|
@ -1,109 +0,0 @@
|
||||||
From 8abfe72e8c1de1b95f50aa0d9134803b4d00070f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pauli <paul.dale@oracle.com>
|
|
||||||
Date: Wed, 24 Oct 2018 07:42:46 +1000
|
|
||||||
Subject: [PATCH 2/3] Timing vulnerability in DSA signature generation
|
|
||||||
(CVE-2018-0734).
|
|
||||||
|
|
||||||
Avoid a timing attack that leaks information via a side channel that
|
|
||||||
triggers when a BN is resized. Increasing the size of the BNs
|
|
||||||
prior to doing anything with them suppresses the attack.
|
|
||||||
|
|
||||||
Thanks due to Samuel Weiser for finding and locating this.
|
|
||||||
|
|
||||||
Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
|
|
||||||
(Merged from https://github.com/openssl/openssl/pull/7486)
|
|
||||||
|
|
||||||
(cherry picked from commit a9cfb8c2aa7254a4aa6a1716909e3f8cb78049b6)
|
|
||||||
---
|
|
||||||
crypto/dsa/dsa_ossl.c | 28 +++++++++++++++-------------
|
|
||||||
1 file changed, 15 insertions(+), 13 deletions(-)
|
|
||||||
|
|
||||||
diff --git x/crypto/dsa/dsa_ossl.c y/crypto/dsa/dsa_ossl.c
|
|
||||||
index ca20811200..2dd2d7489a 100644
|
|
||||||
--- x/crypto/dsa/dsa_ossl.c
|
|
||||||
+++ y/crypto/dsa/dsa_ossl.c
|
|
||||||
@@ -9,6 +9,7 @@
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "internal/cryptlib.h"
|
|
||||||
+#include "internal/bn_int.h"
|
|
||||||
#include <openssl/bn.h>
|
|
||||||
#include <openssl/sha.h>
|
|
||||||
#include "dsa_locl.h"
|
|
||||||
@@ -180,9 +181,9 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in,
|
|
||||||
{
|
|
||||||
BN_CTX *ctx = NULL;
|
|
||||||
BIGNUM *k, *kinv = NULL, *r = *rp;
|
|
||||||
- BIGNUM *l, *m;
|
|
||||||
+ BIGNUM *l;
|
|
||||||
int ret = 0;
|
|
||||||
- int q_bits;
|
|
||||||
+ int q_bits, q_words;
|
|
||||||
|
|
||||||
if (!dsa->p || !dsa->q || !dsa->g) {
|
|
||||||
DSAerr(DSA_F_DSA_SIGN_SETUP, DSA_R_MISSING_PARAMETERS);
|
|
||||||
@@ -191,8 +192,7 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in,
|
|
||||||
|
|
||||||
k = BN_new();
|
|
||||||
l = BN_new();
|
|
||||||
- m = BN_new();
|
|
||||||
- if (k == NULL || l == NULL || m == NULL)
|
|
||||||
+ if (k == NULL || l == NULL)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
if (ctx_in == NULL) {
|
|
||||||
@@ -203,9 +203,9 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in,
|
|
||||||
|
|
||||||
/* Preallocate space */
|
|
||||||
q_bits = BN_num_bits(dsa->q);
|
|
||||||
- if (!BN_set_bit(k, q_bits)
|
|
||||||
- || !BN_set_bit(l, q_bits)
|
|
||||||
- || !BN_set_bit(m, q_bits))
|
|
||||||
+ q_words = bn_get_top(dsa->q);
|
|
||||||
+ if (!bn_wexpand(k, q_words + 2)
|
|
||||||
+ || !bn_wexpand(l, q_words + 2))
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
/* Get random k */
|
|
||||||
@@ -240,14 +240,17 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in,
|
|
||||||
* small timing information leakage. We then choose the sum that is
|
|
||||||
* one bit longer than the modulus.
|
|
||||||
*
|
|
||||||
- * TODO: revisit the BN_copy aiming for a memory access agnostic
|
|
||||||
- * conditional copy.
|
|
||||||
+ * There are some concerns about the efficacy of doing this. More
|
|
||||||
+ * specificly refer to the discussion starting with:
|
|
||||||
+ * https://github.com/openssl/openssl/pull/7486#discussion_r228323705
|
|
||||||
+ * The fix is to rework BN so these gymnastics aren't required.
|
|
||||||
*/
|
|
||||||
if (!BN_add(l, k, dsa->q)
|
|
||||||
- || !BN_add(m, l, dsa->q)
|
|
||||||
- || !BN_copy(k, BN_num_bits(l) > q_bits ? l : m))
|
|
||||||
+ || !BN_add(k, l, dsa->q))
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
+ BN_consttime_swap(BN_is_bit_set(l, q_bits), k, l, q_words + 2);
|
|
||||||
+
|
|
||||||
if ((dsa)->meth->bn_mod_exp != NULL) {
|
|
||||||
if (!dsa->meth->bn_mod_exp(dsa, r, dsa->g, k, dsa->p, ctx,
|
|
||||||
dsa->method_mont_p))
|
|
||||||
@@ -260,7 +263,7 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in,
|
|
||||||
if (!BN_mod(r, r, dsa->q, ctx))
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
- /* Compute part of 's = inv(k) (m + xr) mod q' */
|
|
||||||
+ /* Compute part of 's = inv(k) (m + xr) mod q' */
|
|
||||||
if ((kinv = dsa_mod_inverse_fermat(k, dsa->q, ctx)) == NULL)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
@@ -275,7 +278,6 @@ static int dsa_sign_setup(DSA *dsa, BN_CTX *ctx_in,
|
|
||||||
BN_CTX_free(ctx);
|
|
||||||
BN_clear_free(k);
|
|
||||||
BN_clear_free(l);
|
|
||||||
- BN_clear_free(m);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.19.1
|
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
From b1d6d55ece1c26fa2829e2b819b038d7b6d692b4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pauli <paul.dale@oracle.com>
|
|
||||||
Date: Fri, 26 Oct 2018 10:54:58 +1000
|
|
||||||
Subject: [PATCH 3/3] Timing vulnerability in ECDSA signature generation
|
|
||||||
(CVE-2018-0735)
|
|
||||||
|
|
||||||
Preallocate an extra limb for some of the big numbers to avoid a reallocation
|
|
||||||
that can potentially provide a side channel.
|
|
||||||
|
|
||||||
Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
|
|
||||||
(Merged from https://github.com/openssl/openssl/pull/7486)
|
|
||||||
|
|
||||||
(cherry picked from commit 99540ec79491f59ed8b46b4edf130e17dc907f52)
|
|
||||||
---
|
|
||||||
crypto/ec/ec_mult.c | 6 +++---
|
|
||||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git x/crypto/ec/ec_mult.c y/crypto/ec/ec_mult.c
|
|
||||||
index 7e1b3650e7..0e0a5e1394 100644
|
|
||||||
--- x/crypto/ec/ec_mult.c
|
|
||||||
+++ y/crypto/ec/ec_mult.c
|
|
||||||
@@ -206,8 +206,8 @@ int ec_scalar_mul_ladder(const EC_GROUP *group, EC_POINT *r,
|
|
||||||
*/
|
|
||||||
cardinality_bits = BN_num_bits(cardinality);
|
|
||||||
group_top = bn_get_top(cardinality);
|
|
||||||
- if ((bn_wexpand(k, group_top + 1) == NULL)
|
|
||||||
- || (bn_wexpand(lambda, group_top + 1) == NULL)) {
|
|
||||||
+ if ((bn_wexpand(k, group_top + 2) == NULL)
|
|
||||||
+ || (bn_wexpand(lambda, group_top + 2) == NULL)) {
|
|
||||||
ECerr(EC_F_EC_SCALAR_MUL_LADDER, ERR_R_BN_LIB);
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
@@ -244,7 +244,7 @@ int ec_scalar_mul_ladder(const EC_GROUP *group, EC_POINT *r,
|
|
||||||
* k := scalar + 2*cardinality
|
|
||||||
*/
|
|
||||||
kbit = BN_is_bit_set(lambda, cardinality_bits);
|
|
||||||
- BN_consttime_swap(kbit, k, lambda, group_top + 1);
|
|
||||||
+ BN_consttime_swap(kbit, k, lambda, group_top + 2);
|
|
||||||
|
|
||||||
group_top = bn_get_top(group->field);
|
|
||||||
if ((bn_wexpand(s->X, group_top) == NULL)
|
|
||||||
--
|
|
||||||
2.19.1
|
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
--- x/Configurations/15-android.conf
|
|
||||||
+++ y/Configurations/15-android.conf
|
|
||||||
@@ -136,6 +136,8 @@
|
|
||||||
bn_ops => sub { android_ndk()->{bn_ops} },
|
|
||||||
bin_cflags => "-pie",
|
|
||||||
enable => [ ],
|
|
||||||
+ shlib_variant => '-gov',
|
|
||||||
+ shared_extension => '.so',
|
|
||||||
},
|
|
||||||
"android-arm" => {
|
|
||||||
################################################################
|
|
|
@ -1,25 +0,0 @@
|
||||||
From 1d9b03157657e398a99f3f183bb7399b8905eb55 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
|
|
||||||
Date: Wed, 22 Nov 2017 07:35:56 +0100
|
|
||||||
Subject: Add IsoDep to the techList on Android
|
|
||||||
|
|
||||||
Change-Id: I26c183c1344cd0d9323fcedde82347487eebdffb
|
|
||||||
---
|
|
||||||
src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
diff --git x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
|
|
||||||
index 345b87d3..a1ae5c37 100644
|
|
||||||
--- x/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
|
|
||||||
+++ y/qtconnectivity/src/android/nfc/src/org/qtproject/qt5/android/nfc/QtNfc.java
|
|
||||||
@@ -127,6 +127,7 @@ public class QtNfc
|
|
||||||
filters[2] = new IntentFilter();
|
|
||||||
filters[2].addAction(NfcAdapter.ACTION_TECH_DISCOVERED);
|
|
||||||
String[][] techList = new String[][]{
|
|
||||||
+ {"android.nfc.tech.IsoDep"},
|
|
||||||
{"android.nfc.tech.Ndef"},
|
|
||||||
{"android.nfc.tech.NdefFormatable"}
|
|
||||||
};
|
|
||||||
--
|
|
||||||
2.18.0
|
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
From ca8779363fd30a1b8fd80ce4ebacc4741b041c76 Mon Sep 17 00:00:00 2001
|
|
||||||
From: BogDan Vatra <bogdan@kdab.com>
|
|
||||||
Date: Tue, 20 Mar 2018 10:36:43 +0200
|
|
||||||
Subject: [PATCH] Android: Fix crash
|
|
||||||
|
|
||||||
Android doesn't like nor use RTLD_NODELETE
|
|
||||||
|
|
||||||
Tasnk-number: QTBUG-64654
|
|
||||||
Change-Id: I2d884bbf22a681cca592942eba84ba97327ba974
|
|
||||||
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
|
||||||
---
|
|
||||||
src/corelib/plugin/qlibrary_unix.cpp | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git x/qtbase/src/corelib/plugin/qlibrary_unix.cpp y/qtbase/src/corelib/plugin/qlibrary_unix.cpp
|
|
||||||
index 23b9ad6434..296af9da7a 100644
|
|
||||||
--- x/qtbase/src/corelib/plugin/qlibrary_unix.cpp
|
|
||||||
+++ y/qtbase/src/corelib/plugin/qlibrary_unix.cpp
|
|
||||||
@@ -155,7 +155,7 @@ bool QLibraryPrivate::load_sys()
|
|
||||||
// Do not unload the library during dlclose(). Consequently, the
|
|
||||||
// library's specific static variables are not reinitialized if the
|
|
||||||
// library is reloaded with dlopen() at a later time.
|
|
||||||
-#ifdef RTLD_NODELETE
|
|
||||||
+#if defined(RTLD_NODELETE) && !defined(Q_OS_ANDROID)
|
|
||||||
if (loadHints & QLibrary::PreventUnloadHint) {
|
|
||||||
dlFlags |= RTLD_NODELETE;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.19.1
|
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
From 48789f354ffe99aa28c08f55240e0b0a4deaa377 Mon Sep 17 00:00:00 2001
|
|
||||||
From: BogDan Vatra <bogdan@kdab.com>
|
|
||||||
Date: Mon, 1 Oct 2018 15:46:46 +0300
|
|
||||||
Subject: [PATCH] Android: fix compile with NDK r18+
|
|
||||||
|
|
||||||
In NDK r18, libc++.so was renamed to libc++.so.XX where XX is the Android
|
|
||||||
API level.
|
|
||||||
|
|
||||||
[ChangeLog][Android] Fixed build issue with NDK r18+.
|
|
||||||
|
|
||||||
Task-number: QTBUG-70631
|
|
||||||
Task-number: QTBUG-70779
|
|
||||||
Change-Id: Id0d2955648197e3054e3c69263b5a90d57964f6c
|
|
||||||
---
|
|
||||||
mkspecs/android-clang/qmake.conf | 6 +++++-
|
|
||||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git x/qtbase/mkspecs/android-clang/qmake.conf y/qtbase/mkspecs/android-clang/qmake.conf
|
|
||||||
index b665000d00..1f5e690329 100644
|
|
||||||
--- x/qtbase/mkspecs/android-clang/qmake.conf
|
|
||||||
+++ y/qtbase/mkspecs/android-clang/qmake.conf
|
|
||||||
@@ -40,7 +40,11 @@ QMAKE_CFLAGS += -DANDROID_HAS_WSTRING --sysroot=$$NDK_ROOT/sysroot \
|
|
||||||
ANDROID_SOURCES_CXX_STL_LIBDIR = $$NDK_ROOT/sources/cxx-stl/llvm-libc++/libs/$$ANDROID_TARGET_ARCH
|
|
||||||
|
|
||||||
ANDROID_STDCPP_PATH = $$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++_shared.so
|
|
||||||
-ANDROID_CXX_STL_LIBS = -lc++
|
|
||||||
+
|
|
||||||
+exists($$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++.so): \
|
|
||||||
+ ANDROID_CXX_STL_LIBS = -lc++
|
|
||||||
+else: \
|
|
||||||
+ ANDROID_CXX_STL_LIBS = $$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++.so.$$replace(ANDROID_PLATFORM, "android-", "")
|
|
||||||
|
|
||||||
QMAKE_CFLAGS_OPTIMIZE_SIZE = -Oz
|
|
||||||
|
|
||||||
--
|
|
||||||
2.19.0
|
|
||||||
|
|
|
@ -1,262 +0,0 @@
|
||||||
From 9f00179a95ef729fa7871b4d408c76bc50e4eb4e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
|
|
||||||
Date: Wed, 20 Jun 2018 11:56:19 +0200
|
|
||||||
Subject: Introduce reportError to fix "QMetaObject::invokeMethod: No such method"
|
|
||||||
|
|
||||||
Task-number: QTBUG-67958
|
|
||||||
Change-Id: Ia5a21cb19f0318844ac436adcc3f0fff9a3185b5
|
|
||||||
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
|
||||||
---
|
|
||||||
src/nfc/qnearfieldtagtype1.cpp | 8 ++----
|
|
||||||
src/nfc/qnearfieldtarget.cpp | 13 ++++++++++
|
|
||||||
src/nfc/qnearfieldtarget.h | 2 ++
|
|
||||||
src/nfc/qnearfieldtarget_android.cpp | 36 +++++++--------------------
|
|
||||||
src/nfc/qnearfieldtarget_emulator.cpp | 20 ++++-----------
|
|
||||||
src/nfc/qnearfieldtarget_neard_p.h | 8 ++----
|
|
||||||
6 files changed, 33 insertions(+), 54 deletions(-)
|
|
||||||
|
|
||||||
diff --git x/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp y/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp
|
|
||||||
index 34f2c8b8..7f27fbe9 100644
|
|
||||||
--- x/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp
|
|
||||||
+++ y/qtconnectivity/src/nfc/qnearfieldtagtype1.cpp
|
|
||||||
@@ -440,9 +440,7 @@ QNearFieldTarget::RequestId QNearFieldTagType1::readNdefMessages()
|
|
||||||
if (d->m_readNdefMessageState == QNearFieldTagType1Private::NotReadingNdefMessage) {
|
|
||||||
d->progressToNextNdefReadMessageState();
|
|
||||||
} else {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, NdefReadError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId, d->m_readNdefRequestId));
|
|
||||||
+ reportError(QNearFieldTarget::NdefReadError, d->m_readNdefRequestId);
|
|
||||||
}
|
|
||||||
|
|
||||||
return d->m_readNdefRequestId;
|
|
||||||
@@ -462,9 +460,7 @@ QNearFieldTarget::RequestId QNearFieldTagType1::writeNdefMessages(const QList<QN
|
|
||||||
d->m_ndefWriteMessages = messages;
|
|
||||||
d->progressToNextNdefWriteMessageState();
|
|
||||||
} else {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, NdefWriteError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId, d->m_readNdefRequestId));
|
|
||||||
+ reportError(QNearFieldTarget::NdefWriteError, d->m_readNdefRequestId);
|
|
||||||
}
|
|
||||||
|
|
||||||
return d->m_writeNdefRequestId;
|
|
||||||
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.cpp y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
|
|
||||||
index e642824b..e9a6fa11 100644
|
|
||||||
--- x/qtconnectivity/src/nfc/qnearfieldtarget.cpp
|
|
||||||
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.cpp
|
|
||||||
@@ -530,4 +530,17 @@ bool QNearFieldTarget::handleResponse(const QNearFieldTarget::RequestId &id,
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*!
|
|
||||||
+ \since 5.12
|
|
||||||
+
|
|
||||||
+ Reports the \a error for the request \a id by appending the signal emission to the event queue.
|
|
||||||
+*/
|
|
||||||
+void QNearFieldTarget::reportError(QNearFieldTarget::Error error,
|
|
||||||
+ const QNearFieldTarget::RequestId &id)
|
|
||||||
+{
|
|
||||||
+ QMetaObject::invokeMethod(this, [this, error, id]() {
|
|
||||||
+ Q_EMIT this->error(error, id);
|
|
||||||
+ }, Qt::QueuedConnection);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
QT_END_NAMESPACE
|
|
||||||
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget.h y/qtconnectivity/src/nfc/qnearfieldtarget.h
|
|
||||||
index e51960f7..868b52d5 100644
|
|
||||||
--- x/qtconnectivity/src/nfc/qnearfieldtarget.h
|
|
||||||
+++ y/qtconnectivity/src/nfc/qnearfieldtarget.h
|
|
||||||
@@ -153,6 +153,8 @@ protected:
|
|
||||||
Q_INVOKABLE virtual bool handleResponse(const QNearFieldTarget::RequestId &id,
|
|
||||||
const QByteArray &response);
|
|
||||||
|
|
||||||
+ void reportError(QNearFieldTarget::Error error, const QNearFieldTarget::RequestId &id);
|
|
||||||
+
|
|
||||||
Q_SIGNALS:
|
|
||||||
void disconnected();
|
|
||||||
|
|
||||||
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
|
|
||||||
index e656996e..78da6ac2 100644
|
|
||||||
--- x/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
|
|
||||||
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_android.cpp
|
|
||||||
@@ -147,25 +147,19 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
|
|
||||||
// Making sure that target is still in range
|
|
||||||
QNearFieldTarget::RequestId requestId(new QNearFieldTarget::RequestIdPrivate);
|
|
||||||
if (!m_intent.isValid()) {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
||||||
+ reportError(QNearFieldTarget::TargetOutOfRangeError, requestId);
|
|
||||||
return requestId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Getting Ndef technology object
|
|
||||||
if (!setTagTechnology({NDEFTECHNOLOGY})) {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnsupportedError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
||||||
+ reportError(QNearFieldTarget::UnsupportedError, requestId);
|
|
||||||
return requestId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Connect
|
|
||||||
if (!connect()) {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
||||||
+ reportError(QNearFieldTarget::TargetOutOfRangeError, requestId);
|
|
||||||
return requestId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -174,9 +168,7 @@ QNearFieldTarget::RequestId NearFieldTarget::readNdefMessages()
|
|
||||||
if (catchJavaExceptions())
|
|
||||||
ndefMessage = QAndroidJniObject();
|
|
||||||
if (!ndefMessage.isValid()) {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::NdefReadError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
||||||
+ reportError(QNearFieldTarget::NdefReadError, requestId);
|
|
||||||
return requestId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -249,9 +241,7 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
|
|
||||||
// Connecting
|
|
||||||
QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate());
|
|
||||||
if (!connect()) {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
||||||
+ reportError(QNearFieldTarget::TargetOutOfRangeError, requestId);
|
|
||||||
return requestId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -263,9 +253,7 @@ QNearFieldTarget::RequestId NearFieldTarget::sendCommand(const QByteArray &comma
|
|
||||||
// Writing
|
|
||||||
QAndroidJniObject myNewVal = m_tagTech.callObjectMethod("transceive", "([B)[B", jba);
|
|
||||||
if (catchJavaExceptions()) {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::CommandError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
||||||
+ reportError(QNearFieldTarget::CommandError, requestId);
|
|
||||||
return requestId;
|
|
||||||
}
|
|
||||||
QByteArray result = jbyteArrayToQByteArray(myNewVal.object<jbyteArray>());
|
|
||||||
@@ -315,9 +303,7 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList<QNdef
|
|
||||||
// Connecting
|
|
||||||
QNearFieldTarget::RequestId requestId = QNearFieldTarget::RequestId(new QNearFieldTarget::RequestIdPrivate());
|
|
||||||
if (!connect()) {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::TargetOutOfRangeError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
||||||
+ reportError(QNearFieldTarget::TargetOutOfRangeError, requestId);
|
|
||||||
return requestId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -328,18 +314,14 @@ QNearFieldTarget::RequestId NearFieldTarget::writeNdefMessages(const QList<QNdef
|
|
||||||
env->SetByteArrayRegion(jba.object<jbyteArray>(), 0, ba.size(), reinterpret_cast<jbyte*>(ba.data()));
|
|
||||||
QAndroidJniObject jmessage = QAndroidJniObject("android/nfc/NdefMessage", "([B)V", jba.object<jbyteArray>());
|
|
||||||
if (catchJavaExceptions()) {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnknownError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
||||||
+ reportError(QNearFieldTarget::UnknownError, requestId);
|
|
||||||
return requestId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Writing
|
|
||||||
m_tagTech.callMethod<void>(writeMethod, "(Landroid/nfc/NdefMessage;)V", jmessage.object<jobject>());
|
|
||||||
if (catchJavaExceptions()) {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::NdefWriteError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId&, requestId));
|
|
||||||
+ reportError(QNearFieldTarget::NdefWriteError, requestId);
|
|
||||||
return requestId;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp y/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp
|
|
||||||
index 29b1f74d..030718cc 100644
|
|
||||||
--- x/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp
|
|
||||||
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_emulator.cpp
|
|
||||||
@@ -82,9 +82,7 @@ QNearFieldTarget::RequestId TagType1::sendCommand(const QByteArray &command)
|
|
||||||
|
|
||||||
// tag not in proximity
|
|
||||||
if (!tagMap.value(m_tag)) {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, TargetOutOfRangeError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId, id));
|
|
||||||
+ reportError(QNearFieldTarget::TargetOutOfRangeError, id);
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -93,17 +91,13 @@ QNearFieldTarget::RequestId TagType1::sendCommand(const QByteArray &command)
|
|
||||||
QByteArray response = m_tag->processCommand(command + char(crc & 0xff) + char(crc >> 8));
|
|
||||||
|
|
||||||
if (response.isEmpty()) {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, NoResponseError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId, id));
|
|
||||||
+ reportError(QNearFieldTarget::NoResponseError, id);
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
// check crc
|
|
||||||
if (qChecksum(response.constData(), response.length(), Qt::ChecksumItuV41) != 0) {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, ChecksumMismatchError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId, id));
|
|
||||||
+ reportError(QNearFieldTarget::ChecksumMismatchError, id);
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -152,9 +146,7 @@ QNearFieldTarget::RequestId TagType2::sendCommand(const QByteArray &command)
|
|
||||||
|
|
||||||
// tag not in proximity
|
|
||||||
if (!tagMap.value(m_tag)) {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, TargetOutOfRangeError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId, id));
|
|
||||||
+ reportError(QNearFieldTarget::TargetOutOfRangeError, id);
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -168,9 +160,7 @@ QNearFieldTarget::RequestId TagType2::sendCommand(const QByteArray &command)
|
|
||||||
if (response.length() > 1) {
|
|
||||||
// check crc
|
|
||||||
if (qChecksum(response.constData(), response.length(), Qt::ChecksumItuV41) != 0) {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, ChecksumMismatchError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId, id));
|
|
||||||
+ reportError(QNearFieldTarget::ChecksumMismatchError, id);
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h
|
|
||||||
index 053df141..625cee67 100644
|
|
||||||
--- x/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h
|
|
||||||
+++ y/qtconnectivity/src/nfc/qnearfieldtarget_neard_p.h
|
|
||||||
@@ -359,9 +359,7 @@ private:
|
|
||||||
Q_EMIT this->requestCompleted(this->m_currentReadRequestId);
|
|
||||||
}, Qt::QueuedConnection);
|
|
||||||
} else {
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnknownError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId, m_currentReadRequestId));
|
|
||||||
+ this->reportError(QNearFieldTarget::UnknownError, m_currentReadRequestId);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_readRequested = false;
|
|
||||||
@@ -389,9 +387,7 @@ private:
|
|
||||||
reply.waitForFinished();
|
|
||||||
if (reply.isError()) {
|
|
||||||
qCWarning(QT_NFC_NEARD) << "Error writing to NFC tag" << reply.error();
|
|
||||||
- QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
|
|
||||||
- Q_ARG(QNearFieldTarget::Error, QNearFieldTarget::UnknownError),
|
|
||||||
- Q_ARG(QNearFieldTarget::RequestId, m_currentWriteRequestId));
|
|
||||||
+ this->reportError(QNearFieldTarget::UnknownError, m_currentWriteRequestId);
|
|
||||||
}
|
|
||||||
|
|
||||||
QMetaObject::invokeMethod(this, "ndefMessagesWritten", Qt::QueuedConnection);
|
|
||||||
--
|
|
||||||
2.19.1
|
|
||||||
|
|
|
@ -1,185 +0,0 @@
|
||||||
From 78ab3263caae535a3bd31fa35c733ae2a28ca8ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kari Oikarinen <kari.oikarinen@qt.io>
|
|
||||||
Date: Wed, 26 Sep 2018 10:29:14 +0300
|
|
||||||
Subject: [PATCH] QObject: Fix isSignalConnected() when signals have been
|
|
||||||
disconnected
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
The bitmap cache for the first 64 signals being connected was only set when the
|
|
||||||
connection is added. It was never unset when the connection was removed.
|
|
||||||
|
|
||||||
Internal use of the connectedSignals bitmap is not hurt by it occasionally
|
|
||||||
saying a signal is connected even though it is not, since the purpose of those
|
|
||||||
checks is avoiding expensive operations that are not necessary if nothing is
|
|
||||||
connected to the signal.
|
|
||||||
|
|
||||||
However, the public API using this cache meant that it also never spotted
|
|
||||||
signals being disconnected. This was not documented. Fix the behavior by only
|
|
||||||
using the cache if it is up to date. If it is not, use a slower path that gives
|
|
||||||
the correct answer.
|
|
||||||
|
|
||||||
To avoid making disconnections and QObject destructions slower, the cache is
|
|
||||||
only updated to unset disconnected signals when new signal connections are
|
|
||||||
added. No extra work is done in the common case where signals are only
|
|
||||||
removed in the end of the QObject's lifetime.
|
|
||||||
|
|
||||||
Fixes: QTBUG-32340
|
|
||||||
Change-Id: Ieb6e498060157153cec60d9c8f1c33056993fda1
|
|
||||||
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
|
|
||||||
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
|
|
||||||
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
|
|
||||||
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@qt.io>
|
|
||||||
---
|
|
||||||
src/corelib/kernel/qobject.cpp | 34 ++++++++----
|
|
||||||
.../corelib/kernel/qobject/tst_qobject.cpp | 53 +++++++++++++++++++
|
|
||||||
2 files changed, 76 insertions(+), 11 deletions(-)
|
|
||||||
|
|
||||||
diff --git x/qtbase/src/corelib/kernel/qobject.cpp y/qtbase/src/corelib/kernel/qobject.cpp
|
|
||||||
index c6fe787e03..4532eacf0c 100644
|
|
||||||
--- x/qtbase/src/corelib/kernel/qobject.cpp
|
|
||||||
+++ y/qtbase/src/corelib/kernel/qobject.cpp
|
|
||||||
@@ -418,6 +418,7 @@ void QObjectPrivate::cleanConnectionLists()
|
|
||||||
{
|
|
||||||
if (connectionLists->dirty && !connectionLists->inUse) {
|
|
||||||
// remove broken connections
|
|
||||||
+ bool allConnected = false;
|
|
||||||
for (int signal = -1; signal < connectionLists->count(); ++signal) {
|
|
||||||
QObjectPrivate::ConnectionList &connectionList =
|
|
||||||
(*connectionLists)[signal];
|
|
||||||
@@ -429,11 +430,13 @@ void QObjectPrivate::cleanConnectionLists()
|
|
||||||
|
|
||||||
QObjectPrivate::Connection **prev = &connectionList.first;
|
|
||||||
QObjectPrivate::Connection *c = *prev;
|
|
||||||
+ bool connected = false; // whether the signal is still connected somewhere
|
|
||||||
while (c) {
|
|
||||||
if (c->receiver) {
|
|
||||||
last = c;
|
|
||||||
prev = &c->nextConnectionList;
|
|
||||||
c = *prev;
|
|
||||||
+ connected = true;
|
|
||||||
} else {
|
|
||||||
QObjectPrivate::Connection *next = c->nextConnectionList;
|
|
||||||
*prev = next;
|
|
||||||
@@ -445,6 +448,14 @@ void QObjectPrivate::cleanConnectionLists()
|
|
||||||
// Correct the connection list's last pointer.
|
|
||||||
// As conectionList.last could equal last, this could be a noop
|
|
||||||
connectionList.last = last;
|
|
||||||
+
|
|
||||||
+ if (!allConnected && !connected && signal >= 0
|
|
||||||
+ && size_t(signal) < sizeof(connectedSignals) * 8) {
|
|
||||||
+ // This signal is no longer connected
|
|
||||||
+ connectedSignals[signal >> 5] &= ~(1 << (signal & 0x1f));
|
|
||||||
+ } else if (signal == -1) {
|
|
||||||
+ allConnected = connected;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
connectionLists->dirty = false;
|
|
||||||
}
|
|
||||||
@@ -2503,19 +2514,20 @@ bool QObject::isSignalConnected(const QMetaMethod &signal) const
|
|
||||||
|
|
||||||
signalIndex += QMetaObjectPrivate::signalOffset(signal.mobj);
|
|
||||||
|
|
||||||
- if (signalIndex < sizeof(d->connectedSignals) * 8)
|
|
||||||
+ QMutexLocker locker(signalSlotLock(this));
|
|
||||||
+ if (!d->connectionLists)
|
|
||||||
+ return false;
|
|
||||||
+
|
|
||||||
+ if (signalIndex < sizeof(d->connectedSignals) * 8 && !d->connectionLists->dirty)
|
|
||||||
return d->isSignalConnected(signalIndex);
|
|
||||||
|
|
||||||
- QMutexLocker locker(signalSlotLock(this));
|
|
||||||
- if (d->connectionLists) {
|
|
||||||
- if (signalIndex < uint(d->connectionLists->count())) {
|
|
||||||
- const QObjectPrivate::Connection *c =
|
|
||||||
- d->connectionLists->at(signalIndex).first;
|
|
||||||
- while (c) {
|
|
||||||
- if (c->receiver)
|
|
||||||
- return true;
|
|
||||||
- c = c->nextConnectionList;
|
|
||||||
- }
|
|
||||||
+ if (signalIndex < uint(d->connectionLists->count())) {
|
|
||||||
+ const QObjectPrivate::Connection *c =
|
|
||||||
+ d->connectionLists->at(signalIndex).first;
|
|
||||||
+ while (c) {
|
|
||||||
+ if (c->receiver)
|
|
||||||
+ return true;
|
|
||||||
+ c = c->nextConnectionList;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
diff --git x/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp y/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
|
|
||||||
index ec57522f48..20ce905265 100644
|
|
||||||
--- x/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
|
|
||||||
+++ y/qtbase/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
|
|
||||||
@@ -104,6 +104,7 @@ private slots:
|
|
||||||
void deleteQObjectWhenDeletingEvent();
|
|
||||||
void overloads();
|
|
||||||
void isSignalConnected();
|
|
||||||
+ void isSignalConnectedAfterDisconnection();
|
|
||||||
void qMetaObjectConnect();
|
|
||||||
void qMetaObjectDisconnectOne();
|
|
||||||
void sameName();
|
|
||||||
@@ -3843,6 +3844,58 @@ void tst_QObject::isSignalConnected()
|
|
||||||
QVERIFY(!o.isSignalConnected(QMetaMethod()));
|
|
||||||
}
|
|
||||||
|
|
||||||
+void tst_QObject::isSignalConnectedAfterDisconnection()
|
|
||||||
+{
|
|
||||||
+ ManySignals o;
|
|
||||||
+ const QMetaObject *meta = o.metaObject();
|
|
||||||
+
|
|
||||||
+ const QMetaMethod sig00 = meta->method(meta->indexOfSignal("sig00()"));
|
|
||||||
+ QVERIFY(!o.isSignalConnected(sig00));
|
|
||||||
+ QObject::connect(&o, &ManySignals::sig00, qt_noop);
|
|
||||||
+ QVERIFY(o.isSignalConnected(sig00));
|
|
||||||
+ QVERIFY(QObject::disconnect(&o, &ManySignals::sig00, 0, 0));
|
|
||||||
+ QVERIFY(!o.isSignalConnected(sig00));
|
|
||||||
+
|
|
||||||
+ const QMetaMethod sig69 = meta->method(meta->indexOfSignal("sig69()"));
|
|
||||||
+ QVERIFY(!o.isSignalConnected(sig69));
|
|
||||||
+ QObject::connect(&o, &ManySignals::sig69, qt_noop);
|
|
||||||
+ QVERIFY(o.isSignalConnected(sig69));
|
|
||||||
+ QVERIFY(QObject::disconnect(&o, &ManySignals::sig69, 0, 0));
|
|
||||||
+ QVERIFY(!o.isSignalConnected(sig69));
|
|
||||||
+
|
|
||||||
+ {
|
|
||||||
+ ManySignals o2;
|
|
||||||
+ QObject::connect(&o, &ManySignals::sig00, &o2, &ManySignals::sig00);
|
|
||||||
+ QVERIFY(o.isSignalConnected(sig00));
|
|
||||||
+ // o2 is destructed
|
|
||||||
+ }
|
|
||||||
+ QVERIFY(!o.isSignalConnected(sig00));
|
|
||||||
+
|
|
||||||
+ const QMetaMethod sig01 = meta->method(meta->indexOfSignal("sig01()"));
|
|
||||||
+ QObject::connect(&o, &ManySignals::sig00, qt_noop);
|
|
||||||
+ QObject::connect(&o, &ManySignals::sig01, qt_noop);
|
|
||||||
+ QObject::connect(&o, &ManySignals::sig69, qt_noop);
|
|
||||||
+ QVERIFY(o.isSignalConnected(sig00));
|
|
||||||
+ QVERIFY(o.isSignalConnected(sig01));
|
|
||||||
+ QVERIFY(o.isSignalConnected(sig69));
|
|
||||||
+ QVERIFY(QObject::disconnect(&o, &ManySignals::sig69, 0, 0));
|
|
||||||
+ QVERIFY(o.isSignalConnected(sig00));
|
|
||||||
+ QVERIFY(o.isSignalConnected(sig01));
|
|
||||||
+ QVERIFY(!o.isSignalConnected(sig69));
|
|
||||||
+ QVERIFY(QObject::disconnect(&o, &ManySignals::sig00, 0, 0));
|
|
||||||
+ QVERIFY(!o.isSignalConnected(sig00));
|
|
||||||
+ QVERIFY(o.isSignalConnected(sig01));
|
|
||||||
+ QVERIFY(!o.isSignalConnected(sig69));
|
|
||||||
+ QObject::connect(&o, &ManySignals::sig69, qt_noop);
|
|
||||||
+ QVERIFY(!o.isSignalConnected(sig00));
|
|
||||||
+ QVERIFY(o.isSignalConnected(sig01));
|
|
||||||
+ QVERIFY(o.isSignalConnected(sig69));
|
|
||||||
+ QVERIFY(QObject::disconnect(&o, &ManySignals::sig01, 0, 0));
|
|
||||||
+ QVERIFY(!o.isSignalConnected(sig00));
|
|
||||||
+ QVERIFY(!o.isSignalConnected(sig01));
|
|
||||||
+ QVERIFY(o.isSignalConnected(sig69));
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void tst_QObject::qMetaObjectConnect()
|
|
||||||
{
|
|
||||||
SenderObject *s = new SenderObject;
|
|
||||||
--
|
|
||||||
2.19.1
|
|
||||||
|
|
|
@ -1,108 +0,0 @@
|
||||||
From 2e492dc6a6cf9e73a04f65e133ea4e97324a68da Mon Sep 17 00:00:00 2001
|
|
||||||
From: Robbert Proost <robbert.proost@outlook.com>
|
|
||||||
Date: Thu, 18 Jan 2018 09:52:49 +0100
|
|
||||||
Subject: [PATCH] QUrl: Support IPv6 addresses with zone id
|
|
||||||
|
|
||||||
Task-number: QTBUG-25550
|
|
||||||
Change-Id: I37ec02b655abe2779aa11945e20550ce00e43723
|
|
||||||
---
|
|
||||||
src/corelib/io/qurl.cpp | 63 ++++++++++++++++---------
|
|
||||||
tests/auto/corelib/io/qurl/tst_qurl.cpp | 52 ++++++++++++++++++++
|
|
||||||
2 files changed, 92 insertions(+), 23 deletions(-)
|
|
||||||
|
|
||||||
diff --git x/qtbase/src/corelib/io/qurl.cpp y/qtbase/src/corelib/io/qurl.cpp
|
|
||||||
index 4587b9fcd6..e2a66c8459 100644
|
|
||||||
--- x/qtbase/src/corelib/io/qurl.cpp
|
|
||||||
+++ y/qtbase/src/corelib/io/qurl.cpp
|
|
||||||
@@ -1203,16 +1203,18 @@ inline void QUrlPrivate::setQuery(const QString &value, int from, int iend)
|
|
||||||
|
|
||||||
inline void QUrlPrivate::appendHost(QString &appendTo, QUrl::FormattingOptions options) const
|
|
||||||
{
|
|
||||||
- // EncodeUnicode is the only flag that matters
|
|
||||||
- if ((options & QUrl::FullyDecoded) == QUrl::FullyDecoded)
|
|
||||||
- options = 0;
|
|
||||||
- else
|
|
||||||
- options &= QUrl::EncodeUnicode;
|
|
||||||
if (host.isEmpty())
|
|
||||||
return;
|
|
||||||
if (host.at(0).unicode() == '[') {
|
|
||||||
- // IPv6Address and IPvFuture address never require any transformation
|
|
||||||
- appendTo += host;
|
|
||||||
+ // IPv6 addresses might contain a zone-id which needs to be recoded
|
|
||||||
+ QString hostInCorrectFormat;
|
|
||||||
+ if (options != 0)
|
|
||||||
+ qt_urlRecode(hostInCorrectFormat, host.constBegin(), host.constEnd(), options, 0);
|
|
||||||
+
|
|
||||||
+ if (hostInCorrectFormat.isEmpty())
|
|
||||||
+ hostInCorrectFormat = host;
|
|
||||||
+
|
|
||||||
+ appendTo += hostInCorrectFormat;
|
|
||||||
} else {
|
|
||||||
// this is either an IPv4Address or a reg-name
|
|
||||||
// if it is a reg-name, it is already stored in Unicode form
|
|
||||||
@@ -1278,31 +1280,46 @@ static const QChar *parseIpFuture(QString &host, const QChar *begin, const QChar
|
|
||||||
// ONLY the IPv6 address is parsed here, WITHOUT the brackets
|
|
||||||
static const QChar *parseIp6(QString &host, const QChar *begin, const QChar *end, QUrl::ParsingMode mode)
|
|
||||||
{
|
|
||||||
- QIPAddressUtils::IPv6Address address;
|
|
||||||
- const QChar *ret = QIPAddressUtils::parseIp6(address, begin, end);
|
|
||||||
- if (ret) {
|
|
||||||
- // this struct is kept in automatic storage because it's only 4 bytes
|
|
||||||
+ QString decoded;
|
|
||||||
+ if (mode == QUrl::TolerantMode) {
|
|
||||||
const ushort decodeColon[] = { decode(':'), 0 };
|
|
||||||
+ if (qt_urlRecode(decoded, begin, end, QUrl::ComponentFormattingOption::PrettyDecoded, decodeColon) == 0) {
|
|
||||||
+ decoded = QString(begin, end-begin);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ else {
|
|
||||||
+ decoded = QString(begin, end-begin);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- // IPv6 failed parsing, check if it was a percent-encoded character in
|
|
||||||
- // the middle and try again
|
|
||||||
- QString decoded;
|
|
||||||
- if (mode == QUrl::TolerantMode && qt_urlRecode(decoded, begin, end, 0, decodeColon)) {
|
|
||||||
- // recurse
|
|
||||||
- // if the parsing fails again, the qt_urlRecode above will return 0
|
|
||||||
- ret = parseIp6(host, decoded.constBegin(), decoded.constEnd(), mode);
|
|
||||||
+ const QLatin1String zoneIdIdentifier("%25");
|
|
||||||
+ QIPAddressUtils::IPv6Address address;
|
|
||||||
+ QString zoneId;
|
|
||||||
+
|
|
||||||
+ const QChar *endBeforeZoneId = decoded.constEnd();
|
|
||||||
+
|
|
||||||
+ int zoneIdPosition = decoded.indexOf(zoneIdIdentifier);
|
|
||||||
+ if ((zoneIdPosition != -1) && (decoded.lastIndexOf(zoneIdIdentifier) == zoneIdPosition)) {
|
|
||||||
+ zoneId = decoded.mid(zoneIdPosition + zoneIdIdentifier.size());
|
|
||||||
+ endBeforeZoneId = decoded.constBegin() + zoneIdPosition;
|
|
||||||
|
|
||||||
- // we can't return ret, otherwise it would be dangling
|
|
||||||
- return ret ? end : 0;
|
|
||||||
+ if (zoneId.isEmpty() == true) {
|
|
||||||
+ return end;
|
|
||||||
}
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- // no transformation, nothing to re-parse
|
|
||||||
- return ret;
|
|
||||||
+ const QChar *ret = QIPAddressUtils::parseIp6(address, decoded.constBegin(), endBeforeZoneId);
|
|
||||||
+ if (ret) {
|
|
||||||
+ return begin + (ret - decoded.constBegin());
|
|
||||||
}
|
|
||||||
|
|
||||||
- host.reserve(host.size() + (end - begin));
|
|
||||||
+ host.reserve(host.size() + (decoded.constEnd() - decoded.constBegin()));
|
|
||||||
host += QLatin1Char('[');
|
|
||||||
QIPAddressUtils::toString(host, address);
|
|
||||||
+
|
|
||||||
+ if (zoneId.isEmpty() == false) {
|
|
||||||
+ host += zoneIdIdentifier;
|
|
||||||
+ host += zoneId;
|
|
||||||
+ }
|
|
||||||
host += QLatin1Char(']');
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.18.0
|
|
||||||
|
|
|
@ -1,52 +0,0 @@
|
||||||
From 2e80dec588c21cfeb086912cf6c6a011c6b6b896 Mon Sep 17 00:00:00 2001
|
|
||||||
From f3e9a6e63740d922577d331f6cbe57fd43888472 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lars Schmertmann <Lars.Schmertmann@governikus.de>
|
|
||||||
Date: Mon, 16 Apr 2018 08:34:42 +0200
|
|
||||||
Subject: Remove Qt Labs specific plugins from the build
|
|
||||||
---
|
|
||||||
qtquickcontrols2/src/imports/imports.pro | 2 --
|
|
||||||
qtdeclarative/src/imports/imports.pro | 4 ----
|
|
||||||
2 file changed, 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git x/qtquickcontrols2/src/imports/imports.pro y/qtquickcontrols2/src/imports/imports.pro
|
|
||||||
index e32bded7..944c9292 100644
|
|
||||||
--- x/qtquickcontrols2/src/imports/imports.pro
|
|
||||||
+++ y/qtquickcontrols2/src/imports/imports.pro
|
|
||||||
@@ -1,8 +1,6 @@
|
|
||||||
TEMPLATE = subdirs
|
|
||||||
SUBDIRS += \
|
|
||||||
controls \
|
|
||||||
- calendar \
|
|
||||||
- platform \
|
|
||||||
templates
|
|
||||||
|
|
||||||
SUBDIRS += \
|
|
||||||
diff --git x/qtdeclarative/src/imports/imports.pro y/qtdeclarative/src/imports/imports.pro
|
|
||||||
index 5d7e43488..33390bc42 100644
|
|
||||||
--- x/qtdeclarative/src/imports/imports.pro
|
|
||||||
+++ y/qtdeclarative/src/imports/imports.pro
|
|
||||||
@@ -5,7 +5,6 @@
|
|
||||||
SUBDIRS += \
|
|
||||||
builtins \
|
|
||||||
qtqml \
|
|
||||||
- folderlistmodel \
|
|
||||||
models
|
|
||||||
|
|
||||||
qtHaveModule(sql): SUBDIRS += localstorage
|
|
||||||
@@ -14,13 +13,11 @@
|
|
||||||
|
|
||||||
qtHaveModule(quick) {
|
|
||||||
SUBDIRS += \
|
|
||||||
- handlers \
|
|
||||||
layouts \
|
|
||||||
qtquick2 \
|
|
||||||
window
|
|
||||||
|
|
||||||
qtHaveModule(testlib): SUBDIRS += testlib
|
|
||||||
- qtConfig(systemsemaphore): SUBDIRS += sharedimage
|
|
||||||
qtConfig(quick-particles): \
|
|
||||||
SUBDIRS += particles
|
|
||||||
|
|
||||||
--
|
|
||||||
2.16.2
|
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
From 4ab766863d88a491f91fa81731dbde75d0122d89 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Timur Pocheptsov <timur.pocheptsov@qt.io>
|
|
||||||
Date: Mon, 14 May 2018 12:41:23 +0200
|
|
||||||
Subject: [PATCH] Use QUrl::toString() when forming the 'Host' header
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
This allows to correctly use IPv6 literals and also
|
|
||||||
deals (correctly) with a port (if it's set at all).
|
|
||||||
|
|
||||||
Task-number: QTBUG-68245
|
|
||||||
Change-Id: I6d29543887c4ab58d70f0970a6f0a1b822c301df
|
|
||||||
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
|
|
||||||
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
|
|
||||||
---
|
|
||||||
src/websockets/qwebsocket_p.cpp | 22 ++++++++++++----------
|
|
||||||
1 file changed, 12 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
diff --git x/qtwebsockets/src/websockets/qwebsocket_p.cpp y/qtwebsockets/src/websockets/qwebsocket_p.cpp
|
|
||||||
index d233b66..9b27ad2 100644
|
|
||||||
--- x/qtwebsockets/src/websockets/qwebsocket_p.cpp
|
|
||||||
+++ y/qtwebsockets/src/websockets/qwebsocket_p.cpp
|
|
||||||
@@ -1108,16 +1108,18 @@ void QWebSocketPrivate::processStateChanged(QAbstractSocket::SocketState socketS
|
|
||||||
headers << qMakePair(QString::fromLatin1(key),
|
|
||||||
QString::fromLatin1(m_request.rawHeader(key)));
|
|
||||||
|
|
||||||
- const QString handshake =
|
|
||||||
- createHandShakeRequest(m_resourceName,
|
|
||||||
- m_request.url().host()
|
|
||||||
- % QStringLiteral(":")
|
|
||||||
- % QString::number(m_request.url().port(port)),
|
|
||||||
- origin(),
|
|
||||||
- QString(),
|
|
||||||
- QString(),
|
|
||||||
- m_key,
|
|
||||||
- headers);
|
|
||||||
+ const auto format = QUrl::RemoveScheme | QUrl::RemoveUserInfo
|
|
||||||
+ | QUrl::RemovePath | QUrl::RemoveQuery
|
|
||||||
+ | QUrl::RemoveFragment | QUrl::RemovePort;
|
|
||||||
+ const QString host = m_request.url().toString(format).mid(2);
|
|
||||||
+ const QString handshake = createHandShakeRequest(m_resourceName,
|
|
||||||
+ host % QStringLiteral(":")
|
|
||||||
+ % QString::number(m_request.url().port(port)),
|
|
||||||
+ origin(),
|
|
||||||
+ QString(),
|
|
||||||
+ QString(),
|
|
||||||
+ m_key,
|
|
||||||
+ headers);
|
|
||||||
if (handshake.isEmpty()) {
|
|
||||||
m_pSocket->abort();
|
|
||||||
Q_EMIT q->error(QAbstractSocket::ConnectionRefusedError);
|
|
||||||
--
|
|
||||||
2.19.0
|
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
From bbd5c6feea8632c8321d3cd7a16a262d90f856e8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Andr=C3=A9=20Klitzing?= <aklitzing@gmail.com>
|
|
||||||
Date: Thu, 22 Nov 2018 11:44:39 +0100
|
|
||||||
Subject: [PATCH] Use user provided session data if available
|
|
||||||
|
|
||||||
If a user uses persistent sessions and provide the session to
|
|
||||||
Qt again with setSessionTicket it should be used with a higher
|
|
||||||
priority.
|
|
||||||
This is also a work-around for QTBUG-71967.
|
|
||||||
|
|
||||||
Change-Id: I7351b669b6de2863136d6106dc4f73fa5c7b8c51
|
|
||||||
---
|
|
||||||
src/network/ssl/qsslcontext_openssl.cpp | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git x/qtbase/src/network/ssl/qsslcontext_openssl.cpp y/qtbase/src/network/ssl/qsslcontext_openssl.cpp
|
|
||||||
index 41b759364b..24dbc9ecbc 100644
|
|
||||||
--- x/qtbase/src/network/ssl/qsslcontext_openssl.cpp
|
|
||||||
+++ y/qtbase/src/network/ssl/qsslcontext_openssl.cpp
|
|
||||||
@@ -134,8 +134,9 @@ SSL* QSslContext::createSsl()
|
|
||||||
SSL* ssl = q_SSL_new(ctx);
|
|
||||||
q_SSL_clear(ssl);
|
|
||||||
|
|
||||||
- if (!session && !sessionASN1().isEmpty()
|
|
||||||
+ if (!m_sessionASN1.isEmpty()
|
|
||||||
&& !sslConfiguration.testSslOption(QSsl::SslOptionDisableSessionPersistence)) {
|
|
||||||
+ q_SSL_SESSION_free(session);
|
|
||||||
const unsigned char *data = reinterpret_cast<const unsigned char *>(m_sessionASN1.constData());
|
|
||||||
session = q_d2i_SSL_SESSION(0, &data, m_sessionASN1.size()); // refcount is 1 already, set by function above
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.19.1
|
|
||||||
|
|
|
@ -1,132 +0,0 @@
|
||||||
From d64ee0c6be7e9ce672382709d8ea38e30d1d5e0d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Oliver Wolff <oliver.wolff@qt.io>
|
|
||||||
Date: Tue, 12 Dec 2017 20:02:55 +0100
|
|
||||||
Subject: configure: detect fxc.exe more thoroughly
|
|
||||||
|
|
||||||
When building ANGLE, we need the shader compiler (fxc.exe), which is not
|
|
||||||
shipped with MinGW. Previously, we required an installed DirectX SDK.
|
|
||||||
For Windows versions >= 8, the DX SDK is also part of the Windows Kit,
|
|
||||||
so we also allow the user to specify the location of the Windows Kit.
|
|
||||||
We also detect fxc on 64-bit hosts now, and in newer SDK versions which
|
|
||||||
version the binary directory.
|
|
||||||
|
|
||||||
The detected binary is now exported by configure, so the ANGLE project
|
|
||||||
file does not need to duplicate the logic anymore.
|
|
||||||
|
|
||||||
Task-number: QTBUG-52487
|
|
||||||
Change-Id: I41a17992909041dd84291b69498195cc8b8fab8a
|
|
||||||
---
|
|
||||||
src/angle/src/common/common.pri | 16 +---------------
|
|
||||||
src/gui/configure.json | 11 +++--------
|
|
||||||
src/gui/configure.pri | 31 +++++++++++++++++++++++++++----
|
|
||||||
3 files changed, 31 insertions(+), 27 deletions(-)
|
|
||||||
|
|
||||||
diff --git x/qtbase/src/angle/src/common/common.pri y/qtbase/src/angle/src/common/common.pri
|
|
||||||
index c1fad14951..2c0af02b58 100644
|
|
||||||
--- x/qtbase/src/angle/src/common/common.pri
|
|
||||||
+++ y/qtbase/src/angle/src/common/common.pri
|
|
||||||
@@ -21,20 +21,6 @@ lib_replace.replace = \$\$\$\$[QT_INSTALL_LIBS]
|
|
||||||
lib_replace.CONFIG = path
|
|
||||||
QMAKE_PRL_INSTALL_REPLACE += lib_replace
|
|
||||||
|
|
||||||
-# DirectX is included in the Windows 8 Kit, but everything else requires the DX SDK.
|
|
||||||
-winrt|msvc {
|
|
||||||
- FXC = fxc.exe
|
|
||||||
-} else {
|
|
||||||
- DX_DIR = $$(DXSDK_DIR)
|
|
||||||
- isEmpty(DX_DIR) {
|
|
||||||
- error("Cannot determine DirectX SDK location. Please set DXSDK_DIR environment variable.")
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- equals(QMAKE_TARGET.arch, x86_64) {
|
|
||||||
- FXC = \"$${DX_DIR}Utilities\\bin\\x64\\fxc.exe\"
|
|
||||||
- } else {
|
|
||||||
- FXC = \"$${DX_DIR}Utilities\\bin\\x86\\fxc.exe\"
|
|
||||||
- }
|
|
||||||
-}
|
|
||||||
+FXC = $$shell_quote($$shell_path($$QMAKE_FXC_LOCATION))
|
|
||||||
|
|
||||||
static: DEFINES *= LIBGLESV2_EXPORT_H_ ANGLE_EXPORT=
|
|
||||||
diff --git x/qtbase/src/gui/configure.json y/qtbase/src/gui/configure.json
|
|
||||||
index 4145ceddf6..2a96bc5a75 100644
|
|
||||||
--- x/qtbase/src/gui/configure.json
|
|
||||||
+++ y/qtbase/src/gui/configure.json
|
|
||||||
@@ -702,10 +702,6 @@
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
- "testTypeAliases": {
|
|
||||||
- "files": [ "fxc" ]
|
|
||||||
- },
|
|
||||||
-
|
|
||||||
"tests": {
|
|
||||||
"angle_d3d11_qdtd": {
|
|
||||||
"label": "D3D11_QUERY_DATA_TIMESTAMP_DISJOINT",
|
|
||||||
@@ -721,9 +717,7 @@
|
|
||||||
"fxc": {
|
|
||||||
"label": "Direct3D Shader Compiler",
|
|
||||||
"type": "fxc",
|
|
||||||
- "files": [
|
|
||||||
- "fxc.exe"
|
|
||||||
- ]
|
|
||||||
+ "log": "value"
|
|
||||||
},
|
|
||||||
"egl-x11": {
|
|
||||||
"label": "EGL on X11",
|
|
||||||
@@ -976,7 +970,8 @@
|
|
||||||
"condition": "features.dxguid && tests.fxc && (features.direct3d9 || (config.winrt && features.direct3d11 && libs.d3dcompiler))",
|
|
||||||
"output": [
|
|
||||||
"publicFeature",
|
|
||||||
- { "type": "define", "name": "QT_OPENGL_ES_2_ANGLE" }
|
|
||||||
+ { "type": "define", "name": "QT_OPENGL_ES_2_ANGLE" },
|
|
||||||
+ { "type": "varAssign", "name": "QMAKE_FXC_LOCATION", "value": "tests.fxc.value" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"angle_d3d11_qdtd": {
|
|
||||||
diff --git x/qtbase/src/gui/configure.pri y/qtbase/src/gui/configure.pri
|
|
||||||
index f53a93063c..bc27a756a3 100644
|
|
||||||
--- x/qtbase/src/gui/configure.pri
|
|
||||||
+++ y/qtbase/src/gui/configure.pri
|
|
||||||
@@ -20,12 +20,35 @@ defineTest(qtConfLibrary_freetype) {
|
|
||||||
# DXSDK_DIR variable. Starting with Windows Kit 8, it is included in
|
|
||||||
# the Windows SDK.
|
|
||||||
defineTest(qtConfTest_fxc) {
|
|
||||||
- dxdir = $$getenv("DXSDK_DIR")
|
|
||||||
- !isEmpty(dxdir) {
|
|
||||||
- EXTRA_PATH += $$dxdir/Utilities/bin/x86
|
|
||||||
+ !mingw {
|
|
||||||
+ fxc = $$qtConfFindInPath("fxc.exe")
|
|
||||||
+ } else {
|
|
||||||
+ equals(QMAKE_HOST.arch, x86_64): \
|
|
||||||
+ fns = x64/fxc.exe
|
|
||||||
+ else: \
|
|
||||||
+ fns = x86/fxc.exe
|
|
||||||
+ dxdir = $$(DXSDK_DIR)
|
|
||||||
+ !isEmpty(dxdir) {
|
|
||||||
+ fxc = $$dxdir/Utilities/bin/$$fns
|
|
||||||
+ } else {
|
|
||||||
+ winkitbindir = $$(WindowsSdkVerBinPath)
|
|
||||||
+ !isEmpty(winkitbindir) {
|
|
||||||
+ fxc = $$winkitbindir/$$fns
|
|
||||||
+ } else {
|
|
||||||
+ winkitdir = $$(WindowsSdkDir)
|
|
||||||
+ !isEmpty(winkitdir): \
|
|
||||||
+ fxc = $$winkitdir/bin/$$fns
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
- qtConfTest_files($${1}): return(true)
|
|
||||||
+ !isEmpty(fxc):exists($$fxc) {
|
|
||||||
+ $${1}.value = $$clean_path($$fxc)
|
|
||||||
+ export($${1}.value)
|
|
||||||
+ $${1}.cache += value
|
|
||||||
+ export($${1}.cache)
|
|
||||||
+ return(true)
|
|
||||||
+ }
|
|
||||||
return(false)
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.17.0
|
|
||||||
|
|
|
@ -1,442 +0,0 @@
|
||||||
From 6b73c48ac35de82b95b74f8dd614fe282209cd61 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
|
|
||||||
Date: Tue, 12 Dec 2017 12:21:16 +0100
|
|
||||||
Subject: configure: refactor directx checks
|
|
||||||
|
|
||||||
properly atomize the libraries and express their dependencies, and
|
|
||||||
adjust the project files accordingly.
|
|
||||||
|
|
||||||
note that we don't try to use any additional paths, as all SDKs we
|
|
||||||
currently support have built-in directx 11 support:
|
|
||||||
- msvc2013 comes with win sdk 8.1; that is also used for win7 targets
|
|
||||||
- mingw-64 5.3 (though this one is missing fxc, which is why the code
|
|
||||||
path for using an external sdk for that remains)
|
|
||||||
|
|
||||||
Change-Id: Ib44e389ef46567308293c2bbcad20a96e8ef70c7
|
|
||||||
---
|
|
||||||
src/angle/src/common/gles_common.pri | 6 +-
|
|
||||||
src/angle/src/libEGL/libEGL.pro | 5 +-
|
|
||||||
src/gui/configure.json | 176 ++++++++++++++----
|
|
||||||
src/gui/configure.pri | 19 +-
|
|
||||||
.../fontdatabases/windows/windows.pri | 9 +-
|
|
||||||
.../fontdatabases/winrt/winrt.pri | 4 +-
|
|
||||||
src/plugins/platforms/direct2d/direct2d.pro | 3 +-
|
|
||||||
src/plugins/platforms/platforms.pro | 6 +-
|
|
||||||
src/plugins/platforms/windows/windows.pri | 2 +
|
|
||||||
src/plugins/platforms/winrt/winrt.pro | 3 +-
|
|
||||||
10 files changed, 168 insertions(+), 65 deletions(-)
|
|
||||||
|
|
||||||
diff --git x/qtbase/src/angle/src/common/gles_common.pri y/qtbase/src/angle/src/common/gles_common.pri
|
|
||||||
index 82d38a62e6..927949d758 100644
|
|
||||||
--- x/qtbase/src/angle/src/common/gles_common.pri
|
|
||||||
+++ y/qtbase/src/angle/src/common/gles_common.pri
|
|
||||||
@@ -5,11 +5,11 @@ INCLUDEPATH += $$OUT_PWD/.. $$ANGLE_DIR/src/libANGLE
|
|
||||||
|
|
||||||
# Remember to adapt src/gui/configure.* if the Direct X version changes.
|
|
||||||
!winrt: \
|
|
||||||
- LIBS_PRIVATE += -ld3d9
|
|
||||||
+ QMAKE_USE_PRIVATE += d3d9
|
|
||||||
winrt: \
|
|
||||||
- LIBS_PRIVATE += -ld3dcompiler -ldxgi -ld3d11
|
|
||||||
+ QMAKE_USE_PRIVATE += d3dcompiler d3d11 dxgi
|
|
||||||
|
|
||||||
-LIBS_PRIVATE += -ldxguid
|
|
||||||
+QMAKE_USE_PRIVATE += dxguid
|
|
||||||
|
|
||||||
STATICLIBS = translator preprocessor
|
|
||||||
for(libname, STATICLIBS) {
|
|
||||||
diff --git x/qtbase/src/angle/src/libEGL/libEGL.pro y/qtbase/src/angle/src/libEGL/libEGL.pro
|
|
||||||
index 9e9c639002..ad2117f2fc 100644
|
|
||||||
--- x/qtbase/src/angle/src/libEGL/libEGL.pro
|
|
||||||
+++ y/qtbase/src/angle/src/libEGL/libEGL.pro
|
|
||||||
@@ -1,9 +1,10 @@
|
|
||||||
include(../common/common.pri)
|
|
||||||
DEF_FILE_TARGET = $${TARGET}
|
|
||||||
TARGET = $$qtLibraryTarget($${LIBEGL_NAME})
|
|
||||||
-winrt: LIBS_PRIVATE += -ld3d11
|
|
||||||
+winrt: QMAKE_USE_PRIVATE += d3d11
|
|
||||||
+QMAKE_USE_PRIVATE += dxguid
|
|
||||||
|
|
||||||
-LIBS_PRIVATE += -ldxguid -L$$QT_BUILD_TREE/lib -l$$qtLibraryTarget($${LIBGLESV2_NAME})
|
|
||||||
+LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -l$$qtLibraryTarget($${LIBGLESV2_NAME})
|
|
||||||
|
|
||||||
DEFINES += GL_APICALL= GL_GLEXT_PROTOTYPES= EGLAPI= LIBEGL_IMPLEMENTATION
|
|
||||||
|
|
||||||
diff --git x/qtbase/src/gui/configure.json y/qtbase/src/gui/configure.json
|
|
||||||
index 219385a108..4145ceddf6 100644
|
|
||||||
--- x/qtbase/src/gui/configure.json
|
|
||||||
+++ y/qtbase/src/gui/configure.json
|
|
||||||
@@ -65,21 +65,79 @@
|
|
||||||
"-lbcm_host"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
- "direct2d": {
|
|
||||||
- "label": "Direct 2D",
|
|
||||||
- "export": "",
|
|
||||||
+ "dxguid": {
|
|
||||||
+ "label": "DirectX GUID",
|
|
||||||
+ "sources": [
|
|
||||||
+ "-ldxguid"
|
|
||||||
+ ]
|
|
||||||
+ },
|
|
||||||
+ "dxgi": {
|
|
||||||
+ "label": "DirectX GI",
|
|
||||||
+ "headers": [ "dxgi.h" ],
|
|
||||||
+ "sources": [
|
|
||||||
+ "-ldxgi"
|
|
||||||
+ ]
|
|
||||||
+ },
|
|
||||||
+ "dxgi1_2": {
|
|
||||||
+ "label": "DirectX GI 1.2",
|
|
||||||
"test": {
|
|
||||||
- "include": [ "d3d11_1.h", "d2d1_1.h", "d2d1_1helper.h", "dxgi1_2.h", "wrl.h", "dwrite.h" ],
|
|
||||||
- "tail": "using Microsoft::WRL::ComPtr;",
|
|
||||||
"main": [
|
|
||||||
- "ComPtr<ID2D1Factory1> d2dFactory;",
|
|
||||||
- "D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, d2dFactory.ReleaseAndGetAddressOf());",
|
|
||||||
- "ComPtr<IDXGISurface1> surface;",
|
|
||||||
+ "// fails with mingw-w64 5.4.0 - declaration is missing from header",
|
|
||||||
+ "IDXGISurface1 *surface;",
|
|
||||||
"(void) surface;"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
+ "headers": [ "dxgi1_2.h" ],
|
|
||||||
+ "sources": [
|
|
||||||
+ "-ldxgi"
|
|
||||||
+ ]
|
|
||||||
+ },
|
|
||||||
+ "d3d9": {
|
|
||||||
+ "label": "Direct3D 9",
|
|
||||||
+ "headers": "d3d9.h",
|
|
||||||
+ "sources": [
|
|
||||||
+ "-ld3d9"
|
|
||||||
+ ]
|
|
||||||
+ },
|
|
||||||
+ "d3d11": {
|
|
||||||
+ "label": "Direct3D 11",
|
|
||||||
+ "headers": "d3d11.h",
|
|
||||||
+ "sources": [
|
|
||||||
+ "-ld3d11"
|
|
||||||
+ ]
|
|
||||||
+ },
|
|
||||||
+ "d3d11_1": {
|
|
||||||
+ "label": "Direct3D 11.1",
|
|
||||||
+ "headers": "d3d11_1.h",
|
|
||||||
+ "sources": [
|
|
||||||
+ "-ld3d11"
|
|
||||||
+ ]
|
|
||||||
+ },
|
|
||||||
+ "d3dcompiler": {
|
|
||||||
+ "label": "Direct3D Shader Compiler Library",
|
|
||||||
+ "headers": "d3dcompiler.h",
|
|
||||||
+ "sources": [
|
|
||||||
+ "-ld3dcompiler"
|
|
||||||
+ ]
|
|
||||||
+ },
|
|
||||||
+ "d2d1": {
|
|
||||||
+ "label": "Direct2D 1",
|
|
||||||
+ "headers": [ "d2d1.h", "d2d1helper.h" ],
|
|
||||||
+ "sources": [
|
|
||||||
+ "-ld2d1"
|
|
||||||
+ ]
|
|
||||||
+ },
|
|
||||||
+ "d2d1_1": {
|
|
||||||
+ "label": "Direct2D 1.1",
|
|
||||||
+ "test": {
|
|
||||||
+ "main": [
|
|
||||||
+ "ID2D1Factory1 *d2dFactory;",
|
|
||||||
+ "D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &d2dFactory);"
|
|
||||||
+ ]
|
|
||||||
+ },
|
|
||||||
+ "headers": [ "d2d1_1.h", "d2d1_1helper.h" ],
|
|
||||||
"sources": [
|
|
||||||
- "-ld2d1 -ldwrite -ld3d11"
|
|
||||||
+ "-ld2d1"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"directfb": {
|
|
||||||
@@ -96,9 +154,8 @@
|
|
||||||
{ "type": "pkgConfig", "args": "directfb" }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
- "directwrite": {
|
|
||||||
+ "dwrite": {
|
|
||||||
"label": "DirectWrite",
|
|
||||||
- "export": "",
|
|
||||||
"test": {
|
|
||||||
"include": [ "dwrite.h", "d2d1.h" ],
|
|
||||||
"main": [
|
|
||||||
@@ -107,6 +164,29 @@
|
|
||||||
" (IUnknown **)(&factory));"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
+ "headers": "dwrite.h",
|
|
||||||
+ "sources": [
|
|
||||||
+ "-ldwrite"
|
|
||||||
+ ]
|
|
||||||
+ },
|
|
||||||
+ "dwrite_1": {
|
|
||||||
+ "label": "DirectWrite 1",
|
|
||||||
+ "headers": "dwrite_1.h",
|
|
||||||
+ "sources": [
|
|
||||||
+ "-ldwrite"
|
|
||||||
+ ]
|
|
||||||
+ },
|
|
||||||
+ "dwrite_2": {
|
|
||||||
+ "label": "DirectWrite 2",
|
|
||||||
+ "test": {
|
|
||||||
+ "main": [
|
|
||||||
+ "IUnknown *factory = 0;",
|
|
||||||
+ "(void)(size_t(DWRITE_E_NOCOLOR) + sizeof(IDWriteFontFace2));",
|
|
||||||
+ "DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory2),",
|
|
||||||
+ " &factory);"
|
|
||||||
+ ]
|
|
||||||
+ },
|
|
||||||
+ "headers": "dwrite_2.h",
|
|
||||||
"sources": [
|
|
||||||
"-ldwrite"
|
|
||||||
]
|
|
||||||
@@ -623,7 +703,7 @@
|
|
||||||
},
|
|
||||||
|
|
||||||
"testTypeAliases": {
|
|
||||||
- "files": [ "directX" ]
|
|
||||||
+ "files": [ "fxc" ]
|
|
||||||
},
|
|
||||||
|
|
||||||
"tests": {
|
|
||||||
@@ -638,26 +718,10 @@
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
- "directwrite2": {
|
|
||||||
- "label": "DirectWrite 2",
|
|
||||||
- "type": "compile",
|
|
||||||
- "test": {
|
|
||||||
- "include": [ "dwrite_2.h", "d2d1.h" ],
|
|
||||||
- "main": [
|
|
||||||
- "IUnknown *factory = 0;",
|
|
||||||
- "(void)(size_t(DWRITE_E_NOCOLOR) + sizeof(IDWriteFontFace2));",
|
|
||||||
- "DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory2),",
|
|
||||||
- " &factory);"
|
|
||||||
- ]
|
|
||||||
- },
|
|
||||||
- "use": "directwrite"
|
|
||||||
- },
|
|
||||||
- "directx": {
|
|
||||||
- "label": "DirectX SDK",
|
|
||||||
- "type": "directX",
|
|
||||||
+ "fxc": {
|
|
||||||
+ "label": "Direct3D Shader Compiler",
|
|
||||||
+ "type": "fxc",
|
|
||||||
"files": [
|
|
||||||
- "d3dcompiler.h",
|
|
||||||
- "d3d11.lib",
|
|
||||||
"fxc.exe"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
@@ -909,7 +973,7 @@
|
|
||||||
"angle": {
|
|
||||||
"label": "ANGLE",
|
|
||||||
"autoDetect": "features.opengles2 || features.opengl-dynamic",
|
|
||||||
- "condition": "config.win32 && tests.directx",
|
|
||||||
+ "condition": "features.dxguid && tests.fxc && (features.direct3d9 || (config.winrt && features.direct3d11 && libs.d3dcompiler))",
|
|
||||||
"output": [
|
|
||||||
"publicFeature",
|
|
||||||
{ "type": "define", "name": "QT_OPENGL_ES_2_ANGLE" }
|
|
||||||
@@ -936,19 +1000,59 @@
|
|
||||||
"directwrite": {
|
|
||||||
"label": "DirectWrite",
|
|
||||||
"emitIf": "config.win32",
|
|
||||||
- "condition": "libs.directwrite",
|
|
||||||
+ "condition": "libs.dwrite",
|
|
||||||
+ "output": [ "privateFeature" ]
|
|
||||||
+ },
|
|
||||||
+ "directwrite1": {
|
|
||||||
+ "label": "DirectWrite 1",
|
|
||||||
+ "emitIf": "config.win32",
|
|
||||||
+ "condition": "libs.dwrite_1",
|
|
||||||
"output": [ "privateFeature" ]
|
|
||||||
},
|
|
||||||
"directwrite2": {
|
|
||||||
"label": "DirectWrite 2",
|
|
||||||
"emitIf": "config.win32",
|
|
||||||
- "condition": "features.directwrite && tests.directwrite2",
|
|
||||||
+ "condition": "features.directwrite1 && libs.dwrite_2",
|
|
||||||
+ "output": [ "privateFeature" ]
|
|
||||||
+ },
|
|
||||||
+ "dxguid": {
|
|
||||||
+ "label": "DirectX GUID",
|
|
||||||
+ "condition": "config.win32 && libs.dxguid",
|
|
||||||
+ "output": [ "privateFeature" ]
|
|
||||||
+ },
|
|
||||||
+ "direct3d9": {
|
|
||||||
+ "label": "Direct 3D 9",
|
|
||||||
+ "condition": "config.win32 && !config.winrt && libs.d3d9",
|
|
||||||
+ "output": [ "privateFeature" ]
|
|
||||||
+ },
|
|
||||||
+ "dxgi": {
|
|
||||||
+ "label": "DirectX GI",
|
|
||||||
+ "condition": "config.win32 && libs.dxgi",
|
|
||||||
+ "output": [ "privateFeature" ]
|
|
||||||
+ },
|
|
||||||
+ "dxgi1_2": {
|
|
||||||
+ "label": "DirectX GI 1.2",
|
|
||||||
+ "condition": "features.dxgi && libs.dxgi1_2",
|
|
||||||
+ "output": [ "privateFeature" ]
|
|
||||||
+ },
|
|
||||||
+ "direct3d11": {
|
|
||||||
+ "label": "Direct 3D 11",
|
|
||||||
+ "condition": "features.dxgi && libs.d3d11",
|
|
||||||
+ "output": [ "privateFeature" ]
|
|
||||||
+ },
|
|
||||||
+ "direct3d11_1": {
|
|
||||||
+ "label": "Direct 3D 11.1",
|
|
||||||
+ "condition": "features.direct3d11 && features.dxgi1_2 && libs.d3d11_1",
|
|
||||||
"output": [ "privateFeature" ]
|
|
||||||
},
|
|
||||||
"direct2d": {
|
|
||||||
"label": "Direct 2D",
|
|
||||||
- "section": "Platform plugins",
|
|
||||||
- "condition": "config.win32 && !config.winrt && libs.direct2d",
|
|
||||||
+ "condition": "config.win32 && !config.winrt && features.direct3d11 && libs.d2d1",
|
|
||||||
+ "output": [ "privateFeature" ]
|
|
||||||
+ },
|
|
||||||
+ "direct2d1_1": {
|
|
||||||
+ "label": "Direct 2D 1.1",
|
|
||||||
+ "condition": "features.direct2d && libs.d2d1_1",
|
|
||||||
"output": [ "privateFeature" ]
|
|
||||||
},
|
|
||||||
"evdev": {
|
|
||||||
diff --git x/qtbase/src/gui/configure.pri y/qtbase/src/gui/configure.pri
|
|
||||||
index fcd2d1f73e..f53a93063c 100644
|
|
||||||
--- x/qtbase/src/gui/configure.pri
|
|
||||||
+++ y/qtbase/src/gui/configure.pri
|
|
||||||
@@ -15,29 +15,16 @@ defineTest(qtConfLibrary_freetype) {
|
|
||||||
return(true)
|
|
||||||
}
|
|
||||||
|
|
||||||
-# Check for Direct X SDK (include, lib, and direct shader compiler 'fxc').
|
|
||||||
+# Check for Direct X shader compiler 'fxc'.
|
|
||||||
# Up to Direct X SDK June 2010 and for MinGW, this is pointed to by the
|
|
||||||
# DXSDK_DIR variable. Starting with Windows Kit 8, it is included in
|
|
||||||
-# the Windows SDK. Checking for the header is not sufficient, since it
|
|
||||||
-# is also present in MinGW.
|
|
||||||
-defineTest(qtConfTest_directX) {
|
|
||||||
+# the Windows SDK.
|
|
||||||
+defineTest(qtConfTest_fxc) {
|
|
||||||
dxdir = $$getenv("DXSDK_DIR")
|
|
||||||
!isEmpty(dxdir) {
|
|
||||||
- EXTRA_INCLUDEPATH += $$dxdir/include
|
|
||||||
- equals(QT_ARCH, x86_64): \
|
|
||||||
- EXTRA_LIBDIR += $$dxdir/lib/x64
|
|
||||||
- else: \
|
|
||||||
- EXTRA_LIBDIR += $$dxdir/lib/x86
|
|
||||||
EXTRA_PATH += $$dxdir/Utilities/bin/x86
|
|
||||||
}
|
|
||||||
|
|
||||||
- $$qtConfEvaluate("features.sse2") {
|
|
||||||
- ky = $$size($${1}.files._KEYS_)
|
|
||||||
- $${1}.files._KEYS_ += $$ky
|
|
||||||
- # Not present on MinGW-32
|
|
||||||
- $${1}.files.$${ky} = "intrin.h"
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
qtConfTest_files($${1}): return(true)
|
|
||||||
return(false)
|
|
||||||
}
|
|
||||||
diff --git x/qtbase/src/platformsupport/fontdatabases/windows/windows.pri y/qtbase/src/platformsupport/fontdatabases/windows/windows.pri
|
|
||||||
index 0e64084cf1..9c529f55ea 100644
|
|
||||||
--- x/qtbase/src/platformsupport/fontdatabases/windows/windows.pri
|
|
||||||
+++ y/qtbase/src/platformsupport/fontdatabases/windows/windows.pri
|
|
||||||
@@ -15,9 +15,14 @@ qtConfig(freetype) {
|
|
||||||
HEADERS += $$PWD/qwindowsfontdatabase_ft_p.h
|
|
||||||
}
|
|
||||||
|
|
||||||
-qtConfig(directwrite) {
|
|
||||||
- qtConfig(directwrite2): \
|
|
||||||
+qtConfig(directwrite):qtConfig(direct2d) {
|
|
||||||
+ qtConfig(directwrite2) {
|
|
||||||
+ QMAKE_USE_PRIVATE += dwrite_2
|
|
||||||
DEFINES *= QT_USE_DIRECTWRITE2
|
|
||||||
+ } else {
|
|
||||||
+ QMAKE_USE_PRIVATE += dwrite
|
|
||||||
+ }
|
|
||||||
+ QMAKE_USE_PRIVATE += d2d1
|
|
||||||
|
|
||||||
SOURCES += $$PWD/qwindowsfontenginedirectwrite.cpp
|
|
||||||
HEADERS += $$PWD/qwindowsfontenginedirectwrite_p.h
|
|
||||||
diff --git x/qtbase/src/platformsupport/fontdatabases/winrt/winrt.pri y/qtbase/src/platformsupport/fontdatabases/winrt/winrt.pri
|
|
||||||
index 291ada220f..7617df2e7a 100644
|
|
||||||
--- x/qtbase/src/platformsupport/fontdatabases/winrt/winrt.pri
|
|
||||||
+++ y/qtbase/src/platformsupport/fontdatabases/winrt/winrt.pri
|
|
||||||
@@ -8,4 +8,6 @@ HEADERS += \
|
|
||||||
|
|
||||||
DEFINES += __WRL_NO_DEFAULT_LIB__
|
|
||||||
|
|
||||||
-LIBS += -lws2_32 -ldwrite
|
|
||||||
+LIBS += -lws2_32
|
|
||||||
+
|
|
||||||
+QMAKE_USE_PRIVATE += dwrite_1
|
|
||||||
diff --git x/qtbase/src/plugins/platforms/direct2d/direct2d.pro y/qtbase/src/plugins/platforms/direct2d/direct2d.pro
|
|
||||||
index 3bfd02bdc8..9764272632 100644
|
|
||||||
--- x/qtbase/src/plugins/platforms/direct2d/direct2d.pro
|
|
||||||
+++ y/qtbase/src/plugins/platforms/direct2d/direct2d.pro
|
|
||||||
@@ -8,7 +8,8 @@ QT += \
|
|
||||||
qtConfig(accessibility): QT += accessibility_support-private
|
|
||||||
qtConfig(vulkan): QT += vulkan_support-private
|
|
||||||
|
|
||||||
-LIBS += -ldwmapi -ld2d1 -ld3d11 -ldwrite -lversion -lgdi32
|
|
||||||
+LIBS += -ldwmapi -lversion -lgdi32
|
|
||||||
+QMAKE_USE_PRIVATE += dwrite_1 d2d1_1 d3d11_1 dxgi1_2
|
|
||||||
|
|
||||||
include(../windows/windows.pri)
|
|
||||||
|
|
||||||
diff --git x/qtbase/src/plugins/platforms/platforms.pro y/qtbase/src/plugins/platforms/platforms.pro
|
|
||||||
index e61887618f..b70d8d5996 100644
|
|
||||||
--- x/qtbase/src/plugins/platforms/platforms.pro
|
|
||||||
+++ y/qtbase/src/plugins/platforms/platforms.pro
|
|
||||||
@@ -14,10 +14,10 @@ qtConfig(xcb) {
|
|
||||||
uikit:!watchos: SUBDIRS += ios
|
|
||||||
osx: SUBDIRS += cocoa
|
|
||||||
|
|
||||||
-win32:!winrt: SUBDIRS += windows
|
|
||||||
-winrt: SUBDIRS += winrt
|
|
||||||
+win32:!winrt:qtConfig(direct3d9): SUBDIRS += windows
|
|
||||||
+winrt:qtConfig(direct3d11): SUBDIRS += winrt
|
|
||||||
|
|
||||||
-qtConfig(direct2d) {
|
|
||||||
+qtConfig(direct3d11_1):qtConfig(direct2d1_1):qtConfig(directwrite1) {
|
|
||||||
SUBDIRS += direct2d
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git x/qtbase/src/plugins/platforms/windows/windows.pri y/qtbase/src/plugins/platforms/windows/windows.pri
|
|
||||||
index f4c396f7c5..2f244d8b71 100644
|
|
||||||
--- x/qtbase/src/plugins/platforms/windows/windows.pri
|
|
||||||
+++ y/qtbase/src/plugins/platforms/windows/windows.pri
|
|
||||||
@@ -9,6 +9,8 @@ mingw: LIBS *= -luuid
|
|
||||||
# For the dialog helpers:
|
|
||||||
LIBS += -lshlwapi -lshell32 -ladvapi32
|
|
||||||
|
|
||||||
+QMAKE_USE_PRIVATE += d3d9/nolink
|
|
||||||
+
|
|
||||||
DEFINES *= QT_NO_CAST_FROM_ASCII
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
diff --git x/qtbase/src/plugins/platforms/winrt/winrt.pro y/qtbase/src/plugins/platforms/winrt/winrt.pro
|
|
||||||
index 042b270cff..fc70eba979 100644
|
|
||||||
--- x/qtbase/src/plugins/platforms/winrt/winrt.pro
|
|
||||||
+++ y/qtbase/src/plugins/platforms/winrt/winrt.pro
|
|
||||||
@@ -8,7 +8,8 @@ QT += \
|
|
||||||
|
|
||||||
DEFINES *= QT_NO_CAST_FROM_ASCII __WRL_NO_DEFAULT_LIB__
|
|
||||||
|
|
||||||
-LIBS += -lws2_32 -ld3d11
|
|
||||||
+LIBS += -lws2_32
|
|
||||||
+QMAKE_USE_PRIVATE += d3d11
|
|
||||||
|
|
||||||
SOURCES = \
|
|
||||||
main.cpp \
|
|
||||||
--
|
|
||||||
2.17.0
|
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
diff --git x/qttools/src/linguist/linguist.pro y/qttools/src/linguist/linguist.pro
|
|
||||||
index 103336da..2fe9656d 100644
|
|
||||||
--- x/qttools/src/linguist/linguist.pro
|
|
||||||
+++ y/qttools/src/linguist/linguist.pro
|
|
||||||
@@ -3,11 +3,6 @@ SUBDIRS = \
|
|
||||||
lrelease \
|
|
||||||
lupdate \
|
|
||||||
lconvert
|
|
||||||
-!no-png:qtHaveModule(widgets):qtConfig(process): SUBDIRS += linguist
|
|
||||||
-
|
|
||||||
-qtNomakeTools( \
|
|
||||||
- linguist \
|
|
||||||
-)
|
|
||||||
|
|
||||||
equals(QMAKE_HOST.os, Windows): CMAKE_BIN_SUFFIX = ".exe"
|
|
||||||
|
|
||||||
diff --git x/qttools/src/src.pro y/qttools/src/src.pro
|
|
||||||
index 41064a5d..fcef4dd8 100644
|
|
||||||
--- x/qttools/src/src.pro
|
|
||||||
+++ y/qttools/src/src.pro
|
|
||||||
@@ -3,12 +3,6 @@ TEMPLATE = subdirs
|
|
||||||
qtHaveModule(widgets) {
|
|
||||||
no-png {
|
|
||||||
message("Some graphics-related tools are unavailable without PNG support")
|
|
||||||
- } else {
|
|
||||||
- SUBDIRS = assistant \
|
|
||||||
- pixeltool \
|
|
||||||
- designer
|
|
||||||
-
|
|
||||||
- linguist.depends = designer
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.14.3
|
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
--- x/qtbase/src/plugins/platforms/cocoa/qprintengine_mac_p.h
|
|
||||||
+++ y/qtbase/src/plugins/platforms/cocoa/qprintengine_mac_p.h
|
|
||||||
@@ -52,6 +52,7 @@
|
|
||||||
//
|
|
||||||
|
|
||||||
#include <QtCore/qglobal.h>
|
|
||||||
+#include <qpa/qplatformprintdevice.h>
|
|
||||||
|
|
||||||
#ifndef QT_NO_PRINTER
|
|
||||||
|
|
||||||
--- x/qtbase/src/plugins/plugins.pro
|
|
||||||
+++ y/qtbase/src/plugins/plugins.pro
|
|
||||||
@@ -9,6 +9,3 @@
|
|
||||||
!android:qtConfig(library): SUBDIRS *= generic
|
|
||||||
}
|
|
||||||
qtHaveModule(widgets): SUBDIRS += styles
|
|
||||||
-
|
|
||||||
-!winrt:qtHaveModule(printsupport): \
|
|
||||||
- SUBDIRS += printsupport
|
|
|
@ -25,7 +25,7 @@ IF(TARGET Qt5::Qml)
|
||||||
WRITE_QRC("${ausweisapp_qml.qrc}" "${CMAKE_CURRENT_SOURCE_DIR}/qml" "qml")
|
WRITE_QRC("${ausweisapp_qml.qrc}" "${CMAKE_CURRENT_SOURCE_DIR}/qml" "qml")
|
||||||
LIST(APPEND QRC_FILES "${ausweisapp_qml.qrc}")
|
LIST(APPEND QRC_FILES "${ausweisapp_qml.qrc}")
|
||||||
|
|
||||||
SET(QML_IMPORT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/qml CACHE string "qml files" FORCE)
|
SET(QML_IMPORT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/qml CACHE STRING "qml files" FORCE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
SET(RCC ${CMAKE_BINARY_DIR}/src/${PROJECT_NAME}.rcc)
|
SET(RCC ${CMAKE_BINARY_DIR}/src/${PROJECT_NAME}.rcc)
|
||||||
|
|
|
@ -15,19 +15,9 @@
|
||||||
<file>images/icon_ok.png</file>
|
<file>images/icon_ok.png</file>
|
||||||
<file>images/icon_cancelled.png</file>
|
<file>images/icon_cancelled.png</file>
|
||||||
<file>images/Icon_Checked.svg</file>
|
<file>images/Icon_Checked.svg</file>
|
||||||
<file>images/search.svg</file>
|
|
||||||
<file>images/cancel.svg</file>
|
<file>images/cancel.svg</file>
|
||||||
<file>images/iOS/tabBar/Anbieter-off.png</file>
|
<file>images/check.svg</file>
|
||||||
<file>images/iOS/tabBar/Anbieter-on.png</file>
|
|
||||||
<file>images/iOS/tabBar/Ausweisen-off.png</file>
|
|
||||||
<file>images/iOS/tabBar/Ausweisen-on.png</file>
|
|
||||||
<file>images/iOS/tabBar/Pin-off.png</file>
|
|
||||||
<file>images/iOS/tabBar/Pin-on.png</file>
|
|
||||||
<file>images/iOS/tabBar/Verlauf-off.png</file>
|
|
||||||
<file>images/iOS/tabBar/Verlauf-on.png</file>
|
|
||||||
<file>images/icon_Pin.svg</file>
|
<file>images/icon_Pin.svg</file>
|
||||||
<file>images/iOS/tabBar/More-off.svg</file>
|
|
||||||
<file>images/iOS/tabBar/More-on.svg</file>
|
|
||||||
<file>images/status_error.svg</file>
|
<file>images/status_error.svg</file>
|
||||||
<file>images/status_info.svg</file>
|
<file>images/status_info.svg</file>
|
||||||
<file>images/status_ok.svg</file>
|
<file>images/status_ok.svg</file>
|
||||||
|
@ -38,18 +28,20 @@
|
||||||
<file>images/ausweis.png</file>
|
<file>images/ausweis.png</file>
|
||||||
<file>images/provider/information.svg</file>
|
<file>images/provider/information.svg</file>
|
||||||
<file>images/provider/purpose.svg</file>
|
<file>images/provider/purpose.svg</file>
|
||||||
<file>images/provider/adresse.png</file>
|
<file>images/provider/adresse.svg</file>
|
||||||
<file>images/provider/+tablet/adresse.png</file>
|
<file>images/provider/mail.svg</file>
|
||||||
<file>images/provider/mail.png</file>
|
<file>images/provider/telefon.svg</file>
|
||||||
<file>images/provider/+tablet/mail.png</file>
|
<file>images/provider/url.svg</file>
|
||||||
<file>images/provider/telefon.png</file>
|
|
||||||
<file>images/provider/+tablet/telefon.png</file>
|
|
||||||
<file>images/provider/url.png</file>
|
|
||||||
<file>images/provider/+tablet/url.png</file>
|
|
||||||
<file>images/provider/gradient-citizen.png</file>
|
<file>images/provider/gradient-citizen.png</file>
|
||||||
<file>images/provider/gradient-insurance.png</file>
|
<file>images/provider/gradient-insurance.png</file>
|
||||||
<file>images/provider/gradient-finance.png</file>
|
<file>images/provider/gradient-finance.png</file>
|
||||||
<file>images/provider/gradient-other.png</file>
|
<file>images/provider/gradient-other.png</file>
|
||||||
|
<file>images/provider/categoryIcons/general.svg</file>
|
||||||
|
<file>images/provider/categoryIcons/citizen.svg</file>
|
||||||
|
<file>images/provider/categoryIcons/finance.svg</file>
|
||||||
|
<file>images/provider/categoryIcons/insurance.svg</file>
|
||||||
|
<file>images/provider/categoryIcons/other.svg</file>
|
||||||
|
<file alias="images/provider/categoryIcons/general_bg.svg">images/provider/categoryIcons/+android/general_bg.svg</file>
|
||||||
<file>images/provider/categoryIcons/+android/general.svg</file>
|
<file>images/provider/categoryIcons/+android/general.svg</file>
|
||||||
<file>images/provider/categoryIcons/+android/citizen.svg</file>
|
<file>images/provider/categoryIcons/+android/citizen.svg</file>
|
||||||
<file>images/provider/categoryIcons/+android/finance.svg</file>
|
<file>images/provider/categoryIcons/+android/finance.svg</file>
|
||||||
|
@ -73,7 +65,14 @@
|
||||||
<file>updatable-files/supported-providers.json</file>
|
<file>updatable-files/supported-providers.json</file>
|
||||||
<file>images/icon_nfc.svg</file>
|
<file>images/icon_nfc.svg</file>
|
||||||
<file>images/icon_remote.svg</file>
|
<file>images/icon_remote.svg</file>
|
||||||
|
<file>images/icon_remote_inactive.svg</file>
|
||||||
|
<file>images/icon_remote_0.svg</file>
|
||||||
|
<file>images/icon_remote_25.svg</file>
|
||||||
|
<file>images/icon_remote_50.svg</file>
|
||||||
|
<file>images/icon_remote_75.svg</file>
|
||||||
|
<file>images/icon_remote_100.svg</file>
|
||||||
<file>images/icon_bluetooth.svg</file>
|
<file>images/icon_bluetooth.svg</file>
|
||||||
|
<file>images/phone_to_pc.svg</file>
|
||||||
<file>images/phone_nfc.svg</file>
|
<file>images/phone_nfc.svg</file>
|
||||||
<file>images/phone_remote.svg</file>
|
<file>images/phone_remote.svg</file>
|
||||||
<file>images/phone_bluetooth.svg</file>
|
<file>images/phone_bluetooth.svg</file>
|
||||||
|
@ -82,5 +81,11 @@
|
||||||
<file>images/siteWithLogo.png</file>
|
<file>images/siteWithLogo.png</file>
|
||||||
<file>images/icon_pair.svg</file>
|
<file>images/icon_pair.svg</file>
|
||||||
<file>images/icon_settings.svg</file>
|
<file>images/icon_settings.svg</file>
|
||||||
|
<file>images/trash_icon_white.svg</file>
|
||||||
|
<file>images/trash_icon.svg</file>
|
||||||
|
<file>images/icon_save.svg</file>
|
||||||
|
<file>images/info.svg</file>
|
||||||
|
<file>images/info_filled.svg</file>
|
||||||
|
<file>images/triangle.svg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
@ -13,16 +13,33 @@
|
||||||
<file>images/start_nPA_eAT.png</file>
|
<file>images/start_nPA_eAT.png</file>
|
||||||
<file>images/busy_animation.gif</file>
|
<file>images/busy_animation.gif</file>
|
||||||
<file>images/html_message_section.jpg</file>
|
<file>images/html_message_section.jpg</file>
|
||||||
<file>images/desktop/background.png</file>
|
<file>images/search_icon.svg</file>
|
||||||
|
<file>images/search_cancel.svg</file>
|
||||||
|
<file>images/desktop/bell_white.svg</file>
|
||||||
|
<file>images/desktop/bell_green.svg</file>
|
||||||
|
<file>images/desktop/bell_red.svg</file>
|
||||||
|
<file>images/desktop/id_card.png</file>
|
||||||
|
<file>images/desktop/pin-letter-page1.png</file>
|
||||||
|
<file>images/desktop/pin-letter-page2.png</file>
|
||||||
<file>images/desktop/help_icon.svg</file>
|
<file>images/desktop/help_icon.svg</file>
|
||||||
<file>images/desktop/main_history.svg</file>
|
<file>images/desktop/main_history.svg</file>
|
||||||
<file>images/desktop/main_identify.svg</file>
|
<file>images/desktop/main_identify.svg</file>
|
||||||
|
<file>images/desktop/main_info.svg</file>
|
||||||
<file>images/desktop/main_pin.svg</file>
|
<file>images/desktop/main_pin.svg</file>
|
||||||
<file>images/desktop/main_provider.svg</file>
|
<file>images/desktop/main_provider.svg</file>
|
||||||
<file>images/desktop/sandglass.svg</file>
|
<file>images/desktop/sandglass.svg</file>
|
||||||
<file>images/desktop/settings_icon.svg</file>
|
<file>images/desktop/settings_icon.svg</file>
|
||||||
<file>images/desktop/titlebar_arrow.svg</file>
|
<file>images/desktop/titlebar_arrow.svg</file>
|
||||||
<file>images/desktop/continue_arrow.svg</file>
|
<file>images/desktop/continue_arrow.svg</file>
|
||||||
|
<file>images/desktop/info_questions.svg</file>
|
||||||
|
<file>images/desktop/info_application_log.svg</file>
|
||||||
|
<file>images/desktop/info_diagnosis.svg</file>
|
||||||
|
<file>images/desktop/info_license.svg</file>
|
||||||
|
<file>images/desktop/info_manual.svg</file>
|
||||||
|
<file>images/desktop/info_rate_application.svg</file>
|
||||||
|
<file>images/desktop/info_report_error.svg</file>
|
||||||
|
<file>images/desktop/info_setup.svg</file>
|
||||||
|
<file>images/desktop/info_version.svg</file>
|
||||||
<file>images/randompin/btn_normal_0.png</file>
|
<file>images/randompin/btn_normal_0.png</file>
|
||||||
<file>images/randompin/btn_normal_1.png</file>
|
<file>images/randompin/btn_normal_1.png</file>
|
||||||
<file>images/randompin/btn_normal_2.png</file>
|
<file>images/randompin/btn_normal_2.png</file>
|
||||||
|
@ -37,6 +54,7 @@
|
||||||
<file>images/randompin/btn_ok.png</file>
|
<file>images/randompin/btn_ok.png</file>
|
||||||
<file>images/randompin/btn_cancel.png</file>
|
<file>images/randompin/btn_cancel.png</file>
|
||||||
<file>images/randompin/btn_clear.png</file>
|
<file>images/randompin/btn_clear.png</file>
|
||||||
|
<file>images/reader/default_card_position.png</file>
|
||||||
<file>images/reader/default_more_reader.png</file>
|
<file>images/reader/default_more_reader.png</file>
|
||||||
<file>images/reader/default_no_card.png</file>
|
<file>images/reader/default_no_card.png</file>
|
||||||
<file>images/reader/default_no_reader.png</file>
|
<file>images/reader/default_no_reader.png</file>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<qresource prefix="/">
|
<qresource prefix="/">
|
||||||
<file>qtquickcontrols2.conf</file>
|
<file>qtquickcontrols2.conf</file>
|
||||||
<file>images/zahnraeder.svg</file>
|
<file>images/zahnraeder.svg</file>
|
||||||
<file>images/check.svg</file>
|
<file>images/arrowLeft.svg</file>
|
||||||
<file>images/arrowRight.svg</file>
|
<file>images/arrowRight.svg</file>
|
||||||
<file>images/share.svg</file>
|
<file>images/share.svg</file>
|
||||||
<file>images/android/navigation/ausweisen.svg</file>
|
<file>images/android/navigation/ausweisen.svg</file>
|
||||||
|
@ -15,20 +15,27 @@
|
||||||
<file>images/android/navigation/support.svg</file>
|
<file>images/android/navigation/support.svg</file>
|
||||||
<file>images/android/navigation/bewerten.svg</file>
|
<file>images/android/navigation/bewerten.svg</file>
|
||||||
<file>images/android/navigation/tutorial.svg</file>
|
<file>images/android/navigation/tutorial.svg</file>
|
||||||
|
<file>images/android/search_icon.svg</file>
|
||||||
<file>images/iOS/search_icon.svg</file>
|
<file>images/iOS/search_icon.svg</file>
|
||||||
<file>images/iOS/search_cancel.svg</file>
|
<file>images/iOS/search_cancel.svg</file>
|
||||||
|
<file>images/iOS/more/icon_mehr_npa.svg</file>
|
||||||
<file>images/iOS/more/icon_mehr_favorit.svg</file>
|
<file>images/iOS/more/icon_mehr_favorit.svg</file>
|
||||||
<file>images/iOS/more/icon_mehr_fragen.svg</file>
|
<file>images/iOS/more/icon_mehr_fragen.svg</file>
|
||||||
<file>images/iOS/more/icon_mehr_info.svg</file>
|
<file>images/iOS/more/icon_mehr_info.svg</file>
|
||||||
<file>images/iOS/more/icon_mehr_license.svg</file>
|
<file>images/iOS/more/icon_mehr_license.svg</file>
|
||||||
<file>images/iOS/more/icon_mehr_remotereader.svg</file>
|
<file>images/iOS/more/icon_mehr_verlauf.svg</file>
|
||||||
<file>images/iOS/more/icon_mehr_upload.svg</file>
|
<file>images/iOS/more/icon_mehr_upload.svg</file>
|
||||||
<file>images/iOS/more/icon_mehr_log.svg</file>
|
<file>images/iOS/more/icon_mehr_log.svg</file>
|
||||||
<file>images/iOS/more/icon_mehr_tutorial.svg</file>
|
<file>images/iOS/more/icon_mehr_tutorial.svg</file>
|
||||||
|
<file>images/iOS/more/icon_mehr_report.svg</file>
|
||||||
<file>images/tutorial/main_menu_what_caret.svg</file>
|
<file>images/tutorial/main_menu_what_caret.svg</file>
|
||||||
<file>images/tutorial/main_menu_where_caret.svg</file>
|
<file>images/tutorial/main_menu_where_caret.svg</file>
|
||||||
<file>images/tutorial/main_menu_how_caret.svg</file>
|
<file>images/tutorial/main_menu_how_caret.svg</file>
|
||||||
<file>images/tutorial/main_menu_important_caret.svg</file>
|
<file>images/tutorial/main_menu_important_caret.svg</file>
|
||||||
|
<file>images/tutorial/icon_box.svg</file>
|
||||||
|
<file>images/tutorial/icon_circle.svg</file>
|
||||||
|
<file>images/tutorial/icon_diamond.svg</file>
|
||||||
|
<file>images/tutorial/icon_star.svg</file>
|
||||||
<file>images/tutorial/arrow_blue.svg</file>
|
<file>images/tutorial/arrow_blue.svg</file>
|
||||||
<file>images/tutorial/arrows.svg</file>
|
<file>images/tutorial/arrows.svg</file>
|
||||||
<file>images/tutorial/button_de.png</file>
|
<file>images/tutorial/button_de.png</file>
|
||||||
|
@ -40,6 +47,7 @@
|
||||||
<file>images/tutorial/thumb_up.svg</file>
|
<file>images/tutorial/thumb_up.svg</file>
|
||||||
<file>images/tutorial/hand.svg</file>
|
<file>images/tutorial/hand.svg</file>
|
||||||
<file>images/tutorial/check.svg</file>
|
<file>images/tutorial/check.svg</file>
|
||||||
|
<file>images/tutorial/cross.svg</file>
|
||||||
<file>images/tutorial/click.svg</file>
|
<file>images/tutorial/click.svg</file>
|
||||||
<file>images/tutorial/save.svg</file>
|
<file>images/tutorial/save.svg</file>
|
||||||
<file>images/tutorial/bva.svg</file>
|
<file>images/tutorial/bva.svg</file>
|
||||||
|
@ -75,27 +83,37 @@
|
||||||
<file>images/tutorial/user-tine@3x.png</file>
|
<file>images/tutorial/user-tine@3x.png</file>
|
||||||
<file>images/tutorial/providericons.png</file>
|
<file>images/tutorial/providericons.png</file>
|
||||||
<file>images/tutorial/play_movie.png</file>
|
<file>images/tutorial/play_movie.png</file>
|
||||||
<file>images/tutorial/screenshot_cert_de.png</file>
|
<file>images/tutorial/screenshot_cert_android_de.png</file>
|
||||||
<file>images/tutorial/screenshot_cert_en.png</file>
|
<file>images/tutorial/screenshot_cert_android_en.png</file>
|
||||||
<file>images/tutorial/screenshot_providerlist_de.png</file>
|
<file>images/tutorial/screenshot_cert_ios_de.png</file>
|
||||||
<file>images/tutorial/screenshot_providerlist_en.png</file>
|
<file>images/tutorial/screenshot_cert_ios_en.png</file>
|
||||||
<file>images/tutorial/screenshot_menu_providerlist_de.png</file>
|
<file>images/tutorial/screenshot_providerlist_android_de.png</file>
|
||||||
<file>images/tutorial/screenshot_menu_providerlist_en.png</file>
|
<file>images/tutorial/screenshot_providerlist_android_en.png</file>
|
||||||
|
<file>images/tutorial/screenshot_providerlist_ios_de.png</file>
|
||||||
|
<file>images/tutorial/screenshot_providerlist_ios_en.png</file>
|
||||||
|
<file>images/tutorial/screenshot_remoteservice_ios_en.png</file>
|
||||||
|
<file>images/tutorial/screenshot_remoteservice_ios_de.png</file>
|
||||||
|
<file>images/tutorial/screenshot_menu_providerlist_android_de.png</file>
|
||||||
|
<file>images/tutorial/screenshot_menu_providerlist_android_en.png</file>
|
||||||
<file>images/tutorial/screenshot_pairing_de.png</file>
|
<file>images/tutorial/screenshot_pairing_de.png</file>
|
||||||
<file>images/tutorial/screenshot_pairing_en.png</file>
|
<file>images/tutorial/screenshot_pairing_en.png</file>
|
||||||
<file>images/tutorial/screenshot_sac_menu_de.png</file>
|
<file>images/tutorial/screenshot_sac_menu_android_de.png</file>
|
||||||
<file>images/tutorial/screenshot_sac_menu_en.png</file>
|
<file>images/tutorial/screenshot_sac_menu_android_en.png</file>
|
||||||
<file>images/tutorial/screenshot_choose_reader_de.png</file>
|
<file>images/tutorial/screenshot_choose_reader_android_de.png</file>
|
||||||
<file>images/tutorial/screenshot_choose_reader_en.png</file>
|
<file>images/tutorial/screenshot_choose_reader_android_en.png</file>
|
||||||
<file>images/tutorial/screenshot_pin_management_menu_en.png</file>
|
<file>images/tutorial/screenshot_choose_reader_ios_de.png</file>
|
||||||
<file>images/tutorial/screenshot_pin_management_menu_de.png</file>
|
<file>images/tutorial/screenshot_choose_reader_ios_en.png</file>
|
||||||
|
<file>images/tutorial/screenshot_pin_management_menu_android_en.png</file>
|
||||||
|
<file>images/tutorial/screenshot_pin_management_menu_android_de.png</file>
|
||||||
|
<file>images/tutorial/screenshot_pin_management_menu_ios_en.png</file>
|
||||||
|
<file>images/tutorial/screenshot_pin_management_menu_ios_de.png</file>
|
||||||
<file>images/tutorial/section_seperator_what.svg</file>
|
<file>images/tutorial/section_seperator_what.svg</file>
|
||||||
<file>images/tutorial/section_seperator_where.svg</file>
|
<file>images/tutorial/section_seperator_where.svg</file>
|
||||||
<file>images/tutorial/section_seperator_how.svg</file>
|
<file>images/tutorial/section_seperator_how.svg</file>
|
||||||
<file>images/tutorial/section_seperator_important.svg</file>
|
<file>images/tutorial/section_seperator_important.svg</file>
|
||||||
<file>images/tutorial/generated/where_overview_question.svg</file>
|
<file>images/tutorial/generated/where_overview_question.svg</file>
|
||||||
<file>images/tutorial/generated/where_providerlist_screenshot_de.svg</file>
|
<file>images/tutorial/generated/where_providerlist_screenshot_android_de.svg</file>
|
||||||
<file>images/tutorial/generated/where_providerlist_screenshot_en.svg</file>
|
<file>images/tutorial/generated/where_providerlist_screenshot_android_en.svg</file>
|
||||||
<file>images/tutorial/generated/where_identify_now_de.svg</file>
|
<file>images/tutorial/generated/where_identify_now_de.svg</file>
|
||||||
<file>images/tutorial/generated/where_identify_now_en.svg</file>
|
<file>images/tutorial/generated/where_identify_now_en.svg</file>
|
||||||
<file>images/tutorial/generated/where_userdata_example_de.svg</file>
|
<file>images/tutorial/generated/where_userdata_example_de.svg</file>
|
||||||
|
@ -124,18 +142,14 @@
|
||||||
<file>images/tutorial/generated/reader_sac_provider_on_laptop.svg</file>
|
<file>images/tutorial/generated/reader_sac_provider_on_laptop.svg</file>
|
||||||
<file>images/tutorial/generated/reader_sac_npa_on_laptop.svg</file>
|
<file>images/tutorial/generated/reader_sac_npa_on_laptop.svg</file>
|
||||||
<file>images/tutorial/generated/reader_sac_aa2_ok.svg</file>
|
<file>images/tutorial/generated/reader_sac_aa2_ok.svg</file>
|
||||||
<file>images/tutorial/generated/reader_sac_menu_de.svg</file>
|
<file>images/tutorial/generated/reader_sac_menu_android_de.svg</file>
|
||||||
<file>images/tutorial/generated/reader_sac_menu_en.svg</file>
|
<file>images/tutorial/generated/reader_sac_menu_android_en.svg</file>
|
||||||
|
<file>images/tutorial/generated/reader_sac_menu_ios_de.svg</file>
|
||||||
|
<file>images/tutorial/generated/reader_sac_menu_ios_en.svg</file>
|
||||||
<file>images/tutorial/generated/reader_sac_no_nfc_devices.svg</file>
|
<file>images/tutorial/generated/reader_sac_no_nfc_devices.svg</file>
|
||||||
<file>images/tutorial/generated/reader_sac_no_nfc_provider.svg</file>
|
<file>images/tutorial/generated/reader_sac_no_nfc_provider.svg</file>
|
||||||
<file>images/tutorial/generated/reader_bluetooth_card_inserted.svg</file>
|
<file>images/tutorial/generated/reader_bluetooth_card_inserted.svg</file>
|
||||||
<file>images/tutorial/generated/reader_bluetooth_connection.svg</file>
|
<file>images/tutorial/generated/reader_bluetooth_connection.svg</file>
|
||||||
<file>images/provider/categoryIcons/general.svg</file>
|
|
||||||
<file>images/provider/categoryIcons/citizen.svg</file>
|
|
||||||
<file>images/provider/categoryIcons/finance.svg</file>
|
|
||||||
<file>images/provider/categoryIcons/insurance.svg</file>
|
|
||||||
<file>images/provider/categoryIcons/other.svg</file>
|
|
||||||
<file alias="images/provider/categoryIcons/general_bg.svg">images/provider/categoryIcons/+android/general_bg.svg</file>
|
|
||||||
<file alias="images/provider/categoryIcons/general_button.svg">images/provider/categoryIcons/+android/general_button.svg</file>
|
<file alias="images/provider/categoryIcons/general_button.svg">images/provider/categoryIcons/+android/general_button.svg</file>
|
||||||
<file alias="images/provider/categoryIcons/citizen_bg.svg">images/provider/categoryIcons/+android/citizen_bg.svg</file>
|
<file alias="images/provider/categoryIcons/citizen_bg.svg">images/provider/categoryIcons/+android/citizen_bg.svg</file>
|
||||||
<file alias="images/provider/categoryIcons/citizen_button.svg">images/provider/categoryIcons/+android/citizen_button.svg</file>
|
<file alias="images/provider/categoryIcons/citizen_button.svg">images/provider/categoryIcons/+android/citizen_button.svg</file>
|
||||||
|
@ -145,10 +159,12 @@
|
||||||
<file alias="images/provider/categoryIcons/insurance_button.svg">images/provider/categoryIcons/+android/insurance_button.svg</file>
|
<file alias="images/provider/categoryIcons/insurance_button.svg">images/provider/categoryIcons/+android/insurance_button.svg</file>
|
||||||
<file alias="images/provider/categoryIcons/other_bg.svg">images/provider/categoryIcons/+android/other_bg.svg</file>
|
<file alias="images/provider/categoryIcons/other_bg.svg">images/provider/categoryIcons/+android/other_bg.svg</file>
|
||||||
<file alias="images/provider/categoryIcons/other_button.svg">images/provider/categoryIcons/+android/other_button.svg</file>
|
<file alias="images/provider/categoryIcons/other_button.svg">images/provider/categoryIcons/+android/other_button.svg</file>
|
||||||
<file>images/phone_to_pc.svg</file>
|
|
||||||
<file>images/android/navigation/remotesettings.svg</file>
|
<file>images/android/navigation/remotesettings.svg</file>
|
||||||
<file>images/trash_icon.svg</file>
|
|
||||||
<file>images/trash_icon_all.svg</file>
|
<file>images/trash_icon_all.svg</file>
|
||||||
<file>images/trash_icon_white.svg</file>
|
<file>images/iOS/tabBar/anbieter.svg</file>
|
||||||
|
<file>images/iOS/tabBar/ausweisen.svg</file>
|
||||||
|
<file>images/iOS/tabBar/more.svg</file>
|
||||||
|
<file>images/iOS/tabBar/pin.svg</file>
|
||||||
|
<file>images/iOS/tabBar/remoteleser.svg</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
"DETESTeID00002_DETESTeID00004",
|
"DETESTeID00002_DETESTeID00004",
|
||||||
"DETESTeID00001_DETESTeID00002",
|
"DETESTeID00001_DETESTeID00002",
|
||||||
"DETESTeID00001",
|
"DETESTeID00001",
|
||||||
|
"DECVCAeIDCTL0402_DECVCAeIDCTL0403",
|
||||||
"DECVCAeIDCTL0401_DECVCAeIDCTL0402",
|
"DECVCAeIDCTL0401_DECVCAeIDCTL0402",
|
||||||
"DECVCAeIDCT00001_DECVCAeIDCTL0401",
|
"DECVCAeIDCT00001_DECVCAeIDCTL0401",
|
||||||
"DECVCAeIDCT00001_DECVCAeIDCT00001"
|
"DECVCAeIDCT00001_DECVCAeIDCT00001"
|
||||||
|
@ -32,15 +33,16 @@
|
||||||
"7F218201B67F4E82016E5F290100420E44455445535465494430303030327F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A786410474FF63AB838C73C303AC003DFEE95CF8BF55F91E8FEBCB7395D942036E47CF1845EC786EC95BB453AAC288AD023B6067913CF9B63F908F49304E5CFC8B3050DD8701015F200E44455445535465494430303030347F4C12060904007F0007030102025305FC0F13FFFF5F25060102000501015F24060105000501015F37405C035A0611B6C58F0B5261FDD009DECAB7DC7A79482D5248CCA119059B7D82B2157CF0C4A499BCF441EFDD35E294A58C0AF19A34A0762159533285ACF170A505",
|
"7F218201B67F4E82016E5F290100420E44455445535465494430303030327F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A786410474FF63AB838C73C303AC003DFEE95CF8BF55F91E8FEBCB7395D942036E47CF1845EC786EC95BB453AAC288AD023B6067913CF9B63F908F49304E5CFC8B3050DD8701015F200E44455445535465494430303030347F4C12060904007F0007030102025305FC0F13FFFF5F25060102000501015F24060105000501015F37405C035A0611B6C58F0B5261FDD009DECAB7DC7A79482D5248CCA119059B7D82B2157CF0C4A499BCF441EFDD35E294A58C0AF19A34A0762159533285ACF170A505",
|
||||||
"7F218201B67F4E82016E5F290100420E44455445535465494430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104096EB58BFD86252238EC2652185C43C3A56C320681A21E37A8E69DDC387C0C5F5513856EFE2FDC656E604893212E29449B365E304605AC5413E75BE31E641F128701015F200E44455445535465494430303030327F4C12060904007F0007030102025305FE0F01FFFF5F25060100000902015F24060103000902015F3740141120A0FDFC011A52F3F72B387A3DC7ACA88B4868D5AE9741780B6FF8A0B49E5F55169A2D298EF5CF95935DCA0C3DF3E9D42DC45F74F2066317154961E6C746",
|
"7F218201B67F4E82016E5F290100420E44455445535465494430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104096EB58BFD86252238EC2652185C43C3A56C320681A21E37A8E69DDC387C0C5F5513856EFE2FDC656E604893212E29449B365E304605AC5413E75BE31E641F128701015F200E44455445535465494430303030327F4C12060904007F0007030102025305FE0F01FFFF5F25060100000902015F24060103000902015F3740141120A0FDFC011A52F3F72B387A3DC7ACA88B4868D5AE9741780B6FF8A0B49E5F55169A2D298EF5CF95935DCA0C3DF3E9D42DC45F74F2066317154961E6C746",
|
||||||
"7F218201B67F4E82016E5F290100420E44455445535465494430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104184BB519FC2A8F52DC0DC73112FACFE914F2A49B678DD5799A2B1DFE95E1A66359014E22FA8D66438413CEBA6CF0E215576B673376BF617AF4DFE9761D2290148701015F200E44455445535465494430303030317F4C12060904007F0007030102025305FE0F01FFFF5F25060100000801035F24060103000801035F37409F25EBFAF4B91E4C60A1683754C5DC076A3179753EF97D9F8CB01FE1DCD3B8C83E7A26602AB1F344BE5706006D79A9FF6A9716404DC83B9F30E1213B393128A2",
|
"7F218201B67F4E82016E5F290100420E44455445535465494430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104184BB519FC2A8F52DC0DC73112FACFE914F2A49B678DD5799A2B1DFE95E1A66359014E22FA8D66438413CEBA6CF0E215576B673376BF617AF4DFE9761D2290148701015F200E44455445535465494430303030317F4C12060904007F0007030102025305FE0F01FFFF5F25060100000801035F24060103000801035F37409F25EBFAF4B91E4C60A1683754C5DC076A3179753EF97D9F8CB01FE1DCD3B8C83E7A26602AB1F344BE5706006D79A9FF6A9716404DC83B9F30E1213B393128A2",
|
||||||
"7F218201BA7F4E8201725F290100421044454356434165494443544C303430317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641043EE15015916563E31459045924DE804C1D93A77652AA25D0B753730DBA3233886A9A9B28A06AF84CC5A40F78E9167CA40B8098724A3A0332283D0A52C5453FE08701015F201044454356434165494443544C303430327F4C12060904007F0007030102025305FE1FFFFFFF5F25060106000300015F24060109000300015F374068261CEB4DC915301371C9B273377F33CEB25AFA07E70EDB3498ACF0327DC13B9AF99A9D694A6D048F0DB6FF1774E882CA8F41C8A0B96FDDF6F6DDABFD55CB43",
|
"7F218201BA7F4E8201725F290100421044454356434165494443544C303430327F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641040DC10C2E105D1CFC84CCDAB7AC0A37F161234D9F5549D83FD29E1D3B3A1455DC5F5464FE69E7B1F18F57AD6A0BBB3B2F673A356B3AC8AB525A96A78E71EC20B38701015F201044454356434165494443544C303430337F4C12060904007F0007030102025305FE1FFFFFFF5F25060108000900025F24060201000900015F37407D738AA07BBC24E4969ABC424CC75B1BBE9F4A8AEB497544516F32D2284A6F785BFC630BE9C6D96C6DE8FFF377FE68A3950DE140953DEFAFADA92A201774C0BB",
|
||||||
"7F218201BA7F4E8201725F2901004210444543564341654944435430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641042C037C6CF8C0B62E36E220B7D411404AF248A2C83C569A49FAB02FC232D2395B3A5FF80DDB01D0DFAFCEF55E54ACCBA4C56E528F0746BEF1108E7D9B0122EBA78701015F201044454356434165494443544C303430317F4C12060904007F0007030102025305FE1FFFFFFF5F25060106000300015F24060109000300015F37404FB2F9F17D38656EEC2846CBB1711E07D739E6A584D487B3AFBA5C723C73A10236995E6A19499DE941DFE3CC044E2AACB6B5869C0E46C9585AEF892E2236F62E",
|
"7F218201BA7F4E8201725F290100421044454356434165494443544C303430317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641044EDF23187A2E4535AB7AA3C29AD43E3ACFB7C38230CCC7B705829E60DE14946D7A0257527E1488D9EBB967D5734FCBCFBA3A1085798AFA7883FDAF88605A46008701015F201044454356434165494443544C303430327F4C12060904007F0007030102025305FE1FFFFFFF5F25060108000900025F24060201000900015F3740A2CC27745E141CE871645178F5D8B55B9ECAA690A7975EF7AB518145D9CE9FA31C326F923EDDC6AD58CF0E644CDF86FC2EAF4D059B0598C2CEB6C713D825CD69",
|
||||||
"7F218201BA7F4E8201725F2901004210444543564341654944435430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7864104206160B85B82B2BE249DCD7B15FD1AD46CA03F39FE675C07535806E57CE24349392BBB9F73B364672F12243F18083DCC49ACA613767F0873AEB60715FC605A288701015F2010444543564341654944435430303030317F4C12060904007F0007030102025305FE1FFFFFFF5F25060106000300015F24060109000300015F37402B62927D46BF675DB387FC4A425FF3B604B20DD5ED6FFCDAFA9DA1DD920DC996245B358167C66A721DF39C6897864E4D648746339A97D22D08659885F92BDE21"
|
"7F218201BA7F4E8201725F2901004210444543564341654944435430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641048A50D5902E9E63D103974E9FBE1D7E61BA186585E2A12A4643FFA57DFF0613FE213A7C3793C8C5C6C095224DDCA409AFE92998E3F372D826AD008FC6A0981DE18701015F201044454356434165494443544C303430317F4C12060904007F0007030102025305FE1FFFFFFF5F25060108000900025F24060201000900015F3740767C88881693C2AA936EC55FC0104EFF92FAD1AB9B1CF26ECCFA49AE98E9F9EA5BDD60AFFA6FFC6526AFE47BB6897E67241F2170A51F635EBC8AA8414748562C",
|
||||||
|
"7F218201BA7F4E8201725F2901004210444543564341654944435430303030317F4982011D060A04007F000702020202038120A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E537782207D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9832026DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B68441048BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F0469978520A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A78641041A47FE0DA706867F877AB071E8867778EDB6E7C12B13FA13ED93D54C86A44E3BA9F93D1B978B54841202B14A924BBA1A56C76B9E596614C66A9D2CBCDC8B29B18701015F2010444543564341654944435430303030317F4C12060904007F0007030102025305FE1FFFFFFF5F25060108000900025F24060201000900015F37407CDC52ADB660CC0EB56841EF9D5773DDE84A5581853CCF3DCF24D555C2FDE8F31D2128B5D6A0A528BF07CFDA005DBCACFFCDB14755BB132E47CFA0E34233A290"
|
||||||
],
|
],
|
||||||
|
|
||||||
"_comment_5": "array of certificates for checking the authenticity of updates; DER format, hex encoded",
|
"_comment_5": "array of certificates for checking the authenticity of updates; DER format, hex encoded",
|
||||||
"updateCertificates": [
|
"updateCertificates": [
|
||||||
"3082083a30820722a003020102020900d5b6a4dc1fd8854a300d06092a864886f70d01010b05003081df310b300906035504061302444531253023060355040a0c1c542d53797374656d7320496e7465726e6174696f6e616c20476d6248311f301d060355040b0c16542d53797374656d732054727573742043656e746572311c301a06035504080c134e6f7264726865696e205765737466616c656e310e300c06035504110c0535373235303110300e06035504070c074e65747068656e3120301e06035504090c17556e7465726520496e647573747269657374722e2032303126302406035504030c1d54656c65536563205365727665725061737320436c6173732032204341301e170d3137313230313130343733325a170d3230313230363233353935395a308180310b30090603550406130244453121301f060355040a0c18476f7665726e696b757320476d6248202620436f2e204b47310b3009060355040b13025345310f300d060355040813064272656d656e310f300d060355040713064272656d656e311f301d060355040313166170706c2e676f7665726e696b75732d6173702e646530820222300d06092a864886f70d01010105000382020f003082020a0282020100c1d969514392105ce65b089b7357f75356f076b21168233d1eb57ae81f826c74258ec4814c48a3e99633fcac1fb444412cba421c1569d21b6317b6614b096203ab5b605128671764d30186dec09716d2173bfab911a9ad3d2d0b850ff2595dd9c72113bd64879c39c39b3debbfdd7f8d68e8d1bdaf2cca0508583bd59b965ec5f4950e4fbbe48b7be351237d478253bc34ac5aed9448f5ae31878067bdad75179cb776ef19f8e49e62b830de8279142233030189c20008345553847b7edc6471bf7c15c98b087159b44faa5a35fe16adc285e4d8266fab49b7b4e7fbcbd91767e05dbb45a5564cb11abcbeb0ff66869ca72dd7919eae796340fb5b26fb8ecc65b8380d3eb30e46150725e2156ad156773a79b482133b846b247868a6d3fcc18f96cfc6044fb7678fd79c04fb580b7bfb86e3252554b9a97dfd6fb9ae0e0d8d663a56b471d37752fc88a172151494553d78a39ade4669076e5ddfa13fd684b7eb800efedf9af8f90d4bab6d80378b950d43ef6de6f9ca5dccb81ecbbf820126d90923c5b87462af2acf0fc460599b2d7022e488f20069e2b3e80e057ebbd1454891929c2e0252688a1c0e801eb8bec795251087a755a6edcd22759a5c1869550d63b0596cb5ac20a7e5cb11f5412598990092cbe058b4ec67b98dd9ed2b2a5f8b7994e92b89a1ef51517beb2e2594cb8007d514f988968c52246a18945fba0adf0203010001a382035430820350301f0603551d2304183016801494c87446f53ab4464826f82bca341e5626041200300e0603551d0f0101ff0404030205a0301d0603551d250416301406082b0601050507030206082b06010505070301301d0603551d0e041604148c76a1377b9cad8059a5d4126a53bc633671ca1c305a0603551d20045330513045060a2b06010401bd470d17013037303506082b060105050702011629687474703a2f2f7777772e74656c657365632e64652f736572766572706173732f6370732e68746d6c3008060667810c010202308201030603551d1f0481fb3081f83040a03ea03c863a687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f726c2f536572766572506173735f436c6173735f322e63726c3081b3a081b0a081ad8681aa6c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f434e3d54656c6553656325323053657276657250617373253230436c6173732532303225323043412c4f553d542d53797374656d73253230547275737425323043656e7465722c4f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c433d44453f43657274696669636174655265766f636174696f6e4c6973743082014906082b060105050701010482013b30820137303306082b060105050730018627687474703a2f2f6f6373702e736572766572706173732e74656c657365632e64652f6f63737072305206082b060105050730028646687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f6372742f54656c655365635f536572766572506173735f436c6173735f325f43412e6365723081ab06082b0601050507300286819e6c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f434e3d54656c6553656325323053657276657250617373253230436c6173732532303225323043412c4f553d542d53797374656d73253230547275737425323043656e7465722c4f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c433d44453f63414365727469666963617465300c0603551d130101ff0402300030210603551d11041a301882166170706c2e676f7665726e696b75732d6173702e6465300d06092a864886f70d01010b050003820101006376f829a32345d2d590176bf2294d9ab6fe44e6c7db3b467bd597eebda4121d6e8795ec33de253ff9f271857c4a1ddf4b80b080464a51741a53de5137be13fc482e41b3649afbb571bfec2a894022d933ca60c691a99f31fe40209e7ca2e7fcd15d33baf8c1d20e107750cbd8628bc883af062a622f29c36574decaf97ef00471bbbe81380042ab82e46788491e4f77e58168f154d5210748263bfb8b2c3c82937436f758e1b2360c22458803a304eb90a4617bdcaa591176f4002e63dce3c9a3c7dcec83472dec70346544105118227fce63bae6a6686950846f65f30de621c1e5d6b7b20f3ce7d8ebbd95667c89123adb9efcbdd5ea1ba6e71b152bea43d3",
|
"3082083a30820722a003020102020900d5b6a4dc1fd8854a300d06092a864886f70d01010b05003081df310b300906035504061302444531253023060355040a0c1c542d53797374656d7320496e7465726e6174696f6e616c20476d6248311f301d060355040b0c16542d53797374656d732054727573742043656e746572311c301a06035504080c134e6f7264726865696e205765737466616c656e310e300c06035504110c0535373235303110300e06035504070c074e65747068656e3120301e06035504090c17556e7465726520496e647573747269657374722e2032303126302406035504030c1d54656c65536563205365727665725061737320436c6173732032204341301e170d3137313230313130343733325a170d3230313230363233353935395a308180310b30090603550406130244453121301f060355040a0c18476f7665726e696b757320476d6248202620436f2e204b47310b3009060355040b13025345310f300d060355040813064272656d656e310f300d060355040713064272656d656e311f301d060355040313166170706c2e676f7665726e696b75732d6173702e646530820222300d06092a864886f70d01010105000382020f003082020a0282020100c1d969514392105ce65b089b7357f75356f076b21168233d1eb57ae81f826c74258ec4814c48a3e99633fcac1fb444412cba421c1569d21b6317b6614b096203ab5b605128671764d30186dec09716d2173bfab911a9ad3d2d0b850ff2595dd9c72113bd64879c39c39b3debbfdd7f8d68e8d1bdaf2cca0508583bd59b965ec5f4950e4fbbe48b7be351237d478253bc34ac5aed9448f5ae31878067bdad75179cb776ef19f8e49e62b830de8279142233030189c20008345553847b7edc6471bf7c15c98b087159b44faa5a35fe16adc285e4d8266fab49b7b4e7fbcbd91767e05dbb45a5564cb11abcbeb0ff66869ca72dd7919eae796340fb5b26fb8ecc65b8380d3eb30e46150725e2156ad156773a79b482133b846b247868a6d3fcc18f96cfc6044fb7678fd79c04fb580b7bfb86e3252554b9a97dfd6fb9ae0e0d8d663a56b471d37752fc88a172151494553d78a39ade4669076e5ddfa13fd684b7eb800efedf9af8f90d4bab6d80378b950d43ef6de6f9ca5dccb81ecbbf820126d90923c5b87462af2acf0fc460599b2d7022e488f20069e2b3e80e057ebbd1454891929c2e0252688a1c0e801eb8bec795251087a755a6edcd22759a5c1869550d63b0596cb5ac20a7e5cb11f5412598990092cbe058b4ec67b98dd9ed2b2a5f8b7994e92b89a1ef51517beb2e2594cb8007d514f988968c52246a18945fba0adf0203010001a382035430820350301f0603551d2304183016801494c87446f53ab4464826f82bca341e5626041200300e0603551d0f0101ff0404030205a0301d0603551d250416301406082b0601050507030206082b06010505070301301d0603551d0e041604148c76a1377b9cad8059a5d4126a53bc633671ca1c305a0603551d20045330513045060a2b06010401bd470d17013037303506082b060105050702011629687474703a2f2f7777772e74656c657365632e64652f736572766572706173732f6370732e68746d6c3008060667810c010202308201030603551d1f0481fb3081f83040a03ea03c863a687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f726c2f536572766572506173735f436c6173735f322e63726c3081b3a081b0a081ad8681aa6c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f434e3d54656c6553656325323053657276657250617373253230436c6173732532303225323043412c4f553d542d53797374656d73253230547275737425323043656e7465722c4f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c433d44453f43657274696669636174655265766f636174696f6e4c6973743082014906082b060105050701010482013b30820137303306082b060105050730018627687474703a2f2f6f6373702e736572766572706173732e74656c657365632e64652f6f63737072305206082b060105050730028646687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f6372742f54656c655365635f536572766572506173735f436c6173735f325f43412e6365723081ab06082b0601050507300286819e6c6461703a2f2f6c6461702e736572766572706173732e74656c657365632e64652f434e3d54656c6553656325323053657276657250617373253230436c6173732532303225323043412c4f553d542d53797374656d73253230547275737425323043656e7465722c4f3d542d53797374656d73253230496e7465726e6174696f6e616c253230476d62482c433d44453f63414365727469666963617465300c0603551d130101ff0402300030210603551d11041a301882166170706c2e676f7665726e696b75732d6173702e6465300d06092a864886f70d01010b050003820101006376f829a32345d2d590176bf2294d9ab6fe44e6c7db3b467bd597eebda4121d6e8795ec33de253ff9f271857c4a1ddf4b80b080464a51741a53de5137be13fc482e41b3649afbb571bfec2a894022d933ca60c691a99f31fe40209e7ca2e7fcd15d33baf8c1d20e107750cbd8628bc883af062a622f29c36574decaf97ef00471bbbe81380042ab82e46788491e4f77e58168f154d5210748263bfb8b2c3c82937436f758e1b2360c22458803a304eb90a4617bdcaa591176f4002e63dce3c9a3c7dcec83472dec70346544105118227fce63bae6a6686950846f65f30de621c1e5d6b7b20f3ce7d8ebbd95667c89123adb9efcbdd5ea1ba6e71b152bea43d3",
|
||||||
"308205633082044ba00302010202135100000749e339b5a8a2ecb8e8000000000749300d06092a864886f70d01010b0500304431153013060a0992268993f22c64011916056c6f63616c31153013060a0992268993f22c6401191605626f736b67311430120603550403130b676f766b67726f6f746361301e170d3136313232393039343930325a170d3138313232393039353930325a307c310b3009060355040613024445310b3009060355040813024445310f300d060355040713064272656d656e31163014060355040a130d476f7665726e696b7573204b47311c301a060355040b131353797374656d7320456e67696e656572696e6731193017060355040314102a2e74662e626f732d746573742e646530820122300d06092a864886f70d01010105000382010f003082010a0282010100c2ce4b611d136b4a99f43bd6487c323f812f00c433ed7ec3d343b93c1b064ba12ff3f950634bbba55283ea48bf91d3a6736ee17c3467918b22d9ba1d55f9b8593461b42ed54454d15577abe0ec286203c4c33a82aae8216c802f8f81f1d06473f85acbf6ba69357828030a97086aa1bc6836cae3916d2d83f24c153a05402e13828a30822e7a861395be7d7c511b84baf4bc4a5daeb3db755b37e8ffb5dd18f8ac22c018801e212ab59b96e64b85c3d418c577c33ef73cc0ba5fef68041ba39fa0b795e7b5eabfa408c36ca582572ca2adde4cd104ccad376eaa06b41e737121f349eedb063438b406bd32dc032659e9cbad809afb5679d8a7d776a916ead35b0203010001a382021430820210300e0603551d0f0101ff0404030205a030130603551d25040c300a06082b0601050507030130240603551d11041d301b82102a2e74662e626f732d746573742e646582012a87040ad2f861301d0603551d0e04160414262451b4431de1ccdb523d93038d7e01c4a3d153301f0603551d230418301680144b7e48a7b2f2db121642634bcd7e1c0deee96285303b0603551d1f043430323030a02ea02c862a687474703a2f2f676f7663726c2e676f7665726e696b75732e64652f63726c2f7265766f6b652e63726c3081eb06082b060105050701010481de3081db3081aa06082b0601050507300286819d6c6461703a2f2f2f434e3d676f766b67726f6f7463612c434e3d4149412c434e3d5075626c69632532304b657925323053657276696365732c434e3d53657276696365732c434e3d436f6e66696775726174696f6e2c44433d626f736b672c44433d6c6f63616c3f634143657274696669636174653f626173653f6f626a656374436c6173733d63657274696669636174696f6e417574686f72697479302c06082b060105050730018620687474703a2f2f676f7663726c2e676f7665726e696b75732e64652f6f637370303b06092b0601040182371507042e302c06242b060104018237150887a4920efcad6b83a98117819cb41586e9ea5a1791ff2e87b7af7c020164020109301b06092b060104018237150a040e300c300a06082b06010505070301300d06092a864886f70d01010b05000382010100a41dd5971c9b983bc3369bc9f3046481ff05aab5b47fac27a8cb7f917585b15c5acfbc8d083375a459b0642974968f4e00ad501d715dfb8a9e098437459ddcbba5a7d49f0278bd841b89fb93e86683bd89334f6b5ab556834e1fb4ec86647e812438e17512ee87b01bd0679b3abf4a67fe7272eae0c4cd9ed174d70b2728e72361cded46a42d445dfe244efb55feb1eee13f614d30237ee399b4108bc596b8aab377ad98d22c87ce4ce976ec1ceac512c33d6941b715d9fa60882b4644f9a066dcd51ff6c429af37cfa38f06444e6682d09643b2866a23a42da0ae21a787e8fe40aa2b21aa55a10aa42097c9a219528ac4968eb12cec5f223791a40d21fcce05"
|
"3082093a30820822a0030201020210042e5dd11e0c69cdec3882747019081c300d06092a864886f70d01010b05003081df310b300906035504061302444531253023060355040a0c1c542d53797374656d7320496e7465726e6174696f6e616c20476d6248311f301d060355040b0c16542d53797374656d732054727573742043656e746572311c301a06035504080c134e6f7264726865696e205765737466616c656e310e300c06035504110c0535373235303110300e06035504070c074e65747068656e3120301e06035504090c17556e7465726520496e647573747269657374722e2032303126302406035504030c1d54656c65536563205365727665725061737320436c6173732032204341301e170d3139303330373131343530325a170d3231303331323233353935395a3074310b30090603550406130244453121301f060355040a0c18476f7665726e696b757320476d6248202620436f2e204b47310b3009060355040b13025345310f300d060355040813064272656d656e310f300d060355040713064272656d656e3113301106035504030c0a2a2e676f766b672e646530820222300d06092a864886f70d01010105000382020f003082020a0282020100b03a180c094b52a862ef5fce194147f705d3340d79282a103a14d14fabe3d849a62df93b5f09eed3ad60e6ae5570a3823370aeeb888df9e0fc9a513be26308d783cc7cefd4ef43337e2c854b03ef399c647a19d31c39fe2b1d08c9cc27462ba5e43bc97e494ac62059496579967fa3fe8b1111e016d6dd37eda00e5617bb571cbb042e6750d17dd3acf1055b8dd6a1130214992a673bfc671e2586355378dfbb14a2910d37faa221178cb2dba0e87544ed6acbb2344ac439dbd16c05e1c0f76fa757305c0c38f3ccab420fd49603717986c8d748ce4ea2863260da6a832df53bb6247ada2431239b0a9815b89d6bb0f58a4da508695637c0b10368260cbf7dd8d469fb81d21b560a25125e9cfc8ae09a8b9e7a1cc688a8e49c045f1dc397a7c28e637b11c5205d8375ccfb627b071a813665de2fe172de97671dfecce44d9545a6f083cff4c7e2df4780b9073b19ca93b97561ca0c9bc5687ec0a1de993b199eca2576e820f26ce043fbab092f6e0bbc510b14d4b2489733e28cd38f40928cce16f4f3b6bba6277cff19312ad5771507ae729b6c083924c53d1c1fc33e370af1a0060307b3ef83880886334133c2e645bbf7f14a26acbce1609daceac1ed8d5d2bff8d8ed095a7af79f608134256f1e4a34650225595dd9fa5746448417d7a2f8f0c5ef001b5e4780e6d8caf818b314fb708447f70f3844d39a7ff437ebbf6a70203010001a382045a30820456301f0603551d2304183016801494c87446f53ab4464826f82bca341e5626041200300e0603551d0f0101ff0404030205a0301d0603551d250416301406082b0601050507030206082b06010505070301301d0603551d0e04160414db05538bd26c0bea1bcb5cde439b81e6ab8aa40b305a0603551d20045330513045060a2b06010401bd470d17013037303506082b060105050702011629687474703a2f2f7777772e74656c657365632e64652f736572766572706173732f6370732e68746d6c3008060667810c010202304b0603551d1f044430423040a03ea03c863a687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f726c2f536572766572506173735f436c6173735f322e63726c30819906082b0601050507010104818c308189303306082b060105050730018627687474703a2f2f6f6373702e736572766572706173732e74656c657365632e64652f6f63737072305206082b060105050730028646687474703a2f2f63726c2e736572766572706173732e74656c657365632e64652f6372742f54656c655365635f536572766572506173735f436c6173735f325f43412e636572300c0603551d130101ff04023000301f0603551d1104183016820a2a2e676f766b672e64658208676f766b672e64653082026f060a2b06010401d6790204020482025f0482025b02590076006f5376ac31f03119d89900a45115ff77151c11d902c10029068db2089a37d9130000016957f896900000040300473045022046b42ef57f79c932690c6558eb52f354b8e4f5c49c7dc50616a351dbbe823785022100957c17a3f70a7ee20a920a29bb123e186b425a4c0c4dbd5372ab5163abe88284007600ee4bbdb775ce60bae142691fabe19e66a30f7e5fb072d88300c47b897aa8fdcb0000016957f89686000004030047304502210085921f55932ee2b42b7b6cd1b9627f9d376485024210f8f4358d60ebc25b6d6d022069f72703fc8d7added3f8cc041aee457d011e22425ecdfbebcfd1b312c0ad6220077005581d4c2169036014aea0b9b573c53f0c0e43878702508172fa3aa1d0713d30c0000016957f897e400000403004830460221009c4b1fdcfde4bacba79665a77da038ab42399578dbc80c9ce21ab5054217edf2022100d23970d124e0f1ee384f6cc2e53d76df6069190dc91b9be5be24219898081ad9007600a4b90990b418581487bb13a2cc67700a3c359804f91bdfb8e377cd0ec80ddc100000016957f8968c000004030047304502210099ca67064864c67ab92b4f13c11fd8be58453585f80e4e3d9a1d18a191aba1670220603bc43ad9700dd891e1bb135b2cd0fad041a6f63bed0d9c778a3e96d6082f33007600bbd9dfbc1f8a71b593942397aa927b473857950aab52e81a909664368e1ed1850000016957f896870000040300473045022100e6810cf7ec2ee244d5ae516246973f46c7710bf075c923b21451abc6622b9dee02202ccd410f907ba8176bcb12198f1b0821cf95a550e2486a0292cadca7a670dac2300d06092a864886f70d01010b05000382010100103ab77dff430d59dcd9d5c94b9c2ea44d829d0a70777c42a137ea627eca87881ce9131f00ea7282f7fe7cd7ac8f154f84622023183aac3f02ce4a5925cfb771961e114b78cec3950c0a4aa7726c01ba69c60cf3a4c68ea63e92f8dd0bf2f1e033bb91c536df9945ba281abae1bde75f920f94df2fa2c2ff708a57291114889e374eb9c8f7da0bb8a0d19bda964b3ac32e174cbb9d956c9693f0a6326a80d7019cbc8e54949981d5bf231f85c6ff5be5bc0fcaeb637bf84a8be424ebe2cefdef4c89d2a4682efda5c8010e432977d26e6f30e7e9ed13f612fea99dbd9799e6460ca780a109ff3dc7a86887479832baac8589aebeadf50759077aadfd2d467d06"
|
||||||
],
|
],
|
||||||
|
|
||||||
"tlsSettings": {
|
"tlsSettings": {
|
||||||
|
@ -151,18 +153,20 @@
|
||||||
"minStaticKeySizes": {
|
"minStaticKeySizes": {
|
||||||
"Rsa": 2000,
|
"Rsa": 2000,
|
||||||
"Dsa": 2000,
|
"Dsa": 2000,
|
||||||
|
"Dh": 2000,
|
||||||
"Ec": 224
|
"Ec": 224
|
||||||
},
|
},
|
||||||
|
|
||||||
"minEphemeralKeySizes": {
|
"minEphemeralKeySizes": {
|
||||||
"Rsa": 2000,
|
"Rsa": 2000,
|
||||||
"Dsa": 2000,
|
"Dsa": 2000,
|
||||||
|
"Dh": 2000,
|
||||||
"Ec": 224
|
"Ec": 224
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
"selfAuthentication": {
|
"selfAuthentication": {
|
||||||
"_comment_1": "TCTokenURL for self authentication (AusweisAuskunft)",
|
"_comment_1": "TCTokenURL for self-authentication (AusweisAuskunft)",
|
||||||
"url": "https://www.autentapp.de/AusweisAuskunft/WebServiceRequesterServlet?mode=json",
|
"url": "https://www.autentapp.de/AusweisAuskunft/WebServiceRequesterServlet?mode=json",
|
||||||
"testUrl": "https://test.governikus-eid.de/AusweisAuskunft/WebServiceRequesterServlet?mode=json"
|
"testUrl": "https://test.governikus-eid.de/AusweisAuskunft/WebServiceRequesterServlet?mode=json"
|
||||||
},
|
},
|
||||||
|
|
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 718 B |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 5.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 963 B |