From a7b91f7010cad66a9025602069000015208218cd Mon Sep 17 00:00:00 2001 From: levonpetrosyan93 <45027856+levonpetrosyan93@users.noreply.github.com> Date: Wed, 1 Dec 2021 08:43:57 +0400 Subject: [PATCH 1/7] Removing unneeded log (#1092) * Removing unneeded log * Removed one more unneeded log --- src/sigma/coin.cpp | 2 +- src/wallet/wallet.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sigma/coin.cpp b/src/sigma/coin.cpp index 1c28d33ed5..f4e7170746 100644 --- a/src/sigma/coin.cpp +++ b/src/sigma/coin.cpp @@ -121,7 +121,7 @@ bool IntegerToDenomination(int64_t value, CoinDenomination& denom_out) { bool IntegerToDenomination(int64_t value, CoinDenomination& denom_out, CValidationState &state) { switch (value) { default: - return state.DoS(100, error("CheckSigmaTransaction : invalid denomination value, unable to convert to enum")); + return false; case 5 * CENT: denom_out = CoinDenomination::SIGMA_DENOM_0_05; break; diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 2000e5c761..0c34c38949 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -2207,7 +2207,7 @@ bool CWalletTx::RelayWalletTransaction(CConnman* connman) } } } - LogPrintf("CWalletTx::RelayWalletTransaction() --> invalid condition\n"); + return false; } From cd52bf976c4c86895ff22fc968c2ce3947e2c12e Mon Sep 17 00:00:00 2001 From: a-bezrukov <36845392+a-bezrukov@users.noreply.github.com> Date: Wed, 1 Dec 2021 08:44:15 +0400 Subject: [PATCH 2/7] Css improvements (#1091) * Improving font sizes * Revert "Tor upgraded to 0.4.6.8 (#1083)" This reverts commit 70b0d7bb1ee8388dc11369d33270b3aad2bda257. * Revert "Revert "Tor upgraded to 0.4.6.8 (#1083)"" This reverts commit 60a93e1ef0e440f6c2c4b051a604f51a8b890fc3. --- src/qt/res/css/firo.css | 62 ++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/src/qt/res/css/firo.css b/src/qt/res/css/firo.css index 87f085cc78..cdffe15e43 100644 --- a/src/qt/res/css/firo.css +++ b/src/qt/res/css/firo.css @@ -18,7 +18,7 @@ QDialog { QFrame { background-color: #f4f4f4; border: 0px; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QDialog, @@ -26,25 +26,25 @@ QMainWindow, QMessageBox WalletFrame { background-color: #f4f4f4; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QWidget { selection-color: #FFFFFF; selection-background-color: #3d3939; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QLabel, QListView { color: #110202; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QLabel:disabled, QListView:disabled { color: #878787; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } BitcoinAmountField, @@ -59,7 +59,7 @@ QLineEdit { background-color: #f4f4f4; border-color: #9b1c2e; color: #110202; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } BitcoinAmountField:hover:!focus, @@ -265,7 +265,7 @@ QCalendarWidget QToolButton::menu-indicator { QCalendarWidget QWidget { alternate-background-color: #9b1c2e; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QCalendarWidget QAbstractItemView:enabled { @@ -332,7 +332,7 @@ QCheckBox::indicator:indeterminate:disabled { } QCheckBox > .QLabel { - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } /* QComboBox */ @@ -364,7 +364,7 @@ QComboBox QListView { color: #110202; border: 1px solid #878787; border-radius: 4px; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QComboBox QAbstractItemView::item { @@ -373,18 +373,18 @@ QComboBox QAbstractItemView::item { QComboBox::item { color: #110202; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QComboBox::item:alternate { background-color: #f4f4f4; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QComboBox::item:selected { border: 0px solid #f4f4f4; background-color: #cfcccc; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QComboBox::down-arrow { @@ -421,21 +421,21 @@ QGroupBox { background-color: #f4f4f4; color: #110202; padding-top: 20px; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QGroupBox:title { background-color: #f4f4f4; margin-top: 5px; margin-left: 7px; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } /* QHeaderView */ QHeaderView { background-color: #9b1c2e; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QHeaderView::section > .QLabel { @@ -454,7 +454,7 @@ QHeaderView::section { background-color: #9b1c2e; border-color: #f4f4f4; color: #f4f4f4; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QHeaderView::section:last { @@ -482,7 +482,7 @@ QHeaderView::up-arrow { QHeaderView::section:hover { background-color: #7c1624; color: #f4f4f4; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } /* QMenu */ @@ -497,7 +497,7 @@ QMenu { QMenu::item { padding: 2px 6px 2px 6px; color: #110202; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QMenu::item:selected:!disabled { @@ -548,7 +548,7 @@ QPushButton { padding-right: 12px; padding-top: 4px; padding-bottom: 4px; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QPushButton:hover { @@ -591,7 +591,7 @@ QPushButton > .QLabel { border-radius: 0px; background-color: transparent; color: #FFFFFF; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } #tabInfo:hover:checked, @@ -608,7 +608,7 @@ QPushButton > .QLabel { border: none; background-color: transparent; color: #cfcccc; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } #tabInfo:hover:!checked, @@ -625,7 +625,7 @@ QPushButton > .QLabel { border: none; background-color: transparent; color: #cfcccc; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } #tabInfo:checked, @@ -642,7 +642,7 @@ QPushButton > .QLabel { border: none; background-color: transparent; color: #cfcccc; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } #tabShowInfo:hover:pressed, @@ -658,7 +658,7 @@ QPushButton > .QLabel { #tabVerifyMessage:hover:pressed { border: none; background-color: #7c1624; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } /* QRadioButton */ @@ -666,7 +666,7 @@ QPushButton > .QLabel { QRadioButton { color: #110202; background-color: #f4f4f4; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QRadioButton > .QLabel { @@ -764,7 +764,7 @@ QStatusBar { QStatusBar QLabel { margin-right: 5px; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QStatusBar #lblStatusBarProgress { @@ -787,14 +787,14 @@ QTableView::item { background-color: #f4f4f4; border-color: #878787; color: #110202; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QTableView::item:selected { background-color: #d2d2d2; border-color: #d2d2d2; color: #110202; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } /* QTableWidget */ @@ -853,7 +853,7 @@ QToolBar { spacing: 0; min-height: 2.5em; background-color: #9b1c2e; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QToolBar > QToolButton { @@ -903,7 +903,7 @@ QToolTip { background-color: #f4f4f4; border-color: #cfcccc; color: #3d3939; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } /* QTreeWidget */ @@ -914,7 +914,7 @@ QTreeWidget { background-color: #f4f4f4; border-color: #cfcccc; color: #110202; - font: 8pt 'Source Sans Pro'; + font: 10pt 'Source Sans Pro'; } QTreeWidget::branch::closed:has-children { From e76905adcbda5ab03a90868d471f40c5cd53bdec Mon Sep 17 00:00:00 2001 From: notshillo <92549772+notshillo@users.noreply.github.com> Date: Thu, 9 Dec 2021 02:41:26 -0600 Subject: [PATCH 3/7] theme tweaks and embed fonts (#1095) * New Image Assets Added new image assets * Update bitcoin.qrc Added image assets and removed duplicate entries * Update modaloverlay.ui moved to dedicated stylesheet * Customize Calendar Widget Set weekend color here as it cannot be done in the stylesheet * Update sigmadialog.ui Fixed name conflict during compile * Update UI element names Clearer element names and small tweaks in UI consistency * Update platformstyle.cpp Colorize icons uniformly across platforms and move text customization to stylesheet * Update UI forms Remove icons from buttons that already have text * Update lelantusdialog.ui fixed alignment issue * Update bitcoin.qrc added stylesheet * Update bitcoingui.cpp moved styling to stylesheet * Keep certain icons black Prevent colorization of certain icons * Add logo to main toolbar Add logo to main toolbar * Load stylesheet read and load stylesheet * Remove icons Icons removed from main toolbar and menu * Update signverifymessagedialog.cpp removed a few more icons from buttons with test * Update chevron.png changed color * alignment * Create firo.css stylesheet * Fix testnet splash image and jenkins build error Update Makefile.qt.include forgot to add the css * Update firo.css Better support for HiDPI scaling on windows and possibly other platforms * Update bitcoin.cpp Set Qt attributes before QCoreApplication is created * ui fixes debug alignment inverted tool/tab bar colors fixed visibility of toolbar extension button * font size * alternating tableview colors * Embed fonts Added embedded fonts and set font size bigger as well as some theme tweaks * Change firo logo name * Update firo.css Higher contrast alt table view * TreeView alt color update --- src/Makefile.qt.include | 15 +- src/qt/bitcoin.cpp | 9 +- src/qt/bitcoin.qrc | 9 +- src/qt/forms/debugwindow.ui | 6 + src/qt/res/css/firo.css | 204 +++++++++--------- src/qt/res/fonts/Saira_SemiCondensed-Bold.ttf | Bin 0 -> 82924 bytes src/qt/res/fonts/SourceSansPro-Bold.ttf | Bin 0 -> 247784 bytes src/qt/res/fonts/SourceSansPro-Regular.ttf | Bin 0 -> 248504 bytes src/qt/res/icons/ext_add.png | Bin 0 -> 532 bytes src/qt/res/icons/ext_add_light.png | Bin 0 -> 526 bytes src/qt/res/images/firo_logo.png | Bin 0 -> 75391 bytes src/qt/res/images/firo_logo_white.png | Bin 75279 -> 0 bytes 12 files changed, 133 insertions(+), 110 deletions(-) create mode 100644 src/qt/res/fonts/Saira_SemiCondensed-Bold.ttf create mode 100644 src/qt/res/fonts/SourceSansPro-Bold.ttf create mode 100644 src/qt/res/fonts/SourceSansPro-Regular.ttf create mode 100644 src/qt/res/icons/ext_add.png create mode 100644 src/qt/res/icons/ext_add_light.png create mode 100644 src/qt/res/images/firo_logo.png delete mode 100644 src/qt/res/images/firo_logo_white.png diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index e8c408400f..57081d019e 100644 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -413,17 +413,24 @@ RES_ICONS = \ qt/res/images/checkbox_partly_checked_light.png \ qt/res/images/checkbox_partly_checked_hover_light.png \ qt/res/images/checkbox_partly_checked_disabled_light.png \ - qt/res/images/firo_logo_white.png \ + qt/res/images/firo_logo.png \ qt/res/images/radio_normal_light.png \ qt/res/images/radio_normal_hover_light.png \ qt/res/images/radio_checked_light.png \ qt/res/images/radio_checked_hover_light.png \ qt/res/images/radio_normal_disabled_light.png \ - qt/res/images/radio_checked_disabled_light.png + qt/res/images/radio_checked_disabled_light.png \ + qt/res/icons/ext_add.png \ + qt/res/icons/ext_add_light.png RES_CSS = \ qt/res/css/firo.css +RES_FONTS = \ + qt/res/fonts/Saira_SemiCondensed-Bold.ttf \ + qt/res/fonts/SourceSansPro-Regular.ttf \ + qt/res/fonts/SourceSansPro-Bold.ttf + BITCOIN_QT_BASE_CPP = \ qt/bantablemodel.cpp \ qt/bitcoinaddressvalidator.cpp \ @@ -534,7 +541,7 @@ qt_libfiroqt_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) $(BITCOIN_QT_INCLUD qt_libfiroqt_a_CXXFLAGS = $(AM_CXXFLAGS) $(QT_PIE_FLAGS) qt_libfiroqt_a_SOURCES = $(BITCOIN_QT_CPP) $(BITCOIN_QT_H) $(QT_FORMS_UI) \ - $(QT_QRC) $(QT_QRC_LOCALE) $(QT_TS) $(PROTOBUF_PROTO) $(RES_ICONS) $(RES_IMAGES) $(RES_CSS) $(RES_MOVIES) + $(QT_QRC) $(QT_QRC_LOCALE) $(QT_TS) $(PROTOBUF_PROTO) $(RES_ICONS) $(RES_IMAGES) $(RES_CSS) $(RES_MOVIES) $(RES_FONTS) nodist_qt_libfiroqt_a_SOURCES = $(QT_MOC_CPP) $(QT_MOC) $(PROTOBUF_CC) \ $(PROTOBUF_H) $(QT_QRC_CPP) $(QT_QRC_LOCALE_CPP) @@ -646,7 +653,7 @@ $(QT_QRC_LOCALE_CPP): $(QT_QRC_LOCALE) $(QT_QM) $(SED) -e '/^\*\*.*Created:/d' -e '/^\*\*.*by:/d' > $@ @rm $(@D)/temp_$( $@ diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index 34ccc11a5e..2e1b3cd79e 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -82,6 +82,8 @@ Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin); #include #endif +#include + static bool newWallet = false; // Declare meta types used for QMetaObject::invokeMethod @@ -684,7 +686,12 @@ int main(int argc, char *argv[]) QApplication::setOrganizationName(QAPP_ORG_NAME); QApplication::setOrganizationDomain(QAPP_ORG_DOMAIN); QApplication::setApplicationName(QAPP_APP_NAME_DEFAULT); - GUIUtil::SubstituteFonts(GetLangTerritory()); + + // GUIUtil::SubstituteFonts(GetLangTerritory()); // use inlcuded fonts below + // load included fonts + QFontDatabase::addApplicationFont(":/fonts/Saira_SemiCondensed-Bold"); + QFontDatabase::addApplicationFont(":/fonts/SourceSansPro-Bold"); + QFontDatabase::addApplicationFont(":/fonts/SourceSansPro-Regular"); /// 4. Initialization of translations, so that intro dialog is in user's language // Now that QSettings are accessible, initialize translations diff --git a/src/qt/bitcoin.qrc b/src/qt/bitcoin.qrc index d306c598e1..d566bde699 100644 --- a/src/qt/bitcoin.qrc +++ b/src/qt/bitcoin.qrc @@ -73,6 +73,8 @@ res/icons/elysium_hourglass.png res/icons/lelantus.png res/icons/paymentcode.png + res/icons/ext_add.png + res/icons/ext_add_light.png res/movies/spinner-000.png @@ -141,7 +143,7 @@ res/images/checkbox_partly_checked_light.png res/images/checkbox_partly_checked_hover_light.png res/images/checkbox_partly_checked_disabled_light.png - res/images/firo_logo_white.png + res/images/firo_logo.png res/images/radio_normal_light.png res/images/radio_normal_hover_light.png res/images/radio_checked_light.png @@ -152,4 +154,9 @@ res/css/firo.css + + res/fonts/Saira_SemiCondensed-Bold.ttf + res/fonts/SourceSansPro-Regular.ttf + res/fonts/SourceSansPro-Bold.ttf + diff --git a/src/qt/forms/debugwindow.ui b/src/qt/forms/debugwindow.ui index 8be4a955b3..d33a52d0dc 100644 --- a/src/qt/forms/debugwindow.ui +++ b/src/qt/forms/debugwindow.ui @@ -862,6 +862,9 @@ false + + true + true @@ -926,6 +929,9 @@ false + + true + true diff --git a/src/qt/res/css/firo.css b/src/qt/res/css/firo.css index cdffe15e43..71aab96a01 100644 --- a/src/qt/res/css/firo.css +++ b/src/qt/res/css/firo.css @@ -12,39 +12,39 @@ QDialog { margin: 0; padding-top: 20px; padding-bottom: 20px; - font-size: 8pt; + font-size: 12pt; } QFrame { background-color: #f4f4f4; border: 0px; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QDialog, QMainWindow, -QMessageBox +QMessageBox, WalletFrame { background-color: #f4f4f4; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QWidget { selection-color: #FFFFFF; selection-background-color: #3d3939; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QLabel, QListView { color: #110202; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QLabel:disabled, QListView:disabled { color: #878787; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } BitcoinAmountField, @@ -59,7 +59,7 @@ QLineEdit { background-color: #f4f4f4; border-color: #9b1c2e; color: #110202; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } BitcoinAmountField:hover:!focus, @@ -265,7 +265,7 @@ QCalendarWidget QToolButton::menu-indicator { QCalendarWidget QWidget { alternate-background-color: #9b1c2e; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QCalendarWidget QAbstractItemView:enabled { @@ -332,7 +332,7 @@ QCheckBox::indicator:indeterminate:disabled { } QCheckBox > .QLabel { - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } /* QComboBox */ @@ -364,7 +364,7 @@ QComboBox QListView { color: #110202; border: 1px solid #878787; border-radius: 4px; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QComboBox QAbstractItemView::item { @@ -373,18 +373,18 @@ QComboBox QAbstractItemView::item { QComboBox::item { color: #110202; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QComboBox::item:alternate { background-color: #f4f4f4; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QComboBox::item:selected { border: 0px solid #f4f4f4; background-color: #cfcccc; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QComboBox::down-arrow { @@ -421,21 +421,21 @@ QGroupBox { background-color: #f4f4f4; color: #110202; padding-top: 20px; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QGroupBox:title { background-color: #f4f4f4; margin-top: 5px; margin-left: 7px; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } /* QHeaderView */ QHeaderView { background-color: #9b1c2e; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QHeaderView::section > .QLabel { @@ -454,7 +454,7 @@ QHeaderView::section { background-color: #9b1c2e; border-color: #f4f4f4; color: #f4f4f4; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QHeaderView::section:last { @@ -482,7 +482,7 @@ QHeaderView::up-arrow { QHeaderView::section:hover { background-color: #7c1624; color: #f4f4f4; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } /* QMenu */ @@ -497,7 +497,11 @@ QMenu { QMenu::item { padding: 2px 6px 2px 6px; color: #110202; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; +} + +QMenu::item:checked { + padding-left: 18px; } QMenu::item:selected:!disabled { @@ -548,7 +552,7 @@ QPushButton { padding-right: 12px; padding-top: 4px; padding-bottom: 4px; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QPushButton:hover { @@ -571,7 +575,7 @@ QPushButton:disabled { } QPushButton > .QLabel { - font-size: 8pt; + font-size: 12pt; } /* tabbar */ @@ -591,7 +595,7 @@ QPushButton > .QLabel { border-radius: 0px; background-color: transparent; color: #FFFFFF; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } #tabInfo:hover:checked, @@ -608,7 +612,7 @@ QPushButton > .QLabel { border: none; background-color: transparent; color: #cfcccc; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } #tabInfo:hover:!checked, @@ -625,7 +629,7 @@ QPushButton > .QLabel { border: none; background-color: transparent; color: #cfcccc; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } #tabInfo:checked, @@ -642,7 +646,7 @@ QPushButton > .QLabel { border: none; background-color: transparent; color: #cfcccc; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } #tabShowInfo:hover:pressed, @@ -658,7 +662,7 @@ QPushButton > .QLabel { #tabVerifyMessage:hover:pressed { border: none; background-color: #7c1624; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } /* QRadioButton */ @@ -666,11 +670,11 @@ QPushButton > .QLabel { QRadioButton { color: #110202; background-color: #f4f4f4; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QRadioButton > .QLabel { - font-size: 8pt; + font-size: 12pt; } QRadioButton:disabled { @@ -764,7 +768,7 @@ QStatusBar { QStatusBar QLabel { margin-right: 5px; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QStatusBar #lblStatusBarProgress { @@ -782,19 +786,22 @@ QStatusBar #lblStatusBarProgress { } QTableView::item { - height: 53px; - border-bottom: 1px solid; - background-color: #f4f4f4; - border-color: #878787; + height: 2.5em; + border-bottom: 0px solid; + background-color: #cfcccc; + border-color: #cfcccc; color: #110202; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; +} + +QTableView::item:alternate { + background-color: #ffffff; } QTableView::item:selected { - background-color: #d2d2d2; - border-color: #d2d2d2; - color: #110202; - font: 10pt 'Source Sans Pro'; + background-color: #878787; + color: #FFFFFF; + font: 12pt 'Source Sans Pro'; } /* QTableWidget */ @@ -810,28 +817,33 @@ QTableWidget { /* QTabWidget */ QTabWidget QTabBar { - background-color: #9b1c2e; - /* min-width: 2000px; */ - border: 1px solid #9b1c2e; + background-color: #f4f4f4; } QTabWidget QTabBar::tab { - background-color: #9b1c2e; + background-color: #f4f4f4; height: 35px; - color: #FFFFFF + color: #9b1c2e; + border-bottom: 1px solid; + border-color: #cfcccc; + padding-left: 1em; + padding-right: 1em; } QTabWidget QTabBar::tab > .QLabel { - font-size: 8pt; + font-size: 12pt; } QTabWidget QTabBar::tab:hover { background-color: #7c1624; + color: #f4f4f4; + border-bottom: 0px solid; } QTabWidget QTabBar::tab::selected { - background-color: #f4f4f4; - color: #9b1c2e; + background-color: #9b1c2e; + color: #f4f4f4; + border-bottom: 0px solid; } /* QTextEdit */ @@ -851,20 +863,21 @@ QToolBar { padding: 0; margin: 0; spacing: 0; - min-height: 2.5em; - background-color: #9b1c2e; - font: 10pt 'Source Sans Pro'; + min-height: 2em; + background-color: #f4f4f4; + font: 12pt 'Source Sans Pro'; } QToolBar > QToolButton { border: none; - min-height: 2.5em; + min-height: 2em; min-width: 140px; - padding: 0px; + padding: 1px; text-align: center; - background-color: #9b1c2e; - color: #f4f4f4; - font: 12pt 'Saira Semi Condensed'; + background-color: #f4f4f4; + color: #9b1c2e; + font-weight: bold; + font: 16pt 'Saira SemiCondensed'; } QToolBar > QToolButton > QLabel { @@ -877,23 +890,39 @@ QToolBar > QToolButton:hover:!checked { } QToolBar > QToolButton:checked { - background-color: #f4f4f4; - color: #9b1c2e; - border-top: 1px solid #cfcccc; + background-color: #9b1c2e; + color: #f4f4f4; } QToolBar > QToolButton:disabled { + background-color: #f4f4f4; color: #a7a7a7; } QToolBar QLabel#lblToolbarLogo { padding: 2px; image: url(':/images/firo_logo_toolbar'); - height: 2.5em; - background-color: #9b1c2e; + height: 2em; + min-height: 1em; + background-color: #f4f4f4; min-width: 120px; } +QToolButton#qt_toolbar_ext_button { + min-width: -1px; + min-height: -1px; + qproperty-icon: url(':/icons/ext_add_light'); + background-color: #9b1c2e; +} + +QToolButton#qt_toolbar_ext_button:hover, +QToolButton#qt_toolbar_ext_button:checked { + min-width: -1px; + min-height: -1px; + qproperty-icon: url(':/icons/ext_add_light'); + background-color: #7c1624; +} + /* QToolTip */ QToolTip { @@ -903,7 +932,7 @@ QToolTip { background-color: #f4f4f4; border-color: #cfcccc; color: #3d3939; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } /* QTreeWidget */ @@ -911,10 +940,10 @@ QToolTip { QTreeWidget { border: 1px solid; alternate-background-color: #cfcccc; - background-color: #f4f4f4; + background-color: #ffffff; border-color: #cfcccc; color: #110202; - font: 10pt 'Source Sans Pro'; + font: 12pt 'Source Sans Pro'; } QTreeWidget::branch::closed:has-children { @@ -997,12 +1026,6 @@ QDialog#AboutDialog QLabel#label_2 { /* AddressBookPage */ QWidget#AddressBookPage { -} - -QWidget#AddressBookPage QTableView { -} - -QWidget#AddressBookPage QTableView::item { } /* Min width for Windows fix */ @@ -1094,7 +1117,6 @@ QDialog#CoinControlDialog QHeaderView::section:first { QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:hover { - background-color: #f4f4f4; } QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:selected { @@ -1111,19 +1133,22 @@ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::seperator { } QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item { - border-bottom: 1px solid; + border-bottom: 0px solid; min-height: 25px; - border-color: #878787; } -QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:selected, -QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:checked, + QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:selected, QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:checked { - background-color: #d2d2d2; color: #110202; } +QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:selected, +QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:checked { + background-color: #878787; + color: #FFFFFF; +} + /* CreatePcodeDialog */ QWidget#CreatePcodeDialog .QLabel#label_6 { @@ -1487,14 +1512,6 @@ QWidget#ReceiveCoinsDialog .QFrame#frame .QLabel#label_6 { min-width: 0px; } -QWidget#ReceiveCoinsDialog .QFrame#frame QTableView#recentRequestsView::item { - -} - -ReceiveCoinsDialog QTableView { - color: #110202; -} - ReceiveCoinsDialog#label_6 { font-weight: bold; } @@ -1525,8 +1542,6 @@ QWidget#RPCConsole QLabel#label_10, QWidget#RPCConsole QLabel#labelMempoolTitle { qproperty-alignment: 'AlignLeft | AlignBottom'; min-height: 25px; - margin-top: 10px; - margin-left: -4px; font-weight: bold; } @@ -1587,10 +1602,6 @@ QWidget#RPCConsole { background-color: #f4f4f4; } -RPCConsole QTableView { - color: #cfcccc; -} - #rpcAutoCompleter { border: 1px solid; background-color: #f4f4f4; @@ -1697,12 +1708,6 @@ QStackedWidget#SendCoinsEntry .QFrame#SendCoins > .QLabel { padding-right: 5px; } -QStackedWidget#SendCoinsEntry .QFrame#SendCoins .QLabel#amountLabel { -} - -QStackedWidget#SendCoinsEntry .QValidatedLineEdit#payTo { -} - QStackedWidget#SendCoinsEntry .QToolButton { background-color: #f4f4f4; margin-left: 5px; @@ -1714,15 +1719,6 @@ QStackedWidget#SendCoinsEntry .QToolButton#addressBookButton { margin-left: 10px; } -QStackedWidget#SendCoinsEntry .QToolButton#addressBookButton, -QStackedWidget#SendCoinsEntry .QToolButton#pasteButton, -QStackedWidget#SendCoinsEntry .QToolButton#deleteButton, -QStackedWidget#SendCoinsEntry .QToolButton#deleteButton_is { -} - -QStackedWidget#SendCoinsEntry .QLineEdit#addAsLabel { -} - /* SigmaCoinControlDialog */ QDialog#SigmaCoinControlDialog QLabel#labelCoinControlQuantityText, diff --git a/src/qt/res/fonts/Saira_SemiCondensed-Bold.ttf b/src/qt/res/fonts/Saira_SemiCondensed-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..bc11f9ccadb62680688fcb50990bc2c66ba659b5 GIT binary patch literal 82924 zcmb@v34mM0kvIPOJxNcR(MY5FmPYs7Gm=K5xew3S9?#*iJwC<B&lE8z3u2>stxpiif`lY12^n?`TpmAgt~D5qg{J;Zrc%DcEcAW z=@VOUzk3e=#`|^8f&Oi{PVBkny6X?!bHf4LzfY3tUOjMV`?k=z75^nkk8PDC!})8r zU4K|PBfWy_5#To*+;+{*2YbJCqa=Ofdy=Hza`@2E>)eNqBqizDE=h`f^zf0LhxZun zcn9wP3-DEv0eE>;{kzKBMDwXdV zl5^Rx>~b1ZgTduuuNGe(_!Yamc=+)s5X`A`EbTC4m|_eMcIEs0hE|U)Abi2)a-84oWqL~%!CT7k(Q3G|w+x?=uBhU7R~gnY6qNe@%m@6@o7%{b4!QQoetxTy9djS^AhHFZ@=LlzM2WRdPtub{2I-Jvmn# ze^E_StxPZbi(mD<_Vd7Ri+8&IDYxbRW~l7R_ucUD$-D1nDoZXb2r67_143)rMo?Fz zA@q(P)SXg9YL=vT|jeTBz zQfic>rLlGe<6X(2c8{xFh7nL)&M>aK3oeVyTE{o_1Z!$SJ)6e--Pw9yQ?xFX3DxOz zb)ifuH0-hG3Px9E)%9!ET)(>0r8DY}C_35b%dQ8OCcRCAFCiYw@U_z4N)F+NA6$~1<@Z7kjOu02p?$Snqg_#I2tJ3{yNksi{D8^Y=nx#T z=eRy#ZsykfA9=rX3fwvi__%aS6`cBAz{jMMmxT{WH&o!M*KeqglAHLyG=`)4dqcOg$B1Lmi9 zbju)_x4|pM!V?prhTe|)w!x%B)m!{6ky?-2wDw2g$rVON$Eq9Ft-E1$yTf2ouhkh8 zy(_a}d}wW#-^670@O8zv8cYVwddM|g>y~I*_gmgt&KK7@0UwwCt_n`tBH&}1GzESI zKBUcAoyBic`^xxp(l1I@3-wa(3Oaq#`I6M+meP2EEx>PYv#PL zig}AKX_idjTDc{2rB`vENyGU39{5ps4YuKPUt>kARN>Qi8{;;6obxDd0Q!C=&QH3r}(U-vHjoN0ET{F8qeKi}TOr zEZ}|8Dgj@}QoGPzf*X|8Q;^OAR8sn075DvskVom`wbB?8RHgwTIQ}ha?MeU$4y(%S z3XLIwKLrTETNZjS15|2V*8)Ff;m5%4R%iqX>`6dq1la+PLiQHOK99Kxx`2tw-rC{T zpHl;UJC8D>zo(OZta#Ig!=oV+=u@wpP;Q1bCQ4}`eOPwhJKV#0nDarDui?_Y0(h!2 zBn_6eZz*cTN(D2cEeH485m!k4Iv#xJb6@<>|L%Ya{*t+ipD3PV4aFaGje>@w47lIQ zY0XLB$F~^&p9C$)g41#hoqGYw^UpVfPnwN>&9&!hDg*xhu{6uDPjdNlcv*YM#();; z5O6nB1%C0{i{Nw8|0&b?RRv!@%Z^I}RPRE+{4V)L$cNKmhpAqSB(#_4K+9pRPUMp= zMy+?5*~;Qi&%N;Kfl~*HcXQrFyW}4MSByEVQ}_r~xR{zw55A>rmo0c0Ee`@8Vt|BjqkGqy0ig@-?Nl$sJrq z91a=1%KMaL+QIu&z{jKy2sru&wL*3RJ}3RUiVj&I0q>I*NCy`F02vXNZmgB_*&!Kf zS7sIJXYz;Y6pdqZFf;x1PJJEx!spAp@60c6c5&MZX)9e^+PnsKcu@;T-$l)n(ix$B zm7164$<@t6I&rOfRL$1K!|F4-d#QGFC_DA^&RUP7o83{|tBGzrH`e4dpg+kPcVJfW zNFCMlitzN(B|lH|Y+1+hD+>XmF;KX2`9$g0L^$QHmE~G@DjZ6=YZRr%oif_mW^bII zzj3zBR{3?(;LfZc8(W`o8!Ep_GmGe_W7L1>r(f{?;Jk55DB$Cg7?T1{Gl+nXNoT9@ zEAXLeIQM4+{zw^~)%1Yiw0iVH` zA{!^#LH>+@_iC$24%eA9cv|6b@HHiUnC&W;`(ycjpY(sB72^H|ejn}PGpV4<+f^<{ zevE+kOYg4YgKV~dPfMQxJ%#hPQK^yY;BgO1(kLyZ@(6y=3QH+3eqKjaZXbv{x70KY zb=~zQbw)nX>urd+l9{0S!doj^Q~C90^=Bg==eJy>KUo?4qg?`CEr)9SYB_9FNDcy@ z%R!UdMn3BZ_@wlXD!I|BU&w6`>#Rz@R^+^Lk>1i=C-Bjq8h+2B{#qyf%ffjs|E~i6 zB7Oy=oFr|)qPy@0V(($)9{me~12#ibWy2DI~q9$8@R&Pb(bGN6z1}9b^p=x5&Vv$D}?< z+E$Wv)D@4V(g-cUFQ+I&cXux5N?u|cC%1NECG0J1os{M0?J={lM*YDL^tGnCsQvj1 z#miVpCsxR-S09`0aGq2YTgPDfhV)3*q3BMY)Vn*@j*QH8y7hW@=bZROvoFnDcJOC` zM!;8y@<<~_BRR4(0d*k?5g%fnfyqW|UE}oN>B&&cVbI&-p(**XP~ZB#?)Ci*FR;x< zcWWZi;-Nqy_k@UMy|&7CiTEX_iVe2y1G=!Ib6w-K(#=^CDY4e|8(xV#UH*&vgnO$gdG?bxP5S{LrIt-8=@v#bS&MO{eQ>V~H!@w=S;Q&0E%n<2Jp% zJ|0;MVfL=cH?ADA7k|&{Y&!Wr*?}5&V>ps_o4BV3!8US>bXK!S|Hel;^d4MnIrGU?21zVv*7Dm8lr1b(Hv4?8>)rjX-@X7KB{FTx*>7>l>PV zHL<~Uxx~bX%TwqLBwA|Cs=*hy*54efHK;m!GQZTQGwQCB4YFFJI($}7xZb3*=|h>N zts|>j>h(tbQJqdvji#_C5U$hJEA=6NU7{`6Gm{C_P>VR{T$1nCB>6ONQ4gz=o*hl^*0$6LnPZhf4VHnXB>VFfR(8 zvWwuWrGEr(OzML#br@3a=2A}Q-R?^4F<c z2pe{;9w3NNn(oJFN}&CAP2+ja4nLCy313Le+v z!!eEkCTm@BRo-V{SII_4tUDE6?spXiL(8uojMN%@-CHLEagSO5jLz&z7+oE!ub&%j z9f&*hdgVIAD_xzduU|8F{pt?aDV;4blFg1JY&ysWYXJ63^cPkmN3rsTNwq!pSM2$} zk~25oeBqyo#}bA@UjH00n1+{Ne_wo_aG7`S-r`GI3G_2B!AH~Ia@`n{cJk3-ML(l1 z^s|7kMO=pZ&5Hi4hR;bK5pcwbs^P1pPnY|XB95@NJmNyDN*XvAHuMvNqGfEp%WpiV zuTMl85;ohIcUv^Py$GsR99x8#PxH8tU(9Q$DL?NirGG}*xe=}3_4^G7v({u$?4 zz-ebiz{j;{iGY)C3iz0GUlo1@UfR(R_+&8z{)}{G6+Zcz0^Un2i4s4$oCYUflU5ky zga3^Cnw%c@fvH^OKKQ7*e`)!C>3>(L#3YwH6Qb0xvgBJN9217xk3IK zogOWUE#T{Klw@V(c%YQdI@d9j;fqQDM;XGUTeDR%TK@O zn0oZwmtSF@D?Z24#gSLQKgZw79t5-;w38f5T9|6qnXge56<^FbzOl=vp2J)O3tg`}r~0}!-hJ-#j+Ti7 zlaD`Nve3^zK6zlG#qs%0S>U_>^>K6`cA>z$c|W9FF(__Vca>Jk0suDE)-j zI|P|^aQJ=!XXt6vE8-A@FIGz%CFE!TF8m^b3qNY3^el&qJ|wv4la10p@jk(t3AW@( zL}Sq>M}?OYCWl7^+G%k@c@llp2jik&9(znzpJ<4{M_{L>_OEDmIGR`NpDO;v(@(R} z?WNu!UN~*uCy2>a+gYlU$A|>HJZ}=5XD|r(va%h-d{f4!m=ER~(0jddOH1WAJ<4DZ z^d=U;DT6`4msi8NZzAC3d7JY~Iwaubd7IOx3!ZG9SM^6~E%D*4A znB)z=#$tYh(b>NGhPCT%Sk-|IH^UK~UWZ`lh9x8Ga$cj}8pwjJv;c}F;Sc8vi7M*iV+M>b7r2DJzEAXKb9P3WBvW!26o&QR`u*MplKIwPd z%OVRx`z(GbMI*dA@51AWV;vcf7i62E4629Wqo}l_}119 z$z+Y*8VhfbA8TGSGO!|5qcetja*v$#B|YZ0;`iBMdrK-*wU!n#z`V?R?uWchoEP3! z0Uy(>;t+2WtS(lFgg+eKlUeH;I)gpPC4Y01C zmJP@N=|%Jlt7)WxbyLj5!`mD~I3dpgWcku@i(G&>C{HYp^_IbfW%XaT4TJ(CJvG5- z+-CH&#+@DQ&h)0v!c@E0c&pB6Y04&T9-H2vU*+){jX`5%ynA3g$nejNRfbMc_m+j6V{NxXmYYZM0HTJNls%lIzE4PG#wzZ7y*RY|r%9k~0 zN&ysOgY@FR%3OY}TqdxRVtAk=|06VgNSc*4ldiWT!bqx($k1Y4cY8FAcSX4m28G8? z7ow)A^kwuvS@HyOUu+*v+I%B@mgaUBMnb~g(cw&N=kHQDKVq~c`v?Z`dT+D<*uE=CY* z#kVXKF#3Opn7mg+QqaJ-ij6m0j>l1W_8HcgtOBU7{n@ z+#9R6#d~*q!L`1QxL5T$#b5{;&EepX{9^IP-hkOZuxond&VKI+W3Vrq?F$+$c5A-1 zxvSoRQ#*M+%K06q|X0cKi3gBCo>q5r*_F3y!o01#4d_BX7;mt$I`hzu*!EB~KT8A(pbsUeHLVof= z`9;XJ0C}p4oBcDs6_Ts0@ExTfWi#_A8z0qgM!Mf(nc}D3oP_1|n>Jl|=uL{5>sXfh zyUcG)`fN#Sl)s~WanTOs%)t*5I#~rz3pm>8mDiW`=S#qCklM=r8~P24kwpdy8Qj{M zB*%={Zt)n*P3tE6r&{d#;wuJEN0YrZ2fH)k(OUv8PspNw(CBC!T3=YcV>nC}r8kl8 z@E{g0??RB9MeFIxt|;W%4at<`E26;hpDj`v9kW7d z8ZlYZw2#f0=TF^oc6U zq@$unJC7?d3HFkG2R*>|S1Z#xZQ5w2!dAFTH77IS)OQ%<@i{#S9*GR8qjiy3z5wf{TmBUa?S!US_mm|Jm` zdN}l>z}3lQV+3yaqlAmt6${8@V+7Rp6F^HXFkqL8_h&b<6wxAJ;Tk-}2C3{X@%zhF zoH~9KS>`^>Aw|NP2VsLciJssSIZyN)EJB=|Z} zjHF))9zn--89J=^j7CP&HLj7GuE{T6@DX*eRHHlv>L)n$0YE60PVg)24FR-~77ig)6F9qPK3M2+Jj^heuj%UkbPAjOJu6vdDCy4qw=M8Oxk|E4=8VRxXh&cZmoIch<7l z(#(KWNLl9gcEJ}Lu1pYB;{OEk#pm$X*t3v;M`|grI`C8xyjScwU%b314$QW@Rn^@- zJ20?P{90LFO!&ifvSJP!t%-q6L&KW};#O;XVAJr>rh$a@AZ<-|4Mt3+$Y2+R+R<|I zTA$_p4PT3Ut+2^u_|uRG!7&dXsX(c}1=P!98-hj!>Zw4v*D7%9G-wv}m2k;xrCm;g za``frDoW(F3QE>0D0!^{TEC{kAu1yD#Jh`pS@DM_Gw zHw~Zm3tU1$?8%Ay)DqHiqDk=|VUHF|6u#}=N?kMq3G5JMD2VkLE6Vdc;}X%uH_Euw z!VF@a$vR3Impk5sO0cK3Y|Bt>G54m_qr`WS>&JtQCd(w8wje{+AydAzqXou`aFW5zJZ-9XLt8{XbpK`kagMImacSDcfH*z z!gN6_V1%!^9-JT(q~w9QVu-!Exa3pa$^2-56*nZCY`2Cd$Df6*A^&kbw`6|@O9qda zuNI>mO7oF`dZT3B;8OyZY`cJRpOV%VfYRI|pkcnYpcPj&E?}vj@O6 zR%5h}gse<@c97F$P@kxA)-KM9TwdFvC2xHX+L>z(es@w6q7UDg`t z&)ePY&GuNrs<%6~hg-eAjxnQ7Rdz8QlZ|eN!(mh``ou^_=RnM?Gw65WnPY>~X#==U z=NTNzj>PMz&4M>t4Lz<|`aAH=q%Q1+eH@;#4r><5yX<;f6nU55e}VEYMH!MFl|e*! zOi)@vtt>;6Ji2o+u1DZP(iL3t74PKpO9P}@4UbXgrq=H-%fF#mCh`r$HXI$j;1Wrd zafDF#a72ihehS(0Z8%#YedU_rxeT5J>?v5ASC1u}{z$#PE*h~|!l4>-BovI+$xUM$ zT3jt7&7)&Ay4rQyhBx;I530VN%s|0<(A*G-#OkcgjTe3bPV8WZA~*QHC~~tXYO^?I zbK#3x$yM^Z#9D)5K3FRu*0XJP_RQ9;z`yT45!s;{2v4ExsS}7Is60X>u$`>`H@v_n z_wD;+xe)q(G^_3m+uZAWzb10-=4UO$3*>^*G zzm4@B)*C!RPfJiOE{30c=kv2|-67MRx;mfB6R_yGC!ER}y`3vM+0x>#TQXk0d|}3- zJmhV#pngu1kIFA?$rBV% z8~4sQ1?4&o3QrL2rM#$;YJnN|b}h{~;d|F$|KZ zcDJ&JC|X2gQE=(Fw#+;Cq6n%gAv`_AV>_62TeuI|bg2g^GFLC^Cbp%N3;E5s4!6TXIMSl<{ zf{IulnlUJz!+5}iq~$g$_uhKm*F%L1l%J%Uj--q7I2&PT*1Y3 z9F+HgF^%;vdlB5#fjdWV();C7&k z+W|~zVivn3-n`f{VD@@7*x%*!Ha9w&@qjL(%bg8v-9Z=%v)|(+h%=ObCuOrDg{R zN)i!J+a9hh#a-IS6Ev_hu|OH8-3!&UD;f$Y*HD2SlHOHSBWahQ9lS|sBGDji5zxR! zl5`Rue+@~SAnCk=65ow)MoR85|WkM}kI-ovNZiHbh`M_>K~% z!6h!RL(*HSuu0+qJ9t3QMyt5Q1vIdnptORyjzcq?>v^1^LvZp0zr*1o4mGc3OD7kLKoJt(cLvcE&m@K*2f zJZ#o>d(=I9&OE%>cNo5C?}yHqf^T3)7-1i;t&MWm-b{^Aj86q#$DgVB7iaFi=Z&kU z?Ewl`lV%Ygn>0S&G#7t{gYTbtinE$30U8+mHs%g6xU6;@1_w0ZaLCoXL! ze6Mn|c&m_kEht~wDvfS+D|YXG_+rLEkuxew5msPR$T3VxUGS!{0;tNap`?a#CK;VA zc5x;d63O0zeLzQhQ%xvVUlU8#;IW+WSVMN8p=Jjj4hqGBW}8{3lY4v?D=T<%>6VNO zi7|M<$|%e7jKNT!=xhFIi^FA{)tQW{$6>bx{Wj{mH2As-d^zZ(o4N9ip;&obygvV8 zewdze8P1o!9Zr)ho16}Z%Y>~!7c1CXrh0lOTkZDN$=)99tl60QgC%^qQN?x~E|o0-}@I(>N3p@vUhr;qf^5BASudtdc*tQ;7e?}_NI12=_*G4dQp%V-sT zvH#0M0v_5rp=hu>h^Yg zz#>pF+M`BC`>Gq(ufJhcyQA{!qygu`;OYG=GKySTJjcHwgR={SeZ&6TV-ha-UP;dO zw!`n+FV}b8w1z+P(FUZSf=9A{wDnxzj~$lun>I;EvCwxa;+U?et4;4n#cuI>jrHx# zuEJ15aAGFfIosFZZjIe%bEqu7d2p^LWgV_{HUwhP8f-ZqF_`q0^wiM6benbDXp4lS zH-az9UVk3-R#w-jN?QRgUJPmv!4Vgw6U2TIS~ebx4)?m7I-Qn8bkCkp)N1c+^Y;~e zfw5(wk&Qk6u6#1%a~G~O>TC3e@qlAZB9%y6Zm3JdQgLvlTnnz8E#sM~sXCo8F;?iD z=nZ;1a}Ry_Z7q9OthnOq`y|t%SKl!(vWtjvR=n-x$!P!2L-xjvP1Jd{*r#xLxw#6i9b0iQUK9~JR8fU zZERgO`%Mc=H;r!WtvA*nv&>ZAcjdTmWNA1ukae^b0w#kooNvxdw7Z?z%`+jKO{6*# zp-{rEH#*`*Tc*Q3wxzdg-I%Yv+pDL;iS!B{Y96ljSZ%Gd!%H@I`>t1=>4qpyvM@TM z{$#7$2w4Rouy1Sn=%9yGl(j!DzQmq}%%aSEqdi}Y4BIEP+Ts4tyvZ&5v zIGl8Zr$}DYmI-8erO)e-rk5XQu)-$Sa$yhkj zpSN`s0;)lc~OKSp@1*d<^uoeXtdD@Bc@0hjb{(`_TZaTPO&QQ zY$UB|CAYl3TxTin-1 zF|M(a!?iX-agDW=Mjs;w*O*dqt!X8$Q4_8;9mKVRUu*q|YbU?%TKF&adwCVE;hzG3 z9{l}QUV&@O3%Fi^>!0xZz2X}9|HiNT_;o9Wufp;B`Sohtf017g@asIT|C8en@@tgB zGtESQh+ntk{vY{$=ojki#Px6a^$5ILnYTZLQC3s2V+aSrh9UIB`in0-|J?L+@!Jm= zxE_Jqrq`1$cs0d?=CmQ&e56ee_1ASS$ z&e8xTRwT`i+|{$Q+j90$W@xNIO*PinxD)=S=6aJmZSV~&olfh(Lqp%Hj@+7FJVU>^ zx3GWv#>pT%S=X3MwK@%!=9YMqgP--7hI|zHNged^59ktU0{k&9XYzL_7XhxTYvTU9 zKXdT5Q|#WZ)AJX;ehU4AUWC3-xjHNLR}W^4m-)5DPSoMGajbGRE zEMHCkaNqVPx(_YE$+v`WZ=mZi_=2Z_YsV{e9mlnfUprr;e%18#O?o2Ep*0zg(dfyn z85&wGeytvIhivdnjkb{66SAp_qS`{(C>Yy2GqZ0jS%+Wyr)T!!*I~WAaaniw@;B$P1fTA{b4V#km! zUf-CqclC$-OP7aRC%eP0rpRq|^+uVQ4>a|+L@l|RdapC+R~4OZuR+zDV9=?m=K*4MZBkrh~>nIO0c|sr3< zZknyAjO2<((pfzJ_vb!wtZ~QK*s-hGk>Z2*+;i|4mC@{pI0v;f`&0&rdXY!M4F1vK zK(Mdd(b9^++7xwm=RIuqOO|ND(mkH4cV;$#Y26;^RBf!mAF(36UuLt{9>h|`)3&6! zYZ?a`$dYEY;0Hn9`K-qmO_#VMrJaCFw-Z^oXLa6IS7&k67uIxp21f$^o{YT-=dBv* z`m=3ITHW@Jbrb#uyQgLXDwB75 zxBuzS8dry|%DBp~|L0kTy+yc$(wOmz6nJ$l&o$)|(ZR*X```dzXZhJq@*f&l;0S`M^}DHCh`}YpoVL zJzh7aH(1+{@f@m2=uCi3pf)es??7$v3!&@U*)AA-i}w|)Di(W?2E%RsA#WfLZ`dB_ z@2|HTYy3V>*6HgHWc&T$aHPRIpfl*k6vYw>*_Rm{cBc*d@MC(tvo+q-tSW|dd%VL# z)&zbe;xae#J#IX8inPqqy77q*?AvJwHBE7p`w>H0W%O81xXC(Up!E%tm`>d#2a73}{{?!ny1|FHWEm zJF*r{e-L0tj&tUw_ntq=auXxPr!lI6;JpvLhtQ{(O~`^_6(|;gWxOr#uWAQ zI8qigOsD#O)#-3LRXD&7T0hBL2ivQpEwr#?a5?+p;XL6sTq^Ce-hMw9u|=oo>|rm7 zxWBuxJ7P5GRHJpc!|l?mm|0v#)rH)EF`Z&`ry2}qlReXx?eo@zg6`p__7PVi_+6vZ z0XZ9>7C7&V`-f*?AMikcyi|G*u4@xF6%!lUn(+&@{rI;@5WITloEHejNmUAHP4tuZey;zg{W52eJ#ZPL`3M zcylq$H?m)>vt+nR-%q;?4gPRxH==6IP6MR?L{{usbv}=EBORV#Z*_(BcAQf>rd~>sc|@waAWv z=NL-Bj#YU6@7porPZ%moyj)hz1h;{5Wp z;{%NB7$j!Vw5ZySbyX}GxbFk^nkCbA68^_5nQyQUmW*szwIy@IBD2mnVakxnZqQ7b z>Tr=MgCzsU?N##rf3##FpRi<2`3Ch8OXfz;zmX~Pdo)ud_L*;i4 zc@sRUw0w;?)kj{gJvmdma9#%PCHE(^`a<+o_%5&4l+c?G*)ln4EDmnlD^)ep~0{?ld3&#=$)^6+yMY!HFJD>eF9 zkAVIR`v$*nNBJ-D`&-3*=}+4I+wsjL|H2oT9XVur_y7tWI46I)2A2VAkK#Kac-eLK%~aifA*GJP%^i0h(lrT#8U&>fgy4( z;5QY{)i#XWGhmMR>u=fFwJgnd-#8uY`|zExIr3XLwXjSAMI{GvhYlw}Du1mrm`u8x&;F=w=k^UF*6wcW$cF7Z z+kON_QNC|srSxNP%FAyM!M?E0#T(V9GZ<_1JM|{GAMZc=v2OFgx*dBnnLRt!4b*kZ z&Ag=z3m4eC5T9$JIqSsYInp9mc5d)nwIEtUd|g);bo*RRwLTTIV5MvE4UPudCo;Yo zcZ0`k!$~Z6oc+;Ms@Z3%t$`C131ReI2hXe@3+ zyk_d`KiHebvx%;Bu(sC7tD8!;cx!5E93dZgVhVWDnRIfN>rub-lJqP)NZNG*dbWTMk2y#I@kJao+A32iVQ?s&mZ|caA)ZSXQ_S6I-9%IW-;k%F@pP<+y zbcA+XbZPk={C!Xce3RTd@i7S6{EV)n1^D3nk1t$QtUvf)yg=`+D#SNOr>_ibJ`mp; zI}+O#o81<;>M*{KL~}>{M;_mDX3NL%4_}Wz{y4LqA z1ZVUnpBBWWCJ-y#CEne>i!*t?sSbaae*lSzxo>j=Bu5r_Z(v`x19+WKRK z-rj;A|AHOCU^+u40|3guqfM58pYZFc;Og-PF;gT zn`4*M>O=b47isMBO}MLQa{yJCKu z$z=1#Tn{vkjm;fiIeTR7*hnf;7+HVghWV2lMhX$4<^VOlMr{bx+Ld$;79WqU!TpQ- z>?V`l7jy53fN%{b`~WCyxN*aV8`pzEYGiEfk=d1p=f=hwiJBYKdO@v;c!R<1qF6JQ zygY87Ba5%4d($?N=Lg>AsKXMEMB)}lwAp)wE#fxkdU|qZcf|Gpp0ex>AB|+f%8(My zhOZ0vW>aQ+Q(MM=yno89)=u}I@MYSX>{=TNTCHT}wYUI1ih{;ar8w>bmL5Ma@i^?2 zYV21oX5j&hw$^&j_B1)P!VzydLni5%sOpw>~ewHdXlXe;H`+dQt(U+mfQ zfO2|XccEX|Nb*Pl$ExArxl|lKVoUAW^NR;ID)Q61`SWil9L$vLPK$eK5Yi-Ecgdh!j-nVJf`{XA#zGwHY_in7BWPne@^XqMG zpux6)#083qm1y9;pkV_AUcUH2;-qWg1fJ@=nO1v?y_7DW-;}?*CN%iYf;kwl-n=z4 znxdpsD#7mMB@o|RTqe$+x-9um=LLnxz#mILN~E$&l2(l>{UoZr>_hA8-MK~lE#~%*e%{{5 zz@JJ#*oS&*Lw>Y8JDRdq{e;xOt@JOPDn$jVcd+zWKK0s1*derv z^Ed}p$7?tF=LPFq>x;jzzNMahv#ubZhhb!LXtYxAO4xJ_7WgkB1@{X>y3Ya%xTWG$;=$nu~S$ueCzP){ZXlP?c$HpOlBH{PPO?F9k zO-B2=D(*Y(i}Mfk%;>^>@_%9^@22xRFUqRGA$*iMNSSElJoBub(i3&sId!mN;wc#z zH_jY6(qv659&Lr@AK6J`Z~ILJ$N&j6A!KHuqcx^ss?BCSm(bO zLQ4j&I5m}0v2myvk}Gc7w(so|A)wGd9Dl%=*%}Y|OdhubAxn6^@YW7OYCL}iQ_G?Z zATsZzl%KGS*FEr)OSzAaod%Us9q1iveWOYj>q{;hCN89Q5}h}JLaxAWO640 zO^s%zQ@Yvwq2fz=ynYQinG1(;%7V5I+h8kg1W_Jq&i0$0704nmI9pfrZ0p~4H#=Ap z$juE7&gBC&=Rc>6oc|n+-{itNIfM2tldul2WDJQd#L_ze$Qvb#Lq~17Dm#sM?2H~h zmvPD!eJM2karNMFIHWX@PBVXeN#0uDSqR`^G=sx&TRam%Mn*hPYYcTycO;f{)%#aB z##0tNZ+2_EGh*TQOrgTmyH$JrJ!YHER%ftU?=#!=^_EBUM&+=K_hGu6c6+VbTIWmj zv?O~Q{i>}kk{wN2^{VcWqC-sG?x<1Q%;I)az+h_&({1(*Z@{Y0DEg)b7Y>Wd==6;k zi%ZexYas&<&Td?N$yia+&n5w*%qfx=WLlZ);F&_y?N8=+2;EC z=Gjx5H=kbFT>p@}bw##od7De8ACYC%+u79A=`kv7RHr*&42>LGzy8oj5GO;5Um+vb z9+j4LU`>dK(?xcG&J9?^eHzDfihTkc+!=ROo{o!Owp}xq;eF(R_BKm>Ah)5ptJ&k! z=^d`t%QmO`ay(zlt_@(DyQl8%x4->qlgEkRB57%syp3>PM(GJ#B)s4NVU?J~ zHzolj8TIcd=<_?4>iTp2x`mm4U&-Fi+P?6G;dubN) z;;r*1ItxBk^%Xih3e=B7~OHdRvm!{c7zQbe+FJR?y}>2ef&8(*9d+$1|&)?U${#85_~y@ z`+K(Kr~gX1?fmt`d*u#%!8wd@I-h6x>C>m#Eo@uy{TH62Pf*Zf5B^d4(HLblr8PjmBfgjO@cT8*1MDZhREiSK%YNbTke8e7TGZwZT{#tC@masGjkyqg1_Nn?uJ#JPX5ca;owL}t%)rg7+uq9W7ljv zIvP^d(CAV0{ZY*M&wvwpLNiW%vJ={>x8;x%M_F-k8!OwFFn@~o;$21gyRV#oG|oPz zi^q#AkzIu+BvsX$X=%w&&?eK;npD+fYimkXQ!h6(yo>`rq-e|vj> zLtUNtHb?BaOg3k?=dzg`Ju{w!V(pbb32&-~{1F_yZ%amPX*Kzqy)PGA*e(QC?qsdS zZx@elVZNXK6dn`Si^ zAA+7|rij>U`?}xwWyo{N`tu*2dgC`DqkcqM*a_a}jqojnRJFQkDq5uMn5=ET>YHk+ zukkjIwujoAJ)W#19H-RUM97)*I@2Ai_KruE>{-z>zogYAtA_o^RgRA2^P>&OTHdc$ zm1+5N7e>gd>s)wL#xaffrBZZjDdJ9X{1yIu>skA~)AxS%zUg}tZ&C%K-4GyY3vyjyr6?008Br(TW#+kJXubobJe53-lFLQz1q~6{F!bIpLjApg zx>z!eQ=v_IhhsjIvH7x7*;r4f!;@{X2H|As?9R=pj4!e7`n}^!r|R}H1sNwEm)mZX z>+m-3&W<6ZZmGI`$SYH79QD{(m(6-))QwJtXL$GO5E&zV7f<)JQvaT)_L})1CSO`b zLF8b-u^b6`jcvZ54-)JJb^krvZmnK>dam@YnyJm zdhMER%{6{63tYIS&mXFt&Sw8lEsiX0?Q~c&U5z+9j(ucihGvK$Bu5cN(luy#8q*(5 zfqa~m98`*;VjUaT1{+R9n_sr25YUZ}j*jbsg)K{)*SPIXDLQh&DnI>|uRJYVQCDcl z?VmGxySI$ZPOewUP87|Yo@Tp0HrDZDhG7C;#k##upS5Ah3y{3*vo3=tA1yiQ{FNHL|Z5D8H+f#ZH_k{t)lRtbSuFN~Y2FU!f&F z#7(2HnuxXtT`j-w9V>w(WI})GCC=OxD^e@H$QCun+VCp$pA`q#nc}tV%qf;!xo=6R z#&8`D?>0IU-Ra`LoqBP4`t0;HdKoT+>;tE~24wi==`ZKPiDUc^l2YrK6PaHOjsM9+c zh&1AH;#{yazOdS}^<$r4s&}q;vc+w<6K`;Lul9g{c6#aVbJK-##DM9 zrCrF8PY{o!j?=sC;K%^nj;qn(VHPY*G&_`m0om5PqW`AJc%q&?^pIR* zZ}3jDhi5+H>s;PG)4IGX_yXHvj)Z4iek<1GI$jgrD}y>!JR3+}A!#%I*z3GWPnPE| zd;oHc>m>Jt;a`>>_>fm(xaoK>-1M$7Y*I2H}?(GKNcLEPFw5J zGb1UT~C zLbW%n@btzf$JQi%OEu6~_!-6mYQQ+)tywe{D2%}ELVC#(jD*e0<12mkRJ5+K!(({Q zd;b08qsMI%JBPz2^$6@tT|=SSas1Jf=o5Ij%0}KR@Bz8@h-Z+?Zw6A8H5c+1y&Z_P zPEO*S|BK!c1Zr3{$n;zS-*4nH7u4{WE!GW?#Xr6O%-@{btM0k~Z_d2G_*M4Z=cd{J zD$*-@j!i$uuH)lzSo$FgQ>rwzx7tR2^)v33ZLTwhi;QBN2Fo)Y4#}|d*hN64}d*$+ieGKyKVTk{qKC| z{@VoJSAdrloJ3tC?9^8f$Y+RIOkqdzqgw0^^S#)xyJLFC&Y7J%r}6);DgI*@K4*5J z{0Q<0KF$8E#5>O>1>aB=qWXUi9y|!jk6d*X+kPds(PiN81pa*-zdTNWS^NujiZ$)u z|D^*5cstC%`W@eWtlr<#_VzZlEIrZuSI@R>X`8vZ`EQ?ZF>l&GzyHcB@qttXl0tz! zg)Ac=Ga{fF!UASiB#%u1rhA>7e7(0`A*|h3mPZ0;_&lk=dJOey%xetBvG^Ml zAz4^)w*LU64f}SYs=vq+5PkM4JM}s0y92lVy{M&2+Keae{}Owj@XY2!w{Jc!8WiVW;8bDt3=pghVLlNJd zc(xHjU4<7zof^FDz^ka!&c4p>Ko$l18>?g-DyrIVz2=q!t5*XaEB^5FpNF<};_T{e z>^Z)ES_05q=(frX54!W|vk4rL**FqT{`8MAEFS-Qfpt zf>^Do#(?uL%cowJj?lLy2j@#i=x5d}YtY5!cJ$|Vb`NjCTHs(!!$7XRKW3?m4s_%Y zu$7>-9f&3T68)y|9sFTw4s#vysg$x7YCTp~G_lgWbX~uAm35ZgGhaMd=)|MvT2{QO zQdYc^vf>fnL`n*tm}mdM5pbh~C~i131P9F?tl(&!EcDaLUPB~_8S7J{ z8H9vwHhk0W*N}>&)Ik+!{S^O?Igt&t637ApRG_`)AKmh_M^z&=Y@JIPB+>*WY;aioVf z?cH>SQ+foH_*3;86c3h1g)g7kyl2xo7K+H~g+GQbrjtyn7_w|_@!we}EE_KT*F$%m z*|fJB3nOnQVWsu@LJ5(ng0JFhguV%^idInFPx4#`)Xm#L)l*YA2drKz_FM2lry_P} z_*fwlx1t11!lhEg7V%zHvbcK_uPux{!hV^1=O-MF@R_?_BvBC`ozhp?4Es51kWSe2 zoh%u^1Jcy<^LCKs z=TMO9q<-eT?>+L~_xA4HyO+(g`QnF)AKLobYp)SqInO-GariZuEP3oWr|tdFLJTGf zPpqo{tGy>^T5a$KgI>cLQ?TbW-dHZ@UFog{cgSiDyCV6t>oIZ(8UFr^*YV*tAz3a5Q>f=TW4zJV<#sgG+4PgfSffAdaYXCt z4a8MGQsL_FTJZ`tI3o^U%V4C=fMWzG`4s;TuukPh%!|lFSdG5(;5ZdkbmH1u*IhBt z=fJV3@__n|cc`L zSuF-5x*(RS503CI2>1b0N;N%Hi^mT2dOZ@xYil8Td70i&C3*~V!NmsU1h{|)GFNW# zpAorJFmNrGw8u`;ouuD6{#z|o{$Y5NW&SwhAl^1*`xp1)ARqe_Z{$2 z7F*vl^CY|Jy*D-?1PDpkY&s>7N`Mf0Q$zv@MM8o}Xck1SAOa#{!vbPMMQm6>ROE84 z5qm>L1be%-YoqM%yXun>1Srn%)G$#p^m6$iFdL}P0tcD z>3S+GS4=IDG-k{hefypX-XGuUj&I*wdc9?!Ml;y1MhMIu znY>5movUTpg>=TQFgvF(5!^*#P6C~x!yz-Ms&`OAuaquX2|+;#SzS_kB?Oh)A&$?- zlA>b391^X?nA1K_^MH}RQ$4(^g+DjIh_s+^Tt?t&as3=-i=$A7$zXMhUfP%i1gl}= zXtzhGT=6S-MoQNoHi^D|k<=e?V>qEd$_=4Xt0MPyI1GP++U+!S7?iL zuErXryZ_FxrH|lqPhcP8n87he_Pb1`hS^46;%=;z-H+J*El!S3yBnMw4_>%--4S3g z)66rD7;!7cun=EjqE9u3{SUQe_s@SY-(k+|_`Z1p73}fzozAn9zc_=Mr_Z1|^)%)T z%6$Md7HR+1eByY@_j$83z%icyI}>I{YAEjHu&|V98g5QGpP<>{|I0HkC-}$k{{a8! zB>vISDIp_haCM_eJV^N*4G`Jw;MKmLFI@qY>bs7k~=mPLeXdFU z@TcM)ZDD8IPc2*Qfn5g|yuRSgXD1{C6kQRRQYybM34*l$S%dQ`aL$1xt6F8PArrU~ zTpMHp-!RO@H83~zHQ0EB9646bAAu`hQSZJ>i}p!D+m6TGWj**7HCi9X)&iFHdG`pL zAGEEHJzp#UF@oDFfMCTd5BI>@W4p`k_T+->sxzGG!QPXqdKD(yt~xWS_r12b;K`w} z>yuq!XMWvv%EB()+b4CMIyNvPB{0jW>W*%6W(6i^1kF|jM_-a!NkEKU4LZ8r9-RXM zb2qmRZpD8!@t=L&Sy)BCkLE#Dm_vXrY`)UQgLLiOb@aK%epdG$dVTC;s`%)${dh-| z@&h^Cigaga*rdbV(P#DJ+(1ZtHd&j6BCu<-_1o~6=ha=G1=nP*bG}aT0nS&w#QSt! zvO6S5w7J+76yz%In-?6M_d&QTuOL4>JRkEe9DMY_2%m%7(3XPYMC^0tVZD*IY6^?6 zERE?6z4q&^GfunFi5cr09Gty6WYVM|j{d`HOS|Ou>!0iBmYtnGF}FV+jRQm{Cr8KN zG+FNrlP7P?$;45=1mqeMw|3AMmFg+vm^;pR~!92L?}BjLCajtgmcr!Y$u8mqMMHJ;|5UFl>p zZAb0cx$E|0b02$56`|@t3`Vv0>xVO-H2WbxJOi$vc^`o)I{KU{A}2>z!x_zq@Iz&z zS>V}NP1oxkR^XAp>PsVkdqP63g5<&*yYm`L_ac^_^ELDJWOc!`qdbpgZ-y^j1Bp8h zLsdCSYimm#D3xQCzgINl9D%{{j=1FH9**?v>~6TuxnGW}`_kccf6K_r**JOfhTgwZ zgF2O69$GpIF^|i$-Kb-Fjq6n7;~^P}8s9n1-A+-*JEuyH@}%mRS<_L=QFW8ooPz#K zPpIWrbf(R_&L`0QatkP+sisCo8}a`F1#$sDS??$x+6;88jiT}7Ld`oS4m zo{B5y2z{g!xU$OE+l8JDN_v9J!Rih7rUvty?uKuN^ z{ksj!O-jlg_+Cw3UQJ^6OkAJZ9ZPRMkdb^&<+Cif9k0Yf8m#R{fqYq@u@==zMl!@+U3G1FBLvIj=l zJKK|e9_-{9$uh)->@>>|kLLa@FZvH9sL%Q{GSuqa6)TRqR;~IIV$^77kS;Z)s4>Si zWGzl9M{N-LhqBbO{z#g7*)mnIYLzKZjr;MqPLYf&L$tgPq^q!Sg7;~JMazfuczdB|2 zJwZyjpe)TcVmNG0kW((I?rMYV7}cL&Ea_V6x2?T;Z>o-$uQkfWtv%i4^_pT|>orqT^4xsI@7CT^k6w9A zUc;Y#QPJ0+j9ygKDMP9LS=x*q>n~B*7rmAIYg8KVD}oQ9H9=E0mE_D)NE*Ei#byU| zGrpR)?5LOAsC@GJ>#sk0$LiIqNBo|oDuh*kM_v^YJ)nVPC-G&;NfI~j4vA@;XaXa~ za^{epOq)|TodqbT*EOeJcH=v>!)m`jwohh!59A%5E4)h^bq(QeW1)gIHH(O%O&(7x1u z#*KHOK8Zfvee!&&eU|&I^V#UL#phw4-9CGLKJqz+JN#pO(|mJ$`}kJ-j`E%Cdlq(u zmik`md#&$nzW4h+?)$9o>%L#xq%GLi-Iix7vkkLNv^Cn!ww-Ug#CD@?r|mV{2evP5 zKif5Xs6F34&|Ygl+x~$4N&5@-x9o@P|FpaP0{vqBy889@>+3hv?{vQzer2{8DX>Rie&E2s+Q12c4S`Pu zz8Ls!;HQB<1iFI)gJOdkf^G|XIOwIIcY{6+`XR_2+%vc!xGZ>B@WkN8;Io4-48A=0 zrr`U79}j*m_>GY8kmQh_Aq632A;Ur@hBStp9ddriB_UUZ+!69j$ZH`VgnSwDb7(|p zcd(2DLWhQq51kg;5_)dv#i1KQ?+kq?^r_GnLl1}9!y?1Fg!Kw53abbk9(H=zjIg$_ z3&K`~T@&_?uvfy~5Bogq*KptP@bKjDp5X=IW#J>k&j_CtJ}>;j@Jqw54Zkh?{_w}c zp9_B@{KN3?!jDD_jHr#65YZ4ZH{!gA6%o55_D1ZB_$1={h+~lfk&_~4Mz%#Rj=VH- zedH~X_e5@w+!OgyzAgH`=$$blW>U<|ma0Gd4eVK+&58FU?nwM+;^8D)Qs1P7Nf#wumULaxZAtefJ(=`;(i=$! zlD!&o09KJekA$t$$OLEN&YDL+mynTWhrY@ZtUXMrMAmu zU0(0UD|1B*QDK&c5m8_w5QWvO?yA>v$P-5++72^ z#&qr3wWjNsu2Z@;bzRtXUDsE;?(h0}*B{eGdSH5NdRlsRdRh9g^a<$=>2uRprC*bN zbNb!s+tc@?znuPV`X}k%ryuJU&@HB0TDOVaHgtP8!!M(E#<>{}WjxnCtb1wq5#85y zzq$MV9+^EVdo1a(ug8}?hxNR@=hr>|)$?ekZ)R|2bY^m9x6JI!g3SJzRhh#w$7Y_9 z*_b&eb6)28naeUS&Ac=7yIv)|%6g6Mbw;noUUPcQ>vevwWxX!#bycsodVQJIBdaaz z(yV8*yJS1F*JOW^{Y~~yIi)$va-PW9+uOHyb??c&*Y@7u`y1yV=T*)P&fA=KJ0EgB z?)-=IMdusN_njZ-cFA?-&dj|tcX#fOID|jiwbk_-B)@~O+nR#@(V170SDrUCZ%p3Q zyw<#>dF%3S&fAu^JMY!JgL&U~{>%5tkI7HX?~`AfKRf@z{G0NhD$ok53Pu*3U2sLg zjRkuP-YfW`;QNBZg<4@yVQe7|xfUfC^(e|O>Q_`#G^S`$(afT@qU(yDDmqeJR6Mx& z^y22?CBYIN1;l^8sax3aY)}GXAiky z$Q?sI81nPb*r7Q?tA>skI%Vjhp%)L`GW7YOZw@^;^qZmX+Q8a`+McxoYe(0fUfW!| zrgl&5KWh&U^BLX$%ZF_p_RO$jb!By9>e}lz)IB{saQNxNFCV^h z__M>^BVtDsji?*ZIAZRIB_pmKar=npM|?5jr;)xRqef&AUB zzF_=<@z?R_C*$9}q2`&^Gei6ROK93>G&H{Z&K)<=_x;?qsqWfi3w+-4SqZny6Og(5 z5##b$;rHJLcOh&7#G&zX=h#vGcL3>5?Aiz6{|7pmSEoje}8J-dXMG;;E!it&u6MT!r5v&Ox;csto#Qi4Y6{87P7@ zJJUk+6e--qp#=%ce#JsZFiBcx{C>b!3JdEI}%U;=mWs1 z9rQ)Th$~m5G4up&Jw*+mKcE;852yh20`vo<0J_58p9`DlCASnVzOoK0BroG;<|5qP z?ZSQ1mAF~F6m_o_dI$1nEY3UD!uia4z+ z%J~3p?|l#JCEx;y#}halLV5x@43Ho&trUJTSo8(tnP2cAePuUM3A;WxJ?TKd+MDf8 z15a`f@;6jes>LYpW}z5#w|&{|F6>XtL!1dB8xqDnv|PyI;>sC08aM9{ya4l2xI2gN zR+x_glp>x|5sAEv0Yu7iqD+nu8S+xPV+Z!;*M@T03wQxHvAqEQ8onC7|3Eta0UBfR z#Y>g)cHF-7J?!?lZ_oyd8b~dcsS7}NHp+H9>icz~ieVf4P8Zp5+e_XC2o!@D-Ugrc z6xs+tohh6?X`)SChW7To+bzFBx;KHY!>ErlP#@ky-NgMoDi-zOWAvdtVO}Q!@G4t( z6^}MP8Es<@`ui$CH30j_c!AA{HrQR8f?K2uM65gmJmh$!li;Wr$Z!y5CQjdD3}slx zD`%X{-bG#z907hK+V48hwi5ADd)3?R05uEkW0{Dh_DgMEix<5iS=3vu5+v(XWPVMY z^l~C(*=Hjx{hK1cq4O>Llg9VYesFx}-};?09@z)s%?G@y1L}&vm?ls^^)K<_kk;qC zgc)Rw1!Ri<#LxY8XGa)c`R6{++58W6C(=&w6I=(nYVo}W?Sty&d{GbiY@u~S9XT8I zq7BfBIyMsZqnpS=nPwACZAlfl-30V*nidDWVXwY}n`Ll61@%w|r*|FY`iVNp{XNQ` z>mceJ%@uuGjt$1fTL|WaK0a@eiT4kytUlN=+=*3Hp;i)|VyOPb_z6i1Z?~HuG(AE% z4x47fht&-hn?&$orN`lOseHsCaPKC55{K0BanQMZT9wA?xe!rMDgG$oV<+2}#S+X< zM__NiH`?-Id4ar4u9F+&P4YfSTYoCQl>btRDqH1Y6MiD(I(Dd?>KXN%dLIvG1!OY)tvp;p+%1DULKp zhQsN|bM$fab5uG;Ip#VRVU6o1$E}Xr9d}}#Yn$UC#}3EisgbEMscEShsX3`*QYWWg zm3l{-O0%VfrbVRT0^78dv|ed7X;ab~yQ*%_cmMqM)d$@FJo>Hp#eJA%36LTOddNOv zlaZoL@?N<|ej>k+-{C#POyx9Ev>hpW8Yy}kn^$-XQwv9mx?&ZYQdD52C@3X8r84ET zl&L9ADN9n;Aw`=U3MqDZ0yXKT@>avC}I>qf<{$ zU2CN%94U&oQq;gH`t0^qR*Gz)ZtB6p~Cf z$YUIH|LXqP{o}E=V`m;4hPytF`yIqF3n30(dT@nqad7g%j)Q9sE;=~kV9$e>efR_Z zUOI@K#e=Sc1?)10)DQ3faNCDBe7N_+Yd=i-Fb?|D5BzfAp9ek_;=qf5*AF~p+Xkh&0WA}mpB)Kc{~$Wnc( zK35lGADdpiO2L_~Y}|}cE(VKX;tVlGOvOE_voWe)g`R7@xKZ3G?iJ68=fz8Cr|+m+ z)n)27^_|+NWy>hMyOE1`c1q=F-1~mIJX6la4$A^bE%*|7C+>IMDj%Rb8RYwNzdR&A z!tFyhtKI4r^-p!4T8?)d-dB6o2kP(YF|8L`fUmkweXFihk86eMNl5!Ns_9ye`W5Z{ z60Jxz;8o=N)!C{UJ-`Y`tkIo336QCXgOpV&?xo4Wt9Qj>ycjM>{uk$ zi6!b|u~s~W-Ju7>L*f;2wR}uw$Y_}?vvJC!7hd+sm$h<$EXSFWS+ZU>$m!TKx>&B4 zD{+b0W_hLh1n+3PgqHh^d`^BWw}9`Ckv$hhiF!Ft&KC{1UtzjD2RCUf5;O1;)hv0wm?M{n7Wp^PESJg)MY~)f*2tU1 z0*vdc!M9u~?-1AGoZ9uc+v7U$a+~nx`K|I%af^IJ+>CkBR=EpjU!N3Pm2*dGQFixJPA&sKRJ{nY;yZLcL@^Q6a}- zy(|m-RBv%P__8qBRYc1k;7e*mfAEK+Wuuq~{^SCTCzr~b#0~O3u~BXl58}k`9{Dz2 zh1xD~dz`os?|)nYUT`V+*SF-C+9d6C&8fMxJhbS1tr)#%Z!J=b(qhrGCTZ~)Gs3lG z?DR!re9e@7MJ>j;x$+{hLEbMm%N^n#xm)a&2gM8W1M#B#P`od{!#tpyh?3ngPe>8L z(jh`*D%PpeFc0e@e87v^WW2C5kDUmfG7fz1P|**(_dty6E?EKItx6QgYEdW$f&Z=) z6XaQ9oSZ5CCa)38KFBu z`cm8^A9_@}m)+-cDfKt8NGC>dAL_F=0dyQUibJR4beF@^2Cm^%hrI^wgLV*M;J)DD z%MIKH*~Cc(Zb$oAY2bdCcfD%h{wSj_44mffrx|#V7alCr)LO$lL=>Xm*69iJqAlEu zws;YRITO19Qxc>dF>opH477p!dEC>y!^fasCW;`REW=F_+!sUQuLb+ji?ClkOU%Fs z*bWZB1s;IFfqrSGXvBB4sE2(kR0sH;R`@v!=F`}98T#IKxNCuV8|-^CwnM)+@o z+JMoZ1+BROJu3C8PC#FTKTOnNl<4af#;HTdw!-jE>#5y4EcfF;0i}EvXlO?IJv4Yi zI(0ZFk9QWrb8v3AbFNcb=Rn_zkC$5*cT^)z6^jEt8sTq_RSWbwumG_vKar#zR@>cui{RF?v%g(Q~hf>Gb3*wVZ13EhF)zT2Ff5AEJMUp8H!OcOoqz{8Hq={qA(*} zE2A;yW{9K04PGJ!{aAMyhY{;@nSeKclE4k6ps#6^U8DotK&niWUBMl7lNsW9*&QSD z3$mxo1hb zE62(4;Gbs5iSjggI$kiE1lich;5(;)Ynv*kfpcrb8qei&hPW5w>U|0&sO_ z$=R|=&H-mtC|l%Q@e$rcIU6@Aw}E4w2X13N_|}DT5%{ZOjGyO%n|TBL)lBAPm&gm{ zQjDm7lNZTlaydA|72t1I%2jeT_`@|ArAsi@ua%c$)_Mi{$A02VoE&}(FCttmuK^c% zEjXF$a6{JhkUZLemsoDZi)%OG#feXaa9{mi$m2B;Fi6h5^qq; z!&s#n48HcL_*EX0Zd~dpv7Ug3v2Zg>t$0hcgV(o-`N}R9C_m*d=BWS`h!^35Rfq}| z!&I0GR}rF4MXD$nvB)OiQ+UhMb)dRYMMA5H|Kw)8pIBo z=cpNKCRXpxzzq9SHCr{QIhg0PsJWQ$v_d|uUCmST)dKKxi@?jBi`mopVwZSIY!DmO zVo0wo5!Yiz6eXesW+a#q#baiai1qmkdB%4UW`)Z!<6EIF0oS)mt;P&-4d!uc)#YlP zxIux?cB!W@+xt6Y--+LRMm>uaj_1`2nD@PidEZOS zd%gAfG-J8B>HhksJailY;KH-mHE>KkP47;Dx(YVx?Fu z{)QRpZ{kexnK~?%;-2;+2EQ!CMVb_k!FUeesUiC-#d2T7_1r zRcY1QAgx9ltPO!|WUV$#tJ8*SBeap)C~dShMjNY*gT&+nZK8G>=3bMuGq8?wrZz>Z z$6CrXtwC$lrfV~_nc6I@tjyM$v^iQcq$}rYXKSrmo7S$))8=anw1wIt?HtHlo~NC! zE!Hm3mS`7hOSQjg7ir71<+ie^t&Q^=?em&vEH4~Jbn=tu6Izn_J~% zx}3SydVIMR1-2?quC0n4>r|E-sje`nuP~^rFj8Hir`qMr52)%CeQs5`kaJd2oS)u#XOs#JXtm*6~x5|~T1`n|fwn_{oQO&+x zPJ@sNCM372g7wJZGW%eIpusvpw!!VQni?7dsUV&CWzIZjZs3s45jk`7I4cl*k*$^s z!B%T!7;MXZYC)<_w-HlrMVYNmcUtG=G`~R4fP6g8zb&D3isnYmmQwo!V*M|mZ@z@ReM zpsK*2GS_7rZFw#$DlQKkeO%_da*c!+8l;vmiO$^OYM(Kv7Pc{7(dcfRu3RH|g%!53 z-g%m*SC3pH`zwp|LaQt>zU9W(D5feSkE;rO$9nRv${?uPNK2KOmqs2|RRxbdG4FB< z?PHC+8>?46-?7xVZDY9t+QxG>1djJ4-+z3=tj5;Hwpneq@iSWM=QjpU^jH$1xmDHq zwux+IXpLOXGqS3>*mfER8*rM{mUNdTF8_%+O)b-!28}HXnaFNTZKPK$rdjwzlN8e= z)QI2Ihv;;eTEn`~Tkmw`xxDotzu44=RCs6@Q9Cq5Z#!&D+TopT^(tf8>S;8!wz8bI zHnie0-H(oQC1CR)CcLc5OH*Fxt#Nv5T;7^|OGAA=Yr@JrMPk`v1n@Ye;lSI*JFc=~ zZyTL%q7NOFPDMzWmG6`egLd66u#8LII|L84G??f%#)x8Q^qR*SeQaSg)HBSmKCq1I zB;&S0{9&?ktMzmR4)WwDx^5b1*io2QH}2)jrIQls>Cp9%NAV|6?=B476PO-jfhWJv zti8*oz&pQk^(buhR%=JT^I(8ciCa0oMvq#~y#Vyw%2AX?pI2tI`Z9AkH~f`x?||_1 z-ofQG!YMPqMz7+`v)3Cfyk5`efO^mHUEj#{F>sov!URmSTBWVQ>cucl8>2$C9&m0& zp{jK*>t9+cf`pAZwTH-&88}FD= zL-lwom@W+4db}=YxtevBeU?GuES*H#EUu&+y(_OsAHfUt5&W#qQDclQ3YtBmwXw0e zslK^k)-+oa7ly6L%1=0{@M%H{^yE~O*qZh7YObH#($?PEGIwU9t=Y?YKKHe`Rr-+b zbQN)*i`rD7HKJE<@lL2Y$QmW24>uUPjgqP~DxNVMxs396xs2k;GfUQ}m=)E&EuP`1 z(#WhTGc?0hrBOesa)Vn=9FCmT_7)>Qx%{fi16xiQ$}4THdOo#!CA>f%G+ns{RRso> zxp}rWc1<~mp}Zon?YL5KQ&yAYb2_$(l*aKC-s5b zm1{Izohd?9(%FgJN*;otHwvf9$l0nQ-+7)Kt1`&Yx#irdDl-R-oU5u1o_Au71a`lya#Y2Z*dkLnTP?h#C8q` z8*q-*xOAJ6JpV=9XlMXm#BNM&q*pAaS@J`PZ)zfHdwdrS0_XV6ei`6DdFb=KgMW3hl#?HL*3jcE& zTU&BSu`|{*-G(_+4nFM*TJZ5}pNSR^#6G=cUMqiR&1d_zSqsU&4KuxFLKCwNw0*4n{akm;~r4Av2vO z9pjM61BXrSjL-=+!Y40!48VentmkqFHuH^jx>fsh)`YMXMZ#L0w1(!EIZPTOL>eIm zX@u&e=@^m5?uayYr<2C0P8vI8(g>q^gP9<6>G*PYg)eu;_;M4&m+KY2+*RPqT?fA0 z6!B$lAKwz4=H_{GTA5}>h-N|znhDiu)-j@)-4V^~PN$hsoo05(G!v%NT*Ndxo%%S9 zuRgXobKc``8Q=pFJOsj8e z3^hz!7BsUy`0RO&ZSAwbK$2~^scSIpW9Bxt&T46(B@WDm8n}vu2iDu&poI0tSIfLglH#D}kO>03cQ=3BO*0+LLXq>JG z8_L>N?j|Uju&EdrXE(N64#Eusj}r>Ny12U9HfL5dmTzorjni718#wcFbMyQu(R1qC z8%>i!-@Xa{F{C2{HhP%U1PhhMM zu|o9Hn)#l~Twk8Ekk@UfM0MQhWnSWi=NY)m%RS+yd%{ikgmb0Gm)jG*MgBZkPivVo z)t^T+!YEr|S8jw|kyGE)ZkXxqHqTg_0d0nPnLqOkUcU2#XSTG=uAka6AN9lvQ(w-? z(^)Mi-bd8^=avV79hlnK)Uv?i*u^c-iJN(KM=qV0$a5LQyYzLFJe`|#=H=-vIL}zz za#fV@j0=h7_F-s>SQBC;Ti04?_jX$Dt#Pp?OwSt5;^Pf+k2lCW-k^jH3_>crHHF?z zsqmf08*~btTyzSZ3_68g#{NUBQt^%~pEVJk%E#Nj+DntG$E(wfNhx(|hDOhxaPNZi zvUcgQ=x$wl`V5U;1ct`Da9mYh0p#g12X|t$B6J;5VRBboIb3?*;B=WQwR$H|<*eo! zS5;ljokO+L>9jS>s&8tU5kgIF_}s?kO4f#PYp-Z(X=~ICLfOFMz>cNH94B}h{p&Km zdB(R$|6)0i?ZMCM-$LVS+7}!868-Bk+`Ei$U9NC_0Wzn2R9VH)sxdjmg)v@Bl3vC^ zBP~r~euUn87Fb5bg`qUWci9L0^t0^+EABsIt$RJ2aRV;_P z8j?~HdsmM`{X0&cNLhkiXNeu>i=bkc8R{k2HQ$((tJk5vjU6@#S+9Li_pAL-e^hu$3Hwvg zI6WMzWkM~{#zUQ;O@R5?I42-!KL!+rU^grddsR8u-L6FH^mr-tKA>b2Oz6cd2^j#1 zJxo*Qgl>xArqKB2;Hx2@!T^xwh1?I`EVOp7Xz$A0QNn%_LeiK%0s0&w81xNid3J>z zuMzMm5Ni+Y|EkLB+A$)eslL4#v_gs<5)^KZhss5p-PqbJqUO}M&K3!CX3rt1AEKRp zC_kw5a-ar(z9J}YebJa=SD#%lp_eBDLXbi=g~F7*w9P&}w4b!iUVjU{aI$4!v!5UZ z{F6@)Tdl1&peAUh*I!+b@ke%l=FexGPrLmhTc+pF4B_AVBF<5^Q9*UKDc*kp<(>X& zVBhTdvzOW)w3ixx7x{P4pM9VHB^Bwbga4XNe{}(W`7fwBU;^OLfIE!8)dBQ3!P1-N zcLX*6SN{Sgclx_0!0Qh*%*WqcR_6z7^!i)vg`4J}2EHE+cp~80fL8JJeG}e@GF{5Cb72Gz;x+9{P+b z^cnYvvmulHwpc7a#orp7fBXV6wZV|gxf~KXPRQMsK>p?dIZBR(r0nUCZG9MWF7qKd zx(L$4kE4%S2IB1sI$BuJg! zEmI&faIfq_{gZT1|0GkfyZ?bqLr>E#yJG)$zU)r@jqHK_-}BIm215Q^h&$cyis#%1 z#Pfg`03CoA0eb;2yZ6ZVal^pf?mfbOf@_cMbJ+906Jc!u+y&SQxEpW};5oqafENHA z0Gu0u>=I-_t?;&hg1Z1)0e1uL0hknd$MIL_eGc?W_iN$|_dywjdjoQjiY4xc)E4(% z^`HobEKZ91E7<%fqX991SU?;g9*_V?1SA2H0V#kk00$rykOt@qNC$KSWB|GYdH{L? zG6B5+S%7Rn4xl$6*Zr|{0rCL(fC4}vpa@V5C;{{V^ab<-lmZ3-1_H_e<$wx6C7=pW z4HyKd0SpEV0SpDy0)_$V0K)+z03!jT0Am1S0pkGU0TTcd0jB{j0jvb90;~pH3RnZU z46qh(Iba>&3c!_ss{mI6t^uqETno4ka6RA#zy`oZz>R=SfSUj}18xD_3b+lh8E`w` z4!~W2$K4;vzvEVi!@!TaKUUYeU(*)3Ki1B1e~c01PWOYT8~adO_n~&~fa|wVJ2$I) z-8ZQR-PdD`eBb>O#u|z9-e~qxKQoifl_%AIr|E7 z@HM3P6{PGnQ1zO80Cnf@s3p(2zeA`ms&i3?u64hRI<$lM53~;j&;ULFUw{o@2lxT} z0RezOKoB4p5CRAVgaN_<5r9ZQ6d)Q91Hg?IOkF&_34laE5+DV&I0_Wy0v^DL_a*L~ zpk^PZ$3qFlNFh_GCkyFRp+p<);XBmb?@(XALp+C2M-QQH9zxwbgnD@h_3;qu(jnBL zL#QiGMG8K>p=n6;&bOU4nx&wLudIB;5y#QH&Y(Ng6Hz3#Df!5Z6*4BZP zbfC3$ptV7Q5>N~%0rUa%1@r@y0tNsE0?Gj8?&r|jI?&oW(AqlC+B(qMI?&oWP*p*MkKx^wjYwJL3>p%{5ptW_NwRIq;I?&oW(AqlC+B(qMI?&oW(AqlWnJCFi z@LdU51y~KZ6tD(x8DK5oa=<#k6@V+|^x*hvnlqOS}d3k<9HlL!yrhhoKAPap7)oyFSv%b^ie3{0Sj_ zhwyZF6#m`ruZ-}KCx{hpF+13Te7MVf3t@;ON2KOg`Q2nce&uU-JW=zd>28_)`91GEE( zejnt?M&!u@=&v`co7{VG>M0lf@B@Gc0S^Nn0Xz!W4%h)WhLWMV;&#lG^xpm_@e<5l z=5hZkgz`Sh<68G)LNn_J)oYZ?pRKPh)WbYLKA-?l2%tJ#3@8Eg0rUm*15mvl02l}; z15h2Wz_$`m1*irL0@MJg?hnCtD4-TF3{VFc4j2I#2^a;S_AwSP4lo`t0WcA88bI$! z_Mj)(gPvp$dXhanlC8n_GQe8E<$!g7D*!aYU4`$}fNKEj0oMYq16&Wd0k8qE5pW}5 z6W}Jm&460~w*qbhY<9nmo@CF-+9`UBJ?Js^oUFZ~x7dT;VvkU^Ni_4bPxade8O;RL z{NsLTU&aq*#Xpp3r?0N_sHQu^m35B#R4&N;kNtRjo0$7M(9b{jyBKSa`?-nhJ>l0m z9<~lR!I4GHNnD@k_}?%wbMW`QqNSYV=iY;KAH?5YEA`)b(uzJ%=%M4CGyeTi8ve-s zBqRv%aVPvv77lnl<7fCdSza4qoy?X{bB?#er8y@y-pQ!`+#NtiG}Th@13UZR9`9)`ng{Qr+A8= znV%=k11~@5hiN^Ce;$euw$VmS|Ev%8@@Sy$LsU212Tb?gF5DksuJ*e>@bmbYw0b*5 z&)(^0x*>W_7MJOm)8l9APWAo05IXyDKc(y458>XaKlyWSHvDYFXm^UANrC&PQ{@q2 zJc#)Pm5=w2<~Q^kq<^5|R%QG~0&*EUQE?eYRhHFg#_FIBv&<~yWPOPnw*&mSA4cnc z=jX6IVeG)q4sa0C>8C_5a0Ix+1m`u9@TIf(^kPUR=5BN*KZ93*`tk};DX##P^9oP} zR)99+)Y%?1qSNY`jdLx6b1ji` z&BnQA<6M)RYZAG(4QIh|YD)z0I(-06Y&}MtKhD>OR@K6hn+L(&AHv#N z1m~$Q^7IH|If@fg61jT}^8jRw;FUC-Ucnj~ZhOKS8qV}!4GlLy-G_TsVsQTEe%$u6 zO>G1I0A31@<+Xo1ul?I8-*E?LyVi~~Dad!Iyp~V-jvP>EbyWLoT>EUC;|im$Yx9;e6gQ*e=IS2pY=f4uo?jc26{%uG<1Pcgee8Lgl1!IR$b#1!6yC zCrXZ1JVSA+?mf)0sD%8ugyL~;#aA$)y6=aRZHEy8m6qmJT7kR^6NEd({c%odiMkMX zrd^~if{K+;qx_<|{9?KM;^@qjh~m;xTw01t%b!|_P+VHdtF-)y2SsUNj|Z!gX_%9J zh1%i0H%=%YiM=S>emz*aWtM4S zP75P5Jrs{wp=E1fu~RLxF&0LY>V7?xPO)q~G}l;Wp0s&FInA>5_-#V!7Yh6$aX*fZ zB_Wkb%ujf*$i=2vKh>cx>M`%_4uYFi>EG;-TOR%hp3nCm%Y^QOb0e zgfdS;$wHq6C}k|l!V)aZVPP2-Mm}8Zqu4SV0c;3hQdFgdk=Zyl+exuSttUV9BP{AZ z(<}-#N4M>Qbm&;rObctauyzYuZea*H>KqPliDkCh#JV6ijPN@7Fw87>QR@)OtxOs# z9NtFLEXj#b3dw@7s4av=?Tp%;K>6@2U^kmQ8+D&)=CLI#>S1!{G4t|ag%Y(_hy(|P zlhhAT&LO^TVdyh-GqR03z_y>5W>H@Oo5E(_n`Y4yl3HUvN?M$BQPeLMcFe@0eJm`@ z!U8M|X3>4fFJ724LWxc~36^G=^{}uU3(L1K&|-u)&@!8BVH2XObxNZ>X0?{>C=0Vv zj^e5vWSKpWUJCUM`mGkW&B9>3tMSnYb}i2fo{0F z18N7y@t}p>U}049x-Gf8=QwveEZbccMzrWYUPT_D6+r(sFysiZ{Z{+<0y?g-F{mp# z&9Ng;Q)b3CQ+=^8^yr3}vM@3$W_Ny;S;$GSD9bFt!WGnh=ReaebhF-NFu7*ggw`S;ANB?i0)GtCL{gTV}^B z>=z4znI1}&yVICg?g@~)Ae2J^J zuu*XL4Vz5{c95|NCYJb~iN(P-u7PdOvdrdM*m-el;^xD}invo@OUV|nhQgqqiN#SI z6XHID`lE@(U1?$0S=eR^+hk!di+i5@#%;CCwprMt7WT4*Jz-&cEDRLrp~SyxnR$G8 zus1DRi{?1wm`;5haxw15xZltNAa(IJN@GF>FehR0K^7KaVR06gVqxhPmT6(-!1@7h zj`v`Noy=<3wiPi>jc)?(!4_I(brv?p!WLWDN((#9!aSi6HjYD{V%d6pSQw=gu@eQ; zEq9(!EO$g-{6*~6gMm`R3{)8yeCV|^9$5Si@x5S|!d#qpqtdCU^2UZP}mcLoJ}O|yh!CYE${(hW&BC*6^BPy8+m zd)mYje>Ac9S1qi=!eAEv6Z?JJGTVP5mJni@ePm%@SlG8FMzk2=9Wl*3ev__FP&%a^ zsywy{ex?skicW@k`G_)oBqX3@9F$j{GD>hkSIlN3fT6UYmReY)g^?{v3+kj!X5)@C zTY~YIj6}jr6H7#!Gt6L{(9E{&oy^W*GqPRI*lJ+w7~7I?U&4Cmb|#z(+i2O|YGDr( zmKcy2lbDp427I@LJ!@i#pIO*^6H7Q|VS6p?bqm{PVFxVi6BDD@629WtzBkQ0;Uxwn z{F3+$*?Qvjvh^{2cxX-xv&@!S*rV{@gYqRY2T;pczJ>L%uz?m}t!M)pKDr zwwI3$YL*Y=DS-!)s*Pb4vJ)@~Vii(#Fvn^d)QPN)B^B%FWYR#YPZ;Ah8m}4pCSc=(wF>dOXvY10C zX7>ebOSfo4VxQdh3z>zl=o$7`!cmfhAriTlifHujk)a7$$9AH zwB+hI=cJ4C$I1EW#0|CN_cu~Gjkz4oN{vn{CxA&NtYVv}eNA&T8cab88~;V>S} zp(SXv1BBbipyslQ9t3z07ksk$Z6%`+HEyz4%q#4)r$*P5er3V4~aV_*S;X4jF7G z6RvJ!mCS!tw~)&1>sQ=rM`2>81Ll;volM)gWGm03Fma1G#eP27iVrxJ{p|O9u5bGl zg}I-?mv9Jm1&1S;{-L->RN}5l>M@Qm%||$dqfGM=_Ip$#I*%}&hgm(s)E?GV3I~2E z_9IL=c9wx3=2#x!-LCJM!tdF<5AK+hVypUwRHny=Q=w7p*pa3bX%w&2@QQ|%ieowI zMr{#`wV5!XeR$w%2jLw1Vy1jCQ@)tpU%-?vW_q61-E-_q3^$Y~i``u~9HM-&2AOVz zNmM<~E*EpoTtqnbBq`tMMMS9Fe%&0-QI6Nmd3BUyJjQu-lym7AQ*uljf-sNjDpPxm zQ`cKzG!aLc!lRsfN4f4@#xY*TF=~u!jQcQEB;O-(+a%Sc?W`_gdbYFeVh(>hhqjnq zzQ=Cf;hOL+Q}{l+f0y0A%kHk0S#x@S8jbm)radvr_{T^obzHIKxZhUp~W79bns#m@oFWxCY_=ny3P`}_@`kc$_ zb9VnZr}STJ{sV<3eqh@ln3BiY_D92-~Wz)^NX@;Rubpv{J}ez;AY^+DLbrZbTjK|S@UKkD;|Qz->h z0x0egfN=nC^C6bGgd_~bSH|iFR*Bz~qLtOvtS*Ndgj0tJkj5#+e)tgJE`(T$Sg5US zaF2&Nf@|+;F5faPuMKYMdxx`mE7$PV?gE%Bcc)sZqjQ9M>e6Jn@ZOvEoLkHRK~bRL zBjbAn__tm_dg7z@19kv*0e%7)ZrCsB;SRgg0{83li6u6F6}aga;X~R&cjFzt7fybT z2ad}Kn|8jj8?L)SZz`_jvK`JUw<_H1Ol@u`s~cGD%j#9E4q|mZtIJv4%Id|ewz9gH z)zz%lK+VCutPL^(5(#s0Bkz2i&RB|@SJy!H&FWAZeZ&SxWE%*8B4VC!qYt_wAFJ%f>GqtOk!sUwc`Y!f+F^Ad8_)Dy==Fy}E@tSQ- z!L?o+qaXu*tGnrb9+H|k-?V?>=kV);zZ$=Ve&hTapf2~@gTMFu)BUUcXZkPk-xXjBs139Q4hfta zI5#LDs9(_fpshhqhfWH0;cpt+{;dPva4aLPMe`M826jg-R5)DdTp+C zi}~}`?cCM4*SZGxS`Wl6*yUPTr+cyK*6TmI?V9d7fb=Mz4C#UsBJnIinZOd1sgSgr z18Kc^7|FUqa&jZ&@HXKu8@HCL?}_bNF6{vvDs&56ppbv>dS(cYW83%h6i& zIwT=;nMETyc(bK=fomhAM0etZ^*)T&zhH!p!mAVMcuyi9??Y7L-3N6NvoYZ8r^=a- zJZzWeAnnWX=E6F>sjv}w{+03-cDxSY!2SMJxPO15nkH;26?gqts}Z<&zX7^5-1|QW z_wt{v8lmfoHvnqXC^bnj)U0th?S2+?J@AIWFx>E8uV%w-PnCri1?q6$|5Vk4mlOk$(?zP>!YUvY z8iY3tit!D`O9mzQhNyVe2j5VIOAQWk5|<-Jzza9#Ffeo>14StDs(~)(c;h z)>Lg8-N%l+#M&vfeNY|+w$TB%fymW?kU(CB7e#yG<$y~>rZz>J0-1H2pnf+*IK(8p zdZL$h27H%N2+->$Q3y2&KdNu>uO69u~rY9zC$KL*6u!O}WoPkDDr|$g^=%{ePiVBXl2bae`Z%em{!hdLGJY zrr|sdO+^lhvOsJ;H$Y@ zoVX9A9asRksu+=^1tZU+@bZAd3uvKGleI9YiC!-J*+l@mzalCYIcE_Z{Y$m$frfrK_* zAJJ&FBoKY`9Q4DR@Q$4e{m4r6n%|($qPnb8MDstQ!iGGPashO@DiEi{sRL>sqzZ7W zW}GzM2YTsjY$wrHJmDhexV}(|Fo!f;3py1~CbGVhiJ2ED3o#k;?r1mS473|hj4xxZ z>e21SJ0u?6gQAa@&gT9AI*I<=<6<577^016O0#NgIp+el1lj!@%RJLCPlS7kK31Pm zn>l8~*%~sZ@r3HX9%?%Krgm?(*ks^vhw;p8AxTEK$?Tu{912s3dGZo`%{)MTpm$>U ztr$J`=3&gZ1i5BXfWC_Bkq_=Yg1o<40=3i$N8U4K( zdTj zlC26+dY-hb#H%L83pt(M#`&{m<~uO!|I7W7jZ-K%w*oM7tPm;8Nu+Uq)s_2DC(4i7 zK0zUWapw}+Q4;E74~2Ol&fT1;uzrH?0Wjy9}QzR`#@eJ4&v^7xo-1ohj2mj9&ZY1T$rLw zfelXjfWNf*HnoK)#fhzA%xq?gB}nsq;#qL>KY^1=!yBq~c##Y5fJ(ePiZ`nENt}X5 zTXTR58))<;HVWDNLudlrvDBzf^fgU6W`VY%@Nx{<_?R}p1V56D!HgVtJ6BfN5OfDwZyEc9i^ z%NxTDZQ_?+bcBm2sj7TN~fTVcahG8tsiDk zm(z=JI9Ww6Xzlaz5rk4`qt}yQrip9tw$^KwE#<%l=p;@9LPa^ocDv@HTUdQW@gPiGi%D)doj)!%fm95WQoyr z>($?$XX{$V_yNYWBGHMBk{TAB_Y>oKcg7nHh)!x2xqer#Ta5MV%vggFjgrcRcJMsE z9mlssC>>LJC-*sJp9+7C8jOXN=$1OP>!^9RJ(y^EiShof-Mb`r_8o2e2FKfRd{}pE za2=heKm5OeqTPEB7;^NZZ^km_m&%y!bZUA^a*;(J^N({RPuA}_po zgmV|Ysq&_ZOYc7&Lub=jBKL$!KU@gv;8Eij#^qfK%vGGXw5;b3ELM=0v!Y&8cvwo73UWG-tw{ zZO(?9X=cKmXU>DWz+3=#k+}%&5_1XMW#%%tE6jDcCc&12%J9Xpc(@7p7px)vIZI>d zaQon2uwnQYY&iZon}&bRrsH3*ee3}IAL5_0kMJ+pdHi#B7yq0+#6M?`@GrRJ8sprT z7lG@?{jkNxZSa>wjtO3i*M`3iuLFNHkA@q|W8t>qt>L!iZLv3nr@-HX_ke#Ap8|Il zp9Oa|pN;LS`D(bE_$F*Q$PdE(h#!V~gdf57v-}+V7erCUMX(5FLX;4Q7v)$ATf#&b z+;CA9ZX=Nhw~1&1w}ohdW7>!|@OKg2;C2_?nI=+2D%>=Y2Dgvs19y-Z1b2uS0(ZC= z4tKN|4R^d4j}Rt_NpPnKq*=@mGvLk=NV%9J=D=Mj7Q$UD7QRsWc>Zx!i>yzOw){$fSN_{2VJ^Eg_2lRt* z59zo@{jh!n?#KEkaF6N7;GWP=!2LqU_3Gd1-@?71Ux0g2{~qoS`VVlg=vUz0&~feh zT^%;8Kh__^eWD`=4E(`$F-*LsAE;lF-%%D zR$4VyS~XT$HC9?RR$4VyS~XT$HC9?RR$4VyS~XT$HC9?RmRb@o_MF-XEf@U9j5Md8 zGnhU@JFI0o{VuGM*52vQ#eB5- zPJeC|s(Cs6d8C~^bNby`C3aZ((X@uM$xc6KK4?X(G;@LUw{`j@^JdO4(K>ju^3Lr# z%g1a^zX2a(O<4~%fThAsW8Kh3c7?AS8_4>xF04OGg4+*Ux-8FX)M|D z*>U_o+nS8C2jJ{vE5z>b+i`9ZNJhxrogogh!b)d}R*V!+Kg&n4Mc|z7IJ%Q{MlZN& z*qV;`(&6jEdRgHNz)^izHC7J){c+Et^!CBF{wxIaKzt!Mz8}si#~LA5;&IL0vAsXS zs&9ovDNBN{E6y5>Sm@gA&Lb#iQt&wq$E!RT2!Chz`{5W$A03;7oQa1vLdrwNawXM@doVszI_%g+@kX%5mVW^9 z#E$L%dH(z{CI53Cbw&#MBOc26POu%a4=O)(bylg_eUPpsY>Qz@_CnA|>oYzv%8?e> z-jp>!{xyTr=LpsW{}H%fHpRYr*13(a#m=H|R6|zRIwQvNQ@B*JWHAj{D`*_{(lHcv z7ia#c66?Z-pp2AtlLe4vQ114|R?2fqIbAzN)q4CZ&${4#1WHP|97}Pqkr?b#5BAs#-i0+o%rP z;ga3bb#{eIDf*u*Kjcp~GZ=MZF!CfBsYplpc7ZE)c66YFLxrRA+_u_Hey-SjCOzW-e*miP~>wWL+g{?T4Gu}X|;9n~MIWB+LD8X~`X zQ_iC0dgq$Zc7@=s$q-T*T=_V*gPmb_*ehO&*XD8PLyzN`{1bjlc#2T;W9Nx)#4RbM zzicHZ%C+*Ke5?g%@!BYDr*>YirFTTXYluEu->P3Wm{G=PYs@ls823yMvw|6Kjx%?d zm(3^U8y8m>ZZgJh`derrl>qXbw zu1{Rw{iSz)UB3VtXrnr3b!q8 z``nJY-E#Zc?e{#n@)XDukf&^(s(I?=X`H8Bp0Rmm=2?RJV$v>^<3b&#&f&pd!Enov3zd%eDW2|S3X~jd=2t-%9oaJSiXt*GV`s-wVS>{P**}@RD90UcO$% zy()Uu_KNdr;g#Z*?ls(NlGj|Xm0n+X{ZzoeKw^Ob1u_auFR-Ys`dVgm<`iUGGHiw%*;nhj@Qc(63<0f>R4FD7dEJm4f#RzVMMg9zMQ4 z#eFLJr1=cSSX}WwL~?q7Ix;c0~z7G7I;hi@t0FyBbuhQ6(RyZZL?9p$^pcaQI3-!FYH_}=t=?E700 zmm*$8;)=8=l2RnS$nYYQip(vtvdI1-9~Ze>q z+y9XN3IA{Wulhf*m$%ojH?TLgceJP4huFv4=h;`;x7rWbKe3;-U$Wn|KMSZ4&?8`A zz?gs;0gD6H2kZ>E9B?n-d7ub%4=fy5EHE^%R$y#k^T1AlX@SE6CkAE)t_VCEcqQKPyq9#Gn$pN<1uCx@2O>wI%PA zDp;ySC@k(baU8!`x(u>Nn zvPWg#%Ec?UsGL%HVdWE*zo~q+@`K7R!?duxVMW49gjEWw6BZxVGOTl0pRf^O)58{p ztqaQzI~4Y1m4a0|ROwZvf0fZyrd3&3Wo?z$7&he(_YW@}UL`y}yk&Uj@IK)g;nTy{ zg=dGK4}VbAziRQS<*L@I+M;TQs@JL?)SAA10Z#AE4<*HSw zR=e83Y9p(ysdm2F^=dy=ds$sp&t2WSdSLZZ)w@;SSp7*2zZxku*4Oxb@%=p8XMVnW26 zh~*KRBlbodi8vW?A>u~F!-(gRBGNswaAdK_3XwG;>qf>$wv6l?nI1Vfa$MxB$fc1R zBX>uB6#04NnaInL_adK1i75A|!coPdLZfO%)r)Ez)h?<>)WE1QQ8S|EM=g)q9JMFv zqp0IiXQQq}-H&=vSJw5Y>svRdZn?VE>qgg2s@tJ%R^8|ID%PuBZ)Uw~^()n%RR3{w zi|CZ-^yuNylcMKFuZ+%$-XHyO^jFc}N8gEl8trJ1yFtMQK@G|^7}a2Eg9Q!NG}zwY zy#~h`oM~{m!Mz60V?>O5OyQVfF`+TFVq#;O$8?HGiy0O(F(xx+Ma-6%eKAL4PQ_e| zxgGN)=1r_?taof+Y)EXi*!re6je@ z_*(I?@y+8q#izv&i=P;u8NVWaOZ>k0qw%NWFUH@Fe-i&D!8O4hJ;-SA0~XBa4z9`!o!4D4ULBR8rm9`Y8ciqvSGu9ts8c2*stNJ zhEp4!X!xp8=|&Na`ZgNcXl$ctjg~ap)M#g;j~bn5^mU`38@)=DiEfDn5^aga6U!%7 zO^i&8OKh6hF0pH3dg748d5PJHA0}RFtTis)IJWV)#_u=&xbfY_j~l;iQmRR4lOav^ zH2Jp4wItW1%1Jeo>Ln#4HA`xj)Fr8R(%hualDeJS) zt!uY#*m`j5(XBsf{c9WlHl^D%ZZoXS&NiR6Ioak)n>%eDwPkHx+O}`owe6_3E8FgE z`*qu=?FzLEZ`Zxu;&valJJ#-0d)M~f?d!L1*uHuD_U)&(&uo9H{qy#3I=FW5?hx3a zYKM*;x_6k@VMB)xI*N{UI`--~ujBTPmpZ;m_D@bs9+W&Pd1`WI@`~gQ$-9!@OFou- zCi!CW?c^t&YINF=Vy09~iA@=lvODE`XP3^=ojZ2k-uYpdl3hA z8(r>q)w;TM_3GNV>$I->yPoR$s#}$At-DR@Hn-chZhN~u?e@C6d-p2cYj=J&yGFzGumvJ$jDrxuWNmp8I+p>v_AE*{e>kVZEmI zTF`4>ud}_b^t#{cSt?8QObtv8Nv)PzKeb6}`_!JPgHy+)PD`Danw@$m_0!a=sjqr_ z^$zYG)_Y*@J-v_i{;Ky6y?;*gNGp-nFl}SnCuyhCE~VW~dzQ}9Yoy1fw@mMrJ}7-g z`nvSp=||JQPQTixdY@^1&h+`cZ{xlT`=0Jsv){&k=lWg7&?&Tk`~IW)XZBy$|4jee z{hthQA5d&Sr2!oVWDM9k;M73Zf#n9K4IDji`M?7M9}e;z6h0_^P|HD`2lW{=V$kG4 z^9HRNv~|#dL7xmdJ?PS)yMvx#=#zJFk-;SfR~lSraN^+UgFhSm?cmo#%pv)QG#b)o zNVg&Vhm0OFZOFnQYlrL@^8S$HL(UHQe#o66Plq^$<{nybXwcAdL#q#s9-1_?!_Zzs z2M--Lbk@+7Lr)LAH1zH;*J0kn0*8eRt2V6uuqMOW59>K>(6IN09UFFL*yUmOhPw^- z8D4aF`QbH&HyGY@c*o(X!-otXKYaG^{lh;V{?+jBhu<0gbhu-L_lUp|AtS1dh#k>< zMEZ!~BPNZQJ7VRCtP%T1d_3Z-5#NuvGvet8$H?3x3yusLS#D(YkNX5^SDV~&hDIp(`Dx5oTD=J&C=#ugYG zFt+U2s$=VoZ9KN!*dAjCjvX_0#@NMUkBq%B&U;+lab3qP8MkKKmT?Eiof&s=-1Twy z#`}&B8ee*R{qYUQHy@uqe(?Ay$Pyg!lgc!}RUb&(6?il$sGeqtT2uGrG-4pD}#KxEZr% zES<4-#*P{9&-9rYJG0%)i8Bw+yfMpbR+Cx1W*wOIVz&3}%CpmEZemN)KoHBE2&S^Mj>YQV9zM6Ak&b2xB<~*JATc)1ro>?%{o>?+8G_!hU z-OPl{=9wKbyJz;z9F{pQb9(0d%oUj%GqW=fW}eLaF7syQPnpj%9dljgmYrK?Zl}3R z=kA|-W1i2v^797H%bNG;yesp5nV)aI@BE_k%gzs*UweLo`Hkndo}V&5b^gHlqvlVV zKYRY7`K#t{n*aIyR||p{L@j8!px1)M3$`zKf5CSPo-E`GOD&9B*l*$dgHSnReqa&f=K%NL(q{QDC7l8hy*mwdS7!BTyxeQD#R{g$p+`sLEs z%Ze;(vTX3Oh0C@rJG<=Z@_^-)mbY4-x_s#JCCksOa9t6(qVI~8D=x3NzvAUeZKdZ* z+sfFLQ&)br%3Kw?s@bZgtIn>@v%350t*h^^@mjthHxo+mVCF`=*9a?vC-Q{(U*0c4V>jT$UTwiy6v-Mrq4_-fc{o?go*1y00 z^!jV-f7u{5_-=^akhr1EhQ1pnZdkkFqYd9}c(l=DW95x?HYRRdx$%cho|{59#c%4c zX~m{Hn;e@9ZVuU8e{<62l+D{WAKQF>^TW-KEd{rf+!C=RX-n#s@mmgUxs;VRt3p;p zRzg<0tS(t;S%b4OvZiEZW-ZOyl(jSKVAheW&$7;BeV=tR>!+;eS&pqPTRpcH-g^R&-nFwtCxIZX302?Y8V~A8h+{+sSQrw~Ot5+pBC(*q*X|^7d`pKiht5 zhwF}VJL>LewIg-M=pFNRY~Jz7jw?G}XBW(_m|ZQ7+7C#0{C$`Au422wccttaxog6%8N251 zI=buXt~a~Q-IaDH@1D8){oQx>l-kpL&)7YC_T1jf_7>h-X>Y^5gZ3`pdt&eNeLnlD z?Q6Sl)V^)|F73~^zrp_W{h9ms?!SM){Xm5S-SB_!pmDJB!PWb4gvMh5KRakD3$MI75v7*9*l@c{s1V0OZO;#LX73IyCkML%J0y7@mi&f#?j+2N# z0_$uMvK5OEH9%?W_y{_O&&0m>Sphzpd5UmWL*!;|(gk4%#FdM=@h@31>w4&#{*RCe zjwd;Y0j#iAK`fYpByjqv2rW<&3O~`2%sBL%`*jI6@t)TWI2ecd1 zcKrJ|p8l(2-?l;24*eBqpQw%c2aeylm*WexS!lN$XTg`?Tku?cX63E+%!`$T0>?G$ zSZDi2ZCno2*6~{4Q((jM81&iZcnS63Nsb594(4FBhtwwi1+oc?w%SW-Gyg4+|9^3u z4Es02p!S^F%1u640S&g=W)y_7J_2~ z1oEGEay)r^ypHm~{SI-|cx#7PmE@gRUOo+ZPIfcN@qlMJp7DK-*YsJWV_UXmKeb^) z1Z>A~#j>9Y*msr{#4{v$EgLw8@b9w{;yU7;>2Ul595hL`!D)h zZ||+uS!LRX=W`OQzF9Exp6*X{Pk717Tm7-etdcm+%7`?y+e;nKqz~+69l*U`=5jm} zhXIb4K}bUq;%mw3hyr;2t0>Y&_IZYt6rn6k1fz{B3!4Z;oF!NuJbx4+a>H)Eg*}wS zdBa&gly^k^byHF3)ejwX-#wdOxGgA94};LTu&KjX>8xAhY&vbXk z3q221gGwB`!Eu+sGgM`?;W!5QqX%H0KeQm!8^_GUF~G77vXB1&%YMj){sPOc$hQ6s zkhf%iC6UixIBn$w{Ko<5*MR!8#5M37d!*cO5XnV@AnogQPE93rgl?{dsmu9WOWhxKo zAt!sG%fMC86eKyd9dwwJme5vCda-qm7i_iT8N$5B>!ZHaLwzHyiEURLcL}R~Y>9S` z#$MD$u0R`vHd1!R(}$ICKUs%uL>idmcy6_k&bISy`$%IoY9CAE>BZkzS*v|qj^hWh z8geGWS^@t>R!BC3Qe5?!H=a;TK%d#oYLBT+{s8Aw{3@&gL;dJqnSuUB5fP1TL?Eci3_RN#fq2#U z8}}`2v&QaLTaJ6X%#A(^jk}YuuNW&YgV4{QzD_#Y`WsNqI=%qKoPIFHMFg_qc;2+ESc)>p z%Ys3DU<2MDKPU)Ff-->eH4xBo!J;m!%$Fd4+|iGt&+Z zzZZUC5x~k?;Tp_tg&V+pp#`zMf)#EM!VGwuj{h;e&N`e^pF`vs%mp-MjV-=H+xiv8 z{bg9ZD1_~0&|fKo@kJr@Z40qzr$3q(WfedezY4tyjc28yrSX(yY5fu_?Xn2>>b&YR z&Z)^;;U4}B ztb(kCd_}ohHu?f{N`a_XE~ry=QTLvLOZZ#|pL?sih-bE`FP#9pOc2{Zd(a*Gi$l92 z-4(D8eO-PZHr0W}@cXFuCz(6iiQN1f^p&rnokcwVmxx3 zYkf;wR@l03y7vE>`p#oK{^hYbc}V&AuRtDCKEGw2HGg#v?QI;|+n)g4^RMGG1CeSQ z?5!-T3v%YKp5>Ggl~YbxQF;9dO?}4v6_sNSRG$9|D(k<)oB!Z^vMJcpUt!r9+1fur z-opKH1WP14{8x~T{w@0A{C`GHxUhY){~WA3K=t6Sp!)GA1Z)y*X#%vOHGf5OSSTZ^ zLuA+d0zOwm9VUClxt9H)j9?S0{O@9HMCD86%F!NE`E`RI`O9yk&7nL(dc-Gaqfk%L zK2#Dz(GHQVVY>{*y%+atxenVXPJf)66K`9zVTf0}!8badA?G4_E zlj@%p=N;U$*Q0HsI6L8(I_Q(&JXsI^(dd)phS~w1Lzj)A70{+S>m>Rog{Tm;6bh0u4XjPJt~=hxA;Ji@&)H}d=; z+F%p+lG7}JJ8+-oxTpN%zElzSrAoM${NcWY`dS46a&w};^oxl!!{shmDegS_=^vPC0+o4|}pdW&h*uTh9U%m=D2y=f!XkG{PV;IUj zn7Qz=%;cSMA4_Egxr(zCuZlP+?$*o)-?j4KJ+Lo>m12jGryn}5@c!^0ML#M6Z8f%A zX&eKkbI`xSx2`<6gpH4et)yTMAvfY|i@1_OIPARz`UxEUNx;rJW?0)17sUq(Sm8`& zHpExTD#O>Xk9M$=iqPKHJe(Kq^)w$>9=JIv0IdP2-xmgGpHw)0f<`z$7lYEVbWA;< z0qUa>l67=6%K>w6g|%y_Qzco5YzRWp*Qf_=%>3SJW9BPIupsAWUrW_7zBtYo{cIa; z)5cln6-FG?_arENfx?sRcxPMAz8np8?(>5ZfieXBsR)$cMC5-w`jp;iQ;*^PaE`g6 z9~Xl5#2XX`B}ip&Ru&Wj{!V{6C_&qaoX>PjAz7To68Kh`i8iYc`s7r9o1hx~Dj;Eu?JK6&Nrl1{Y2)2PNfF7&G1}HHC%mkysP>>U@7yS6X zlY_#cFb)BHYtn%gSL?jZ(B**iIamwk{|Snd;-ffby#s}_6nqLY0L4l15Oh6sE%*+S z;|QSrL_I*~`fH~Y*bxyj?#Ye=X}o59@y3m=iGrx;QahnbFTT%itp(< zQosNZ4Qc|~R?7+e_=f3S*z{di40uU9^8_tmqm0pBI748t_g+2O+{%BM1C1HT{ z6w7w{i_$l;tk06UVp~z>2A37X3^M)U4#=3@365g{3Jtcx0u|acXplmK-H=TY2J)T- zD~!v~VhSx5T3n$~DocQpNZJ}`DTTHbT3TT|g_cohW1;B1650YNJrNJIG0<`fZ4gz*xJ{3VQ6(Ao-ZGPI6DgDtQK&>9HPMxm{PwpD0b zpzRdedT4uv@dnyKp}{U$M}!!tfns z3ys3quh5o54=Btq=s|^12l}4E7!7@2q0NUL0v{r-tI&@W+7#$vK>0-BeCnhol=6{i z2q^D}rhx2&@|(*13n!hRUxHI$4EV~)1n6l6?!=6J?PL}73^)gJjC`y=pzMspNu_LV0MYIpB20h^a*&5;|D=sC=7gNRQCX%1f@Fp8h*01-xQqe z=ywIDyndtL-#{G-{u$1Jm!Nu1d1{dxitD%XpaxVraf50K76;Xx_(G8{R^Bv&nofeD zE(+Ehn#)NssH=jtgi?G&2|#fGe4CI_{#q1=x+_>KsE3o1(7Xz2Ke(rpve0}Ad?$Ox^3 zmW>RA`a7uywJY##CdLDt)Q1Kt*kEXolV~Vx%d)Q#P|9C|%7XF~unZ{W7tsh%o&q)= zO8G@3fl>-K5n9>_m0cMHn*pVKB-#Mjv1QBCpyixUS(I0>Nl?0eqAh@}Tj)^Acj7#t zyasG0l=7FLvI|qNSKLaoBgh_V zE7*K!9VeZk5el{#8tJ45G)jSAhhV&}litvJ3c81IDl?)lpmG9iCA5K)bZCr|fzVhd z8kEY9_!h(~=sv*{oD7FHR8YHal`EC)1dynpdkJssglwaUg4%eiys6A5gQg1fh8dnt zQBZzT{RGr@W3;27e53jaFnVH`T~$y%w^mU5ZP^Fe2<01pnCvDRf?rhDpx@5x>aUWZfgOR6QKKmRmN1#l>c27)b?XksMrMUuAp`wqe8`2 zXio*T`@ENv?a)*O-3KsoQ|y4IDd?WSsVs?X&_}_pLaFSDouHq>YU}&MPkaOhD5zb> zC{#gtPW2yHZT(>Q3Ci0c3TpfLPzAN|e3+9{P_hp|Z9E_0gz{&kg6;!+l#{QZ8BPMA zvz$mM*#R)9jHv7Z^{x0S1@#fEyr%q~0(L0qUT5V6<;Oulw(>E$dx6lC3RVkBX(ikN zr32ts5g2A-6l8;6E2uw&rvVgn9cLBn8uS|{yP#BO0J{!7=VUjO>;SME&nJ9ex_jkp}#nZ zg1%I+70_Ruq(P~S0c!-M@+16_r#=emA7O-R!Iwh|D;V-g_$v51XcYzJjX-<^YYfHp z5R^B9J_F2PGCXO)u_K#PBA}?F znDu0sd1IKNv*1slsE-8YjX-@QFr&u=>Z71Mcn(bm1K@uR9SDX431Aaq6mSI@U_5XG zuqO*oC~Q<@g8X0}m=A1Vk&~j(#R@88{Mw8KW+j=RJOxx%Vx@w=g2MJOOUVRm04t#u zWD{belYG!@g+a&eQW$HYyA?(jbicx&V-F|{I`*K#41&H74x#@)9r__a`(aX=k0^{i z&|?6$V3vTM24AE8?uAmh0y7l)ox-dPg}oDIMduQeFUKCu0((MwnHhTw&IL3WZr4iUSBU0;(y@D5$P5>p=~L84WcR zW*pQ-Vd6e1b16*J7YUmn%*N2%3Nr}``yk9_P!EOK0_v$STR~BNgxLlPyCKYWP#=IY zH#`CTApD=9N1dP^YF|021wE~hPoZBsL3^crqrh)~F%7n4Q3rZX zA%B6McM<`;pun$%F^%klhy>Ra@&%O2m52gVHbB0FQh5+{0hIy3?~O5y@|~y$C@+9~ z1*PjJ>Vqc=`5H>sKt$vB24R1M@Pi^g!ay1O(LP|Hoc$Vr82C{~{1Oxf%G|G!!dM4Q zR2UneO%%o^Xmf?J8QKE0L^#`^Z4|~1=rV;tO5p-yB@|^u7${qtP+;yJ%Ml716Wa_0 ze&2)HOa%{ux+-X%(Ux05V_ch?f+2oe9tDkeZSD%1gS2@lXzXkARn1U^UR#DIx$QG_(3!zmNG#;{5Q?NzQ>Ixbg*+L##z{81X24K(HrNh9VU0#SJ1qqjq)8}C6d`XD%eSAvI47?%+^UkbCk9e1z!oJyaO~hX`}oCobrV72(WLU zy%l^tG)=+2g{CX`255$Y<^^qI6#OW3tb*nUZQ~R)*0POPu&2-o3QpHPQ$cfuwpj}P zIW$v2bAh(G3L1Oa<|#OmYNLDvG!C;--T|7Euu*;iz7a}!0ceiawn{4@33DQM2mwq3#MLw6`>{?C@JVA0T>3YrVF?NTtZ+1(177qsnBFtXph3YsId z?NhK==zayw7upUeSXbyl1f3aY?g2^tQn;uzSje>G4W{xi@zAOgpbMuK|q*M&9!F*xQT zG!`Vl58Lri1dVYFZEFHrz~2zsN+Dn){%sTjcHrMmAz%ys9Teg&v?EByxvim{KsWf? zL%V|>hzsTJ-xH+6k8<|!1N!0^%Cml;Km5pi{{dhi{KyyoL0~Zaq0k{RYAt?_IfP;wlJt*-$ z{1o0Hg@7&lf1r?*#t#(|>GuCfAs0grD`>pye?%cSK#wYDjPC!jLL%S&$<6?c+x=00 z2w4t#Tp=l6Pk_&m9*XmGfcivpJpQOZgm?p`Is@c#DA^*wZyq!MuM{*6_dgB3#`bE^ zGvF-zHKFGevIg|LLe_>}0N){e(u?4G_$iDZ6mkXhvO-c>T~SCXtE&JuE1N-Y0<>ka z0ra*)Hih0%$X3w1;75cH{O_`d|dBCbo&SKu}L6whx8np^V!T_Kl2DX)QC!k8WV2r~ zD>Scy#?^LDh2_r&KcI25JwNb*ANFG}pwJM$-CIH9Te}Y^gkz>d3oB@RZ!ZG;uze=f zrl4`Y-3|hSBXWMH5*o(FbT32DfR_xIV8kgHq_Jp<<8l%wmK>H{RoNw=|FknCS0bmryeNoWS z3S%P_Wo*ZF8;Q_)3gdm~YK4LNV26DW2I_--1HgF(>Vti=!Z;13G6TlfP%1NEdg!Ty(wAs7dW|v^#jxaud?d`BjQ`vd zpggr>n2sER@MhyA6Eg~<_$Z!%_XEtudjYcf$NUn%!SC?<{1^T!|6TZsDk4g>#V_@b z!Y}k^iuw5U{pDh%SR>YnjUrp@76-*4@sT(pz7$`J%i@M~lO8g^w98VmjI1Cl$(pjB zY$TKAKsii~!te4=m#gI|`L+C3o|oUr@8u8jn$|%}(FSUBwWZoxElb<2?bqJdj%r_P z-)T3rAGJr?Q@>!pD8CrL1iwVTCVnmPyOzuRR{6b;->@|CE0zUq0k&XUX-i`6xA1S}-^Rb4|49Em{-5}t_5a@gk^eLQH+IvW+wN^I zY`571?Zxcn?G^2n?bYnH?RD)j_P+L+_IdWz_I37+_RaRK_U-mv_PzG^>>mW=4=5O5 z4+sn>77!B9K440~+<-gyrAs5wBQRfJ0sP*jEwFT8gTRh~UGUqMK0*FL!9k^iR|W45 z-XHuy@R8tS!Jh|zSXuoh7nM>=*Bg4^bk=#A$IsT$NbQ zke<><2BAbkP$E@jq*WpVtP&ZI5}Ao#vOWEW62UyQ)=!(QEznkJTeR)kKJ7j2u=bVq zjdoqTtv%G9SS1pT5^01IY5ulEgw3$I+PrNxTTxpnTd1v;t%HU~|AWOp5RU;gWJu2*<>|Bb0Prroeo|L)d1>+Y=0`Fyhj z9%*}c`=^_&pbOR3+r@8}zFqQmiQC1ot<>#++jgkmt>;)=Uw>oGwN|%qPq@|N*6>?L zZ;7j2ZsOW*9tXE>Uc7nm=E|E3Z*IIf^V-szV{eYUmVPbyT8C?GuC=-r%htf+{9kXwS0BecID=3ihbZ;|K+l-=g-GDW8>OHZJPGE@u_iHi$#vE zK`Xx1c&d#>-j2~WX>s^{>;$c$)<{d#8f#6oB(147P8)ChYP>XFX_K`RjNZDTF`XH> zBe}3#%$4E$vn&sDXC9~#o-7~B&%9Ux=FJK+A6AGJX1>}wv`g!aH`+?G80w85vtg>h z&hQ;n7Q~7&{Qd+h&PuS7tQ0HF%CNF5gq36T%jBV~BE#>pYa6u9+C~$VQ=4RbZX7c{ zF^=Qjv%@T}9Wh2~^Gt!%e{5DTJ~nRuj*!Hf8PcRB}hwiH%`n@oVA}IA^QadbWXWWSiJ#;}<+*dx3q&F0xDP7cS7k z8{FhBJQsK6dGMZ}qCA9`iCGfq|;;a=f$=cy5y%b)Nb>@{=7hajA@megI zS6~D1wAw&Cr8bDyXM=e(8^PmP25-d1^CUJAPk+t8lUvj9RM#ZDQ%J|tGBfeC)-2wh zC$mi6iOu6(*j%2%=JU>MG4H{a<9Vpnyf0hH)A>NI;i;P~c=Qnh9p&@b3BH(ph9|$i;LF(Od?`DFr?*b?)$Baq#J=ZS*$;d>zRSOZUE$g6D&NT- z;_0X-{1f(^pI|T8Z+K4V4L{9(=U?Gzq~YuUpTh3q*`iw9olVAbYFqh8c8%|1*ZFRC zgYRKC@eI!`z7O9jv9lq(0sD~8V*Pm(TY=}c8gYO2C11|Y@^$1OAf`{2_nDAM+=;A3x>K`3u~Yf90?FZ~S-uhC2kFKoOeI zg&|DgB68t(}mEgQ_VE9 zkJ;B8X^u8C%rSDVoG&uuEHOrm730K2^b@v=?xKh2DSC-i(Oaa6bkRrj75zkiF+dCy zgT!FGlWC|JhMwLC^ejf?`2wqe&K4dL@Y&LWVu*@{>Uo4m1(QkBC^Cb^ew)YXXIJDHR)TtGl}|r7t!;( zgudTpc|~5uo0xXWU3e4I9(oUx+>iG#9mHFh-j|2u2Y3(DNAj>dB9G!-OrOY4>0M0n zg#1i?j`uNriMKJGl3(E+OTWuE(xEYW!;&U(XV7tPFf|t~7v8XxTXWO$XzqB+QeMrI z-m;{5X$3TIylKe??^!CW`D#TpKh383<9$m3TA&uB1>=rV9QTxxxT}=b%Aki@R$kXa zyG@gVo8lybSA$RmXlA^RAsVV`2<>ljwKj$=jZBv!9ZVWsM8 ztV(@@6{v5q+VmJJOFv^3=_yu>USf5~!N2BM_2CIv;i-)koH|&oiNMNCB+rN6Kgf^o zJbU4H`wFo7+#BDCEQs&e`{4WLg;*>v%)0V0){R$T-FZ0c!K<>Kyc+AptFu&IgZ1V$ z*%Yi8OvUQJHmn3}$E^Pjp24y)o4*q?_q#AlzZ*012QmBp9%kC#$E^Ax%%FdO+49?% z8NY*B@EaY}q8&WN*kU&OcKoH#G*$Ou^%W1;#oT3i(0W2|&V zTou=3tc;Tl(H~Egjb#&=B<{-AvW;vnJIIb0HFc6H;=Xtw9*M`|XYoWl70+ZojIaDL z!YVFH$WU1kz4<5^FB4>2*-mzq-DFSMOQy=+GEJt7=i-HUDeyZ@;+{&J8U zEQiRU==~2D4vY@C6nLYBCUt3Ggf?1^mE+`iIRWptm?T|fF6kzsSo+HD zvWx5?i^x9WJ&ZJVVGQ_-T!go*EygHfgB&3HVystAj=&h?BaA_gi#KvP-n+J1R+H5+ z8muL2$l4f}e23A=*K&nig}1Ralg(ud*-|!;F|w&_C4Ln5#7%KaT$k(Qdbw0)$dPi4 z>?|jXOX3IdlXxgixlAs>9eM%Aj0?3z+A_RKXNoX!OBi&gjYpAPwI) z-N(#`rVZ?TR7C4~c3wZKNmDy_Zy3?s&dxPVO0csPNpVSb*0pJqI6HbY45O1m=qnXO zpQjwF&Z6<;Lwl_74MN{zCRXh?uw8i8^mBaos ztQ}Si2cp+9gDpmXWhd67KEt~6HLUmiiu=DO-b7f^d0sB`#PE9{==0QLjq!{Gy^$(| zO~=y%>#z!Uh@HSX_EoGOy+l7CFE4_=h)Smm`fzsi#ll%#JTcpbbz}Y6XuKhDA=dwQ zV7=@(o=?4k^{5wIau2-!u(uZMPAg;pmFzEJk5HaRHtu*pBtLV|Why zGS;`Aqd(=&3#0#|;xo{1w4whOhP7gPi&PiZ7f)PFVe{E)whilfpJE;U2dtOs{qNnSN z9&1Hbo5iu_=s%|68*CHtZH5(W3;K*l@hrhbtOY(n&&QQ}_X@-S3v)j z-r3a=E51YUjgZ-RienSLQE(Vf6JKCA@vOmb=%;$250#T@%)+6U?t|WTd3*z~0s6hY z*kJT|XW_Y!jchmj2+#AMXE)d*w7VwH&;5DnnH`TK4d870lNC{~K(NAIchAjDV(*c$b{U6L8xngci&08_9V|GkfGg+9nvivl&#W?-SfOO7vF^-iW z%%$1UM+>s%!6?8&*1b9p;-MKaI_ur}FggM=h;XqQ2G`eev66+@T+u&J>gH6W5XYe3 z0heaJ@!oBkx5g)|vBAZxCsN~S&DqiCeE4i)%eymtbp1KAc679wwWF};jPS77^38)L z+Pm9bYJg4)F%F{Ma8MoVR ztK25K6?JpV{W5o^>ty4yaoQNAwZ!;hI>t41FmCg~2yY$cKUxYrLW~u#5qNiYdGsOs zAx?^ya!!bCS&M?xA5z6O0w-$a0 zrY%1wx`?i#o4lYE)qgjunKjKiW~5oytZ&Acv3Lt$Lo?BAVm39Kn=Q@OW^Xgy9A%C} z2t{b#67TVT!hezHwIKbsKh6Hc{$c*71!jO~)@P(S*6NW_>N%cNvJ}4p(}f8WZ{2oY z7f0B%N1_i-zk^!>*H8{?hk^x&lGqx6@dI5`08lx>EgQr(<2a7W*;WMh*$I9A=IFt9 zLO-)EdYj?sbC$s|0y9nHP=u!hz1JLX499mk$lY$a+boyf&|M1O^B{MN<>5K&H)7Zvc9#)_g6-cw#h zRHih+PRUYfTw|3PT;vn34e#1URhbPpr{oJWSG>(UNi-GBM03#sR?KUNv5Fh`wp9);y&g*Elo32P^h@V@Y$@wV`%SVj3of3CmKU+TZ=uk_dYZ~7bEfyR&< z!jM>B(eW~I6Ymnwg_V}vSZm2+xEmfuUV5*%k>Bt#3K#{g^_N0ef$=qp7=BoX@i*-H zIVykon-+w|CKzjOCH|3WewjVMThvc#r?94Z8Y|6bw6j>-{8l@so!2g4-T9*Sy>?0a zLA$J7(XMLOwCh-jzNy{9+UFhZF4m;)Y4^1U+D}*seWX3se%797Pqk;-FWPhMh4xbW zReMEmXV-qm+u0pD)448mscX8f8@j2x=(%)PJ-6t1>R-CHlH z`{;%A!n&_sME9fjy6bj5Ko8V|^rCvOUQ92pm(WYT!C!o}f3>8|jI9W4(!< zq&L-@>CN>PdP}{P-db;?x7FL}?ez|LpJ}q*Nl($!^mM(m-UaWL@1}Rxd+0s&UU<`K zZ@rJ+S0C{Ik@p^OS`^9ua8FNq5<8_I_Cxl=_9OOV_T%`n{gG&SF2D1waC)aV=p67={$iXb zMu5`s-E2rw-ho8pACPBk0(XA{>mvCGA0)~nX5;6Hd2Pb+OR=MYHrj)qL{ z7$@q)oVb&K1TPyhyj&;G$#;%*j&ll}zC_MW6!V?6OcPK8G@9cF(XKFZYi+@wD_N*M54o*dMRujsH zb&l1?`is>UI&tUyLMi>N$~vWt75mjI!#LMDk0lr^%gAU|Lt#13I?p-JJ1-#Af=dM6~IcRTk$8oB_o^7}|8iZ7}! zbRKdZb{=t_be?jaMrkH?y0qeF8OLD7r2yKuGH@z{ekF(M zvj$Egv{%2!50j7&G(>s3o-uL0q;qCQN}O>};t1ygr^=~@w$MoE3ti}pb}n+pIb)o$ zsL|ZD_x=3z)|^7Mn?KhHV_cz8(8UiW`GMsg=bqs9ar+|F;6EOAkL68y=&!au$D96Y~oVE#KNDoToHbm3CoF}NB z0{p!3rFxp~<-8%m`%v_aPqE|F29-xp`yu#m1?&z*7-85Nt%3D-=)KtDNnU~e#Vb%_ zUV%pN3N+n%&A!-p8he+=-2(XVm3thd=qOE%8UTcH5&oW zF~fkf%?5z8a5IWZ3j)Go@h&CU2%m3a)Z1NMQWdKn~&iy$Yy2h!B(kTOmb6CiJ_ zg4A)KI1kd@I%973L$3K|U%+|hd4O}x{(y7La{*_YWq`BH@qo|{032`j2JCB|0|;#h zzyh-mU_NNZbT36om$6H9L(fDxfGm2q z_!G^VJ%Pb|vm4+%vj^Z@^EALYW_Q5Z=AQv)nP&q|GS39O$~+733iEWp@#e{Zea%w< z`$+K4+*8e7fSt`V0E^920SnBofccnl==&un!Qa>H0$AU8mmqwenF5?^mIBT;I|I%# zI|24J3jzC>#efB75#ZjnE)OZ^n@PZVW)9$76S$yt;J%@Jtf46XM8HY7VMeXPNg1sx z0344ylvHmFu#W^E5Uo2Fu(Np_V6mA1EHLAM`TI;aME zfn1s&$fX&AT$&@urCEa9`rhV4P~SZBP{6rnTfo_7JHT1E$4Z#B2JB&T_qj@*2#l|Mk+;WKEitc8BZa%ez21#OlE(D|4Ft%%9c zaM?{e<+s3VzWf*9Jh>Hcj{FL6w)_TgmgxdsD!%~iBewt+;FcfSA-@K%aF+ZW@K#C# zeJ1SkfC2_TMaOar%X&vBP`61wJ`4QkO+)KvT%Xb0$$oByYa5Iw1YOpI^flt;!v=y!7 zYNVKtThCPDD!{q&ZNS;`9l%-g4ZyzgO~5|#3cyowpOo%Z z0|mT>Qs&ELfb-;Xz`62uz&Y~ofV1VRfV1Qdz)Nwvn{avwu#bENumJaI2?NA}0&E^h zS|MpfX^kY8R!MScog|l5N^)tfB$rl8a{Ewzj3noW%lYAQez=?;F6W2K`QdVYxb=(MNd=YRKZnaZ8o&oG5p9L(CO91on#e|R{_xL7FftJw(=o-~P<7hBs zI!d;~k{#Hdqkeo8aGrb|a4sy+Q9nKgI9omeI7@y9cqwk-Q~eJC_QB0*8r7!(i{&GL z1-L&=eTtOkEfPCO^bPG9$faEaxwLN}mv#>1(%ykw+C7j<`v-FSP=53c=ZDMr;c|Ys zoF6Xdhs*ila(=jd@GdmRZo3j1&?BJrJR17Wm*5O?Ep(c1gdX#)a;BUuzmq$lVOS1L z#__fLSBYB((DMEOTKA6|(~Yr^^z}57Mq8YQet0z@BCr_O6#8|H=H|TWadg=PtNq07<>#fs~OX+wA zVsu7aCFEq%E%eJhfzx-=>B;rVr4_oiep+3ILF%ROB$v|ZRzQQ1B%1$HvFv8X61@+D z&Kc)rH#7Dcj-8@o$<-Ku@-r~Ss8K1jMxm$J%`D{UE-*D!C< zO_a7ctsIX1AKf~^X&8ErOK^{Y&ctWqw&kor#d~?hL^0>@Reu!C&A`-zDW#PICuf zXZI$+Liakr0+-$ZTB&T@cj%0J4#b5}9Gp%#^Igg}u6S4C-1#@CB!o;O$$K~4w>63QDNHx}V(0TVLPR*PulEv#7#qptSVw=V0&^jzbTeka5%Fq+MkF=b%Ua z;`VjR+Drowy#;F^+zR*n-(7rv?XlER09A)Gf_^uInp52VI zaQEk2<2-|8#eu_^;8s@{9#_h%|V;=6&+-clp+-*EzEHPfiU4fOl z&BQtK+6<1Nd#-yP)I$2ZLon_m+)*Ozj&||oUd-{A;vJIMvF1RxK)@}*PACQ4)P~T; zJr!ki$E?~E``Vt+R_TQ~wmJ5><#_7`;SAXh@9ZdyK^x^#tZ>;lXHJ5K z^b~O&^jxPxC$|&!k+ z2Yc=1(5ihM{{yh|ehYQ3fj;dZX!LG^=Jcn~cpimWX*+8ELF~XiD#vJu8x4((X1Foc z95*0tfe!USxQ}tL(FQj%+8S+f1L-iMBkoLP8QJ1aBiAUv&4*4#3iljN!fmXla0l#6 z+*axhDdx+NV*Um9rurHEadYZ?V+ig}4K+sK#zvJImTSfM)w+z<9^2?V-d89pE91o*gtP9 zhxYYr#tNeW#(>^0XiLcT#<0i>k;Re6BMT!7BJ(46M5afkMy5d9=Hkex$gs%3NZ-gA zk#3Pxh8*KjJ_DST`=8O{oK2)7Nl3O5fo4u`^4 zXh&#!=$p_Np^c$+p|zn^p*KRyLNA0ChaL|t3@r%F4b2Qq3*8W!9J(TOacFd?DpVO7 z7&BY1MKBzQtFFBlIV6>J}D z6KsLInGJD6QwDwrd=vOAus-l!V0B;x?r$y)ED0wKJzH>pU;Oj zRA1bQ=n2k$3NnFXAqUTL+B*<(J@U>6O7|-Bd!?T!KM`M;) zjdW`;KU|Ob;Y-{D_!kzB`Is46h{t(0c$H^^*DxC#g_~Dd#_{5xm;t)sCQ}dNEZm^L zyN}xm&|tt@iFY4*^yQd+gO~woaA#qZaTV?#OvW611m1L-N9JJWJpu3aBBK;<^b(^N z-sqJ^Z``?qR1-Jb4mF0Nwb__&2@Yn6T@C!b7#08~v2!EXogt-3x|AmAVpj=xB14rj zAO1Lp$2mNXHIYIPZahnV<4LLo5M=_QOhAf#l2b;xmMGFd%Mq)7zIJI(NY4e@Ek>zP z#xd%i#{NGu#BLMeDweQ|GVW2vC8}#69FJifkKuM7!|gtXRvv^`GNkq$!{ujjY!Irnk*eltJ zdt?$~P0f-by+Hwopav!v1OxkkG+A{8Ksa~X^{%Fg!AA)dGv{55qoPaQTQX@bv zjR3hc0_4&NkW0PNhU;p>^xTGVXv4L%;aX58r=f9Z!@rkW1K;OW2c3*po}GY=u^+ zbgGr~tkS7g(lcS&ird$UacspHwQ}iAL^%wpm96+)YsLM6d>o?kQY%|BzAd?gmfXsg z?in0TG}6K?V%UQr(NPOd)57h>ej3#lOieA^W8puL!w=-qK9Iu?sc?UHD96%B@6Y8oW06 z)0A^G<=jmTykTsw=wq@Rqa+(0A4{!+qE-k?I1{n7M*Bj6&sWcbirf~EK z3T8Ub=?1jwZkAeZtwT$jU`JB)+FwK!Z0%H%XO4i002eC$_wX&h{Bh0S?w z&TDf@i~W}NQ!a~Zw3seU&Si3%Zd^+@jy;93m(X`7`XQIFCzr4%m#`<7S}D;Al}@#i zo>e;4N_r+tCAUv9j*>BwF1?8;hat66@>ogk59H$zm6vMN=NX*2ra~im9ki8KLHlkQ zH1ihwd(@fGM7;sK)GMIBIvV-yHU_IeASU*?- z%Losf_u-cHY;%Tr6YMrk#BJ?yxY0cVx4sA9*7#YtL*5m4%sb(>brRN|I+$&7Q@c5| zxI(5Sx8VNta@>Kq3w9eW1OKxxw9iYRr5=SAeLLKVXacJh!uSD}Ew;es#d`E!Yy6;B zgFWskI7tt~e>V2N*Ft*^rWQmo>!_Eo)=eMmJ5LaO4bqW67aW6Aanrw_QGvVucf(S^ z2yncfh1~+u%&9`nBSbaqNlX?suoiK<7|DA5qs*V7r7{}*ae^4bIxS?Bh2xfYAHb8H za{#+Iy@ibv%vjv$IMwM3e?D|+hTvrL7sTc{F97B`&jaQ-&p}IS9JF$}JLkc75pIBV zbIyg%%}|VCnFu&XLKo+J+$296XOBv20zx`MKc@n>%g=%i*AVLxgdBkr)L@*N&V*jq z`PRh<=>R>RLAZr}26VkDtnmmr9J)ONaWlOaC}XfS4k7KK?^6!FtJ9$qHpsdNA%{T+ zXaIDvPQxi@pfwgD?VuObANpB6p*vP?jX}tvIIH!;`RvcoCmUdm79rRq8V+5f6P+ID z&HkXeUe<+ZS#yb=uuig93u!+mqYSgL4|C*v>?Gcmb2+3V;G?8rWjtrkg8yoqXr$dm z_6Iyk_5nDlX!DwauD6vblevp{g ztnVduR@Qcjwbc5z#9rIlCc%TYzLTH>YpXm7@LP#JiuH|50e&q@0l$)%Gpv8fV!$o3 z2=GgZ9j5h##LQuRF0ps9K9eT^ekwsp)@F%)jI~J~2e?s!s$`!17_d8@?wZ)g$y~q! znFDyNOakW11Yn+w1Ln#YU=H_mwmb&@q|5?L$fE({@+iQVJQDBQaB8>cYW;{>K5-ra z+~7P6__6a4;Cg2v;787bfa{zG06%o@2mHXf5Ac2GZ-DPP3jp7B?gd=y+ynSe=Wf6? z&Rw9~e>ivY*spdl($+i9JcPY!t#UBp*4xe;JgszQOU$g+TMowDTH)LQ_@;9^;2X|N zz}KDIkm@yOhQy8zINl1l!2z!qINk!d-kApYk#jTPI_D<951qdPe&9?6eBZ$v3LI|$ zeAl@iaIJG4;6I&f0oOQF0RQ1!1Gw6m4ET;S3AL?qCQ48vFuWRYr2`%`@VgRlg>wbq zo6hBcZ_sHT_+1M4nll0XD>dg!dz^fFA8v2_9(Ol(cXK0CXFl_e#{cV@@sI!FZJ0gX zgz+YhXZr<>R-#e@KjsdXxWADQ4a_hlf?HsbJK6-uH z<y1sUd%GFBw?E0o<__ynnZ(V(<7IE_MC&A3 zP4~OxcP7Fzf<1nyyCnf?*d2VM0q#lpM~-saGZ+ey|D3CDi`2Xbc*~Nc%P@r2Ov%DE+2%& zw?E5;u=;kIdtS*cq=Vz- zlkOw1K7<_KI4rATq4*D+n&iBM&HxVQ0**iQAnhnQ8c2)}M zTxamYyI_n@!5E(kc_hi`{tON}NhNzhj&>%bXlFxKM-s}vi2Gq%=oRsR=x0b!L4TYj zY@8%KJBVRe)oB1rK8+wd+Yc6tn!>hOGgz!?4x2d#LiYAEWNB&G`DqE;LI;6%4u&MN z9I~-CV!3gM(UxVGhZ*gS!;KE$i+5x>=FxOU0fohkIJoKw=xt;}wwY_>8TrPs#&Jdg zXzxwPLtn=k<_+US*h=bT6dFZ1&6I$Xo`MwgB+%N)M3*cL?QZk{eUgR7(_o{qmvIJc zo1F<6>Dfka$Wuu=_#nsvhotoqSOvZm`q7sgSHP~~YLePQ(l;0uAtxG>AO*O_m||QD zS-|y>1>9&%g=i$QH}YA$ zksVxj&B!ltS|y8&U*qQd zw>Z0gr>ru<_T%?B%l@b=Gs5yC*=97PlqO_3W5h*}l8=*ChNZ@k49kdYAREd?Vvcx7 zHiqrSCiPlxJP2pygJm0ei1K0?jyUuox5z*5dP{xRJKk~t=D~q-5az*sv-&te+l;(IUJ1LA zSHp7TFI#?`QOEA%99RdR2RjRQYTJ?bvK7etKk<;QG4ZlkzIZjzhX zp4{iKqW2{@AQ_hQpy#FS@q7n^u)rWHH^y-?V}Yb91R@y+GK@^Q`Bc&6We9_nv7z5L}^hwhA~HHv2Lx1A=380b2vC zfwjI-wH5)vO@h`ttN>1c#l6ciECEh5C&7CAHL#^|E%;8?n>Uy@np0tC^d|FWa~gCd zr$cXc25j}sgtfmrVDE1>EdI@fMZo#6;CGjKw|S3wuered8@N~Zn-7=|{$`t>D|WIe zx(2IuU8|xWLB{(r_-CJ(8_i9S_Ir zAshbjcef?lZf9$v*3qz2eGDYiF>w77R?^CboH`dgzo`cQVJQ^*jZRh}WZ1>v z50=7CcxOnoyI}uuNq*#{e;U&LXRIaG zv(|Ig^U(X*#qP6c1r2}~t)^5m*3LIon>gXybY-IF~}-=yK-@=St@)=W1vlO>!nX*Emz0YoUvDJ?!M)=uCC~3eBXO zooUW3&UEKioUZo$*6^dwW6tAjWgGX0#qG}1;tqYP)%T%c^?fPq*}sgF+A`REUGBW< zyym>_yy3hFO{uq>mCoDFD(4-t2J5VWRoJz-75tv_J}gds=&U2V@Vi)s{oJz+%XVYG zA^C;#9W=214H?Gw&JWIy(8v1O*#YaB&%i>#m13Hcc7?dYHC*YMuI1XWChNKZH|U1k zF!Z+?xDDM#_%6+2*qChs9le*uclZL|Hn%CXyY_dRy9c-jx_@$8xGkaYb&%WIJ=ksI z9^&FIF*Fpv5{ukJMH^@-9|G;Ao1qI?2>qloakrQc%}CM|y%RQIXFyl%Ft@#XxZA-! z0-9q-x<|Q3yIHVL9(7}|R-SN^uvnf0i{*KczdVV1wWPy(JZZ6tVn~SAh>yS_C5i-RMqr|B5d#+zgGnTiogH zt?mr>Hg~3byL*Q_%bo4cfwtW|cfNb4dzX7RbnotU7r1|O?{n{mCf*Bnho6ELvI{uGxM zjg@llXgrxvrNU$)V;9W{7x%BI>OXSmz{>K`q2d98;f)~MY^0K-Ns_w#$t_Cv2J5=j$5kRs9mp( zu{^JhvC^3C$rzUwjir*|&KYg$TnCwGEFO0{XS6LIb5SDqPBfOE2%l72f@(ut z;}kCpa?j=GWc9aB>Q`3fbg8MR98m6dQGGzEG5RT$t5~*jBWuc?u0HNaRb+KV>r_>K7F}gRcXmQ|a#DA4GVXNaq76Yj@#V_53kZ>SE5@`qDw8&sY-RJnyB%PsZPbarU^e*nw{hH zR2|mSZyiE)ec8JHY+XaPt|7bBIgN9LPuqD!vbpkT9L6+x{BtxCIl5{2rOxRYHRW*0 z(U^)xHeFMWt|_NflTmI~e>D&}IZiJ{Nxk&j)QjIHyH{1kut5!a)zj;mTuXS&FbcV< zq>_B?7AaIqb+4D^*u83dw^TQzRAW}EF)P)*oPus+Q-$87tzX|Foxe!uFVgvoa@{gL zF=^MEn4;Mp4PqkV(lGhzamv#qqo$cyX*4(7zqX4){r$E(12QNns&R{I+@dL`Tt%1b zmY1tpx7^RKdb>zBu1FV9qzfqW<|gl@)r~9GjVsP|%XQoqQx?==pyuI|E^9+6ab zcu+=T2Gv0ZlU%|Xl+mboOwGDEJnM!B*XC5X$2BhbnnL15)?k`zE7TiOp;}I9LH4>^ zi*Y96U%^sP!X zOx2svFN~jG*Pqb+ozVT9)cu@HIK#Lol|7a34D)*g6s=q8Prw?hWPW&9*@)rQHC4k$ z3@&$vtClwyUe9!(-xY7?;jKa52WoshTd}GTy*I(Z@JJ*5Ha;#da#q{X67_qv)vULsFx`ynOQ_Z=;)jJPWwj#DT zED@_oSR;{>aB4D2&fyX<`ErXf`RW>SbPYMW4f)*1NSEu3RD?BBzfvRB)H{-=-jVh6 zwVsdELIxVt3yWH^@a#>dnvP3z?UA*8TB^}6)p(U^yh=4*DKtyJf!g)nz+CK6FbQ9% zCgBTJH(glUO~DKONqCH!gvZoIsyadShYRKEeo$*Vp1p95N4|%Lc5`+A$~+sofmy=4w21HJ-T|&s>dP zuEr}@_e-wED_7%_tMO6mPc)vV>(A5m=jrdm<;?q5X^)_Dlu(Qqc zeT80Zycj;ctw&v)Lv8H66iK8t%TRNfhgq42Sy>&-$~?@O+(gb9{YGsp6AOi$r^1JR*o24W)+p!l-Zrj zh7K)rOGi{!R1P0z^+u3cir~`+!)JBD3EDoTY{ZB%oY;o;8&D=s9VxqwlxJ1o098S3 z0@^XS2eOkq!p=IXjWh32QswlI^;0m)CzaG^UA+E1x_^{#C5nU5M1W*%uKzQ00 zA)iM!5nYMOsSD`DZS55MR}S;JWrEw)m|W_H}I(_Psa%7X%hK$d3wK|(kIN6 z-sGe-4gSYxPI>Vf zU$yN3dq?A&)aC1gYfA4YQ~E%g(z~ma-e0El{xYSu2eFhs0H^eBETxwFSV}GPu~bUe zo6`NHwgHIuo;4nNSDDJu{ib)9Db3|dspT}5Qp+e@U9MV2@vO^H%P5|8IeMd((oB_9 zzU~*bEsCY`bvgMOAGK{kxbByHU5?s@pgp>tLS2qN{H6+ZIrb#XwJjPf`ZEN82G7q{|%REk9`hDSL9^t%=fvZkBsi@j`rZk5$r4QRFa5kA9V!ED~ zE>~@rP>(J*rt67$&$^zNt|zYZ$G!YIUTvrFp6L8>onLeKQu^$fifcUL8c%Q|8Lxyc zH{q45!_~GdmeM@Cls-?U61v`m#!EBmQu^GO(&yKdKBuKLb1bEqW+{DcOX>4kN;C3O z`dpb(+d%Y-_rBAerc3FQVoI^=5U=~YRQIdqq@~n09rbJaQ`=X(Z@PZ9ZO5~&Uv1y< ztm{+TchI?h)=Zm}X1k=+wiolQE>CmPQ)(NG_fF%bw!wJT{gbE5%k${fqX(T{ZFBM7 zX?oCH?3CtWr!)^MrH@f5we3ZEUB2dVq||8?^RzBMrOVe6gp_7xrBWLIlv{sWf$I-hWDSrBa$Jl}hQ^MxTXKiiw6^(X)}} zL!>l|Ii;DxDb4LjY5qh?%M?=jY@O0<%~UaSo-yt7hIm#7!K7L-AeZ7d1g@@M%UhE8U=~qQQmqhhb^D{aycJJIv4Phqcn5exLo;4<#1(4K7@1&;Pq&})9)w>!^s&^8uu1~GC(WH78;p!Hs zwG+>}#cC~!Ce<7RSGPp%5u-^(m2h=W=v{A82}Ytx%}+{deo|74IFf2kjV9He1+K17 z%>~h(~7Kq-HfG)t(RWx_%`v!n3Ylv!0Tg zb(GXBsHA2!CDoc0O{z5uuC6~@Q&_f7VVVh*)Xb)&W;P`?vni>WO-Z$zL`ixiG}9@m znM+B{)JbaQO;R&Kl4=zIW$Bh{CRbAJ;y_7y1l4SgXFURH_XUd5@oII$vo1%SK0sNz z=hb`⁢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

C2;6>2yqMo^Bf0)^w=5y>+T{uxo&3i5;u> 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 literal 0 HcmV?d00001 diff --git a/src/qt/res/fonts/SourceSansPro-Regular.ttf b/src/qt/res/fonts/SourceSansPro-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..56238468c07e47636aeee0283d0c442843950d0e GIT binary patch literal 248504 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 MI=Pku4^a630MEzyEC2ui literal 0 HcmV?d00001 diff --git a/src/qt/res/icons/ext_add.png b/src/qt/res/icons/ext_add.png new file mode 100644 index 0000000000000000000000000000000000000000..f6159b5dc0b7dd87b5ae8e1bb36ee0f32168b519 GIT binary patch literal 532 zcmeAS@N?(olHy`uVBq!ia0vp^F(Ayr1|%Q9zZ3za7>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0h7I;J!GcfQS24TkI`72U@8diF`IEGZjy}j$}ci2Fn?csrKsmITURw?=& zZLJa&C})VCIWbC1LoRy0+Q;8HlRTzOGGBb*gp&@?I3T$3=HRyK55Ed`*4+9x_xtOw zYjgHpTYRTXa8Jv>jd$y(et3EQ`NeIKbGIE^_a@u_b)er$^+l@R)}EO>?;Csfv9id; z>HC+;_?^;xF*k2|;i;JghE3gqF+C5GSj3fgNE|%Mq34D}h&Q@PYOBt)t1F)FdY51H zjf^?t}i|H zQwGW8vjIvtT@Al}{*RR1mtR_b|Io7grkbtQ z&2`p0tgC+9yO0<0VWL~?p1_H2kBafT71>8YdK*Lcp3ae+eqBo~M(1ry_(je0R(C^R zaq2&u^*>7Ilho2H!tb{ERXsadwwoi5@1s5^B%C)~-Smeky&~axmJ_cJNXXOG&t;uc GLK6T+N$r*Z literal 0 HcmV?d00001 diff --git a/src/qt/res/icons/ext_add_light.png b/src/qt/res/icons/ext_add_light.png new file mode 100644 index 0000000000000000000000000000000000000000..d48e36db00f659bceaddfe9cde4e64f81cea2909 GIT binary patch literal 526 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

HVBH(MD_890%?>U@N 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 From 3a85953410bc2184fee224cf2cc3c99a6ac4d377 Mon Sep 17 00:00:00 2001 From: Levon Hovhannisyan <95240473+levoncrypto@users.noreply.github.com> Date: Thu, 9 Dec 2021 21:03:43 +0400 Subject: [PATCH 4/7] Add log into the progress bar, when mints are synchronizing (#1096) * Mint sync information in progress bar * Removing comment --- src/hdmint/wallet.cpp | 4 +++- src/qt/bitcoingui.cpp | 12 ++++++++++++ src/qt/bitcoingui.h | 3 +++ src/qt/clientmodel.cpp | 9 +++++++++ src/qt/clientmodel.h | 3 +++ src/ui_interface.h | 3 +++ 6 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/hdmint/wallet.cpp b/src/hdmint/wallet.cpp index 4ecd2c7a03..3e948dd299 100644 --- a/src/hdmint/wallet.cpp +++ b/src/hdmint/wallet.cpp @@ -17,6 +17,7 @@ #include "keystore.h" #include #include "masternode-sync.h" +#include "ui_interface.h" /** * Constructor for CHDMintWallet object. @@ -269,10 +270,10 @@ void CHDMintWallet::SyncWithChain(bool fGenerateMintPool, boost::optional(pMint.second); int32_t& mintCount = std::get<2>(pMint.second); @@ -435,6 +436,7 @@ void CHDMintWallet::SyncWithChain(bool fGenerateMintPool, boost::optionalsetValue(nProgress); } +void BitcoinGUI::updateProgressBarLabel(const QString& text) +{ + if (progressBarLabel) + { + progressBarLabel->setVisible(!text.isEmpty()); + progressBarLabel->setText(text); + } +} + void BitcoinGUI::setTrayIconVisible(bool fHideTrayIcon) { if (trayIcon) diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index a1947ef91f..8a6cf41adc 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -274,6 +274,9 @@ private Q_SLOTS: /** Show progress dialog e.g. for verifychain */ void showProgress(const QString &title, int nProgress); + + /** Update progress bar label text */ + void updateProgressBarLabel(const QString& text); /** When hideTrayIcon setting is changed in OptionsModel hide or show the icon accordingly. */ void setTrayIconVisible(bool); diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index 5f2243f588..b30de476b4 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -356,6 +356,13 @@ static void ShowProgress(ClientModel *clientmodel, const std::string &title, int Q_ARG(int, nProgress)); } +static void UpdateProgressBarLabel(ClientModel *clientmodel, const std::string &title) +{ + // emits signal "updateProgressBarLabel" + QMetaObject::invokeMethod(clientmodel, "updateProgressBarLabel", Qt::QueuedConnection, + Q_ARG(QString, QString::fromStdString(title))); +} + static void NotifyNumConnectionsChanged(ClientModel *clientmodel, int newNumConnections) { // Too noisy: qDebug() << "NotifyNumConnectionsChanged: " + QString::number(newNumConnections); @@ -424,6 +431,7 @@ void ClientModel::subscribeToCoreSignals() { // Connect signals to client uiInterface.ShowProgress.connect(boost::bind(ShowProgress, this, _1, _2)); + uiInterface.UpdateProgressBarLabel.connect(boost::bind(UpdateProgressBarLabel, this, _1)); uiInterface.NotifyNumConnectionsChanged.connect(boost::bind(NotifyNumConnectionsChanged, this, _1)); uiInterface.NotifyNetworkActiveChanged.connect(boost::bind(NotifyNetworkActiveChanged, this, _1)); uiInterface.NotifyAlertChanged.connect(boost::bind(NotifyAlertChanged, this)); @@ -444,6 +452,7 @@ void ClientModel::unsubscribeFromCoreSignals() { // Disconnect signals from client uiInterface.ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2)); + uiInterface.UpdateProgressBarLabel.disconnect(boost::bind(UpdateProgressBarLabel, this, _1)); uiInterface.NotifyNumConnectionsChanged.disconnect(boost::bind(NotifyNumConnectionsChanged, this, _1)); uiInterface.NotifyNetworkActiveChanged.disconnect(boost::bind(NotifyNetworkActiveChanged, this, _1)); uiInterface.NotifyAlertChanged.disconnect(boost::bind(NotifyAlertChanged, this)); diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h index ca9eb77935..1464e61ff1 100644 --- a/src/qt/clientmodel.h +++ b/src/qt/clientmodel.h @@ -139,6 +139,9 @@ class ClientModel : public QObject // Show progress dialog e.g. for verifychain void showProgress(const QString &title, int nProgress); + // Update progress bar label text + void updateProgressBarLabel(const QString &title); + public Q_SLOTS: void updateTimer(); void updateNumConnections(int numConnections); diff --git a/src/ui_interface.h b/src/ui_interface.h index b2dfa512d2..7c47637491 100644 --- a/src/ui_interface.h +++ b/src/ui_interface.h @@ -103,6 +103,9 @@ class CClientUIInterface /** Show progress e.g. for verifychain */ boost::signals2::signal ShowProgress; + /** Update progress bar label text */ + boost::signals2::signal UpdateProgressBarLabel; + /** New block has been accepted */ boost::signals2::signal NotifyBlockTip; From 6dfe15985a300d7d45cd12a8d7d61b6982aa34fe Mon Sep 17 00:00:00 2001 From: psolstice Date: Thu, 9 Dec 2021 20:04:08 +0300 Subject: [PATCH 5/7] Fix for compilation with gcc 11 (#1093) * Updated bls library and its dependencies * Fixed build of depends on newer gcc * Removed tests for bls-signatures during "make check" * Fixed Windows qt issues * Fixed issue with mac * Fix for building boost on older mingw toolchains * Fixed compilation of dependencies on Mac * Bumped Ubuntu version for Windows build on GA * Fixed Windows dependencies compilation --- .github/workflows/ci-master.yml | 2 +- build-aux/m4/bitcoin_qt.m4 | 395 +- depends/Makefile | 169 +- depends/builders/darwin.mk | 23 +- depends/funcs.mk | 75 +- depends/gen_id | 74 + depends/hosts/darwin.mk | 117 +- depends/hosts/default.mk | 13 + depends/hosts/mingw32.mk | 2 +- depends/packages/boost.mk | 45 +- depends/packages/libxkbcommon.mk | 32 + depends/packages/native_b2.mk | 20 + depends/packages/packages.mk | 8 +- depends/packages/qt.mk | 149 +- depends/packages/sqlite.mk | 30 + depends/patches/qt/dont_hardcode_pwd.patch | 27 + depends/patches/qt/dont_hardcode_x86_64.patch | 123 + .../patches/qt/fix_android_jni_static.patch | 2 +- depends/patches/qt/fix_android_pch.patch | 10 + .../patches/qt/fix_android_qmake_conf.patch | 20 - depends/patches/qt/fix_configure_mac.patch | 50 - depends/patches/qt/fix_lib_paths.patch | 193 + depends/patches/qt/fix_limits_header.patch | 44 + depends/patches/qt/fix_montery_include.patch | 21 + depends/patches/qt/fix_no_printer.patch | 4 +- depends/patches/qt/fix_qt_pkgconfig.patch | 18 +- depends/patches/qt/fix_rcc_determinism.patch | 15 - depends/patches/qt/fix_riscv64_arch.patch | 14 - depends/patches/qt/mac-qmake.conf | 6 +- depends/patches/qt/no-xlib.patch | 17 +- depends/patches/qt/no_sdk_version_check.patch | 20 + depends/patches/qt/qt.pro | 16 + .../qt/qtbase-moc-ignore-gcc-macro.patch | 17 + depends/patches/qt/qttools_src.pro | 6 + .../patches/qt/support_new_android_ndks.patch | 122 + depends/patches/qt/xkb-default.patch | 26 - src/bls-signatures/CMakeLists.txt | 2 +- src/bls-signatures/Makefile | 1 - src/bls-signatures/configure-cmake.sh | 2 +- src/bls-signatures/contrib/catch/catch.hpp | 10275 +++++++++++----- src/bls-signatures/contrib/relic/.gitignore | 30 + src/bls-signatures/contrib/relic/.travis.yml | 20 +- .../contrib/relic/CMakeLists.txt | 322 +- src/bls-signatures/contrib/relic/COPYING | 520 - .../contrib/relic/COPYING.LESSER | 520 - src/bls-signatures/contrib/relic/COPYRIGHT | 8 +- src/bls-signatures/contrib/relic/README.md | 37 +- .../relic/art/{logo.png => rlc_logo.png} | Bin .../relic/art/{logo.svg => rlc_logo.svg} | 0 .../contrib/relic/bench/CMakeLists.txt | 12 +- .../contrib/relic/bench/bench_bn.c | 602 +- .../contrib/relic/bench/bench_cp.c | 1118 +- .../contrib/relic/bench/bench_dv.c | 69 +- .../contrib/relic/bench/bench_eb.c | 259 +- .../contrib/relic/bench/bench_ec.c | 106 +- .../contrib/relic/bench/bench_ed.c | 480 +- .../contrib/relic/bench/bench_ep.c | 311 +- .../contrib/relic/bench/bench_epx.c | 306 +- .../contrib/relic/bench/bench_err.c | 39 +- .../contrib/relic/bench/bench_fb.c | 255 +- .../contrib/relic/bench/bench_fbx.c | 66 +- .../contrib/relic/bench/bench_fp.c | 227 +- .../contrib/relic/bench/bench_fpx.c | 2702 +++- .../contrib/relic/bench/bench_md.c | 63 + .../contrib/relic/bench/bench_mpc.c | 311 + .../contrib/relic/bench/bench_pc.c | 304 +- .../contrib/relic/bench/bench_pp.c | 446 +- .../contrib/relic/bench/bench_rand.c | 37 +- .../contrib/relic/cmake/arch.cmake | 10 +- .../contrib/relic/cmake/bn.cmake | 6 +- .../contrib/relic/cmake/cp.cmake | 25 +- .../contrib/relic/cmake/doxygen.cmake | 0 .../contrib/relic/cmake/eb.cmake | 8 +- .../contrib/relic/cmake/ec.cmake | 2 +- .../contrib/relic/cmake/ed.cmake | 26 +- .../contrib/relic/cmake/ep.cmake | 19 +- .../contrib/relic/cmake/err.cmake | 9 + .../contrib/relic/cmake/fb.cmake | 17 +- .../contrib/relic/cmake/fiat.cmake | 39 + .../contrib/relic/cmake/fp.cmake | 9 +- .../contrib/relic/cmake/fpx.cmake | 8 +- .../contrib/relic/cmake/gmp.cmake | 0 .../contrib/relic/cmake/ios.cmake | 443 + .../contrib/relic/cmake/md.cmake | 1 - .../contrib/relic/cmake/pp.cmake | 4 +- .../contrib/relic/cmake/rand.cmake | 29 +- .../contrib/relic/cmake/relic-config.cmake | 12 +- .../contrib/relic/cmake/with.cmake | 130 + .../relic/demo/cert-input/test-bench.c | 471 + .../relic/demo/general-paillier/test.c | 92 + .../contrib/relic/demo/link-test/test.c | 4 + .../contrib/relic/demo/link-test/test1.c | 37 + .../contrib/relic/demo/link-test/test2.c | 37 + .../contrib/relic/demo/public-stats/csv.c | 153 + .../contrib/relic/demo/public-stats/csv.h | 12 + .../contrib/relic/demo/public-stats/main.c | 349 + .../contrib/relic/demo/tweedledum/main.c | 88 + .../contrib/relic/doc/relic.doxygen.in | 0 .../contrib/relic/include/low/relic_bn_low.h | 68 +- .../contrib/relic/include/low/relic_dv_low.h | 33 +- .../contrib/relic/include/low/relic_fb_low.h | 77 +- .../contrib/relic/include/low/relic_fp_low.h | 83 +- .../contrib/relic/include/low/relic_fpx_low.h | 98 +- .../contrib/relic/include/relic.h | 48 +- .../contrib/relic/include/relic_alloc.h | 91 + .../contrib/relic/include/relic_arch.h | 50 +- .../contrib/relic/include/relic_bc.h | 41 +- .../contrib/relic/include/relic_bench.h | 109 +- .../contrib/relic/include/relic_bn.h | 181 +- .../contrib/relic/include/relic_conf.h.in | 209 +- .../contrib/relic/include/relic_core.h | 267 +- .../contrib/relic/include/relic_cp.h | 1892 +-- .../contrib/relic/include/relic_dv.h | 109 +- .../contrib/relic/include/relic_eb.h | 211 +- .../contrib/relic/include/relic_ec.h | 341 +- .../contrib/relic/include/relic_ed.h | 720 +- .../contrib/relic/include/relic_ep.h | 494 +- .../contrib/relic/include/relic_epx.h | 367 +- .../contrib/relic/include/relic_err.h | 145 +- .../contrib/relic/include/relic_fb.h | 228 +- .../contrib/relic/include/relic_fbx.h | 48 +- .../contrib/relic/include/relic_fp.h | 188 +- .../contrib/relic/include/relic_fpx.h | 4004 ++++-- .../contrib/relic/include/relic_label.h | 2799 +++-- .../contrib/relic/include/relic_md.h | 176 +- .../contrib/relic/include/relic_mpc.h | 387 + .../contrib/relic/include/relic_multi.h | 82 + .../contrib/relic/include/relic_pc.h | 485 +- .../contrib/relic/include/relic_pool.h | 103 - .../contrib/relic/include/relic_pp.h | 392 +- .../contrib/relic/include/relic_rand.h | 47 +- .../contrib/relic/include/relic_test.h | 33 +- .../contrib/relic/include/relic_trace.h | 82 - .../contrib/relic/include/relic_types.h | 94 +- .../contrib/relic/include/relic_util.h | 102 +- .../contrib/relic/preset/ardue-pbc-112.sh | 4 - .../contrib/relic/preset/ardue-pbc-bn254.sh | 3 + .../contrib/relic/preset/arm-pbc-112.sh | 3 - .../contrib/relic/preset/arm-pbc-bn254.sh | 3 + ...droid-pbc-112.sh => armdroid-pbc-bn254.sh} | 4 +- .../contrib/relic/preset/armduino-ecc-128k.sh | 4 +- .../contrib/relic/preset/armega-pbc-112.sh | 4 - .../contrib/relic/preset/armega-pbc-bn254.sh | 3 + ...{armios-pbc-112.sh => armios-pbc-bn254.sh} | 5 +- .../contrib/relic/preset/avr-ecc-80k-sim.sh | 4 +- .../contrib/relic/preset/avr-ecc-80k.sh | 4 +- .../contrib/relic/preset/avr-pbc-80.sh | 4 +- .../contrib/relic/preset/chia-easy-linux.sh | 21 - .../contrib/relic/preset/chia-easy-mac.sh | 21 - .../contrib/relic/preset/chia-gmp-linux.sh | 21 - .../contrib/relic/preset/chia-gmp-mac.sh | 21 - .../relic/preset/curve2251-clmul-gcc.sh | 5 +- .../relic/preset/curve2251-clmul-icc.sh | 5 +- .../relic/preset/curve2251-ssse3-gcc.sh | 5 +- .../relic/preset/curve2251-ssse3-icc.sh | 5 +- .../contrib/relic/preset/fiat-pbc-bls381.sh | 2 + .../contrib/relic/preset/gmp-ecc-128.sh | 4 +- .../relic/preset/gmp-ecc-tweedledum.sh | 2 + .../contrib/relic/preset/gmp-paillier-4096.sh | 2 + .../contrib/relic/preset/gmp-pbc-128.sh | 2 - .../contrib/relic/preset/gmp-pbc-bls381.sh | 2 + .../contrib/relic/preset/gmp-pbc-bn254.sh | 2 + .../{gmp-pbc-128-ss.sh => gmp-pbc-ss1536.sh} | 4 +- .../contrib/relic/preset/msp-ecc-128.sh | 4 +- .../contrib/relic/preset/msp-ecc-128k.sh | 4 +- .../contrib/relic/preset/msp-ecc-80.sh | 4 +- .../contrib/relic/preset/msp-ecc-80k.sh | 4 +- .../contrib/relic/preset/msp-pbc-128.sh | 2 - .../contrib/relic/preset/msp-pbc-80.sh | 2 - .../contrib/relic/preset/msp-pbc-bn158.sh | 2 + .../contrib/relic/preset/msp-pbc-bn254.sh | 2 + .../contrib/relic/preset/valgrind-debug.sh | 4 +- .../contrib/relic/preset/x64-pbc-112.sh | 2 - .../contrib/relic/preset/x64-pbc-128-b12.sh | 2 - .../contrib/relic/preset/x64-pbc-128-bn.sh | 2 - .../contrib/relic/preset/x64-pbc-128.sh | 2 - .../contrib/relic/preset/x64-pbc-140.sh | 2 - .../contrib/relic/preset/x64-pbc-160.sh | 2 - .../contrib/relic/preset/x64-pbc-bls12-381.sh | 2 + .../contrib/relic/preset/x64-pbc-bls12-446.sh | 2 + .../contrib/relic/preset/x64-pbc-bls12-455.sh | 2 + .../contrib/relic/preset/x64-pbc-bls12-638.sh | 2 + .../contrib/relic/preset/x64-pbc-bls48-575.sh | 2 + .../contrib/relic/preset/x64-pbc-bn254.sh | 2 + .../contrib/relic/preset/x64-pbc-bn382.sh | 2 + .../contrib/relic/preset/x64-pbc-bn446.sh | 2 + .../contrib/relic/src/CMakeLists.txt | 30 +- .../contrib/relic/src/arch/lzcnt.inc | 431 + .../contrib/relic/src/arch/relic_arch_arm.c | 33 +- .../contrib/relic/src/arch/relic_arch_avr.c | 35 +- .../contrib/relic/src/arch/relic_arch_msp.c | 54 +- .../contrib/relic/src/arch/relic_arch_none.c | 66 +- .../contrib/relic/src/arch/relic_arch_x64.c | 72 +- .../contrib/relic/src/arch/relic_arch_x86.c | 58 +- .../contrib/relic/src/bc/relic_bc_aes.c | 51 +- .../contrib/relic/src/bc/rijndael-alg-fst.c | 0 .../contrib/relic/src/bc/rijndael-alg-fst.h | 0 .../contrib/relic/src/bc/rijndael-api-fst.c | 2 +- .../contrib/relic/src/bc/rijndael-api-fst.h | 0 .../contrib/relic/src/bn/relic_bn_add.c | 199 +- .../contrib/relic/src/bn/relic_bn_cmp.c | 63 +- .../contrib/relic/src/bn/relic_bn_div.c | 104 +- .../contrib/relic/src/bn/relic_bn_factor.c | 41 +- .../contrib/relic/src/bn/relic_bn_gcd.c | 147 +- .../contrib/relic/src/bn/relic_bn_inv.c | 65 + .../contrib/relic/src/bn/relic_bn_lcm.c | 35 +- .../contrib/relic/src/bn/relic_bn_mem.c | 102 +- .../contrib/relic/src/bn/relic_bn_mod.c | 123 +- .../contrib/relic/src/bn/relic_bn_mul.c | 117 +- .../contrib/relic/src/bn/relic_bn_mxp.c | 208 +- .../contrib/relic/src/bn/relic_bn_prime.c | 116 +- .../contrib/relic/src/bn/relic_bn_rec.c | 197 +- .../contrib/relic/src/bn/relic_bn_shift.c | 105 +- .../contrib/relic/src/bn/relic_bn_smb.c | 75 +- .../contrib/relic/src/bn/relic_bn_sqr.c | 97 +- .../contrib/relic/src/bn/relic_bn_srt.c | 43 +- .../contrib/relic/src/bn/relic_bn_util.c | 234 +- .../contrib/relic/src/cp/relic_cp_bbs.c | 83 +- .../contrib/relic/src/cp/relic_cp_bdpe.c | 77 +- .../contrib/relic/src/cp/relic_cp_bgn.c | 117 +- .../contrib/relic/src/cp/relic_cp_bls.c | 59 +- .../contrib/relic/src/cp/relic_cp_cls.c | 502 + .../contrib/relic/src/cp/relic_cp_cmlhs.c | 386 + .../contrib/relic/src/cp/relic_cp_ecdh.c | 51 +- .../contrib/relic/src/cp/relic_cp_ecdsa.c | 86 +- .../contrib/relic/src/cp/relic_cp_ecies.c | 84 +- .../contrib/relic/src/cp/relic_cp_ecmqv.c | 47 +- .../contrib/relic/src/cp/relic_cp_ecss.c | 100 +- .../contrib/relic/src/cp/relic_cp_elgamal.c | 184 + .../contrib/relic/src/cp/relic_cp_ghpe.c | 225 + .../contrib/relic/src/cp/relic_cp_ibe.c | 128 +- .../contrib/relic/src/cp/relic_cp_mklhs.c | 368 + .../contrib/relic/src/cp/relic_cp_mpss.c | 438 + .../contrib/relic/src/cp/relic_cp_phpe.c | 258 +- .../contrib/relic/src/cp/relic_cp_pss.c | 255 + .../contrib/relic/src/cp/relic_cp_rabin.c | 93 +- .../contrib/relic/src/cp/relic_cp_rsa.c | 881 +- .../contrib/relic/src/cp/relic_cp_sokaka.c | 78 +- .../contrib/relic/src/cp/relic_cp_vbnn.c | 277 + .../contrib/relic/src/cp/relic_cp_vbnn_ibs.c | 328 - .../contrib/relic/src/cp/relic_cp_zss.c | 81 +- .../contrib/relic/src/dv/relic_dv_mem.c | 61 +- .../contrib/relic/src/dv/relic_dv_util.c | 92 +- .../contrib/relic/src/eb/relic_eb_add.c | 89 +- .../contrib/relic/src/eb/relic_eb_cmp.c | 89 + .../contrib/relic/src/eb/relic_eb_curve.c | 69 +- .../contrib/relic/src/eb/relic_eb_dbl.c | 57 +- .../contrib/relic/src/eb/relic_eb_frb.c | 53 +- .../contrib/relic/src/eb/relic_eb_hlv.c | 41 +- .../contrib/relic/src/eb/relic_eb_map.c | 43 +- .../contrib/relic/src/eb/relic_eb_mul.c | 208 +- .../contrib/relic/src/eb/relic_eb_mul_fix.c | 265 +- .../contrib/relic/src/eb/relic_eb_mul_sim.c | 145 +- .../contrib/relic/src/eb/relic_eb_neg.c | 39 +- .../contrib/relic/src/eb/relic_eb_norm.c | 77 +- .../contrib/relic/src/eb/relic_eb_param.c | 77 +- .../contrib/relic/src/eb/relic_eb_pck.c | 35 +- .../contrib/relic/src/eb/relic_eb_util.c | 210 +- .../contrib/relic/src/ed/relic_ed_add.c | 505 +- .../contrib/relic/src/ed/relic_ed_cmp.c | 94 + .../contrib/relic/src/ed/relic_ed_curve.c | 105 +- .../contrib/relic/src/ed/relic_ed_dbl.c | 427 +- .../contrib/relic/src/ed/relic_ed_map.c | 305 +- .../contrib/relic/src/ed/relic_ed_mul.c | 326 +- .../contrib/relic/src/ed/relic_ed_mul_fix.c | 483 +- .../contrib/relic/src/ed/relic_ed_mul_sim.c | 435 +- .../contrib/relic/src/ed/relic_ed_neg.c | 72 + .../contrib/relic/src/ed/relic_ed_norm.c | 127 + .../contrib/relic/src/ed/relic_ed_param.c | 145 +- .../contrib/relic/src/ed/relic_ed_pck.c | 83 +- .../contrib/relic/src/ed/relic_ed_util.c | 500 +- .../contrib/relic/src/ep/relic_ep_add.c | 464 +- .../contrib/relic/src/ep/relic_ep_cmp.c | 103 + .../contrib/relic/src/ep/relic_ep_curve.c | 464 +- .../contrib/relic/src/ep/relic_ep_dbl.c | 244 +- .../contrib/relic/src/ep/relic_ep_map.c | 344 +- .../contrib/relic/src/ep/relic_ep_mul.c | 472 +- .../contrib/relic/src/ep/relic_ep_mul_fix.c | 401 +- .../contrib/relic/src/ep/relic_ep_mul_sim.c | 474 +- .../contrib/relic/src/ep/relic_ep_neg.c | 53 +- .../contrib/relic/src/ep/relic_ep_norm.c | 109 +- .../contrib/relic/src/ep/relic_ep_param.c | 670 +- .../contrib/relic/src/ep/relic_ep_pck.c | 118 +- .../contrib/relic/src/ep/relic_ep_psi.c | 58 + .../contrib/relic/src/ep/relic_ep_util.c | 269 +- .../contrib/relic/src/epx/relic_ep2_add.c | 105 +- .../contrib/relic/src/epx/relic_ep2_cmp.c | 82 + .../contrib/relic/src/epx/relic_ep2_curve.c | 648 +- .../contrib/relic/src/epx/relic_ep2_dbl.c | 62 +- .../contrib/relic/src/epx/relic_ep2_frb.c | 77 +- .../contrib/relic/src/epx/relic_ep2_map.c | 549 +- .../contrib/relic/src/epx/relic_ep2_mul.c | 170 +- .../contrib/relic/src/epx/relic_ep2_mul_cof.c | 181 + .../contrib/relic/src/epx/relic_ep2_mul_fix.c | 250 +- .../contrib/relic/src/epx/relic_ep2_mul_sim.c | 561 +- .../contrib/relic/src/epx/relic_ep2_neg.c | 53 +- .../contrib/relic/src/epx/relic_ep2_norm.c | 56 +- .../contrib/relic/src/epx/relic_ep2_pck.c | 103 +- .../contrib/relic/src/epx/relic_ep2_util.c | 271 +- .../contrib/relic/src/fb/relic_fb_add.c | 32 +- .../contrib/relic/src/fb/relic_fb_cmp.c | 35 +- .../contrib/relic/src/fb/relic_fb_exp.c | 61 +- .../contrib/relic/src/fb/relic_fb_inv.c | 276 +- .../contrib/relic/src/fb/relic_fb_itr.c | 35 +- .../contrib/relic/src/fb/relic_fb_mul.c | 245 +- .../contrib/relic/src/fb/relic_fb_param.c | 31 +- .../contrib/relic/src/fb/relic_fb_poly.c | 105 +- .../contrib/relic/src/fb/relic_fb_rdc.c | 51 +- .../contrib/relic/src/fb/relic_fb_shift.c | 31 +- .../contrib/relic/src/fb/relic_fb_slv.c | 33 +- .../contrib/relic/src/fb/relic_fb_sqr.c | 43 +- .../contrib/relic/src/fb/relic_fb_srt.c | 25 +- .../contrib/relic/src/fb/relic_fb_trc.c | 33 +- .../contrib/relic/src/fb/relic_fb_util.c | 132 +- .../contrib/relic/src/fbx/relic_fb2_inv.c | 31 +- .../contrib/relic/src/fbx/relic_fb2_mul.c | 39 +- .../contrib/relic/src/fbx/relic_fb2_slv.c | 23 +- .../contrib/relic/src/fbx/relic_fb2_sqr.c | 23 +- .../contrib/relic/src/fp/relic_fp_add.c | 85 +- .../contrib/relic/src/fp/relic_fp_cmp.c | 46 +- .../contrib/relic/src/fp/relic_fp_exp.c | 61 +- .../contrib/relic/src/fp/relic_fp_inv.c | 330 +- .../contrib/relic/src/fp/relic_fp_mul.c | 115 +- .../contrib/relic/src/fp/relic_fp_param.c | 778 +- .../contrib/relic/src/fp/relic_fp_prime.c | 579 +- .../contrib/relic/src/fp/relic_fp_rdc.c | 41 +- .../contrib/relic/src/fp/relic_fp_shift.c | 31 +- .../contrib/relic/src/fp/relic_fp_sqr.c | 84 +- .../contrib/relic/src/fp/relic_fp_srt.c | 50 +- .../contrib/relic/src/fp/relic_fp_util.c | 117 +- .../contrib/relic/src/fpx/relic_fp12_mul.c | 148 +- .../contrib/relic/src/fpx/relic_fp12_sqr.c | 413 +- .../contrib/relic/src/fpx/relic_fp18_mul.c | 756 +- .../contrib/relic/src/fpx/relic_fp18_sqr.c | 367 +- .../contrib/relic/src/fpx/relic_fp24_mul.c | 291 + .../contrib/relic/src/fpx/relic_fp24_sqr.c | 242 + .../contrib/relic/src/fpx/relic_fp2_mul.c | 159 +- .../contrib/relic/src/fpx/relic_fp2_sqr.c | 39 +- .../contrib/relic/src/fpx/relic_fp3_mul.c | 166 +- .../contrib/relic/src/fpx/relic_fp3_sqr.c | 70 +- .../contrib/relic/src/fpx/relic_fp48_mul.c | 174 + .../contrib/relic/src/fpx/relic_fp48_sqr.c | 421 + .../contrib/relic/src/fpx/relic_fp4_mul.c | 168 + .../contrib/relic/src/fpx/relic_fp4_sqr.c | 127 + .../contrib/relic/src/fpx/relic_fp54_mul.c | 202 + .../contrib/relic/src/fpx/relic_fp54_sqr.c | 372 + .../contrib/relic/src/fpx/relic_fp6_mul.c | 82 +- .../contrib/relic/src/fpx/relic_fp6_sqr.c | 57 +- .../contrib/relic/src/fpx/relic_fp8_mul.c | 275 + .../contrib/relic/src/fpx/relic_fp8_sqr.c | 168 + .../contrib/relic/src/fpx/relic_fp9_mul.c | 280 + .../contrib/relic/src/fpx/relic_fp9_sqr.c | 222 + .../contrib/relic/src/fpx/relic_fpx_add.c | 192 +- .../contrib/relic/src/fpx/relic_fpx_cmp.c | 123 +- .../contrib/relic/src/fpx/relic_fpx_cyc.c | 1736 +++ .../contrib/relic/src/fpx/relic_fpx_exp.c | 1292 +- .../contrib/relic/src/fpx/relic_fpx_field.c | 224 + .../contrib/relic/src/fpx/relic_fpx_frb.c | 247 +- .../contrib/relic/src/fpx/relic_fpx_inv.c | 556 +- .../contrib/relic/src/fpx/relic_fpx_pck.c | 126 +- .../contrib/relic/src/fpx/relic_fpx_rdc.c | 23 +- .../contrib/relic/src/fpx/relic_fpx_srt.c | 196 +- .../contrib/relic/src/fpx/relic_fpx_util.c | 653 +- .../src/low/arm-asm-254/relic_fp_add_low.c | 54 +- .../src/low/arm-asm-254/relic_fp_add_low.s | 409 +- .../src/low/arm-asm-254/relic_fp_cmp_low.c | 63 - .../src/low/arm-asm-254/relic_fp_cmp_low.s | 115 - .../src/low/arm-asm-254/relic_fp_mul_low.c | 39 +- .../src/low/arm-asm-254/relic_fp_mul_low.s | 24 +- .../src/low/arm-asm-254/relic_fp_rdc_low.c | 100 +- .../src/low/arm-asm-254/relic_fp_rdc_low.s | 23 + .../src/low/avr-asm-158/relic_bn_add_low.s | 27 +- .../src/low/avr-asm-158/relic_bn_shift_low.c | 64 +- .../src/low/avr-asm-158/relic_bn_shift_low.s | 28 +- .../src/low/avr-asm-158/relic_fp_add_low.c | 51 +- .../src/low/avr-asm-158/relic_fp_add_low.s | 35 +- .../src/low/avr-asm-158/relic_fp_mul_low.c | 37 +- .../src/low/avr-asm-158/relic_fp_mul_low.s | 27 +- .../src/low/avr-asm-158/relic_fp_rdc_low.c | 25 +- .../src/low/avr-asm-158/relic_fp_rdc_low.s | 28 +- .../src/low/avr-asm-158/relic_fp_shift_low.c | 67 +- .../src/low/avr-asm-158/relic_fp_shift_low.s | 34 +- .../src/low/avr-asm-158/relic_fp_sqr_low.c | 33 +- .../src/low/avr-asm-158/relic_fp_sqr_low.s | 27 +- .../src/low/avr-asm-163/relic_bn_add_low.s | 23 +- .../src/low/avr-asm-163/relic_bn_shift_low.c | 60 +- .../src/low/avr-asm-163/relic_bn_shift_low.s | 24 +- .../src/low/avr-asm-163/relic_fb_add_low.c | 23 +- .../src/low/avr-asm-163/relic_fb_add_low.s | 27 +- .../src/low/avr-asm-163/relic_fb_mul_low.c | 29 +- .../src/low/avr-asm-163/relic_fb_mul_low.s | 37 +- .../src/low/avr-asm-163/relic_fb_shift_low.c | 77 +- .../src/low/avr-asm-163/relic_fb_shift_low.s | 31 +- .../src/low/avr-asm-163/relic_fb_sqr_low.c | 23 +- .../src/low/avr-asm-163/relic_fb_sqr_low.s | 23 +- .../src/low/curve2251-sse/CMakeLists.txt | 8 +- .../relic/src/low/curve2251-sse/macros.h | 23 +- .../src/low/curve2251-sse/relic_bn_div_low.c | 46 - .../src/low/curve2251-sse/relic_bn_mod_low.c | 61 - .../src/low/curve2251-sse/relic_bn_mul_low.c | 59 - .../src/low/curve2251-sse/relic_bn_sqr_low.c | 58 - .../src/low/curve2251-sse/relic_fb_add_low.c | 27 +- .../src/low/curve2251-sse/relic_fb_inv_low.c | 29 +- .../src/low/curve2251-sse/relic_fb_itr_low.c | 38 +- .../src/low/curve2251-sse/relic_fb_mul_low.c | 39 +- .../low/curve2251-sse/relic_fb_mul_low_cl.c | 27 +- .../low/curve2251-sse/relic_fb_mul_low_ld.c | 39 +- .../low/curve2251-sse/relic_fb_mul_low_sf.c | 51 +- .../src/low/curve2251-sse/relic_fb_rdc_low.c | 69 +- .../src/low/curve2251-sse/relic_fb_slv_low.c | 27 +- .../src/low/curve2251-sse/relic_fb_sqr_low.c | 29 +- .../src/low/curve2251-sse/relic_fb_srt_low.c | 38 +- .../src/low/curve2251-sse/relic_fb_trc_low.c | 23 +- .../relic/src/low/easy/relic_bn_add_low.c | 23 +- .../relic/src/low/easy/relic_bn_cmp_low.c | 60 - .../relic/src/low/easy/relic_bn_div_low.c | 47 +- .../relic/src/low/easy/relic_bn_mod_low.c | 27 +- .../relic/src/low/easy/relic_bn_mul_low.c | 31 +- .../relic/src/low/easy/relic_bn_shift_low.c | 48 +- .../relic/src/low/easy/relic_bn_sqr_low.c | 61 +- .../relic/src/low/easy/relic_fb_add_low.c | 27 +- .../relic/src/low/easy/relic_fb_cmp_low.c | 60 - .../relic/src/low/easy/relic_fb_inv_low.c | 47 +- .../relic/src/low/easy/relic_fb_itr_low.c | 33 +- .../relic/src/low/easy/relic_fb_mul_low.c | 119 +- .../relic/src/low/easy/relic_fb_rdc_low.c | 103 +- .../relic/src/low/easy/relic_fb_shift_low.c | 89 +- .../relic/src/low/easy/relic_fb_slv_low.c | 43 +- .../relic/src/low/easy/relic_fb_sqr_low.c | 61 +- .../relic/src/low/easy/relic_fb_srt_low.c | 91 +- .../relic/src/low/easy/relic_fb_trc_low.c | 23 +- .../relic/src/low/easy/relic_fp_add_low.c | 78 +- .../relic/src/low/easy/relic_fp_cmp_low.c | 60 - .../relic/src/low/easy/relic_fp_inv_low.c | 33 +- .../relic/src/low/easy/relic_fp_mul_low.c | 51 +- .../relic/src/low/easy/relic_fp_rdc_low.c | 92 +- .../relic/src/low/easy/relic_fp_shift_low.c | 79 +- .../relic/src/low/easy/relic_fp_sqr_low.c | 49 +- .../relic/src/low/easy/relic_fpx_add_low.c | 223 +- .../relic/src/low/easy/relic_fpx_mul_low.c | 106 +- .../relic/src/low/easy/relic_fpx_rdc_low.c | 23 +- .../relic/src/low/easy/relic_fpx_sqr_low.c | 107 +- .../contrib/relic/src/low/fiat/CMakeLists.txt | 12 + .../relic/src/low/fiat/relic_fp_add_low.tmpl | 138 + .../relic/src/low/fiat/relic_fp_mul_low.tmpl | 57 + .../relic/src/low/fiat/relic_fp_sqr_low.tmpl | 49 + .../relic/src/low/gmp-sec/relic_bn_add_low.c | 36 +- .../relic/src/low/gmp-sec/relic_bn_cmp_low.c | 46 - .../relic/src/low/gmp-sec/relic_bn_div_low.c | 41 +- .../relic/src/low/gmp-sec/relic_bn_mod_low.c | 41 +- .../relic/src/low/gmp-sec/relic_bn_mul_low.c | 48 +- .../src/low/gmp-sec/relic_bn_shift_low.c | 52 +- .../relic/src/low/gmp-sec/relic_bn_sqr_low.c | 44 +- .../relic/src/low/gmp-sec/relic_fp_add_low.c | 129 + .../relic/src/low/gmp-sec/relic_fp_inv_low.c | 68 + .../relic/src/low/gmp-sec/relic_fp_mul_low.c | 60 + .../relic/src/low/gmp-sec/relic_fp_rdc_low.c | 118 + .../src/low/gmp-sec/relic_fp_shift_low.c | 55 + .../relic/src/low/gmp-sec/relic_fp_sqr_low.c | 52 + .../relic/src/low/gmp/relic_bn_add_low.c | 23 +- .../relic/src/low/gmp/relic_bn_cmp_low.c | 46 - .../relic/src/low/gmp/relic_bn_div_low.c | 23 +- .../relic/src/low/gmp/relic_bn_mod_low.c | 23 +- .../relic/src/low/gmp/relic_bn_mul_low.c | 23 +- .../relic/src/low/gmp/relic_bn_shift_low.c | 52 +- .../relic/src/low/gmp/relic_bn_sqr_low.c | 36 +- .../relic/src/low/gmp/relic_fb_add_low.c | 27 +- .../relic/src/low/gmp/relic_fb_cmp_low.c | 47 - .../relic/src/low/gmp/relic_fb_shift_low.c | 69 +- .../relic/src/low/gmp/relic_fp_add_low.c | 87 +- .../relic/src/low/gmp/relic_fp_cmp_low.c | 46 - .../relic/src/low/gmp/relic_fp_inv_low.c | 48 +- .../relic/src/low/gmp/relic_fp_mul_low.c | 33 +- .../relic/src/low/gmp/relic_fp_rdc_low.c | 77 +- .../relic/src/low/gmp/relic_fp_shift_low.c | 65 +- .../relic/src/low/gmp/relic_fp_sqr_low.c | 27 +- .../relic/src/low/msp-asm/fb_mul_163_ld.inc | 0 .../relic/src/low/msp-asm/fb_mul_271_ld.inc | 0 .../src/low/msp-asm/fb_mul_271_ld_k2.inc | 0 .../relic/src/low/msp-asm/fb_mul_283_ld.inc | 0 .../src/low/msp-asm/fb_mul_353_ld_k2.inc | 0 .../src/low/msp-asm/fb_mul_353_ld_k3.inc | 0 .../src/low/msp-asm/fb_srt_271_penta.inc | 0 .../src/low/msp-asm/fb_srt_353_trino.inc | 0 .../src/low/msp-asm/fp_mul32_160_comba.inc | 0 .../src/low/msp-asm/fp_mul32_256_comba.inc | 0 .../src/low/msp-asm/fp_mul_128_comba.inc | 0 .../src/low/msp-asm/fp_mul_160_comba.inc | 0 .../fp_rdc32_160_montgomery_sparse.inc | 0 .../fp_rdc32_256_montgomery_sparse.inc | 0 .../msp-asm/fp_rdc_160_montgomery_sparse.inc | 0 .../msp-asm/fp_rdc_256_montgomery_sparse.inc | 0 .../relic/src/low/msp-asm/fp_rdc_256p1.inc | 0 .../src/low/msp-asm/fp_sqr32_160_comba.inc | 0 .../src/low/msp-asm/fp_sqr32_256_comba.inc | 0 .../src/low/msp-asm/fp_sqr_128_comba.inc | 0 .../src/low/msp-asm/fp_sqr_160_comba.inc | 0 .../relic/src/low/msp-asm/relic_bn_add_low.c | 2 +- .../relic/src/low/msp-asm/relic_bn_add_low.s | 0 .../src/low/msp-asm/relic_bn_shift_low.c | 43 +- .../src/low/msp-asm/relic_bn_shift_low.s | 0 .../relic/src/low/msp-asm/relic_fb_add_low.c | 4 +- .../relic/src/low/msp-asm/relic_fb_add_low.s | 2 +- .../relic/src/low/msp-asm/relic_fb_mul_low.c | 82 +- .../relic/src/low/msp-asm/relic_fb_mul_low.s | 0 .../src/low/msp-asm/relic_fb_mul_low_163.s | 22 +- .../src/low/msp-asm/relic_fb_mul_low_271.s | 22 +- .../src/low/msp-asm/relic_fb_mul_low_283.s | 22 +- .../src/low/msp-asm/relic_fb_mul_low_353.s | 22 +- .../src/low/msp-asm/relic_fb_mul_low_353_k3.s | 16 +- .../relic/src/low/msp-asm/relic_fb_rdc_low.c | 46 +- .../relic/src/low/msp-asm/relic_fb_rdc_low.s | 0 .../src/low/msp-asm/relic_fb_rdc_low_163.s | 0 .../src/low/msp-asm/relic_fb_rdc_low_271.s | 0 .../src/low/msp-asm/relic_fb_rdc_low_283.s | 0 .../src/low/msp-asm/relic_fb_rdc_low_353.s | 0 .../src/low/msp-asm/relic_fb_shift_low.c | 64 +- .../src/low/msp-asm/relic_fb_shift_low.s | 0 .../relic/src/low/msp-asm/relic_fb_sqr_low.c | 2 +- .../relic/src/low/msp-asm/relic_fb_sqr_low.s | 2 +- .../relic/src/low/msp-asm/relic_fb_srt_low.c | 82 +- .../relic/src/low/msp-asm/relic_fb_srt_low.s | 0 .../relic/src/low/msp-asm/relic_fp_add_low.c | 14 +- .../relic/src/low/msp-asm/relic_fp_add_low.s | 0 .../relic/src/low/msp-asm/relic_fp_cmp_low.c | 58 - .../relic/src/low/msp-asm/relic_fp_inv_low.c | 18 +- .../relic/src/low/msp-asm/relic_fp_mul_low.c | 8 +- .../relic/src/low/msp-asm/relic_fp_mul_low.s | 0 .../src/low/msp-asm/relic_fp_mul_low_160.s | 0 .../src/low/msp-asm/relic_fp_mul_low_256.s | 0 .../relic/src/low/msp-asm/relic_fp_rdc_low.s | 0 .../src/low/msp-asm/relic_fp_rdc_low_160k1.s | 0 .../src/low/msp-asm/relic_fp_rdc_low_160p1.s | 0 .../src/low/msp-asm/relic_fp_rdc_low_256k1.s | 0 .../src/low/msp-asm/relic_fp_rdc_low_256p1.s | 0 .../relic/src/low/msp-asm/relic_fp_sqr_low.s | 0 .../src/low/msp-asm/relic_fp_sqr_low_160.s | 0 .../src/low/msp-asm/relic_fp_sqr_low_256.s | 0 .../relic/src/low/msp-asm/relic_fpx_add_low.c | 36 +- .../contrib/relic/src/low/x64-asm-254/macro.s | 79 +- .../src/low/x64-asm-254/relic_fp_add_low.s | 96 +- .../src/low/x64-asm-254/relic_fp_inv_low.c | 35 +- .../src/low/x64-asm-254/relic_fp_inv_low.s | 23 +- .../src/low/x64-asm-254/relic_fp_mul_low.c | 27 +- .../src/low/x64-asm-254/relic_fp_mul_low.s | 23 +- .../src/low/x64-asm-254/relic_fp_rdc_low.c | 61 +- .../src/low/x64-asm-254/relic_fp_rdc_low.s | 23 +- .../src/low/x64-asm-254/relic_fp_shift_low.c | 59 +- .../src/low/x64-asm-254/relic_fp_shift_low.s | 23 +- .../src/low/x64-asm-254/relic_fp_sqr_low.c | 25 +- .../src/low/x64-asm-254/relic_fp_sqr_low.s | 46 +- .../src/low/x64-asm-254/relic_fpx_add_low.c | 73 +- .../src/low/x64-asm-254/relic_fpx_add_low.s | 240 +- .../src/low/x64-asm-254/relic_fpx_mul_low.c | 73 +- .../src/low/x64-asm-254/relic_fpx_mul_low.s | 57 +- .../src/low/x64-asm-254/relic_fpx_rdc_low.c | 23 +- .../src/low/x64-asm-254/relic_fpx_rdc_low.s | 27 +- .../src/low/x64-asm-254/relic_fpx_sqr_low.c | 75 +- .../src/low/x64-asm-254/relic_fpx_sqr_low.s | 27 +- .../relic/src/low/x64-asm-382/CMakeLists.txt | 1 + .../contrib/relic/src/low/x64-asm-382/macro.s | 35 +- .../src/low/x64-asm-382/relic_bn_add_low.c | 55 - .../src/low/x64-asm-382/relic_bn_cmp_low.c | 46 - .../src/low/x64-asm-382/relic_bn_div_low.c | 46 - .../src/low/x64-asm-382/relic_bn_mod_low.c | 63 - .../src/low/x64-asm-382/relic_bn_mul_low.c | 59 - .../src/low/x64-asm-382/relic_bn_shift_low.c | 86 - .../src/low/x64-asm-382/relic_bn_sqr_low.c | 58 - .../src/low/x64-asm-382/relic_fp_add_low.s | 227 +- .../src/low/x64-asm-382/relic_fp_cmp_low.c | 47 - .../src/low/x64-asm-382/relic_fp_inv_low.c | 47 +- .../src/low/x64-asm-382/relic_fp_mul_low.c | 27 +- .../src/low/x64-asm-382/relic_fp_mul_low.s | 34 +- .../src/low/x64-asm-382/relic_fp_rdc_low.c | 63 +- .../src/low/x64-asm-382/relic_fp_rdc_low.s | 34 +- .../src/low/x64-asm-382/relic_fp_shift_low.c | 59 +- .../src/low/x64-asm-382/relic_fp_shift_low.s | 27 +- .../src/low/x64-asm-382/relic_fp_sqr_low.c | 23 +- .../relic/src/low/x64-asm-446/CMakeLists.txt | 6 + .../contrib/relic/src/low/x64-asm-446/macro.s | 267 + .../src/low/x64-asm-446/relic_fp_add_low.s | 605 + .../src/low/x64-asm-446/relic_fp_inv_low.c | 70 + .../src/low/x64-asm-446/relic_fp_inv_low.s | 292 + .../src/low/x64-asm-446/relic_fp_mul_low.c | 48 + .../src/low/x64-asm-446/relic_fp_mul_low.s | 68 + .../src/low/x64-asm-446/relic_fp_rdc_low.c | 108 + .../src/low/x64-asm-446/relic_fp_rdc_low.s | 62 + .../src/low/x64-asm-446/relic_fp_shift_low.c | 47 + .../src/low/x64-asm-446/relic_fp_shift_low.s | 87 + .../src/low/x64-asm-446/relic_fp_sqr_low.c | 48 + .../relic/src/low/x64-asm-455/CMakeLists.txt | 1 + .../contrib/relic/src/low/x64-asm-455/macro.s | 59 +- .../src/low/x64-asm-455/relic_bn_add_low.c | 55 - .../src/low/x64-asm-455/relic_bn_cmp_low.c | 46 - .../src/low/x64-asm-455/relic_bn_div_low.c | 46 - .../src/low/x64-asm-455/relic_bn_mod_low.c | 63 - .../src/low/x64-asm-455/relic_bn_mul_low.c | 59 - .../src/low/x64-asm-455/relic_bn_shift_low.c | 86 - .../src/low/x64-asm-455/relic_bn_sqr_low.c | 58 - .../src/low/x64-asm-455/relic_fp_add_low.s | 231 +- .../src/low/x64-asm-455/relic_fp_cmp_low.c | 47 - .../src/low/x64-asm-455/relic_fp_inv_low.c | 47 +- .../src/low/x64-asm-455/relic_fp_inv_low.s | 42 +- .../src/low/x64-asm-455/relic_fp_mul_low.c | 27 +- .../src/low/x64-asm-455/relic_fp_mul_low.s | 38 +- .../src/low/x64-asm-455/relic_fp_rdc_low.c | 63 +- .../src/low/x64-asm-455/relic_fp_rdc_low.s | 38 +- .../src/low/x64-asm-455/relic_fp_shift_low.c | 63 +- .../src/low/x64-asm-455/relic_fp_shift_low.s | 41 +- .../src/low/x64-asm-455/relic_fp_sqr_low.c | 23 +- .../relic/src/low/x64-asm-511/CMakeLists.txt | 6 + .../contrib/relic/src/low/x64-asm-511/macro.s | 266 + .../src/low/x64-asm-511/relic_fp_add_low.s | 789 ++ .../src/low/x64-asm-511/relic_fp_inv_low.c | 70 + .../src/low/x64-asm-511/relic_fp_inv_low.s | 296 + .../src/low/x64-asm-511/relic_fp_mul_low.c | 48 + .../src/low/x64-asm-511/relic_fp_mul_low.s | 68 + .../src/low/x64-asm-511/relic_fp_rdc_low.c | 108 + .../src/low/x64-asm-511/relic_fp_rdc_low.s | 62 + .../src/low/x64-asm-511/relic_fp_shift_low.c | 47 + .../src/low/x64-asm-511/relic_fp_shift_low.s | 93 + .../src/low/x64-asm-511/relic_fp_sqr_low.c | 48 + .../relic/src/low/x64-asm-544/CMakeLists.txt | 6 + .../contrib/relic/src/low/x64-asm-544/macro.s | 290 + .../src/low/x64-asm-544/relic_fp_add_low.s | 804 ++ .../src/low/x64-asm-544/relic_fp_mul_low.c | 47 + .../src/low/x64-asm-544/relic_fp_mul_low.s | 68 + .../src/low/x64-asm-544/relic_fp_rdc_low.c | 111 + .../src/low/x64-asm-544/relic_fp_rdc_low.s | 62 + .../src/low/x64-asm-544/relic_fp_sqr_low.c | 48 + .../src/low/x64-asm-544/relic_fpx_add_low.c | 226 + .../src/low/x64-asm-544/relic_fpx_mul_low.c | 184 + .../src/low/x64-asm-544/relic_fpx_rdc_low.c | 50 + .../src/low/x64-asm-544/relic_fpx_rdc_low.s | 65 + .../src/low/x64-asm-544/relic_fpx_sqr_low.c | 172 + .../relic/src/low/x64-asm-638/CMakeLists.txt | 0 .../contrib/relic/src/low/x64-asm-638/macro.s | 87 +- .../src/low/x64-asm-638/relic_fp_add_low.s | 257 +- .../src/low/x64-asm-638/relic_fp_cmp_low.c | 46 - .../src/low/x64-asm-638/relic_fp_mul_low.c | 27 +- .../src/low/x64-asm-638/relic_fp_mul_low.s | 40 +- .../src/low/x64-asm-638/relic_fp_rdc_low.c | 61 +- .../src/low/x64-asm-638/relic_fp_rdc_low.s | 40 +- .../src/low/x64-asm-638/relic_fp_shift_low.c | 86 - .../src/low/x64-asm-638/relic_fp_sqr_low.c | 23 +- .../src/low/x64-asm-638/relic_fpx_rdc_low.c | 23 +- .../src/low/x64-asm-638/relic_fpx_rdc_low.s | 44 +- .../relic/src/low/x64-asm-nine/CMakeLists.txt | 6 + .../relic/src/low/x64-asm-nine/macro.s | 295 + .../src/low/x64-asm-nine/relic_fp_add_low.s | 774 ++ .../src/low/x64-asm-nine/relic_fp_mul_low.c | 47 + .../src/low/x64-asm-nine/relic_fp_mul_low.s | 68 + .../src/low/x64-asm-nine/relic_fp_rdc_low.c | 111 + .../src/low/x64-asm-nine/relic_fp_rdc_low.s | 62 + .../src/low/x64-asm-nine/relic_fp_sqr_low.c | 48 + .../src/low/x64-asm-nine/relic_fpx_rdc_low.c | 50 + .../src/low/x64-asm-nine/relic_fpx_rdc_low.s | 65 + .../relic/src/low/x64-fiat-381/CMakeLists.txt | 6 + .../src/low/x64-fiat-381/bls12_381_q_64.c | 2920 +++++ .../src/low/x64-fiat-381/relic_fp_add_low.c | 138 + .../src/low/x64-fiat-381/relic_fp_inv_low.c | 78 + .../src/low/x64-fiat-381/relic_fp_mul_low.c | 57 + .../src/low/x64-fiat-381/relic_fp_sqr_low.c | 49 + .../contrib/relic/src/md/blake2-impl.h | 154 +- .../contrib/relic/src/md/blake2.h | 201 +- .../contrib/relic/src/md/blake2_COPYING | 0 .../contrib/relic/src/md/blake2s-ref.c | 328 +- .../contrib/relic/src/md/relic_md_blake2s.c | 29 +- .../contrib/relic/src/md/relic_md_hmac.c | 47 +- .../contrib/relic/src/md/relic_md_kdf.c | 59 +- .../contrib/relic/src/md/relic_md_mgf.c | 51 +- .../contrib/relic/src/md/relic_md_sha1.c | 86 - .../contrib/relic/src/md/relic_md_sha224.c | 32 +- .../contrib/relic/src/md/relic_md_sha256.c | 32 +- .../contrib/relic/src/md/relic_md_sha384.c | 32 +- .../contrib/relic/src/md/relic_md_sha512.c | 32 +- .../contrib/relic/src/md/relic_md_xmd.c | 132 + src/bls-signatures/contrib/relic/src/md/sha.h | 70 +- .../contrib/relic/src/md/sha1.c | 424 - .../contrib/relic/src/md/sha224-256.c | 0 .../contrib/relic/src/md/sha384-512.c | 0 .../contrib/relic/src/md/sha_private.h | 31 + .../contrib/relic/src/mpc/relic_mt_mpc.c | 133 + .../contrib/relic/src/mpc/relic_pc_mpc.c | 363 + .../contrib/relic/src/pc/relic_pc_core.c | 77 + .../contrib/relic/src/pc/relic_pc_exp.c | 198 + .../contrib/relic/src/pc/relic_pc_util.c | 303 +- .../contrib/relic/src/pp/relic_pp_add.c | 506 - .../contrib/relic/src/pp/relic_pp_add_k12.c | 322 + .../contrib/relic/src/pp/relic_pp_add_k2.c | 245 + .../contrib/relic/src/pp/relic_pp_add_k48.c | 240 + .../contrib/relic/src/pp/relic_pp_add_k54.c | 243 + .../contrib/relic/src/pp/relic_pp_add_k8.c | 269 + .../pp/{relic_pp_dbl.c => relic_pp_dbl_k12.c} | 288 +- .../contrib/relic/src/pp/relic_pp_dbl_k2.c | 260 + .../contrib/relic/src/pp/relic_pp_dbl_k48.c | 250 + .../contrib/relic/src/pp/relic_pp_dbl_k54.c | 253 + .../contrib/relic/src/pp/relic_pp_dbl_k8.c | 453 + .../pp/{relic_pp_exp.c => relic_pp_exp_k12.c} | 149 +- .../contrib/relic/src/pp/relic_pp_exp_k2.c | 65 + .../contrib/relic/src/pp/relic_pp_exp_k48.c | 176 + .../contrib/relic/src/pp/relic_pp_exp_k54.c | 267 + .../contrib/relic/src/pp/relic_pp_exp_k8.c | 132 + .../contrib/relic/src/pp/relic_pp_map.c | 1019 +- .../contrib/relic/src/pp/relic_pp_map_k12.c | 601 + .../contrib/relic/src/pp/relic_pp_map_k2.c | 382 + .../contrib/relic/src/pp/relic_pp_map_k48.c | 135 + .../contrib/relic/src/pp/relic_pp_map_k54.c | 192 + .../contrib/relic/src/pp/relic_pp_map_k8.c | 164 + .../contrib/relic/src/pp/relic_pp_norm.c | 75 +- .../contrib/relic/src/rand/relic_rand_call.c | 31 +- .../contrib/relic/src/rand/relic_rand_core.c | 96 +- .../contrib/relic/src/rand/relic_rand_fips.c | 112 - .../{relic_rand_hash.c => relic_rand_hashd.c} | 91 +- .../contrib/relic/src/rand/relic_rand_rdrnd.c | 23 +- .../contrib/relic/src/rand/relic_rand_udev.c | 28 +- .../contrib/relic/src/relic_bench.c | 82 +- .../contrib/relic/src/relic_conf.c | 51 +- .../contrib/relic/src/relic_core.c | 136 +- .../contrib/relic/src/relic_err.c | 29 +- .../contrib/relic/src/relic_pool.c | 83 - .../contrib/relic/src/relic_test.c | 112 +- .../contrib/relic/src/relic_trace.c | 109 - .../contrib/relic/src/relic_util.c | 103 +- .../contrib/relic/src/tmpl/relic_tmpl_map.h | 324 + .../contrib/relic/test/CMakeLists.txt | 11 +- .../contrib/relic/test/test_bn.c | 1369 +- .../contrib/relic/test/test_core.c | 87 +- .../contrib/relic/test/test_cp.c | 1543 ++- .../contrib/relic/test/test_dv.c | 213 +- .../contrib/relic/test/test_eb.c | 660 +- .../contrib/relic/test/test_ec.c | 325 +- .../contrib/relic/test/test_ed.c | 1130 +- .../contrib/relic/test/test_ep.c | 1262 +- .../contrib/relic/test/test_epx.c | 989 +- .../contrib/relic/test/test_err.c | 91 +- .../contrib/relic/test/test_fb.c | 783 +- .../contrib/relic/test/test_fbx.c | 285 +- .../contrib/relic/test/test_fp.c | 665 +- .../contrib/relic/test/test_fpx.c | 7376 ++++++++--- .../contrib/relic/test/test_md.c | 458 +- .../contrib/relic/test/test_mpc.c | 418 + .../contrib/relic/test/test_pc.c | 930 +- .../contrib/relic/test/test_pp.c | 1798 ++- .../contrib/relic/test/test_rand.c | 145 +- .../contrib/relic/tools/relic_gen_label.sh | 150 +- .../python-bindings/CMakeLists.txt | 2 +- src/bls-signatures/src/CMakeLists.txt | 17 +- src/bls-signatures/src/aggregationinfo.cpp | 411 - src/bls-signatures/src/aggregationinfo.hpp | 109 - src/bls-signatures/src/bls.cpp | 306 +- src/bls-signatures/src/bls.hpp | 46 +- src/bls-signatures/src/chaincode.cpp | 23 +- src/bls-signatures/src/chaincode.hpp | 7 +- src/bls-signatures/src/elements.cpp | 424 + src/bls-signatures/src/elements.hpp | 113 + src/bls-signatures/src/extendedprivatekey.cpp | 97 +- src/bls-signatures/src/extendedprivatekey.hpp | 41 +- src/bls-signatures/src/extendedpublickey.cpp | 68 +- src/bls-signatures/src/extendedpublickey.hpp | 39 +- src/bls-signatures/src/hdkeys.hpp | 222 + src/bls-signatures/src/hkdf.hpp | 94 + src/bls-signatures/src/legacy.cpp | 433 + src/bls-signatures/src/legacy.hpp | 31 + src/bls-signatures/src/privatekey.cpp | 340 +- src/bls-signatures/src/privatekey.hpp | 94 +- src/bls-signatures/src/publickey.cpp | 161 - src/bls-signatures/src/publickey.hpp | 83 - src/bls-signatures/src/schemes.cpp | 698 ++ src/bls-signatures/src/schemes.hpp | 273 + src/bls-signatures/src/signature.cpp | 671 - src/bls-signatures/src/signature.hpp | 192 - src/bls-signatures/src/test-bench.cpp | 305 +- src/bls-signatures/src/test-utils.hpp | 15 +- src/bls-signatures/src/test.cpp | 2278 ++-- src/bls-signatures/src/threshold.cpp | 299 + src/bls-signatures/src/threshold.hpp | 29 + src/bls-signatures/src/util.hpp | 89 +- src/bls/bls.cpp | 230 +- src/bls/bls.h | 223 +- src/bls/bls_batchverifier.h | 9 +- src/bls/bls_ies.cpp | 48 +- src/bls/bls_ies.h | 47 +- src/bls/bls_worker.cpp | 18 +- src/bls/bls_worker.h | 10 +- src/init.cpp | 3 +- src/llmq/quorums.cpp | 2 +- src/llmq/quorums_dkgsession.cpp | 12 +- src/llmq/quorums_signing_shares.cpp | 2 +- src/random.h | 3 +- src/test/evo_simplifiedmns_tests.cpp | 11 +- src/tor/configure.ac | 1 - 792 files changed, 88777 insertions(+), 46071 deletions(-) create mode 100755 depends/gen_id create mode 100644 depends/packages/libxkbcommon.mk create mode 100644 depends/packages/native_b2.mk create mode 100644 depends/packages/sqlite.mk create mode 100644 depends/patches/qt/dont_hardcode_pwd.patch create mode 100644 depends/patches/qt/dont_hardcode_x86_64.patch create mode 100644 depends/patches/qt/fix_android_pch.patch delete mode 100644 depends/patches/qt/fix_android_qmake_conf.patch delete mode 100644 depends/patches/qt/fix_configure_mac.patch create mode 100644 depends/patches/qt/fix_lib_paths.patch create mode 100644 depends/patches/qt/fix_limits_header.patch create mode 100644 depends/patches/qt/fix_montery_include.patch delete mode 100644 depends/patches/qt/fix_rcc_determinism.patch delete mode 100644 depends/patches/qt/fix_riscv64_arch.patch create mode 100644 depends/patches/qt/no_sdk_version_check.patch create mode 100644 depends/patches/qt/qt.pro create mode 100644 depends/patches/qt/qtbase-moc-ignore-gcc-macro.patch create mode 100644 depends/patches/qt/qttools_src.pro create mode 100644 depends/patches/qt/support_new_android_ndks.patch delete mode 100644 depends/patches/qt/xkb-default.patch mode change 100755 => 100644 src/bls-signatures/contrib/relic/.gitignore mode change 100755 => 100644 src/bls-signatures/contrib/relic/.travis.yml mode change 100755 => 100644 src/bls-signatures/contrib/relic/CMakeLists.txt delete mode 100755 src/bls-signatures/contrib/relic/COPYING delete mode 100755 src/bls-signatures/contrib/relic/COPYING.LESSER mode change 100755 => 100644 src/bls-signatures/contrib/relic/COPYRIGHT mode change 100755 => 100644 src/bls-signatures/contrib/relic/README.md rename src/bls-signatures/contrib/relic/art/{logo.png => rlc_logo.png} (100%) rename src/bls-signatures/contrib/relic/art/{logo.svg => rlc_logo.svg} (100%) mode change 100755 => 100644 mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/CMakeLists.txt mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/bench_bn.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/bench_cp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/bench_dv.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/bench_eb.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/bench_ec.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/bench_ed.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/bench_ep.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/bench_epx.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/bench_err.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/bench_fb.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/bench_fbx.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/bench_fp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/bench_fpx.c create mode 100644 src/bls-signatures/contrib/relic/bench/bench_md.c create mode 100644 src/bls-signatures/contrib/relic/bench/bench_mpc.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/bench_pp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/bench/bench_rand.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/arch.cmake mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/bn.cmake mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/cp.cmake mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/doxygen.cmake mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/eb.cmake mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/ec.cmake mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/ed.cmake mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/ep.cmake create mode 100644 src/bls-signatures/contrib/relic/cmake/err.cmake mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/fb.cmake create mode 100644 src/bls-signatures/contrib/relic/cmake/fiat.cmake mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/fp.cmake mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/fpx.cmake mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/gmp.cmake create mode 100644 src/bls-signatures/contrib/relic/cmake/ios.cmake mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/md.cmake mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/pp.cmake mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/rand.cmake mode change 100755 => 100644 src/bls-signatures/contrib/relic/cmake/relic-config.cmake create mode 100644 src/bls-signatures/contrib/relic/cmake/with.cmake create mode 100644 src/bls-signatures/contrib/relic/demo/cert-input/test-bench.c create mode 100644 src/bls-signatures/contrib/relic/demo/general-paillier/test.c create mode 100644 src/bls-signatures/contrib/relic/demo/link-test/test.c create mode 100644 src/bls-signatures/contrib/relic/demo/link-test/test1.c create mode 100644 src/bls-signatures/contrib/relic/demo/link-test/test2.c create mode 100644 src/bls-signatures/contrib/relic/demo/public-stats/csv.c create mode 100644 src/bls-signatures/contrib/relic/demo/public-stats/csv.h create mode 100644 src/bls-signatures/contrib/relic/demo/public-stats/main.c create mode 100644 src/bls-signatures/contrib/relic/demo/tweedledum/main.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/doc/relic.doxygen.in mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/low/relic_bn_low.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/low/relic_dv_low.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/low/relic_fb_low.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/low/relic_fp_low.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/low/relic_fpx_low.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic.h create mode 100644 src/bls-signatures/contrib/relic/include/relic_alloc.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_arch.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_bc.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_bench.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_bn.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_conf.h.in mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_core.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_cp.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_dv.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_eb.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_ec.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_ed.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_ep.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_epx.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_err.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_fb.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_fbx.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_fp.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_fpx.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_label.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_md.h create mode 100644 src/bls-signatures/contrib/relic/include/relic_mpc.h create mode 100644 src/bls-signatures/contrib/relic/include/relic_multi.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_pc.h delete mode 100755 src/bls-signatures/contrib/relic/include/relic_pool.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_pp.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_rand.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_test.h delete mode 100755 src/bls-signatures/contrib/relic/include/relic_trace.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_types.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/include/relic_util.h delete mode 100755 src/bls-signatures/contrib/relic/preset/ardue-pbc-112.sh create mode 100755 src/bls-signatures/contrib/relic/preset/ardue-pbc-bn254.sh delete mode 100755 src/bls-signatures/contrib/relic/preset/arm-pbc-112.sh create mode 100755 src/bls-signatures/contrib/relic/preset/arm-pbc-bn254.sh rename src/bls-signatures/contrib/relic/preset/{armdroid-pbc-112.sh => armdroid-pbc-bn254.sh} (64%) delete mode 100755 src/bls-signatures/contrib/relic/preset/armega-pbc-112.sh create mode 100755 src/bls-signatures/contrib/relic/preset/armega-pbc-bn254.sh rename src/bls-signatures/contrib/relic/preset/{armios-pbc-112.sh => armios-pbc-bn254.sh} (52%) delete mode 100755 src/bls-signatures/contrib/relic/preset/chia-easy-linux.sh delete mode 100755 src/bls-signatures/contrib/relic/preset/chia-easy-mac.sh delete mode 100755 src/bls-signatures/contrib/relic/preset/chia-gmp-linux.sh delete mode 100755 src/bls-signatures/contrib/relic/preset/chia-gmp-mac.sh create mode 100755 src/bls-signatures/contrib/relic/preset/fiat-pbc-bls381.sh create mode 100755 src/bls-signatures/contrib/relic/preset/gmp-ecc-tweedledum.sh create mode 100755 src/bls-signatures/contrib/relic/preset/gmp-paillier-4096.sh delete mode 100755 src/bls-signatures/contrib/relic/preset/gmp-pbc-128.sh create mode 100755 src/bls-signatures/contrib/relic/preset/gmp-pbc-bls381.sh create mode 100755 src/bls-signatures/contrib/relic/preset/gmp-pbc-bn254.sh rename src/bls-signatures/contrib/relic/preset/{gmp-pbc-128-ss.sh => gmp-pbc-ss1536.sh} (51%) delete mode 100755 src/bls-signatures/contrib/relic/preset/msp-pbc-128.sh delete mode 100755 src/bls-signatures/contrib/relic/preset/msp-pbc-80.sh create mode 100755 src/bls-signatures/contrib/relic/preset/msp-pbc-bn158.sh create mode 100755 src/bls-signatures/contrib/relic/preset/msp-pbc-bn254.sh delete mode 100755 src/bls-signatures/contrib/relic/preset/x64-pbc-112.sh delete mode 100755 src/bls-signatures/contrib/relic/preset/x64-pbc-128-b12.sh delete mode 100755 src/bls-signatures/contrib/relic/preset/x64-pbc-128-bn.sh delete mode 100755 src/bls-signatures/contrib/relic/preset/x64-pbc-128.sh delete mode 100755 src/bls-signatures/contrib/relic/preset/x64-pbc-140.sh delete mode 100755 src/bls-signatures/contrib/relic/preset/x64-pbc-160.sh create mode 100755 src/bls-signatures/contrib/relic/preset/x64-pbc-bls12-381.sh create mode 100755 src/bls-signatures/contrib/relic/preset/x64-pbc-bls12-446.sh create mode 100755 src/bls-signatures/contrib/relic/preset/x64-pbc-bls12-455.sh create mode 100755 src/bls-signatures/contrib/relic/preset/x64-pbc-bls12-638.sh create mode 100755 src/bls-signatures/contrib/relic/preset/x64-pbc-bls48-575.sh create mode 100755 src/bls-signatures/contrib/relic/preset/x64-pbc-bn254.sh create mode 100755 src/bls-signatures/contrib/relic/preset/x64-pbc-bn382.sh create mode 100755 src/bls-signatures/contrib/relic/preset/x64-pbc-bn446.sh mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/CMakeLists.txt create mode 100644 src/bls-signatures/contrib/relic/src/arch/lzcnt.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/arch/relic_arch_arm.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/arch/relic_arch_avr.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/arch/relic_arch_msp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/arch/relic_arch_none.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/arch/relic_arch_x64.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/arch/relic_arch_x86.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bc/relic_bc_aes.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bc/rijndael-alg-fst.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bc/rijndael-alg-fst.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bc/rijndael-api-fst.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bc/rijndael-api-fst.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_add.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_cmp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_div.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_factor.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_gcd.c create mode 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_inv.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_lcm.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_mem.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_mod.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_mul.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_mxp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_prime.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_rec.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_shift.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_smb.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_sqr.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_srt.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/bn/relic_bn_util.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_bbs.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_bdpe.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_bgn.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_bls.c create mode 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_cls.c create mode 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_cmlhs.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_ecdsa.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_ecies.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_ecmqv.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_ecss.c create mode 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_elgamal.c create mode 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_ghpe.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_ibe.c create mode 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_mklhs.c create mode 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_mpss.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_phpe.c create mode 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_pss.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_rabin.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_rsa.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_sokaka.c create mode 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_vbnn.c delete mode 100755 src/bls-signatures/contrib/relic/src/cp/relic_cp_vbnn_ibs.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/cp/relic_cp_zss.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/dv/relic_dv_mem.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/dv/relic_dv_util.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/eb/relic_eb_add.c create mode 100644 src/bls-signatures/contrib/relic/src/eb/relic_eb_cmp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/eb/relic_eb_curve.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/eb/relic_eb_dbl.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/eb/relic_eb_frb.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/eb/relic_eb_hlv.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/eb/relic_eb_map.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/eb/relic_eb_mul.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/eb/relic_eb_mul_fix.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/eb/relic_eb_mul_sim.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/eb/relic_eb_neg.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/eb/relic_eb_norm.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/eb/relic_eb_param.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/eb/relic_eb_pck.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/eb/relic_eb_util.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ed/relic_ed_add.c create mode 100644 src/bls-signatures/contrib/relic/src/ed/relic_ed_cmp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ed/relic_ed_curve.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ed/relic_ed_dbl.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ed/relic_ed_map.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ed/relic_ed_mul.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ed/relic_ed_mul_fix.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ed/relic_ed_mul_sim.c create mode 100644 src/bls-signatures/contrib/relic/src/ed/relic_ed_neg.c create mode 100644 src/bls-signatures/contrib/relic/src/ed/relic_ed_norm.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ed/relic_ed_param.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ed/relic_ed_pck.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ed/relic_ed_util.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ep/relic_ep_add.c create mode 100644 src/bls-signatures/contrib/relic/src/ep/relic_ep_cmp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ep/relic_ep_curve.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ep/relic_ep_dbl.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ep/relic_ep_map.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ep/relic_ep_mul.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ep/relic_ep_mul_fix.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ep/relic_ep_mul_sim.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ep/relic_ep_neg.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ep/relic_ep_norm.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ep/relic_ep_param.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ep/relic_ep_pck.c create mode 100644 src/bls-signatures/contrib/relic/src/ep/relic_ep_psi.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/ep/relic_ep_util.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/epx/relic_ep2_add.c create mode 100644 src/bls-signatures/contrib/relic/src/epx/relic_ep2_cmp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/epx/relic_ep2_curve.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/epx/relic_ep2_dbl.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/epx/relic_ep2_frb.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/epx/relic_ep2_map.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/epx/relic_ep2_mul.c create mode 100644 src/bls-signatures/contrib/relic/src/epx/relic_ep2_mul_cof.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/epx/relic_ep2_mul_sim.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/epx/relic_ep2_neg.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/epx/relic_ep2_norm.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/epx/relic_ep2_pck.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/epx/relic_ep2_util.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fb/relic_fb_add.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fb/relic_fb_cmp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fb/relic_fb_exp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fb/relic_fb_inv.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fb/relic_fb_itr.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fb/relic_fb_mul.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fb/relic_fb_param.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fb/relic_fb_poly.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fb/relic_fb_rdc.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fb/relic_fb_shift.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fb/relic_fb_slv.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fb/relic_fb_sqr.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fb/relic_fb_srt.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fb/relic_fb_trc.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fb/relic_fb_util.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fbx/relic_fb2_inv.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fbx/relic_fb2_mul.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fbx/relic_fb2_slv.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fbx/relic_fb2_sqr.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fp/relic_fp_add.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fp/relic_fp_cmp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fp/relic_fp_exp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fp/relic_fp_inv.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fp/relic_fp_mul.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fp/relic_fp_param.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fp/relic_fp_prime.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fp/relic_fp_rdc.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fp/relic_fp_shift.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fp/relic_fp_sqr.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fp/relic_fp_srt.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fp/relic_fp_util.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp12_mul.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp12_sqr.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp18_mul.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp18_sqr.c create mode 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp24_mul.c create mode 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp24_sqr.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp2_mul.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp2_sqr.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp3_mul.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp3_sqr.c create mode 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp48_mul.c create mode 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp48_sqr.c create mode 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp4_mul.c create mode 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp4_sqr.c create mode 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp54_mul.c create mode 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp54_sqr.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp6_mul.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp6_sqr.c create mode 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp8_mul.c create mode 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp8_sqr.c create mode 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp9_mul.c create mode 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fp9_sqr.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fpx_add.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fpx_cmp.c create mode 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fpx_cyc.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fpx_exp.c create mode 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fpx_field.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fpx_frb.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fpx_inv.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fpx_pck.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fpx_rdc.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fpx_srt.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/fpx/relic_fpx_util.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/arm-asm-254/relic_fp_add_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/arm-asm-254/relic_fp_add_low.s delete mode 100755 src/bls-signatures/contrib/relic/src/low/arm-asm-254/relic_fp_cmp_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/arm-asm-254/relic_fp_cmp_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/arm-asm-254/relic_fp_mul_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/arm-asm-254/relic_fp_mul_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/arm-asm-254/relic_fp_rdc_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/arm-asm-254/relic_fp_rdc_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/avr-asm-158/relic_fp_add_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/avr-asm-158/relic_fp_mul_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/avr-asm-158/relic_fp_rdc_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/avr-asm-158/relic_fp_sqr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/curve2251-sse/CMakeLists.txt delete mode 100755 src/bls-signatures/contrib/relic/src/low/curve2251-sse/relic_bn_div_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/curve2251-sse/relic_bn_mod_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/curve2251-sse/relic_bn_mul_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/curve2251-sse/relic_bn_sqr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/curve2251-sse/relic_fb_itr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/curve2251-sse/relic_fb_trc_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_bn_add_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/easy/relic_bn_cmp_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_bn_div_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_bn_mod_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_bn_mul_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_bn_shift_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_bn_sqr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fb_add_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/easy/relic_fb_cmp_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fb_inv_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fb_itr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fb_mul_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fb_rdc_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fb_shift_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fb_slv_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fb_sqr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fb_srt_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fb_trc_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fp_add_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/easy/relic_fp_cmp_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fp_inv_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fp_mul_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fp_rdc_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fp_shift_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/easy/relic_fp_sqr_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/fiat/CMakeLists.txt create mode 100644 src/bls-signatures/contrib/relic/src/low/fiat/relic_fp_add_low.tmpl create mode 100644 src/bls-signatures/contrib/relic/src/low/fiat/relic_fp_mul_low.tmpl create mode 100644 src/bls-signatures/contrib/relic/src/low/fiat/relic_fp_sqr_low.tmpl mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp-sec/relic_bn_add_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/gmp-sec/relic_bn_cmp_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp-sec/relic_bn_div_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp-sec/relic_bn_mod_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp-sec/relic_bn_mul_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp-sec/relic_bn_shift_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp-sec/relic_bn_sqr_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/gmp-sec/relic_fp_add_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/gmp-sec/relic_fp_inv_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/gmp-sec/relic_fp_mul_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/gmp-sec/relic_fp_rdc_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/gmp-sec/relic_fp_shift_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/gmp-sec/relic_fp_sqr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp/relic_bn_add_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/gmp/relic_bn_cmp_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp/relic_bn_div_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp/relic_bn_mod_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp/relic_bn_mul_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp/relic_bn_shift_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp/relic_bn_sqr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp/relic_fb_add_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/gmp/relic_fb_cmp_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp/relic_fb_shift_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp/relic_fp_add_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/gmp/relic_fp_cmp_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp/relic_fp_inv_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp/relic_fp_mul_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp/relic_fp_rdc_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp/relic_fp_shift_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/gmp/relic_fp_sqr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fb_mul_163_ld.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fb_mul_271_ld.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fb_mul_271_ld_k2.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fb_mul_283_ld.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fb_mul_353_ld_k2.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fb_mul_353_ld_k3.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fb_srt_271_penta.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fb_srt_353_trino.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fp_mul32_160_comba.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fp_mul32_256_comba.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fp_mul_128_comba.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fp_mul_160_comba.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fp_rdc32_160_montgomery_sparse.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fp_rdc32_256_montgomery_sparse.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fp_rdc_160_montgomery_sparse.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fp_rdc_256_montgomery_sparse.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fp_rdc_256p1.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fp_sqr32_160_comba.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fp_sqr32_256_comba.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fp_sqr_128_comba.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/fp_sqr_160_comba.inc mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_bn_add_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_bn_add_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_bn_shift_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_bn_shift_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_add_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_add_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_mul_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_mul_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_mul_low_163.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_mul_low_271.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_mul_low_283.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_mul_low_353.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_mul_low_353_k3.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_rdc_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_rdc_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_rdc_low_163.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_rdc_low_271.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_rdc_low_283.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_rdc_low_353.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_shift_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_shift_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_sqr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_sqr_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_srt_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fb_srt_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_add_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_add_low.s delete mode 100755 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_cmp_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_inv_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_mul_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_mul_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_mul_low_160.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_mul_low_256.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_rdc_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_rdc_low_160k1.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_rdc_low_160p1.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_rdc_low_256k1.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_rdc_low_256p1.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_sqr_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_sqr_low_160.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fp_sqr_low_256.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/msp-asm/relic_fpx_add_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-254/relic_fp_inv_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-254/relic_fp_inv_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-382/macro.s delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_bn_add_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_bn_cmp_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_bn_div_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_bn_mod_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_bn_mul_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_bn_shift_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_bn_sqr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_fp_add_low.s delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_fp_cmp_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_fp_inv_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_fp_mul_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_fp_mul_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_fp_rdc_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_fp_rdc_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_fp_shift_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_fp_shift_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-382/relic_fp_sqr_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-446/CMakeLists.txt create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-446/macro.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-446/relic_fp_add_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-446/relic_fp_inv_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-446/relic_fp_inv_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-446/relic_fp_mul_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-446/relic_fp_mul_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-446/relic_fp_rdc_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-446/relic_fp_rdc_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-446/relic_fp_shift_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-446/relic_fp_shift_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-446/relic_fp_sqr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-455/macro.s delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_bn_add_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_bn_cmp_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_bn_div_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_bn_mod_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_bn_mul_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_bn_shift_low.c delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_bn_sqr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_fp_add_low.s delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_fp_cmp_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_fp_inv_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_fp_inv_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_fp_mul_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_fp_mul_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_fp_rdc_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_fp_rdc_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_fp_shift_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_fp_shift_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-455/relic_fp_sqr_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-511/CMakeLists.txt create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-511/macro.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-511/relic_fp_add_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-511/relic_fp_inv_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-511/relic_fp_inv_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-511/relic_fp_mul_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-511/relic_fp_mul_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-511/relic_fp_rdc_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-511/relic_fp_rdc_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-511/relic_fp_shift_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-511/relic_fp_shift_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-511/relic_fp_sqr_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-544/CMakeLists.txt create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-544/macro.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-544/relic_fp_add_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-544/relic_fp_mul_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-544/relic_fp_mul_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-544/relic_fp_rdc_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-544/relic_fp_rdc_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-544/relic_fp_sqr_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-544/relic_fpx_add_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-544/relic_fpx_mul_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-544/relic_fpx_rdc_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-544/relic_fpx_rdc_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-544/relic_fpx_sqr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-638/CMakeLists.txt mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-638/macro.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-638/relic_fp_add_low.s delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-638/relic_fp_cmp_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-638/relic_fp_mul_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-638/relic_fp_mul_low.s mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-638/relic_fp_rdc_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-638/relic_fp_rdc_low.s delete mode 100755 src/bls-signatures/contrib/relic/src/low/x64-asm-638/relic_fp_shift_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-638/relic_fp_sqr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-638/relic_fpx_rdc_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-nine/CMakeLists.txt create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-nine/macro.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-nine/relic_fp_add_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-nine/relic_fp_mul_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-nine/relic_fp_mul_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-nine/relic_fp_rdc_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-nine/relic_fp_rdc_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-nine/relic_fp_sqr_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-nine/relic_fpx_rdc_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-asm-nine/relic_fpx_rdc_low.s create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-fiat-381/CMakeLists.txt create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-fiat-381/bls12_381_q_64.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-fiat-381/relic_fp_add_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-fiat-381/relic_fp_inv_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-fiat-381/relic_fp_mul_low.c create mode 100644 src/bls-signatures/contrib/relic/src/low/x64-fiat-381/relic_fp_sqr_low.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/md/blake2-impl.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/md/blake2.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/md/blake2_COPYING mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/md/blake2s-ref.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/md/relic_md_blake2s.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/md/relic_md_hmac.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/md/relic_md_kdf.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/md/relic_md_mgf.c delete mode 100755 src/bls-signatures/contrib/relic/src/md/relic_md_sha1.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/md/relic_md_sha224.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/md/relic_md_sha256.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/md/relic_md_sha384.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/md/relic_md_sha512.c create mode 100644 src/bls-signatures/contrib/relic/src/md/relic_md_xmd.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/md/sha.h delete mode 100755 src/bls-signatures/contrib/relic/src/md/sha1.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/md/sha224-256.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/md/sha384-512.c create mode 100644 src/bls-signatures/contrib/relic/src/md/sha_private.h create mode 100644 src/bls-signatures/contrib/relic/src/mpc/relic_mt_mpc.c create mode 100644 src/bls-signatures/contrib/relic/src/mpc/relic_pc_mpc.c create mode 100644 src/bls-signatures/contrib/relic/src/pc/relic_pc_core.c create mode 100644 src/bls-signatures/contrib/relic/src/pc/relic_pc_exp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/pc/relic_pc_util.c delete mode 100755 src/bls-signatures/contrib/relic/src/pp/relic_pp_add.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_add_k12.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_add_k2.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_add_k48.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_add_k54.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_add_k8.c rename src/bls-signatures/contrib/relic/src/pp/{relic_pp_dbl.c => relic_pp_dbl_k12.c} (63%) mode change 100755 => 100644 create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_dbl_k2.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_dbl_k48.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_dbl_k54.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_dbl_k8.c rename src/bls-signatures/contrib/relic/src/pp/{relic_pp_exp.c => relic_pp_exp_k12.c} (59%) mode change 100755 => 100644 create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_exp_k2.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_exp_k48.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_exp_k54.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_exp_k8.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_map.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_map_k12.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_map_k2.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_map_k48.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_map_k54.c create mode 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_map_k8.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/pp/relic_pp_norm.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/rand/relic_rand_call.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/rand/relic_rand_core.c delete mode 100755 src/bls-signatures/contrib/relic/src/rand/relic_rand_fips.c rename src/bls-signatures/contrib/relic/src/rand/{relic_rand_hash.c => relic_rand_hashd.c} (66%) mode change 100755 => 100644 mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/rand/relic_rand_rdrnd.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/rand/relic_rand_udev.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/relic_bench.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/relic_conf.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/relic_core.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/relic_err.c delete mode 100755 src/bls-signatures/contrib/relic/src/relic_pool.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/relic_test.c delete mode 100755 src/bls-signatures/contrib/relic/src/relic_trace.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/src/relic_util.c create mode 100644 src/bls-signatures/contrib/relic/src/tmpl/relic_tmpl_map.h mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_bn.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_core.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_cp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_dv.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_eb.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_ec.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_ed.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_ep.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_epx.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_err.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_fb.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_fbx.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_fp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_fpx.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_md.c create mode 100644 src/bls-signatures/contrib/relic/test/test_mpc.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_pc.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_pp.c mode change 100755 => 100644 src/bls-signatures/contrib/relic/test/test_rand.c delete mode 100644 src/bls-signatures/src/aggregationinfo.cpp delete mode 100644 src/bls-signatures/src/aggregationinfo.hpp create mode 100644 src/bls-signatures/src/elements.cpp create mode 100644 src/bls-signatures/src/elements.hpp create mode 100644 src/bls-signatures/src/hdkeys.hpp create mode 100644 src/bls-signatures/src/hkdf.hpp create mode 100644 src/bls-signatures/src/legacy.cpp create mode 100644 src/bls-signatures/src/legacy.hpp delete mode 100644 src/bls-signatures/src/publickey.cpp delete mode 100644 src/bls-signatures/src/publickey.hpp create mode 100644 src/bls-signatures/src/schemes.cpp create mode 100644 src/bls-signatures/src/schemes.hpp delete mode 100644 src/bls-signatures/src/signature.cpp delete mode 100644 src/bls-signatures/src/signature.hpp create mode 100644 src/bls-signatures/src/threshold.cpp create mode 100644 src/bls-signatures/src/threshold.hpp diff --git a/.github/workflows/ci-master.yml b/.github/workflows/ci-master.yml index 39b8c8046f..5e30a91874 100644 --- a/.github/workflows/ci-master.yml +++ b/.github/workflows/ci-master.yml @@ -109,7 +109,7 @@ jobs: build-windows: name: Build for Windows needs: create-source-distribution - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 env: ARTIFACT_DIR: windows-binaries steps: diff --git a/build-aux/m4/bitcoin_qt.m4 b/build-aux/m4/bitcoin_qt.m4 index 83d054af5f..5b5a8ed16e 100644 --- a/build-aux/m4/bitcoin_qt.m4 +++ b/build-aux/m4/bitcoin_qt.m4 @@ -64,6 +64,13 @@ AC_DEFUN([BITCOIN_QT_INIT],[ ], [bitcoin_qt_want_version=auto]) + AS_IF([test "x$with_gui" = xqt5_debug], + [AS_CASE([$host], + [*darwin*], [qt_lib_suffix=_debug], + [*mingw*], [qt_lib_suffix=d], + [qt_lib_suffix= ]); bitcoin_qt_want_version=qt5], + [qt_lib_suffix= ]) + AC_ARG_WITH([qt-incdir],[AS_HELP_STRING([--with-qt-incdir=INC_DIR],[specify qt include path (overridden by pkgconfig)])], [qt_include_path=$withval], []) AC_ARG_WITH([qt-libdir],[AS_HELP_STRING([--with-qt-libdir=LIB_DIR],[specify qt lib path (overridden by pkgconfig)])], [qt_lib_path=$withval], []) AC_ARG_WITH([qt-plugindir],[AS_HELP_STRING([--with-qt-plugindir=PLUGIN_DIR],[specify qt plugin path (overridden by pkgconfig)])], [qt_plugin_path=$withval], []) @@ -72,41 +79,39 @@ AC_DEFUN([BITCOIN_QT_INIT],[ AC_ARG_WITH([qtdbus], [AS_HELP_STRING([--with-qtdbus], - [enable DBus support (default is yes if qt is enabled and QtDBus is found)])], + [enable DBus support (default is yes if qt is enabled and QtDBus is found, except on Android)])], [use_dbus=$withval], [use_dbus=auto]) + dnl Android doesn't support D-Bus and certainly doesn't use it for notifications + case $host in + *android*) + if test "x$use_dbus" != xyes; then + use_dbus=no + fi + ;; + esac + AC_SUBST(QT_TRANSLATION_DIR,$qt_translation_path) ]) -dnl Find the appropriate version of Qt libraries and includes. -dnl Inputs: $1: Whether or not pkg-config should be used. yes|no. Default: yes. -dnl Inputs: $2: If $1 is "yes" and --with-gui=auto, which qt version should be -dnl tried first. -dnl Outputs: See _BITCOIN_QT_FIND_LIBS_* +dnl Find Qt libraries and includes. +dnl +dnl BITCOIN_QT_CONFIGURE([MINIMUM-VERSION]) +dnl +dnl Outputs: See _BITCOIN_QT_FIND_LIBS dnl Outputs: Sets variables for all qt-related tools. dnl Outputs: bitcoin_enable_qt, bitcoin_enable_qt_dbus, bitcoin_enable_qt_test AC_DEFUN([BITCOIN_QT_CONFIGURE],[ - use_pkgconfig=$1 - - if test "x$use_pkgconfig" = x; then - use_pkgconfig=yes - fi - - if test "x$use_pkgconfig" = xyes; then - BITCOIN_QT_CHECK([_BITCOIN_QT_FIND_LIBS_WITH_PKGCONFIG]) - else - BITCOIN_QT_CHECK([_BITCOIN_QT_FIND_LIBS_WITHOUT_PKGCONFIG]) - fi + qt_version=">= $1" + qt_lib_prefix="Qt5" + BITCOIN_QT_CHECK([_BITCOIN_QT_FIND_LIBS]) dnl This is ugly and complicated. Yuck. Works as follows: - dnl For Qt5, we can check a header to find out whether Qt is build - dnl statically. When Qt is built statically, some plugins must be linked into - dnl the final binary as well. - dnl With Qt5, languages moved into core and the WindowsIntegration plugin was - dnl added. - dnl _BITCOIN_QT_CHECK_STATIC_PLUGINS does a quick link-check and appends the - dnl results to QT_LIBS. + dnl We check a header to find out whether Qt is built statically. + dnl When Qt is built statically, some plugins must be linked into + dnl the final binary as well. _BITCOIN_QT_CHECK_STATIC_PLUGIN does + dnl a quick link-check and appends the results to QT_LIBS. BITCOIN_QT_CHECK([ TEMP_CPPFLAGS=$CPPFLAGS TEMP_CXXFLAGS=$CXXFLAGS @@ -114,24 +119,50 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[ CXXFLAGS="$PIC_FLAGS $CXXFLAGS" _BITCOIN_QT_IS_STATIC if test "x$bitcoin_cv_static_qt" = xyes; then - _BITCOIN_QT_FIND_STATIC_PLUGINS + _BITCOIN_QT_CHECK_STATIC_LIBS + + if test "x$qt_plugin_path" != x; then + if test -d "$qt_plugin_path/platforms"; then + QT_LIBS="$QT_LIBS -L$qt_plugin_path/platforms" + fi + if test -d "$qt_plugin_path/styles"; then + QT_LIBS="$QT_LIBS -L$qt_plugin_path/styles" + fi + if test -d "$qt_plugin_path/accessible"; then + QT_LIBS="$QT_LIBS -L$qt_plugin_path/accessible" + fi + if test -d "$qt_plugin_path/platforms/android"; then + QT_LIBS="$QT_LIBS -L$qt_plugin_path/platforms/android -lqtfreetype -lEGL" + fi + fi + AC_DEFINE(QT_STATICPLUGIN, 1, [Define this symbol if qt plugins are static]) if test "x$TARGET_OS" != xandroid; then - _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QMinimalIntegrationPlugin)],[-lqminimal]) - AC_DEFINE(QT_QPA_PLATFORM_MINIMAL, 1, [Define this symbol if the minimal qt platform exists]) + _BITCOIN_QT_CHECK_STATIC_PLUGIN([QMinimalIntegrationPlugin], [-lqminimal]) + AC_DEFINE(QT_QPA_PLATFORM_MINIMAL, 1, [Define this symbol if the minimal qt platform exists]) fi if test "x$TARGET_OS" = xwindows; then - _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)],[-lqwindows]) + dnl Linking against wtsapi32 is required. See #17749 and + dnl https://bugreports.qt.io/browse/QTBUG-27097. + AX_CHECK_LINK_FLAG([-lwtsapi32], [QT_LIBS="$QT_LIBS -lwtsapi32"], [AC_MSG_ERROR([could not link against -lwtsapi32])]) + _BITCOIN_QT_CHECK_STATIC_PLUGIN([QWindowsIntegrationPlugin], [-lqwindows]) + _BITCOIN_QT_CHECK_STATIC_PLUGIN([QWindowsVistaStylePlugin], [-lqwindowsvistastyle]) AC_DEFINE(QT_QPA_PLATFORM_WINDOWS, 1, [Define this symbol if the qt platform is windows]) elif test "x$TARGET_OS" = xlinux; then - _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QXcbIntegrationPlugin)],[-lqxcb -lxcb-static]) + dnl workaround for https://bugreports.qt.io/browse/QTBUG-74874 + AX_CHECK_LINK_FLAG([-lxcb-shm], [QT_LIBS="$QT_LIBS -lxcb-shm"], [AC_MSG_ERROR([could not link against -lxcb-shm])]) + _BITCOIN_QT_CHECK_STATIC_PLUGIN([QXcbIntegrationPlugin], [-lqxcb]) AC_DEFINE(QT_QPA_PLATFORM_XCB, 1, [Define this symbol if the qt platform is xcb]) elif test "x$TARGET_OS" = xdarwin; then - AX_CHECK_LINK_FLAG([[-framework IOKit]],[QT_LIBS="$QT_LIBS -framework IOKit"],[AC_MSG_ERROR(could not iokit framework)]) - _BITCOIN_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin)],[-lqcocoa]) + AX_CHECK_LINK_FLAG([[-framework Carbon]],[QT_LIBS="$QT_LIBS -framework Carbon"],[AC_MSG_ERROR(could not link against Carbon framework)]) + AX_CHECK_LINK_FLAG([[-framework IOSurface]],[QT_LIBS="$QT_LIBS -framework IOSurface"],[AC_MSG_ERROR(could not link against IOSurface framework)]) + AX_CHECK_LINK_FLAG([[-framework Metal]],[QT_LIBS="$QT_LIBS -framework Metal"],[AC_MSG_ERROR(could not link against Metal framework)]) + AX_CHECK_LINK_FLAG([[-framework QuartzCore]],[QT_LIBS="$QT_LIBS -framework QuartzCore"],[AC_MSG_ERROR(could not link against QuartzCore framework)]) + _BITCOIN_QT_CHECK_STATIC_PLUGIN([QCocoaIntegrationPlugin], [-lqcocoa]) + _BITCOIN_QT_CHECK_STATIC_PLUGIN([QMacStylePlugin], [-lqmacstyle]) AC_DEFINE(QT_QPA_PLATFORM_COCOA, 1, [Define this symbol if the qt platform is cocoa]) elif test "x$TARGET_OS" = xandroid; then - QT_LIBS="-Wl,--export-dynamic,--undefined=JNI_OnLoad -lqtforandroid -ljnigraphics -landroid -lqtfreetype -lQt5EglSupport $QT_LIBS" + QT_LIBS="-Wl,--export-dynamic,--undefined=JNI_OnLoad -lqtforandroid -ljnigraphics -landroid -lqtfreetype $QT_LIBS" AC_DEFINE(QT_QPA_PLATFORM_ANDROID, 1, [Define this symbol if the qt platform is android]) fi fi @@ -139,8 +170,8 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[ CXXFLAGS=$TEMP_CXXFLAGS ]) - if test "x$use_pkgconfig$qt_bin_path" = xyes; then - qt_bin_path="`$PKG_CONFIG --variable=host_bins Qt5Core 2>/dev/null`" + if test "x$qt_bin_path" = x; then + qt_bin_path="`$PKG_CONFIG --variable=host_bins ${qt_lib_prefix}Core 2>/dev/null`" fi if test "x$use_hardening" != xno; then @@ -195,13 +226,14 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[ BITCOIN_QT_PATH_PROGS([RCC], [rcc-qt5 rcc5 rcc], $qt_bin_path) BITCOIN_QT_PATH_PROGS([LRELEASE], [lrelease-qt5 lrelease5 lrelease], $qt_bin_path) BITCOIN_QT_PATH_PROGS([LUPDATE], [lupdate-qt5 lupdate5 lupdate],$qt_bin_path, yes) + BITCOIN_QT_PATH_PROGS([LCONVERT], [lconvert-qt5 lconvert5 lconvert], $qt_bin_path, yes) MOC_DEFS='-DHAVE_CONFIG_H -I$(srcdir)' case $host in *darwin*) BITCOIN_QT_CHECK([ MOC_DEFS="${MOC_DEFS} -DQ_OS_MAC" - base_frameworks="-framework Foundation -framework ApplicationServices -framework AppKit" + base_frameworks="-framework Foundation -framework AppKit" AX_CHECK_LINK_FLAG([[$base_frameworks]],[QT_LIBS="$QT_LIBS $base_frameworks"],[AC_MSG_ERROR(could not find base frameworks)]) ]) ;; @@ -213,7 +245,7 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[ dnl enable qt support - AC_MSG_CHECKING(whether to build ]AC_PACKAGE_NAME[ GUI) + AC_MSG_CHECKING([whether to build ]AC_PACKAGE_NAME[ GUI]) BITCOIN_QT_CHECK([ bitcoin_enable_qt=yes bitcoin_enable_qt_test=yes @@ -228,13 +260,16 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[ AC_MSG_ERROR([libQtDBus not found. Install libQtDBus or remove --with-qtdbus.]) fi if test "x$LUPDATE" = x; then - AC_MSG_WARN([lupdate is required to update qt translations]) + AC_MSG_WARN([lupdate tool is required to update Qt translations.]) + fi + if test "x$LCONVERT" = x; then + AC_MSG_WARN([lconvert tool is required to update Qt translations.]) fi ],[ bitcoin_enable_qt=no ]) if test x$bitcoin_enable_qt = xyes; then - AC_MSG_RESULT([$bitcoin_enable_qt ($QT_LIB_PREFIX)]) + AC_MSG_RESULT([$bitcoin_enable_qt ($qt_lib_prefix)]) else AC_MSG_RESULT([$bitcoin_enable_qt]) fi @@ -251,61 +286,20 @@ AC_DEFUN([BITCOIN_QT_CONFIGURE],[ AC_SUBST(MOC_DEFS) ]) -dnl All macros below are internal and should _not_ be used from the main -dnl configure.ac. -dnl ---- - -dnl Internal. Check included version of Qt against minimum specified in doc/dependencies.md -dnl Requires: INCLUDES must be populated as necessary. -dnl Output: bitcoin_cv_qt5=yes|no -AC_DEFUN([_BITCOIN_QT_CHECK_QT5],[ - AC_CACHE_CHECK(for Qt 5, bitcoin_cv_qt5,[ - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - #include - #ifndef QT_VERSION - # include - #endif - ]], - [[ - #if QT_VERSION < 0x050501 - choke - #endif - ]])], - [bitcoin_cv_qt5=yes], - [bitcoin_cv_qt5=no]) -])]) +dnl All macros below are internal and should _not_ be used from configure.ac. -dnl Internal. Check if the included version of Qt is greater than Qt58. -dnl Requires: INCLUDES must be populated as necessary. -dnl Output: bitcoin_cv_qt58=yes|no -AC_DEFUN([_BITCOIN_QT_CHECK_QT58],[ - AC_CACHE_CHECK(for > Qt 5.7, bitcoin_cv_qt58,[ - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - #include - #ifndef QT_VERSION - # include - #endif - ]], - [[ - #if QT_VERSION_MINOR < 8 - choke - #endif - ]])], - [bitcoin_cv_qt58=yes], - [bitcoin_cv_qt58=no]) -])]) - - -dnl Internal. Check if the linked version of Qt was built as static libs. -dnl Requires: Qt5. +dnl Internal. Check if the linked version of Qt was built statically. +dnl +dnl _BITCOIN_QT_IS_STATIC +dnl --------------------- +dnl dnl Requires: INCLUDES and LIBS must be populated as necessary. dnl Output: bitcoin_cv_static_qt=yes|no -dnl Output: Defines QT_STATICPLUGIN if plugins are static. AC_DEFUN([_BITCOIN_QT_IS_STATIC],[ AC_CACHE_CHECK(for static Qt, bitcoin_cv_static_qt,[ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include - #ifndef QT_VERSION OR QT_VERSION_STR + #ifndef QT_VERSION # include #endif ]], @@ -317,203 +311,88 @@ AC_DEFUN([_BITCOIN_QT_IS_STATIC],[ [bitcoin_cv_static_qt=yes], [bitcoin_cv_static_qt=no]) ]) - if test "x$bitcoin_cv_static_qt" = xyes; then - AC_DEFINE(QT_STATICPLUGIN, 1, [Define this symbol for static Qt plugins]) - fi ]) -dnl Internal. Check if the link-requirements for static plugins are met. +dnl Internal. Check if the link-requirements for a static plugin are met. +dnl +dnl _BITCOIN_QT_CHECK_STATIC_PLUGIN(PLUGIN, LIBRARIES) +dnl -------------------------------------------------- +dnl dnl Requires: INCLUDES and LIBS must be populated as necessary. -dnl Inputs: $1: A series of Q_IMPORT_PLUGIN(). +dnl Inputs: $1: A static plugin name. dnl Inputs: $2: The libraries that resolve $1. dnl Output: QT_LIBS is prepended or configure exits. -AC_DEFUN([_BITCOIN_QT_CHECK_STATIC_PLUGINS],[ - AC_MSG_CHECKING(for static Qt plugins: $2) +AC_DEFUN([_BITCOIN_QT_CHECK_STATIC_PLUGIN], [ + AC_MSG_CHECKING([for $1 ($2)]) CHECK_STATIC_PLUGINS_TEMP_LIBS="$LIBS" - LIBS="$2 $QT_LIBS $LIBS" + LIBS="$2${qt_lib_suffix} $QT_LIBS $LIBS" AC_LINK_IFELSE([AC_LANG_PROGRAM([[ - #define QT_STATICPLUGIN - #include - $1]], - [[return 0;]])], - [AC_MSG_RESULT(yes); QT_LIBS="$2 $QT_LIBS"], - [AC_MSG_RESULT(no); BITCOIN_QT_FAIL(Could not resolve: $2)]) + #include + Q_IMPORT_PLUGIN($1) + ]])], + [AC_MSG_RESULT([yes]); QT_LIBS="$2${qt_lib_suffix} $QT_LIBS"], + [AC_MSG_RESULT([no]); BITCOIN_QT_FAIL([$1 not found.])]) LIBS="$CHECK_STATIC_PLUGINS_TEMP_LIBS" ]) -dnl Internal. Find paths necessary for linking qt static plugins -dnl Inputs: qt_plugin_path. optional. -dnl Outputs: QT_LIBS is appended -AC_DEFUN([_BITCOIN_QT_FIND_STATIC_PLUGINS],[ - if test "x$qt_plugin_path" != x; then - QT_LIBS="$QT_LIBS -L$qt_plugin_path/platforms" - if test -d "$qt_plugin_path/accessible"; then - QT_LIBS="$QT_LIBS -L$qt_plugin_path/accessible" - fi - if test -d "$qt_plugin_path/platforms/android"; then - QT_LIBS="$QT_LIBS -L$qt_plugin_path/platforms/android -lqtfreetype -lEGL" - fi - if test "x$use_pkgconfig" = xyes; then - : dnl - m4_ifdef([PKG_CHECK_MODULES],[ - if test x$bitcoin_cv_qt58 = xno; then - PKG_CHECK_MODULES([QTPLATFORM], [Qt5PlatformSupport], [QT_LIBS="$QTPLATFORM_LIBS $QT_LIBS"]) - else - PKG_CHECK_MODULES([QTFONTDATABASE], [Qt5FontDatabaseSupport], [QT_LIBS="-lQt5FontDatabaseSupport $QT_LIBS"]) - PKG_CHECK_MODULES([QTEVENTDISPATCHER], [Qt5EventDispatcherSupport], [QT_LIBS="-lQt5EventDispatcherSupport $QT_LIBS"]) - PKG_CHECK_MODULES([QTTHEME], [Qt5ThemeSupport], [QT_LIBS="-lQt5ThemeSupport $QT_LIBS"]) - PKG_CHECK_MODULES([QTDEVICEDISCOVERY], [Qt5DeviceDiscoverySupport], [QT_LIBS="-lQt5DeviceDiscoverySupport $QT_LIBS"]) - PKG_CHECK_MODULES([QTACCESSIBILITY], [Qt5AccessibilitySupport], [QT_LIBS="-lQt5AccessibilitySupport $QT_LIBS"]) - PKG_CHECK_MODULES([QTFB], [Qt5FbSupport], [QT_LIBS="-lQt5FbSupport $QT_LIBS"]) - fi - if test "x$TARGET_OS" = xlinux; then - PKG_CHECK_MODULES([QTXCBQPA], [Qt5XcbQpa], [QT_LIBS="$QTXCBQPA_LIBS $QT_LIBS"]) - elif test "x$TARGET_OS" = xdarwin; then - PKG_CHECK_MODULES([QTCLIPBOARD], [Qt5ClipboardSupport], [QT_LIBS="-lQt5ClipboardSupport $QT_LIBS"]) - PKG_CHECK_MODULES([QTGRAPHICS], [Qt5GraphicsSupport], [QT_LIBS="-lQt5GraphicsSupport $QT_LIBS"]) - PKG_CHECK_MODULES([QTCGL], [Qt5CglSupport], [QT_LIBS="-lQt5CglSupport $QT_LIBS"]) - fi - ]) - else - if test "x$TARGET_OS" = xwindows; then - AC_CACHE_CHECK(for Qt >= 5.6, bitcoin_cv_need_platformsupport,[ - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - #include - #ifndef QT_VERSION - # include - #endif - ]], - [[ - #if QT_VERSION < 0x050600 || QT_VERSION_MINOR < 6 - choke - #endif - ]])], - [bitcoin_cv_need_platformsupport=yes], - [bitcoin_cv_need_platformsupport=no]) - ]) - if test "x$bitcoin_cv_need_platformsupport" = xyes; then - if test x$bitcoin_cv_qt58 = xno; then - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}PlatformSupport],[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXPlatformSupport not found))) - else - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}FontDatabaseSupport],[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXFontDatabaseSupport not found))) - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}EventDispatcherSupport],[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXEventDispatcherSupport not found))) - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}ThemeSupport],[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXThemeSupport not found))) - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}FbSupport],[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXFbSupport not found))) - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}DeviceDiscoverySupport],[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXDeviceDiscoverySupport not found))) - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}AccessibilitySupport],[main],,BITCOIN_QT_FAIL(lib$QT_LIB_PREFIXAccessibilitySupport not found))) - QT_LIBS="$QT_LIBS -lversion -ldwmapi -luxtheme" - fi - fi - fi - fi - fi +dnl Internal. Check Qt static libs with PKG_CHECK_MODULES. +dnl +dnl _BITCOIN_QT_CHECK_STATIC_LIBS +dnl ----------------------------- +dnl +dnl Outputs: QT_LIBS is prepended. +AC_DEFUN([_BITCOIN_QT_CHECK_STATIC_LIBS], [ + PKG_CHECK_MODULES([QT_ACCESSIBILITY], [${qt_lib_prefix}AccessibilitySupport${qt_lib_suffix}], [QT_LIBS="$QT_ACCESSIBILITY_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_DEVICEDISCOVERY], [${qt_lib_prefix}DeviceDiscoverySupport${qt_lib_suffix}], [QT_LIBS="$QT_DEVICEDISCOVERY_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_EDID], [${qt_lib_prefix}EdidSupport${qt_lib_suffix}], [QT_LIBS="$QT_EDID_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_EVENTDISPATCHER], [${qt_lib_prefix}EventDispatcherSupport${qt_lib_suffix}], [QT_LIBS="$QT_EVENTDISPATCHER_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_FB], [${qt_lib_prefix}FbSupport${qt_lib_suffix}], [QT_LIBS="$QT_FB_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_FONTDATABASE], [${qt_lib_prefix}FontDatabaseSupport${qt_lib_suffix}], [QT_LIBS="$QT_FONTDATABASE_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_THEME], [${qt_lib_prefix}ThemeSupport${qt_lib_suffix}], [QT_LIBS="$QT_THEME_LIBS $QT_LIBS"]) + if test "x$TARGET_OS" = xlinux; then + PKG_CHECK_MODULES([QT_INPUT], [${qt_lib_prefix}XcbQpa], [QT_LIBS="$QT_INPUT_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_SERVICE], [${qt_lib_prefix}ServiceSupport], [QT_LIBS="$QT_SERVICE_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_XCBQPA], [${qt_lib_prefix}XcbQpa], [QT_LIBS="$QT_XCBQPA_LIBS $QT_LIBS"]) + elif test "x$TARGET_OS" = xdarwin; then + PKG_CHECK_MODULES([QT_CLIPBOARD], [${qt_lib_prefix}ClipboardSupport${qt_lib_suffix}], [QT_LIBS="$QT_CLIPBOARD_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_GRAPHICS], [${qt_lib_prefix}GraphicsSupport${qt_lib_suffix}], [QT_LIBS="$QT_GRAPHICS_LIBS $QT_LIBS"]) + PKG_CHECK_MODULES([QT_SERVICE], [${qt_lib_prefix}ServiceSupport${qt_lib_suffix}], [QT_LIBS="$QT_SERVICE_LIBS $QT_LIBS"]) + elif test "x$TARGET_OS" = xwindows; then + PKG_CHECK_MODULES([QT_WINDOWSUIAUTOMATION], [${qt_lib_prefix}WindowsUIAutomationSupport${qt_lib_suffix}], [QT_LIBS="$QT_WINDOWSUIAUTOMATION_LIBS $QT_LIBS"]) + elif test "x$TARGET_OS" = xandroid; then + PKG_CHECK_MODULES([QT_EGL], [${qt_lib_prefix}EglSupport], [QT_LIBS="$QT_EGL_LIBS $QT_LIBS"]) + fi ]) dnl Internal. Find Qt libraries using pkg-config. -dnl Inputs: bitcoin_qt_want_version (from --with-gui=). The version to check -dnl first. -dnl Inputs: $1: If bitcoin_qt_want_version is "auto", check for this version -dnl first. +dnl +dnl _BITCOIN_QT_FIND_LIBS +dnl --------------------- +dnl dnl Outputs: All necessary QT_* variables are set. dnl Outputs: have_qt_test and have_qt_dbus are set (if applicable) to yes|no. -AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITH_PKGCONFIG],[ - m4_ifdef([PKG_CHECK_MODULES],[ - QT_LIB_PREFIX=Qt5 - qt5_modules="Qt5Core Qt5Gui Qt5Network Qt5Widgets" - BITCOIN_QT_CHECK([ - PKG_CHECK_MODULES([QT5], [$qt5_modules], [QT_INCLUDES="$QT5_CFLAGS"; QT_LIBS="$QT5_LIBS" have_qt=yes],[have_qt=no]) - - if test "x$have_qt" != xyes; then - have_qt=no - BITCOIN_QT_FAIL([Qt dependencies not found]) - fi - ]) - BITCOIN_QT_CHECK([ - PKG_CHECK_MODULES([QT_TEST], [${QT_LIB_PREFIX}Test], [QT_TEST_INCLUDES="$QT_TEST_CFLAGS"; have_qt_test=yes], [have_qt_test=no]) - if test "x$use_dbus" != xno; then - PKG_CHECK_MODULES([QT_DBUS], [${QT_LIB_PREFIX}DBus], [QT_DBUS_INCLUDES="$QT_DBUS_CFLAGS"; have_qt_dbus=yes], [have_qt_dbus=no]) - fi - ]) +AC_DEFUN([_BITCOIN_QT_FIND_LIBS],[ + BITCOIN_QT_CHECK([ + PKG_CHECK_MODULES([QT_CORE], [${qt_lib_prefix}Core${qt_lib_suffix} $qt_version], [QT_INCLUDES="$QT_CORE_CFLAGS $QT_INCLUDES" QT_LIBS="$QT_CORE_LIBS $QT_LIBS"], + [BITCOIN_QT_FAIL([${qt_lib_prefix}Core${qt_lib_suffix} $qt_version not found])]) ]) - true; dnl -]) - -dnl Internal. Find Qt libraries without using pkg-config. Version is deduced -dnl from the discovered headers. -dnl Inputs: bitcoin_qt_want_version (from --with-gui=). The version to use. -dnl If "auto", the version will be discovered by _BITCOIN_QT_CHECK_QT5. -dnl Outputs: All necessary QT_* variables are set. -dnl Outputs: have_qt_test and have_qt_dbus are set (if applicable) to yes|no. -AC_DEFUN([_BITCOIN_QT_FIND_LIBS_WITHOUT_PKGCONFIG],[ - TEMP_CPPFLAGS="$CPPFLAGS" - TEMP_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$PIC_FLAGS $CXXFLAGS" - TEMP_LIBS="$LIBS" BITCOIN_QT_CHECK([ - if test "x$qt_include_path" != x; then - QT_INCLUDES="-I$qt_include_path -I$qt_include_path/QtCore -I$qt_include_path/QtGui -I$qt_include_path/QtWidgets -I$qt_include_path/QtNetwork -I$qt_include_path/QtTest -I$qt_include_path/QtDBus" - CPPFLAGS="$QT_INCLUDES $CPPFLAGS" - fi + PKG_CHECK_MODULES([QT_GUI], [${qt_lib_prefix}Gui${qt_lib_suffix} $qt_version], [QT_INCLUDES="$QT_GUI_CFLAGS $QT_INCLUDES" QT_LIBS="$QT_GUI_LIBS $QT_LIBS"], + [BITCOIN_QT_FAIL([${qt_lib_prefix}Gui${qt_lib_suffix} $qt_version not found])]) ]) - - BITCOIN_QT_CHECK([AC_CHECK_HEADER([QtPlugin],,BITCOIN_QT_FAIL(QtCore headers missing))]) - BITCOIN_QT_CHECK([AC_CHECK_HEADER([QApplication],, BITCOIN_QT_FAIL(QtGui headers missing))]) - BITCOIN_QT_CHECK([AC_CHECK_HEADER([QLocalSocket],, BITCOIN_QT_FAIL(QtNetwork headers missing))]) - BITCOIN_QT_CHECK([ - if test "x$bitcoin_qt_want_version" = xauto; then - _BITCOIN_QT_CHECK_QT5 - _BITCOIN_QT_CHECK_QT58 - fi - QT_LIB_PREFIX=Qt5 + PKG_CHECK_MODULES([QT_WIDGETS], [${qt_lib_prefix}Widgets${qt_lib_suffix} $qt_version], [QT_INCLUDES="$QT_WIDGETS_CFLAGS $QT_INCLUDES" QT_LIBS="$QT_WIDGETS_LIBS $QT_LIBS"], + [BITCOIN_QT_FAIL([${qt_lib_prefix}Widgets${qt_lib_suffix} $qt_version not found])]) ]) - BITCOIN_QT_CHECK([ - LIBS= - if test "x$qt_lib_path" != x; then - LIBS="$LIBS -L$qt_lib_path" - fi - - if test "x$TARGET_OS" = xwindows; then - AC_CHECK_LIB([imm32], [main],, BITCOIN_QT_FAIL(libimm32 not found)) - fi + PKG_CHECK_MODULES([QT_NETWORK], [${qt_lib_prefix}Network${qt_lib_suffix} $qt_version], [QT_INCLUDES="$QT_NETWORK_CFLAGS $QT_INCLUDES" QT_LIBS="$QT_NETWORK_LIBS $QT_LIBS"], + [BITCOIN_QT_FAIL([${qt_lib_prefix}Network${qt_lib_suffix} $qt_version not found])]) ]) - BITCOIN_QT_CHECK(AC_CHECK_LIB([z] ,[main],,AC_MSG_WARN([zlib not found. Assuming qt has it built-in]))) - if test x$bitcoin_cv_qt58 = xno; then - BITCOIN_QT_CHECK(AC_SEARCH_LIBS([png_error] ,[qtpng png],,AC_MSG_WARN([libpng not found. Assuming qt has it built-in]))) - BITCOIN_QT_CHECK(AC_SEARCH_LIBS([pcre16_exec], [qtpcre pcre16],,AC_MSG_WARN([libpcre16 not found. Assuming qt has it built-in]))) - else - BITCOIN_QT_CHECK(AC_SEARCH_LIBS([png_error] ,[qtlibpng png],,AC_MSG_WARN([libpng not found. Assuming qt has it built-in]))) - BITCOIN_QT_CHECK(AC_SEARCH_LIBS([pcre2_match_16], [qtpcre2 libqtpcre2],,AC_MSG_WARN([libqtpcre2 not found. Assuming qt has it built-in]))) - fi - BITCOIN_QT_CHECK(AC_SEARCH_LIBS([hb_ot_tags_from_script] ,[qtharfbuzzng qtharfbuzz harfbuzz],,AC_MSG_WARN([libharfbuzz not found. Assuming qt has it built-in or support is disabled]))) - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Core] ,[main],,BITCOIN_QT_FAIL(lib${QT_LIB_PREFIX}Core not found))) - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Gui] ,[main],,BITCOIN_QT_FAIL(lib${QT_LIB_PREFIX}Gui not found))) - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Network],[main],,BITCOIN_QT_FAIL(lib${QT_LIB_PREFIX}Network not found))) - BITCOIN_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Widgets],[main],,BITCOIN_QT_FAIL(lib${QT_LIB_PREFIX}Widgets not found))) - QT_LIBS="$LIBS" - LIBS="$TEMP_LIBS" - BITCOIN_QT_CHECK([ - LIBS= - if test "x$qt_lib_path" != x; then - LIBS="-L$qt_lib_path" - fi - AC_CHECK_LIB([${QT_LIB_PREFIX}Test], [main],, have_qt_test=no) - AC_CHECK_HEADER([QTest],, have_qt_test=no) - QT_TEST_LIBS="$LIBS" + PKG_CHECK_MODULES([QT_TEST], [${qt_lib_prefix}Test${qt_lib_suffix} $qt_version], [QT_TEST_INCLUDES="$QT_TEST_CFLAGS"; have_qt_test=yes], [have_qt_test=no]) if test "x$use_dbus" != xno; then - LIBS= - if test "x$qt_lib_path" != x; then - LIBS="-L$qt_lib_path" - fi - AC_CHECK_LIB([${QT_LIB_PREFIX}DBus], [main],, have_qt_dbus=no) - AC_CHECK_HEADER([QtDBus],, have_qt_dbus=no) - QT_DBUS_LIBS="$LIBS" + PKG_CHECK_MODULES([QT_DBUS], [${qt_lib_prefix}DBus $qt_version], [QT_DBUS_INCLUDES="$QT_DBUS_CFLAGS"; have_qt_dbus=yes], [have_qt_dbus=no]) fi ]) - CPPFLAGS="$TEMP_CPPFLAGS" - CXXFLAGS="$TEMP_CXXFLAGS" - LIBS="$TEMP_LIBS" ]) diff --git a/depends/Makefile b/depends/Makefile index d885113c02..1c8f815a7b 100644 --- a/depends/Makefile +++ b/depends/Makefile @@ -1,11 +1,46 @@ .NOTPARALLEL : +# Pattern rule to print variables, e.g. make print-top_srcdir +print-%: FORCE + @echo '$*'='$($*)' + +# When invoking a sub-make, keep only the command line variable definitions +# matching the pattern in the filter function. +# +# e.g. invoking: +# $ make A=1 C=1 print-MAKEOVERRIDES print-MAKEFLAGS +# +# with the following in the Makefile: +# MAKEOVERRIDES := $(filter A=% B=%,$(MAKEOVERRIDES)) +# +# will print: +# MAKEOVERRIDES = A=1 +# MAKEFLAGS = -- A=1 +# +# this is because as the GNU make manual says: +# The command line variable definitions really appear in the variable +# MAKEOVERRIDES, and MAKEFLAGS contains a reference to this variable. +# +# and since the GNU make manual also says: +# variables defined on the command line are passed to the sub-make through +# MAKEFLAGS +# +# this means that sub-makes will be invoked as if: +# $(MAKE) A=1 blah blah +MAKEOVERRIDES := $(filter V=%,$(MAKEOVERRIDES)) SOURCES_PATH ?= $(BASEDIR)/sources +WORK_PATH = $(BASEDIR)/work BASE_CACHE ?= $(BASEDIR)/built SDK_PATH ?= $(BASEDIR)/SDKs NO_QT ?= +NO_QR ?= +NO_BDB ?= +NO_SQLITE ?= NO_WALLET ?= +NO_ZMQ ?= NO_UPNP ?= +NO_NATPMP ?= +MULTIPROCESS ?= FALLBACK_DOWNLOAD_PATH ?= https://bitcoincore.org/depends-sources BUILD = $(shell ./config.guess) @@ -21,7 +56,6 @@ BUILD_ID_SALT ?= salt host:=$(BUILD) ifneq ($(HOST),) host:=$(HOST) -host_toolchain:=$(HOST)- endif ifneq ($(DEBUG),) @@ -30,9 +64,9 @@ else release_type=release endif -base_build_dir=$(BASEDIR)/work/build -base_staging_dir=$(BASEDIR)/work/staging -base_download_dir=$(BASEDIR)/work/download +base_build_dir=$(WORK_PATH)/build +base_staging_dir=$(WORK_PATH)/staging +base_download_dir=$(WORK_PATH)/download canonical_host:=$(shell ./config.sub $(HOST)) build:=$(shell ./config.sub $(BUILD)) @@ -52,6 +86,11 @@ full_host_os:=$(subst $(host_arch)-$(host_vendor)-,,$(canonical_host)) host_os:=$(findstring linux,$(full_host_os)) host_os+=$(findstring darwin,$(full_host_os)) host_os+=$(findstring mingw32,$(full_host_os)) + +ifeq (android,$(findstring android,$(full_host_os))) +host_os:=android +endif + host_os:=$(strip $(host_os)) ifeq ($(host_os),) host_os=$(full_host_os) @@ -75,40 +114,71 @@ include builders/$(build_os).mk include builders/default.mk include packages/packages.mk -build_id_string:=$(BUILD_ID_SALT) -build_id_string+=$(shell $(build_CC) --version 2>/dev/null) -build_id_string+=$(shell $(build_AR) --version 2>/dev/null) -build_id_string+=$(shell $(build_CXX) --version 2>/dev/null) -build_id_string+=$(shell $(build_RANLIB) --version 2>/dev/null) -build_id_string+=$(shell $(build_STRIP) --version 2>/dev/null) - -$(host_arch)_$(host_os)_id_string:=$(HOST_ID_SALT) -$(host_arch)_$(host_os)_id_string+=$(shell $(host_CC) --version 2>/dev/null) -$(host_arch)_$(host_os)_id_string+=$(shell $(host_AR) --version 2>/dev/null) -$(host_arch)_$(host_os)_id_string+=$(shell $(host_CXX) --version 2>/dev/null) -$(host_arch)_$(host_os)_id_string+=$(shell $(host_RANLIB) --version 2>/dev/null) -$(host_arch)_$(host_os)_id_string+=$(shell $(host_STRIP) --version 2>/dev/null) - -qt_packages_$(NO_QT) = $(qt_packages) $(qt_$(host_os)_packages) $(qt_$(host_arch)_$(host_os)_packages) -wallet_packages_$(NO_WALLET) = $(wallet_packages) +# Previously, we directly invoked the well-known programs using $(shell ...) +# to construct build_id_string. However, that was problematic because: +# +# 1. When invoking a shell, GNU Make special-cases exit code 127 (command not +# found) by not capturing the output but instead passing it through. This is +# not done for any other exit code. +# +# 2. Characters like '#' (from these programs' output) would end up in make +# variables like build_id_string, which would be wrongly interpreted by make +# when these variables were used. +# +# Therefore, we should avoid having arbitrary strings in make variables where +# possible. The gen_id script used here hashes the output to construct a +# "make-safe" id. +# +# Also note that these lines need to be: +# +# 1. After including {hosts,builders}/*.mk, since they rely on the tool +# variables (e.g. build_CC, host_STRIP, etc.) to be set. +# +# 2. Before including packages/*.mk (excluding packages/packages.mk), since +# they rely on the build_id variables +# +build_id:=$(shell env CC='$(build_CC)' CXX='$(build_CXX)' AR='$(build_AR)' RANLIB='$(build_RANLIB)' STRIP='$(build_STRIP)' SHA256SUM='$(build_SHA256SUM)' DEBUG='$(DEBUG)' ./gen_id '$(BUILD_ID_SALT)' 'GUIX_ENVIRONMENT=$(realpath $(GUIX_ENVIRONMENT))') +$(host_arch)_$(host_os)_id:=$(shell env CC='$(host_CC)' CXX='$(host_CXX)' AR='$(host_AR)' RANLIB='$(host_RANLIB)' STRIP='$(host_STRIP)' SHA256SUM='$(build_SHA256SUM)' DEBUG='$(DEBUG)' ./gen_id '$(HOST_ID_SALT)' 'GUIX_ENVIRONMENT=$(realpath $(GUIX_ENVIRONMENT))') + +qrencode_packages_$(NO_QR) = $(qrencode_packages) + +qt_packages_$(NO_QT) = $(qt_packages) $(qt_$(host_os)_packages) $(qt_$(host_arch)_$(host_os)_packages) $(qrencode_packages_) + +bdb_packages_$(NO_BDB) = $(bdb_packages) +sqlite_packages_$(NO_SQLITE) = $(sqlite_packages) +wallet_packages_$(NO_WALLET) = $(bdb_packages_) $(sqlite_packages_) + upnp_packages_$(NO_UPNP) = $(upnp_packages) +natpmp_packages_$(NO_NATPMP) = $(natpmp_packages) + +zmq_packages_$(NO_ZMQ) = $(zmq_packages) +multiprocess_packages_$(MULTIPROCESS) = $(multiprocess_packages) -packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(qt_packages_) $(wallet_packages_) $(upnp_packages_) +packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(qt_packages_) $(wallet_packages_) $(upnp_packages_) $(natpmp_packages_) native_packages += $($(host_arch)_$(host_os)_native_packages) $($(host_os)_native_packages) ifneq ($(qt_packages_),) native_packages += $(qt_native_packages) endif +ifneq ($(zmq_packages_),) +packages += $(zmq_packages) +endif + +ifeq ($(multiprocess_packages_),) +packages += $(multiprocess_packages) +native_packages += $(multiprocess_native_packages) +endif + all_packages = $(packages) $(native_packages) meta_depends = Makefile funcs.mk builders/default.mk hosts/default.mk hosts/$(host_os).mk builders/$(build_os).mk +$(host_arch)_$(host_os)_native_binutils?=$($(host_os)_native_binutils) $(host_arch)_$(host_os)_native_toolchain?=$($(host_os)_native_toolchain) include funcs.mk -toolchain_path=$($($(host_arch)_$(host_os)_native_toolchain)_prefixbin) final_build_id_long+=$(shell $(build_SHA256SUM) config.site.in) final_build_id+=$(shell echo -n "$(final_build_id_long)" | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH)) $(host_prefix)/.stamp_$(final_build_id): $(native_packages) $(packages) @@ -119,24 +189,55 @@ $(host_prefix)/.stamp_$(final_build_id): $(native_packages) $(packages) $(AT)cd $(@D); $(foreach package,$^, tar xf $($(package)_cached); ) $(AT)touch $@ +# $PATH is not preserved between ./configure and make by convention. Its +# modification and overriding at ./configure time is (as I understand it) +# supposed to be captured by the AC_{PROG_{,OBJ}CXX,PATH_{PROG,TOOL}} macros, +# which will expand the program names to their full absolute paths. The notable +# exception is command line overriding: ./configure CC=clang, which skips the +# program name expansion step, and works because the user implicitly indicates +# with CC=clang that clang will be available in $PATH at all times, and is most +# likely part of the user's system. +# +# Therefore, when we "seed the autoconf cache"/"override well-known program +# vars" by setting AR= in our config.site, either one of two things needs +# to be true for the build system to work correctly: +# +# 1. If we refer to the program by name (e.g. AR=riscv64-gnu-linux-ar), the +# tool needs to be available in $PATH at all times. +# +# 2. If the tool is _**not**_ expected to be available in $PATH at all times +# (such as is the case for our native_cctools binutils tools), it needs to +# be referred to by its absolute path, such as would be output by the +# AC_PATH_{PROG,TOOL} macros. +# +# Minor note: it is also okay to refer to tools by their absolute path even if +# we expect them to be available in $PATH at all times, more specificity does +# not hurt. $(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_build_id) $(AT)@mkdir -p $(@D) $(AT)sed -e 's|@HOST@|$(host)|' \ - -e 's|@CC@|$(toolchain_path)$(host_CC)|' \ - -e 's|@CXX@|$(toolchain_path)$(host_CXX)|' \ - -e 's|@AR@|$(toolchain_path)$(host_AR)|' \ - -e 's|@RANLIB@|$(toolchain_path)$(host_RANLIB)|' \ - -e 's|@NM@|$(toolchain_path)$(host_NM)|' \ - -e 's|@STRIP@|$(toolchain_path)$(host_STRIP)|' \ + -e 's|@CC@|$(host_CC)|' \ + -e 's|@CXX@|$(host_CXX)|' \ + -e 's|@AR@|$(host_AR)|' \ + -e 's|@RANLIB@|$(host_RANLIB)|' \ + -e 's|@NM@|$(host_NM)|' \ + -e 's|@STRIP@|$(host_STRIP)|' \ -e 's|@build_os@|$(build_os)|' \ -e 's|@host_os@|$(host_os)|' \ -e 's|@CFLAGS@|$(strip $(host_CFLAGS) $(host_$(release_type)_CFLAGS))|' \ -e 's|@CXXFLAGS@|$(strip $(host_CXXFLAGS) $(host_$(release_type)_CXXFLAGS))|' \ -e 's|@CPPFLAGS@|$(strip $(host_CPPFLAGS) $(host_$(release_type)_CPPFLAGS))|' \ -e 's|@LDFLAGS@|$(strip $(host_LDFLAGS) $(host_$(release_type)_LDFLAGS))|' \ + -e 's|@allow_host_packages@|$(ALLOW_HOST_PACKAGES)|' \ -e 's|@no_qt@|$(NO_QT)|' \ + -e 's|@no_qr@|$(NO_QR)|' \ + -e 's|@no_zmq@|$(NO_ZMQ)|' \ -e 's|@no_wallet@|$(NO_WALLET)|' \ + -e 's|@no_bdb@|$(NO_BDB)|' \ + -e 's|@no_sqlite@|$(NO_SQLITE)|' \ -e 's|@no_upnp@|$(NO_UPNP)|' \ + -e 's|@no_natpmp@|$(NO_NATPMP)|' \ + -e 's|@multiprocess@|$(MULTIPROCESS)|' \ -e 's|@debug@|$(DEBUG)|' \ $< > $@ $(AT)touch $@ @@ -165,18 +266,26 @@ $(host_prefix)/share/config.site: check-packages check-packages: check-sources +clean-all: clean + @rm -rf $(SOURCES_PATH) x86_64* i686* mips* arm* aarch64* powerpc* riscv32* riscv64* s390x* + +clean: + @rm -rf $(WORK_PATH) $(BASE_CACHE) $(BUILD) + install: check-packages $(host_prefix)/share/config.site download-one: check-sources $(all_sources) download-osx: - @$(MAKE) -s HOST=x86_64-apple-darwin11 download-one + @$(MAKE) -s HOST=x86_64-apple-darwin download-one download-linux: @$(MAKE) -s HOST=x86_64-unknown-linux-gnu download-one download-win: @$(MAKE) -s HOST=x86_64-w64-mingw32 download-one download: download-osx download-linux download-win +$(foreach package,$(all_packages),$(eval $(call ext_add_stages,$(package)))) -.PHONY: install cached download-one download-osx download-linux download-win download check-packages check-sources +.PHONY: install cached clean clean-all download-one download-osx download-linux download-win download check-packages check-sources +.PHONY: FORCE diff --git a/depends/builders/darwin.mk b/depends/builders/darwin.mk index 7990b872fd..001c928424 100644 --- a/depends/builders/darwin.mk +++ b/depends/builders/darwin.mk @@ -1,17 +1,17 @@ -build_darwin_CC: = $(shell xcrun -f clang) -build_darwin_CXX: = $(shell xcrun -f clang++) -build_darwin_AR: = $(shell xcrun -f ar) -build_darwin_RANLIB: = $(shell xcrun -f ranlib) -build_darwin_STRIP: = $(shell xcrun -f strip) -build_darwin_OTOOL: = $(shell xcrun -f otool) -build_darwin_NM: = $(shell xcrun -f nm) +build_darwin_CC:=$(shell xcrun -f clang) -isysroot$(shell xcrun --show-sdk-path) +build_darwin_CXX:=$(shell xcrun -f clang++) -isysroot$(shell xcrun --show-sdk-path) +build_darwin_AR:=$(shell xcrun -f ar) +build_darwin_RANLIB:=$(shell xcrun -f ranlib) +build_darwin_STRIP:=$(shell xcrun -f strip) +build_darwin_OTOOL:=$(shell xcrun -f otool) +build_darwin_NM:=$(shell xcrun -f nm) build_darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool) -build_darwin_SHA256SUM = shasum -a 256 -build_darwin_DOWNLOAD = curl --location --fail --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -o +build_darwin_SHA256SUM=shasum -a 256 +build_darwin_DOWNLOAD=curl --location --fail --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -o #darwin host on darwin builder. overrides darwin host preferences. -darwin_CC=$(shell xcrun -f clang) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(shell xcrun --show-sdk-path) -darwin_CXX:=$(shell xcrun -f clang++) -mmacosx-version-min=$(OSX_MIN_VERSION) -stdlib=libc++ --sysroot $(shell xcrun --show-sdk-path) +darwin_CC=$(shell xcrun -f clang) -mmacosx-version-min=$(OSX_MIN_VERSION) -isysroot$(shell xcrun --show-sdk-path) +darwin_CXX:=$(shell xcrun -f clang++) -mmacosx-version-min=$(OSX_MIN_VERSION) -stdlib=libc++ -isysroot$(shell xcrun --show-sdk-path) darwin_AR:=$(shell xcrun -f ar) darwin_RANLIB:=$(shell xcrun -f ranlib) darwin_STRIP:=$(shell xcrun -f strip) @@ -19,4 +19,5 @@ darwin_LIBTOOL:=$(shell xcrun -f libtool) darwin_OTOOL:=$(shell xcrun -f otool) darwin_NM:=$(shell xcrun -f nm) darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool) +darwin_native_binutils= darwin_native_toolchain= diff --git a/depends/funcs.mk b/depends/funcs.mk index fabbb25356..34a030fab7 100644 --- a/depends/funcs.mk +++ b/depends/funcs.mk @@ -1,17 +1,23 @@ define int_vars #Set defaults for vars which may be overridden per-package -$(1)_cc=$($($(1)_type)_CC) -$(1)_cxx=$($($(1)_type)_CXX) -$(1)_objc=$($($(1)_type)_OBJC) -$(1)_objcxx=$($($(1)_type)_OBJCXX) -$(1)_ar=$($($(1)_type)_AR) -$(1)_ranlib=$($($(1)_type)_RANLIB) -$(1)_libtool=$($($(1)_type)_LIBTOOL) -$(1)_nm=$($($(1)_type)_NM) -$(1)_cflags=$($($(1)_type)_CFLAGS) $($($(1)_type)_$(release_type)_CFLAGS) -$(1)_cxxflags=$($($(1)_type)_CXXFLAGS) $($($(1)_type)_$(release_type)_CXXFLAGS) -$(1)_ldflags=$($($(1)_type)_LDFLAGS) $($($(1)_type)_$(release_type)_LDFLAGS) -L$($($(1)_type)_prefix)/lib -$(1)_cppflags=$($($(1)_type)_CPPFLAGS) $($($(1)_type)_$(release_type)_CPPFLAGS) -I$($($(1)_type)_prefix)/include +$(1)_cc=$$($$($(1)_type)_CC) +$(1)_cxx=$$($$($(1)_type)_CXX) +$(1)_objc=$$($$($(1)_type)_OBJC) +$(1)_objcxx=$$($$($(1)_type)_OBJCXX) +$(1)_ar=$$($$($(1)_type)_AR) +$(1)_ranlib=$$($$($(1)_type)_RANLIB) +$(1)_libtool=$$($$($(1)_type)_LIBTOOL) +$(1)_nm=$$($$($(1)_type)_NM) +$(1)_cflags=$$($$($(1)_type)_CFLAGS) \ + $$($$($(1)_type)_$$(release_type)_CFLAGS) +$(1)_cxxflags=$$($$($(1)_type)_CXXFLAGS) \ + $$($$($(1)_type)_$$(release_type)_CXXFLAGS) +$(1)_ldflags=$$($$($(1)_type)_LDFLAGS) \ + $$($$($(1)_type)_$$(release_type)_LDFLAGS) \ + -L$$($($(1)_type)_prefix)/lib +$(1)_cppflags=$$($$($(1)_type)_CPPFLAGS) \ + $$($$($(1)_type)_$$(release_type)_CPPFLAGS) \ + -I$$($$($(1)_type)_prefix)/include $(1)_recipe_hash:= endef @@ -41,9 +47,9 @@ endef define int_get_build_id $(eval $(1)_dependencies += $($(1)_$(host_arch)_$(host_os)_dependencies) $($(1)_$(host_os)_dependencies)) -$(eval $(1)_all_dependencies:=$(call int_get_all_dependencies,$(1),$($($(1)_type)_native_toolchain) $($(1)_dependencies))) +$(eval $(1)_all_dependencies:=$(call int_get_all_dependencies,$(1),$($($(1)_type)_native_toolchain) $($($(1)_type)_native_binutils) $($(1)_dependencies))) $(foreach dep,$($(1)_all_dependencies),$(eval $(1)_build_id_deps+=$(dep)-$($(dep)_version)-$($(dep)_recipe_hash))) -$(eval $(1)_build_id_long:=$(1)-$($(1)_version)-$($(1)_recipe_hash)-$(release_type) $($(1)_build_id_deps) $($($(1)_type)_id_string)) +$(eval $(1)_build_id_long:=$(1)-$($(1)_version)-$($(1)_recipe_hash)-$(release_type) $($(1)_build_id_deps) $($($(1)_type)_id)) $(eval $(1)_build_id:=$(shell echo -n "$($(1)_build_id_long)" | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH))) final_build_id_long+=$($(package)_build_id_long) @@ -76,6 +82,7 @@ $(1)_download_path_fixed=$(subst :,\:,$$($(1)_download_path)) #default commands +# The default behavior for tar will try to set ownership when running as uid 0 and may not succeed, --no-same-owner disables this behavior $(1)_fetch_cmds ?= $(call fetch_file,$(1),$(subst \:,:,$$($(1)_download_path_fixed)),$$($(1)_download_file),$($(1)_file_name),$($(1)_sha256_hash)) $(1)_extract_cmds ?= mkdir -p $$($(1)_extract_dir) && echo "$$($(1)_sha256_hash) $$($(1)_source)" > $$($(1)_extract_dir)/.$$($(1)_file_name).hash && $(build_SHA256SUM) -c $$($(1)_extract_dir)/.$$($(1)_file_name).hash && tar --no-same-owner --strip-components=1 -xf $$($(1)_source) $(1)_preprocess_cmds ?= @@ -129,11 +136,17 @@ $(1)_config_env+=$($(1)_config_env_$(host_arch)_$(host_os)) $($(1)_config_env_$( $(1)_config_env+=PKG_CONFIG_LIBDIR=$($($(1)_type)_prefix)/lib/pkgconfig $(1)_config_env+=PKG_CONFIG_PATH=$($($(1)_type)_prefix)/share/pkgconfig +$(1)_config_env+=CMAKE_MODULE_PATH=$($($(1)_type)_prefix)/lib/cmake $(1)_config_env+=PATH=$(build_prefix)/bin:$(PATH) $(1)_build_env+=PATH=$(build_prefix)/bin:$(PATH) $(1)_stage_env+=PATH=$(build_prefix)/bin:$(PATH) -$(1)_autoconf=./configure --host=$($($(1)_type)_host) --disable-dependency-tracking --prefix=$($($(1)_type)_prefix) $$($(1)_config_opts) CC="$$($(1)_cc)" CXX="$$($(1)_cxx)" +# Setting a --build type that differs from --host will explicitly enable +# cross-compilation mode. Note that --build defaults to the output of +# config.guess, which is what we set it too here. This also quells autoconf +# warnings, "If you wanted to set the --build type, don't use --host.", +# when using versions older than 2.70. +$(1)_autoconf=./configure --build=$(BUILD) --host=$($($(1)_type)_host) --prefix=$($($(1)_type)_prefix) $$($(1)_config_opts) CC="$$($(1)_cc)" CXX="$$($(1)_cxx)" ifneq ($($(1)_nm),) $(1)_autoconf += NM="$$($(1)_nm)" endif @@ -155,6 +168,22 @@ endif ifneq ($($(1)_ldflags),) $(1)_autoconf += LDFLAGS="$$($(1)_ldflags)" endif + +$(1)_cmake=env CC="$$($(1)_cc)" \ + CFLAGS="$$($(1)_cppflags) $$($(1)_cflags)" \ + CXX="$$($(1)_cxx)" \ + CXXFLAGS="$$($(1)_cppflags) $$($(1)_cxxflags)" \ + LDFLAGS="$$($(1)_ldflags)" \ + cmake -DCMAKE_INSTALL_PREFIX:PATH="$$($($(1)_type)_prefix)" +ifeq ($($(1)_type),build) +$(1)_cmake += -DCMAKE_INSTALL_RPATH:PATH="$$($($(1)_type)_prefix)/lib" +else +ifneq ($(host),$(build)) +$(1)_cmake += -DCMAKE_SYSTEM_NAME=$($(host_os)_cmake_system) +$(1)_cmake += -DCMAKE_C_COMPILER_TARGET=$(host) +$(1)_cmake += -DCMAKE_CXX_COMPILER_TARGET=$(host) +endif +endif endef define int_add_cmds @@ -170,13 +199,13 @@ $($(1)_extracted): | $($(1)_fetched) $(AT)mkdir -p $$(@D) $(AT)cd $$(@D); $(call $(1)_extract_cmds,$(1)) $(AT)touch $$@ -$($(1)_preprocessed): | $($(1)_dependencies) $($(1)_extracted) +$($(1)_preprocessed): | $($(1)_extracted) $(AT)echo Preprocessing $(1)... $(AT)mkdir -p $$(@D) $($(1)_patch_dir) $(AT)$(foreach patch,$($(1)_patches),cd $(PATCHES_PATH)/$(1); cp $(patch) $($(1)_patch_dir) ;) $(AT)cd $$(@D); $(call $(1)_preprocess_cmds, $(1)) $(AT)touch $$@ -$($(1)_configured): | $($(1)_preprocessed) +$($(1)_configured): | $($(1)_dependencies) $($(1)_preprocessed) $(AT)echo Configuring $(1)... $(AT)rm -rf $(host_prefix); mkdir -p $(host_prefix)/lib; cd $(host_prefix); $(foreach package,$($(1)_all_dependencies), tar --no-same-owner -xf $($(package)_cached); ) $(AT)mkdir -p $$(@D) @@ -199,7 +228,7 @@ $($(1)_postprocessed): | $($(1)_staged) $(AT)touch $$@ $($(1)_cached): | $($(1)_dependencies) $($(1)_postprocessed) $(AT)echo Caching $(1)... - $(AT)cd $$($(1)_staging_dir)/$(host_prefix); find . | sort | tar --no-same-owner --no-recursion -cvzf $$($(1)_staging_dir)/$$(@F) -T - + $(AT)cd $$($(1)_staging_dir)/$(host_prefix); find . | sort | tar --no-recursion -czf $$($(1)_staging_dir)/$$(@F) -T - $(AT)mkdir -p $$(@D) $(AT)rm -rf $$(@D) && mkdir -p $$(@D) $(AT)mv $$($(1)_staging_dir)/$$(@F) $$(@) @@ -213,6 +242,14 @@ $(1): | $($(1)_cached_checksum) endef +stages = fetched extracted preprocessed configured built staged postprocessed cached cached_checksum + +define ext_add_stages +$(foreach stage,$(stages), + $(1)_$(stage): $($(1)_$(stage)) + .PHONY: $(1)_$(stage)) +endef + # These functions create the build targets for each package. They must be # broken down into small steps so that each part is done for all packages # before moving on to the next step. Otherwise, a package's info @@ -242,4 +279,4 @@ $(foreach package,$(all_packages),$(eval $(call int_config_attach_build_config,$ $(foreach package,$(all_packages),$(eval $(call int_add_cmds,$(package)))) #special exception: if a toolchain package exists, all non-native packages depend on it -$(foreach package,$(packages),$(eval $($(package)_unpacked): |$($($(host_arch)_$(host_os)_native_toolchain)_cached) )) +$(foreach package,$(packages),$(eval $($(package)_extracted): |$($($(host_arch)_$(host_os)_native_toolchain)_cached) $($($(host_arch)_$(host_os)_native_binutils)_cached) )) diff --git a/depends/gen_id b/depends/gen_id new file mode 100755 index 0000000000..ac69ca7ee1 --- /dev/null +++ b/depends/gen_id @@ -0,0 +1,74 @@ +#!/usr/bin/env bash + +# Usage: env [ CC=... ] [ CXX=... ] [ AR=... ] [ RANLIB=... ] [ STRIP=... ] \ +# [ DEBUG=... ] ./build-id [ID_SALT]... +# +# Prints to stdout a SHA256 hash representing the current toolset, used by +# depends/Makefile as a build id for caching purposes (detecting when the +# toolset has changed and the cache needs to be invalidated). +# +# If the DEBUG environment variable is non-empty and the system has `tee` +# available in its $PATH, the pre-image to the SHA256 hash will be printed to +# stderr. This is to help developers debug caching issues in depends. + +# This script explicitly does not `set -e` because id determination is mostly +# opportunistic: it is fine that things fail, as long as they fail consistently. + +# Command variables (CC/CXX/AR) which can be blank are invoked with `bash -c`, +# because the "command not found" error message printed by shells often include +# the line number, like so: +# +# ./depends/gen_id: line 43: --version: command not found +# +# By invoking with `bash -c`, we ensure that the line number is always 1 + +( + # Redirect stderr to stdout + exec 2>&1 + + echo "BEGIN ALL" + + # Include any ID salts supplied via command line + echo "BEGIN ID SALT" + echo "$@" + echo "END ID SALT" + + # GCC only prints COLLECT_LTO_WRAPPER when invoked with just "-v", but we want + # the information from "-v -E -" as well, so just include both. + echo "BEGIN CC" + bash -c "${CC} -v" + bash -c "${CC} -v -E -xc -o /dev/null - < /dev/null" + bash -c "${CC} -v -E -xobjective-c -o /dev/null - < /dev/null" + echo "END CC" + + echo "BEGIN CXX" + bash -c "${CXX} -v" + bash -c "${CXX} -v -E -xc++ -o /dev/null - < /dev/null" + bash -c "${CXX} -v -E -xobjective-c++ -o /dev/null - < /dev/null" + echo "END CXX" + + echo "BEGIN AR" + bash -c "${AR} --version" + env | grep '^AR_' + echo "ZERO_AR_DATE=${ZERO_AR_DATE}" + echo "END AR" + + echo "BEGIN RANLIB" + bash -c "${RANLIB} --version" + env | grep '^RANLIB_' + echo "END RANLIB" + + echo "BEGIN STRIP" + bash -c "${STRIP} --version" + env | grep '^STRIP_' + echo "END STRIP" + + echo "END ALL" +) | if [ -n "$DEBUG" ] && command -v tee > /dev/null 2>&1; then + # When debugging and `tee` is available, output the preimage to stderr + # in addition to passing through stdin to stdout + tee >(cat 1>&2) + else + # Otherwise, passthrough stdin to stdout + cat + fi | ${SHA256SUM} - | cut -d' ' -f1 diff --git a/depends/hosts/darwin.mk b/depends/hosts/darwin.mk index 1bc4fb8189..ea92bb7793 100644 --- a/depends/hosts/darwin.mk +++ b/depends/hosts/darwin.mk @@ -1,8 +1,113 @@ -OSX_MIN_VERSION=10.12 -OSX_SDK_VERSION=10.14 -OSX_SDK=$(SDK_PATH)/MacOSX$(OSX_SDK_VERSION).sdk -darwin_CC=clang -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -darwin_CXX=clang++ -target $(host) -mmacosx-version-min=$(OSX_MIN_VERSION) --sysroot $(OSX_SDK) -stdlib=libc++ +OSX_MIN_VERSION=10.15 +OSX_SDK_VERSION=10.15.6 +XCODE_VERSION=12.1 +XCODE_BUILD_ID=12A7403 +LD64_VERSION=609 + +OSX_SDK=$(SDK_PATH)/Xcode-$(XCODE_VERSION)-$(XCODE_BUILD_ID)-extracted-SDK-with-libcxx-headers + +darwin_native_binutils=native_cctools + +ifeq ($(strip $(FORCE_USE_SYSTEM_CLANG)),) +# FORCE_USE_SYSTEM_CLANG is empty, so we use our depends-managed, pinned clang +# from llvm.org + +# Clang is a dependency of native_cctools when FORCE_USE_SYSTEM_CLANG is empty +darwin_native_toolchain=native_cctools + +clang_prog=$(build_prefix)/bin/clang +clangxx_prog=$(clang_prog)++ + +clang_resource_dir=$(build_prefix)/lib/clang/$(native_clang_version) +else +# FORCE_USE_SYSTEM_CLANG is non-empty, so we use the clang from the user's +# system + +darwin_native_toolchain= + +# We can't just use $(shell command -v clang) because GNU Make handles builtins +# in a special way and doesn't know that `command` is a POSIX-standard builtin +# prior to 1af314465e5dfe3e8baa839a32a72e83c04f26ef, first released in v4.2.90. +# At the time of writing, GNU Make v4.2.1 is still being used in supported +# distro releases. +# +# Source: https://lists.gnu.org/archive/html/bug-make/2017-11/msg00017.html +clang_prog=$(shell $(SHELL) $(.SHELLFLAGS) "command -v clang") +clangxx_prog=$(shell $(SHELL) $(.SHELLFLAGS) "command -v clang++") + +clang_resource_dir=$(shell clang -print-resource-dir) +endif + +cctools_TOOLS=AR RANLIB STRIP NM LIBTOOL OTOOL INSTALL_NAME_TOOL + +# Make-only lowercase function +lc = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$1)))))))))))))))))))))))))) + +# For well-known tools provided by cctools, make sure that their well-known +# variable is set to the full path of the tool, just like how AC_PATH_{TOO,PROG} +# would. +$(foreach TOOL,$(cctools_TOOLS),$(eval darwin_$(TOOL) = $$(build_prefix)/bin/$$(host)-$(call lc,$(TOOL)))) + +# Flag explanations: +# +# -mlinker-version +# +# Ensures that modern linker features are enabled. See here for more +# details: https://github.com/bitcoin/bitcoin/pull/19407. +# +# -B$(build_prefix)/bin +# +# Explicitly point to our binaries (e.g. cctools) so that they are +# ensured to be found and preferred over other possibilities. +# +# -stdlib=libc++ -stdlib++-isystem$(OSX_SDK)/usr/include/c++/v1 +# +# Forces clang to use the libc++ headers from our SDK and completely +# forget about the libc++ headers from the standard directories +# +# -Xclang -*system \ +# -Xclang -*system \ +# -Xclang -*system ... +# +# Adds path_a, path_b, and path_c to the bottom of clang's list of +# include search paths. This is used to explicitly specify the list of +# system include search paths and its ordering, rather than rely on +# clang's autodetection routine. This routine has been shown to: +# 1. Fail to pickup libc++ headers in $SYSROOT/usr/include/c++/v1 +# when clang was built manually (see: https://github.com/bitcoin/bitcoin/pull/17919#issuecomment-656785034) +# 2. Fail to pickup C headers in $SYSROOT/usr/include when +# C_INCLUDE_DIRS was specified at configure time (see: https://gist.github.com/dongcarl/5cdc6990b7599e8a5bf6d2a9c70e82f9) +# +# Talking directly to cc1 with -Xclang here grants us access to specify +# more granular categories for these system include search paths, and we +# can use the correct categories that these search paths would have been +# placed in if the autodetection routine had worked correctly. (see: +# https://gist.github.com/dongcarl/5cdc6990b7599e8a5bf6d2a9c70e82f9#the-treatment) +# +# Furthermore, it places these search paths after any "non-Xclang" +# specified search paths. This prevents any additional clang options or +# environment variables from coming after or in between these system +# include search paths, as that would be wrong in general but would also +# break #include_next's. +# +darwin_CC=env -u C_INCLUDE_PATH -u CPLUS_INCLUDE_PATH \ + -u OBJC_INCLUDE_PATH -u OBJCPLUS_INCLUDE_PATH -u CPATH \ + -u LIBRARY_PATH \ + $(clang_prog) --target=$(host) -mmacosx-version-min=$(OSX_MIN_VERSION) \ + -B$(build_prefix)/bin -mlinker-version=$(LD64_VERSION) \ + -isysroot$(OSX_SDK) \ + -Xclang -internal-externc-isystem$(clang_resource_dir)/include \ + -Xclang -internal-externc-isystem$(OSX_SDK)/usr/include +darwin_CXX=env -u C_INCLUDE_PATH -u CPLUS_INCLUDE_PATH \ + -u OBJC_INCLUDE_PATH -u OBJCPLUS_INCLUDE_PATH -u CPATH \ + -u LIBRARY_PATH \ + $(clangxx_prog) --target=$(host) -mmacosx-version-min=$(OSX_MIN_VERSION) \ + -B$(build_prefix)/bin -mlinker-version=$(LD64_VERSION) \ + -isysroot$(OSX_SDK) \ + -stdlib=libc++ \ + -stdlib++-isystem$(OSX_SDK)/usr/include/c++/v1 \ + -Xclang -internal-externc-isystem$(clang_resource_dir)/include \ + -Xclang -internal-externc-isystem$(OSX_SDK)/usr/include darwin_CFLAGS=-pipe darwin_CXXFLAGS=$(darwin_CFLAGS) @@ -13,4 +118,4 @@ darwin_release_CXXFLAGS=$(darwin_release_CFLAGS) darwin_debug_CFLAGS=-O1 darwin_debug_CXXFLAGS=$(darwin_debug_CFLAGS) -darwin_native_toolchain=native_cctools +darwin_cmake_system=Darwin diff --git a/depends/hosts/default.mk b/depends/hosts/default.mk index 6f60d6b3fd..258619a9d0 100644 --- a/depends/hosts/default.mk +++ b/depends/hosts/default.mk @@ -1,3 +1,7 @@ +ifneq ($(host),$(build)) +host_toolchain:=$(host)- +endif + default_host_CC = $(host_toolchain)gcc default_host_CXX = $(host_toolchain)g++ default_host_AR = $(host_toolchain)ar @@ -9,9 +13,18 @@ default_host_OTOOL = $(host_toolchain)otool default_host_NM = $(host_toolchain)nm define add_host_tool_func +ifneq ($(filter $(origin $1),undefined default),) +# Do not consider the well-known var $1 if it is undefined or is taking a value +# that is predefined by "make" (e.g. the make variable "CC" has a predefined +# value of "cc") $(host_os)_$1?=$$(default_host_$1) $(host_arch)_$(host_os)_$1?=$$($(host_os)_$1) $(host_arch)_$(host_os)_$(release_type)_$1?=$$($(host_os)_$1) +else +$(host_os)_$1=$(or $($1),$($(host_os)_$1),$(default_host_$1)) +$(host_arch)_$(host_os)_$1=$(or $($1),$($(host_arch)_$(host_os)_$1),$$($(host_os)_$1)) +$(host_arch)_$(host_os)_$(release_type)_$1=$(or $($1),$($(host_arch)_$(host_os)_$(release_type)_$1),$$($(host_os)_$1)) +endif host_$1=$$($(host_arch)_$(host_os)_$1) endef diff --git a/depends/hosts/mingw32.mk b/depends/hosts/mingw32.mk index 4260c9a902..be5fec570c 100644 --- a/depends/hosts/mingw32.mk +++ b/depends/hosts/mingw32.mk @@ -9,4 +9,4 @@ mingw32_debug_CXXFLAGS=$(mingw32_debug_CFLAGS) mingw32_debug_CPPFLAGS=-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC -mingw_CC= +mingw_cmake_system=Windows diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk index fe112a84f8..b2e6800d0e 100644 --- a/depends/packages/boost.mk +++ b/depends/packages/boost.mk @@ -1,45 +1,46 @@ package=boost -$(package)_version=1_70_0 -$(package)_download_path=https://dl.bintray.com/boostorg/release/1.70.0/source/ -$(package)_file_name=$(package)_$($(package)_version).tar.bz2 -$(package)_sha256_hash=430ae8354789de4fd19ee52f3b1f739e1fba576f0aded0897c3c2bc00fb38778 +$(package)_version=1_77_0 +$(package)_download_path=https://boostorg.jfrog.io/artifactory/main/release/$(subst _,.,$($(package)_version))/source/ +$(package)_file_name=boost_$($(package)_version).tar.bz2 +$(package)_sha256_hash=fc9f85fc030e233142908241af7a846e60630aa7388de9a5fafb1f3a26840854 +$(package)_dependencies=native_b2 define $(package)_set_vars $(package)_config_opts_release=variant=release $(package)_config_opts_debug=variant=debug $(package)_config_opts=--layout=tagged --build-type=complete --user-config=user-config.jam -$(package)_config_opts+=threading=multi link=static -sNO_BZIP2=1 -sNO_ZLIB=1 -$(package)_config_opts_linux=threadapi=pthread runtime-link=shared -$(package)_config_opts_darwin=--toolset=clang-darwin runtime-link=shared -$(package)_config_opts_mingw32=binary-format=pe target-os=windows threadapi=win32 runtime-link=static -$(package)_config_opts_x86_64_mingw32=address-model=64 -$(package)_config_opts_i686_mingw32=address-model=32 -$(package)_config_opts_i686_linux=address-model=32 architecture=x86 -$(package)_config_opts_i686_android=address-model=32 -$(package)_config_opts_aarch64_android=address-model=64 -$(package)_config_opts_x86_64_android=address-model=64 -$(package)_config_opts_armv7a_android=address-model=32 +$(package)_config_opts+=threading=multi link=static -sNO_COMPRESSION=1 +$(package)_config_opts_linux=target-os=linux threadapi=pthread runtime-link=shared +$(package)_config_opts_darwin=target-os=darwin runtime-link=shared +$(package)_config_opts_mingw32=target-os=windows binary-format=pe threadapi=win32 runtime-link=static +$(package)_config_opts_x86_64=architecture=x86 address-model=64 +$(package)_config_opts_i686=architecture=x86 address-model=32 +$(package)_config_opts_aarch64=address-model=64 +$(package)_config_opts_armv7a=address-model=32 +ifneq (,$(findstring clang,$($(package)_cxx))) +$(package)_toolset_$(host_os)=clang +else $(package)_toolset_$(host_os)=gcc -$(package)_archiver_$(host_os)=$($(package)_ar) -$(package)_toolset_darwin=clang-darwin +endif $(package)_config_libraries=chrono,filesystem,program_options,system,thread,test -$(package)_cxxflags=-std=c++11 -fvisibility=hidden +$(package)_cxxflags+=-std=c++17 $(package)_cxxflags_linux=-fPIC $(package)_cxxflags_android=-fPIC +$(package)_cxxflags_x86_64_darwin=-fcf-protection=full endef define $(package)_preprocess_cmds - echo "using $($(package)_toolset_$(host_os)) : : $($(package)_cxx) : \"$($(package)_cxxflags) $($(package)_cppflags)\" \"$($(package)_ldflags)\" \"$($(package)_archiver_$(host_os))\" \"$(host_STRIP)\" \"$(host_RANLIB)\" \"$(host_WINDRES)\" : ;" > user-config.jam + echo "using $($(package)_toolset_$(host_os)) : : $($(package)_cxx) : \"$($(package)_cflags)\" \"$($(package)_cxxflags)\" \"$($(package)_cppflags)\" \"$($(package)_ldflags)\" \"$($(package)_ar)\" \"$(host_STRIP)\" \"$(host_RANLIB)\" \"$(host_WINDRES)\" : ;" > user-config.jam endef define $(package)_config_cmds - ./bootstrap.sh --without-icu --with-libraries=$($(package)_config_libraries) + ./bootstrap.sh --without-icu --with-libraries=$($(package)_config_libraries) --with-toolset=$($(package)_toolset_$(host_os)) --with-bjam=b2 endef define $(package)_build_cmds - ./b2 -d2 -j2 -d1 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) stage + b2 -d2 -j2 -d1 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) toolset=$($(package)_toolset_$(host_os)) stage endef define $(package)_stage_cmds - ./b2 -d0 -j4 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) install + b2 -d0 -j4 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) toolset=$($(package)_toolset_$(host_os)) --no-cmake-config install endef diff --git a/depends/packages/libxkbcommon.mk b/depends/packages/libxkbcommon.mk new file mode 100644 index 0000000000..8c6c56545f --- /dev/null +++ b/depends/packages/libxkbcommon.mk @@ -0,0 +1,32 @@ +package=libxkbcommon +$(package)_version=0.8.4 +$(package)_download_path=https://xkbcommon.org/download/ +$(package)_file_name=$(package)-$($(package)_version).tar.xz +$(package)_sha256_hash=60ddcff932b7fd352752d51a5c4f04f3d0403230a584df9a2e0d5ed87c486c8b +$(package)_dependencies=libxcb + +define $(package)_set_vars +$(package)_config_opts = --enable-option-checking --disable-dependency-tracking +$(package)_config_opts += --disable-static --disable-docs +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub build-aux +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install +endef + +define $(package)_postprocess_cmds + rm lib/*.la +endef + diff --git a/depends/packages/native_b2.mk b/depends/packages/native_b2.mk new file mode 100644 index 0000000000..aaa37cdcfa --- /dev/null +++ b/depends/packages/native_b2.mk @@ -0,0 +1,20 @@ +package=native_b2 +$(package)_version=$(boost_version) +$(package)_download_path=$(boost_download_path) +$(package)_file_name=$(boost_file_name) +$(package)_sha256_hash=$(boost_sha256_hash) +$(package)_build_subdir=tools/build/src/engine +ifneq (,$(findstring clang,$($(package)_cxx))) +$(package)_toolset_$(host_os)=clang +else +$(package)_toolset_$(host_os)=gcc +endif + +define $(package)_build_cmds + CXX="$($(package)_cxx)" CXXFLAGS="$($(package)_cxxflags)" ./build.sh "$($(package)_toolset_$(host_os))" +endef + +define $(package)_stage_cmds + mkdir -p "$($(package)_staging_prefix_dir)"/bin/ && \ + cp b2 "$($(package)_staging_prefix_dir)"/bin/ +endef diff --git a/depends/packages/packages.mk b/depends/packages/packages.mk index 73b16a6936..8797acac7f 100644 --- a/depends/packages/packages.mk +++ b/depends/packages/packages.mk @@ -6,18 +6,20 @@ native_packages := native_ccache native_comparisontool qt_native_packages = native_protobuf qt_packages = qrencode protobuf zlib -qt_x86_64_linux_packages:=qt expat dbus libxcb xcb_proto libXau xproto freetype fontconfig libX11 xextproto libXext xtrans -qt_i686_linux_packages:=$(qt_x86_64_linux_packages) +qt_linux_packages:=qt expat libxcb xcb_proto libXau xproto freetype fontconfig libxkbcommon qt_darwin_packages=qt qt_mingw32_packages=qt -wallet_packages=bdb +bdb_packages=bdb +sqlite_packages=sqlite upnp_packages=miniupnpc darwin_native_packages = native_biplist native_ds_store native_mac_alias +$(host_arch)_$(host_os)_native_packages += native_b2 + ifneq ($(build_os),darwin) darwin_native_packages += native_cctools native_cdrkit native_libdmg-hfsplus endif diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk index 5adc6b7498..e46ad88eef 100644 --- a/depends/packages/qt.mk +++ b/depends/packages/qt.mk @@ -1,29 +1,37 @@ PACKAGE=qt -$(package)_version=5.9.8 -$(package)_download_path=https://download.qt.io/official_releases/qt/5.9/$($(package)_version)/submodules -$(package)_suffix=opensource-src-$($(package)_version).tar.xz +$(package)_version=5.12.11 +$(package)_download_path=https://download.qt.io/official_releases/qt/5.12/$($(package)_version)/submodules +$(package)_suffix=everywhere-src-$($(package)_version).tar.xz $(package)_file_name=qtbase-$($(package)_suffix) -$(package)_sha256_hash=9b9dec1f67df1f94bce2955c5604de992d529dde72050239154c56352da0907d +$(package)_sha256_hash=1c1b4e33137ca77881074c140d54c3c9747e845a31338cfe8680f171f0bc3a39 $(package)_dependencies=zlib openssl -$(package)_linux_dependencies=freetype fontconfig libxcb -$(package)_build_subdir=qtbase +$(package)_linux_dependencies=freetype fontconfig libxcb libxkbcommon $(package)_qt_libs=corelib network widgets gui plugins testlib -$(package)_patches=fix_qt_pkgconfig.patch mac-qmake.conf fix_configure_mac.patch fix_no_printer.patch fix_rcc_determinism.patch fix_riscv64_arch.patch xkb-default.patch no-xlib.patch fix_android_qmake_conf.patch fix_android_jni_static.patch +$(package)_linguist_tools = lrelease lupdate lconvert +$(package)_patches = qt.pro qttools_src.pro +$(package)_patches += fix_qt_pkgconfig.patch mac-qmake.conf fix_no_printer.patch no-xlib.patch +$(package)_patches += support_new_android_ndks.patch fix_android_jni_static.patch dont_hardcode_pwd.patch +$(package)_patches += dont_hardcode_x86_64.patch no_sdk_version_check.patch +$(package)_patches+= fix_lib_paths.patch fix_android_pch.patch +$(package)_patches+= qtbase-moc-ignore-gcc-macro.patch fix_limits_header.patch +$(package)_patches+= fix_montery_include.patch $(package)_qttranslations_file_name=qttranslations-$($(package)_suffix) -$(package)_qttranslations_sha256_hash=fb5a47799754af73d3bf501fe513342cfe2fc37f64e80df5533f6110e804220c +$(package)_qttranslations_sha256_hash=577b0668a777eb2b451c61e8d026d79285371597ce9df06b6dee6c814164b7c3 $(package)_qttools_file_name=qttools-$($(package)_suffix) -$(package)_qttools_sha256_hash=a97556eb7b2f30252cdd8a598c396cfce2b2f79d2bae883af6d3b26a2cdcc63c +$(package)_qttools_sha256_hash=98b2aaca230458f65996f3534fd471d2ffd038dd58ac997c0589c06dc2385b4f $(package)_extra_sources = $($(package)_qttranslations_file_name) $(package)_extra_sources += $($(package)_qttools_file_name) define $(package)_set_vars $(package)_config_opts_release = -release +$(package)_config_opts_release += -silent $(package)_config_opts_debug = -debug +$(package)_config_opts_debug += -optimized-tools $(package)_config_opts += -bindir $(build_prefix)/bin -$(package)_config_opts += -c++std c++11 +$(package)_config_opts += -c++std c++1z $(package)_config_opts += -confirm-license $(package)_config_opts += -hostprefix $(build_prefix) $(package)_config_opts += -no-compile-examples @@ -44,7 +52,6 @@ $(package)_config_opts += -no-libudev $(package)_config_opts += -no-mtdev $(package)_config_opts += -no-openvg $(package)_config_opts += -no-reduce-relocations -$(package)_config_opts += -no-qml-debug $(package)_config_opts += -no-sctp $(package)_config_opts += -no-sql-db2 $(package)_config_opts += -no-sql-ibase @@ -57,12 +64,10 @@ $(package)_config_opts += -no-sql-sqlite $(package)_config_opts += -no-sql-sqlite2 $(package)_config_opts += -no-system-proxies $(package)_config_opts += -no-use-gold-linker -$(package)_config_opts += -no-xinput2 $(package)_config_opts += -nomake examples $(package)_config_opts += -nomake tests +$(package)_config_opts += -nomake tools $(package)_config_opts += -opensource -$(package)_config_opts += -optimized-tools -$(package)_config_opts += -pch $(package)_config_opts += -pkg-config $(package)_config_opts += -prefix $(host_prefix) $(package)_config_opts += -qt-libpng @@ -70,14 +75,12 @@ $(package)_config_opts += -qt-pcre $(package)_config_opts += -qt-harfbuzz $(package)_config_opts += -system-zlib $(package)_config_opts += -static -$(package)_config_opts += -silent $(package)_config_opts += -v $(package)_config_opts += -no-feature-bearermanagement $(package)_config_opts += -no-feature-colordialog $(package)_config_opts += -no-feature-commandlineparser $(package)_config_opts += -no-feature-concurrent $(package)_config_opts += -no-feature-dial -$(package)_config_opts += -no-feature-filesystemwatcher $(package)_config_opts += -no-feature-fontcombobox $(package)_config_opts += -no-feature-ftp $(package)_config_opts += -no-feature-http @@ -90,16 +93,15 @@ $(package)_config_opts += -no-feature-printdialog $(package)_config_opts += -no-feature-printer $(package)_config_opts += -no-feature-printpreviewdialog $(package)_config_opts += -no-feature-printpreviewwidget -$(package)_config_opts += -no-feature-regularexpression $(package)_config_opts += -no-feature-sessionmanager $(package)_config_opts += -no-feature-socks5 $(package)_config_opts += -no-feature-sql +$(package)_config_opts += -no-feature-sqlmodel $(package)_config_opts += -no-feature-statemachine $(package)_config_opts += -no-feature-syntaxhighlighter $(package)_config_opts += -no-feature-textbrowser $(package)_config_opts += -no-feature-textodfwriter $(package)_config_opts += -no-feature-topleveldomain -$(package)_config_opts += -no-feature-udpsocket $(package)_config_opts += -no-feature-undocommand $(package)_config_opts += -no-feature-undogroup $(package)_config_opts += -no-feature-undostack @@ -109,23 +111,31 @@ $(package)_config_opts += -no-feature-xml $(package)_config_opts_darwin = -no-dbus $(package)_config_opts_darwin += -no-opengl +$(package)_config_opts_darwin += -pch +$(package)_config_opts_darwin += -no-feature-corewlan +$(package)_config_opts_darwin += QMAKE_MACOSX_DEPLOYMENT_TARGET=$(OSX_MIN_VERSION) ifneq ($(build_os),darwin) $(package)_config_opts_darwin += -xplatform macx-clang-linux $(package)_config_opts_darwin += -device-option MAC_SDK_PATH=$(OSX_SDK) $(package)_config_opts_darwin += -device-option MAC_SDK_VERSION=$(OSX_SDK_VERSION) $(package)_config_opts_darwin += -device-option CROSS_COMPILE="$(host)-" -$(package)_config_opts_darwin += -device-option MAC_MIN_VERSION=$(OSX_MIN_VERSION) $(package)_config_opts_darwin += -device-option MAC_TARGET=$(host) +$(package)_config_opts_darwin += -device-option XCODE_VERSION=$(XCODE_VERSION) endif -$(package)_config_opts_linux = -qt-xkbcommon-x11 -$(package)_config_opts_linux += -qt-xcb +ifneq ($(build_arch),$(host_arch)) +$(package)_config_opts_aarch64_darwin += -device-option QMAKE_APPLE_DEVICE_ARCHS=arm64 +$(package)_config_opts_x86_64_darwin += -device-option QMAKE_APPLE_DEVICE_ARCHS=x86_64 +endif + +$(package)_config_opts_linux = -qt-xcb $(package)_config_opts_linux += -no-xcb-xlib $(package)_config_opts_linux += -no-feature-xlib $(package)_config_opts_linux += -system-freetype $(package)_config_opts_linux += -fontconfig $(package)_config_opts_linux += -no-opengl +$(package)_config_opts_linux += -no-feature-vulkan $(package)_config_opts_linux += -dbus-runtime $(package)_config_opts_arm_linux += -platform linux-g++ -xplatform bitcoin-linux-g++ $(package)_config_opts_i686_linux = -xplatform linux-g++-32 @@ -139,8 +149,11 @@ $(package)_config_opts_s390x_linux = -platform linux-g++ -xplatform bitcoin-linu $(package)_config_opts_mingw32 = -no-opengl $(package)_config_opts_mingw32 += -no-dbus $(package)_config_opts_mingw32 += -xplatform win32-g++ +$(package)_config_opts_mingw32 += "QMAKE_CFLAGS = '$($(package)_cflags) $($(package)_cppflags)'" +$(package)_config_opts_mingw32 += "QMAKE_CXXFLAGS = '$($(package)_cflags) $($(package)_cppflags)'" +$(package)_config_opts_mingw32 += "QMAKE_LFLAGS = '$($(package)_ldflags)'" $(package)_config_opts_mingw32 += -device-option CROSS_COMPILE="$(host)-" -$(package)_config_opts_mingw32 += -ssl -openssl-runtime +$(package)_config_opts_mingw32 += -pch $(package)_config_opts_android = -xplatform android-clang $(package)_config_opts_android += -android-sdk $(ANDROID_SDK) @@ -156,14 +169,13 @@ $(package)_config_opts_android += -qt-freetype $(package)_config_opts_android += -no-fontconfig $(package)_config_opts_android += -L $(host_prefix)/lib $(package)_config_opts_android += -I $(host_prefix)/include +$(package)_config_opts_android += -pch +$(package)_config_opts_android += -no-feature-vulkan $(package)_config_opts_aarch64_android += -android-arch arm64-v8a $(package)_config_opts_armv7a_android += -android-arch armeabi-v7a $(package)_config_opts_x86_64_android += -android-arch x86_64 $(package)_config_opts_i686_android += -android-arch i686 - -$(package)_build_env = QT_RCC_TEST=1 -$(package)_build_env += QT_RCC_SOURCE_DATE_OVERRIDE=1 endef define $(package)_fetch_cmds @@ -186,73 +198,72 @@ define $(package)_extract_cmds tar --no-same-owner --strip-components=1 -xf $($(package)_source_dir)/$($(package)_qttools_file_name) -C qttools endef +# Preprocessing steps work as follows: +# +# 1. Apply our patches to the extracted source. See each patch for more info. +# +# 2. Create a macOS-Clang-Linux mkspec using our mac-qmake.conf. +# +# 3. After making a copy of the mkspec for the linux-arm-gnueabi host, named +# bitcoin-linux-g++, replace instances of linux-arm-gnueabi with $(host). This +# way we can generically support hosts like riscv64-linux-gnu, which Qt doesn't +# ship a mkspec for. See it's usage in config_opts_* above. +# +# 4. Put our C, CXX and LD FLAGS into gcc-base.conf. Only used for non-host builds. +# +# 5. Do similar for the win32-g++ mkspec. +# +# 6. In clang.conf, swap out clang & clang++, for our compiler + flags. See #17466. +# +# 7. Adjust a regex in toolchain.prf, to accommodate Guix's usage of +# CROSS_LIBRARY_PATH. See #15277. define $(package)_preprocess_cmds - sed -i.old "s|FT_Get_Font_Format|FT_Get_X11_Font_Format|" qtbase/src/platformsupport/fontdatabases/freetype/qfontengine_ft.cpp && \ - sed -i.old "s|updateqm.commands = \$$$$\$$$$LRELEASE|updateqm.commands = $($(package)_extract_dir)/qttools/bin/lrelease|" qttranslations/translations/translations.pro && \ - sed -i.old "/updateqm.depends =/d" qttranslations/translations/translations.pro && \ - sed -i.old "s/src_plugins.depends = src_sql src_network/src_plugins.depends = src_network/" qtbase/src/src.pro && \ - sed -i.old -e 's/if \[ "$$$$XPLATFORM_MAC" = "yes" \]; then xspecvals=$$$$(macSDKify/if \[ "$$$$BUILD_ON_MAC" = "yes" \]; then xspecvals=$$$$(macSDKify/' -e 's|/bin/pwd|pwd|' qtbase/configure && \ + cp $($(package)_patch_dir)/qt.pro qt.pro && \ + cp $($(package)_patch_dir)/qttools_src.pro qttools/src/src.pro && \ + patch -p1 -i $($(package)_patch_dir)/dont_hardcode_pwd.patch && \ + patch -p1 -i $($(package)_patch_dir)/fix_qt_pkgconfig.patch && \ + patch -p1 -i $($(package)_patch_dir)/fix_no_printer.patch && \ + patch -p1 -i $($(package)_patch_dir)/support_new_android_ndks.patch && \ + patch -p1 -i $($(package)_patch_dir)/fix_android_jni_static.patch && \ + patch -p1 -i $($(package)_patch_dir)/fix_android_pch.patch && \ + patch -p1 -i $($(package)_patch_dir)/no-xlib.patch && \ + patch -p1 -i $($(package)_patch_dir)/dont_hardcode_x86_64.patch && \ + patch -p1 -i $($(package)_patch_dir)/no_sdk_version_check.patch && \ + patch -p1 -i $($(package)_patch_dir)/fix_lib_paths.patch && \ + patch -p1 -i $($(package)_patch_dir)/qtbase-moc-ignore-gcc-macro.patch && \ + patch -p1 -i $($(package)_patch_dir)/fix_limits_header.patch && \ + patch -p1 -i $($(package)_patch_dir)/fix_montery_include.patch && \ mkdir -p qtbase/mkspecs/macx-clang-linux &&\ - cp -f qtbase/mkspecs/macx-clang/Info.plist.lib qtbase/mkspecs/macx-clang-linux/ &&\ - cp -f qtbase/mkspecs/macx-clang/Info.plist.app qtbase/mkspecs/macx-clang-linux/ &&\ cp -f qtbase/mkspecs/macx-clang/qplatformdefs.h qtbase/mkspecs/macx-clang-linux/ &&\ cp -f $($(package)_patch_dir)/mac-qmake.conf qtbase/mkspecs/macx-clang-linux/qmake.conf && \ cp -r qtbase/mkspecs/linux-arm-gnueabi-g++ qtbase/mkspecs/bitcoin-linux-g++ && \ sed -i.old "s/arm-linux-gnueabi-/$(host)-/g" qtbase/mkspecs/bitcoin-linux-g++/qmake.conf && \ - patch -p1 -i $($(package)_patch_dir)/fix_qt_pkgconfig.patch &&\ - patch -p1 -i $($(package)_patch_dir)/fix_configure_mac.patch &&\ - patch -p1 -i $($(package)_patch_dir)/fix_no_printer.patch &&\ - patch -p1 -i $($(package)_patch_dir)/fix_rcc_determinism.patch &&\ - patch -p1 -i $($(package)_patch_dir)/xkb-default.patch &&\ - patch -p1 -i $($(package)_patch_dir)/fix_android_qmake_conf.patch &&\ - patch -p1 -i $($(package)_patch_dir)/fix_android_jni_static.patch &&\ echo "!host_build: QMAKE_CFLAGS += $($(package)_cflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \ echo "!host_build: QMAKE_CXXFLAGS += $($(package)_cxxflags) $($(package)_cppflags)" >> qtbase/mkspecs/common/gcc-base.conf && \ echo "!host_build: QMAKE_LFLAGS += $($(package)_ldflags)" >> qtbase/mkspecs/common/gcc-base.conf && \ - patch -p1 -i $($(package)_patch_dir)/fix_riscv64_arch.patch &&\ - patch -p1 -i $($(package)_patch_dir)/no-xlib.patch &&\ - echo "QMAKE_LINK_OBJECT_MAX = 10" >> qtbase/mkspecs/win32-g++/qmake.conf &&\ - echo "QMAKE_LINK_OBJECT_SCRIPT = object_script" >> qtbase/mkspecs/win32-g++/qmake.conf &&\ - sed -i.old "s|QMAKE_CFLAGS += |!host_build: QMAKE_CFLAGS = $($(package)_cflags) $($(package)_cppflags) |" qtbase/mkspecs/win32-g++/qmake.conf && \ - sed -i.old "s|QMAKE_CXXFLAGS += |!host_build: QMAKE_CXXFLAGS = $($(package)_cxxflags) $($(package)_cppflags) |" qtbase/mkspecs/win32-g++/qmake.conf && \ - sed -i.old "0,/^QMAKE_LFLAGS_/s|^QMAKE_LFLAGS_|!host_build: QMAKE_LFLAGS = $($(package)_ldflags)\n&|" qtbase/mkspecs/win32-g++/qmake.conf && \ - sed -i.old "s|QMAKE_CC = clang|QMAKE_CC = $($(package)_cc)|" qtbase/mkspecs/common/clang.conf && \ - sed -i.old "s|QMAKE_CXX = clang++|QMAKE_CXX = $($(package)_cxx)|" qtbase/mkspecs/common/clang.conf && \ + sed -i.old "s|QMAKE_CC = \$$$$\$$$${CROSS_COMPILE}clang|QMAKE_CC = $($(package)_cc)|" qtbase/mkspecs/common/clang.conf && \ + sed -i.old "s|QMAKE_CXX = \$$$$\$$$${CROSS_COMPILE}clang++|QMAKE_CXX = $($(package)_cxx)|" qtbase/mkspecs/common/clang.conf && \ sed -i.old "s/LIBRARY_PATH/(CROSS_)?\0/g" qtbase/mkspecs/features/toolchain.prf endef define $(package)_config_cmds export PKG_CONFIG_SYSROOT_DIR=/ && \ export PKG_CONFIG_LIBDIR=$(host_prefix)/lib/pkgconfig && \ - export PKG_CONFIG_PATH=$(host_prefix)/share/pkgconfig && \ - ./configure $($(package)_config_opts) && \ - echo "host_build: QT_CONFIG ~= s/system-zlib/zlib" >> mkspecs/qconfig.pri && \ - echo "CONFIG += force_bootstrap" >> mkspecs/qconfig.pri && \ - $(MAKE) sub-src-clean && \ - cd ../qttranslations && ../qtbase/bin/qmake qttranslations.pro -o Makefile && \ - cd translations && ../../qtbase/bin/qmake translations.pro -o Makefile && cd ../.. && \ - cd qttools/src/linguist/lrelease/ && ../../../../qtbase/bin/qmake lrelease.pro -o Makefile && \ - cd ../lupdate/ && ../../../../qtbase/bin/qmake lupdate.pro -o Makefile && cd ../../../.. + cd qtbase && \ + ./configure -top-level $($(package)_config_opts) endef define $(package)_build_cmds - $(MAKE) -C src $(addprefix sub-,$($(package)_qt_libs)) && \ - $(MAKE) -C ../qttools/src/linguist/lrelease && \ - $(MAKE) -C ../qttools/src/linguist/lupdate && \ - $(MAKE) -C ../qttranslations + $(MAKE) endef define $(package)_stage_cmds - $(MAKE) -C src INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_qt_libs))) && cd .. && \ - $(MAKE) -C qttools/src/linguist/lrelease INSTALL_ROOT=$($(package)_staging_dir) install_target && \ - $(MAKE) -C qttools/src/linguist/lupdate INSTALL_ROOT=$($(package)_staging_dir) install_target && \ - $(MAKE) -C qttranslations INSTALL_ROOT=$($(package)_staging_dir) install_subtargets && \ - if `test -f qtbase/src/plugins/platforms/xcb/xcb-static/libxcb-static.a`; then \ - cp qtbase/src/plugins/platforms/xcb/xcb-static/libxcb-static.a $($(package)_staging_prefix_dir)/lib; \ - fi + $(MAKE) -C qtbase/src INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_qt_libs))) && \ + $(MAKE) -C qttools/src/linguist INSTALL_ROOT=$($(package)_staging_dir) $(addsuffix -install_subtargets,$(addprefix sub-,$($(package)_linguist_tools))) && \ + $(MAKE) -C qttranslations INSTALL_ROOT=$($(package)_staging_dir) install_subtargets endef define $(package)_postprocess_cmds rm -rf native/mkspecs/ native/lib/ lib/cmake/ && \ - rm -f lib/lib*.la lib/*.prl plugins/*/*.prl + rm -f lib/lib*.la endef diff --git a/depends/packages/sqlite.mk b/depends/packages/sqlite.mk new file mode 100644 index 0000000000..af5e0d09c9 --- /dev/null +++ b/depends/packages/sqlite.mk @@ -0,0 +1,30 @@ +package=sqlite +$(package)_version=3320100 +$(package)_download_path=https://sqlite.org/2020/ +$(package)_file_name=sqlite-autoconf-$($(package)_version).tar.gz +$(package)_sha256_hash=486748abfb16abd8af664e3a5f03b228e5f124682b0c942e157644bf6fff7d10 + +define $(package)_set_vars +$(package)_config_opts=--disable-shared --disable-readline --disable-dynamic-extensions --enable-option-checking +$(package)_config_opts_linux=--with-pic +endef + +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub . +endef + +define $(package)_config_cmds + $($(package)_autoconf) +endef + +define $(package)_build_cmds + $(MAKE) libsqlite3.la +endef + +define $(package)_stage_cmds + $(MAKE) DESTDIR=$($(package)_staging_dir) install-libLTLIBRARIES install-includeHEADERS install-pkgconfigDATA +endef + +define $(package)_postprocess_cmds + rm lib/*.la +endef diff --git a/depends/patches/qt/dont_hardcode_pwd.patch b/depends/patches/qt/dont_hardcode_pwd.patch new file mode 100644 index 0000000000..a74e9cb098 --- /dev/null +++ b/depends/patches/qt/dont_hardcode_pwd.patch @@ -0,0 +1,27 @@ +commit 0e953866fc4672486e29e1ba6d83b4207e7b2f0b +Author: fanquake +Date: Tue Aug 18 15:09:06 2020 +0800 + + Don't hardcode pwd path + + Let a man use his builtins if he wants to! Also, removes the unnecessary + assumption that pwd lives under /bin/pwd. + + See #15581. + +diff --git a/qtbase/configure b/qtbase/configure +index 08b49a8d..faea5b55 100755 +--- a/qtbase/configure ++++ b/qtbase/configure +@@ -36,9 +36,9 @@ + relconf=`basename $0` + # the directory of this script is the "source tree" + relpath=`dirname $0` +-relpath=`(cd "$relpath"; /bin/pwd)` ++relpath=`(cd "$relpath"; pwd)` + # the current directory is the "build tree" or "object tree" +-outpath=`/bin/pwd` ++outpath=`pwd` + + WHICH="which" + diff --git a/depends/patches/qt/dont_hardcode_x86_64.patch b/depends/patches/qt/dont_hardcode_x86_64.patch new file mode 100644 index 0000000000..0e1ca6acda --- /dev/null +++ b/depends/patches/qt/dont_hardcode_x86_64.patch @@ -0,0 +1,123 @@ +macOS: Don't hard-code x86_64 as the architecture when using qmake + +Upstream commit: + - Qt 6.1: 9082cc8e8d5a6441dabe5e7a95bc0cd9085b95fe + +For other Qt branches see +https://codereview.qt-project.org/q/I70db7e4c27f0d3da5d0af33cb491d72c312d3fa8 + + +--- old/qtbase/configure.json ++++ new/qtbase/configure.json +@@ -208,11 +208,18 @@ + + "testTypeDependencies": { + "linkerSupportsFlag": [ "use_gold_linker" ], +- "verifySpec": [ "shared", "use_gold_linker", "compiler-flags", "qmakeargs", "commit" ], ++ "verifySpec": [ ++ "shared", ++ "use_gold_linker", ++ "compiler-flags", "qmakeargs", ++ "simulator_and_device", ++ "thread", ++ "commit" ], + "compile": [ "verifyspec" ], + "detectPkgConfig": [ "cross_compile", "machineTuple" ], + "library": [ "pkg-config", "compiler-flags" ], +- "getPkgConfigVariable": [ "pkg-config" ] ++ "getPkgConfigVariable": [ "pkg-config" ], ++ "architecture" : [ "verifyspec" ] + }, + + "testTypeAliases": { +@@ -653,7 +660,7 @@ + }, + "architecture": { + "label": "Architecture", +- "output": [ "architecture" ] ++ "output": [ "architecture", "commitConfig" ] + }, + "pkg-config": { + "label": "Using pkg-config", +diff --git a/configure.pri b/configure.pri +index 33c90a8c2f..71767e29d6 100644 + +--- old/qtbase/configure.pri ++++ new/qtbase/configure.pri +@@ -642,6 +642,13 @@ defineTest(qtConfOutput_commitOptions) { + write_file($$QT_BUILD_TREE/mkspecs/qdevice.pri, $${currentConfig}.output.devicePro)|error() + } + ++# Output is written after configuring each Qt module, ++# but some tests within a module might depend on the ++# configuration output of previous tests. ++defineTest(qtConfOutput_commitConfig) { ++ qtConfProcessOutput() ++} ++ + # type (empty or 'host'), option name, default value + defineTest(processQtPath) { + out_var = config.rel_input.$${2} +diff --git a/mkspecs/common/macx.conf b/mkspecs/common/macx.conf +index 7d4a406134..de96c12fc9 100644 + +--- old/qtbase/mkspecs/common/macx.conf ++++ new/qtbase/mkspecs/common/macx.conf +@@ -6,7 +6,6 @@ QMAKE_PLATFORM += macos osx macx + QMAKE_MAC_SDK = macosx + + QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.12 +-QMAKE_APPLE_DEVICE_ARCHS = x86_64 + + QT_MAC_SDK_VERSION_MIN = 10.13 + QT_MAC_SDK_VERSION_MAX = 11.0 +diff --git a/mkspecs/features/mac/default_post.prf b/mkspecs/features/mac/default_post.prf +index d052808c14..0a89effe87 100644 + +--- old/qtbase/mkspecs/features/mac/default_post.prf ++++ new/qtbase/mkspecs/features/mac/default_post.prf +@@ -89,6 +89,11 @@ app_extension_api_only { + QMAKE_LFLAGS += $$QMAKE_CFLAGS_APPLICATION_EXTENSION + } + ++# Non-universal builds do not set QMAKE_APPLE_DEVICE_ARCHS, ++# so we pick it up from what the arch test resolved instead. ++isEmpty(QMAKE_APPLE_DEVICE_ARCHS): \ ++ QMAKE_APPLE_DEVICE_ARCHS = $$QT_ARCH ++ + macx-xcode { + qmake_pkginfo_typeinfo.name = QMAKE_PKGINFO_TYPEINFO + !isEmpty(QMAKE_PKGINFO_TYPEINFO): \ +@@ -144,9 +149,6 @@ macx-xcode { + simulator: VALID_SIMULATOR_ARCHS = $$QMAKE_APPLE_SIMULATOR_ARCHS + VALID_ARCHS = $$VALID_DEVICE_ARCHS $$VALID_SIMULATOR_ARCHS + +- isEmpty(VALID_ARCHS): \ +- error("QMAKE_APPLE_DEVICE_ARCHS or QMAKE_APPLE_SIMULATOR_ARCHS must contain at least one architecture") +- + single_arch: VALID_ARCHS = $$first(VALID_ARCHS) + + ACTIVE_ARCHS = $(filter $(EXPORT_VALID_ARCHS), $(ARCHS)) +diff --git a/mkspecs/features/toolchain.prf b/mkspecs/features/toolchain.prf +index 5003679bd0..c7c080cb07 100644 + +--- old/qtbase/mkspecs/features/toolchain.prf ++++ new/qtbase/mkspecs/features/toolchain.prf +@@ -182,9 +182,14 @@ isEmpty($${target_prefix}.INCDIRS) { + # UIKit simulator platforms will see the device SDK's sysroot in + # QMAKE_DEFAULT_*DIRS, because they're handled in a single build pass. + darwin { +- # Clang doesn't pick up the architecture from the sysroot, and will +- # default to the host architecture, so we need to manually set it. +- cxx_flags += -arch $$QMAKE_APPLE_DEVICE_ARCHS ++ uikit { ++ # Clang doesn't automatically pick up the architecture, just because ++ # we're passing the iOS sysroot below, and we will end up building the ++ # test for the host architecture, resulting in linker errors when ++ # linking against the iOS libraries. We work around this by passing ++ # the architecture explicitly. ++ cxx_flags += -arch $$first(QMAKE_APPLE_DEVICE_ARCHS) ++ } + + uikit:macx-xcode: \ + cxx_flags += -isysroot $$sdk_path_device.value diff --git a/depends/patches/qt/fix_android_jni_static.patch b/depends/patches/qt/fix_android_jni_static.patch index 2f6ff00f40..a186aeb8f6 100644 --- a/depends/patches/qt/fix_android_jni_static.patch +++ b/depends/patches/qt/fix_android_jni_static.patch @@ -1,6 +1,6 @@ --- old/qtbase/src/plugins/platforms/android/androidjnimain.cpp +++ new/qtbase/src/plugins/platforms/android/androidjnimain.cpp -@@ -890,6 +890,14 @@ +@@ -898,6 +898,14 @@ __android_log_print(ANDROID_LOG_FATAL, "Qt", "registerNatives failed"); return -1; } diff --git a/depends/patches/qt/fix_android_pch.patch b/depends/patches/qt/fix_android_pch.patch new file mode 100644 index 0000000000..195e1c5e59 --- /dev/null +++ b/depends/patches/qt/fix_android_pch.patch @@ -0,0 +1,10 @@ +--- old/qtbase/mkspecs/common/android-base-head.conf ++++ new/qtbase/mkspecs/common/android-base-head.conf +@@ -72,6 +72,6 @@ CROSS_COMPILE = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX- + QMAKE_PCH_OUTPUT_EXT = .gch + + QMAKE_CFLAGS_PRECOMPILE = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} +-QMAKE_CFLAGS_USE_PRECOMPILE = -include ${QMAKE_PCH_OUTPUT_BASE} ++QMAKE_CFLAGS_USE_PRECOMPILE = -include-pch ${QMAKE_PCH_OUTPUT} + QMAKE_CXXFLAGS_PRECOMPILE = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} + QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE diff --git a/depends/patches/qt/fix_android_qmake_conf.patch b/depends/patches/qt/fix_android_qmake_conf.patch deleted file mode 100644 index 13bfff9776..0000000000 --- a/depends/patches/qt/fix_android_qmake_conf.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- old/qtbase/mkspecs/android-clang/qmake.conf -+++ new/qtbase/mkspecs/android-clang/qmake.conf -@@ -30,7 +30,7 @@ - QMAKE_CFLAGS += -target mips64el-none-linux-android - - QMAKE_CFLAGS += -gcc-toolchain $$NDK_TOOLCHAIN_PATH --QMAKE_LINK = $$QMAKE_CXX $$QMAKE_CFLAGS -Wl,--exclude-libs,libgcc.a -+QMAKE_LINK = $$QMAKE_CXX $$QMAKE_CFLAGS -Wl,--exclude-libs,libgcc.a -nostdlib++ - QMAKE_CFLAGS += -DANDROID_HAS_WSTRING --sysroot=$$NDK_ROOT/sysroot \ - -isystem $$NDK_ROOT/sysroot/usr/include/$$NDK_TOOLS_PREFIX \ - -isystem $$NDK_ROOT/sources/cxx-stl/llvm-libc++/include \ -@@ -40,7 +40,7 @@ - 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++ -+ANDROID_CXX_STL_LIBS = -lc++_shared - - QMAKE_ARM_CFLAGS_RELEASE = -Oz - QMAKE_ARM_CFLAGS_RELEASE_WITH_DEBUGINFO = -g -Oz diff --git a/depends/patches/qt/fix_configure_mac.patch b/depends/patches/qt/fix_configure_mac.patch deleted file mode 100644 index 0d7dd647de..0000000000 --- a/depends/patches/qt/fix_configure_mac.patch +++ /dev/null @@ -1,50 +0,0 @@ ---- old/qtbase/mkspecs/features/mac/sdk.prf 2018-02-08 10:24:48.000000000 -0800 -+++ new/qtbase/mkspecs/features/mac/sdk.prf 2018-03-23 10:38:56.000000000 -0700 -@@ -8,21 +8,21 @@ - defineReplace(xcodeSDKInfo) { - info = $$1 - equals(info, "Path"): \ -- info = --show-sdk-path -+ infoarg = --show-sdk-path - equals(info, "PlatformPath"): \ -- info = --show-sdk-platform-path -+ infoarg = --show-sdk-platform-path - equals(info, "SDKVersion"): \ -- info = --show-sdk-version -+ infoarg = --show-sdk-version - sdk = $$2 - isEmpty(sdk): \ - sdk = $$QMAKE_MAC_SDK - - isEmpty(QMAKE_MAC_SDK.$${sdk}.$${info}) { -- QMAKE_MAC_SDK.$${sdk}.$${info} = $$system("/usr/bin/xcrun --sdk $$sdk $$info 2>/dev/null") -+ QMAKE_MAC_SDK.$${sdk}.$${info} = $$system("/usr/bin/xcrun --sdk $$sdk $$infoarg 2>/dev/null") - # --show-sdk-platform-path won't work for Command Line Tools; this is fine - # only used by the XCTest backend to testlib -- isEmpty(QMAKE_MAC_SDK.$${sdk}.$${info}):if(!isEmpty(QMAKE_XCODEBUILD_PATH)|!equals(info, "--show-sdk-platform-path")): \ -- error("Could not resolve SDK $$info for \'$$sdk\'") -+ isEmpty(QMAKE_MAC_SDK.$${sdk}.$${info}):if(!isEmpty(QMAKE_XCODEBUILD_PATH)|!equals(infoarg, "--show-sdk-platform-path")): \ -+ error("Could not resolve SDK $$info for \'$$sdk\' using $$infoarg") - cache(QMAKE_MAC_SDK.$${sdk}.$${info}, set stash, QMAKE_MAC_SDK.$${sdk}.$${info}) - } - ---- old/qtbase/configure 2018-02-08 10:24:48.000000000 -0800 -+++ new/qtbase/configure 2018-03-23 05:42:29.000000000 -0700 -@@ -232,8 +232,13 @@ - - sdk=$(getSingleQMakeVariable "QMAKE_MAC_SDK" "$1") - if [ -z "$sdk" ]; then echo "QMAKE_MAC_SDK must be set when building on Mac" >&2; exit 1; fi -- sysroot=$(/usr/bin/xcrun --sdk $sdk --show-sdk-path 2>/dev/null) -- if [ -z "$sysroot" ]; then echo "Failed to resolve SDK path for '$sdk'" >&2; exit 1; fi -+ sysroot=$(getSingleQMakeVariable "QMAKE_MAC_SDK_PATH" "$1") -+ -+ echo "sysroot pre-configured as $sysroot"; -+ if [ -z "$sysroot" ]; then -+ sysroot=$(/usr/bin/xcrun --sdk $sdk --show-sdk-path 2>/dev/null) -+ if [ -z "$sysroot" ]; then echo "Failed to resolve SDK path for '$sdk'" >&2; exit 1; fi -+ fi - - case "$sdk" in - macosx*) - - diff --git a/depends/patches/qt/fix_lib_paths.patch b/depends/patches/qt/fix_lib_paths.patch new file mode 100644 index 0000000000..d1a15373f4 --- /dev/null +++ b/depends/patches/qt/fix_lib_paths.patch @@ -0,0 +1,193 @@ +--- old/qtbase/mkspecs/common/mac.conf ++++ new/qtbase/mkspecs/common/mac.conf +@@ -14,7 +14,6 @@ + + QMAKE_RESOURCE = /Developer/Tools/Rez + QMAKE_EXTENSION_SHLIB = dylib +-QMAKE_EXTENSIONS_AUX_SHLIB = tbd + QMAKE_LIBDIR = + + # sdk.prf will prefix the proper SDK sysroot + +--- old/qtbase/mkspecs/features/qmake_use.prf ++++ new/qtbase/mkspecs/features/qmake_use.prf +@@ -22,6 +22,8 @@ + !defined(QMAKE_LIBS_$$nu, var): \ + error("Library '$$lower($$replace(nu, _, -))' is not defined.") + ++ QMAKE_LIBDIR += $$eval(QMAKE_LIBDIR_$$nu) ++ + debug: \ + LIBS$${suffix} += $$eval(QMAKE_LIBS_$${nu}_DEBUG) $$eval(QMAKE_LIBS_$$nu) + else: \ + +--- old/qtbase/mkspecs/features/qt_configure.prf ++++ new/qtbase/mkspecs/features/qt_configure.prf +@@ -526,98 +526,23 @@ + return($$sysrootified) + } + +-# libs-var, libs, in-paths, out-paths-var ++# libs-var, libs, in-paths + defineTest(qtConfResolveLibs) { +- ret = true +- paths = $$3 +- out = +- copy = false +- for (l, 2) { +- $$copy { +- copy = false +- out += $$l +- } else: equals(l, "-s") { +- # em++ flag to link libraries from emscripten-ports; passed on literally. +- copy = true +- out += $$l +- } else: contains(l, "^-L.*") { +- lp = $$replace(l, "^-L", ) +- gcc: lp = $$qtGccSysrootifiedPath($$lp) +- !exists($$lp/.) { +- qtLog("Library path $$val_escape(lp) is invalid.") +- ret = false +- } else { +- paths += $$lp +- } +- } else: contains(l, "^-l.*") { +- lib = $$replace(l, "^-l", ) +- lcan = +- integrity:contains(lib, "^.*\\.a") { +- # INTEGRITY compiler searches for exact filename +- # if -l argument has .a suffix +- lcan += $${lib} +- } else: contains(lib, "^:.*") { +- # Use exact filename when -l:filename syntax is used. +- lib ~= s/^:// +- lcan += $${lib} +- } else: unix { +- # Under UNIX, we look for actual shared libraries, in addition +- # to static ones. +- shexts = $$QMAKE_EXTENSION_SHLIB $$QMAKE_EXTENSIONS_AUX_SHLIB +- for (ext, shexts) { +- lcan += $${QMAKE_PREFIX_SHLIB}$${lib}.$${ext} +- } +- lcan += \ +- $${QMAKE_PREFIX_STATICLIB}$${lib}.$${QMAKE_EXTENSION_STATICLIB} +- } else { +- # Under Windows, we look only for static libraries, as even for DLLs +- # one actually links against a static import library. +- mingw { +- lcan += \ +- # MinGW supports UNIX-style library naming in addition to +- # the MSVC style. +- lib$${lib}.dll.a lib$${lib}.a \ +- # Fun fact: prefix-less libraries are also supported. +- $${lib}.dll.a $${lib}.a +- } +- lcan += $${lib}.lib +- } +- l = $$qtConfFindInPathList($$lcan, $$paths $$EXTRA_LIBDIR $$QMAKE_DEFAULT_LIBDIRS) +- isEmpty(l) { +- qtLog("None of [$$val_escape(lcan)] found in [$$val_escape(paths)] and global paths.") +- ret = false +- } else { +- out += $$l +- } +- } else { +- out += $$l +- } +- } +- $$1 = $$out ++ for (path, 3): \ ++ pre_lflags += -L$$path ++ $$1 = $$pre_lflags $$2 + export($$1) +- !isEmpty(4) { +- $$4 = $$paths +- export($$4) +- } +- return($$ret) +-} +- +-# source-var +-defineTest(qtConfResolveAllLibs) { +- ret = true +- !qtConfResolveLibs($${1}.libs, $$eval($${1}.libs), , $${1}.libdirs): \ +- ret = false +- for (b, $${1}.builds._KEYS_): \ +- !qtConfResolveLibs($${1}.builds.$${b}, $$eval($${1}.builds.$${b}), $$eval($${1}.libdirs), ): \ +- ret = false +- return($$ret) ++ return(true) + } + + # libs-var, in-paths, libs + defineTest(qtConfResolvePathLibs) { + ret = true +- gcc: 2 = $$qtGccSysrootifiedPaths($$2) +- for (libdir, 2) { ++ gcc: \ ++ local_paths = $$qtGccSysrootifiedPaths($$2) ++ else: \ ++ local_paths = $$2 ++ for (libdir, local_paths) { + !exists($$libdir/.) { + qtLog("Library path $$val_escape(libdir) is invalid.") + ret = false +@@ -667,8 +592,11 @@ + # includes-var, in-paths, test-object-var + defineTest(qtConfResolvePathIncs) { + ret = true +- gcc: 2 = $$qtGccSysrootifiedPaths($$2) +- for (incdir, 2) { ++ gcc: \ ++ local_paths = $$qtGccSysrootifiedPaths($$2) ++ else: \ ++ local_paths = $$2 ++ for (incdir, local_paths) { + !exists($$incdir/.) { + qtLog("Include path $$val_escape(incdir) is invalid.") + ret = false +@@ -727,6 +655,7 @@ + vars += $$eval(config.commandline.rev_assignments.$${iv}) + defined(config.input.$${iv}, var) { + eval($${1}.builds.$${b} = $$eval(config.input.$${iv})) ++ export($${1}.builds.$${b}) + $${1}.builds._KEYS_ *= $${b} + any = true + } else { +@@ -741,11 +670,14 @@ + export($${1}.builds._KEYS_) + # we also reset the generic libs, to avoid surprises. + $${1}.libs = ++ export($${1}.libs) + } + + # direct libs. overwrites inline libs. +- defined(config.input.$${input}.libs, var): \ ++ defined(config.input.$${input}.libs, var) { + eval($${1}.libs = $$eval(config.input.$${input}.libs)) ++ export($${1}.libs) ++ } + + includes = $$eval(config.input.$${input}.incdir) + +@@ -754,6 +686,7 @@ + !isEmpty(prefix) { + includes += $$prefix/include + $${1}.libs = -L$$prefix/lib $$eval($${1}.libs) ++ export($${1}.libs) + } + + libdir = $$eval(config.input.$${input}.libdir) +@@ -762,11 +695,9 @@ + for (ld, libdir): \ + libs += -L$$ld + $${1}.libs = $$libs $$eval($${1}.libs) ++ export($${1}.libs) + } + +- !qtConfResolveAllLibs($$1): \ +- return(false) +- + !qtConfResolvePathIncs($${1}.includedir, $$includes, $$2): \ + return(false) + diff --git a/depends/patches/qt/fix_limits_header.patch b/depends/patches/qt/fix_limits_header.patch new file mode 100644 index 0000000000..e4313770e5 --- /dev/null +++ b/depends/patches/qt/fix_limits_header.patch @@ -0,0 +1,44 @@ +Fix compiling with GCC 11 + +See: https://bugreports.qt.io/browse/QTBUG-90395. + +Upstream commits: + - Qt 5.15 -- unavailable as open source + - Qt 6.0: b2af6332ea37e45ab230a7a5d2d278f86d961b83 + - Qt 6.1: 9c56d4da2ff631a8c1c30475bd792f6c86bda53c + +--- old/qtbase/src/corelib/global/qendian.h ++++ new/qtbase/src/corelib/global/qendian.h +@@ -44,6 +44,8 @@ + #include + #include + ++#include ++ + // include stdlib.h and hope that it defines __GLIBC__ for glibc-based systems + #include + #include + +--- old/qtbase/src/corelib/tools/qbytearraymatcher.h ++++ new/qtbase/src/corelib/tools/qbytearraymatcher.h +@@ -42,6 +42,8 @@ + + #include + ++#include ++ + QT_BEGIN_NAMESPACE + + + +--- old/qtbase/src/tools/moc/generator.cpp ++++ new/qtbase/src/tools/moc/generator.cpp +@@ -40,6 +40,8 @@ + #include + #include + ++#include ++ + #include + #include + diff --git a/depends/patches/qt/fix_montery_include.patch b/depends/patches/qt/fix_montery_include.patch new file mode 100644 index 0000000000..38b700addf --- /dev/null +++ b/depends/patches/qt/fix_montery_include.patch @@ -0,0 +1,21 @@ +From dece6f5840463ae2ddf927d65eb1b3680e34a547 +From: Øystein Heskestad +Date: Wed, 27 Oct 2021 13:07:46 +0200 +Subject: [PATCH] Add missing macOS header file that was indirectly included before + +See: https://bugreports.qt.io/browse/QTBUG-97855 + +Upstream Commits: + - Qt 6.2: c884bf138a21dd7320e35cef34d24e22e74d7ce0 + +diff --git a/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h b/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h +index e070ba97..07c75b04 100644 +--- a/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h ++++ b/qtbase/src/plugins/platforms/cocoa/qiosurfacegraphicsbuffer.h +@@ -40,6 +40,7 @@ + #ifndef QIOSURFACEGRAPHICSBUFFER_H + #define QIOSURFACEGRAPHICSBUFFER_H + ++#include + #include + #include diff --git a/depends/patches/qt/fix_no_printer.patch b/depends/patches/qt/fix_no_printer.patch index f868ca2577..1372356138 100644 --- a/depends/patches/qt/fix_no_printer.patch +++ b/depends/patches/qt/fix_no_printer.patch @@ -10,10 +10,10 @@ --- x/qtbase/src/plugins/plugins.pro +++ y/qtbase/src/plugins/plugins.pro -@@ -8,6 +8,3 @@ qtHaveModule(gui) { - qtConfig(imageformatplugin): SUBDIRS *= imageformats +@@ -9,6 +9,3 @@ qtHaveModule(gui) { !android:qtConfig(library): SUBDIRS *= generic } + qtHaveModule(widgets): SUBDIRS += styles - -!winrt:qtHaveModule(printsupport): \ - SUBDIRS += printsupport diff --git a/depends/patches/qt/fix_qt_pkgconfig.patch b/depends/patches/qt/fix_qt_pkgconfig.patch index 34302a9f2d..a5de2b4b9e 100644 --- a/depends/patches/qt/fix_qt_pkgconfig.patch +++ b/depends/patches/qt/fix_qt_pkgconfig.patch @@ -1,11 +1,23 @@ --- old/qtbase/mkspecs/features/qt_module.prf +++ new/qtbase/mkspecs/features/qt_module.prf -@@ -245,7 +245,7 @@ +@@ -269,7 +269,7 @@ load(qt_installs) load(qt_targets) # this builds on top of qt_common --!internal_module:!lib_bundle:if(unix|mingw) { -+unix|mingw { +-!internal_module:if(unix|mingw) { ++if(unix|mingw):!if(darwin:debug_and_release:CONFIG(debug, debug|release)) { CONFIG += create_pc QMAKE_PKGCONFIG_DESTDIR = pkgconfig host_build: \ +@@ -284,9 +284,9 @@ load(qt_targets) + QMAKE_PKGCONFIG_CFLAGS = -D$$MODULE_DEFINE -I${includedir}/$$MODULE_INCNAME + } + QMAKE_PKGCONFIG_NAME = $$replace(TARGET, ^Qt, "Qt$$QT_MAJOR_VERSION ") +- QMAKE_PKGCONFIG_FILE = $$replace(TARGET, ^Qt, Qt$$QT_MAJOR_VERSION) ++ QMAKE_PKGCONFIG_FILE = $$replace(TARGET, ^Qt, Qt$$QT_MAJOR_VERSION)$$qtPlatformTargetSuffix() + for(i, MODULE_DEPENDS): \ +- QMAKE_PKGCONFIG_REQUIRES += $$replace(QT.$${i}.name, ^Qt, Qt$$section(QT.$${i}.VERSION, ., 0, 0)) ++ QMAKE_PKGCONFIG_REQUIRES += $$replace(QT.$${i}.name, ^Qt, Qt$$section(QT.$${i}.VERSION, ., 0, 0))$$qtPlatformTargetSuffix() + isEmpty(QMAKE_PKGCONFIG_DESCRIPTION): \ + QMAKE_PKGCONFIG_DESCRIPTION = $$replace(TARGET, ^Qt, "Qt ") module + !isEmpty(lib_replace0.match) { diff --git a/depends/patches/qt/fix_rcc_determinism.patch b/depends/patches/qt/fix_rcc_determinism.patch deleted file mode 100644 index c1b07fe23a..0000000000 --- a/depends/patches/qt/fix_rcc_determinism.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- old/qtbase/src/tools/rcc/rcc.cpp -+++ new/qtbase/src/tools/rcc/rcc.cpp -@@ -207,7 +207,11 @@ void RCCFileInfo::writeDataInfo(RCCResourceLibrary &lib) - if (lib.formatVersion() >= 2) { - // last modified time stamp - const QDateTime lastModified = m_fileInfo.lastModified(); -- lib.writeNumber8(quint64(lastModified.isValid() ? lastModified.toMSecsSinceEpoch() : 0)); -+ quint64 lastmod = quint64(lastModified.isValid() ? lastModified.toMSecsSinceEpoch() : 0); -+ static const quint64 sourceDate = 1000 * qgetenv("QT_RCC_SOURCE_DATE_OVERRIDE").toULongLong(); -+ if (sourceDate != 0) -+ lastmod = sourceDate; -+ lib.writeNumber8(lastmod); - if (text || pass1) - lib.writeChar('\n'); - } diff --git a/depends/patches/qt/fix_riscv64_arch.patch b/depends/patches/qt/fix_riscv64_arch.patch deleted file mode 100644 index e7f29f01f9..0000000000 --- a/depends/patches/qt/fix_riscv64_arch.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/qtbase/src/3rdparty/double-conversion/include/double-conversion/utils.h b/qtbase/src/3rdparty/double-conversion/include/double-conversion/utils.h -index 20bfd36..93729fa 100644 ---- a/qtbase/src/3rdparty/double-conversion/include/double-conversion/utils.h -+++ b/qtbase/src/3rdparty/double-conversion/include/double-conversion/utils.h -@@ -65,7 +65,8 @@ - defined(__sparc__) || defined(__sparc) || defined(__s390__) || \ - defined(__SH4__) || defined(__alpha__) || \ - defined(_MIPS_ARCH_MIPS32R2) || \ -- defined(__AARCH64EL__) -+ defined(__AARCH64EL__) || defined(__aarch64__) || \ -+ defined(__riscv) - #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 - #elif defined(_M_IX86) || defined(__i386__) || defined(__i386) - #if defined(_WIN32) diff --git a/depends/patches/qt/mac-qmake.conf b/depends/patches/qt/mac-qmake.conf index 4cd96df29f..e4bfaa1463 100644 --- a/depends/patches/qt/mac-qmake.conf +++ b/depends/patches/qt/mac-qmake.conf @@ -1,20 +1,18 @@ MAKEFILE_GENERATOR = UNIX -CONFIG += app_bundle incremental global_init_link_order lib_version_first plugin_no_soname absolute_library_soname +CONFIG += app_bundle incremental lib_version_first absolute_library_soname QMAKE_INCREMENTAL_STYLE = sublib include(../common/macx.conf) include(../common/gcc-base-mac.conf) include(../common/clang.conf) include(../common/clang-mac.conf) QMAKE_MAC_SDK_PATH=$${MAC_SDK_PATH} -QMAKE_XCODE_VERSION=4.3 +QMAKE_XCODE_VERSION = $${XCODE_VERSION} QMAKE_XCODE_DEVELOPER_PATH=/Developer -QMAKE_MACOSX_DEPLOYMENT_TARGET = $${MAC_MIN_VERSION} QMAKE_MAC_SDK=macosx QMAKE_MAC_SDK.macosx.Path = $${MAC_SDK_PATH} QMAKE_MAC_SDK.macosx.platform_name = macosx QMAKE_MAC_SDK.macosx.SDKVersion = $${MAC_SDK_VERSION} QMAKE_MAC_SDK.macosx.PlatformPath = /phony -QMAKE_APPLE_DEVICE_ARCHS=x86_64 !host_build: QMAKE_CFLAGS += -target $${MAC_TARGET} !host_build: QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_CFLAGS !host_build: QMAKE_CXXFLAGS += $$QMAKE_CFLAGS diff --git a/depends/patches/qt/no-xlib.patch b/depends/patches/qt/no-xlib.patch index fe82c2c73c..f4a6f09ee4 100644 --- a/depends/patches/qt/no-xlib.patch +++ b/depends/patches/qt/no-xlib.patch @@ -22,15 +22,15 @@ index 7c62c2e2b3..c05c6c0a07 100644 #include #include -@@ -384,6 +386,7 @@ void QXcbCursor::changeCursor(QCursor *cursor, QWindow *widget) - w->setCursor(c, isBitmapCursor); +@@ -391,6 +393,7 @@ void QXcbCursor::changeCursor(QCursor *cursor, QWindow *window) + xcb_flush(xcb_connection()); } +#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) static int cursorIdForShape(int cshape) { int cursorId = 0; -@@ -437,6 +440,7 @@ static int cursorIdForShape(int cshape) +@@ -444,6 +447,7 @@ static int cursorIdForShape(int cshape) } return cursorId; } @@ -38,7 +38,7 @@ index 7c62c2e2b3..c05c6c0a07 100644 xcb_cursor_t QXcbCursor::createNonStandardCursor(int cshape) { -@@ -558,7 +562,9 @@ static xcb_cursor_t loadCursor(void *dpy, int cshape) +@@ -556,7 +560,9 @@ static xcb_cursor_t loadCursor(void *dpy, int cshape) xcb_cursor_t QXcbCursor::createFontCursor(int cshape) { xcb_connection_t *conn = xcb_connection(); @@ -48,22 +48,23 @@ index 7c62c2e2b3..c05c6c0a07 100644 xcb_cursor_t cursor = XCB_NONE; // Try Xcursor first -@@ -589,6 +595,7 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape) +@@ -585,7 +591,7 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape) + // Non-standard X11 cursors are created from bitmaps cursor = createNonStandardCursor(cshape); - +- +#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library) // Create a glpyh cursor if everything else failed if (!cursor && cursorId) { cursor = xcb_generate_id(conn); -@@ -596,6 +603,7 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape) +@@ -593,6 +599,7 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape) cursorId, cursorId + 1, 0xFFFF, 0xFFFF, 0xFFFF, 0, 0, 0); } +#endif if (cursor && cshape >= 0 && cshape < Qt::LastCursor && connection()->hasXFixes()) { - const char *name = cursorNames[cshape]; + const char *name = cursorNames[cshape].front(); -- 2.22.0 diff --git a/depends/patches/qt/no_sdk_version_check.patch b/depends/patches/qt/no_sdk_version_check.patch new file mode 100644 index 0000000000..b16635b572 --- /dev/null +++ b/depends/patches/qt/no_sdk_version_check.patch @@ -0,0 +1,20 @@ +commit f5eb142cd04be2bc4ca610ed3b5b7e8ce3520ee3 +Author: fanquake +Date: Tue Jan 5 16:08:49 2021 +0800 + + Don't invoke macOS SDK version checking + + This tries to use xcrun which is not available when cross-compiling. + +diff --git a/qtbase/mkspecs/features/mac/default_post.prf b/qtbase/mkspecs/features/mac/default_post.prf +index 92a9112bca6..447e186eb26 100644 +--- a/qtbase/mkspecs/features/mac/default_post.prf ++++ b/qtbase/mkspecs/features/mac/default_post.prf +@@ -8,7 +8,6 @@ contains(TEMPLATE, .*app) { + !macx-xcode:if(isEmpty(BUILDS)|build_pass) { + # Detect changes to the platform SDK + QMAKE_EXTRA_VARIABLES += QMAKE_MAC_SDK QMAKE_MAC_SDK_VERSION QMAKE_XCODE_DEVELOPER_PATH +- QMAKE_EXTRA_INCLUDES += $$shell_quote($$PWD/sdk.mk) + } + + # Detect incompatible SDK versions diff --git a/depends/patches/qt/qt.pro b/depends/patches/qt/qt.pro new file mode 100644 index 0000000000..8f2e900a84 --- /dev/null +++ b/depends/patches/qt/qt.pro @@ -0,0 +1,16 @@ +# Create the super cache so modules will add themselves to it. +cache(, super) + +!QTDIR_build: cache(CONFIG, add, $$list(QTDIR_build)) + +prl = no_install_prl +CONFIG += $$prl +cache(CONFIG, add stash, prl) + +TEMPLATE = subdirs +SUBDIRS = qtbase qttools qttranslations + +qttools.depends = qtbase +qttranslations.depends = qttools + +load(qt_configure) diff --git a/depends/patches/qt/qtbase-moc-ignore-gcc-macro.patch b/depends/patches/qt/qtbase-moc-ignore-gcc-macro.patch new file mode 100644 index 0000000000..0358bea6e9 --- /dev/null +++ b/depends/patches/qt/qtbase-moc-ignore-gcc-macro.patch @@ -0,0 +1,17 @@ +The moc executable loops through headers on CPLUS_INCLUDE_PATH and stumbles +on the GCC internal _GLIBCXX_VISIBILITY macro. Tell it to ignore it as it is +not supposed to be looking there to begin with. + +Upstream report: https://bugreports.qt.io/browse/QTBUG-83160 + +diff --git a/qtbase/src/tools/moc/main.cpp b/qtbase/src/tools/moc/main.cpp +--- a/qtbase/src/tools/moc/main.cpp ++++ b/qtbase/src/tools/moc/main.cpp +@@ -188,6 +188,7 @@ int runMoc(int argc, char **argv) + dummyVariadicFunctionMacro.arguments += Symbol(0, PP_IDENTIFIER, "__VA_ARGS__"); + pp.macros["__attribute__"] = dummyVariadicFunctionMacro; + pp.macros["__declspec"] = dummyVariadicFunctionMacro; ++ pp.macros["_GLIBCXX_VISIBILITY"] = dummyVariadicFunctionMacro; + + QString filename; + QString output; diff --git a/depends/patches/qt/qttools_src.pro b/depends/patches/qt/qttools_src.pro new file mode 100644 index 0000000000..6ef71a0942 --- /dev/null +++ b/depends/patches/qt/qttools_src.pro @@ -0,0 +1,6 @@ +TEMPLATE = subdirs +SUBDIRS = linguist + +fb = force_bootstrap +CONFIG += $$fb +cache(CONFIG, add, fb) diff --git a/depends/patches/qt/support_new_android_ndks.patch b/depends/patches/qt/support_new_android_ndks.patch new file mode 100644 index 0000000000..85c8ae2132 --- /dev/null +++ b/depends/patches/qt/support_new_android_ndks.patch @@ -0,0 +1,122 @@ +Follow Google's BuildSystemMaintainers doc to support future NDK releases. + +Upstream commit: + - Qt 5.14: 9b14950ff600a4ce5a8698b67ab38907c50417f1 + +--- old/qtbase/mkspecs/android-clang/qmake.conf ++++ new/qtbase/mkspecs/android-clang/qmake.conf +@@ -14,43 +14,29 @@ + QMAKE_CC = $$NDK_LLVM_PATH/bin/clang + QMAKE_CXX = $$NDK_LLVM_PATH/bin/clang++ + ++# Follow https://android.googlesource.com/platform/ndk/+/ndk-release-r20/docs/BuildSystemMaintainers.md ++ + equals(ANDROID_TARGET_ARCH, armeabi-v7a): \ +- QMAKE_CFLAGS += -target armv7-none-linux-androideabi +-else: equals(ANDROID_TARGET_ARCH, armeabi): \ +- QMAKE_CFLAGS += -target armv5te-none-linux-androideabi ++ QMAKE_CFLAGS = -target armv7a-linux-androideabi$$replace(ANDROID_PLATFORM, "android-", "") + else: equals(ANDROID_TARGET_ARCH, arm64-v8a): \ +- QMAKE_CFLAGS += -target aarch64-none-linux-android ++ QMAKE_CFLAGS = -target aarch64-linux-android$$replace(ANDROID_PLATFORM, "android-", "") + else: equals(ANDROID_TARGET_ARCH, x86): \ +- QMAKE_CFLAGS += -target i686-none-linux-android -mstackrealign ++ QMAKE_CFLAGS = -target i686-linux-android$$replace(ANDROID_PLATFORM, "android-", "") -mstackrealign + else: equals(ANDROID_TARGET_ARCH, x86_64): \ +- QMAKE_CFLAGS += -target x86_64-none-linux-android +-else: equals(ANDROID_TARGET_ARCH, mips): \ +- QMAKE_CFLAGS += -target mipsel-none-linux-android +-else: equals(ANDROID_TARGET_ARCH, mips64): \ +- QMAKE_CFLAGS += -target mips64el-none-linux-android +- +-QMAKE_CFLAGS += -gcc-toolchain $$NDK_TOOLCHAIN_PATH -fno-limit-debug-info +- +-QMAKE_LINK = $$QMAKE_CXX $$QMAKE_CFLAGS -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -nostdlib++ +-equals(ANDROID_TARGET_ARCH, armeabi-v7a): QMAKE_LINK += -Wl,--exclude-libs,libunwind.a +- +-QMAKE_CFLAGS += -DANDROID_HAS_WSTRING --sysroot=$$NDK_ROOT/sysroot \ +- -isystem $$NDK_ROOT/sysroot/usr/include/$$NDK_TOOLS_PREFIX \ +- -isystem $$NDK_ROOT/sources/cxx-stl/llvm-libc++/include \ +- -isystem $$NDK_ROOT/sources/android/support/include \ +- -isystem $$NDK_ROOT/sources/cxx-stl/llvm-libc++abi/include ++ QMAKE_CFLAGS = -target x86_64-linux-android$$replace(ANDROID_PLATFORM, "android-", "") + +-ANDROID_SOURCES_CXX_STL_LIBDIR = $$NDK_ROOT/sources/cxx-stl/llvm-libc++/libs/$$ANDROID_TARGET_ARCH ++QMAKE_CFLAGS += -fno-limit-debug-info + +-ANDROID_STDCPP_PATH = $$ANDROID_SOURCES_CXX_STL_LIBDIR/libc++_shared.so ++QMAKE_LINK = $$QMAKE_CXX $$QMAKE_CFLAGS + +-ANDROID_USE_LLVM = true ++ANDROID_STDCPP_PATH = $$NDK_LLVM_PATH/sysroot/usr/lib/$$NDK_TOOLS_PREFIX/libc++_shared.so + +-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-", "") ++ANDROID_USE_LLVM = true + +-QMAKE_CFLAGS_OPTIMIZE_SIZE = -Oz ++QMAKE_CFLAGS_OPTIMIZE_SIZE = -Oz ++QMAKE_LIBDIR_POST = ++QMAKE_LFLAGS = ++QMAKE_LIBS_PRIVATE = ++ANDROID_CXX_STL_LIBS = + + include(../common/android-base-tail.conf) + +--- old/qtbase/mkspecs/common/android-base-head.conf ++++ new/qtbase/mkspecs/common/android-base-head.conf +@@ -64,7 +58,6 @@ + } + + CONFIG += $$ANDROID_PLATFORM +-QMAKE_CFLAGS = -D__ANDROID_API__=$$replace(ANDROID_PLATFORM, "android-", "") + + ANDROID_PLATFORM_ROOT_PATH = $$NDK_ROOT/platforms/$$ANDROID_PLATFORM/arch-$$ANDROID_ARCHITECTURE/ + +--- old/qtbase/mkspecs/common/android-base-tail.conf ++++ new/qtbase/mkspecs/common/android-base-tail.conf +@@ -6,22 +6,17 @@ + QMAKE_CFLAGS += -fstack-protector-strong -DANDROID + + equals(ANDROID_TARGET_ARCH, armeabi-v7a): \ +- QMAKE_CFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -fno-builtin-memmove ++ QMAKE_CFLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=vfp + else: equals(ANDROID_TARGET_ARCH, armeabi): \ +- QMAKE_CFLAGS += -march=armv5te -mtune=xscale -msoft-float -fno-builtin-memmove +-# -fno-builtin-memmove is used to workaround https://code.google.com/p/android/issues/detail?id=81692 ++ QMAKE_CFLAGS += -march=armv5te -mtune=xscale -msoft-float + + QMAKE_CFLAGS_WARN_ON = -Wall -W + QMAKE_CFLAGS_WARN_OFF = + equals(ANDROID_TARGET_ARCH, armeabi-v7a) | equals(ANDROID_TARGET_ARCH, armeabi) { + CONFIG += optimize_size + QMAKE_CFLAGS_DEBUG = -g -marm -O0 +- equals(ANDROID_TARGET_ARCH, armeabi):if(equals(NDK_TOOLCHAIN_VERSION, 4.8)|equals(NDK_TOOLCHAIN_VERSION, 4.9)) { +- DEFINES += QT_OS_ANDROID_GCC_48_WORKAROUND +- } else { +- QMAKE_CFLAGS_RELEASE += -mthumb +- QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -mthumb +- } ++ QMAKE_CFLAGS_RELEASE += -mthumb ++ QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -mthumb + } + + QMAKE_CFLAGS_SHLIB = -fPIC +@@ -61,15 +56,12 @@ + QMAKE_RANLIB = $${CROSS_COMPILE}ranlib + + QMAKE_INCDIR_POST = +-QMAKE_LIBDIR_POST = $$ANDROID_SOURCES_CXX_STL_LIBDIR + QMAKE_INCDIR_X11 = + QMAKE_LIBDIR_X11 = + QMAKE_INCDIR_OPENGL = + QMAKE_LIBDIR_OPENGL = + + QMAKE_LINK_SHLIB = $$QMAKE_LINK +-QMAKE_LFLAGS = --sysroot=$$ANDROID_PLATFORM_ROOT_PATH +-equals(ANDROID_TARGET_ARCH, x86_64) QMAKE_LFLAGS += -L$$ANDROID_PLATFORM_ROOT_PATH/usr/lib64 + QMAKE_LFLAGS_APP = -Wl,--no-undefined -Wl,-z,noexecstack -shared + QMAKE_LFLAGS_SHLIB = -Wl,--no-undefined -Wl,-z,noexecstack -shared + QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB diff --git a/depends/patches/qt/xkb-default.patch b/depends/patches/qt/xkb-default.patch deleted file mode 100644 index 165abf3e2e..0000000000 --- a/depends/patches/qt/xkb-default.patch +++ /dev/null @@ -1,26 +0,0 @@ ---- old/qtbase/src/gui/configure.pri 2018-06-06 17:28:10.000000000 -0400 -+++ new/qtbase/src/gui/configure.pri 2018-08-17 18:43:01.589384567 -0400 -@@ -43,18 +43,11 @@ - } - - defineTest(qtConfTest_xkbConfigRoot) { -- qtConfTest_getPkgConfigVariable($${1}): return(true) -- -- for (dir, $$list("/usr/share/X11/xkb", "/usr/local/share/X11/xkb")) { -- exists($$dir) { -- $${1}.value = $$dir -- export($${1}.value) -- $${1}.cache += value -- export($${1}.cache) -- return(true) -- } -- } -- return(false) -+ $${1}.value = "/usr/share/X11/xkb" -+ export($${1}.value) -+ $${1}.cache += value -+ export($${1}.cache) -+ return(true) - } - - defineTest(qtConfTest_qpaDefaultPlatform) { diff --git a/src/bls-signatures/CMakeLists.txt b/src/bls-signatures/CMakeLists.txt index 5a4201c335..306b96edfd 100644 --- a/src/bls-signatures/CMakeLists.txt +++ b/src/bls-signatures/CMakeLists.txt @@ -1,5 +1,5 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.1.0 FATAL_ERROR) -set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_POSITION_INDEPENDENT_CODE ON) IF(NOT CMAKE_BUILD_TYPE) diff --git a/src/bls-signatures/Makefile b/src/bls-signatures/Makefile index 379095679a..c703e229ce 100644 --- a/src/bls-signatures/Makefile +++ b/src/bls-signatures/Makefile @@ -16,7 +16,6 @@ distclean: rm -rf ./build/ check: all - ./build/src/runtest install: $(AM_V_at)$(MAKE) -C ./build/ install diff --git a/src/bls-signatures/configure-cmake.sh b/src/bls-signatures/configure-cmake.sh index 71910f2832..5d41cf9c25 100755 --- a/src/bls-signatures/configure-cmake.sh +++ b/src/bls-signatures/configure-cmake.sh @@ -14,7 +14,7 @@ esac if test "x$enable_tests" == "xyes" then - cmake_osflags="$cmake_osflags -DENABLE_TESTS=1" + cmake_osflags="$cmake_osflags -DENABLE_TESTS=0" fi cmake -Bbuild -H. -DCMAKE_INSTALL_PREFIX=$depends_prefix -DWSIZE=64 -DMULTI=PTHREAD -DARITH=gmp $cmake_osflags diff --git a/src/bls-signatures/contrib/catch/catch.hpp b/src/bls-signatures/contrib/catch/catch.hpp index aacc5601f3..0384171ae4 100644 --- a/src/bls-signatures/contrib/catch/catch.hpp +++ b/src/bls-signatures/contrib/catch/catch.hpp @@ -1,9 +1,9 @@ /* - * Catch v2.2.3 - * Generated: 2018-06-06 23:11:57.601416 + * Catch v2.13.4 + * Generated: 2020-12-29 14:48:00.116107 * ---------------------------------------------------------- * This file has been merged from multiple headers. Please don't edit it directly - * Copyright (c) 2018 Two Blue Cubes Ltd. All rights reserved. + * Copyright (c) 2020 Two Blue Cubes Ltd. All rights reserved. * * Distributed under the Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -14,8 +14,8 @@ #define CATCH_VERSION_MAJOR 2 -#define CATCH_VERSION_MINOR 2 -#define CATCH_VERSION_PATCH 3 +#define CATCH_VERSION_MINOR 13 +#define CATCH_VERSION_PATCH 4 #ifdef __clang__ # pragma clang system_header @@ -30,14 +30,17 @@ # pragma warning(push) # pragma warning(disable: 161 1682) # else // __ICC -# pragma clang diagnostic ignored "-Wunused-variable" # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wpadded" # pragma clang diagnostic ignored "-Wswitch-enum" # pragma clang diagnostic ignored "-Wcovered-switch-default" # endif #elif defined __GNUC__ -# pragma GCC diagnostic ignored "-Wparentheses" + // Because REQUIREs trigger GCC's -Wparentheses, and because still + // supported version of g++ have only buggy support for _Pragmas, + // Wparentheses have to be suppressed globally. +# pragma GCC diagnostic ignored "-Wparentheses" // See #674 for details + # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wunused-variable" # pragma GCC diagnostic ignored "-Wpadded" @@ -55,7 +58,9 @@ # if defined(CATCH_CONFIG_DISABLE_MATCHERS) # undef CATCH_CONFIG_DISABLE_MATCHERS # endif -# define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER +# if !defined(CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER) +# define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER +# endif #endif #if !defined(CATCH_CONFIG_IMPL_ONLY) @@ -104,6 +109,7 @@ namespace Catch { // CATCH_CONFIG_COUNTER : is the __COUNTER__ macro supported? // CATCH_CONFIG_WINDOWS_SEH : is Windows SEH supported? // CATCH_CONFIG_POSIX_SIGNALS : are POSIX signals supported? +// CATCH_CONFIG_DISABLE_EXCEPTIONS : Are exceptions enabled? // **************** // Note to maintainers: if new toggles are added please document them // in configuration.md, too @@ -116,34 +122,61 @@ namespace Catch { #ifdef __cplusplus -# if __cplusplus >= 201402L +# if (__cplusplus >= 201402L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L) # define CATCH_CPP14_OR_GREATER # endif -# if __cplusplus >= 201703L +# if (__cplusplus >= 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) # define CATCH_CPP17_OR_GREATER # endif #endif -#if defined(CATCH_CPP17_OR_GREATER) -# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS +// We have to avoid both ICC and Clang, because they try to mask themselves +// as gcc, and we want only GCC in this block +#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__) +# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic push" ) +# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic pop" ) + +# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) + #endif -#ifdef __clang__ +#if defined(__clang__) + +# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic push" ) +# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic pop" ) + +// As of this writing, IBM XL's implementation of __builtin_constant_p has a bug +// which results in calls to destructors being emitted for each temporary, +// without a matching initialization. In practice, this can result in something +// like `std::string::~string` being called on an uninitialized value. +// +// For example, this code will likely segfault under IBM XL: +// ``` +// REQUIRE(std::string("12") + "34" == "1234") +// ``` +// +// Therefore, `CATCH_INTERNAL_IGNORE_BUT_WARN` is not implemented. +# if !defined(__ibmxl__) && !defined(__CUDACC__) +# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__) /* NOLINT(cppcoreguidelines-pro-type-vararg, hicpp-vararg) */ +# endif + +# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ + _Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \ + _Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"") + +# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \ + _Pragma( "clang diagnostic ignored \"-Wparentheses\"" ) + +# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS \ + _Pragma( "clang diagnostic ignored \"-Wunused-variable\"" ) -# define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ - _Pragma( "clang diagnostic push" ) \ - _Pragma( "clang diagnostic ignored \"-Wexit-time-destructors\"" ) \ - _Pragma( "clang diagnostic ignored \"-Wglobal-constructors\"") -# define CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS \ - _Pragma( "clang diagnostic pop" ) +# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS \ + _Pragma( "clang diagnostic ignored \"-Wgnu-zero-variadic-macro-arguments\"" ) -# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \ - _Pragma( "clang diagnostic push" ) \ - _Pragma( "clang diagnostic ignored \"-Wparentheses\"" ) -# define CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS \ - _Pragma( "clang diagnostic pop" ) +# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS \ + _Pragma( "clang diagnostic ignored \"-Wunused-template\"" ) #endif // __clang__ @@ -168,6 +201,7 @@ namespace Catch { // Android somehow still does not support std::to_string #if defined(__ANDROID__) # define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING +# define CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE #endif //////////////////////////////////////////////////////////////////////////////// @@ -176,6 +210,12 @@ namespace Catch { # define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH #endif +//////////////////////////////////////////////////////////////////////////////// +// PS4 +#if defined(__ORBIS__) +# define CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE +#endif + //////////////////////////////////////////////////////////////////////////////// // Cygwin #ifdef __CYGWIN__ @@ -183,16 +223,22 @@ namespace Catch { // Required for some versions of Cygwin to declare gettimeofday // see: http://stackoverflow.com/questions/36901803/gettimeofday-not-declared-in-this-scope-cygwin # define _BSD_SOURCE +// some versions of cygwin (most) do not support std::to_string. Use the libstd check. +// https://gcc.gnu.org/onlinedocs/gcc-4.8.2/libstdc++/api/a01053_source.html line 2812-2813 +# if !((__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99) \ + && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF)) + +# define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING +# endif #endif // __CYGWIN__ //////////////////////////////////////////////////////////////////////////////// // Visual C++ -#ifdef _MSC_VER +#if defined(_MSC_VER) -# if _MSC_VER >= 1900 // Visual Studio 2015 or newer -# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS -# endif +# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION __pragma( warning(push) ) +# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION __pragma( warning(pop) ) // Universal Windows platform does not support SEH // Or console colours (or console at all...) @@ -202,15 +248,40 @@ namespace Catch { # define CATCH_INTERNAL_CONFIG_WINDOWS_SEH # endif +// MSVC traditional preprocessor needs some workaround for __VA_ARGS__ +// _MSVC_TRADITIONAL == 0 means new conformant preprocessor +// _MSVC_TRADITIONAL == 1 means old traditional non-conformant preprocessor +# if !defined(__clang__) // Handle Clang masquerading for msvc +# if !defined(_MSVC_TRADITIONAL) || (defined(_MSVC_TRADITIONAL) && _MSVC_TRADITIONAL) +# define CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR +# endif // MSVC_TRADITIONAL +# endif // __clang__ + +#endif // _MSC_VER + +#if defined(_REENTRANT) || defined(_MSC_VER) +// Enable async processing, as -pthread is specified or no additional linking is required +# define CATCH_INTERNAL_CONFIG_USE_ASYNC #endif // _MSC_VER //////////////////////////////////////////////////////////////////////////////// +// Check if we are compiled with -fno-exceptions or equivalent +#if defined(__EXCEPTIONS) || defined(__cpp_exceptions) || defined(_CPPUNWIND) +# define CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED +#endif +//////////////////////////////////////////////////////////////////////////////// // DJGPP #ifdef __DJGPP__ # define CATCH_INTERNAL_CONFIG_NO_WCHAR #endif // __DJGPP__ +//////////////////////////////////////////////////////////////////////////////// +// Embarcadero C++Build +#if defined(__BORLANDC__) + #define CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN +#endif + //////////////////////////////////////////////////////////////////////////////// // Use of __COUNTER__ is suppressed during code analysis in @@ -222,6 +293,58 @@ namespace Catch { #define CATCH_INTERNAL_CONFIG_COUNTER #endif +//////////////////////////////////////////////////////////////////////////////// + +// RTX is a special version of Windows that is real time. +// This means that it is detected as Windows, but does not provide +// the same set of capabilities as real Windows does. +#if defined(UNDER_RTSS) || defined(RTX64_BUILD) + #define CATCH_INTERNAL_CONFIG_NO_WINDOWS_SEH + #define CATCH_INTERNAL_CONFIG_NO_ASYNC + #define CATCH_CONFIG_COLOUR_NONE +#endif + +#if !defined(_GLIBCXX_USE_C99_MATH_TR1) +#define CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER +#endif + +// Various stdlib support checks that require __has_include +#if defined(__has_include) + // Check if string_view is available and usable + #if __has_include() && defined(CATCH_CPP17_OR_GREATER) + # define CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW + #endif + + // Check if optional is available and usable + # if __has_include() && defined(CATCH_CPP17_OR_GREATER) + # define CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL + # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) + + // Check if byte is available and usable + # if __has_include() && defined(CATCH_CPP17_OR_GREATER) + # include + # if __cpp_lib_byte > 0 + # define CATCH_INTERNAL_CONFIG_CPP17_BYTE + # endif + # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) + + // Check if variant is available and usable + # if __has_include() && defined(CATCH_CPP17_OR_GREATER) + # if defined(__clang__) && (__clang_major__ < 8) + // work around clang bug with libstdc++ https://bugs.llvm.org/show_bug.cgi?id=31852 + // fix should be in clang 8, workaround in libstdc++ 8.2 + # include + # if defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) + # define CATCH_CONFIG_NO_CPP17_VARIANT + # else + # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT + # endif // defined(__GLIBCXX__) && defined(_GLIBCXX_RELEASE) && (_GLIBCXX_RELEASE < 9) + # else + # define CATCH_INTERNAL_CONFIG_CPP17_VARIANT + # endif // defined(__clang__) && (__clang_major__ < 8) + # endif // __has_include() && defined(CATCH_CPP17_OR_GREATER) +#endif // defined(__has_include) + #if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) # define CATCH_CONFIG_COUNTER #endif @@ -241,17 +364,99 @@ namespace Catch { # define CATCH_CONFIG_CPP11_TO_STRING #endif -#if defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) -# define CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS +#if defined(CATCH_INTERNAL_CONFIG_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_NO_CPP17_OPTIONAL) && !defined(CATCH_CONFIG_CPP17_OPTIONAL) +# define CATCH_CONFIG_CPP17_OPTIONAL +#endif + +#if defined(CATCH_INTERNAL_CONFIG_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_NO_CPP17_STRING_VIEW) && !defined(CATCH_CONFIG_CPP17_STRING_VIEW) +# define CATCH_CONFIG_CPP17_STRING_VIEW +#endif + +#if defined(CATCH_INTERNAL_CONFIG_CPP17_VARIANT) && !defined(CATCH_CONFIG_NO_CPP17_VARIANT) && !defined(CATCH_CONFIG_CPP17_VARIANT) +# define CATCH_CONFIG_CPP17_VARIANT +#endif + +#if defined(CATCH_INTERNAL_CONFIG_CPP17_BYTE) && !defined(CATCH_CONFIG_NO_CPP17_BYTE) && !defined(CATCH_CONFIG_CPP17_BYTE) +# define CATCH_CONFIG_CPP17_BYTE +#endif + +#if defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT) +# define CATCH_INTERNAL_CONFIG_NEW_CAPTURE +#endif + +#if defined(CATCH_INTERNAL_CONFIG_NEW_CAPTURE) && !defined(CATCH_INTERNAL_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NO_NEW_CAPTURE) && !defined(CATCH_CONFIG_NEW_CAPTURE) +# define CATCH_CONFIG_NEW_CAPTURE +#endif + +#if !defined(CATCH_INTERNAL_CONFIG_EXCEPTIONS_ENABLED) && !defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) +# define CATCH_CONFIG_DISABLE_EXCEPTIONS +#endif + +#if defined(CATCH_INTERNAL_CONFIG_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_NO_POLYFILL_ISNAN) && !defined(CATCH_CONFIG_POLYFILL_ISNAN) +# define CATCH_CONFIG_POLYFILL_ISNAN +#endif + +#if defined(CATCH_INTERNAL_CONFIG_USE_ASYNC) && !defined(CATCH_INTERNAL_CONFIG_NO_ASYNC) && !defined(CATCH_CONFIG_NO_USE_ASYNC) && !defined(CATCH_CONFIG_USE_ASYNC) +# define CATCH_CONFIG_USE_ASYNC +#endif + +#if defined(CATCH_INTERNAL_CONFIG_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_NO_ANDROID_LOGWRITE) && !defined(CATCH_CONFIG_ANDROID_LOGWRITE) +# define CATCH_CONFIG_ANDROID_LOGWRITE +#endif + +#if defined(CATCH_INTERNAL_CONFIG_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_NO_GLOBAL_NEXTAFTER) && !defined(CATCH_CONFIG_GLOBAL_NEXTAFTER) +# define CATCH_CONFIG_GLOBAL_NEXTAFTER #endif +// Even if we do not think the compiler has that warning, we still have +// to provide a macro that can be used by the code. +#if !defined(CATCH_INTERNAL_START_WARNINGS_SUPPRESSION) +# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION +#endif +#if !defined(CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION) +# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION +#endif #if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS) # define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS -# define CATCH_INTERNAL_UNSUPPRESS_PARENTHESES_WARNINGS #endif #if !defined(CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS) # define CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS -# define CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS +#endif +#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS) +# define CATCH_INTERNAL_SUPPRESS_UNUSED_WARNINGS +#endif +#if !defined(CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS) +# define CATCH_INTERNAL_SUPPRESS_ZERO_VARIADIC_WARNINGS +#endif + +// The goal of this macro is to avoid evaluation of the arguments, but +// still have the compiler warn on problems inside... +#if !defined(CATCH_INTERNAL_IGNORE_BUT_WARN) +# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) +#endif + +#if defined(__APPLE__) && defined(__apple_build_version__) && (__clang_major__ < 10) +# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS +#elif defined(__clang__) && (__clang_major__ < 5) +# undef CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS +#endif + +#if !defined(CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS) +# define CATCH_INTERNAL_SUPPRESS_UNUSED_TEMPLATE_WARNINGS +#endif + +#if defined(CATCH_CONFIG_DISABLE_EXCEPTIONS) +#define CATCH_TRY if ((true)) +#define CATCH_CATCH_ALL if ((false)) +#define CATCH_CATCH_ANON(type) if ((false)) +#else +#define CATCH_TRY try +#define CATCH_CATCH_ALL catch (...) +#define CATCH_CATCH_ANON(type) catch (type) +#endif + +#if defined(CATCH_INTERNAL_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_NO_TRADITIONAL_MSVC_PREPROCESSOR) && !defined(CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR) +#define CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR #endif // end catch_compiler_capabilities.h @@ -267,6 +472,10 @@ namespace Catch { #include #include +// We need a dummy global operator<< so we can bring it into Catch namespace later +struct Catch_global_namespace_dummy {}; +std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy); + namespace Catch { struct CaseSensitive { enum Choice { @@ -293,12 +502,12 @@ namespace Catch { line( _line ) {} - SourceLineInfo( SourceLineInfo const& other ) = default; - SourceLineInfo( SourceLineInfo && ) = default; - SourceLineInfo& operator = ( SourceLineInfo const& ) = default; - SourceLineInfo& operator = ( SourceLineInfo && ) = default; + SourceLineInfo( SourceLineInfo const& other ) = default; + SourceLineInfo& operator = ( SourceLineInfo const& ) = default; + SourceLineInfo( SourceLineInfo&& ) noexcept = default; + SourceLineInfo& operator = ( SourceLineInfo&& ) noexcept = default; - bool empty() const noexcept; + bool empty() const noexcept { return file[0] == '\0'; } bool operator == ( SourceLineInfo const& other ) const noexcept; bool operator < ( SourceLineInfo const& other ) const noexcept; @@ -308,6 +517,11 @@ namespace Catch { std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ); + // Bring in operator<< from global namespace into Catch namespace + // This is necessary because the overload of operator<< above makes + // lookup stop at namespace Catch + using ::operator<<; + // Use this in variadic streaming macros to allow // >> +StreamEndStop // as well as @@ -334,9 +548,10 @@ namespace Catch { } // end namespace Catch #define CATCH_REGISTER_TAG_ALIAS( alias, spec ) \ + CATCH_INTERNAL_START_WARNINGS_SUPPRESSION \ CATCH_INTERNAL_SUPPRESS_GLOBALS_WARNINGS \ namespace{ Catch::RegistrarForTagAliases INTERNAL_CATCH_UNIQUE_NAME( AutoRegisterTagAlias )( alias, spec, CATCH_INTERNAL_LINEINFO ); } \ - CATCH_INTERNAL_UNSUPPRESS_GLOBALS_WARNINGS + CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION // end catch_tag_alias_autoregistrar.h // start catch_test_registry.h @@ -344,7 +559,6 @@ namespace Catch { // start catch_interfaces_testcase.h #include -#include namespace Catch { @@ -355,8 +569,6 @@ namespace Catch { virtual ~ITestInvoker(); }; - using ITestCasePtr = std::shared_ptr; - class TestCase; struct IConfig; @@ -366,6 +578,7 @@ namespace Catch { virtual std::vector const& getAllTestsSorted( IConfig const& config ) const = 0; }; + bool isThrowSafe( TestCase const& testCase, IConfig const& config ); bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ); std::vector filterTests( std::vector const& testCases, TestSpec const& testSpec, IConfig const& config ); std::vector const& getAllTestCasesSorted( IConfig const& config ); @@ -378,55 +591,30 @@ namespace Catch { #include #include #include +#include namespace Catch { - class StringData; - /// A non-owning string class (similar to the forthcoming std::string_view) /// Note that, because a StringRef may be a substring of another string, - /// it may not be null terminated. c_str() must return a null terminated - /// string, however, and so the StringRef will internally take ownership - /// (taking a copy), if necessary. In theory this ownership is not externally - /// visible - but it does mean (substring) StringRefs should not be shared between - /// threads. + /// it may not be null terminated. class StringRef { public: using size_type = std::size_t; + using const_iterator = const char*; private: - friend struct StringRefTestAccess; - - char const* m_start; - size_type m_size; - - char* m_data = nullptr; - - void takeOwnership(); - static constexpr char const* const s_empty = ""; - public: // construction/ assignment - StringRef() noexcept - : StringRef( s_empty, 0 ) - {} - - StringRef( StringRef const& other ) noexcept - : m_start( other.m_start ), - m_size( other.m_size ) - {} + char const* m_start = s_empty; + size_type m_size = 0; - StringRef( StringRef&& other ) noexcept - : m_start( other.m_start ), - m_size( other.m_size ), - m_data( other.m_data ) - { - other.m_data = nullptr; - } + public: // construction + constexpr StringRef() noexcept = default; StringRef( char const* rawChars ) noexcept; - StringRef( char const* rawChars, size_type size ) noexcept + constexpr StringRef( char const* rawChars, size_type size ) noexcept : m_start( rawChars ), m_size( size ) {} @@ -436,65 +624,333 @@ namespace Catch { m_size( stdString.size() ) {} - ~StringRef() noexcept { - delete[] m_data; - } - - auto operator = ( StringRef const &other ) noexcept -> StringRef& { - delete[] m_data; - m_data = nullptr; - m_start = other.m_start; - m_size = other.m_size; - return *this; + explicit operator std::string() const { + return std::string(m_start, m_size); } - operator std::string() const; - - void swap( StringRef& other ) noexcept; - public: // operators auto operator == ( StringRef const& other ) const noexcept -> bool; - auto operator != ( StringRef const& other ) const noexcept -> bool; + auto operator != (StringRef const& other) const noexcept -> bool { + return !(*this == other); + } - auto operator[] ( size_type index ) const noexcept -> char; + auto operator[] ( size_type index ) const noexcept -> char { + assert(index < m_size); + return m_start[index]; + } public: // named queries - auto empty() const noexcept -> bool { + constexpr auto empty() const noexcept -> bool { return m_size == 0; } - auto size() const noexcept -> size_type { + constexpr auto size() const noexcept -> size_type { return m_size; } - auto numberOfCharacters() const noexcept -> size_type; + // Returns the current start pointer. If the StringRef is not + // null-terminated, throws std::domain_exception auto c_str() const -> char const*; public: // substrings and searches - auto substr( size_type start, size_type size ) const noexcept -> StringRef; + // Returns a substring of [start, start + length). + // If start + length > size(), then the substring is [start, size()). + // If start > size(), then the substring is empty. + auto substr( size_type start, size_type length ) const noexcept -> StringRef; - // Returns the current start pointer. - // Note that the pointer can change when if the StringRef is a substring - auto currentData() const noexcept -> char const*; + // Returns the current start pointer. May not be null-terminated. + auto data() const noexcept -> char const*; - private: // ownership queries - may not be consistent between calls - auto isOwned() const noexcept -> bool; - auto isSubstring() const noexcept -> bool; - }; + constexpr auto isNullTerminated() const noexcept -> bool { + return m_start[m_size] == '\0'; + } - auto operator + ( StringRef const& lhs, StringRef const& rhs ) -> std::string; - auto operator + ( StringRef const& lhs, char const* rhs ) -> std::string; - auto operator + ( char const* lhs, StringRef const& rhs ) -> std::string; + public: // iterators + constexpr const_iterator begin() const { return m_start; } + constexpr const_iterator end() const { return m_start + m_size; } + }; auto operator += ( std::string& lhs, StringRef const& sr ) -> std::string&; auto operator << ( std::ostream& os, StringRef const& sr ) -> std::ostream&; - inline auto operator "" _sr( char const* rawChars, std::size_t size ) noexcept -> StringRef { + constexpr auto operator "" _sr( char const* rawChars, std::size_t size ) noexcept -> StringRef { return StringRef( rawChars, size ); } - } // namespace Catch +constexpr auto operator "" _catch_sr( char const* rawChars, std::size_t size ) noexcept -> Catch::StringRef { + return Catch::StringRef( rawChars, size ); +} + // end catch_stringref.h +// start catch_preprocessor.hpp + + +#define CATCH_RECURSION_LEVEL0(...) __VA_ARGS__ +#define CATCH_RECURSION_LEVEL1(...) CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(CATCH_RECURSION_LEVEL0(__VA_ARGS__))) +#define CATCH_RECURSION_LEVEL2(...) CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(CATCH_RECURSION_LEVEL1(__VA_ARGS__))) +#define CATCH_RECURSION_LEVEL3(...) CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(CATCH_RECURSION_LEVEL2(__VA_ARGS__))) +#define CATCH_RECURSION_LEVEL4(...) CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(CATCH_RECURSION_LEVEL3(__VA_ARGS__))) +#define CATCH_RECURSION_LEVEL5(...) CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(CATCH_RECURSION_LEVEL4(__VA_ARGS__))) + +#ifdef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR +#define INTERNAL_CATCH_EXPAND_VARGS(...) __VA_ARGS__ +// MSVC needs more evaluations +#define CATCH_RECURSION_LEVEL6(...) CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(CATCH_RECURSION_LEVEL5(__VA_ARGS__))) +#define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL6(CATCH_RECURSION_LEVEL6(__VA_ARGS__)) +#else +#define CATCH_RECURSE(...) CATCH_RECURSION_LEVEL5(__VA_ARGS__) +#endif + +#define CATCH_REC_END(...) +#define CATCH_REC_OUT + +#define CATCH_EMPTY() +#define CATCH_DEFER(id) id CATCH_EMPTY() + +#define CATCH_REC_GET_END2() 0, CATCH_REC_END +#define CATCH_REC_GET_END1(...) CATCH_REC_GET_END2 +#define CATCH_REC_GET_END(...) CATCH_REC_GET_END1 +#define CATCH_REC_NEXT0(test, next, ...) next CATCH_REC_OUT +#define CATCH_REC_NEXT1(test, next) CATCH_DEFER ( CATCH_REC_NEXT0 ) ( test, next, 0) +#define CATCH_REC_NEXT(test, next) CATCH_REC_NEXT1(CATCH_REC_GET_END test, next) + +#define CATCH_REC_LIST0(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ ) +#define CATCH_REC_LIST1(f, x, peek, ...) , f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0) ) ( f, peek, __VA_ARGS__ ) +#define CATCH_REC_LIST2(f, x, peek, ...) f(x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1) ) ( f, peek, __VA_ARGS__ ) + +#define CATCH_REC_LIST0_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ ) +#define CATCH_REC_LIST1_UD(f, userdata, x, peek, ...) , f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST0_UD) ) ( f, userdata, peek, __VA_ARGS__ ) +#define CATCH_REC_LIST2_UD(f, userdata, x, peek, ...) f(userdata, x) CATCH_DEFER ( CATCH_REC_NEXT(peek, CATCH_REC_LIST1_UD) ) ( f, userdata, peek, __VA_ARGS__ ) + +// Applies the function macro `f` to each of the remaining parameters, inserts commas between the results, +// and passes userdata as the first parameter to each invocation, +// e.g. CATCH_REC_LIST_UD(f, x, a, b, c) evaluates to f(x, a), f(x, b), f(x, c) +#define CATCH_REC_LIST_UD(f, userdata, ...) CATCH_RECURSE(CATCH_REC_LIST2_UD(f, userdata, __VA_ARGS__, ()()(), ()()(), ()()(), 0)) + +#define CATCH_REC_LIST(f, ...) CATCH_RECURSE(CATCH_REC_LIST2(f, __VA_ARGS__, ()()(), ()()(), ()()(), 0)) + +#define INTERNAL_CATCH_EXPAND1(param) INTERNAL_CATCH_EXPAND2(param) +#define INTERNAL_CATCH_EXPAND2(...) INTERNAL_CATCH_NO## __VA_ARGS__ +#define INTERNAL_CATCH_DEF(...) INTERNAL_CATCH_DEF __VA_ARGS__ +#define INTERNAL_CATCH_NOINTERNAL_CATCH_DEF +#define INTERNAL_CATCH_STRINGIZE(...) INTERNAL_CATCH_STRINGIZE2(__VA_ARGS__) +#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR +#define INTERNAL_CATCH_STRINGIZE2(...) #__VA_ARGS__ +#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) +#else +// MSVC is adding extra space and needs another indirection to expand INTERNAL_CATCH_NOINTERNAL_CATCH_DEF +#define INTERNAL_CATCH_STRINGIZE2(...) INTERNAL_CATCH_STRINGIZE3(__VA_ARGS__) +#define INTERNAL_CATCH_STRINGIZE3(...) #__VA_ARGS__ +#define INTERNAL_CATCH_STRINGIZE_WITHOUT_PARENS(param) (INTERNAL_CATCH_STRINGIZE(INTERNAL_CATCH_REMOVE_PARENS(param)) + 1) +#endif + +#define INTERNAL_CATCH_MAKE_NAMESPACE2(...) ns_##__VA_ARGS__ +#define INTERNAL_CATCH_MAKE_NAMESPACE(name) INTERNAL_CATCH_MAKE_NAMESPACE2(name) + +#define INTERNAL_CATCH_REMOVE_PARENS(...) INTERNAL_CATCH_EXPAND1(INTERNAL_CATCH_DEF __VA_ARGS__) + +#ifndef CATCH_CONFIG_TRADITIONAL_MSVC_PREPROCESSOR +#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) decltype(get_wrapper()) +#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__)) +#else +#define INTERNAL_CATCH_MAKE_TYPE_LIST2(...) INTERNAL_CATCH_EXPAND_VARGS(decltype(get_wrapper())) +#define INTERNAL_CATCH_MAKE_TYPE_LIST(...) INTERNAL_CATCH_EXPAND_VARGS(INTERNAL_CATCH_MAKE_TYPE_LIST2(INTERNAL_CATCH_REMOVE_PARENS(__VA_ARGS__))) +#endif + +#define INTERNAL_CATCH_MAKE_TYPE_LISTS_FROM_TYPES(...)\ + CATCH_REC_LIST(INTERNAL_CATCH_MAKE_TYPE_LIST,__VA_ARGS__) + +#define INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_0) INTERNAL_CATCH_REMOVE_PARENS(_0) +#define INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_0, _1) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_1_ARG(_1) +#define INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_0, _1, _2) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_2_ARG(_1, _2) +#define INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_0, _1, _2, _3) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_3_ARG(_1, _2, _3) +#define INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_0, _1, _2, _3, _4) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_4_ARG(_1, _2, _3, _4) +#define INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_0, _1, _2, _3, _4, _5) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_5_ARG(_1, _2, _3, _4, _5) +#define INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_0, _1, _2, _3, _4, _5, _6) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_6_ARG(_1, _2, _3, _4, _5, _6) +#define INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_0, _1, _2, _3, _4, _5, _6, _7) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_7_ARG(_1, _2, _3, _4, _5, _6, _7) +#define INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_8_ARG(_1, _2, _3, _4, _5, _6, _7, _8) +#define INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_9_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9) +#define INTERNAL_CATCH_REMOVE_PARENS_11_ARG(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10) INTERNAL_CATCH_REMOVE_PARENS(_0), INTERNAL_CATCH_REMOVE_PARENS_10_ARG(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10) + +#define INTERNAL_CATCH_VA_NARGS_IMPL(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, ...) N + +#define INTERNAL_CATCH_TYPE_GEN\ + template struct TypeList {};\ + template\ + constexpr auto get_wrapper() noexcept -> TypeList { return {}; }\ + template class...> struct TemplateTypeList{};\ + template class...Cs>\ + constexpr auto get_wrapper() noexcept -> TemplateTypeList { return {}; }\ + template\ + struct append;\ + template\ + struct rewrap;\ + template class, typename...>\ + struct create;\ + template class, typename>\ + struct convert;\ + \ + template \ + struct append { using type = T; };\ + template< template class L1, typename...E1, template class L2, typename...E2, typename...Rest>\ + struct append, L2, Rest...> { using type = typename append, Rest...>::type; };\ + template< template class L1, typename...E1, typename...Rest>\ + struct append, TypeList, Rest...> { using type = L1; };\ + \ + template< template class Container, template class List, typename...elems>\ + struct rewrap, List> { using type = TypeList>; };\ + template< template class Container, template class List, class...Elems, typename...Elements>\ + struct rewrap, List, Elements...> { using type = typename append>, typename rewrap, Elements...>::type>::type; };\ + \ + template