From b9d3f3aa0acdd496edb9f070a22f719560b2cfa5 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 26 Mar 2024 15:31:25 +1000 Subject: [PATCH 1/8] Add fixed elevation range per dataset group mode for mesh layers This mimics the "fixed range per band" mode we have for raster layers, but allows a per-dataset group elevation range to be set for mesh layers --- python/PyQt6/core/auto_additions/qgis.py | 3 +- .../auto_generated/mesh/qgsmeshlayer.sip.in | 30 +- .../qgsmeshlayerelevationproperties.sip.in | 36 ++ python/PyQt6/core/auto_generated/qgis.sip.in | 3 +- python/core/auto_additions/qgis.py | 3 +- .../auto_generated/mesh/qgsmeshlayer.sip.in | 30 +- .../qgsmeshlayerelevationproperties.sip.in | 36 ++ python/core/auto_generated/qgis.sip.in | 3 +- .../mesh/qgsmeshelevationpropertieswidget.cpp | 331 +++++++++++++++++ .../mesh/qgsmeshelevationpropertieswidget.h | 48 +++ src/core/mesh/qgsmeshlayer.cpp | 20 +- src/core/mesh/qgsmeshlayer.h | 26 +- .../mesh/qgsmeshlayerelevationproperties.cpp | 101 ++++++ .../mesh/qgsmeshlayerelevationproperties.h | 27 ++ src/core/mesh/qgsmeshlayerrenderer.cpp | 62 +++- src/core/qgis.h | 3 +- .../qgsmeshelevationpropertieswidgetbase.ui | 338 +++++++++++------- tests/src/python/test_qgsmeshlayerrenderer.py | 66 ++++ ...d_elevation_range_per_group_match1and2.png | Bin 0 -> 471523 bytes ...ected_elevation_range_per_group_match3.png | Bin 0 -> 471523 bytes ...ed_elevation_range_per_group_no_filter.png | Bin 0 -> 471523 bytes 21 files changed, 957 insertions(+), 209 deletions(-) create mode 100644 tests/testdata/control_images/mesh/expected_elevation_range_per_group_match1and2/expected_elevation_range_per_group_match1and2.png create mode 100644 tests/testdata/control_images/mesh/expected_elevation_range_per_group_match3/expected_elevation_range_per_group_match3.png create mode 100644 tests/testdata/control_images/mesh/expected_elevation_range_per_group_no_filter/expected_elevation_range_per_group_no_filter.png diff --git a/python/PyQt6/core/auto_additions/qgis.py b/python/PyQt6/core/auto_additions/qgis.py index 7c5c22663f2b..5d10aa2e64fb 100644 --- a/python/PyQt6/core/auto_additions/qgis.py +++ b/python/PyQt6/core/auto_additions/qgis.py @@ -3278,7 +3278,8 @@ # monkey patching scoped based enum Qgis.MeshElevationMode.FixedElevationRange.__doc__ = "Layer has a fixed elevation range" Qgis.MeshElevationMode.FromVertices.__doc__ = "Elevation should be taken from mesh vertices" -Qgis.MeshElevationMode.__doc__ = "Mesh layer elevation modes.\n\n.. versionadded:: 3.38\n\n" + '* ``FixedElevationRange``: ' + Qgis.MeshElevationMode.FixedElevationRange.__doc__ + '\n' + '* ``FromVertices``: ' + Qgis.MeshElevationMode.FromVertices.__doc__ +Qgis.MeshElevationMode.FixedRangePerGroup.__doc__ = "Layer has a fixed (manually specified) elevation range per group" +Qgis.MeshElevationMode.__doc__ = "Mesh layer elevation modes.\n\n.. versionadded:: 3.38\n\n" + '* ``FixedElevationRange``: ' + Qgis.MeshElevationMode.FixedElevationRange.__doc__ + '\n' + '* ``FromVertices``: ' + Qgis.MeshElevationMode.FromVertices.__doc__ + '\n' + '* ``FixedRangePerGroup``: ' + Qgis.MeshElevationMode.FixedRangePerGroup.__doc__ # -- Qgis.MeshElevationMode.baseClass = Qgis # monkey patching scoped based enum diff --git a/python/PyQt6/core/auto_generated/mesh/qgsmeshlayer.sip.in b/python/PyQt6/core/auto_generated/mesh/qgsmeshlayer.sip.in index ad3f120c534f..89931877d2c7 100644 --- a/python/PyQt6/core/auto_generated/mesh/qgsmeshlayer.sip.in +++ b/python/PyQt6/core/auto_generated/mesh/qgsmeshlayer.sip.in @@ -592,52 +592,54 @@ Dataset index is valid even the temporal properties is inactive. This method is .. versionadded:: 3.22 %End - QgsMeshDatasetIndex activeScalarDatasetAtTime( const QgsDateTimeRange &timeRange ) const; + QgsMeshDatasetIndex activeScalarDatasetAtTime( const QgsDateTimeRange &timeRange, int group = -1 ) const; %Docstring Returns dataset index from active scalar group depending on the time range. If the temporal properties is not active, return the static dataset -:param timeRange: the time range - -:return: dataset index +Since QGIS 3.38, the ``group`` argument can be used to specify a fixed group +to use. If this is not specified, then the active group from the layer's renderer will be used. .. note:: the returned dataset index depends on the matching method, see :py:func:`~QgsMeshLayer.setTemporalMatchingMethod` - .. versionadded:: 3.14 %End - QgsMeshDatasetIndex activeVectorDatasetAtTime( const QgsDateTimeRange &timeRange ) const; + QgsMeshDatasetIndex activeVectorDatasetAtTime( const QgsDateTimeRange &timeRange, int group = -1 ) const; %Docstring Returns dataset index from active vector group depending on the time range If the temporal properties is not active, return the static dataset -:param timeRange: the time range - -:return: dataset index +Since QGIS 3.38, the ``group`` argument can be used to specify a fixed group +to use. If this is not specified, then the active group from the layer's renderer will be used. .. note:: the returned dataset index depends on the matching method, see :py:func:`~QgsMeshLayer.setTemporalMatchingMethod` - .. versionadded:: 3.14 %End - QgsMeshDatasetIndex staticScalarDatasetIndex() const; + QgsMeshDatasetIndex staticScalarDatasetIndex( int group = -1 ) const; %Docstring -Returns the static scalar dataset index that is rendered if the temporal properties is not active +Returns the static scalar dataset index that is rendered if the temporal properties is not active. + +Since QGIS 3.38, the ``group`` argument can be used to specify a fixed group +to use. If this is not specified, then the active group from the layer's renderer will be used. .. versionadded:: 3.14 %End - QgsMeshDatasetIndex staticVectorDatasetIndex() const; + QgsMeshDatasetIndex staticVectorDatasetIndex( int group = -1 ) const; %Docstring -Returns the static vector dataset index that is rendered if the temporal properties is not active +Returns the static vector dataset index that is rendered if the temporal properties is not active. + +Since QGIS 3.38, the ``group`` argument can be used to specify a fixed group +to use. If this is not specified, then the active group from the layer's renderer will be used. .. versionadded:: 3.14 %End diff --git a/python/PyQt6/core/auto_generated/mesh/qgsmeshlayerelevationproperties.sip.in b/python/PyQt6/core/auto_generated/mesh/qgsmeshlayerelevationproperties.sip.in index f15a152d4cf7..28266b6c237c 100644 --- a/python/PyQt6/core/auto_generated/mesh/qgsmeshlayerelevationproperties.sip.in +++ b/python/PyQt6/core/auto_generated/mesh/qgsmeshlayerelevationproperties.sip.in @@ -100,6 +100,42 @@ Sets the fixed elevation ``range`` for the mesh. .. seealso:: :py:func:`fixedRange` +.. versionadded:: 3.38 +%End + + QMap fixedRangePerGroup() const; +%Docstring +Returns the fixed elevation range for each group. + +.. note:: + + This is only considered when :py:func:`~QgsMeshLayerElevationProperties.mode` is :py:class:`Qgis`.MeshElevationMode.FixedRangePerGroup. + +.. note:: + + When a fixed range is set any :py:func:`~QgsMeshLayerElevationProperties.zOffset` and :py:func:`~QgsMeshLayerElevationProperties.zScale` is ignored. + + +.. seealso:: :py:func:`setFixedRangePerGroup` + +.. versionadded:: 3.38 +%End + + void setFixedRangePerGroup( const QMap &ranges ); +%Docstring +Sets the fixed elevation range for each group. + +.. note:: + + This is only considered when :py:func:`~QgsMeshLayerElevationProperties.mode` is :py:class:`Qgis`.MeshElevationMode.FixedRangePerGroup. + +.. note:: + + When a fixed range is set any :py:func:`~QgsMeshLayerElevationProperties.zOffset` and :py:func:`~QgsMeshLayerElevationProperties.zScale` is ignored. + + +.. seealso:: :py:func:`fixedRangePerGroup` + .. versionadded:: 3.38 %End diff --git a/python/PyQt6/core/auto_generated/qgis.sip.in b/python/PyQt6/core/auto_generated/qgis.sip.in index 2c84aca227df..879b61c981c4 100644 --- a/python/PyQt6/core/auto_generated/qgis.sip.in +++ b/python/PyQt6/core/auto_generated/qgis.sip.in @@ -1888,7 +1888,8 @@ The development version enum class MeshElevationMode /BaseType=IntEnum/ { FixedElevationRange, - FromVertices + FromVertices, + FixedRangePerGroup, }; enum class BetweenLineConstraint /BaseType=IntEnum/ diff --git a/python/core/auto_additions/qgis.py b/python/core/auto_additions/qgis.py index d04309e17602..e47789aef6aa 100644 --- a/python/core/auto_additions/qgis.py +++ b/python/core/auto_additions/qgis.py @@ -3223,7 +3223,8 @@ # monkey patching scoped based enum Qgis.MeshElevationMode.FixedElevationRange.__doc__ = "Layer has a fixed elevation range" Qgis.MeshElevationMode.FromVertices.__doc__ = "Elevation should be taken from mesh vertices" -Qgis.MeshElevationMode.__doc__ = "Mesh layer elevation modes.\n\n.. versionadded:: 3.38\n\n" + '* ``FixedElevationRange``: ' + Qgis.MeshElevationMode.FixedElevationRange.__doc__ + '\n' + '* ``FromVertices``: ' + Qgis.MeshElevationMode.FromVertices.__doc__ +Qgis.MeshElevationMode.FixedRangePerGroup.__doc__ = "Layer has a fixed (manually specified) elevation range per group" +Qgis.MeshElevationMode.__doc__ = "Mesh layer elevation modes.\n\n.. versionadded:: 3.38\n\n" + '* ``FixedElevationRange``: ' + Qgis.MeshElevationMode.FixedElevationRange.__doc__ + '\n' + '* ``FromVertices``: ' + Qgis.MeshElevationMode.FromVertices.__doc__ + '\n' + '* ``FixedRangePerGroup``: ' + Qgis.MeshElevationMode.FixedRangePerGroup.__doc__ # -- Qgis.MeshElevationMode.baseClass = Qgis # monkey patching scoped based enum diff --git a/python/core/auto_generated/mesh/qgsmeshlayer.sip.in b/python/core/auto_generated/mesh/qgsmeshlayer.sip.in index ad3f120c534f..89931877d2c7 100644 --- a/python/core/auto_generated/mesh/qgsmeshlayer.sip.in +++ b/python/core/auto_generated/mesh/qgsmeshlayer.sip.in @@ -592,52 +592,54 @@ Dataset index is valid even the temporal properties is inactive. This method is .. versionadded:: 3.22 %End - QgsMeshDatasetIndex activeScalarDatasetAtTime( const QgsDateTimeRange &timeRange ) const; + QgsMeshDatasetIndex activeScalarDatasetAtTime( const QgsDateTimeRange &timeRange, int group = -1 ) const; %Docstring Returns dataset index from active scalar group depending on the time range. If the temporal properties is not active, return the static dataset -:param timeRange: the time range - -:return: dataset index +Since QGIS 3.38, the ``group`` argument can be used to specify a fixed group +to use. If this is not specified, then the active group from the layer's renderer will be used. .. note:: the returned dataset index depends on the matching method, see :py:func:`~QgsMeshLayer.setTemporalMatchingMethod` - .. versionadded:: 3.14 %End - QgsMeshDatasetIndex activeVectorDatasetAtTime( const QgsDateTimeRange &timeRange ) const; + QgsMeshDatasetIndex activeVectorDatasetAtTime( const QgsDateTimeRange &timeRange, int group = -1 ) const; %Docstring Returns dataset index from active vector group depending on the time range If the temporal properties is not active, return the static dataset -:param timeRange: the time range - -:return: dataset index +Since QGIS 3.38, the ``group`` argument can be used to specify a fixed group +to use. If this is not specified, then the active group from the layer's renderer will be used. .. note:: the returned dataset index depends on the matching method, see :py:func:`~QgsMeshLayer.setTemporalMatchingMethod` - .. versionadded:: 3.14 %End - QgsMeshDatasetIndex staticScalarDatasetIndex() const; + QgsMeshDatasetIndex staticScalarDatasetIndex( int group = -1 ) const; %Docstring -Returns the static scalar dataset index that is rendered if the temporal properties is not active +Returns the static scalar dataset index that is rendered if the temporal properties is not active. + +Since QGIS 3.38, the ``group`` argument can be used to specify a fixed group +to use. If this is not specified, then the active group from the layer's renderer will be used. .. versionadded:: 3.14 %End - QgsMeshDatasetIndex staticVectorDatasetIndex() const; + QgsMeshDatasetIndex staticVectorDatasetIndex( int group = -1 ) const; %Docstring -Returns the static vector dataset index that is rendered if the temporal properties is not active +Returns the static vector dataset index that is rendered if the temporal properties is not active. + +Since QGIS 3.38, the ``group`` argument can be used to specify a fixed group +to use. If this is not specified, then the active group from the layer's renderer will be used. .. versionadded:: 3.14 %End diff --git a/python/core/auto_generated/mesh/qgsmeshlayerelevationproperties.sip.in b/python/core/auto_generated/mesh/qgsmeshlayerelevationproperties.sip.in index f15a152d4cf7..28266b6c237c 100644 --- a/python/core/auto_generated/mesh/qgsmeshlayerelevationproperties.sip.in +++ b/python/core/auto_generated/mesh/qgsmeshlayerelevationproperties.sip.in @@ -100,6 +100,42 @@ Sets the fixed elevation ``range`` for the mesh. .. seealso:: :py:func:`fixedRange` +.. versionadded:: 3.38 +%End + + QMap fixedRangePerGroup() const; +%Docstring +Returns the fixed elevation range for each group. + +.. note:: + + This is only considered when :py:func:`~QgsMeshLayerElevationProperties.mode` is :py:class:`Qgis`.MeshElevationMode.FixedRangePerGroup. + +.. note:: + + When a fixed range is set any :py:func:`~QgsMeshLayerElevationProperties.zOffset` and :py:func:`~QgsMeshLayerElevationProperties.zScale` is ignored. + + +.. seealso:: :py:func:`setFixedRangePerGroup` + +.. versionadded:: 3.38 +%End + + void setFixedRangePerGroup( const QMap &ranges ); +%Docstring +Sets the fixed elevation range for each group. + +.. note:: + + This is only considered when :py:func:`~QgsMeshLayerElevationProperties.mode` is :py:class:`Qgis`.MeshElevationMode.FixedRangePerGroup. + +.. note:: + + When a fixed range is set any :py:func:`~QgsMeshLayerElevationProperties.zOffset` and :py:func:`~QgsMeshLayerElevationProperties.zScale` is ignored. + + +.. seealso:: :py:func:`fixedRangePerGroup` + .. versionadded:: 3.38 %End diff --git a/python/core/auto_generated/qgis.sip.in b/python/core/auto_generated/qgis.sip.in index 93dec02db9a6..7eb6600c38a1 100644 --- a/python/core/auto_generated/qgis.sip.in +++ b/python/core/auto_generated/qgis.sip.in @@ -1888,7 +1888,8 @@ The development version enum class MeshElevationMode { FixedElevationRange, - FromVertices + FromVertices, + FixedRangePerGroup, }; enum class BetweenLineConstraint diff --git a/src/app/mesh/qgsmeshelevationpropertieswidget.cpp b/src/app/mesh/qgsmeshelevationpropertieswidget.cpp index cd5ede8081b1..25e3150317ea 100644 --- a/src/app/mesh/qgsmeshelevationpropertieswidget.cpp +++ b/src/app/mesh/qgsmeshelevationpropertieswidget.cpp @@ -20,6 +20,10 @@ #include "qgsmeshlayerelevationproperties.h" #include "qgslinesymbol.h" #include "qgsfillsymbol.h" +#include "qgsexpressionbuilderdialog.h" +#include "qgsexpressioncontextutils.h" +#include +#include QgsMeshElevationPropertiesWidget::QgsMeshElevationPropertiesWidget( QgsMeshLayer *layer, QgsMapCanvas *canvas, QWidget *parent ) : QgsMapLayerConfigWidget( layer, canvas, parent ) @@ -29,6 +33,7 @@ QgsMeshElevationPropertiesWidget::QgsMeshElevationPropertiesWidget( QgsMeshLayer mModeComboBox->addItem( tr( "From Vertices" ), QVariant::fromValue( Qgis::MeshElevationMode::FromVertices ) ); mModeComboBox->addItem( tr( "Fixed Elevation Range" ), QVariant::fromValue( Qgis::MeshElevationMode::FixedElevationRange ) ); + mModeComboBox->addItem( tr( "Fixed Elevation Range Per Group" ), QVariant::fromValue( Qgis::MeshElevationMode::FixedRangePerGroup ) ); mLimitsComboBox->addItem( tr( "Include Lower and Upper" ), QVariant::fromValue( Qgis::RangeLimits::IncludeBoth ) ); mLimitsComboBox->addItem( tr( "Include Lower, Exclude Upper" ), QVariant::fromValue( Qgis::RangeLimits::IncludeLowerExcludeUpper ) ); @@ -52,6 +57,29 @@ QgsMeshElevationPropertiesWidget::QgsMeshElevationPropertiesWidget( QgsMeshLayer mFixedLowerSpinBox->clear(); mFixedUpperSpinBox->clear(); + mFixedRangePerGroupModel = new QgsMeshGroupFixedElevationRangeModel( this ); + mGroupElevationTable->verticalHeader()->setVisible( false ); + mGroupElevationTable->setModel( mFixedRangePerGroupModel ); + QgsMeshFixedElevationRangeDelegate *tableDelegate = new QgsMeshFixedElevationRangeDelegate( mGroupElevationTable ); + mGroupElevationTable->setItemDelegateForColumn( 1, tableDelegate ); + mGroupElevationTable->setItemDelegateForColumn( 2, tableDelegate ); + + QMenu *calculateFixedRangePerGroupMenu = new QMenu( mCalculateFixedRangePerGroupButton ); + mCalculateFixedRangePerGroupButton->setMenu( calculateFixedRangePerGroupMenu ); + mCalculateFixedRangePerGroupButton->setPopupMode( QToolButton::InstantPopup ); + QAction *calculateLowerAction = new QAction( "Calculate Lower by Expression…", calculateFixedRangePerGroupMenu ); + calculateFixedRangePerGroupMenu->addAction( calculateLowerAction ); + connect( calculateLowerAction, &QAction::triggered, this, [this] + { + calculateRangeByExpression( false ); + } ); + QAction *calculateUpperAction = new QAction( "Calculate Upper by Expression…", calculateFixedRangePerGroupMenu ); + calculateFixedRangePerGroupMenu->addAction( calculateUpperAction ); + connect( calculateUpperAction, &QAction::triggered, this, [this] + { + calculateRangeByExpression( true ); + } ); + syncToLayer( layer ); connect( mModeComboBox, qOverload( &QComboBox::currentIndexChanged ), this, &QgsMeshElevationPropertiesWidget::modeChanged ); @@ -97,6 +125,9 @@ void QgsMeshElevationPropertiesWidget::syncToLayer( QgsMapLayer *layer ) case Qgis::MeshElevationMode::FromVertices: mStackedWidget->setCurrentWidget( mPageFromVertices ); break; + case Qgis::MeshElevationMode::FixedRangePerGroup: + mStackedWidget->setCurrentWidget( mPageFixedRangePerGroup ); + break; } mOffsetZSpinBox->setValue( props->zOffset() ); @@ -116,6 +147,11 @@ void QgsMeshElevationPropertiesWidget::syncToLayer( QgsMapLayer *layer ) mFixedUpperSpinBox->clear(); mLimitsComboBox->setCurrentIndex( mLimitsComboBox->findData( QVariant::fromValue( props->fixedRange().rangeLimits() ) ) ); + mFixedRangePerGroupModel->setLayerData( mLayer, props->fixedRangePerGroup() ); + mGroupElevationTable->horizontalHeader()->setSectionResizeMode( 0, QHeaderView::Stretch ); + mGroupElevationTable->horizontalHeader()->setSectionResizeMode( 1, QHeaderView::Stretch ); + mGroupElevationTable->horizontalHeader()->setSectionResizeMode( 2, QHeaderView::Stretch ); + mLineStyleButton->setSymbol( props->profileLineSymbol()->clone() ); mFillStyleButton->setSymbol( props->profileFillSymbol()->clone() ); @@ -157,6 +193,7 @@ void QgsMeshElevationPropertiesWidget::apply() fixedUpper = mFixedUpperSpinBox->value(); props->setFixedRange( QgsDoubleRange( fixedLower, fixedUpper, mLimitsComboBox->currentData().value< Qgis::RangeLimits >() ) ); + props->setFixedRangePerGroup( mFixedRangePerGroupModel->rangeData() ); props->setProfileLineSymbol( mLineStyleButton->clonedSymbol< QgsLineSymbol >() ); props->setProfileFillSymbol( mFillStyleButton->clonedSymbol< QgsFillSymbol >() ); @@ -176,6 +213,9 @@ void QgsMeshElevationPropertiesWidget::modeChanged() case Qgis::MeshElevationMode::FromVertices: mStackedWidget->setCurrentWidget( mPageFromVertices ); break; + case Qgis::MeshElevationMode::FixedRangePerGroup: + mStackedWidget->setCurrentWidget( mPageFixedRangePerGroup ); + break; } } @@ -188,6 +228,68 @@ void QgsMeshElevationPropertiesWidget::onChanged() emit widgetChanged(); } +void QgsMeshElevationPropertiesWidget::calculateRangeByExpression( bool isUpper ) +{ + QgsExpressionContext expressionContext; + QgsExpressionContextScope *groupScope = new QgsExpressionContextScope(); + groupScope->addVariable( QgsExpressionContextScope::StaticVariable( QStringLiteral( "group" ), 1, true, false, tr( "Group number" ) ) ); + const int groupIndex = mLayer->datasetGroupsIndexes().at( 0 ); + const QgsMeshDatasetGroupMetadata meta = mLayer->datasetGroupMetadata( groupIndex ); + groupScope->addVariable( QgsExpressionContextScope::StaticVariable( QStringLiteral( "group_name" ), meta.name(), true, false, tr( "Group name" ) ) ); + + expressionContext.appendScope( groupScope ); + expressionContext.setHighlightedVariables( { QStringLiteral( "group" ), QStringLiteral( "group_name" )} ); + + QgsExpressionBuilderDialog dlg = QgsExpressionBuilderDialog( nullptr, isUpper ? mFixedRangeUpperExpression : mFixedRangeLowerExpression, this, QStringLiteral( "generic" ), expressionContext ); + + QList > groupChoices; + for ( int group = 0; group < mLayer->datasetGroupCount(); ++group ) + { + const int groupIndex = mLayer->datasetGroupsIndexes().at( group ); + const QgsMeshDatasetGroupMetadata meta = mLayer->datasetGroupMetadata( groupIndex ); + groupChoices << qMakePair( meta.name(), group ); + } + dlg.expressionBuilder()->setCustomPreviewGenerator( tr( "Group" ), groupChoices, [this]( const QVariant & value )-> QgsExpressionContext + { + return createExpressionContextForGroup( value.toInt() ); + } ); + + if ( dlg.exec() ) + { + if ( isUpper ) + mFixedRangeUpperExpression = dlg.expressionText(); + else + mFixedRangeLowerExpression = dlg.expressionText(); + + QgsExpression exp( dlg.expressionText() ); + exp.prepare( &expressionContext ); + for ( int group = 0; group < mLayer->datasetGroupCount(); ++group ) + { + groupScope->setVariable( QStringLiteral( "group" ), group + 1 ); + const int groupIndex = mLayer->datasetGroupsIndexes().at( group ); + const QgsMeshDatasetGroupMetadata meta = mLayer->datasetGroupMetadata( groupIndex ); + groupScope->setVariable( QStringLiteral( "group_name" ), meta.name() ); + + const QVariant res = exp.evaluate( &expressionContext ); + mFixedRangePerGroupModel->setData( mFixedRangePerGroupModel->index( group, isUpper ? 2 : 1 ), res, Qt::EditRole ); + } + } +} + +QgsExpressionContext QgsMeshElevationPropertiesWidget::createExpressionContextForGroup( int group ) const +{ + QgsExpressionContext context; + context.appendScopes( QgsExpressionContextUtils::globalProjectLayerScopes( mLayer ) ); + QgsExpressionContextScope *groupScope = new QgsExpressionContextScope(); + groupScope->addVariable( QgsExpressionContextScope::StaticVariable( QStringLiteral( "group" ), group + 1, true, false, tr( "Group number" ) ) ); + const int groupIndex = mLayer->datasetGroupsIndexes().at( group ); + const QgsMeshDatasetGroupMetadata meta = mLayer->datasetGroupMetadata( groupIndex ); + groupScope->addVariable( QgsExpressionContextScope::StaticVariable( QStringLiteral( "group_name" ), meta.name(), true, false, tr( "Group name" ) ) ); + context.appendScope( groupScope ); + context.setHighlightedVariables( { QStringLiteral( "group" ), QStringLiteral( "group_name" )} ); + return context; +} + // // QgsMeshElevationPropertiesWidgetFactory @@ -225,3 +327,232 @@ QString QgsMeshElevationPropertiesWidgetFactory::layerPropertiesPagePositionHint return QStringLiteral( "mOptsPage_Metadata" ); } + +// +// QgsMeshGroupFixedElevationRangeModel +// + +QgsMeshGroupFixedElevationRangeModel::QgsMeshGroupFixedElevationRangeModel( QObject *parent ) + : QAbstractItemModel( parent ) +{ + +} + +int QgsMeshGroupFixedElevationRangeModel::columnCount( const QModelIndex & ) const +{ + return 3; +} + +int QgsMeshGroupFixedElevationRangeModel::rowCount( const QModelIndex &parent ) const +{ + if ( parent.isValid() ) + return 0; + return mGroupCount; +} + +QModelIndex QgsMeshGroupFixedElevationRangeModel::index( int row, int column, const QModelIndex &parent ) const +{ + if ( hasIndex( row, column, parent ) ) + { + return createIndex( row, column, row ); + } + + return QModelIndex(); +} + +QModelIndex QgsMeshGroupFixedElevationRangeModel::parent( const QModelIndex &child ) const +{ + Q_UNUSED( child ) + return QModelIndex(); +} + +Qt::ItemFlags QgsMeshGroupFixedElevationRangeModel::flags( const QModelIndex &index ) const +{ + if ( !index.isValid() ) + return Qt::ItemFlags(); + + if ( index.row() < 0 || index.row() >= mGroupCount || index.column() < 0 || index.column() >= columnCount() ) + return Qt::ItemFlags(); + + switch ( index.column() ) + { + case 0: + return Qt::ItemFlag::ItemIsEnabled; + case 1: + case 2: + return Qt::ItemFlag::ItemIsEnabled | Qt::ItemFlag::ItemIsEditable | Qt::ItemFlag::ItemIsSelectable; + default: + break; + } + + return Qt::ItemFlags(); +} + +QVariant QgsMeshGroupFixedElevationRangeModel::data( const QModelIndex &index, int role ) const +{ + if ( !index.isValid() ) + return QVariant(); + + if ( index.row() < 0 || index.row() >= mGroupCount || index.column() < 0 || index.column() >= columnCount() ) + return QVariant(); + + const int group = index.row(); + const QgsDoubleRange range = mRanges.value( group ); + + switch ( role ) + { + case Qt::DisplayRole: + case Qt::EditRole: + case Qt::ToolTipRole: + { + switch ( index.column() ) + { + case 0: + return mGroupNames.value( group, QString::number( group ) ); + + case 1: + return range.lower() > std::numeric_limits< double >::lowest() ? range.lower() : QVariant(); + + case 2: + return range.upper() < std::numeric_limits< double >::max() ? range.upper() : QVariant(); + + default: + break; + } + break; + } + + case Qt::TextAlignmentRole: + { + switch ( index.column() ) + { + case 0: + return static_cast( Qt::AlignLeft | Qt::AlignVCenter ); + + case 1: + case 2: + return static_cast( Qt::AlignRight | Qt::AlignVCenter ); + default: + break; + } + break; + } + + default: + break; + } + return QVariant(); +} + +QVariant QgsMeshGroupFixedElevationRangeModel::headerData( int section, Qt::Orientation orientation, int role ) const +{ + if ( role == Qt::DisplayRole && orientation == Qt::Horizontal ) + { + switch ( section ) + { + case 0: + return tr( "Group" ); + case 1: + return tr( "Lower" ); + case 2: + return tr( "Upper" ); + default: + break; + } + } + return QAbstractItemModel::headerData( section, orientation, role ); +} + +bool QgsMeshGroupFixedElevationRangeModel::setData( const QModelIndex &index, const QVariant &value, int role ) +{ + if ( !index.isValid() ) + return false; + + if ( index.row() >= mGroupCount || index.row() < 0 ) + return false; + + const int group = index.row(); + const QgsDoubleRange range = mRanges.value( group ); + + switch ( role ) + { + case Qt::EditRole: + { + bool ok = false; + double newValue = value.toDouble( &ok ); + if ( !ok ) + return false; + + switch ( index.column() ) + { + case 1: + { + mRanges[group] = QgsDoubleRange( newValue, range.upper(), range.includeLower(), range.includeUpper() ); + emit dataChanged( index, index, QVector() << role ); + break; + } + + case 2: + mRanges[group] = QgsDoubleRange( range.lower(), newValue, range.includeLower(), range.includeUpper() ); + emit dataChanged( index, index, QVector() << role ); + break; + + default: + break; + } + return true; + } + + default: + break; + } + + return false; +} + +void QgsMeshGroupFixedElevationRangeModel::setLayerData( QgsMeshLayer *layer, const QMap &ranges ) +{ + beginResetModel(); + + mGroupCount = layer->datasetGroupCount(); + mRanges = ranges; + + mGroupNames.clear(); + for ( int group = 0; group < mGroupCount; ++group ) + { + const int groupIndex = layer->datasetGroupsIndexes().at( group ); + const QgsMeshDatasetGroupMetadata meta = layer->datasetGroupMetadata( groupIndex ); + mGroupNames[group] = meta.name(); + } + + endResetModel(); +} + + +// +// QgsFixedElevationRangeDelegate +// + +QgsMeshFixedElevationRangeDelegate::QgsMeshFixedElevationRangeDelegate( QObject *parent ) + : QStyledItemDelegate( parent ) +{ + +} + +QWidget *QgsMeshFixedElevationRangeDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &, const QModelIndex & ) const +{ + QgsDoubleSpinBox *spin = new QgsDoubleSpinBox( parent ); + spin->setDecimals( 4 ); + spin->setMinimum( -9999999998.0 ); + spin->setMaximum( 9999999999.0 ); + spin->setShowClearButton( false ); + return spin; +} + +void QgsMeshFixedElevationRangeDelegate::setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const +{ + if ( QgsDoubleSpinBox *spin = qobject_cast< QgsDoubleSpinBox * >( editor ) ) + { + model->setData( index, spin->value() ); + } +} diff --git a/src/app/mesh/qgsmeshelevationpropertieswidget.h b/src/app/mesh/qgsmeshelevationpropertieswidget.h index c55e406e7d4e..a5af9b443ad1 100644 --- a/src/app/mesh/qgsmeshelevationpropertieswidget.h +++ b/src/app/mesh/qgsmeshelevationpropertieswidget.h @@ -19,10 +19,53 @@ #include "qgsmaplayerconfigwidget.h" #include "qgsmaplayerconfigwidgetfactory.h" +#include + #include "ui_qgsmeshelevationpropertieswidgetbase.h" class QgsMeshLayer; +class QgsMeshGroupFixedElevationRangeModel : public QAbstractItemModel +{ + Q_OBJECT + + public: + + QgsMeshGroupFixedElevationRangeModel( QObject *parent ); + int columnCount( const QModelIndex &parent = QModelIndex() ) const override; + int rowCount( const QModelIndex &parent = QModelIndex() ) const override; + QModelIndex index( int row, int column, const QModelIndex &parent = QModelIndex() ) const override; + QModelIndex parent( const QModelIndex &child ) const override; + Qt::ItemFlags flags( const QModelIndex &index ) const override; + QVariant data( const QModelIndex &index, int role ) const override; + QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override; + bool setData( const QModelIndex &index, const QVariant &value, int role ) override; + + void setLayerData( QgsMeshLayer *layer, const QMap &ranges ); + QMap rangeData() const { return mRanges; } + + private: + + int mGroupCount = 0; + QMap mGroupNames; + QMap mRanges; +}; + + +class QgsMeshFixedElevationRangeDelegate : public QStyledItemDelegate +{ + Q_OBJECT + + public: + + QgsMeshFixedElevationRangeDelegate( QObject *parent ); + + protected: + QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem & /*option*/, const QModelIndex &index ) const override; + void setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const override; + +}; + class QgsMeshElevationPropertiesWidget : public QgsMapLayerConfigWidget, private Ui::QgsMeshElevationPropertiesWidgetBase { Q_OBJECT @@ -38,11 +81,16 @@ class QgsMeshElevationPropertiesWidget : public QgsMapLayerConfigWidget, private private slots: void modeChanged(); void onChanged(); + void calculateRangeByExpression( bool isUpper ); private: + QgsExpressionContext createExpressionContextForGroup( int group ) const; QgsMeshLayer *mLayer = nullptr; bool mBlockUpdates = false; + QgsMeshGroupFixedElevationRangeModel *mFixedRangePerGroupModel = nullptr; + QString mFixedRangeLowerExpression = QStringLiteral( "@group" ); + QString mFixedRangeUpperExpression = QStringLiteral( "@group" ); }; diff --git a/src/core/mesh/qgsmeshlayer.cpp b/src/core/mesh/qgsmeshlayer.cpp index 4982232dd259..9538c3162439 100644 --- a/src/core/mesh/qgsmeshlayer.cpp +++ b/src/core/mesh/qgsmeshlayer.cpp @@ -797,24 +797,24 @@ void QgsMeshLayer::applyClassificationOnScalarSettings( const QgsMeshDatasetGrou } } -QgsMeshDatasetIndex QgsMeshLayer::activeScalarDatasetAtTime( const QgsDateTimeRange &timeRange ) const +QgsMeshDatasetIndex QgsMeshLayer::activeScalarDatasetAtTime( const QgsDateTimeRange &timeRange, int group ) const { QGIS_PROTECT_QOBJECT_THREAD_ACCESS if ( mTemporalProperties->isActive() ) - return datasetIndexAtTime( timeRange, mRendererSettings.activeScalarDatasetGroup() ); + return datasetIndexAtTime( timeRange, group >= 0 ? group : mRendererSettings.activeScalarDatasetGroup() ); else - return QgsMeshDatasetIndex( mRendererSettings.activeScalarDatasetGroup(), mStaticScalarDatasetIndex ); + return QgsMeshDatasetIndex( group >= 0 ? group : mRendererSettings.activeScalarDatasetGroup(), mStaticScalarDatasetIndex ); } -QgsMeshDatasetIndex QgsMeshLayer::activeVectorDatasetAtTime( const QgsDateTimeRange &timeRange ) const +QgsMeshDatasetIndex QgsMeshLayer::activeVectorDatasetAtTime( const QgsDateTimeRange &timeRange, int group ) const { QGIS_PROTECT_QOBJECT_THREAD_ACCESS if ( mTemporalProperties->isActive() ) - return datasetIndexAtTime( timeRange, mRendererSettings.activeVectorDatasetGroup() ); + return datasetIndexAtTime( timeRange, group >= 0 ? group : mRendererSettings.activeVectorDatasetGroup() ); else - return QgsMeshDatasetIndex( mRendererSettings.activeVectorDatasetGroup(), mStaticVectorDatasetIndex ); + return QgsMeshDatasetIndex( group >= 0 ? group : mRendererSettings.activeVectorDatasetGroup(), mStaticVectorDatasetIndex ); } void QgsMeshLayer::fillNativeMesh() @@ -903,11 +903,11 @@ int QgsMeshLayer::closestEdge( const QgsPointXY &point, double searchRadius, Qgs return selectedIndex; } -QgsMeshDatasetIndex QgsMeshLayer::staticVectorDatasetIndex() const +QgsMeshDatasetIndex QgsMeshLayer::staticVectorDatasetIndex( int group ) const { QGIS_PROTECT_QOBJECT_THREAD_ACCESS - return QgsMeshDatasetIndex( mRendererSettings.activeVectorDatasetGroup(), mStaticVectorDatasetIndex ); + return QgsMeshDatasetIndex( group >= 0 ? group : mRendererSettings.activeVectorDatasetGroup(), mStaticVectorDatasetIndex ); } void QgsMeshLayer::setReferenceTime( const QDateTime &referenceTime ) @@ -1545,11 +1545,11 @@ QList QgsMeshLayer::selectFacesByExpression( QgsExpression expression ) return ret; } -QgsMeshDatasetIndex QgsMeshLayer::staticScalarDatasetIndex() const +QgsMeshDatasetIndex QgsMeshLayer::staticScalarDatasetIndex( int group ) const { QGIS_PROTECT_QOBJECT_THREAD_ACCESS - return QgsMeshDatasetIndex( mRendererSettings.activeScalarDatasetGroup(), mStaticScalarDatasetIndex ); + return QgsMeshDatasetIndex( group >= 0 ? group : mRendererSettings.activeScalarDatasetGroup(), mStaticScalarDatasetIndex ); } void QgsMeshLayer::setStaticVectorDatasetIndex( const QgsMeshDatasetIndex &staticVectorDatasetIndex ) diff --git a/src/core/mesh/qgsmeshlayer.h b/src/core/mesh/qgsmeshlayer.h index 75b002b5f1df..2da422e3b431 100644 --- a/src/core/mesh/qgsmeshlayer.h +++ b/src/core/mesh/qgsmeshlayer.h @@ -608,27 +608,27 @@ class CORE_EXPORT QgsMeshLayer : public QgsMapLayer, public QgsAbstractProfileSo * Returns dataset index from active scalar group depending on the time range. * If the temporal properties is not active, return the static dataset * - * \param timeRange the time range - * \returns dataset index + * Since QGIS 3.38, the \a group argument can be used to specify a fixed group + * to use. If this is not specified, then the active group from the layer's renderer will be used. * * \note the returned dataset index depends on the matching method, see setTemporalMatchingMethod() * * \since QGIS 3.14 */ - QgsMeshDatasetIndex activeScalarDatasetAtTime( const QgsDateTimeRange &timeRange ) const; + QgsMeshDatasetIndex activeScalarDatasetAtTime( const QgsDateTimeRange &timeRange, int group = -1 ) const; /** * Returns dataset index from active vector group depending on the time range * If the temporal properties is not active, return the static dataset * - * \param timeRange the time range - * \returns dataset index + * Since QGIS 3.38, the \a group argument can be used to specify a fixed group + * to use. If this is not specified, then the active group from the layer's renderer will be used. * * \note the returned dataset index depends on the matching method, see setTemporalMatchingMethod() * * \since QGIS 3.14 */ - QgsMeshDatasetIndex activeVectorDatasetAtTime( const QgsDateTimeRange &timeRange ) const; + QgsMeshDatasetIndex activeVectorDatasetAtTime( const QgsDateTimeRange &timeRange, int group = -1 ) const; /** * Sets the static scalar dataset index that is rendered if the temporal properties is not active @@ -649,18 +649,24 @@ class CORE_EXPORT QgsMeshLayer : public QgsMapLayer, public QgsAbstractProfileSo void setStaticVectorDatasetIndex( const QgsMeshDatasetIndex &staticVectorDatasetIndex ) SIP_SKIP; /** - * Returns the static scalar dataset index that is rendered if the temporal properties is not active + * Returns the static scalar dataset index that is rendered if the temporal properties is not active. + * + * Since QGIS 3.38, the \a group argument can be used to specify a fixed group + * to use. If this is not specified, then the active group from the layer's renderer will be used. * * \since QGIS 3.14 */ - QgsMeshDatasetIndex staticScalarDatasetIndex() const; + QgsMeshDatasetIndex staticScalarDatasetIndex( int group = -1 ) const; /** - * Returns the static vector dataset index that is rendered if the temporal properties is not active + * Returns the static vector dataset index that is rendered if the temporal properties is not active. + * + * Since QGIS 3.38, the \a group argument can be used to specify a fixed group + * to use. If this is not specified, then the active group from the layer's renderer will be used. * * \since QGIS 3.14 */ - QgsMeshDatasetIndex staticVectorDatasetIndex() const; + QgsMeshDatasetIndex staticVectorDatasetIndex( int group = -1 ) const; /** * Sets the reference time of the layer diff --git a/src/core/mesh/qgsmeshlayerelevationproperties.cpp b/src/core/mesh/qgsmeshlayerelevationproperties.cpp index 2ee3838f55ec..b988c74342ac 100644 --- a/src/core/mesh/qgsmeshlayerelevationproperties.cpp +++ b/src/core/mesh/qgsmeshlayerelevationproperties.cpp @@ -59,6 +59,23 @@ QDomElement QgsMeshLayerElevationProperties::writeXml( QDomElement &parentElemen element.setAttribute( QStringLiteral( "includeUpper" ), mFixedRange.includeUpper() ? "1" : "0" ); break; + case Qgis::MeshElevationMode::FixedRangePerGroup: + { + QDomElement ranges = document.createElement( QStringLiteral( "ranges" ) ); + for ( auto it = mRangePerGroup.constBegin(); it != mRangePerGroup.constEnd(); ++it ) + { + QDomElement range = document.createElement( QStringLiteral( "range" ) ); + range.setAttribute( QStringLiteral( "group" ), it.key() ); + range.setAttribute( QStringLiteral( "lower" ), qgsDoubleToString( it.value().lower() ) ); + range.setAttribute( QStringLiteral( "upper" ), qgsDoubleToString( it.value().upper() ) ); + range.setAttribute( QStringLiteral( "includeLower" ), it.value().includeLower() ? "1" : "0" ); + range.setAttribute( QStringLiteral( "includeUpper" ), it.value().includeUpper() ? "1" : "0" ); + ranges.appendChild( range ); + } + element.appendChild( ranges ); + break; + } + case Qgis::MeshElevationMode::FromVertices: break; } @@ -98,6 +115,25 @@ bool QgsMeshLayerElevationProperties::readXml( const QDomElement &element, const mFixedRange = QgsDoubleRange( lower, upper, includeLower, includeUpper ); break; } + + case Qgis::MeshElevationMode::FixedRangePerGroup: + { + mRangePerGroup.clear(); + + const QDomNodeList ranges = elevationElement.firstChildElement( QStringLiteral( "ranges" ) ).childNodes(); + for ( int i = 0; i < ranges.size(); ++i ) + { + const QDomElement rangeElement = ranges.at( i ).toElement(); + const int group = rangeElement.attribute( QStringLiteral( "group" ) ).toInt(); + const double lower = rangeElement.attribute( QStringLiteral( "lower" ) ).toDouble(); + const double upper = rangeElement.attribute( QStringLiteral( "upper" ) ).toDouble(); + const bool includeLower = rangeElement.attribute( QStringLiteral( "includeLower" ) ).toInt(); + const bool includeUpper = rangeElement.attribute( QStringLiteral( "includeUpper" ) ).toInt(); + mRangePerGroup.insert( group, QgsDoubleRange( lower, upper, includeLower, includeUpper ) ); + } + break; + } + case Qgis::MeshElevationMode::FromVertices: break; } @@ -126,6 +162,15 @@ QString QgsMeshLayerElevationProperties::htmlSummary() const properties << tr( "Elevation range: %1 to %2" ).arg( mFixedRange.lower() ).arg( mFixedRange.upper() ); break; + case Qgis::MeshElevationMode::FixedRangePerGroup: + { + for ( auto it = mRangePerGroup.constBegin(); it != mRangePerGroup.constEnd(); ++it ) + { + properties << tr( "Elevation for group %1: %2 to %3" ).arg( it.key() ).arg( it.value().lower() ).arg( it.value().upper() ); + } + break; + } + case Qgis::MeshElevationMode::FromVertices: properties << tr( "Scale: %1" ).arg( mZScale ); properties << tr( "Offset: %1" ).arg( mZOffset ); @@ -143,6 +188,7 @@ QgsMeshLayerElevationProperties *QgsMeshLayerElevationProperties::clone() const res->setProfileSymbology( mSymbology ); res->setElevationLimit( mElevationLimit ); res->setFixedRange( mFixedRange ); + res->setFixedRangePerGroup( mRangePerGroup ); res->copyCommonProperties( this ); return res.release(); } @@ -154,6 +200,16 @@ bool QgsMeshLayerElevationProperties::isVisibleInZRange( const QgsDoubleRange &r case Qgis::MeshElevationMode::FixedElevationRange: return mFixedRange.overlaps( range ); + case Qgis::MeshElevationMode::FixedRangePerGroup: + { + for ( auto it = mRangePerGroup.constBegin(); it != mRangePerGroup.constEnd(); ++it ) + { + if ( it.value().overlaps( range ) ) + return true; + } + return false; + } + case Qgis::MeshElevationMode::FromVertices: // TODO -- test actual mesh z range return true; @@ -168,6 +224,36 @@ QgsDoubleRange QgsMeshLayerElevationProperties::calculateZRange( QgsMapLayer * ) case Qgis::MeshElevationMode::FixedElevationRange: return mFixedRange; + case Qgis::MeshElevationMode::FixedRangePerGroup: + { + double lower = std::numeric_limits< double >::max(); + double upper = std::numeric_limits< double >::min(); + bool includeLower = true; + bool includeUpper = true; + for ( auto it = mRangePerGroup.constBegin(); it != mRangePerGroup.constEnd(); ++it ) + { + if ( it.value().lower() < lower ) + { + lower = it.value().lower(); + includeLower = it.value().includeLower(); + } + else if ( !includeLower && it.value().lower() == lower && it.value().includeLower() ) + { + includeLower = true; + } + if ( it.value().upper() > upper ) + { + upper = it.value().upper(); + includeUpper = it.value().includeUpper(); + } + else if ( !includeUpper && it.value().upper() == upper && it.value().includeUpper() ) + { + includeUpper = true; + } + } + return QgsDoubleRange( lower, upper, includeLower, includeUpper ); + } + case Qgis::MeshElevationMode::FromVertices: // TODO -- determine actual z range from mesh statistics return QgsDoubleRange(); @@ -187,6 +273,7 @@ QgsMapLayerElevationProperties::Flags QgsMeshLayerElevationProperties::flags() c case Qgis::MeshElevationMode::FixedElevationRange: return QgsMapLayerElevationProperties::Flag::FlagDontInvalidateCachedRendersWhenRangeChanges; + case Qgis::MeshElevationMode::FixedRangePerGroup: case Qgis::MeshElevationMode::FromVertices: break; } @@ -221,6 +308,20 @@ void QgsMeshLayerElevationProperties::setFixedRange( const QgsDoubleRange &range emit changed(); } +QMap QgsMeshLayerElevationProperties::fixedRangePerGroup() const +{ + return mRangePerGroup; +} + +void QgsMeshLayerElevationProperties::setFixedRangePerGroup( const QMap &ranges ) +{ + if ( ranges == mRangePerGroup ) + return; + + mRangePerGroup = ranges; + emit changed(); +} + QgsLineSymbol *QgsMeshLayerElevationProperties::profileLineSymbol() const { return mProfileLineSymbol.get(); diff --git a/src/core/mesh/qgsmeshlayerelevationproperties.h b/src/core/mesh/qgsmeshlayerelevationproperties.h index 88be2fb7c6eb..319f01ba3cf2 100644 --- a/src/core/mesh/qgsmeshlayerelevationproperties.h +++ b/src/core/mesh/qgsmeshlayerelevationproperties.h @@ -22,6 +22,7 @@ #include "qgis_core.h" #include "qgis_sip.h" #include "qgsmaplayerelevationproperties.h" +#include "qgsmeshdataset.h" #include "qgis.h" class QgsLineSymbol; @@ -97,6 +98,30 @@ class CORE_EXPORT QgsMeshLayerElevationProperties : public QgsMapLayerElevationP */ void setFixedRange( const QgsDoubleRange &range ); + /** + * Returns the fixed elevation range for each group. + * + * \note This is only considered when mode() is Qgis::MeshElevationMode::FixedRangePerGroup. + * + * \note When a fixed range is set any zOffset() and zScale() is ignored. + * + * \see setFixedRangePerGroup() + * \since QGIS 3.38 + */ + QMap fixedRangePerGroup() const; + + /** + * Sets the fixed elevation range for each group. + * + * \note This is only considered when mode() is Qgis::MeshElevationMode::FixedRangePerGroup. + * + * \note When a fixed range is set any zOffset() and zScale() is ignored. + * + * \see fixedRangePerGroup() + * \since QGIS 3.38 + */ + void setFixedRangePerGroup( const QMap &ranges ); + /** * Returns the line symbol used to render the mesh profile in elevation profile plots. * @@ -180,6 +205,8 @@ class CORE_EXPORT QgsMeshLayerElevationProperties : public QgsMapLayerElevationP double mElevationLimit = std::numeric_limits< double >::quiet_NaN(); QgsDoubleRange mFixedRange; + + QMap< int, QgsDoubleRange > mRangePerGroup; }; #endif // QGSMESHLAYERELEVATIONPROPERTIES_H diff --git a/src/core/mesh/qgsmeshlayerrenderer.cpp b/src/core/mesh/qgsmeshlayerrenderer.cpp index 58d327272c77..655d10e12a97 100644 --- a/src/core/mesh/qgsmeshlayerrenderer.cpp +++ b/src/core/mesh/qgsmeshlayerrenderer.cpp @@ -74,20 +74,6 @@ QgsMeshLayerRenderer::QgsMeshLayerRenderer( mNativeMesh = *( layer->nativeMesh() ); mLayerExtent = layer->extent(); - // copy triangular mesh - copyTriangularMeshes( layer, context ); - - // copy datasets - copyScalarDatasetValues( layer ); - copyVectorDatasetValues( layer ); - - calculateOutputSize(); - - QSet attrs; - prepareLabeling( layer, attrs ); - - mClippingRegions = QgsMapClippingUtils::collectClippingRegionsForLayer( *renderContext(), layer ); - if ( layer->elevationProperties() && layer->elevationProperties()->hasElevation() ) { QgsMeshLayerElevationProperties *elevProp = qobject_cast( layer->elevationProperties() ); @@ -110,10 +96,50 @@ QgsMeshLayerRenderer::QgsMeshLayerRenderer( // TODO -- filtering by mesh z values is not currently implemented break; } + + case Qgis::MeshElevationMode::FixedRangePerGroup: + { + // find the top-most group which matches the map range + int currentMatchingGroup = -1; + QgsDoubleRange currentMatchingRange; + const QMap rangePerGroup = elevProp->fixedRangePerGroup(); + for ( auto it = rangePerGroup.constBegin(); it != rangePerGroup.constEnd(); ++it ) + { + if ( it.value().overlaps( context.zRange() ) ) + { + if ( currentMatchingRange.isInfinite() + || ( it.value().includeUpper() && it.value().upper() >= currentMatchingRange.upper() ) + || ( !currentMatchingRange.includeUpper() && it.value().upper() >= currentMatchingRange.upper() ) ) + { + currentMatchingGroup = it.key(); + currentMatchingRange = it.value(); + } + } + } + if ( currentMatchingGroup >= 0 ) + { + mRendererSettings.setActiveScalarDatasetGroup( currentMatchingGroup ); + mRendererSettings.setActiveVectorDatasetGroup( currentMatchingGroup ); + } + } } } } + // copy triangular mesh + copyTriangularMeshes( layer, context ); + + // copy datasets + copyScalarDatasetValues( layer ); + copyVectorDatasetValues( layer ); + + calculateOutputSize(); + + QSet attrs; + prepareLabeling( layer, attrs ); + + mClippingRegions = QgsMapClippingUtils::collectClippingRegionsForLayer( *renderContext(), layer ); + mPreparationTime = timer.elapsed(); } @@ -154,9 +180,9 @@ void QgsMeshLayerRenderer::copyScalarDatasetValues( QgsMeshLayer *layer ) { QgsMeshDatasetIndex datasetIndex; if ( renderContext()->isTemporal() ) - datasetIndex = layer->activeScalarDatasetAtTime( renderContext()->temporalRange() ); + datasetIndex = layer->activeScalarDatasetAtTime( renderContext()->temporalRange(), mRendererSettings.activeScalarDatasetGroup() ); else - datasetIndex = layer->staticScalarDatasetIndex(); + datasetIndex = layer->staticScalarDatasetIndex( mRendererSettings.activeScalarDatasetGroup() ); // Find out if we can use cache up to date. If yes, use it and return const int datasetGroupCount = layer->datasetGroupCount(); @@ -255,9 +281,9 @@ void QgsMeshLayerRenderer::copyVectorDatasetValues( QgsMeshLayer *layer ) { QgsMeshDatasetIndex datasetIndex; if ( renderContext()->isTemporal() ) - datasetIndex = layer->activeVectorDatasetAtTime( renderContext()->temporalRange() ); + datasetIndex = layer->activeVectorDatasetAtTime( renderContext()->temporalRange(), mRendererSettings.activeVectorDatasetGroup() ); else - datasetIndex = layer->staticVectorDatasetIndex(); + datasetIndex = layer->staticVectorDatasetIndex( mRendererSettings.activeVectorDatasetGroup() ); // Find out if we can use cache up to date. If yes, use it and return const int datasetGroupCount = layer->datasetGroupCount(); diff --git a/src/core/qgis.h b/src/core/qgis.h index 50e7c39eb629..e1442f858dc3 100644 --- a/src/core/qgis.h +++ b/src/core/qgis.h @@ -3335,7 +3335,8 @@ class CORE_EXPORT Qgis enum class MeshElevationMode : int { FixedElevationRange = 0, //!< Layer has a fixed elevation range - FromVertices = 1 //!< Elevation should be taken from mesh vertices + FromVertices = 1, //!< Elevation should be taken from mesh vertices + FixedRangePerGroup = 2, //!< Layer has a fixed (manually specified) elevation range per group }; Q_ENUM( MeshElevationMode ) diff --git a/src/ui/mesh/qgsmeshelevationpropertieswidgetbase.ui b/src/ui/mesh/qgsmeshelevationpropertieswidgetbase.ui index 5dbb914e0da0..cf4175997d39 100644 --- a/src/ui/mesh/qgsmeshelevationpropertieswidgetbase.ui +++ b/src/ui/mesh/qgsmeshelevationpropertieswidgetbase.ui @@ -36,6 +36,143 @@ + + + + Profile Chart Appearance + + + + + + + + + Style + + + + + + + + 0 + 0 + + + + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Line style + + + + + + + + 0 + 0 + + + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Limit + + + + + + + Fill style + + + + + + + 6 + + + -99999.000000000000000 + + + 99999.000000000000000 + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -48,7 +185,7 @@ QFrame::NoFrame - 1 + 2 @@ -198,145 +335,68 @@ - - - - - - Profile Chart Appearance - - - - - - - - - Style - - - - - - - - 0 - 0 - - - - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Line style - - - - - - - - 0 - 0 - - - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Limit - - - - - - - Fill style - - - - - - - 6 - - - -99999.000000000000000 - - - 99999.000000000000000 - - - - - - - - 0 - 0 - - - - - - - - + + + + + + + 0 + 0 + + + + <html><head/><body><p><span style=" font-weight:600;">Each group in the mesh layer is associated with a fixed elevation range.</span></p><p>This mode can be used when a layer has elevation data exposed through different dataset groups.</p></body></html> + + + true + - - - + + + + + + + + 0 + + + + + Qt::Horizontal + + + + 494 + 20 + + + + + + + + ... + + + + :/images/themes/default/mIconExpression.svg:/images/themes/default/mIconExpression.svg + + + QToolButton::MenuButtonPopup + + + false + + + + + + + - - - - Qt::Vertical - - - - 20 - 40 - - - - @@ -357,6 +417,8 @@ 1 - + + + diff --git a/tests/src/python/test_qgsmeshlayerrenderer.py b/tests/src/python/test_qgsmeshlayerrenderer.py index b8e44a14afe1..2668064018f7 100644 --- a/tests/src/python/test_qgsmeshlayerrenderer.py +++ b/tests/src/python/test_qgsmeshlayerrenderer.py @@ -81,6 +81,72 @@ def test_render_fixed_elevation_range_with_z_range_filter(self): map_settings) ) + def test_render_fixed_range_per_group_with_z_range_filter(self): + """ + Test rendering a mesh with a fixed range per group when + map settings has a z range filter + """ + layer = QgsMeshLayer( + self.get_test_data_path( + 'mesh/netcdf_parent_quantity.nc').as_posix(), + 'mesh', + 'mdal' + ) + self.assertTrue(layer.isValid()) + + # set layer as elevation enabled + layer.elevationProperties().setMode( + Qgis.MeshElevationMode.FixedRangePerGroup + ) + layer.elevationProperties().setFixedRangePerGroup( + {1: QgsDoubleRange(33, 38), + 2: QgsDoubleRange(35, 40), + 3: QgsDoubleRange(40, 48)} + ) + + map_settings = QgsMapSettings() + map_settings.setOutputSize(QSize(400, 400)) + map_settings.setOutputDpi(96) + map_settings.setDestinationCrs(layer.crs()) + map_settings.setExtent(layer.extent()) + map_settings.setLayers([layer]) + + # no filter on map settings + map_settings.setZRange(QgsDoubleRange()) + self.assertTrue( + self.render_map_settings_check( + 'No Z range filter on map settings, elevation range per group', + 'elevation_range_per_group_no_filter', + map_settings) + ) + + # map settings range matches group 3 only + map_settings.setZRange(QgsDoubleRange(40.5, 49.5)) + self.assertTrue( + self.render_map_settings_check( + 'Z range filter on map settings matches group 3 only', + 'elevation_range_per_group_match3', + map_settings) + ) + + # map settings range matches group 1 and 2 + map_settings.setZRange(QgsDoubleRange(33, 39.5)) + self.assertTrue( + self.render_map_settings_check( + 'Z range filter on map settings matches group 1 and 2', + 'elevation_range_per_group_match1and2', + map_settings) + ) + + # map settings range excludes layer's range + map_settings.setZRange(QgsDoubleRange(130, 135)) + self.assertTrue( + self.render_map_settings_check( + 'Z range filter on map settings outside of layer group ranges', + 'fixed_elevation_range_excluded', + map_settings) + ) + if __name__ == '__main__': unittest.main() diff --git a/tests/testdata/control_images/mesh/expected_elevation_range_per_group_match1and2/expected_elevation_range_per_group_match1and2.png b/tests/testdata/control_images/mesh/expected_elevation_range_per_group_match1and2/expected_elevation_range_per_group_match1and2.png new file mode 100644 index 0000000000000000000000000000000000000000..a318096cbc56978336966ec8c52e1e45b369e96b GIT binary patch literal 471523 zcmeFaO{liZwjH$gVJp{Yupy|}NUn$m0)p5H5{MqSkle=As5=c66g%2dM3X3bNFy7C zM9?G+u_vh5Ie2X<#xz75MnQ}=0xAj;y`Tso9laoTTVpoxT6WAN>1&|8M_of6H%sdwcuszxoG$aYCtyMO7Mx9`6H`Om)j zxBsW#{GkC~?NxzS1zr_+Rp3>D&su?>d{*x-=dTL9D)6ens{*eIcm-Y$(rYWcD)6en zs{*eId=V9RJxE`~GQ5I#Rp3>DR|Q@bcs)q3J@Bf)s{*eId_@)bwZHfOXumOV{4T&( z6!z^?5;8lTF1zr`nU4hqwbh~6PgI5J! z6?j$PRe_JF!0SQ!h^oFgUln*&;8lTF1#Va1^&s6Y*~{Qnfma2-k_!CcKmB|D$S=b0 z0(>RQaWBl*<8-fHFZ8PduL`^>@T$NERp9j?eNbUvw66-hD)6ens{;2b@OqH$)$4_R zRp3>DR|Q@b_@D~B9;6Q{?2GnQfma1y6?j$PUIktc(!F}U(60*oNGtHa{2RadyI;Qx z@FQK^uQILI{Q@lV zE5%m@UKMy%;A^PB>p}V&R_PVvs{*eIyejYuP=VKj^b4@apDD#Z`|H2?`(D2b@R^GL za{H>l*It3wnp;4A)D z1zr_+Rp3Wbf!BldBU#8-8m|hxD)6en*It3wgY-qL;BWjLzw}SPeiz`2Sc+E=uL`^> z@I_SMoB#ax{_!6W$v5Bp5MOWK`26jV#k^sv@nApWgT3oY9{NqVH;V(7hzA7112OEH zPJ0tCaG@7lm4z?ojk$Ba{m?vG7>&UDW8PSr4($i+kB~zKo0g5+Caf9P`rz&C84I++ zi7A@LaZFBMoFDPKKf{N{2FxR*%mu#Ce11$W_yrrh%tg3D2YQMB*7$-q$IbYM-qRf9 z4+?PB9&SY}w)Zn(fy)rg-xW(m*krm!6Uew{xR+>fQKBm!%e+!;hWaHvLqfmgb>I$0 zIo~^ek3Y5Lm_3%nYUA~IzT9rW=Hysx-0j_`B`mTnH1xh9+~lm8>oSgjyipWKopMso z9)3F<=?5}6=iN}UT96OzAa|TXd`_2!8!2Y_Z2ch{&wh?L&TC{G7qfC zX2Uhsae8@=)icf`?TSlM#(H$z1Cy;^|OxSlKFWPS!LMCv&m2g3(3&D<74t^G{9} z(x*+SlbF<&+$ziC9Za^_nUi-%J8^=$cB^q3vBqtI-OD*<#|$n^b`kYXkIG2a4_baSeJz!5WmF1mB)~wsjt}> zzGl1!35aa;@HfVn`-cf>=ylmA&yWW~o1N>+&Op zj#Ez`NqkPlp4`DNy3^nsU2-?*4(4R6N93sb+TuA<_{%Ns%BJF73XICL&0}*}bSH>U zNOXptV_=T0;f4qh7d3L=*fGGO4ff9)qO1lH>UJzzV zI^k$v79PhU`NTYA@IrlfECz--YEx)Kq_Ju|UVy-1V3f{#D9&~1fHvuXqxw@xd?~P^ zwyK=#p=dJIAv8TS9P{8(eW zDeM~EeR=cXVc=ek2Pr#-6LSPG9NEL*JH*`#y^ALi?a;5OTo@yk*;fHSL<_!bb2pE>`0S7K-8x?4 zm@E3$v{o*NJyPlqVTUn0|3?2R%j0KZGVgomjBD2K^21)+dH+rBD+Rx6?2GCg-KQl6 z!QL>4(_NqzKw6LoWY5aFREVsRY_kqG^gga0Bl3hRk7JMrU>s-+qt@LAFA!dXHgd6>LGE?x6|Vn`-4U_{zzfFH z=pTZHgI;w!JUoOTxjP0Q{Td(Q;g>~q^BZloFDSyN?NY4tVqugkj|=WB(wbylHNT6m zIA$_(TdilHCMRwR(K-Mxb>!G=6^C)rE`2qdXJHEWTO#_O^;;wtAaLha$$*J_teNON z^*;IO{aX;NoKt5wKRgylwtlD`8-^D)gg&KD{*Lu+!WKj9m1Dt={o=K!p7ql_ZjCkdb3tv- zbou3)h+T(E6YlLK9;cgpqhT#!?P_f;eZ;0_x|Y%x*RQf52D&MZb>sSQUJ;5+xkVhq zD?NbE!i3Y$Fqq{qlYeN4Si^R{;}gF$dmWhz0`A z#{(aA@WE!Bn1H)=m}9CKo1VMV_?w=+!Ew>CxoyNMT&L{BpLbW236^w_F{hCEKw}79 z#nF^C2jgIGKo7&?0pEl(d@crFQIxoA!$x)eHojx4C&ndy!)KF0r~1$}s`rd768Q8l z`e9Fb^hM~zYG1&@M{r55CH|&R>#$=A{9PO6rTwf|Y#ysk*6I8b$F)-<8LK_Uvqs!Z z5Bak&D<7XiH><-;Uf)GGBmK?4`@4Vg?d|wofT`(uAmVW%mX|Smlk0l6F?1R%$7Tbp zW0X_*23*G5$vylS7v_q=!va5!3k+QI(E;A=7zcXB8nT3=z1mU+f3t@vFyuR&nH$xG z-)cbH)-Rjuk66ydJZiGE{PL6%K7+H}g-gVBabPfSU(l|SufBHd6~ChYTsXu;-#hWW7qhZ|rj9wy`pOru zL&F|!&CZ;w^*$@_$%eZnKU^H&zx)2@Kl>I#cqt>wIz;7B;$kq*COUp@M-Ir51*50D zK|5c>K@Ps7J8W&zd|7PZ!q4KI6MSadu4M}eKijb@y7ka8AI6JVVGj)Ace&!oZ+?$J zdK;ISJ-&g%8}o#WHK9Iq1Q&hSWS#p64&%=t&XL%D3(kF$k3(`zk_TIFTidp5eqt={ zhPR&qyAEcyC;U$&)mZIyOqY~#-qlA+tEZD#>jl%v-!aKCy@RSVy~}$S-#L?s@^tkT z42F;362;|IeXPJcxE;*O$0NFD`yBXWKii&1kRp2|=BW+twZ@GjZVwWH*d#+>uH@sv zo;K0*@@!F832+0F-+cM4ZJc~$C_^k5vj_+p+_`HrrfHXx^~@~Ajj7q=5tGNM z%NaQ|ej<@O|gS}7G@R4r_hyo$o{rF7=eiFW8#8?AKuD;jRQ9b zdkf$^pLSuzh1ul9h0Lg%1J_Xx9*ny=G9?FmaGW?`3!Q!01Y?#9oH7><<8vQ0L$9%# z95#YujFpT$#DtH7_@L8=D{<4l>vu50@A+=-l3er7@0T>0Y`iz zG13Q4zaZ15I^|T%?l^P3m+y|>T`X{n^N!7Ys(FxIeY5 ztO?JU-G=Q_LUY+MN#E1GHQb3#F_R~@&EIlJmurwPm?kiXa1I&pq5~eX2ukM}=h^kygxGId*~h);cU|}6J8%I2r&Ys6ic5g~5(6Gj%<#_10O-T~DUSS%!2-=cwrg|z z7!L6?ob`B_@M9h{)p3U>W6sB=!5es zJ#io1=eVBX?;|+h6BpyjHCIkzRJIy_1pY4PD!ymv9*W10Gw*C(YZ_0<>voEJ&v^O^ z4%h?;fW0}vrNjW*IDRQ0$qnnc?jdka2CUqQ!)1bIGCWK^uY4Ov1MqRNQ0(s?Y=m2i zWPu4D`UnRm=x~hDVzEc>po0ly*62bnY3f}E9Jr!UZwlcGz--XAjBz$D;WirOpP6TQ z;!t(ur@{xv+)LZ$C{+<#_b7p^VS>Ba*xxZh?0*Lpx+a^ALBj?NTen^=ywcP5J-zyP z56>OjkMg<8Th*HJE5`~)eD2jg>#F$<{#lsH|0k8nmGtOi6m~c|xR!X&w>j_SPCiZW zn;XC2Kqnw`$Hq&iO~^p(^5)#YFgYGLGxv*=i)wZW*Ky!sguQ(7arjw)CID?iwKy8O zT}WotgcdFzHY@;R<^$vTF#gb+rDfUM7=^DSY%%woj>(a4XI|;e&@7H`&ZTxIUmH;` zCRTuMzA-6z4m;HOqZ-z`tJ9SuU#krBl|96c32qNRJ}tFeyM5*lPOP<%=h$dR$Xz|{ zR(Zn1Sb1j{$aio%n3a!Drjw(7+>%Ie^j_w}bH+=l zup60N(#~Z0P&N6t#+S%=SlKHvWqdGH*Nt)MIj=q@z%W5>yqGtGcywA|X6KifT|(`V z2|eVFrysmXCdFffN2&eqhlax))NvhxC`wrz1nN03=a|zW^ng{5jq9d*Q{dYXn{jh& zQsqqxL_PW{2G0OrIoM@Do=r7p`ievCo$|AFkHqqb%_9k_pK2Y*sW{4Z`@6O~_#Mn{d>@L#dGUsG z6iwum4LJ!WY(+-9NBeIP4*0O}gL7w{>YA}#=17V}u#vIZHbLOr7hv?qO=p)39vvfa z9s}ZAYvQlt#l_RCjL#m228>7PjFEY;KS+=7W>3HB%RfcYCN6H|*c#-~5Fe`Px~bk2 zhn3=W9Gu;tRfgQ`JAE-(;3Aj8%tQ;@nTf3-YG9kHMq!=0y4A2#I^hamKnf=K5eC=K z*Cli?!5>V#<#<#F$Xz{bG6!Uzsy);9Gr8{OufFpdyuJNRf9`kx^zH4D-vvnPr=|^Y_zy@flW4LPJ#(rkTHFKmhRoXFEa z!OavPV`Ka__uMY^06Pa_sKy52qi4LQ4RmMWxd4Z>`z~>I@-{KQS;+aqj*w^cwg${` zhY+b2v0=YNJ}gJW1;5MmlauZ@x~2^CZe1O4M?d3ms&{o7$GeC&jX$-&RahEJwMN-i z@mW{RpNi*RtQ>u28ShvNqlmMt1J98j!X4X$8SYlUdnrGD;|>RXVo0FYkTSc}H9!Sn zth{Z^hr?9*xB)72@|vuX@P#$GJSGt{xc#9!ZSem1brqkST9W=4BDUc5M~QQLCnO%` z(Z$&G(cHh`TnKD5>LF<3qigzNY&x}#BoDjpJMD@0d57@{>a%PM+ojz*l-T%Povyf$ zLJ?>8D1pOq9e^fE9Xy;Rp)x!uf)nw%6d4i<4v|JJ96*z_V-D+&%lqxEs0mUc0t5LgUf<}%DCeN zzJch68%pPqxNy;jaWw`$9>E2FXwBxpATHCkdF$~g!L#~jjF90`IuO<$WbHe3@{)%R z1Ls4}#++hP<76F?Ci7I7 zjh`yqJjNojs+ zMe=dOhkT`Y8C_W$$A+K6cFT@VE_(m}B*DvhJK2Tqe|pUJ)ZwCwA9VrL%;Qq`hi$+l zGIE)@Uj$5!w$>l7$YI?=HM{2U(w}kShHT};ql7T|X$bNAWk{b^0+xb)+&6u7DIjOC zo~7$ASL!Xn!&31&Hi%w^ZEUpm4MDMS%--b^10+Ybv`Kx!Chc^Jx_?CDI&5Hf;E4GTXPHXnVn$aK&CYH2r!u*?aY%%^dFPlXhQ143E^}kv(`f*KIuam#t#%@!OjbrqR*Rkom4hP;VYTSpzPr{bhH~3Yk~5w zk?+%T4YyfPmff5j8$OPbjt>)@Cr<85Q|TH((Aph6@E=)EjRn5C_7D8pPyf){+atdV z(9t|PS;qDtsdCQhs+b)&+j!qY$~oMF1xE2-;&{kka)|sy#vBGaC>(d&&Pn6%lW^|9 zg+(qMt#s``+r^HPjl<30W!&+K+~bHtOW%fXWaRDUcwm|n!-5N~`Rp*T^;`^VHVuYH z%5M7BSC1MWMD&)-L60FHFG$vpi|Y@d5hz~A2GL8ejV&enb`&x{OlEJa8{b%;4X8p; zyZ1C?VR3@y!5AL#AAYm3$D#X+`;?!a%%tJE`bzAyC3UXRl^%AA$@b*Uz1n2m=a_#f z@w_LFZQJ4)boT-mpukb}rS@eFJdZBNBDcX-Fkve))?l!s!u$63NzDpBqO#L@o<3gY z32#&CaBzoDFMg3vF%@Bw(e`lW$`+={anbS7fPXwHMI2_;*&t27uA04BMeYqPB^dY{ z&I;Ku(B+1>q5)&IY!WZ0&5JQ?dRt#g!ycUFW8_@n(_Hm2sP4|Vi|3Z%9dM1cwbWYH zuv3bZi(2^Vo;Z#K-}#c#0jdwwu-@X&_Jng+byGcH8I$!+^+k4HQ>;}1x8qNH0bG76 zd)flm1Dc)Pt6BP-dEQHRSf_D$PF=n!&(c;fVJkAmR@yeD-rx2K31`ggV?c`I5P=8< z7ziD&gs0_X)NJg+Z()#=JuIs6z@It5l^-d@i`$BYY4h$E9-wV`Vb2)9=GbJkV?695 zD_~lKJeqUaoO%%XSmhY^w!V~xJvhh52u8+Y-@=|U_9tX(6g*pK0WJKYrjIo4wQXCt zDdIpi%NPW&`?;%ugszVhV(K0!@vB^h(|rL!Yl`Xo9qKRUyTSIkAC5sA7of*xbH>?#h>K0fh|6I1?ZDKJQDNU~!Y|1;`!0q}8-qzs*{qBOVJ~bl z2ln2r*e3k8uC{>5LxI=*-uXUDZY26Zb&nIYlB4pOO4c6pD?KpJZrSIv`M(6d?Htp( zB6dH8XBq|ORGy=4pQp)}HS#zUg6%7_#&pi{$Kw7&%C`IzYD-P%2>$JnCT~ciLQ6tuot;q=`&w7C&#R> zYx16gu!fKmN6@6-@;R~nqQ%8|U)>$6JD{{H_*swRapFuaI}))c1U+T! zO$R5mNADM~^^~hERvk9pI((CrbMkr*48K5QHuROS7MtMt09bDi#1T*DSNsG&{Xl?5 ze=@cOYVt!==XogoDl;rj0dl~1j|Fq76JrA+`~vU3Ouq50OR=~%B03IyCm1L1@j0?3NfBp4eB4ye9mXvdoQbHD%a#EM zCTvAUTkP>!9o6pqOC?%bfe@Kr!jngca5^$l+^Q^a8}eaVVTdP&yzEtuF&m0zJ{ce8 z`Up|)J?uss#MtDBwf)cjRSzu(S(3wsyxubg?O|mNi_x0ReQa~aZZcnTjsw>?+SsPV zgNtLwO}XKywZONrZUU7XaQ9opHyT9VqiSEmWnK7DGUl|M&xAh?o|8u|#6zB9qHj}i zUEH2q05-~PyyQ%LFeT@9KJ@n^?^&1IX|mR+ZC*f-iGIbs?Z4ow{Ko!TIsKHn95?o6 zlOfKC-(?I7dvvHv!Wg!Y4Yq=z&+$QW&%~01J=7d`{c#EpT^r}eh(Tt#1tJew$BCCh z{OQo90gzJuc!48 z`i&QNL4o}&BFPD{&GNz84|PIn&Azj9*)kWw!1i1FcyMru-Mmx`hP@aa7d|e2B-1W+ z>+z`AKb`~vKx6XI;gd%Lku&#zQ>J5+!OlOq&|k>iiE$$)VA)^VSlFkHJZOkP8#t{o zH&-H#Xl-n2`*z6f-7`R&qYfC0P1u{R_Ypd?f$ixlel_eAnV08&`wPG85B<@%H~xD8 z)c@ee5=&CZiukxj9h$g`rvn}n9+s{~1_ot9R6yHU)m^TkJYM_!b?eY~F?%F9^2dDY&?<9esf_z3iXTt|R%_$@2U**U(#xh&knh zH6Lo`xUfU`$#!K2c>ifBIRyZXB)KnjNJ2jSAfVy#af}7-kC!=W{^`T!;#+;`*znB> zi$G4u(NMI&=!2AO3~b*TL&F`vGv4|}qYo{4PkcSS8RNdvFYnJe{2Dp4DXXFU%|SN|Cpa`G!C z#oxuI_>99|_BQyZU4xJhP^+WpXs52w2N2T+?sI zRdDJWhN}V>It~MM_)ftx@-$hsilesXeMQZ3{cIfj*hD z+R)qPZ~fqdHdp*0X^jV^tLLG*{!U+tYII@`0d zCoBA?lxb|A(r@+^Yo+ye&{m9<-EhzvVS&rBOy_D_?4haM2PvXv&d)Q5-gJmjV{X%O z|2ggvJA06N9}MHnS{IN3Q#kNek41`DJ_-8+AoI^w0I__{FZ{1Bg0|3touP$bZaU->)ig zSud@-lW}c2?gH28Y1__Yx%L^n$(POEHDBy2@RoVQCdF#^tlm2kRGjNgyYmxLaw445 zp$5Wn^et-s=+1)5pO)|-=tFVb{)aD#g?vzKkNvShL0OQlmra5VYP>Tn{I)OL>G6vX zE^FP{y2X_Q9C18En1JZuv{x_mVq^LP=jwA)QwN3nMEqdG|2qv%9vyC0pdBdD=d44DVi*G4^bC zK1f8MPtH_TjY-PhFdno8lOH3#rji(K1K)yRg4BU`d)%_m51!dV?g?Vku~^ZkM{=~m zndHiig*qP|R;pqCo!|J)|L^UMzYB0EoWeS}py1D1=-ZrQ>Hugm<}uTA9m&ahcKrE~ zg3?1U+#}yS-fdIhlTWV4jDr_O)PO+pY{tNvutuc0-HTtw1`dl)beVVRpEd_cD^H(L zkD1R zXWxQ}vn?{hQ3KZH+nzJFJh1@`K^l;ZJ=7dq-wqWY2{UzvfoWOsQ)60z*VrZF`fKQURX-8ZQuiZ1P(GWk=9ysRN_uCN<~4gl&;GOG`54~W+i z6Vj3&BK<=_o1@NXb_j*ngy~zvmgF|Qu&qqqBhyQxi_3G~jVbCO!E`kj`Er>2GCqrq zx}rw(U;3mS9J?)f8B5213OSnh$~{M2Ym}$R@0#G#B3SRrYpyNNPlZ+4ic@j3vD%mW zU}pF!V-4(E~7pB z>hF$d6Kh6WeVB$wCALDxcq`SV4F3BvTOF_-LnAJ!h-KbkH^GN~GKkuUo^=z^d?|0aCs8s9c!Q_fBc)4n34Muk zVdkCghZV_3>X;9FOmafZIS<1&Tb$9@N3d5uk9+*_T>*0JWyfIH!+>K8Mt+RPAdOUl zGkjC>kz&xn^WXyodo&a)`(UB8H!R{n5yPhC0~-4oofm4dFtA6X-(yyMZ}#xfzC{Zg zm#y@sgQeKpl#dL5p6KD4PHKTUZTX1_B5s`EhcLI~Gpiq+!zcX*2Yew1=8=38Kg2u1 z2k*vUIAF~t)@Wugei<8}7N6+UT>UKhX;0%;3-u9xsNd`}$IMJ|L%m^C#5d!5wmf3X zG3+?Hu+jBd(q*1JPkVR9rT&)tVMg$g@|=_SLaZ9Qsr>wQXWL~og`GS|TJZ? zseSU>#g}xQS=)cwN^SzkgSng04WmQnYfUO9)FlembFs(1Iwy&$XBYXJ|{wp|g& zv^I+EmpT0A!FC+kFwK|yC}H0-g`Xj23jFIqRR_cXQ_1zjd26aTc^J6`Ra76Hd-x1>xUO2J(=b{z3 z&Q9v_%!?s{x)^BPbv?{X^J{T3K3nIctK2NP)j+u*_nOe3Lbt}5PdKx^`iT8If=-F7 z*C||#s#q5ArOLT9=8V^xXPwQ9cxHSm?`o4d?$)FXY%ZMTH0;+o#kK~VgFocga*p%u zbCSxZr2|OCvwH?-f#gq4EkX;Ni-CZdOq1Pxln{H^%NQ~=Yz`L0`s(q@7?~T1e}jG3 zm_sK#Cye2gq!IEZr*m~S)Qg`^-{?5+HUqgHd6*EQrYXKt^dCQkZ;eGgQl8@DWe|0x z4e^{OJBlCaS$nQU$3ef%A7g{w;uBqGBNK8{RQjNje4JM~W(={jUhx%Qvm5fNxUP6q zU)d*F_`GRnGPlkx zOp@m$-RT*W1%SWbVA0#q9vfWt9=KvCYwD*xN{E-d*2A|4gyNWg?d6jZY5<$7c8S3P zNTdG{i9WboX4r+^I6Oq!c56qT{4l|A!!BZc_5g9E(sC_syCRR&2^_o#hI-Qh?KnrD zI8?PW*4lGD!jAsjM;9M;1TW%HAAk>j$bmlds_v1o@=ao7UZB5K`$ys_Y;t`H$RHYQ zG*3rsUO`acOsDcxC*|qtqc$K(cH#2_208!bp1SZ4+l~);cy4jVUDkg>x*%3{=K%ct zF`R?)+=4#(;mUakEHmT=U60*1mI$I6cNro+pZ7 zZf1H;v~Jnl=E_09X->&j&-!yc!bp8I?(%|C3=9`B(2v1%pM=8?8f?T^=JrA1Oldt% zjb(~06s29xy|4>W#>!eM_pmqBPHckr0|&aN;AYsvcYPy%&nM1!lbsKeCVQ8B1J8tz z2*wr!FMT{__K&}$2o{Y2yNzM|6ASg^!~EefeK!Xz4u4E&bAPPh!(!J%&RC&r4fw7l zeWwFnxv~;-kIhuh)!9%_Kg~U3m_1D3;(CA|4f&$kfeJe1 z5nSqXm*<8}_yP9~yJaZKBWv0DY6P+Nm2a_I`g)SG+E>5ytN-`^_V(8QdjTqU<$Zwo zwGM6C9;Ys4CrmU6gFLae4hb6&k=N}8n}c=voi#p>V7| zAshS>`0QR|oYbYv?VWMte0S&u8;zX=m5jR94;)RlRqMmH(}&08<)c)5 zO43b{^Mc=HL#)!`LZK|_DMsIMJI?GmcHiAvP{&U~4?IlpJ^R$v`2sLCjak!JI8#6D~^{^V^{H`Q&|Pkl+PA{O^w)oA-{2yaT~;i={d66T9O z>*5Yaz~6oU^Pe5Bl4kyJ9CO1QMO3s^BVHbuBM!*gz-(0SF-BIdGc$j=LI)bj{?=H0 za-|Wk#pFGFPFu6rMvjmreaL-)SeMQ1jhADwp?z0#;vRUNuqMo5_BtWn&R?4|4$Vc^ zLFL03@uo7c{sZ<|g5=L=y>2rXv5y77T8XG1s-J>i>sZw=$O@huPsCDSgGUDHTg2rs zW0$d(3@+S=E$20*Q?4l}DIT%O6!<%cn@#JtUAr8sxYZiPy6?uc;N7LT!fC!G7P+)I z(!c0#yjU)YO7?{?C+|?ZaPaXYe`IQb#-ru7aj|(4w6)9g(TAwTp}g?fZeqJ=O^(M1 zvH9Z%owi{UBz=dK2SnvDPPQxV*=DA^TR-Qu+?uoez`*}t$5^Z!#{yj0kt6bX(!kbv zEWB;xC%Ncpe7|)<)}s@i6TKKH9oCNu4{^n{5sY(pz!RbL4(eK0-ffpJTdMBgB?32*`%DChvqV z*Np25uAz~OipH5^2>%6^W{>t7>oU%j1C47^la+a?bIx3g5=&vW(YT1I`U+=x{Lw%6 zKmOUbx9i^pI7lC=W%e!gyUIQGMU@j|3+|c8qw-t-N{2_BXmMemixYDu-3l3xRKv$* zrg9X!;Z+B2vwP-`@{IK4#ll6r(6x4X_+(=k9)W91dR1Y3$zNb-qqVPO(?<%9JXI=lKI$H^p{@6tU#MohSzhH4B*!50Z`V+LUHF;qg%nFnl^enf z{;=B^bf1=T@_D|&w}#|IX6TlnT|EACS}cOa0=fTq&x+9aLI*DDKlo89!%mA52b|!f zrpE64Zm9V5WQFv|e9gA($bm@ zK^4cv`h$)aL+qW*v*2Jp;92H0;iPY~XCX5dO0-2B2cZ7G9b;{NN;R%YEb8ktT#p{H z85lh_ttTf{o_W?V<-{e0H$5Hnnjp|;a#egQy zd-OYIo**v|FvYkPGcL~J;jz0^{@#a+hFJ5M@dvm1N#l+e0eKr1>teAP1MRDR2Lrnb zr@4@uIOeOiD&t0t`dZQrEgP=l8tgV6rYcUx+x4iY_=gTP&xgir3arV~H}&1+5ALfU zxhAgdY07~$tL!zmZhtAqVxMVFm-!T&>L2lSF+f0@MGSzg+N~IuL@TA}Jm$!aIS6DJ zUf5_3gDnN%@H&NW>P!_*M0(ov!hTlyzg%xnXzm+psBsT_p%3Yp-Q-t_?m^On3eerT z62EJVB6(6416H)nBOce=#kBD#A(pU}F=S|1*gWQ9s~y7NWo?G|hFBJjybFk_c5piw zkaaPO<4Ru1EGN{v72P%?bM!Tt`p|W;Vl|}LNGLXBKCE@t$Gr0I#Cli`()NAflbn@r z%82=}p80GzKz`*VfE+h?bZ=j}+vE(MyZA8d2e)GEO^4aAmt-%*UJ)4xW;TI0Q19x} zMt$hGr|Hj^>Y7ct?!-*ieu#_s)_=17Ek5rKzqL)hDA--XCB79A7rHKVcj@^es2+TV z$q$b&i1B6JVRZO%or(CPKX6`*xp-J$9q(KM#KY&T?Ov;%;kB7F~GX<{WkqLc^=wpYB?S>cR#yoGB1yuKN z2xkM-HpRH~U*KodD|s2?-}86J$9J6gBoHLtskO-tk z7++eKKsKA{{+QV0eC-^-_XHold@%Kwft+vh5{~{`*w|m&Op2o5YMd{qt9i#^&O6CD zNjemx`t3RtGe1xuvEr-Fgbgc~_It)>pa-YUXJh!gYVXD5oZzq8h&wXdsJ`*zu;q1; zdPZ)Ju{E;=a?M5h%ss~zyc~cZP55|NB2MTF9K@fcF_s6NBQNF{6v%&*7d2&l!+tg> zcuW7Z=Q?c0LbKf8iZL7Kd5bCb0^<|Ru*V$pOq;=n_|L=X+7z+VHvVrJ6tHhL!(O2d zy{}W$8$RB-c1r)Aar^OIzt!|Y1M$`TwsR!DD6;u%fY=z~z%IDEpNyKn_=M)ZHK#|$ z64G)A?yI(g0mm+mSUn7yBjcILpjTVlsJ_8tP0|`xTvI!9z$ogTxpr|>P{e^IW#&PQ zSfMX)5Pz~p|L=6zpHwG9?wkB^0qw+5@Rt6StFTe^&iGc0iLl%+vNr%9Fs|?R%Uzp< zFa4xg^K^(S0eB`lap9MG%V)ALa35N0`lvU#W;S}r=;QWt&YhMZ&K zbUu@na$kp7Cj+%_+{A5|{Q+W2+%T|1i$f1SG_gMf{r8fyha9tlZ}16Zfvf1ADx=RE zq>MeApnmuo^r+*eAMAm=XR@D|7rb1flFhL#G^@WBNsZ)!=8R?clC3vz*{xb&RKy zl~`XVs~=BITDy`A%M-I&~pQ~8?z*kdZ^*!M?Zd`>m`VZUA240t2Kx3hSK8vt56 zG2>MsRwwK*^Y5i^*G<>C(K3JASB*RB4VM#No#PLf{G@X%L1-d6eo74DhkS9^To-c! zQqLk%95FWguq78)8FT7IM_cybT#cbqJ!8 zKBwp)Rv#*)$4}N|8h*`xi_QM>zw3|q%&7NZGv-tE2jIw!_K`b+@OFETK5!1`>nCPw z-(rcV>-zH2=@9)S%+h7sX4UT}$w^cwmh|7n9RX^cf-Wn5|m77X;E6#!-+gr?tP2vM4+)Qn4-f6pptZzxicqn>MI64y#^JW1gGrOA&P4J^D3)XNd91QNl4C|a`wBzf zcQC+KEpsStHYShiDMLTVWi4WjL{{365IDiYJ~+&<*V8Qbh-ru`gE$v|rzrWQ0zG3a z>=ZVP@8Zo>y^aI-9l;ICxO{f_C%mZSv`uWL_=)0HoD&XQuvM%BH)3|I;eD>OrH$`o zz+rD+-Da9^EPH6+Q@;9*D7KRaYxP)JykXb4EJ*nCwS!;8D)K?61(=PUZl=DH+k<2r zPNd^(ynO*=!)o3fbr(^?#N1IH8$dRfztW4enh>9VcnI~(V)$j?6OIj5dI z<+-OGec6zgemO|-J7aPymNN8%-0NvN?qZRZHW0EgW}jo7yR}Ywn&lpG4Y6eq<`X{p z?R={}?a;5gz=eRWTo!9hOwv=F`%6DG zSn#oiLk!tA<(P9OeAQ2Vtc>pJ^3h({$HlY2glfUt-yUIc3>J0?Ii22$bIRi3@Uq3! zV~hAPmw4fK@NM?8l7T-q2p1 z;bgVMB425;{SRr@w;fvk#$iKiJ?N8bsX7qn`QfaP%X-8*h)nG;ra#J~7aQi-t*Pk4 zrWoYB3dmph$=~_6zrD%t0(57L`(F$h4@6x|#2~f@n{q!$v2TXlHe({9nM~W+X8K1<2xT6M1 z-+5@d4%d|GgT85#b(Eu5-BQkYV1xRhdF;pJ{66C}gz#YA<$MUHyk;-oa-O0Zhx9v( z*=rxUjSSn8XK-vgBQPIt%8P!ud<#s77QFop5*Ei`VV988DdH?+ZQM)W6GpR1aScA8 zhu?FT!&z(GKy4ZvE;Ae06<;v*R;dp^^ryYhm4?kX9+`+s$487uoCgkLt0lNvi@HJ% zjzSKZ=?;^peLsHV&gl@g9rXyod~oS2o6@)EGOEwD$-32i$YBNk2;KVVbROeE>ZFqi zcqiPb)U-`(rud0s8tXgw!8!2y1s}8+*yPCZxYQYBlZF0}aXR+L&WH;De&Wl03`UCK z&SHPMwnt}Xi&NTkhQT^v>^&lm{0sS@gF&NsO8f5npa1OqwL7_`4iC#c)djG;VLD_n zDY8L*FI!<3HWOXM+4Ql7jtw11T+d4D&8Fk@R0LsAZRMT z+0ko@x!YPT-3M@?-yG9M?I1&|WKlD&q4++m&hM}r16zL!9Q-=ZGsGQ3a=D87{uV*7{|>H zrOQ081A6R|Q`a!@>R>FKZU?4Yt>ftVkw4c!VTWJD+d?qEM=Zb|AF&`m^uQXA#eGE9 z>CEPkzxTWSzh>R7ap|~)an#Yh=;fi~97NV#&aFChlGyryTIyE41C(?ScKSqRdS2je zYj}>SJBSW0@saZ&J>>dDdGz4WFPom*Bw|RIum^s}hZ}TpHqPKL^oq@6ox?QGXEMtb zc&-)mf&awo$VoQSJ<1=`t4cNu5o8m#gBh zWbirR##&8lv#_h&JR*De0*yKziJhO05QQh}n4@d5u(^)(p*>j8u6VfLJF|AiziH>d zjzYUfzG;d5fcvDye#ntqn?Qs&0zlJEe*3{|VQUQ22b%wuLzK0kI0B-gOw5(4(=lyV zecq^f&UGh8=vRrabR>e#4k2NQYp8DmntQJN30W! z`EMlTCm%UVz2gnL7(*YmA$TIAAG6WD#<;~^hh5yN;5gYwUeu#c7**vl{Z)BoY&oYd z^miL=@7jGLd|Wnn{NY+jR}0PUGUFuo6PpZs+I;D+U(C3yv9UZq?^-x6lfd{0i0H8) zour=pcI(Ka$JnBuc#U2%dV@O-}P1^YYiaPXFbGgMS7|jD_Q$2LD{1Uk`&+y~$* zISEYmtQXbRCrqa+CiJ=VTiAt&{uX(4*qD5|gSd$9hUk}7Hsk5Za+^ zdu?o3Jxbt~`ei=w-f8}?1+T3T7JNmMu^v_(2i6Cw(=pV;yoes@c1>b1j;!y%R@Od; ztk0Kf<2Rr1-MLa9pFH9Gg z&E2@t5ms~T^0L8ZVOQFiN#lFKZpJs0n+sgf$=9?-z!hJ>+gF?j?%boF`5)v3caDuV zykV$k3`czM+nRktY?vH*9`a+o!p5<-js|F^{&0aKvBq5fBHZ8jsNTIP5-?B%}gGm&X&Hw zpROk0we&9pnY`l>_e9ZLXU+wca&kx4r(}jv9E_(3? z8Eew%W6}@6dxsm=Q3It)F{tWl%ovt&T#j`O%MJ#P`7p0fx1N*^)ef$nCcRXzD%esDBgibJF?*sC)&w6rDkNEf%e)ZD!9I8Bwd!nab z`qBB-SoN@meB^t6 zTB43}uLo@KnBkFI@g1&)@9`kg*+@_ z*Oap{?a(Vm;GD7PHAn;}ek;@IanDUUwc5Bvda17guX&=|`y-v@ZVRFk;8?gp5) zFU@&+IPdz2O^4Z-JQDM95nqtE_z-_I#H(MSI0wwP>Q9u9l&cyK1`C1PTf7*z){Xh8 zsp;&2F~D&+`bPQ6FF$L{X`Fr)2hB5(1X!*2jD2Vk9%-`@hJBSH|UrJ z6%$`nmwjPlj|#wr&ct%z4xG)#>|x6<8}?f%bb`rTdTEt4a@)Y!R`Hc38TngpIA9Pz z1Vu!Jbc1|H^?eE^-(+GbKV|b;L~7>Uu^g=#l8@o4e3v6l_9G+ z<5}jsBKS&lk6iGUTH4Z@u3e5Q;21UwJHp=IPZoXGx8wTTL3i9S9^zzvRX>1h!PIAa z6pqJ5d^bNwgy@SUFG|%DUd2dnrzp2GyjUKIvf8=}(pzUBv-= z{j#FK55I!x9Dq~5PK}S;HZbm^!;!!BhLboHXZZo!8gOhnMy!g<*ektq<#C?VzxKc= zPIWeBuC8Fc1DEt6CtmW-y4gC>ht*{;Y6AL1|3G8T%e)`p{ZdT2i|kHN=N28T`Wq*y zvt6DicsXr0OCN*LvH0d{!(Yh_yVcj=vlf86{KCU9<0qBtBfd7bvB={gLAdeQ_~`%+ z{;db#7zamZBit@O`FdSbr^g8fkba5nk-#3Yxs&_G<+OVN`BK;3H~hqfnHbc+jsY{D z!hJ`tSRE(#%PH)ZwunvR^CK9fq6?W1wz=s;xKNksD}1PpjsvhBFt*&Ut-gHiaxI@7 zzN{Ci^+KdJd($Ty zg-qk9Y#=KRM&`RbsEvpJCBDA05p?GVISe?74?5!$nZ{&e#Qh%qKv)Zq`?RKR!um{c ztg**y`LXaxm!r7kRs(XWjN|5es5y15w|#YCFYt26SWD#>BAl(!L$NRFwW>9jzAFj1 zWIsooO?GuBbUc`t4f(1dE1CF_I0o*Uf-?3e^6!R&dOozq+YTDAmG#?LI2bMx9aMwh z@Z9koqWG>l9S6V%w5Cld(@!F^>Q)6(>M@gc^H$Q zDX!6UbwC7&jrN%5_FjGCLw;OS9cNdoIcr3o0V{E`Mv*IYXp=lIxex34ck)+==9BT% z>SlalU)g<$GS(5Xah+7Q9rL0dt6DDWxN`3Mf-$e4d9ltPO)ad_zKeaiFqx^Qw#moL z{`1JOpe%A5F4nh;ubJ3?!q#oOPe=z{V$x4P;;$o}O!gN4+}K9rK7ulQ=C}gkW}?p= z4KZD0r&-1-eB>Dp4KNad(?&=B<>7S>_!#)fBz~4S;!_X*j0GzAVNNzr`efcsGgqg4 z$7IRN8vB~CPLV^>=P+1*tpPBUXMDzGz0K*fQnol5W36t+D|PoL%X^i};+E#g2IMNY6#jwtvGuI+=PI~e_qi1Y0u4&9PU~HUM zeankERqD?nv)VHDwAZHb5MKb6`7P`Us#@eRUap5(yTh=_ltnD^e-R7UK*zhz@Z(MXr`rx2)M%0f#6=0|>v)jN_FRYwl`+kAq&#{}yw~)z6|P*g z6hMg)7p6}(qMi?L*p!P1`$gfIH#bEYh;x+uG{}BZ+}rst_K>-{(j(o;Bg9Z=J!`<4 zRJcnFYwh{#0W-d&uY81z*bo$hRObRw{t1w{Rj$NXzY|Mm@WGRoH){(|{6mv@oz-NK zgK~9|FKjy8&IDW45!8M-2K{J&mIW= zq=$7{y|UsPtA-eOwGzv5Ee-7)JhT^ElXyi*L<#n+Ix zUgVeb5hLXxI0m#=v2jiChI8L)lgG?8%Q2tkR)IgYO!IDevOYsiF7_nt%J9`k3Ah&K zJ-o7rdUxx#4kBzCaqO+m{_q&O96*81koV3t#`kh%`*V3wr;TJzgG|-U{pWUP@#oab zE!2^&3ZXh3=bVOxOo4U!q(d;KFXRlg^G#vVPyK-VESp&p+f}N-WjBarbwRNhz4`9~6nFrW4Q)T7zr7C-+a&BVzPtF6q!xY~b&5d)-u$FgQy4vv%*Sl$52#gk5(4C%E82%vTQ-z>SALGwJx1$j25t{fd5>yWnDo z+zOu1F9vaGEHEq8jy*5(XuTG__YnD}z2jzQaBBBX#jqyt z;X@9V`gxauKiB)p#VwoWvwd1R7hzuS={B->b_+4ZspB^8Hk9g`x0MdTgg)6>pwRnc z%X!y}P4IMp$pm(184U#cp=t$A85!Gh(Ve5@cQT7za-k3Mb8fxjkb}-UV4Ga&0eSE* zma;3(S&K4ug4{2rQykaF^BdMixbj-6YB{El2}m#M3c^2ZRJu~OTC39Fc|xuW7>Am( z4lTZAof!`CoNx9T!_)-ai#iRlPl--NX|wQgT7Jx^jAz3Y>{!FNPg)+!pUQ0T8U*#Y zv99zlzvbYb{KB^SYLR8UD!@voxoqLYCv5GaB}vkC`a(yuX)iXNpM!X677Ey>1z?c_ zgF%7o^nl1l$vT^RtWViErGxQd!NsC=!A9m9>Ucu;ZgCu()gLIDmrLC2f=X+56)^n} z$69b+_A4K4O}8%ZMjY#~;wuAqlF;`b*;tFA1{zv(m40SFsx3ZX7LUu5}g1 zN6T!lFxIrsv<5@Yv_XJ3>#jMek1QX2DnQ4GCB?34jN|W;8g2@$6fV0wQ`zC>d^^WY zzJMWaU87LU29qM*;6W~VJ?%H{!lnP|(`xF4HJyxC1$js(-0)Q`WG74b&Zf{={NSDa z$vW9w`6A!42WMJb@D3MAfm7aU!BlT!=ZLsdKERZ@7r6P!8@z4{u;EJo+YB|38~KWR z=|8Pe<%xbO-L7oKaTWjIV@`cf9wDL)BpJGZTH^` z&%wgX@^6>i)P`Oz;mCEpY0Lu`drJIf@$4UODw(M$Uz8 zXTwQ4*ddlj2(gxa34UVFx~%-|U^FD+RkkyJB<~$xtK4?t+QMvJJi*oWi|*x}hw9Nh zc4`!H$^N{x9%2_jnB_+<_N^UDBz|fBzQu^yET;OsT@OkM^j2NSc;*c>0)6us82iwg(CloQ% zm{d3bc<;sr{L0rOd}=eqDtlXhtI+lsb!m@jd;_05Q;hn* z8s|Sa*&hm%|0@pDx7h9PmE3j~XK-!!xa0`3Ck!^?+4cf1u4NcO@JuK6E8yTfJQ=m} z%Xn4DtjqI=KMlG|kvj2dqC9WHuq$*y^T;P77*9B7IYGX4aKM`u6nS)y68$F}#B7Y? z$|rHOv%bo$kZs#`E7P?ksd+=pYlH(F5)QmcEtyOkw>yi(=cD&LE<-f!}1dh#Q!aCu;cpCu#!<%_G88F ztm*k9yN+D9Qm3%Vs>oTF=fS2$YvWkp0JMQ(TpqYWN7JcK02X#L-I5QKyN3wA(}F+p zC|Mc{pJlv~chnF>kF;^m8H*ll9j{#E%cqQeMR1|pjblcWZMmUltUL6&R^^!Z=C2Lo@08+~9Fn|>qmsdQ`|Uea8%5O)MZz~=(wW5iC>Y|v1E-KC}o2cPPXF?2ZcsIZW|$5yGIIo903TgJHQkX$nk>Nn{O_K3|D|0A5UoUVL5 zqSyE;ze_#$eA|Dz*H=H@o5o14DWLgy*QX{Nl7*Av3@t)=pXxzhyjR}m+^sLlG5SF5 z)`4UH=zckW1zhc9Tx~cyUg?No-(iKHdiGTTL$x_Mz+#(hCbj_q|S_{dSHrlQK`k@zbI6?cVG z*)x2r-->Ul*L~mi8TY*H(WKLuW2~4E`T#oFyII}Mx3C~PF3y}|oGFs-`X#>VpTIH1 zRr#r8N2--(BHJq9#C8;?-?-zp7=e)F#ZXk%<#~r~i#s%31Q|zRMV4(>zVgNlK9D@h znFA>1h)EA)0Xam7A(aC$4l7aMrksVM%e&C8M0aeF^Kv~_jvmnE8sG7qZLi$l#glJk zx6;x6PENGh>34irJhOPncUv#}|MEwAg6(31T+TDj&urf!&S{K2&2ct`*L)^l^gHv{ z#aT@Zw7-LE z7GA#wak<=!hO2@*Wb*e(!=KMPt7(B7YNhK)fX%nC08EE~z2!OO?3aFp2l&o!(vi<_ zsN$@t9mfl}@^P_e)GffH2_IwbR;Iv}oW!ZJkd-woa1o#ImA0b)5{6p$-FVgJP7d#} z+l_5Eo=0Q38;AO-Y~Q8lS!nxF&j8N_YC*ZmqDHWny$o!L1J9jLP~pG_$xo*i|DAku zGK+W9yvu*vhCsy5HCV~0EBjS(MuYV4yE_5Z=A!nFuEXl$v~d($eN+F2}+=S9o5Z4PcdoCV|%6?}-F2QTajT&MF%BYD;@kjtk?6^_UCXGBpLXa`4`wREbmGl zEcR|yVh6@|3F5px$|7g?Q3|t5sb6zFuQ>h*X|=@TC8GguFMcyB3+_cUofcHb>JU7; zpJKAlCvm25kl2^^DCOLTpx1(Ot=1-AjaDy4j_(Bjhzf`hw5d|53ht=iin|#tt_tC z_4?vK_5eGZ-MJI}OfHc1usFkOgAHxteEwf1;U2)gZ~l$HjS+jBV-0LS%=|WadyruH zoOWyB7cPg*wZP6)@7@42;+cH2jCw$4R3~x8mOm z0KD4;kI0mcTq-l@3D%ab#?cQ}tPg03X)- zc`$qIW6XIDIA-s9`|Skm*(8S@cq~5Un%U8Q)+4dj?0%b^kppq@9sJK|$b(HdqxMZ^ zcaH12vAr^f@rm~v!*%v3SrHQtZ8Lw8AHNf>K{kJ}APijkl}=!nLt7x*4VTa_2GCvB z8kH=pit{)YF)Q-C;IoaffeT1lQ^>1JAPz3{T#sGb8RtUYR9|&N4Y$`(GQDfJ!teMm z*IMFv#!%y^{H^q=LoC_;u0Ha?*}?wB#fM*s(?^Fo*Bfp&Hf&Rxz4!bWfL`Q?HOC+E z$bdP;ITKwuL~PG)$g66o7cT>j9m}|37UPz)sqI@EdvA3IPquCI@^MS@{eKrdvg z#prYhkOjUw_869nPVS3%pRPtO7cCa?0%z)iFE)zW7dTbtaalXBS$9B+I+nK0!CiTd z>1&-c?_29C^}1{KNS&^HFo#FDE1T>u^MABnV+voqXRxPz44uU$GP{?We)WKzcFhpC zFYJ{A0nlIWp_9h*+?_ko#}GWb4Y9npHGk!!(Rk0Ae#}Eee)&D{c{Z^abI6tk$<7vG zr6c*naV!=q9~}C!eqq<)784eF0XbB~=HtfgYzthcPm?k~$t%`FWTYr%8Mc`754}&?{#bBhC!=H+v{KX0Li3PqFRfwDq^&g0Kgw z8C9Q}z|RI=X*}O?21R#!sD5r6_XZZ1^F>XUpNN`$)1#eul(@+Tp0&JtkgAPiUT%Ct zKu_UWJYF}#`FJSSVX_%wajv2$?73Mx(*oD&F=-h4lb-)6ZdeaF6mbwlM!wk^J}Td? z1q1j>de-A^ez3c1V)ipXedt9s2Dfg@^@wXSHl07)iy& z%~Ra6U@)!S$zxehx`CWh=o><%~aIs+@eweO&;qbNA)yidu=J-C_AMcUV zcDpVb&{r@B|Uo*>9|V4kGDqtCYBQ2VS`UG@hZ>uGkV2k#s9 zDw~YS!w1ZI!?u&v_Cfav>iCP6BNSjJjd3p^$#Syb`vi%vO*=}zB}~@F-UDO9R!cO- zeaM^4l#k21PfO9!puq@cl_=>O4f0U@Z#4U|>0Yx&s*I1-p+|PXBR9NyA zIJM!pt22c~A9-*c1d|UpRnL-xj~4>De@y+Ox!tnEy7`_c_X}!FKrZgiUMluQrn#KM zkMQVusP@uIuR8e6_F11}Tj`-QKE}(w#U47=8@-OzV730C z-rRG6pAD2pwsu}~=1rPs>&eTW{OI93_lEOx6AupJ=h?wyL%qwpGbS=S(!fTOLdftS z43G`*5Ok1Uy+1RO3#Kl{k=oQB^ohvoY6U#}mJd?iBx8tc2^V>d+SH;N7xjz{vProG zyYjh3Qhcp+r@k7533Zk632Ln+%D<6*JA zGuta;$*r{IeoIAPK3WNj>5|i94Ks;L_XYCI?T$X%a;_Yd&3a%h4us-$wtim;pO`slE%> z4@~xRHOFNoKZBb6SNrlFVEsscrJvy_*B)H>Vy$<2dst9Y)XZzX`UME`w_>i_WDRJ< zyx)DdRelz+t?nnrWHDlWQ4r?}-Ay^{9{L4`yir)Vx3~Z3&;QB){_Sn`y8v(+_DFz5 z+8Ep8wewllxeU)Lok6~9^zKbjcwa4i0q;by_?`4QlUS!j_Y65Xs`#O+}$uCHiFfM3ORJ=OMK=1!2J`H?Oxe!nTvLmqi2n?A7ZWEtULPI z7zW6fdd%4%%S~#NRXXRLF^x~b)p*knOj(zTCS;AzVshTFxhba|`uMaIP9}q^B7p1) zGokLpAMv1c4nAU1ZM=maZmbTnxmmb)ovln_9k40zcSru1U&spFU9CCn?y<1+M#od!?d>OtAwd`==Ag z-5>0^2CF_E9oYFA44Mn# zFCV0JQynCSJTvoYF;}w2jhRc>0C|(qd z;RnO?D8Y7U#IuL3jE%ztgJnE^od&iWjX896+_2k$+^Q`ITg(=Z#~$_*dFWx!r`1!4KDxefIJmd6ftF zW^(whbUCK4Z9dC6=W&Viy%_sY_Gaede5anXH73Wb-{Gch#&$mCQr`XaL|*H~9&=va zfl2z11KZ93zAPTr6TR!WCaWHgnY}@@!~NFw`OpechjIH(mL{y@>i$e7%jr<7j9$dd zSY{7Y=o=@;?BNDudyvXvt__@p4U%H9cgD##ryVDSxmW(I`@lJJ)ncowxIk1m z8P7Nd_&f64sbj2Na(qWVs|h)(TxT{ZjIVC`XkK^h?qIcm)jFvDBgX0zaYyTh?b6`A z(E#12r!c@pXtMqLOz1)SeFy#+|_Pr zk(K}I-}m4CrMEZ!E&$`rsI9rz+hXFl)eTK~IcBeV$Zq|z!{dotT-)D})N~OyS)RcG zS7jWivlo3coQGh#XiEadg1*HDJ6o$Z-}yVGiaR(!sh5R-@5*6Hn<_WxW^&k8I>^7) zwyFhln$?7QtT*;z{DJ2a?alE2jDhc4Qss4KolFm`H~l0=5 z>x*6*c)3>E=X=8LrRqE--$H#3lh0Fejx3Js^i)qrmg`j86g%;`J!{M!VvgCDvgTv> z@tt!<*KLN7UJtJ9?mifX|5AR0cb$HX;AXD1A=O0-VKwkg!p&4Zo|WAbWV7`xJGldR+r1hWjBjwDzE&^z!@v?=$dnX7)`b*xYc%0Cwrcw zz%{+efa4xU?_>TV1AMT~RUdpln8noPmW?n^@m7!nb`;Jc%7}EjkDp6c@=xk?*`q6o{=in zDmKM&%w8WN*g_r;(xZvrv4g|FWAVAsX5*CM-3#|FKDoO$|& zBh!i;x;w>Eu9Y1YTQ4xRi!m2F1mggSt^An92G7WRE!nyZu4%3jh`+Vrz#ZbJe&4ER z^ElL8?t)lX%3A!CSq>uC;K3OiRTT6!(^YaY|LTXcx=a(}<>-J*d*5FjAJ?c87L&@h zfW1p3KDzzWNcmU|XG3hV@5}wtYzID)K!-m>wSUmFwzfxEck~?7PJ8H5V@y0JNqz7Q z!c#!|Q}ThMRc$TtiEp=ySXpP6FCQc;@Pv0Ie$;NoNgXzcZNOqdiLo9DHjLrfOz8>9S(lz3^txK0Xq zx5H45p7leoV>rM(H`-=-o7)-opI>+Cg-zfpU!mL_?D&~bUDla)&4<;}ebH`skh(>u z@kW2kt|}S=Y?$Ur1 znJ0UDkh;aC@kW2kPKviIa^)9^h|pZZYBq=(y9HIKAz>LaqnP=AFy8U zZVd>2NB=46e%nXeYtsu8=f&HA5nYLKz1hJ>{zEm+pdNVceUhOsd{Aw7m;V8bvgj9f zhN*mo@nmqtIWdFy_L`^-YS$`t`xhLrskfUHq+672f*NRx^rZij5{h^$r#hsMm$q8k zpTg|cc6XDdu==ca`9`!=T`JiXmDYCHu-G3h2ks5T9qFaqhRf6)lYiiD`kBpD%wMwp zGAF5N)HBs`nxEUMzN)M07vtampZvl4cL5eQ_f^advCmq=SS>0&?VE1Eh>oTmW~GM? zUo9^E!{E%GXMldJFLIi#M`vHySu7p-J0_BMm(LER*ebl^X&B6hAK$3~$GiYIU-nX% zu3$4G!B-FjX*|Br6^1e_+-0mAJh7?hn+~pe)-6L&ap|0T9U6ipe47&P}$r}^|Qcdd1){^7~%(PQDk zF~AG&fDs+3JIqR7=*(Tahu|~L1Bp`)eQx|^jVzD3m{f7H7J=tL>?rE`SuX8VUbcy? z+I6w^3Z2a#By8O6CNWP7qGW=Hc*{oZ9~h$`pTf@rq1m6P^w8Yp;9@Ux)C1D$KYK_* zEQQsPJUkwig_C$-3Yh*cbpQNogT&fFA=vi0z;+bb-Mmlv~4-n|rf^6nw-RPAGXUa7I?m?8T1Q z%ZIK3JKr=!f8kT12V4TUX9`yVFzyTEck+F=I@#EB9793!gZLWV|am?=z%M1Ljv!CdH7Lx-)7ItF!7gD#_U@M zcW2~N8l1uoN1ju?J=&>FMOHpYB-?tJBxrsFojx*%fOvUq7}#JZSQaW?`etu3$7rlW z{1-eHmLGiOVXTpt{<}^XwD$C)vYqjxb_F+TVl_g29P;byFEhTllv;>EX#A&tg7K1EKARo;O*=RJ?IQG(V4#Z140fX*DBA6-`z(K+j|~e-hS^g2J093cDQ0Pi>-iOiojJq zNVHUETg77m{AZ)X14Cl;T7>jC4R*xx5o+f8Fd1F(pfLW3{Xrha%7+R5h8Q8-X^de9 ztC(ijZ7kKLF%K2;Mh(~lhPcVI8siUSYTI#Cydp!r@}rbOJf>a?#$&=seYlpHXC?=3 zrklw#_iX-N`;qs5{RjW`|M%^!`1b+~(CjRD2 zNU~KhPuezvZ`|c&<Os+e9shuoWCJpW~6Ti(3z>7HV_M_$xSTUFq(~z{3Z~YS`*) zvi6Wv4~VTTRK<_r!mb6tF?+7te zU?{@{#ZN{wRD{t96+|zZ7))TOnIbshI2ecsMk8j5c)mIcbJpf^ zR@dKCPgVEo+V4L5-m7H5J5X=>)6{SlHOsa7EpiUMF{D;@he=Y6;uq)SCn(Bm510%gvN10IXpM&&e|n;u(dy_zrY|^*D;#o{dLfSV z(HHhA@;R-S65>mnu&H;{FK@_D{X2TDhx$NkeAZl6*YLv{gFbQ|8yD$0xAkW^ii`9d z_fejTr`>ncL*+{a&>qMOpevgCE@BlDA3?)K`J51h_fG7BgJ4elhQ2uY@9>fP#KA{Z zlADBLu;d)1Jl;izP5)!9?9!8Mcz5bHj8uIyUNtp z4d+&s#{yIJFi5lVS=kZR^G)5Q4diM(a>=Z{e3>}UC&H@#!fa&pfIJ;J#ODmHJF4;S?t!1vA3+f9yMTk8Kp-sbZFly?-J_{A4gA+6vMInBt5VB zi8@;I7uhpkkzb@I%(FJ;GmB@RcYo48@OK)p&jZ(H^L&Z3@<+^SJgTy>RzAG+pW;Jm z+*;tOBkq+{euhrwRz2ZZ^SsN)z`CNBD|NRtw5#z1<6*dD6UtqzOP`P|A55NVBELZG z$8LnT98R1R4xAcn22;L!YcEPYyv3*HVO_f*73T#G)8Hr8&bsL7zCg|SG7j;^OTm(8 zcFMzpgZVHW>8h!rn596c~*b5{r>;>cmDd@+w^w$~dt zJk|~9nFrqJM{Z57OZ$yLvGJZ)L`Oa#Xw$1lbJH?W;xG07LJZq8PsPawoW!&+C=WeE zV_VD|&@0;37etJkD zA9y)Yy<9`xOJ8(25l1h)TpZjR*3n(lh80~x*-uV9n0SvFgP%kh*IWYWcD^G2NKe?2 zEz%EsPV{)dxTvU?wBe!n!#?8hptQ=bDvFNIJb%$XvkW`;djZiS)IpYC*I;^WG`nX&iX_+bs+J@VuS9GF>$I{{F1>ZDB>ZP z>5P<#tua=2(_ms6n1gldXgl7HNKY89&GbtyWH+g&d_SGy-*^jOsKfe+4^a)`#3#a`P&44X%2z&i|5yHA zj=ObP4jI3U&lUa=zU^z2BZ`mw&+6~UBLj&qk{vQgAln?m=eV61eyNyWeVNRs0Cm~c zM29yI4IB`nJ3E*<5nkyhU-VjgU9y);gh+m-Kjcb%8~W5RXkYjo)V(Pf?(lK+1c9-P zMS9+ETJLN9c_8|k_4Tu03@Qktd? zv8Pct7#mMMn~Z4rD7nN)tx)HHQ8$edkEg;ZDl2PmKgRkj-y0iHC?6PW=cV#C6 zGoP7lMn2oa2tOOY;y>dU*&iFnRd=lOH;odyu@**L`sUcQP+FI>Bj>yY7> zyA3ha9q%UHs_P+zd{zD?ENeGBJ&dZ$`h@_#fi9+6yKk<0QSC5fs4v-%Pkb)854^WQ zx~V!7>-s?NX6=*1Rn@JUc`PM{z8EQlD8@Uw#3YAH^Ssoy_%1 z;RQO+r@1b_v7E&+#;c!KIb`B9K4sa0u}yCDa}7YJMy#CyYvYw~Jl z8`C`VbTObGcu{-!ZoKD+I>1LYt?flmy4m0-d-UaTSA41Gys?dwD+6B@UlLoHxLBQ) zJ-#a+Z~r}+ZFe`<1oiM}@n^i7n0&)>?me@>jhVG@*dazQx8x4_5_#T*8b1-es4QacS|4j9k6GdSgqK3?hz zgNgIg(_Rp4Q^O&95pghcWckXIE~-`ji4XOi`pnPTzvNIN+R+|)`VhCfWuV-^ut}FRco^p2Gfy9^3DmmMC{V9%#?=+S3;gfM#w}n?<>fiY@ zfAP1!y&b;`P$$&!DT80~%-=V0a(+6Ozg!;V1D6Jgmj)LB&=+8GE_y2L!_)n9@FhH_ z4hp88^Pbm!7hldv`Jy%9+5K|Kpc3jrHLp1r%k>$=xVeq5i^t%`m({DMn|Bq|?A&K@ zFC2uUS(6XiL}{I-9CcL+gufboGMuZtW5l4g%+rmrH~)!RCY* ztr!*8bg2jBaCoF*n-ld`4IlbVI{GK^$w~4+t)hd)vc5$;LwV-_`#j`H;xaxz-8^hO z`4mj*EpJ-m=gMef2(+lcU8VC-x3G*BIJDWowT?Sr_~-H zPK1Fz={58KmMwfNJ{(9?zz(rpf3G0Ux6?ci$LbiD^&x)gSbgD3pJXst-Pl#R=;gBD zMEoo1BeAVl_Vl)9Mwh;VGvh(UdcDIrB99jR=SnvJeywBtUxiB{uJ_ z!-_>9KI>JU(xCdnmmbQ+4mye9g9Z&{TYbVF$c2IqB~I{BPiu&^CM&zx)`?`|xq<6L z=wU~_ti7ZDM4yx{CiV8qfLf2G8j(SOH`-1)V)GV_@dz&ed6`8rLeJ{t7BG~l;8m*b&v;^CODBS z2uAgEAkjhE*`Qs2Q;{or`Bw+r1zIREkKmV1)eE5XS_TJnk1k;E%kv%lTBuw&)}iDP z9BU&Pc=%>LI6NQL5eJovu>I0FWgWB*D#ydglO~Bs9l@X zQz~Npb@m{8P(?8!9@{ zb)U<|)PJD+u*7E6izL`b83I9U#c8o}AtCr|O_)Jm2@8BEmv9qje<8krMLnziDmvy( zc)a$JCR)Otd@XS&@w~qic=eJkb0JWWcMF5@8di;U*5qbuxnHI%av(`Kz8uwY`-}~c zBPk08Ii8lYwwCPl_mICPQ7pW-Nul9V`ikO9=KL90*LTJu3#pp;<5>C)k`D(syq2*}48zfLC%*auo~?67Ui%We zc7SS+NN!)w7^7XUvM0ou4q6BuGE?yl}jGsS=Ws{TsT05ODq4`sl_3pyF1fXg~?B zt=~!mpb!LFcNsx6=Y`pYtjbkCFmlHi<7mAx%ud(BIX8Gtb4`s$veZCgUhnzDmu)!! zP7p(U4$tQCVhLjz4;vycza-}cy^G+;YDZN~-aAOXpr>3eCS$|%l&{IhaMULrO02Wb zsF&6+l%X#}Ps5;MfH-nX#hMrk?_w-s5JSa7obA!Aa>;X~DhHWh92YZ!>dM{rF(@kN}2h$NC&(JU4w2YaV+ zf_TQ^r;C@2B@7k65y$!YIXg4fwj~!%2d%a_A`|&TSM7&WQNl1Ha-xT&>@$5bw_hy) z;>4pk2WoL)PF+z}@SVOFuY5^JT*NjehijuYzewA&^YLCR=;RTd@g zDkC~i@o#v1MvCh=qO3FEby}cw?qpLF4ycbYe4qiU5~yA2CqgD9O4ndB5Cel$ke_%6 z9TY>hsu+G`m$?`jYRC6%Oq3&Y$#YKc8R4Su)f|j4$D}xd7Nn^JIq%LI! zZRfB4kNsFzo`Wy>H5_}{Lzpawc(HUGRL#~3EBP|0m>GDpt$MkFxI5nBP36*)qb>b1 zkv6%Xj!HG+a8zdT)8`U!WXWf0xZK2J$j`3eQHk}6#vQP}qeszz)35)dzxS(eZ~Auu z+?cBLGXq=?Ey~&VD?XC1RiItSuUvxp@WXTDHoy*wjU3jBPndIyxsbW6mMNph&&0^7SXZ;GyO#Z8Ruf*F}C6^21xHI|%BXq97$qXn7&MbOA&|C5?mFV!owM$6n!)?@-F8S5^+8)(c1C2q^eRo%UMoteT2FNCU zwZF$BlQaEtcnKCd%Adi%i)RLhD6=1OV_j6zt9+w;s9$kI-_`m~tW_?wzh_>X>$o@C z#Zv^iN7^k`Wl`pSREM?gt}Q=2TT`sY5vW%8@e|Y(WiSdJTLuLiKJYWaIWx3U6((|J zaO^pt7#T>OF{_&;_b~4CpJ8Qe8Gf@DW);7(6UP}o*RaB2jFlhb(R1d@c|7ZW$FaGQJcLDO>cWdUh5B3~tZ;%?X&JS!^ zGHx*7oLt(P2qs5^UZj_Cl{5gTtLSi)Ng0Glki(-QI;xjZHiLZ#ztZd zg@2pXx^x!SqGg*0&zkm}NRv7yQKw9nZv-;)J5^(p=!5EK^)uz$22v&&C*|jv7>eDA z%lN+HFl6#lEt%XIEXK+BQeN+C70Wp&_D)}qi`A|2S^t@w!NOW+SY*rK%`mRUN7%=m z+{Qo=b^V>^kBlCd5K9qZatFxt?1*8yd?ToGTfUn|U=^LVAUSH!Mr!<^wj@<6gW zOkmd@hV`-XnHY;PlQa0uip@Fz>?I zu0wAB5~D|N+$qV`n%hr?N5M1oon5O`u64y4@ox{jtlZ>C(NWM6r2;yt}%A9q4XJ6H$438*x z_z5Wr*wOD2+w~VN@G`*?%>0r!tK-BT5;Q2p;x7!Q5nId%s{E>;G&N2|DWOwI^$wt6 z>2p&KhajojVwLk1hkuo`cO+OrUA&aKf{?0CIW>R=%=mBr{pbJZPr1Jf5P(YHjLeWBFvuj!F`$}A zeMBCARySHI|1L=B29n}zao5Ei575KG3 zw%e(1x=WV(2O3aAjg9MU-)c;&!TL@6V4XjK{K|Kl`r-~GFXXeME*GhozYL z$^?a8`a#-d9m{dN#U41r13x+9XU<}lT1AO<)FOUhue>X(lMdhOe zjV}@uBf67|AYGt7nM8+0?3X#EVH)q{5)#9;O$_|18_3o*l=<9*4u`?gho!iq3@ZVR4|`S%@Ne&Mp^$OG;LfRkCLK;6fT$V_LxBB01 z63#HR5;>!McBm|Q@>|eyvRHZ9;CGVG)|RG+MW%y_V@QlZ&Vud`=)RQ-@WFTVuo*sy zGu6>AtZbe$1L{nAoA(Tc6GOc;opii5R1==VJ>bCJ%EiIYsNmSq<)uPy9Y}bnIg6)b zTYWZmisWnywWB}rPt)ERHc7Ag#ect_Fltkhhy`N`V;9X>{L%8ZnjsBUuJ+gVM=wDv+6^@br??G zFv;o^>zUA)DT3bCXa|KjF?GM7=E11mS(;WkUe%V#fnowFu(FF}M6<=mt`x-+NIlGa=rYK#2CKuWVZ>sWT6Z-UeI zZd4fpweqna1+}qD5muz{k^MWG&^I)AC|#$*l+b;SRqL64SSRRlF-`G?P^CC?Io4kj zZ8p83EB8T@MNJ7}O)$D)~B}y%ljR~MJNJObIGQPH6F0 zV6I$_US6*F3U03WeJ{l~b8do*!e-{0t=^NPzHD>zz;D)7POVSEFVnXSk7RE>DB;qK zJN@_YvfsqIv3DqEJq`L~dw?`9_XEK`!TPp=hO6l?1&Nu6m=>wDW^0JMe+dMe%9iD0+d6!>Sm*OhjYAtE9s4d8BLz-_G zOZKUe9LB9tAuLq4(U%a`IjYz653k45fW!Eo{_W5Hk+(PaU4UI2F0aBRdX1b^tTH%# z3SJ%zyKTK$$0~1F=PD5GXX?MX4y1E-Exjn*WPKJ4;+zu$*2&WL=uDp*{GIho7>j9^ zZ@VA150a%U7Co8qK$zKjo9_&)*($GZfBgM-YC%aRFQ23b z0Y9ZKwcO3^4!qjKMW0n2D7<3N5r1<%>xXw%rtqtt+)(?B@08oZ_{j&7D$Hr5vSTr! zft|)}R3S>>m}}3M4V@V+r)SnZEcHq(CYj)bxiNloeLLoa{|>eB#KqCK*AS=rVlA^C zF8AW5J>PEbiD7W5PLJSSwV$ZPql3Ebf#hAfDP8I6tg%SS^>dXNH6B3~q6Cb~t-Ts^ zk)xNQa`JE}j4{QbNnkH=0*qx`#OaDY;4*`}!gD-PL8kU%Uda_8e>^qs!3!>3B=5rYbSvDoy|u}9(iUg!1F&xQ;65k@ zfT`kY?L&H7-!%JS9565@i8sX{yZ~nzhg=NKcC5wvAac5npobr%jMva;HS4$VVyY7t z^2Lm&!qev>Ko5I1J4YvaGvgU@2spo7-D^)i(9jIya^ffBpx+L+Y7#5S{0Cx)qFt*}6J~!*G z?x{y7`c+5I_iNJKy7zFVq8{p-A@TzKiAx=#U$R{F%&l?No6R~`99D(999KaJyZc{Z z^EU3d@DiZ#;!G58YGLuzlx$uROGmL+#R>6N>NxH4hKoaqdkcg#v@j=4svW^ z0>)Nc#L4LI*dqgZt9X^)GtlnYj_tDt=av{;zDPGO{xemtYIJKbbq;xN=Dp%L)(ORIDQbm+xT7VS5DL}qsLr^jm^p{+x@)h6q3sMi=sOkxcj z9H^>F;$e6in}Z<7c5K7Ax+hHKbANtmefV4l?AdcH=MUZq(%B1D{Jh0YLt#~e%gOLo z^lsv%Fq49y3jWponNhsM_QQqZzS%!6cToOt77`Y61W z+PWakfa0o742Qq>;(K{*Lj;Blki+^#vWiEiBvu%oz)Hm;4zGcmhp{?rUJOI8o|!$F zVR-v|_^(*cP(Olg%|EW4_+QzT_pkpW4%*e({9=dKt56DUB)ZI5{7*;&KD)PP#hDal+^ZL5I7x1k|8&ln~9{KvPuepprc5iGabg%S@drf~VgMInRS+?0e#cERui<-IfQ{Y*_ z&qbWL@nZH2u)^F)tW)tb>=QP-=Q|MnEKtMB8 zk_;rU?C5&lQQFj!FC8$$>pu1h@rqs7-I4Y$ypL5^uVi;c|5w6!%zkg?csZ-? zZ|69Y{WSdIDpv31Y+(J&PyW9DV1E}N&NR0Soho;l?rMpDhk;dx)2b;{it;J!j{+Ly zR*e*8FK96w{{6u8CMkT%SCbAcsR07#_$XWTHh%y&v@GM$nb&}ID!$>^+8I9k^!j<% zi>I;u{fKz#*vM-SGeU{_Mo z+`*3fYz9OO!(ZE#~P86`aF` zc3#845EUZtJMvvQeP=2-AG6xK-WQwWjy_pT zl8@d+ykb5c)~;?{)4|K%-`8@Z0qXO+V^Bq%@+*zJ-`>hSAZg-b`uTtA-H_4k9f1n0-|`e9#U)ZoKskA}&4)+~`rOWt8H zxmy5(%eB*PS#G$4!P?u1z;#gfLqjJ2U=2YcJeJgZYQ_sHvWx{}wsN3TpO`57LU zrxFzYM+vP^k=grrR-ePMDAvR1@bAr&&}i61dQIacgGe8s&e^86vW`RR8Y7O~!$I%9 zmTq@dS>HV@xqRzJ({ z=dcKoJmbPKx<{|$!ufno-p}=~)UIX-r%pcAK(atbyIK*tclGk8991p0>%&N(DtK?8 z(qnOLScUfHYim;wLvYWFe$hHUNOPPx4m0@}xmd(G*58~uX+whm_+EYhT$UsD*}66E zBi-GBabNo0jYn>Fo^s5_d}Ex>+xckEn9D4O#@2{=DdI#3n%8T&j6CihQrVu!K(ZIM zYC!9avt5ryA?$b80R<;he)*Q;(djdfu5A*&<$K)7(~E@;M2czsCGW9-aFfHs=_h{%<)* z&O)lKMdc0!e=y-oT;pL_O!11J*e&Oot@&bJ8&2}k*szn) zte&rPuvz3%91TlNl$Qc~?iI`)w|jCjC!PDi)_u>{!I=Fy{(?inKHz&|NoR+V7z!Y+ zNwmXfB@-u$Pdff8Hj{!a^2D5?gvHUkUKg00%hC6n$DozgKE~{TSOmn##?AeFPVpgH zb$w)fXnLMGpD2D$zuNmfw8#5Q2WES4->{l7JI>sAmh)#gI;$G9pY0i&Zp-D5aubfu z-;u}Fiks%*<;>^e>^kRxsq++^A*Z$@6HaZDCf8b#~Jpy%MBF4RsD$B-F@6{$8Rc8d#v9hKW2^I=gz~c zbzLLopta6(VD=p7jo5u472m_X0f}5fVW3nX!5u%f*n@|%gxNu3WlB$?oiwA5wsRCecl|jIp9jV~5BiVmRS(7p`c7-sRWBmeUEv<1maVtvZRUKF z?Nzm`>Crj3Z%@|wu6eBbgqKS;(`vu(IsZuw;GU?ISkmC!<+sbv3$QCp;tYAFRr7kYVMxv)h^aumw{!r%frTJb#df02sj&!VajmIxIR7*4Te1|^{53!Ad$)>5UEmmxZMM^7^%Eq+d zNZ-uuM~J#OZDVQl@fwSp;oBJxpB+0NgYj|w+G~_B-~OQ(@mRC!JNw}iFNQPmh_zZ{ z-7DX2@B7qsuV0!(~A!;kqf?}&-k+&VgIcph^|-D}*lqgJ19ueBrO zS7WXoJLb#vyd#V&FW;EQ#(8;r-RCfSj-TisV~Voj3cNEg=%TK6aXP^8FdX(y9Ay*6 zDH}+SVTy>$I)3)z$2juoc9KRPZ6_c4>VCdG>r=tPKW24>LB$Yr>QNb=?tQG*2hm2v z^4Z#A#9ZAvzVD;f?@MR;xu50piCFbRpQYJ8^xI&Dsqyyv6rIO=2Nm%;YW4Z{TK6lM zpZ_smuIC;PZy!c{8|mfi_3mJP^GpBvfA>h6=aHWdJRNvC@O0qmz&mx|H@#DyC(YA= zrvpz1o(?=6n0DY9NYnN_#+y6vr+@xe|HRwdUB3%(Gr0%u>A=&0kJEu?IDMSGc$hpL zcslTO;H&PyGmyUO?SG1YI`DMh>A=V7z%!6O&R#rBo(?=6cslS^ciA=_1fzN(8eLY+CRQhz_>A=&0FS`TJK>D)x z_o?pbz|(=J1D{O?o`Lk)Y}G^b>A=&0rvqPh2cCiSW$*7(-P3`m15XD&WC#A*zxf@% zHv3(GXE=SxZF@*P9e6tMbl~gjz%!7(zCC{`emd}U;OW4J?7%aSKIFDMq@E5u9e6tM z^>yGGNMGNcKNUY6cslTO;6rxc8Au;;TOLwR2c8Z*9gq(E^uPZD|77;N0OI&1EuP`@ zCGF-@%hQ3U15XD&;|@Fn=`-HEhx*fjrvpz1zN8L31L;fJ&8L>915XE@4t&NPcm~pE zym=4xrvpz1o(_CT9e4)Pm$aKtEl&r&`VRccFaDqZ`}X#`{>P7g?q|RK>YMRdH{cmg zpY`@V$h$2!Q1zQo+jwnX3aa-Pw0r6r- z)T9~g6bg1k5Nz0!Ku`?W5Jfu*_Dt^*uzY^TGv=6ct@r)jZ|{Ao>Qucm=d3w?p7D$^ z$DDJm@7rhJ%3uEH|G9tqkNuIq_m6z}^5u{Hg+Kp0|H79qKly9;_wV_`e+ZVp`*;4m ze+<*#^>6<9fAQb`^5u{IW&Zn@a{l$;Qc{*ABA@Z-W_;% z;N5{=iw?X$NWT`_@Gj!rfp-Vq9e8)({Xu%4fp-Vq9e8)(N7R9T_MiN}@HYnhcL9Dx zWq-QV_s8keEqe#NJMiwny94hI{16>@e~^BNuD&_n9e8)(-GO%pKHY)$2kFx-dk4Hb z@b1971Md#}5FL1bkba1+zB%6=cz594fp-T!-GTQ9>C-KH2fRD*?!b?v1Apm1`ZNE| zZ^PdO_>pYK=gNG4oIcmDH~QUycL&}bcz56j>cIPh^aC~aP5bV^y94hIygTr@4!l1| zpX=8f{qDfK1Md#JJMaT_;Qc}Rfg1a!eRts9fp-Vq9r#=a-XEmT_3Mp(ci=a)1ONMf z_y_;c`|kq$hHmbUa#`<>(~ol7-bKGV@b1971HXA4cz=+7^Y-+;qIU=09e8)(N7;e* z2kA$-ZSSJr9e8)(-GSe{4!l1|zj=H5UeUV)?+&~>@T2U&`-AkO+_rboztRr;t>6DU zfA;>n0Kd{LcqjiY=)li@@8`e!{zCm0Z1j7H?+&~>@b18mp#$#^(vM-6-Zj2E@b197 z1HT0wcz=+73pV+^#CHeY9e8)($IyZI2kFPKOYa)r9e8)(-GSeN4!l1|zXhB8D_Y`z z`(OUSKk@#%0KcN@b18GNC(~@q~DN@d@tkOfp-Vq z9r&?#;Qc}RvG3r!{&xr79e8)(H>3ma57KYQM!uKv?!dbP?+*OfJMjJ>{aWnc|NSTb z@W1;0y8yoyTk$U9-GO%pel0ri(?9;t{1p`P3l;N|pRAgG@)O%=*=1Tz{4ao^-DAfO z9=eOS;ZvV7q0q$z@K2DFIjk?aF$2HH435cnC!ZXrp8T-?;ulb`G_ZSyE?fB?$%=Ut zTYSy^BIhsIVq!6AKI>|`G3H;g;@M&40|o1oZh85aZp_frhY_c=#X0$GPoBvEPimmZ zI<%I;D3B)BN*fI&7ha~0G1fh&%owgMG6buc&V%xS z|EIasB)4qv;|6ebbE}@|hmXb73jrjcu}(H3Ia)3s>rl}%rJ?<7Oj%lg5W{BbxTQSe z@^7;~5E8@E8N_+4>8U)hTP!&-V*4y7ix)-eKv`;^X@8LCIxnVY`)V07oO+7jUZzKr zgR<7m!m%DtYoBxmus-Ktr?^P=9u^UCf=o!mj*-z|| z7WR?Od&WF(i_f?WZ}8oTCe8loKe)YP25wt zV^IwAvnD;NxSEcV)dp_<*8e@Eh@LcP;?D%rH)Nj~?iY*Xnt8q)taU<^3tqJfFjatu z4=-csTz&#_9vV|Q%~3gKjIxWSke-xlvn*wvg=JmR7P~36h6P3v zN3Z~Xl(-P-YzQRY<@HUt)7cMWor5}yfeq`TN53JtK~yuU;yyyOS70DRcf9?Ujdy|1 zV@1a|iVB4`WjWWQ8#hZ`Zb^+Pd+QHk+)_BRJmT{2!F{T3uC0+dPno>Yg=C&#<2J}& zHgAh#636*gRxJ7GCp%_NdQdpVgWj$^GyWs}V0}?#QTry$Jh}i}2ibTyA#>!zDGhe@ zfeIFkYhjF{N*fq1myka6R>e;qM~mX}$V=|xD8m-JDd#E&L*WiM0BgghPnW&J?V0|= zC3P{ichV2zbMZFMvykdFSI@e;_lSAMrLc*oXxxwUWrR;ttQG5=o;y)d&YfKp}BW; z=K$1iNZM!Mv1ZqD;Lmt4?;kqqGoL<4vpN#8NxRK;$CeF>PVc!xQ@3nhW7mhu1@8Hr zO;0S8FQ&YdbU6OOKlGpdwJ%@(#FxMDJAdwHT_+lX@0E6Msy77>lkp5 zA*l0b5Pst(lm!KX-dvsrIgr z;}|z4BjC9DW@Y8Sf*c2^(R)mjzf#BGzGK-Mb?|*gC3jLySsXBM58DqV{TB8JnCg+|<+mX`AwP z58=4gM;p1PY`E^=BRuTO?*M<4$nWlEE%nEDG;+*x`J!OJZaXn|aXZEcKhLe*brzL; zQ=SZw`w-6Z;;gwbr~V+Ok9*1@F8|(ePgClqO)@xibvUz!nae+I6Bi!Nk7bgW7ZU_x zDcEMo&-i2Gata#LuVl{t`i!w6zf`hj9Z;@|)$t_)*@wE$2o}LckysWpZ9OLpNieb@g8^@@PgBIWRG|!z2J5Kpx4FKpK`F9%8&hlJ$UZ!RpSVP~u>5t8gZvl?70qakOXb94F^hcO2PL(Z+;4YEq>; z*@-<5N$VZM*VRjBT>TKJI^70N)sYs`axooD!AYMJFnE=I1jF7cl z1nMU;#BZF1ae^q7Z>dXSo~4ykMU^K16(sMic^D~9w)BC)Z6A2rH?=|ZtZ_A8EejoK zV~%mp*VZZ2DwqOdO%mAqu<|VBWtwPX9p7JiQExz) zhr6wJwsw9XT-HUFvz;*~NA&n=<{{DvT=Vwdn^a(7Ya+Em zLdhy`F2M|SOkI=_C(L{>#~A6COy$dmM?To7w~RUx!}+P)v0xY0>tL=eR)$sdRwCl$ z*7MneQH$dl^7Qd@sWs~?%nulm&v=(lmxOC%2oHYhuKibKI+Kv7;BfYbCV4AXJteH@ z^-~)To^)aOSVP=PwN%EdPZbK&z7}?pi+LD^*g?})%XglY(*5a(AI#o0L|fV&UD$v^an+ytIE=-V1#kSn;F zdG5}a{Q;4x#lZi^r~r|8G#ho|-b{D1kw zfA!0k`nv#TZC?fZqsMjgw`&;8zIGxE}dvXD?L}X@? z_l$uiQdk(oo>k2YFSx9+6~t2+cVAcrWCt|Gt$7%S*f9~#^EI)xor0zxRQAfk^kANZ z1G1TK2yaXy`V;dZh+3)@Qcl|4q zN`|F2ns-=rsU=wtEb{Z=;oC!b*?desvWfjBZs%c@S} zrH(Y|_9fP7DyD8t;z*k{6IbK1`x8eDvC~F*oS3JwV)J(8LL5u826(1STkBGWUjcrs zoJ41V129A#he3Mk4JFOMwfz%9?=NE3=_dh*u~z1$tok9>#efcTbfXD0-k}JC0D}2e zH%Orp*Mo!}N=dPWa@2G&55o}mpu`@Igvf8*-@C0EflT+EW+DK+Bao(i~p8c8jJ9)>B_cHpSKepn|)(b)J?YgJz;Q1cE>RcN;TK`c= zq8?c>6#FrK{^L}2DS>5@WiZF7(|6jYp4caI8pBhE#VHHs*~l~V9a|sdO3x3^e3iQ& zc&dSefobO&rq09|?Wd157RPg0fyRr3aTVV>t0Jyu${eR|Yv(Ohe0%@n`NWKVsr4g- zEv%&v>k=Pbl!X8%NOTcvU$rfe(>v`i*QsRQEynBABA8)%i4Y)+Ia!!$EAz}bt7gdD z)`^qvf#KqtI8v&x!&oX~XWu3^>n5~wKxljmMK*EEv`IH1oBu+pA2T^MQ@QkBQ{F=|N>z*UI?q+c0#E_CX@vr(?@Y}0ke&zyIZn|1N-RJf?Y(2Q=sS#&MqRr*iuJ6f~UA@XlX*h(_pt?Et&H?xZ_r z4)_(2J-_Ppe>KbOxcKP#JmlIe@-YDsddMJ~jr4x)hiY&!jmBxCuEY;!N1e|^oObKr z%qb!e|4OA?l!JWh8R9?EnPOrhbC%5V*j46}ZQ+BFi$&8v_`<~;962!7{Ird- z7rgXGHpe}C9xdq|n=$7H?p5D~49W7sW((K=9r)^n3<%Pt#o{i1;~_CDfbuaerePT3 z5mhx@tjn;)Zpv8(chmq%v&O8OX89;!%$LSI14kNz>pA0RjtvxL1IPIK{ICx2au4HY z?Q<%U+nG%aD>Y5 zczxzeq+{~UytZ?x0f#8LY4>J6x@e1oJg*FJ=JYZR{*{`PFg-dzcQu^0k91ZzF_O7V z6yYwgAY-gApI|Ju#^j-?w?rEr*Tq{Xd9U zT;*-B7Y&j1q@v-*~d-N2B9fSjc5M;^A1ng{RR-Jn@e) ze#$Xv;vft%`*d0)8aHQ=aijz#+( zUK$m<2ucS-HM3nU?75vlr)%Xc;xl&_Q9|}&)^lQ}&U?vs+q3ccci)xmqZ~8h#AYpe zhpaZLO>A!PdB@!8H@_hoejN*?a#0c{ww+Qk@saWT&+q zC_x7w^U|%bx_QJCcV^B-JMBmK#&z-4PK%=wJ<2!pGzNm|t&OnV&&xVwFv}3pho$Ab z%v|47?z+DtDXYh6(_!RZb`Cq_&B;sJc9nta-uj@Zpxxu!zwmGpB}9eLc?_7g8V`5W zv!2-RW^R36;&*=9;=jMI*Qns@bX@_%@);}_|26+TNxva6kr$B0_Eu~2>|3@J@3>+A z?8m8(6g!QTa|e5{mgtuE56kp>BR<@Oyv#8B&pJC<3E<2rVru*=HD$n*19V>KQzzkO zBQ=d#Q|kn-1i~1oJqZVA{YyCU71MUbm}l?9y=}*^uHv;=`cP8$G<}1-&fH1Dg{*#@ z-ePk;F`{w{#c3Shzf;jMma zDqFj1Ju?qYZ0S4~!t<`pMpmrwc+9dM*+$4y@vP?=_^kC2HtV^&^N(Uqd-meA-|6>Q zzQ3xunDw7xxLbOUm97HWP3!f?ciaLF9tdv`0UoRMOzH(LTX2pWc5bF9^z%*C;De$k zq4MLQ;7UiMeBmM};M2y?dKrmq;?4z!|2iiFKUlM|v7Zrl7k9HEkg={CQ|pwohP8Ym ziB*gPWeF!|n(cSIblMxg%OqGnYST~MBRQ5HiF4)Z9MkuKoUOQpk#O}PkahNA8S^tf zoizXoqdlyiv1>Yk@U6=MXrG&vWA6R3S|W9iO_?hhjVjCmZ3+tVT>z8AcSk`m56>1W zdu_Jq{FHt0vrQR8jA@&n^=>#k=6yR$pl21lMCN%n8b)7skMb9=f=z9#cohP_+@mLAV8aas=ssqRK#1Gf!MI_5v zN#4vPV=fk>HnOO~YcH$F^M%K_42Em85QC^n8LK7#f?TBbwLr*<-^_}xJ3*QELN+`Q zvZ5+yIc2X6vB^)_n*cFIFnL1%+4)%yKg%`o^PI9y)r>Vr&L)mE*-i!;$I6z2&f6i# zz_rN3gTzZm_{iC0g=;-R1$KPwH*?neYCpNnI^#E7(-h3Sr}W1@v5(|WVVi`ju2Ev{ zV)#;1^zq-55U72e-45Xo_;FIb%)^bxq?9Xfj-O!bSfH8ftLi`^%yaKE!`-vfHUk*Z zxp^?E!aW?uRGNi$t~%Zi@59 z1b<`1}UN<*efrIWvpI za?#Z+tjm^g`Vv<&UrahJHSfXV?$b0|VvkEx3@<^9GU(7-DxFjHRoGW_hHQIboqOm5 z=A!N}q|Y!mT4JJmJ~?Pzacl9*w#Prxc<}DHAK{l3=c~2`7Swha+aBt2%3hmhlb^CT0dh=& zG$~ zE$o7(yx3UZ@Jqh4^@1*fC>io#gzfxoNrfPvLPz}h!nNNuHmrL5P)98np0O`#3v-Kr z+?ErQIZHAwTGi6YZ9ijZU2*C0wB5%Mc~IA08h<{Y_5Ydg)@Iw}r|gBf zl+}gIIxeVhGK>@td5F;mbk-^33fVD!2|j`A?#&OuLFcy=?_+(r+h0QKEMeeQMMDBO zS9{hp5H0eK&br!hBXB!;f4;|fH79eO*xM3rjOtnS%I_k7pvG@Ygw!BGx+c>rzVGv) z;sSkFP=xAG=~YS&;z`eh|pDhB{O>$#i|B6LRtl zz57sU>Ky{jxfx5F=T* z;wwlzwedFj+5F*NNn-i>`9f~0&!!-a_tWd1@$wlU6cO^5tzESW_Imc8EtxNP;d#F5 zqf}uJr;~pJmh&m*L0ucqq2&I~x(~>qvVwh`2jHT<&dt5q2Y)os7>?Oz%ImkKExZC5 z&EV~#zvBD)kJG*k=Hem1Kd9D!%(@bE_{+LeQzGsftNUGb3|Lv7`0_AJ}Q@? zZhzzlv$n6-vxA=bcI3xeez;(TOs9D$ez%N5;G_G|XkQCNI({?JJPbpmXB+b+xH+Iq z-?<0P387a2q3y7?9ZhXJjBRHQCM~DzwfQ!66j5883}5@$X}^|5ajaQ%To;5%Enfp% zf3O4&m$^VNdwu~Br6l76SR@usJu4WWMGn?Jx72o&xI5Cfs*USR^)9yGLvfbgSq<~zUoc&{^X|M;AG4l0r1@Jx%x#4KB+vxeBow|ucKZu@$TEqGUi zAGXAQ?aYhFdYF~8+YBYgce9_#;;eYOb#@qkVuvo@1>nV9%)>Cm!DjKtk{_pQ!VkJ%P#f61Fy@e>*DD zxkt&v_2K_(SqwHWBey&HWqZq^{T*@ZD)Gh8f(dKd7uJ8Hj<9LQQ;>EZI zM?hT82-}8H6Qs3n+Pj}rj`7TQKtEP>MjpXX9dBw)cPLf8mHuc&h#t5hZnRw6qtP)f z6cT!y5Iz|u-#lxK>=+0g1EKA(wjF(FJB)1)PdQ~@2dE1CmTBbu7Md-V#nvKvQ3c=v zWaC}!(`q>E6V85a{bgv!yGQ+}B+lsg!VG97ub9?u1O)MwG3&TN$#mBD2uC}&?D0p5 zl|J*!U5^*BT0miE_>^xJIZfk_><|Ty7Cg$>U$-;ViC3=A`tI=4M&|kez`UBvyfok+ zOygTo^5F_9uVo0}I$Cc5+_^?&8!l5{3^sd@@=sE|8fx?umSo0lj_#t`) ztJPor(LedG{P8be@^=B&0tSR(+2VA-w&OWpZinlVcltY59q_IKj`qRWb_CB{=YA%p zk7@5F6d*yLj02Q#qg;JAxDk<7Njgb)5T|JmY97xb2fEeJS#p zLwG#S^Zsbs$lGU_M$le5GIBK zTyXH8`^}J9e<(QLy${qm5ZmXhzJD`Ys=3-OSguR(!fLXOqTU-8q_Hj(?3kbZ-p_y6 ze}+eEl45Tu5=4O?G>Uv^w8f`4@|9k8|=(pM06`YKw25wUk`ScUxDRzU;O3?G-h&TH>+oH1JlVxr z^E|@ORzR*tLvas++k6w>J`z(w3jeQIa!vMbSz(fuxTBa^U-}%{K#NkrX1AxiQU~ZR zNA|2L2<31z+f_pAGrr`_*PAf*aGZ^82@J%j$qE1)##TM& zzSA(z#DKLp-#cxT;CIR7^If9z%%19&{T54iCxjxM6aROG)RYjZf(BSy`6xZ}&DeDgxF7XHGALjFC{!|Ce^2&zIh1-3pmpRi1p2cN&odvX;?JJ64qx_}FY=FmQxX>+W031^ zs3Q;B(&n4k_K|c`E~?X3-Bh#|36xh|U;A6rJcp!BIpcV0^J1scSrF&_-Yj+};v(eDz! zN0x1;T=v|}F6^wN4-;QC;ft>c0j@tY5J_O(Aka0aS=m(u?5aVC~Cfal)KHO{jzbN9Qcg5y&~ z*d(S7Z|@m0#>Uj&ZG0^$YfK+f47swH*lIpq?9JAz$Ds$)3+h;t@(w-Gy$5CJvJZzs zb1;ByTobLmlBockI&BLM+Ef82YrI#R&%)KdSLOH%whmSO@m;D%C>%*CYbl)cO+!At zxXYZ-mhXz4IPvtOu&qcUy1v?Hl@!AzVCPy62XyNwB zWW{sqFOHksfxBMToxR0*DE#STjLz$}&&G2F4D%j?4@&DJE*zXQw0b>a8C@meF*fK> zhPWas{?P*hINdw>n}LKO4E5b4X)>Q z3Tayjk7X>MNsFM&qk#|O6fwI&gAaVN@^YkRHvouo>Ow<4XR?r0amRe;Bbq&#{N$X& z7rPQq$B@syE)K^noi*=V%Qr53)!+^wQEEb{{wFV(TScdctUCHWD?A+KI@FthmDU~I zA<@qD#Qtb@uX(7kUKHWO?4F#y$zk8ZGlH$uvBl%=qqN0SaT=Lh92dN82^@wY#_Qxe z?ebAV&|MtY!lCt3Kn>gv{YC_zWje+lRGnY@ThqBuscRlbrZ_)J#0i69w~rEw{DDVO zq}DB+nzSs3`hsIYBt0ZJa4)K<{e<7y#}RD!+!q?V2Zuv^gP?JU*>W9mNwhFavTrf1 z4-P%czA`M^iOszww*QZm2tU(pyv#ESCRQ(E2$BiLKYf8dyb3{xTNeYX+HKX zyxPF^vNk-=7#4x0Mr9Jm92z~c4HT6W8(=}y6t^KfjN*1(HJ4xUqvylcAm zW%$|;6FHM#{Cw2tyTP4Caq264T@N;^KT0wt@^f>q<;5`KwQS^+?21YrBz6wNFIjxF zu-eQ^d9{~kn6~~f<~+<52}i?l9$^zM`JsPs^u~8|XDUlr*8A2wL-%8>K1g&c{1L7w zl7f`v)XQB8b$Cxee7nQJ^eOQOl0J)AK1#lZPGi*alg?LxvtK-ZaUl+1ztna)Hpf;u z$}@8;*)^DpF&ut@%$j$iW4uIY zRBsp=c(I&Q*Kmt<&O3^8ohR=z-TTHGKlf3}dh-#}^4SIycz%@9TGruJQ1D8YzN&1S z0@jK*d*CqM+RLAhPvCQoukRR$m`$bOVcG0?PgL1!E9W{2)D_R#U~KzQ+qr+tNGejR zigBLe<7MlQ(p(f{5B&#MnUICmSSo**-A=V?8&JRB($o-~bDDA5hyK|$Z+P&}nsPQb zOy#s^{P(^coqrbLdIs?2wM*?-F23j9V8--Vyn4ob?^ zIJ$J9AV_9Q@y{w63!q6H&d%aZw%lf+jTK95OVm%(${pf2`7*EIop~EWre1Z7Q zF$zN>YRwr2Exbr%b4>HM5R6EqTwE6e*H<-+@Xw0g8&nR#`^Sr5-bX&IRS#t2fdf7^ ztKfqz<(aLpoKj>9)8>T^SI`38+6$2n&I;Hiu4j&{mo~0hZai3l?hziA9oXw}iK1#z z0gNlGy!C)dR)8BHSH-30G!si2x>NxQx4eAZELN;^H@rpv{U8WxM>TYaTiNI2vZjD=1e@{xeG@54No z&8Jyl2$C69!F;JqlEK+^O@GUXI_hiJcM`l;r~-ob>GhA2UX*@#$y_??#Un3g8BlAl zzl7Gg4hC`3vmQ`3efo&4n8VyE*R_w)bU3(Pj;z^o?Gs!?D+L~w3m;w>hsf{>;8a*! z{e($Y#F1}~tR-iUI8reGD<37}Cgb;)S+nXtsUJG{R;tte5Oa{dibL21O2dyB|O zET*QyMhv$%1Fl#1fg2~9h+KB zTKo*^Hv()lH-Yu_mm-qkX0Do6X@mcOpYnOTJEv?sQBiGaee23ec1i*&tfD(>6o?;Wid5b%vMkP5M9edWvzu-{L zvr^KuZ*T^FaF=-crFL z!=SSyGT<2kSN6lm@KC$fNPIFF@ww-@j*p|SA0EbNKS7q4cV3)Y5|_q0@z4(@m84fz zLhB;*s&<=ORNYogl2M4s>{T z(mI6ggfJ;O$21b$ju}~G1Dn$vl-@K^IDh2_3h8x;v0hR#ji_4&Z~2rZ{$t)Mfo~4- zoueTo_(gI9MBup>dHJ|W^e^_0utqXq=Hd%`p z%GVDMnY^~Ek4worqd!VxeM1C^SG3!%?eISC_3!(?cV_qPan$bk(nrVgd=lr%auyOt zY;p)EQhg%UheDWym@X7eV{Up+53ouBuo-DSahuh6~ z##-Pl<_X?s;Y5!D>Oc_DwQ)mwIClMpR1QLN&>A}gZqAwZYFK1_IZ#FpBU`A#l*|oH zk^laG^^g3`FJJt30dyFO$_sI3%W&`p+61M1Fmdf%cH^inpgU5{P<;sCWg&#?<4=mF z9@Z{1~~oG38|uo%4yIZQ|@V?}}m}4Mz~y&#Cq{Yf+U$86u+)GHNuw48T^j6Xw7Nt(OB_tSp&zHDFV{2p}ehIP&x< zx^Sw+sVHhFN0gfDoxWLL#U*HN^5XL@VRr;RwwMU?ls#_i)mNi z8Vg#{+wkx?YkUaW9I0zFK2+FG=Eznt|(B~3+MP;0Sw8t7|Z8>}7 zB_BhS4M5B8r*a{X6)apTA?K`Y*|o38pkgzk}IseG%{IatPfj&HPnP~nH{cRf07 zIWLo}^R_U(&*hW<5qhH@dr5oV+ltLWX`&U`f5AbR1`J_r;6qHo7w9#}EbcdfPevcA8_Y+cHzD6*+V%oO&(7kR=Zro5(JxCn46XJ-ia>_;7TxmU zH>7M;QXK&m%aD_%PcwYC{*7`aT`#%`h&*sI=~(LmumIN32qkSTx1gekgAf1ca<^4N zJ?e5nqoiISK`sU_o!-fKkW23`$~=7MaH`Fk3mfD0MdaGz=X_#Lj(K3F@3J>sc#o}X zuwo5xFRnx<=F~~FIEV^@o=0QWXH57XMZ9Le@~*h-9W7oX*Lwd^>P4Wev$DHOy!K|T ze%V~Z^SIQx;!|flnNz#{t}g37*GSC#Fio6&zT;dZePY8oRuy%YvwqozGDK1#*yo=( z*C;Dw@PUhXanLUr8h~)iE}I_U!T-y9ykm;Tte<--KNCG0bTfaArREI)2aKvKpkrP! zhvTzq_5Lo5IbIzTJC@er>z=o%_iI@mOOs!yi($p?E>t7Kuxjr|l{pwif&Z^%D~5)~ zwIG-{D!@}EsOjo2aM7Ip99*JEp-WtKC$eu1Ye!}**`o5wZBSy(8~ep4ccVgZ)S3@C~m zj9-4=SYqQ#y;&FaZyJ@*Q&+RCvx|C?$h{-Wb!1KPwBABIFV6RAuJ4bN4siumHubHsa&?}ceEB#2#{c%GzI^HbU4ZsDp;hj9H-BDk7I_@F?Y}2^Wjm*0Vxpqa zg7WOO4-MiLpK#1Nkfm$mBV*>zEgXC*6CQn;XxT_BU)efF@%v?)H^4Y^h1)N5XD3~L ze&WU1UKrHj&(MEBj#Bgdjf%OpfT(cDS23!uA#a#%$@ghw(J+9__F2;{_X=6)~qFZ;;g$j`2g&g^le#p z+~e3p+~;&T6VADH=$+Ty7^G5-zy2fdeqa zCde7=#Ao&AEXYqpqObpGHw1|WeYQM$VD=_&XC!`z5#;*BEubqLj-{^j}qvF zxNwv|{y+tvkCW2Z<>Mu04|%bP>oMw8O~kdcgfhqvQ(yjx15f*Dk1{co!PWeTY1uB- zw~UiyB2PPV!{jqU-05fH*uoQ?zBT4KTh^=eD()Kjnnn9md*ij;e3aI~Y0|u`)8(Z% z#64cBq#frT?KTJG!*GPR%C2^YtG=)MFyWknXnw$$N`^bG4^3*nnhUh(= z29QW~8*V8NI4}esqd-^efh)Cf6gqeDmaezz&wlUczuSMy;pF0NYNpdUiQ~HgpUDla zN)pEzS0}|v1tcil#=;6Sk8Rl%gNI|j{VSzBI5oN@sEpr=)JI7_lBU3_Au4eKmz~pm z3&~Gool5!n-~dVcsh1LNntW|tk91(R7=!fmWA=734f3ufOu?Nx8EK2(`rVtCo{9UR zzd+7+ea<(V&NK>{zb++WUxU}Z+l-uh`CVe0Btqq`!_Yf`bFXs;Sn8U8wwL~ySIF zz*_+%LSJwjlFspbncF5fFHLF%AXvqk9M9r6rL5%baU*s_3r6=#qk|z#uCj0ZvQ46q zFtx$7*7^*)$7GOCDL4@s?t`r%dpjeoOMAF?;?Z{D7^_ur80Y!eNHEaAkim zZMaQgz{*Q)ciX2kNGH88`8T9JPVT3Vo%sUgMR^8cy3Jn-CzS$%mQiub%yiV+7pXXP zX^W5WjKwiOPzQIwoVkWvJ_M6jKf&20q@y7wpNsDjV-`3Ma#1FKY?`gfSN1-H!#Knd z1ul*?;(d`aiyW zIsY!ew=gnQ$G0#G7|nq{khbbV7$4t^ek3=xg^6tT&Nsc1Z{lRCdi)=iZa^E+%F~>O zX@ftm2Im8TAEny>b?X_UoH)TPGwV@^4o_7hT;HBD65j5a))CvFd8tq1!e!m)Wm++Sx3TmKJ7U|mg7d=!`(FQO zi*#mW0-`9ACq3BL9rQ;n!cB@Mf4VFY`G>TwPo z3j@HCA#8t?*SW|Bh5v;6Rz2eAndQb*6T1*8|MR5wR(hbaD1eBX-S+TI*B%GB-LV zRWg&nv42<+QW2c;CXrlr!FD2Qsb324~Ej}n`i)^YCUve13VT^LUezJy&2I}f$_v3mjDC0?0cvt++sLtjy> z@uSh07G}h1?5#V{!+EGdUFNyI>tAqKxi5jYhG$tn%f$pI-^p?DAAr1s$pshT8=_yB zbijMzgS~BtOt5V20LbIC1it*svZQ!NDwy)IT;A!wetzzA!^%W*LXbR=()qxs^~=-? zrK9jSScSp94pF#^GqJ^&mmuR_9gF+bi0^~Dt2Hm}?g>&YoAchr(Uq1|Pg-q(ko0fi z>DDoYEB;?p(sg9_-!7C6&h(COUj_2x?6eMT;2cM+>zKc>TsUD^bx}qQFenoIUE8qV z<=xi@9{j(VH!);}hvhGBuBPgrJgk+&t1TI|-R+IN^_&4)d}kLa*UfylV{k|mn6*1b zb>0RZ#s|Qx_dvg4LUnxM)+?BIJyo^e4xDydhv2fi#2#*Mp_#4^U02J6Smh5gbX4oY3^GL{PgS-a98MsT<_M{k)L{tlIRXy-$eFrZLt?&lKHC0iI>x6? z2B+4o$7}>f*2Wz>T?u%__ zkFrL>m+y+*aN$l;!Xay_gJ;?66%6+L2F2bbm+l#RMG8JJL;*tm(IJ8v|C9gmZ~cA$ z@|Q3DcL9V2i8_Ti$0%HVSO2XxFI92H&b$nay_}v@(PeL0clJK_ilnTE5gc>x#brV} z1*n2!sX$G{VrXK|tU5v4S1#o)Ox8j*`_=I@LMeKm!_u6K?n1*59K$%8r-gyZW*S=9 z0fap{3ZhAfBhjHYeEs*N6S3#%019-S@T*}987n>PL*00jVALT$?0K0?h-CU$Tg9aD zk3Lc}o@JZ|jBDEY2)bE2gHcqarRH|rZD4_tTi^<~#7_e-QF918mOdP6a_YhYsFy+= z^w`}vFJNA*@Z=I2FOr>;Km`)vHL|9yZ*cYg3|RqB9!IO5AYXB%Q?FoIKVOPFcCIO& z^am@1$sZ{CW^DFmdub5FUNpG&s_fa=dhODx(XT1Q;-4B|*>tEm@P%+My`ZzN6T5s@ z?1m%nD!^HW&S?DxfI2K=t*Mb`5O%`Vr?Tt37M_G$f@1&xF!ABTBEiicj)G$pq1*?e zAnUnGRnFL$i=-H`m(!E7FokQZ7z3%W{@M*-R6}8y`!TOU%Hc$-#wu15eKoegnt3iY~3khGlLss+TimS2f5Xoh1M=Z`|TDT@LE7kQuvTZ#N z@Nz&p$T#03(TYM zu(-KT8Oyz-_AZm)R3Cqk!g$OK8u<=ysYjxF(6Dxe!$xuP5Hs{y2k&<%0uj87JQEyj zcwPh9c%2u!H;&#+0Gs>ZtFX(I8W@<^2Jxb`68{ctKZHv>4DAO``(dPAb)#mk&vyZ9 zrY;{a$UiSuN|~2cqzEAQ{HPIovB_YT$-y(CKZ;>CVr~bk`nvI$^K*QzlQHU$YUO## znCD>GEE%`rX#Fsj81*bke7>ZOUMd6h)jA+H9cm7?z|>2?T9$0v#4ev}So+Q>y5h84 zcrCykOGeJ}!l!cpUF9K=_V4jgB9VTZ<@zciOQD<>@m!~?C2$SZR`n}RkK%Bp>RtA6 zV#qS}3KjWNUNpk%M?8v3UHXuUbi5O|Mllwy6iui*v2Jc*2PcC&zSgM}byhll=1Bk| zTdW2&UL-E8F;!=##C%-?S zT!ZV)npn$qU9@H0Sr@w6wzYyYR_w$Pq9pfcOE}R031#W7XJv3L*0C=W2qW`nET3&l zKX42v9!-OzUxqwD7>ix1J`VKwhZzV^i23YCiGlo^hKhA6wd>JGiP`TyOtjB2_rrC< zizJertz<_nj4Bz%#FPm=>incMp`Cb!N7pktz12thIrJwJ7Sn1~C4#ma&58n&1qRt< zcTS3_i!z6LU{L`pcZ};y#-ip!X?{8?F!7Bop|K@wxN-RGe)2yl#K0yic_TYA2m29b z)Nn8y38(ig=FmGg?0Jc#4*De1N4dcH1f=bHIWs5x9b=VNZ{TroB2o zon&!zr44v`4jT1+g!w`~8Rtda>&1F!4-gohGlrb*71w!Yza z2RC!-=8Bgy>->-Z{=fM*zI^Gw3jpg6`(a9by|Z<(cpf;~UUGko%HeZ_^9R4rs$<-9 zbEs$Z3#1jfKRmlt0Q>F_6lSvVpYqj&_AWlqJsm^}PF~6+L^9TZe>4`R?hvg8XEF{! zof{U$JC%SW3oWwUL<3QTHgCIQ@H3AwFp>oo5G1Uv> z%v0$)GQx%{r8&{_{%t7%k7fpKWCKWhlMee7Kf=g=km%rrB)${@T`|#tn;g|A)fI>+ zj=1@e5)S^_Q}b1RbBD>s9K4ixH!EixrG!Oll)|*iIue%|i)ue?_AelPsvRcvt`0oU zo<)C5NM{~Jh)90ML&&=PqL3SR1lYPL%}1iLOT=#EyPMC z)WrS8*lI9poyB14CFclN)E_0rz@f84u?`V=eO3vuUHyeDS^&t$uIP`RtB}O>=b@5T z30?2n*HpzU;2URDIv$DzOf@kpn#39sDZ3t>HDFTonB3bP0wNsYbuNc$O%!2FP8a1k z7PIVS16(!|VQe2K8@d++c0BME;=NEbY!7nCJ?knwS;EsMUxby5jsjh1i81a?8HyH(mMik}e!QkLlr?q{k;hQnW39bh>@70lu zL3~P9Z0al`sRwPVaBi`T!2;vgr6q<2%vw7YEQo8eSRbYMNkN|YDFWE_!cKsu;v$@* zTs=SHc>3})mHEj3OB$@5BN?|f!=4uj5kK@F=dlj=mj$t+>MW+zDa_HI)mN`#>8w91 zVY_c5=|SjTBSxLq(F}uM0$t|K_7aE<$t`spwqt-a&*txq0@qAB87CJP`DQ z0`!g%jWpS6iOK<&ZNyYfvoDuD7Z)GJF9Ef%W|%pYsgmoym2qNZf+0B_#9$IJm~vF# zNAio7z9gfq;4)u7P|RP>MPh88(bO?94HA zuJ@clOzidlU^Xbs1YVOZ0DY5ec`PONBg`|um;yKnqZ337bebl-Hx!P|&KL~sarx5z zw39x?6fg1Npv=L1uZ(#Sg6{(h!^T@mxKl&oGRqHV$JWbCb<+ulFFF($WA8u8lbVEih2|a2+Oy_(d3Jn{ zh(MQGHzKvqHO}*9X2&t2?xccmV~JtS0ES0kJc3_(Bv(K2_t-0r3=_L?$XPLx`KXb; z+O6|IPpLW&)aOs@lIsPho`XX)Sg_6`<3W%b*i+UfPTJ{L3?2Ylc24p!P*^<83mXP; z95o@-Qr4{;0U27!GBG)7!DRljlZN|*|0g^2iBV404{kxLhTOeyDWw8QKu%fu!JcH$ zO-!4Lo92%`P71AcDxNtp#0jxEVUP{Jvsc77jtWN6SjltN7#mo_E7Mq5a{{2>kO+)% z%FXo^0{ONAZa7}SBuv<|xFndxGXQ$H+XZZTFvBF%hp;rau7O&pc=&~b628uzEWjTU0~jx*N)x>+yTQ}cR3y7NEuZ%bP0vEIBqv+C4@ zDrH)F?Q?*bci(Wx=XhE-oD9V+nGg5LQe{q^MRTYKC=MPhjyhnp>fFFA5A5@!L?i9o zgRFgzffpMlI^yszAL7D7q~j^wim-&qMmU41qmZ0)>3ArF?&8$@0KBT1APl+nc>Yl` zIsp|I74hM$blQiU#aSbHR9CHscotDAg!RIoAE&HA@d~2EyjB#?B530SVspYkTk4=Y z`$3tbu~zjgx@B>y18ZZsjK#wHkL;AVC|;3QwyVSSj>Snb>OXxO`B zvFABj{^!_*#tB$k!aj4CwgHs1l-N1t?2hU_aP}~H;U}rzGt{J0~ zh{gs-4*K~JB^D(ePw7@xK4LNEe%a!9!5LU_CPr51F)er9BND*4VW4OYlS%+p#Rw1B z)B|YY&AFI0&R(PtG2xNAvPj$YX>|?&WP>JbDPQ}cB5CSz0zbQs7)RciQpk>d@)sOf zYrwC_NyL~eI<`4a&S{_WM;yY=qG(9cGXeC;C%LeEQQU>`kc*OF41c6-jL#lF!!d2$ zyv=B(XxnoaKQXtPJ__l03JBCC)mw0Vh`3O#w=RP*#QGxGUl$8l!9bTw!D9L1O3(6v zqMfmghnm`9Zke#VL5xNVFtAjOpmt{kUDoM?t3pio!qFsJW%A>_ra|E3|oD+-?6 zvtQIX(l>X*A2Zs|INQugIr%AbBtLnU9N)g?<$sP{IPfcpc`O&VCjdr{I)AA){S&lc zn{RN}0aedM2_Qqh`lH0yB!jHpaV~Sa@a1-Ylm6)mVS&1H_kBCM4w^{AQuds z0)~QP?U5J-dq}PJvtwg{VUJ`m{`hYG53mw&2`qx?dn6~-BJLlv)e?9W{6ft^0Vs=t=a(BbUSNYXF1dLhNU6SG761{@?){m@sw_*IQBTk zauBB+#o^yIoJ9GB0uH8+K1u~G($+eM*TY`8&T!^DtcWGe^F?dUjFwjG(^^?y!oV*Z z^xi|p7C=)0SPO@32FL=@8Uwu~0g0`c=$up6v{7!3IB59U@BRFD@n?9h(j9k(pjkoW z1m4XPH|0C*GaGX;{v5GqKK&h(VnY(00i&?+#GMlm80TOZC%M4s6EWvl`+a(@dUDHC z^`>muI^T-j{AHdzIl){Hi{=6O)-O{IKy#D2_-k@&qp&U<@p-$#(fdTqgF%{YdD)^>dCO$Cw%~o%t;CcnaFhmDePIrQ252lviqACE8OM0)`*~*ota1?H;rb}M8qpF4K@qH( zYZ4;7bkZ`00&Ht+#S%5o3H75uKIz{|6!+Y>(!7?ww(I4>(+=$upI%FY5XYLYztUPm2#I$$8rw|tazfGeS11mjY<04Gs8 z<*NE{;PO#=vdpXN!9is%=6E_j1l&h6rIuK^XWd%YSU(wZ!SXWrwm-)s7FiF90A$eXjhxmsvmU z*N+mZewYuFYSE+WQnlATV|{*qjE_>Ua0$T`rPm5YYu74j#{*cQ>Vb36$$Z{B%IS~o z_SD~v**rU2-Ss_3<>o}R zW^Al4tqqL(^hfD0{y%@}pZfB}e-{Ap`CAZ7GVXxN-7c7Jm0t|bTm37$0>*9C8dYL$&#ih1p~Ct`WF zN$80z*S#*MfUIKPhwa=Hm%m6-;qgj(L8(QhF;E(kmY-rC}1`HR-{=+Db?D zPhwlw9a$-LPe>qC@wU4{7XyHBwx5AxaD5N|qY{HQqK#&GChn0ua(=VO%#Rkdkat%XK4$BaS^OkEsS>b@!680!v62!<_U`{#wy1+2_V#w2% zgh5)LZ$aDj0#E?`{>g7*b1`&?LCM^D5shL*nYu7-=7CJ%rz2Xw_%(UU`N`pb7mCywJ0++ntQ<1G4n_{I77 zBgMfG$)^uE~*lrg#jKp2Wjq%2` zhh_1*wY9r=T{0}1K6ZveXsquq3teoss#w$GQqf2FO7KFXVV`^ z^%r2`^HCCn4~*;|0o57TgFxvOYjk1YAYT@nTNWjtvz5PYUqxX&5-0U^H3LG2%?RmI%T{T$Y+3(EYfhmf&w*(4SS)3PzZOGg-ioD=9)maZ!?b2z{$P&Kx!&F;iF7!)3C{aTmon?v;Qd_w=^*zwtwncl&%~6>s zF7?r!`em!;7qYo}%Lqb%Cr0}Gh(ns|V=j7BE1W`NQK~sPF)Kln(|}Ru&g^@v0etQs zrDcaF#lZOM@Nr6QDvKLiW9~u!hE)9(WXcK3JbjPl*FI3;{MtDi^(;OZ&9h(z4LyF% zd|*hnSO>|<+~{)OPNaWzRLY0&jjNOyv-TH<9hWJ()&Rwq7W6Rqa>&ycg}vaqbg=>G z3xrs`jOF*`n%GAdizSBRwM7|KOM4j73j^Xq>>bM)#5EJg9&tv|)LA2A+jIBReb(jKQDxNcG&CS6-0i-c^_i&JYTr$Lsd0Zu0-5pU2po=ArO|#{as__ zVO_OQxFcU`XDA4STyPPF_iH{(A}n5>#YZ0{C1MFxYf9+SQyYp@J!rHrP^1?@>X)sW zP{_2;0R#Z-iGuH);#mjXde8#FK*)r8?@6!yhE40z`rt=McpN~0q<$o}4JBk>(g&LN zbH_qFaz3fmQsoGT?X~*KuV~gSBp#?ajB9_rTtd`?!Ui{u&4We%G(Y(fPjCn&50VZl z+uigihUM<@yLQL*tu|)p#ZR&rQ^Khe3!CB#Gr1%urg;Cm|K`8{PrrP*`QHVYc_Gh3 zakw`1px=B`sq$pnVz&BmnChYs==#@Xpn(VGyZ+Y1{NQCxI!|?Abud#joj2ow*~osg zlzJ0?F%{uc-UI=ZJtBUqofsHXf|dbAFUX45g=Rlncb`kug*QJDxD_KGF?oUPFM~uc ze=O?-;*3i-B7D@Qk88_9Buj^hGY8jY$?8xh=YZVSPQOC&P=#qs1%@{7938~O6hG{-kpS;` z4D%XsmPINa;=yCB7re{`+gc-Sz#y;B*`f`Gmh^)1#N~%3+fz01w0N96LKRdnJUX)O zJtNm1gD+eWO6Sxj#BP7VK^X3M4N4)EJnc7fnR%O-WdmFXipW_yiayl2 z6w6+K}tGBUp&R*sH(r0D*HXs!Y zES>woc;&0w)yuLA7eD5%uN>71kyIzE9=_-en*Ear57k@_eSFAWct)uv76=UO?Q*g3 zCXe#SD3{j3 zM@QD$1gU&#kKrBEcv$qucUdG6Q&t2!SVO)dp14PH;xa$S(R+?r>goHuPPQ#el$mA} z8N6BmWw<(dDBAFWFjJk-c?nM6ou0#V*1&qbO~2fa5^vkqD-_W`-Q6u9wj9>d&-Dbh z&0OPVc&_B7bfR*>$Te#xPA^Ls<)eW)YXdcn^~qhp?D6?x;Qo5ghyZWvjE1Gi^^!^= zyT(hw?DMQ7uAl>}lDlY@rvYKf*N;*A0G`~_o;4PuX-EB=oeF|GriE3pg&CE6pkQpVPXvNoS%)HgBf6~v}NFf zSeh28#sgly@U<#IQWBU6X(ShHy*i| z)aOTufja)xXSEkO`Zp;85X7|dQH8Q!{_qoV{V0jzsC&Hx%(`^*GbUs6(O6tsn{;Na z0bk36PDOfFQ8B}x5*H$*( zJ{mEy7J{8UZ$%TGT+;CncQtLkJ872=AGwJqOncyrZk(J zFx$gS(27|*>mu%AX8e=~zIL)M2g@{_u%&jz zltNh|aJG+i!4Pa>nJM-3zR-w~wUAJ85FBTslS?`t!qi6X?@T(I%s_22Z2Sjqa}p!Vbghv5jF=nwhCOaFrViqybN7~gv2tF$2w!Q+fPsTXF*|G{yUD_c#;)|qVZ_T zS~nqF-}c{-2yUPedh%hPy%V>|ITVRv$7>Ys&;0za|Knf2jK2%8#RHp&X%EMm>E#I8 z+Gn4PPM$Ds95E)%p(lQei4tsd%%K^kCBk_VviyhijH`Jd@Z3e`S@V|Q0^nd}d&rf; ztMdkfvGSBmQ1LO4dtH3FJofX2K*tm8v6fpE@fPtQWM^?`w7WRK>HEAH@%uSqK}Kp%djh$%90@r+WR>xaR%#Y;%)>H28I z$Xd8Ib9>L_#0H&Q((&+G^aRF{;=_X)J#(h-G77X|p|GYI%RQTCg*>)lZz05&Gk3)^ zgU8)RhMx3?a`%Wu)c7GjR6iwmO3Q+2J7wdz*{+B&sqJAr-(JLx!!cu~EF2zpT=cEs z8iHH)C6V{^-`Q4#rC>CZfI`Np$3Er>kNK=4cFj+m54r9f8!43V2HUm6z>`S`M7ihf zlZTIT>J$@f6N4<8!wf?vVaJdIJ_o>Yj0#Ki;k{LJDQ=yI@xpsCtbnw@<@1Ts>+EJZ zY>6lU7Ou~>d77ho#I=hFL5hQ-xB^ao=M!2l6Eo%+dvvzgwziD5rAGQJ8`Y51SHX20 zO53MveDbarbSzGWoMmYHpiJFa`*0~-EjWJGzLdPE~hEx!~`DwGxN(_Pm*Lkd?|e2!myVT0akPcUpT5qBv&CyR#SO=DkDXfbMpzHY$;c$Djfx6mmEA}6*{=R#=>bbuPu@NVTvXn17S$c z&F5gfkh1PFbtnTBa|AYDYD~isSt%9Q`^9)*L!)@^MTjbn0AY^as6Jo=Up$d24v1j5 zhC7k7M)u{SxEZE^ko?7hFMZe7+TbibEM z%uF>j>CnJT8fh^Q1Hquc%uWPD!AP(oD-(n6NCZK!1CdYv08u;8z@RZR@E?%IKorDA zXno5$#+YNyxz=8LKhL@M+*`N4uU6IBYyKE>%(;H-wa#mW1v!f6hm(ACX&RLIs1l!!X25yyo+~PA6mHF;bKp zKH7VNlhBSYUw+9#xF%UZn(7nW(`A(*Oyo~ywpG1hC|g#SD@;xKgg^}ScuW~U*@r*5 zoJSW7jDZp9@(#(?J|HWWO4dLb`LgQZ`a}GydC-21xiq)dI5B}wK5?3p#2`@pJyHw>t%<9e|0e(R_8LWB+AD% zj~p(Ad{~z%rlYY=^k-6!G1XYEU`e93MSSp;4!Y!a3g-ss?y{O|LkeKC9=?m_bRwi# zY*G8I4~*@1ob%8}1&`pxAdz2c2stmI|KS&0Msa~h!I&R>Ij_dx(bE2}|EK?V|1Q9F zjKX@JD_tgTzCDMLQCiM{IqGt1$W=nx8r;?W(t?fPg?tHq1K@f*bqcXn8tPsBEAf-x zzP&F(INoRz_EgI))d+f~GF?{!Jd9aNXw98}hY?$nm?5U>Y_ zF+o@CiLq_OXApjTCJ}p97|I!8D7{d^rZsYnnR-!CPSQ zVNShR&KF>C`LKmN4^&d2rp${l+471F@|ljXc-Y3=$T@Jdfd?Sel$;z>*jP{cX)`vE zt}{%;smD{S_E#JM^0OxJCl*E0_Q)F-Q+!(bB{0~D$bx@z-1C8aJzpA$YiK+2cfF34 z6?SuI45;df1MzQNNKWuG^&TQ>!sJW0Rm&LikdL0&jCo*64X0l)pb{&Vh)XQ(`O;P)9TyaN$eR>( zh>xVnYgv6`%bp=?WO0p^5d&=L4eR!cSZTGaLtD(m)p{ z_;TdoCoVvfA0cS8N!*lFO}Jqy&Uuoo?BE`;WiKHKL*GqKm6QZ%tguju7)417vq{1* zLG>|A)5%#D6 zyvTC(28U;9BgbNYP%>l;d;i`0VBs`?B_^?1`ix{K){~6@p=#cY9vFy6 zuB^>->QM9ykH<(MH)HIW5iNty@0r$(Yy@zM`MXcOl{%Me`B=ZlYkaQ%p3Arup>y%<6B6^X`%ku&chxkv zSDqCm&DfJ~S(y{y!B#6iF#9;L;XPKoz^o+=Q-_IsiTAI8&D#k(j`4$(akfugkAU;RS1+5JKsW_E?!Sm zf%(M)9Re8_kMhw>Z@}mUa&078P1ei@y`lqOGVDW{wN^~})kQ5Kj1b8a6A)Dl1~ub3 zgmOagx*JIo2`Xl|EV|BlT9+?`nFlzyS+TfGGayu5PX3>88;F)=$quGx!;fp`NJAP!6-*aMq&4p%s zwTXYtF^Xnxak^%VZgPC{g`~2&kdI35!~^5D4$oHg6SrD)7+n1w58gY!eeMzEI__d7 z1~S?cR*3tj^PLd=vJCGCm~{hz7a6tSjDwFa_R!&kpBtrQ5q|B(6m($ZliZO(y=-)Z z#hX*Qt*Ig4(q{a_93NtpKL~?D?z}W&LaB${?9}5yJ&F`Q>J5SN#OCFJ7oWa(AdcpE z6lVt0hjD=;W1;SiT)Po^I?5j$CBr?HEuOCQtBWE+NE6YN`KU^Tff_A4De*L(_I`w2 ztc90Kf*}@<1ssSzL~TRA=P?H{RL*hc!d_eFrtzyiN+cGQca~%P|MU<3(ck*=MSm|q zzF3nBxe?bjv<`M`DEcE0dN$ZBCMQ(+2aYz?XJ6wwr)(3adAM9m{DUTq7;E=yR^bcE z+!~+f1#<|`KDWw0V}V(*D+ezp4;)~$SGrJtoTtlo_Ptj4VOw#wD(dPt+uGmZ?(B|+ zA8oBcwpUNb?znfk96w)(%YvFbNpT(`&imdv1^@^*P|3>h;Y%vQP!pr^KoWHEg`-rx z4%PM$G9L240Q_y+oSV9Y(H9RhtE_mzfC{@0R2X1e@G&veE-62kwh;oXA za{5prR?c;WxwujLtDnlEJarAnSknY(zx+{<9Eg5Llk}Z z{c-4S=F%J~4@R)sg~mA1=H7$8VuktUPfH;FXhZ5A+DD^Tyr%+Ib52{MZ8fSry99*M z_Sxp%_Su_xkDVCE#_e|KuVPOzw(Ye!&wR142`)L(!1p-F{4QHZ03h5zC5!zd7Zd8l z(d;_OKt)_W)s;&&x)FG40FJh)!*dn=a@5O`kU4gk@@k60^HPa|s-{TDDq~`lJH{3Q z<-~zw=AthiashGJ}$W;U$qcYUIfJy)7 zpgbg@IzQ*NoDk}&*Bl}Mxx(d?1&1%2$KZ9dojvCvqECSVQ0#tyivgo^UUTwYskxPx z?*O?9MFI8fb7!o20-Lhhx}ecVKp{mf7peDm+k3C6E5ysdQZpXz}{T# z(0a#S{WDs~HGcI&Guso+7~r39@IST5v*RZ3J}$?3;Sr0?QGEI&5vCWk~2Zh4OO}15QbH(0l*c(dKsBRQFtaWI+vP^N@7I# zY3~O;h%S6m)tpRU$Zi;q*9f_oT5u>_Sp0KlX`fnGNeLn?2kC1!;eo7Gd{0+H4Cr zm3J^tal7v+m$9chXI#}ZjNDK`0Mk5-fnD?fFuq7KCU?}+#YArB$jvR9E~GJeI3vFc z2>Gea4gQ3K&lzhNJX|`L{Q!ErvZ*e-ebmF*9Lo9`7t^cy%U^}|n97&JoRH3a~_+JYks)tt+V{IGK-(L;|&+Hx`qbI`?UF636MN^NPuwT`UCw@npD&1CW|vhM3ci?7u}Jq9 z@9ttkIiPSZjtRz~Nor_nqCU)u0nfd20F_ijfHg9PqkIz=zOoOD_koJ-*j^=p85{H* z6H;X}=imM(|AYVM%a`%H00o5LSsn2inD@|y7xWmf*Dce9G5D%zSjBI@_Wm`_>xo%# z&5jWRo@n76DHlkOn0pvU>t1{Uk>(7g#s+cQ$ zt)H5H$sg&(JkXDMe*cpbQfiJpGni}J;8kk8h2?%jRjh`eTu~ zRjwXeFrNE(qttusPxyB*E9+G=$Mnpc_V2b`NBnNnMv|Q`OaicH!0Y`_J$%eH5(2*e z8o6V!@c<=e$!uG^905QM90`2s0IudlWuUM?>^d5i#}KkHS6GtT8T^veOOru!{4i-m z!J8B3gTnK;Us8y{7}3zpJS_R9ZU$@*$8P3(HM!MA_7G+|%6#DX%oak)VS>!^ZOpNh zU87QP80T1%ksZV1!SH^BPnSW`77u`o3CrRWB60ATbUM<_V&=gPJBSqneqI8yRz9GB z^Q^cI*;NltlCDrTMq$H*3$c8kLf0O7(kG^I#TNpy`DL`sKJAvhe`)sS4Q2WBBIwJX zFa5gw@&l&l^4ob~t6zW!dEblcdk}!Ac(tJ-HP`qX7hMhu243_vV%2hzwwRwq)s)OF z%&s|^@;Hsy?dX0zCveOPs z3^p)Cavx_^ufH&QDf8Uu$;5 z%NDCRR>1?&<8W^4@AR&3!49Lu$Q8mcOQylcZZJ&1AhekkLs97k*GwQFoC)^688j3b zo*40n%%4$`x_E$D;K;&>4QqlcCX?lo)PX2qvP7qK;R=a72z)UypZSvy{H{SJ#g@$g z@C3knhn#sKt+ppjUq~|sdBKg%#D0^FrI~=JE_!1zC-^4n`bp`R<#GbK?0Xjz;HOr3r}JoR!0OhBrj0Tm z9&N-XVB(rll6{^tPgdD&0Ga;J$r@QmRCoyGgy3swmt0$R}BQJ8}Z^&Z{2lCpO}eDZgPa3b+rw3qM6G%IXju(o0|3U z5dj#`{+o4S{^gfnIWL$Se62sq^W~)QzR*$+KIHPdg1XQ=kD5c(j+t5Q-{D7gO8@$a zk~}Z3(Vvg-l$aT{$Y#&`)pe}d*8Y_r=yxzHtF*mJSAXI(_7!ILg9|onCUV3Bdh9zk zzSFxtumTCoXY4}8hvLi09KxznVfu2C?oj{lP3+W@o-#?57A+F z)O^`|2#9B3k_??MCUZ3Q{$kn+?xHRZ8C>(~cEzg|1Dtr*W7Nf$4v*VoHXc196NsfQV05`-SG812O}6t0G#~3kaFyhaENi&`(G|;@7})9^UFO9rvv# z3m8n>34dq5=e>G9!U61TcQpYseR~e`yuzIP*f@-j2mHCedC0)N=!qq6!=pyNmFNS2 zBM0%P%Za4KC`2{%#imL?G#l8~hB~UTsNmCRm>+d8Dr*Indge~3yL#d3B~S7>2bCd; zX8s@qCuQclUQ9{j?w|fQ{-wY3<%@n7Kymg|&ninRfl1D@Qw zTjQ=iTV7$_@tX_1E1I@f@}A?Q@7yQMo;%;)*j=hC_ufVKp<_IFxFOMpLLCLbh!#NG zI@VVR0fg~^+ySOHBksfzqjGO(GQLDfBR|jDNK##BG&x@!of5xOgUkYeo@wNYX6K%=m zc|-1=AIu9ZijODdA9^8u@Bd(yBl^mRrsEonIqT!G{j#@yl3roH)&EY;J;ysbc;|e) zioxas1`ovHeb{x{?FSYHGy*%0I2hB;-7aK(isA+jo3JKI(2MSbW~y+|$J9!GcQGM_ z-+3Kkvs}gc;HZ2dz$5(YiwQX@7Rm=&#g(uJtHx<9Xb2?-U>+b7KjnGgEcQ^C$%L5} zszf}~8QngY<{}~;t^eGuXBp)WDyA&3$Q$Pv4h zJsVGFh;(lcjZ24qyTrjuA#)mMj4vy53p+25mOW>M2@=|3P@tEL zac3Q{hhvXJZgW6JGiH$yi&=}g`4xXx(BAla-2uWhz4b}SzYq~25wm|<>VK3evU0vb z3@k?14P#m^q;~!FmM~qIDoxv*3t3)WOy}6<`BuM~z%$#dchB(|I&$6RfZg?Q(*Ya? z+B1mqusOyDkmHO4g%iq#*C^K}z|7~Q#7Yqc&#sAXTDC{POyT!~df3GvlD?eeASNEh zEHP9DZxZ`(U`#v!>zpF<#l$L2zLng}?YM;+asV7mMzfy>2C)uMsl?<^E6y<Nn##0qGcdpoilcm$v~3rV6sd70dO#_ zF$c{xP8WG5ndKaJ4s(WZtRCldAe8vQ0e{(hwrKRc>^Ukt1Fi3u(j_i|wZE7zjnOGz zzR@sm1ezaRGN{{)7e`?C3krVZ(p)G`Snc2Wqc~!4DKRE<3>^;fsDG4!jae0^s^r@P zayS2`9L9-Xv)fzw1F-*=U0}cU*T#_+4K;e-{WO=8O8fbqo-|j6_1tZ%@6L-2q65|V zuj!xipZIqCXXwZ?N4ay_4?E=m8-teP!!BH)_N)O>+n(m|Q+(+lZ z$Q+r-`8ZZ!VHjgBd-6D!$C>7;oA~5_Z{>$KENR4??EDoI82ybQW`IYnEEHnZYH^K7 z924Xv0Tb}tSH-}~##>EMerBx^gg=)-n->#uBF?#`D;I6>M~v-=mkc3eQBZO)CNYgw zoyB47h%**F8rFwj{I&3uZJYgf{I&6YkNo*U(%L*edrRKKu%VuC@;@Q4-<~h5S2_T zNU&xarw>xQE3^c8TJ`*dMgQmI+G?Ka5x6@^7RH$0ZUD8;J+;R*IP2HN(B|gwR`b@= zrGRlqTJq+l!plW@i3u`chYk3|F_f}!$bH3kto9>vA@LP!f6Wm>@yVz@38fz0(xyKK z^-B<7P5t#5zbdX#{1JbA$H^X}-u2=7X+%%jUJz=(^X=F>T^#o;uP!U_?se??UG8^c zcdnBTp8FA8v-5?`7`(WM#k<5F_OLNe7@W^9J=p+6gEJcA;=w+Qj_1iBNZV3Jm*ITD zZ01WH3RA?RFe$LhT#Sjr3WF%egfT=x@N~@Nfq5L-#xrPp7`K@p)my$>hv=T%_Ib>6 zknoj#REF9;ufxnx;y2RfF^zWc#hQWlJSJTn z%Ih)97WojxOJmAl%33~f3GLh<2M>Glq&#f!vBhQd7xkNR5%ubmQp_j*1KIrooA(v( zw=iIC@b%GO760SK}%&3dcw)>p);aS{w=fAM=OEvP>|B_?`l80T(V0HM6X zyyw5q;`4AKcFtG&toar89Y6SHJ=PtIerX9tceAh?_kzB42>HU@ zbUV<+2Ewi~!LX0DnQDBVSGyLT^`-uRV@-#73bd`!ez9!3`t4DF@oz8J#lMDop31u8%kh&6uj+l}$FN>u_BEMP zf!G;8<(>O~_$Pk<|9<(B|3<(h**NyNcl3{9T&H`+r(zp=A0X3)0WbOicjb$h7shDj zl%}VBw(+I5l07j4I7AlIdLDEUx92KM3Z*+o-hQtxsm?HpJQ~~o!reef2|mUQBkPaH zFj4Wi%ASU@@8^Wa?J6>`@UT;nh0nm$Pd;HNP6X4yK7M04wD@0`u^#)HsQNhG?T;wi zDCVR5td$i^cgHh_^Ctu`Ro@aurO<)Hf6S?IMa`jmFWkvjwr2}3T_miem=nxdHi+X15!;F2KJoyojrT+%=$rf^007u@V+A#T4AL=J`v?zev)l-zmsX6 zBjZdCko63h`%@Jr#*1q;@#wrY`roagwJ)N~q1pJum-@7HclZg|87}%KUO>ol;qTNX z?U-`>AOZQewR+6_s@}V~pQNujCR#uDg=LR>rGKxOBX1Ui&UN{vEUNtN>psQ)Hn%$JEZKSqM$FZx0P?5>Tv2-*LBpo@Pa`WF9;#YXyB z8Y=O3WT?s0`l`ZLV|X2ZKLd#M7f_aW&RsVaz1!DdwAswyZP)rqavsN)4sa-o4pSOz zCv363cM&nfBwoBAv$*(G3Q|>b9Wp5DF(#Z&S0o|$khRSiF#5oOjTu~=!L|?mQ5^9@ z+(KNzW)8JtN=QuTizz3^O!VRO$wqrT+7gaX7Cf+NDEmA-;m&U=#4k7?c*k%6!VdYD zl$b<-aLB7FkU_c*$#65NG2zZ;3&Phu06^pne%SrxxUkUQx+Gf1<^u&^vBt`@iQIjnimwzv+jf~-K(*DjUO?mFC^aicKsd9{u1sS ziyq3NBSALrH2ar+#Fae->!5KhvVH6#nmjHNH7)jo4nSix3hHef{w5giFrs$P0M(93 zAkV18@sJDI5$+ZF;+f#*n7z8@thf@|2kB(?&=y}Tmb1|AQz$rSkH>tmmt+Bi9t|cYW4@S#5sBcDvYo@H0Lh<`IXgq3pt3 zgacBy+worc4OaXN3uog^j5^IGTVYZtoySKU88D0xs`21?W!m8%qP?SU_F{HTW_s*klpZH$Le|N5QvOV2ojp-5fS{K*vuEI!Q&Dz@$**%u-n&6-M z?*BS{Wt`eaWfu8^9;nUpbtk_nWsdI-`wFxBp+A0w(=qOCC_RgrddVr2e!#-yJ)CZ* zu==u}{N|D^Uz<>jaSu{&eA*_42Cdk_7xwGE4vQCetJJ*HOdFHST6%(9lVi$Xg2$3c zVdtBhhf}CNbm)qQFQuC@5#e-~eu-I>3$zSJ*f0+99FqXn55!g;#)G!-#6lTHyHB&g z(H@V&TL>F`IG{Oaz=lufH3AX{1CtUhM!2Bj>$EGvkG-SyBnZH4I{X=)ID77UptGKP zP?Y0~MVBTt6xnvw8 zt%#( zxsV)yzUDOKn_3G#v3soa6|rh-u04KY-;wut=%3wChv(#@GHRLQIMw#Ge#AX~g>(8@ zOWIrq{Im7Ok#+aOO51R>=vgvI9DX*gCHuP1S0W%rxd#R>9Q%COr@GUZMt1RNj9ymj zs89;YV&B%y0q7pm>;!HaoJn z3M}^+gTRn2_fDAicf?6d3;*>?HQDaJvDNHPJt_e=nq(ErF>16c6orA>6Zuoze^0^l<%a{Fk z0eah9`Cys+uk?xisI2VY_lcTnA>NQ@HFG@EZuwjN=9xWTh%kV=zDA-UGOY9x=K5*m z!&T13HVe4O;_w{qZu7W@-!BPm@vzSuT^KQ4F`dagLiUpfnpKmh-qD@6pm|wZNALW$ zi7r_}+2{?EgKx0jCPetqLCkVNLFfO%GYf3Ci}Vt9031xkyI(+d%ovY#$9f$m*5lw< zLFV8j<^|*=aL3~7LSN^Gam%5dQ%hnW)0ks@GXP%H154Q!AN=|n=|jW{Xstl4axo%F zT9}ipzZ_1S5zpMo%t2;M$;#4y=9Ji*&U*%Kk9I=A#(^2m119sVS0E*yU-`{UV#O2r$mU-=fdhJ9*DJajxMrd+@)peoM+% zF|TTV#}CZ$D~z^RQMS2<1E6dzYNV|PAeF_|W>fIxDkX%c4ZU;CILkh`h>eG1w7Ij+ zG+r@d91b)w`dmND063T$AJWsB?y76fF#4491i}Q*}QN#PShQ3%1^~St>qrK z?|02%uX?wu{b}bRsfz2L|N4iPuM{W}&I+e)x4i4Lgze%y;Kn>7c?d6tp*+Rg=iyp+c-iwXEqm^>!lwW{#SnTfFn`+1q;U|z z%D_W9Vi^-AUMh%*iNwK^VYIN{xkLLyCdE__kH{~O;ICKf&IAwmzNWyi1S)a`I)1=j%~|T@_R-P z3&h}r^BzpKAamY4S8y&rvV&m{gl)E0{)vS=@!zUHaec(M*Z8$Ma^7u_kNC{7kKwMa zI~?qnuQ2Sk%c39=Ko|{s$RXxSu-N3%Gr8NOk&t5Y1i)i#Y*Dmn#Lzf`hDg`UVcFq+ zL2O6Bei2Qdb0NpYo|V(L6cI>*8GU)QD}xSjVhX4O$3#3*@YXsf;zNdt5cYZ4ln%QU z5RI7Pfjyh4t-sUX9Z*kP}IuRYfkcFCrL)tND~^ zdHNmcIs6}g|1bZ?U%u?W3$O&G(lICRu(4R^QAzxNxr7pCNL^fMfPVYqJH%FC678M+ zus=@37C7VJ`iTC7{fKWX=~GnXf0~DnCfUbx7ylM6K)@|uwz;4FcuR?e4+2|{j;6A2 zYls+!WWVd1yVTAQrV)fgMbYnOQf+1RVM#`9WT@IL~oSzByCXUG@cRW0YWdK_miK!|Uq5%2R54hrgs26;O zfrpKiw9JKrI_>HHXvaE{y=HCjnqNIHUVhht8gsvF`QBM)guKG>9YorwEK^p2o*ue^ zuz|eN`Dtm`FAFVdJk?BQ-Tg;65Hs-~)t_P?eZx6K58>^8nS({Sr$D|t=#y_UzN#7i zW+-DH#Y`7=yZX}6p~qa|+<%P6xa92^ z@$dqRf%-d9lDjYm9{M@A2X~q7s22O8cy>(T(Ms1yEu-&XoWF}DL(Kp;-C)oS$|KOQayjed_Gu1eX0yw?~Mc=fHgUKiQhtHZ8`I2VvZ$9x2c5qLOVQtUs{10P)s z7FhGDP#^Lp`Zd6MFLdx@fAPYyJt(x-z&ewkW&C^M5snQ z9Afi_aoSzeyFFq#hw&&G^@rlgCf86VZqKv(Mi`;+ziPnLR|u9JXPujUVj&wJn`p&J zr;)hO6D!`Vbg{_;9>-NL*D^_B*hk!<4!P@j_@1`HvIPYfBC!HTM5Jl zn#sxb{vDh#do1+b_Yr+!y~&(o@eSkAZvTrOv7QggNmlk;fWm~sGO34BF)wnS+?n>| zq78n2#l!st3fiJO~!i-@n(E##Ami6&@;UL;Oe}>{DR-1bQ zZ!4N@!1yqsV?F@ADeS9mtH}*H3v``!yGBD;U(_;x28a6Vw&5TgopT*Fl+Gc9Yl(%v z#dP#4A^ue>ObH#anvhg&wXepDZy2iVqLNT{j2QSZ*v1~GV@wFC%m<9&F`=5zZEhHh zM_@DlZ~im?$G`vOi+&eC@$oBo!Hiu9By3n8++VVdo^{;)j1I*xFj!C|*wCgd%lZTk zn60t6XD&+qI9+y)7E<_ z(=wMA*n@_zzCxhve(_=R9{j+@KrcQF9>$E3q~|(kc%?a46OKVci`e1jB#y~e8Yl)N|7qf#v-}iH@^qpb?hh^#* zWng&bo%2nci+Jc4+@fTzid{##K?{7bS9}YFNx{syWHAr85@Mf*pAZ8;ks!`%sKkUH z5KUu(L%}{lym_cslAWALuppv)tE7GX*MbAKd__F+`m6uYDS&s)8|C6pGK?+$w_i?x zqufjLn1^G*Es8-LaPtj}_qa_$=KM!E#=88LgMp^r`y$vKLw^S|;EU*38=rI(?>0m( zs_jtje6*+Y4pTe_0WqAf5K0c4H!(tJ$HOv&2wL!=c;0EZ0_@i8O3KYEUT)y<0OKzT z7c>l6%=8s``brNF<*Xvf*+|MaoRnr`eY;wxPXyOeg6(Q8OMWJQ@@wr{zIo=!Z`7zK~V~wS9KV(VowfmqoIOo zivp{-AeE~GSg&nZsCR;dXM@VEaWMh9Ooy2uFJm z(w@#+%yhVjyZ$t|8UNr1jP7`pj2c6680}W>YCz1%7e?5ZFWcNtKVP84!#^=cA2v2{ z?xCny*x5?3q5E>Z7~jQRfvU9`L-Jv>7*okQJz1p5dUc|A5OP);7hr6|BxO!?6*Dm; zGs$#ZWz{4*(k)Tor!D3?76eHlkz-5b|(ikjo?r#R|)p4{prG)hzj?d*@?M}=8V2`j(?uy z^*}%oLK$r*8m>kBifLlJ`Jv2u7P~Wr@n}y!eF?b3-Q{qKQ;!(W4|qMPlo1d@$xs7q zJlt#mxLus#c;$C2pqURL6=s|J^x-=uSP$X=E%4Eo40k@iTT4BmT;4$dK*Ca7Ppo&? zycTxXVVaW)G%>(}BFNG6#ZIb)C&0ecP#<ccf9rk9#m+DsZ!>!w=#o3-En8&5KGL_URBWZsxHs^9`HRp$9+O)8=Mb zM2$zr4NH%I9RkNYaj#^IP!2GZDdIKLT(fVaSn2ZqBUMG3#^g< z0U!nj4(Z5=K8(vnW_FN=lij;9AUm|x490Hh`w##5|LVW~@@4;f0n)j~cPykkpWmky z-P+>MlF)Gu(TAcdBQiKi;=m$oUox6Vc%mhK|B)W&9exIjOmlA|dN+{tFGTc@@nje3 z@aIj8QVL|?SA_6g3}x*f{#|u%5GAT-Ub~O)C%`!cn#hV?g~BjE^Dz;N-wxCjjn8~< zux9mXY0@Otp&gi(CBaY@jwM>kJP=0M0h##WDee$T4*x|Sh9R!F;TR&bQBPz0RIT-@ zJq83@=_O?04#+zF@>EO+B?A-jrl1`U*yD@#c$5r#D8?H{0F-FJ@+%%C@3u%b>kZ_>H{(p{<{fEAAA(R}r zi=2jwJvlMh*``W44Q*GkrH4?miS{>UOTrCnEc!tJ(czTSUozlPf~SmjJYbJ6+T&4j z+M)9ckG;{BLDN^*^pzf5A>)ODNwWFzvcZ-<_>F-L3gXy9e%+q1o~vh;PIkI*9BVG; zYn`)dSoJ^hqCy22Mg5~VR5Z`71Mi&n2Id~C1AoMDAaH`CQa z-;u+Z==}{Oe+7KlB}Oh2blMel^xKF816~{@$Z5=G9+9g!ag@_=v1gbM9H z?&jbjmLc)**j>lvQo=d(zeZSttL zTYosdxso{~9vS z@qKK~>J0=VpY4nXO0zVvlI4SZjcs2@aQonZ8v1fsgpGg45c_zbp%akmIVK>C0feON zygx57fx^789J1yEhA{@Fp8lNdi`^KcUKs39@0`;LJQ`{|HLtI6?Bih__3k$N=03ad z5Oj?N*&a{5>^aC&u|J^=wO^*zd+=4gi92$k5BDco>i;9mB)T{_lVLzx?uL|6PD40#8IlhactP z&zHD1G{}`T4yAc4`eJuXPUO*t zaXz$Ju3@tr%JGn`XB`IFMxT3{_H=dx?5HWbYV6I^MPZDfbxPi{*Ja zJj~hY9Uh;St|=DFR5at2bh>2R0Ivox2z-zic?yQ?%+%A^KA}qwq2%P7x;K<_(wBgV zo158KW&$V#V__p_2$U1-1t2aSi!YZr-;HtM=+6s4!8mhfvdNKYmM&q7?V?Q3low!R zI{8kvhnGC(v$@2K_g7o_CAROl-^X>Q`LF(}sYiu}2ssI^xnYsG%UMtao}cjR~# z8~*WW>55)n?uS|~#b1YWwalQwJldq4Xe`GC1b}M&BU@K^=F$p@=~V zA-KlNC!cT=!o`|6R1VFCj=2duiC^9 zY|pc+JCp4f!M9vcol}J@dwA4lamQmaU5^iTW3Q9paW!I<_VGU9PgvL-gKtcL;C0^8;SRxvR%IUC+B)U-h3*!7;`7gmm@uw|=hX%UrxWHOt|E5gpoikilcIVcBWD`4(S-Cf1wD zgKK?o&VWomJG*gkFdqydLaR$8Z1eo4FW-9M7|KhE9Qjy$=7%vF4-QJMfXc@nTPW1y zSJZm8&vaQBI2PWvH+likyvD@%PGL>(D9!Z;aM^<+QaSrjforcrD>;HL;y#x9!ud_e z0^hN4!e$WWJ&rhuW9f*HvC7qt{6dX@+-gekQdH{2fV@p zoKVg;%d1#uKW{^sIf^cl8^I%L^F?|S=Y2clfAh;Pm$dSy`Ra{=wwel4!c5Wf@q*i8 zHnoCl1CQLm4z(8DLG&eH;(DVf+r%NZupyM3q;q4##JV<+RkDMFg088>$6T_^u~5!a zfT6@8oAMP$3Z-AS5M%78G9Tq|mf@r??S)JKuG<_nUk~vZf8cq}4f+=M+*k6Q^Pa0& z@1%YGz74n6x{qbDe*`<@vM9HbyXRWdmX7uV-4~JVAh2u> z>Sd2AN)D0E0}pD!IHQ}p&e(y_yK*pA(u^4{i3up& z1Z<~GVM<7fTv%!cJ}`qY;+#YFF0>^f9FyCxICM}5>URO&=e;C48pIbXwxtD_CNGEw?{dq2rS+$m_Bg05tF$Kv9=5w4o~W4{#;~x2 z&Zu~xJbqFNi!LMJlCP*wF_}5AmtTAc3O7(J4LKJ>kAP+mB{42x2>}M}W^Ngidtboy zd3k@cpsFhb$-Un8&Gk1AeTNv9NN4a+F>myvc5~YHgk4ASt_DU=+Pg8IgL}-Z&G#}9 z=A}M(1p4}EX&c+7_N?@TM)FJ!LC_ zvGggl$bhhkdGJUB*5~3&5Sf#{vVK`$ID;JH>!p0)%kTaiUx!9S@?b$O zI3q}LLNd(6z`SZs09?xGFfZ)WyvPS1!W~a}%m`k5zx?vuKX=@Zx}cP|51d&c#*SHL zFC}D6GOTIJkX#UGt0Vns^cs!BF98o7Vi7odXxb4xo?`=WuK*cP?(Z@n8eZNTVY}2)z3U5>i`T2gx>$0KD~SYE7vmU-KkS&e_hn=}`F4Wccu^c^D;7#)E8nmcHe)+J;*tlpuWKOaxf939 z_I2zPh1z*|mE}?RNCo`~>1Hx~b1CCK*sx~Y#d9%?sj6Hh1Q7;#lV#>8-Y~|*lzJ1( z(2UPcxe%^&d{QpMVN(rk2du^l5A&!@Ak-HCW2DNU!?trKlmR)ch?7*l2=&@bP9^*J z(;Uah-H8pk+cI!{sZ_HMxg+2knN*@a2h5E9D~>5 z0$G$EP?;f^{M}x8eF^FQ(RZI@i--Qk2VFowYYc&jNg*audA&NOaTP;B58$e$ve?oI zUUK>{JAq6z=8Q46Z}UoD@_1c~HiVKR9{Js9Pp3Kzyz%1d^-t)^G2?S=lcO%Dg?H4z z_{d@MQKR#_-k-Tg`8}$ytJHh$%Wr@Gm%rK&*L84w)MV!eKR$74*dJer?vU&teA_~IGCGvcy&3=orcVw&^waJoU1TR zps2QSzjN6wTwdiM)Mg#t@Re2q#~ z5r0hB^SysTUGr#2IhHxTknNlK_OXx=`+mlrc88~Hk}3FF)U5?cK;)Mm`^Po}g-mxQ zi@I1^s6<9?UrP0JI)}%adtW*RjBJ4cY;UKzC|n8guiQmoR@4+>K>Wp?2!z)@8C*>u zY1TkkVsTNU&FOA`UP1))*v!>9)tE2>3K3t(YKP1>~S8GHjmK5sTC z^bLS?ag@0PhU?+E3+QxLT?1;s=@Mft5rjDNc#BKdi`qUA#~}m*RMI^geP>iuwnBY!x3 zQ*ePp=R6|_-0nR>_qL-)a`VEl&3ST#eDRY*YdJ54|95qXqzhLPvJ;N(M9GM@ki7QOT@L)-!aa2R0 z9z4*!F|iJ4^u+^nO*v2%mlz?x<8#c@%!2uxbGog}guW$v>=V4~vFUh2UTeb~o`XEE z^hyyBz4p8~nC$HD`ByCWOo+O8V&7m7!G$KH zJMJo^KmGQD0-~bBJ}}*!AKAuu!%(;)vw&V$U?@4Xf}RgH!6GPx3JIUq#uaw6!Aq(5OpXC>~$-2 zEcd!nWE~;O_=)KTvR;Lxz;7wQm)eD z=|I#nRVtA?InXh8;7rT84uwA8qpj7-_T8Q+*#&M%)_ou+;I4gxe@NZAYma=0Mc}!f z3vaGVcCk#?%FA~<2YW$Rjul}>TL&JZ-BYH~hMS&d>91V6@}7xR)N{%P5! zneteIC1|~b7S~Y3xgQw4AOkwYl^Yzrs(gunZ4)DzV~hbtW?#e8mca}D|NGbe{=f6( zOZ_fD_?8r*OnsdrmT-JjObGit%z(n7Zq&u%g|N@-?;rI6N1x%LNMAo$%{<>-cCk#< zgSf0YYHfFwbug9h9bsRWr#XL%kDx#+Hv_vBy6VDYAfJSV-E7M^Y^zU`7!17Dh4C?g!F9PNaiTALWc zF^tU!V{@2Q{aQE1VSmqwE!`K0CUZDP<5p?by3BLJd|{a#7gb$Sz{Hq5toN&1Yxt;! zTI$QmHxkU5=YTE*Y;6yHs(%YTs!P5=%=tV9gmH<<8rh-#!>i+AEOANheKLKvt@)ou z>I}d@j$Vr{og4gMXRT>>TqT`$7?Ydbekmax4o6>Fp+`<$TcF9-B1oczp=~myc{qe! zaH*VZW`R$UnG4+#AS6v`w|iL&z@|Spps~vsI0xcoSb>7Vab@ev!oH5lF*|R@PCs4t zW27Oc8Up5C?T$O$KYxd@`#bHMYV$YlR1cfR*IoXez2zVr25puVojH8|Qm;$4Gn-OqS!^c_nCIfRvtL!>vY%kV|j z{2!FY%kq&(jB%Z(UTam|x_D)+H!YLx>G!CQ)CBBYE9mQb!P4zqXZSHT!p4MmSdRN# zspdpJ&kxrvhcB8%3DcRYQvwgn*Y;qVvCuOoHd4A`hsD?qmlEK{C!D7707Xt(2s!@Y zw~x4C-`8unR90>D_GG!Hq+{~TS|pEpvViQO=05yESoUCDIO#~91fBd|a};&-(}4$a z1z+Wy@=fe0ZgPw5=YFDe&EB<6{a3Srn1CAVG%~ggT)G4n-uw;Qq6Fv(9FZf&;#^Qv z=mTZ7hbIHX+nm>z{~ZnwVz1SD`;pJN+j^B;uj_AwN7|Ogwhhv5Z(TofA$mX2SBmeh z^}3E!y&S{1k2^sdb|20jH3;7lkM%inmJsr1d^##>b8|r3AeT4K5$J)#h}C27RQ)ys zHf88+Ypglc1Aw;|BaGm@g!HcH{ovjLFZ`kSJt97=`v`!ftsD$qap@}vf}+)!q{>Fe zFr=6jUmRD?hR~NANwR#l&se`xK@JO~IDn?aWw<8xBy`pC{FrW};zS5{6Qfxo$f}N8H30%`_6(2K+&)TS@IE zUoXBA*gZmnLN67#R(p6NVBr8dNp|cSFVGXlJc#R7BcaK;&)ANFgk0+d)-`mz4yo2x zjvuGxBxc=vUe7|KcEs+<2nQzovo9!Dp)`99;SERmwptLY{cwnT@Ocj){@k1hypTW8 z^Kv=Y<6L6&(QbZt!xo{aPnTb2mQjjHvS+1yz@WUP!W7D)!xrr{2gGgQQhkVp0k)?R zGA1`l$B#O~S9aEdiqvLZ{jTS@M$jFuV|t92dcsg=CuQW0njZPj{<;4gKWlqETRHIT zp5}E$e!GU@p7Oo?6>z8KeEpyQ`9Ju#zkI3R1)y(C%oggtT z_ggZ>3lytSISdLfL@iKy!(g`;&=vS4Ow#K7K9(Vbb=o>ujNAy;J<;pDv%S7*XW~1#8gHUwi5a zblampjhVO&ESq>8zT2R$2qUw!EsvM1`h`NXvRIylOnhpH#zX*fOa~#Nba54y;3jUnlXg!OA4b8Ku?h2rn}}vuCC}}g?;gb! zJLgW`>nA01uF*eQ)9A4mYIZDa6JxV0+}t)tzk4!rBj~kP=pHo)OWY{Rj^fK#!f?}e z&M*&*j*v9hsBs|MxomU4GoAFn>PAUE$98}I@0!3R3@$WPvR_I;of8aXwNw^cI{Q2* zwB~dJQ{5J?ASsmIR7c5N6Ti;+I?ufZF#|Iw*k}FiTQ3n5amD4{Pd?8m1~1df;rLT6 z_9+jZ@5Zj{aqYnupz-08if>$i%|l3$>t1nFsC}TTlvaS>88q3wm@gu2(~kBPbWUctOv+Q#40x0#qIfD-=p-TI1C9G=QDaq@L`*2KrUk9hWkoh}BA`fD~vmK`uThqZPPqhV~Y;F9}CX zV~v@;yVP`(p9k?JU<*ksxi&0p z_~Pua-ZggC)boCw=Q|wIbsS`7f|+fu^BgPp4-jFboiDBBmB$=+d7k|CF%=Wdv9-L{ z&EgM_b#w>74>H~Uc~YIxQONzEH07vu#otx0Vf%ssYA(hps$K{>bBS~I*4T0BbXkmg zoa54Vo}7g7G3v`$?{60jM!;l?2<<~J$%YX6T{B!@* zmoN3Z0In;i@u%#TKTpDbcGH0GhahYR^aO$78n<$Hob##gIOA7dy&$VCUZJGZB7P^1 zwNPrv#EZ65!g4{{T^bE_P!4x)F}R0D~hmgSv~fibMLH+j&KrF zNWPUzqn>^+=uek=om>ZeYWsYEm2F-CwxLfz;b;@@VoU69JB=5%t|Pfd;2tyQxZ^NI z>-b2)N6$dlpV;tss<18k%IUnPoc3|pNjU4Ve8tVN@A+~rp5_?7AKCB?RJL`tW&Dku z=;uU1#~+5St;w#~iM+-=;~m>^jgMoZ&9!OnK5@;O@gMxTeKv=Ay-}>ApS4YURg;2- zm4h2&#I7!E5{z|h%8c0$`Ud>mlItF?`|E-+G0R-7Aurqm3=+*UrFiJ?c8hO%!b}fs zl70ANA9-6@e&4rNr+DmdA1dufj@=GCs?nYk*15CF+Iy@q>t~dUjmbO5pa$nha-`BH z5h(tTv1wKrcveFs+c?zQW~ZtwEwP15hv&C&A)MYb_*X0^XtC{a6F=pdi@fy^C;eHd z_boO_*B-b~%p0?;ZEVV|4y%0SK(gx-Nx-+wEwy^UwY38R$8t6pvUrPCfRh zxIESgdKZ{<)vPi zM(D|j9(mBTe-*-bKEy#Bv4kc+g5b}1sB)J;in0m2*x(C;>M#&GY7}o}h6BwhWELk;`9Y)C_-Urp;qE`r76E+BoM$-_zckclzIvzn;x^II zXy;$Qp7Zz>!{$oIL&tUyP)6S`y9{BSX~Tj+V=~us{}~+58Bh-ngZGvNBj@N#0K1pAGuch7 z&5L5=&);k7exT0pI8LroJYvQ8g{h|vx`ezqRD^6_voqgS9l&|XxWc|cH{rzA5?)Z^u?%*4OuQH!z>xt;2_%m0}&)1LZGdS=zef~{_F)wfaqMT>s z&(`M|;G4w<-p-iNkhKGJ6G;vm-o|J?8PI#rzUR|oIev2Ws(L|{t552zhLt+x$XKUP#7yKeN!;J@-q}wt-Yqs9oDn=~O3z!T z+#p*N82*a27vp>3erqy#^u?ntB^rVmFH$o2h3^BR4~CEU5HGyqrRyErWmXhr%zf*< z*tYGG@x_JFaB?&P?L`dcStl+~okv>?RPzf=Z28R>Q;VvQ?Gf_-eZ-l*1Gnf?A&LBhaQxeYcj{B z;ifoi+QZ^V8v_vk`m6J8e63Qt+y84Vs&Tb7(H%!4-jl%dquZR{>qXOh2z9M~EQaJL8}AS2KXA!+GVu zy1xDwn0RJBM`#$}S_d9#0Yi4zkPrd#-i0ki)1J6ClaVR=NLh<{9 zv0#T?_5Dx3#qj#+_h2Hu-=_`oip6-;R=aKOH*W7waXaQ`)Up1qeaf!&n`}YiGsJvL zUk3|z!PhtM`HwOze}<$5Al($(YgV!sTz0Gi|Cx-lS^ziuF9 z#*2FQvKA->%ob;?1UOJ%*SNSA1=zm=jT3M`ju-Cxz=MY~o72nB7a?n=^+k=aFJJt-0G-GF zYd@#;Zm*k1Sk&Tr#P<;nbD>|GdBwf@eh$rh1=V;j&B~@fW`?dSPWw-BJqb(fxPbUg z2lV{o|DAio)U(pnB?Avp0zM-o9r)R#8{&J>3?TFx03e zn{!%6e~OoVqAWL;EwexIPe0|a80c4oT+*HlxlD`en{2@}|10Q)_=Ae~$p^y-U(Z3! z9{(2BNs7htj{uxRHf!2QD_Q%d^bY1*@Q9tYPcF-A?bxUq_-Z%$+^^W?IHO-%!H4#0 ze&$Q~a-5>%H##eMj@N$lng6fD#e|_gA5S?kZ*-nELW5NQ1_}=Su!IvYISzO2m%fyM z-+!E^%Y#fupFAIbYR}+1RTXuoqiFs(GGH86JiH&hKQVLKcjH3)cuALt=7$S)s;zcg zF?Wrzb;Vx&z^xcZexyJ1euUv$uvia&V__bwN6!aVPWx}gY5g^RVGuuKzhz{v&LY=( z>b=M0XH4I+68qjd>f8vvnBvmWt$MhG z`hxpNP0o3asa<$`ad^+q_?7cD$Bg|`mUTI;BY5A|ml)2E)4ZfU$B^+AL73M%(ES^Y_e`v-q!gm+Md0mV(@IDb=W9X#*7vpFd*>h-?gVcz4@zG9ny zwakJhw?PVfCB-RrBpr8RS)%o&7u%2Tdo4DgABqY|(vnT-ni8K!I zC#W?hkrxz>`P^b(`)5q^{qlbJ))8v2Xpz0Q$c?%|9xngV11#E8eW5}BtXk$+yoaZa z<#<2R!3uBl-*N1mPx_MX3HY6S9~pzzLUW?MqCMw7SHk-4Yqi^+&Wv}4=shIt$7XMh z?QC@+!GsB!MPfky2=5TttZC3qjtP3Fuy-(>V@k8WX@4bmjjxdM?{o29)VHAK=5h_{ z->Kc3`EGtZ+P{ly4c+pMI?8?d_4oynV)>G0lAMtpCKnlC@W~;@mIe z$9Swg62{dNud?=t&w%+(c)z{M^)>$WAk{`(ZO!^Mbu4STDCT`*^B?0J|6_aXkM$x# zaUR3{r=*WodEJK}n}ln;D`=kOLb7}Ir%OqG3|K_Zm(*li<@*9xoVB~d*8aQxoaes& zJ095gu|8qH&et2s@qQW4<1kA7JTz8M`lI_R`DtmsgNK2?a33PPyN|B7j6Bw3(J^TQDjI&f)Ec{99X|ES-4eT_TKgZK7|Wc6)2mU+(6K^w-ln=%)3z9*Z2v2&GnmE_6(i!+`Q8s+c#7t5oYyXwbun*V`TZ- z7w?YGb=&`5{YIbr(+dRT{Q{kNR;xFA&z#y7&AIKU% zNAQ|!kNpk5EvgeLOX7EM&tw?5$nq_lb>yYhn8n%W;A+0rzV>3;2YZ{~!SU*Ve+Vtt zzDex(SbcuUdR->(9hYC?yE!ylomD_r!&orFCBfV3vAf=W4$O?`{;A(8p+=hy@w~5l~g&W zaS2_J84UT>u>vszpV2;PN#7_11Dl_~UH|%t$v-X@;hU2&vS0U>ov*p>WAn#%8iEP4 z#O+eTglZ7?3578aCSu2)Y{sAayMy$MZtK&auXT0YkCg5<>2vM9!Dg-N+)s~W9d`SA zG!CBnzJw`ytsLddT-H*W<1?iHzrE}Cm2An${fH3(#3Ya)5v+)aHemG#HrZ%$_!CH3 zo`l3mNShF_2_oH$hsY2CDH$o^r-%{J21KkDJ<3((@{h7zRp)fynRn&ZsE^BKf40A> zQ@*Ef&rCZ4G2$U&E#lC}FuxdmYg^T)rLw@hDFL4~^?vZj>u)5yt&)}L{fAAb-sfc! zf42n5-Ob5rD%)u@!%;yMXcG=SvmIhMIjl;VghyIK+Qc(FU#^06((7vJwl*uvHeUZV zA+bLO`lA0nsWhMVF#=B5*LLW^qO}Ct7;G(F!yubB23zm}>Ln}>|iPudX@9tvKQN2J=AD!hyV^Qh@tfGH@>=PZdDj6{(GV=7i1IF6=N z5Zlv8p%L!EGKRImb&3PtpY`_%B+{3*B*niLen0AUgi3LJ8@q69!-`tx*7(n8JgZP| zwT5=JklpGj$@b)0Z-3zV&uuN)_vhA<$>|FY!c;va@i~;|hJ!P3g^dF@SdnNCaf49y z4$jCajw6fbII$nM{B*M2aFAH4&9l@^!*MZA$&n z01oxJwQb0eS_Z;Z47e@q*PV=ukAvZ;Wsnz* z@IHP9Je+S04;}{KpoL8@l(>3W<AK* zq`f4Rl^08_x7{|4EQ@l@-vMtJ5ESdQJYf#e8sk4 z+9$_m$hKJGwa@SD>6dCZYTYm?DdPRWvSp4;WCmv<{&08Z^*n35$JdB{wRC>0P;88S ze~#ahM=$u)YwbIhVWMs9LkqpBXEqM&2W4i`Ld&*AJ)HoI>6XI)Tf&{ zCely!9+W{617xC~z+&dS0YOwFFCz||QE;!GyqeE`48-0$5B+5J{4p9{2@n0vzbT96 z{JL`(BPjPHnSztrvj-vx;M{hW3<@V(!5X0B24KhMkjR<+h!O59fp zpTh||KG9@6gy)$J%>o+{HqFp{^T-(HLxA72TzX0R1jH?V1k%01vPoL-SNL$aIDwiW zw5Fgjz$!8mCR$aQI(^T0%?j_m)@&dW{IK63u>m0##{ipaJ}m}Bpg65U`8Q@;4)(jx z2x8iPo|f=D|M}xP56je30CRdn=_RIJeLFt~-$$d%F>Va0eeURLZhKisPFAs2_162Q z-#jh8!skf|JGkwnEjJBih2z<7nlX1L9|Ury89*1&L7Z{3S)?ft+u!hn1 zQ4o@p$;MD*a0h53mM{^4+sxK_3lL}zHn z@!rJ7gikHHF>$|LABcf|&1Y^*7#H)=SB$0g{#dee?%$AGLsDOA0BE)@eh%i0OpKfC zB#8^i{Yaj%cQDDHq&N=QX=yLsoTtWl)p#ersP?h$Ly)x$H54EQts?VaGVFBy8z#y{ z=A|Z`+$O6dMVMnSIcLf=O!Skn!ELRN@~oNZBg(BB=IG{LnazY|tBG-9SZ-Vmplqtg z(3;}GoT|u7m?(0z26)e5qd*(DU+E*c60YCC*qAIoyvMPrXdl1^KOU?3P-8+2%;Wqj ztG|PXH9`*N6OvAjJLowa#|g>g(dX(lj%B0n)L?nWv7T2~9LLJ+Ot-3k+;>BewGB0d z6@!+?bhs!RHQY>I<}f)KpoVI4duv6QQ!q)@lVqHtFDNHSszlSXQ-fM%#L8Kj>iKD( zDTAqDP05l&Fx8E8qQ!$bRZ*F!AqDFa-iLFu;EiehF&@CdnL*9$XU zWCXY&oD`2?;(Gi%V?RWH+v{%qb#280%R0rB7{I=ewzWcL!^B>^Vb5uq9o)Ug-R{b} zT#X=OAyvf;E=!12i)Fy*ZG>8ET^Dz#A=?is%R zc&@A((-j{G%>70pMZmaRcSXjUuJ}?z3cR6!y&xX#d&R~vB5Z%oD=Q}7$BX^EXlMGE zhchg0J?`ltz%11&)G(zK`UVFRZllc0WXGN-v}+x|;_X>n@^$xqlDw1uNuJ(;awq<& z?^x0g%n;#e?yccIo1))wO?8Upypdc~9&G<wRrDC@|+Z zFz#568Z6igjhpppW5T^gjcNBIIo{0t-!-vBP0`vHclRIGWCaZW!YojUq(fr6i9`W0 ziD%g$o^_357(29s#C}$!rrYJmM|jQ*uGv_;3Om<3>|kCDS|0j_ty*Ts#OA>6)OoI( zT)e!R+jz}q?#{{}HsUxo>NA>{jZE4r{91<h;2d z&B zC{mLq3bn!J7<2T^t!kU~Xh_4Ee}p%bmH9se)MYFB%nuPRb89E??AjLI~jki_h{62Q1?1#fTq z9yw`H7=oZtDl_d*jf+|qc6>_3`GoauYXKhq$8)|9M!?Jp3W+#5U9I(B`&m^HH1}^` z2X~%?z@?SjoS`_q=?K=6;zTTuNXHY8?7X=v{%7^d$YOoP0PUX3528+?CPlNTrehILJThO5<^J#~JRhh-~svH zeP1)GDT0VRCD|;8eGff++zFYZzJHbtssupj5o=^xX4;?a#)NBuPfGv*I$kcGU&uZA zU@ephYV2#v9Q|z@)W(<*hIm2(m=+d+%hhRCP&5KJ89d99OaKh4iaR!ht-Y^|*Eva4 zTtul|kEYTmMZ8e!2*&z&PE+h=sBfa-uI$yYnDyNI#5_Ncs&JJzq3tq$ky#3r^b}|R$ z)mH$fZoxRA+oqXb;qYX$j=UGVk{wCc;*dW`SL%}pG&;q?gM<*)(lctd zqO^m`+S~Ne5&FqP4YhPVs6r$wce)(0JKLSWfbGif zLD8ttza+xM?u^-$nf7M{#u+d~4mmHl_NykveR@#yf_Ua6Qwj=;e%Fsd46!yRDD)fW zsc2Ys0g53q*1>m@Lp&Xek9Tmm{a8h*9HX6>!0slV%JMElbWl%GJgMNcez0;)1R# zdEKx+trW1NHNf)F2Qcx){ZY4j)%#)B5A8%gA3lEl)%3{J>S*>u-so6RaeHb>M>$1v9vFY2RMvLW%t!{vemG-{q(0MLqM ztTz)8!Z&PL1{LlDzmLJc+zl{^KO_p-+Oh^ zVGY^%STfhPYH?oVA!CsKj-&S{%_X%#6YQ=Vp!VqSB&Yd75+~({^LEbOYONMzpxnR`c4hc*S_0*9iBgHEglmDE+g!IiFdMj{J)g1U9lk9;(CHZB z|Ez%Yqi;LZ`Hl=lV!>VIT*{GLGH!ukB{*e{%ahc)*fp%38}1+BZz_dF9c(ou2g^~< zK_(5Wql4^X?X0QID~nn3v2CVAmx`TymLLm*I9FL0hl>5U<#XiScyvJcxl=~-&Nz=l zXee3hh6f|s@T-owJ~X*E$W(`orS0XI=Nsk8y(nS}FW9aFu4&fjQ)k4WA>(=BH72l{ z-Flo-c%3Ul5!q=>En<78Jp*Iz&8@hMS?t~Gh_Ba%BZAzXme@ygXaFfu$gVZ)UJ;g>z*B8~Xldp`$*Ol%JjU#<9GkN8CMmb6^ zcBYo_H5+;>rY$GTtWJqRLwoiU6V`H42d_)>$LCO%obq)*3;#O(J_+2TkL@@V6omzH z{VW$+OO{v+B#iQGD>b`z(#syjx$Y5%8^n&#wYaeiqhP978#yosCK|}GDz2S;ZNBHc zY&*gMX*Z_yT90;O&nR;Zv(5g#)V`;+j`|1It18VN+@X^_}!hCy; zJnxs&oc&mKZjb@@p<3qLP@}ot&9Smk-fAZF1{qZ7_TJ~kphd=WhaL@v>o_)Mw_bNC z66Sb)x{ek_zVFs1y(Fi4j*qQAKn==4#H(wwq(`#+^NzW;f34 zKj%E#NX^w)yvCpZ;a~pf@!0<^z*yHI$egT&_e}W~+O3}Ft|E)!>4BuVqytcA)~fOC zMH+RWbH0-sv?4ON9?ib++H8x01-;?oi}Q^Tqd7s6F0^V$zAYfga$BRqaCn{VaHd@)hMb#6 zR$;T%tf}?7MbGv^sB)?jHd8^Ustw42NI%u70Dsi-8V*)d?ITgp*ttsoXQw8opDhA0XlCIhF z-Ce8EkSb7bJdi7XgjZ!RO3_0gOv-LP=v*i)2DmX+wt{_xC|8WdR7_MXvzgeB8Ac+m zFtagKY!*b7lX6f)-iS+IG@wH}(z|A=lm2JvLyiMaGJ7VAWWRhxI%NYI&Ad%w1!|sgR_K3g7Za=`AFvhbE{my zCXT@aQZn2p$_eoCh51D})d=OSMy0m`(PCo;bqWU%fTfAe>9jFn41nX%Fs?5a1IB9D zY&PGKi8At|_fn?yB4E(|~!4fMONCuLDWFQ&1%0M=xtIVa} z6$bwJyMO!P@!0<^z?B&3lMEyS?|^}9PVZn5vxHDn zGO*1+Hl%H;(l8lF29kkf;FSz~>l@N<|HDszn%@O@}l%+#5kPIXP$-pZZ$cFR^RueNBNCuLD zWFTbV5B~la|2_IHKsKk4zMM=3l7VC(8F(uOvLU?{(-|ijNCuLDWFTZ98&XJ5P9_7% zKr)aFycGl4klu>vjFSu`1Ia)#5HgSrDWoSSlYwL)8TjN3{N_J?=O@v30X}(xuSg)9 z(<@j_%w!-LNCuLDV+OJz9aEML$v`rY3?u`uU?3aPD_Bj;WFQ$x29kke2C^X?Q+Ao8SAjzxtOS{m+;G42a+V-5-4UH{bjH GKly(?tDV*W literal 0 HcmV?d00001 diff --git a/tests/testdata/control_images/mesh/expected_elevation_range_per_group_no_filter/expected_elevation_range_per_group_no_filter.png b/tests/testdata/control_images/mesh/expected_elevation_range_per_group_no_filter/expected_elevation_range_per_group_no_filter.png new file mode 100644 index 0000000000000000000000000000000000000000..3e98a42c40f8ecd79a9ae6a593948d7d7449cc91 GIT binary patch literal 471523 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 O?6?2SKllg#mH!_tMpLN( literal 0 HcmV?d00001 From 6b9e9f123bec3d230dc47f1e230851aa55c035a3 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 16 Apr 2024 13:05:30 +1000 Subject: [PATCH 2/8] When matching render elevation range to layer ranges, only consider datasets from the same parent group --- .../auto_generated/mesh/qgsmeshdataset.sip.in | 7 +++ .../auto_generated/mesh/qgsmeshdataset.sip.in | 7 +++ src/core/mesh/qgsmeshdataset.cpp | 17 ++++++- src/core/mesh/qgsmeshdataset.h | 8 ++++ src/core/mesh/qgsmeshlayerrenderer.cpp | 45 +++++++++++++------ src/core/mesh/qgsmeshlayerutils.cpp | 15 +++++++ src/core/mesh/qgsmeshlayerutils.h | 8 ++++ 7 files changed, 93 insertions(+), 14 deletions(-) diff --git a/python/PyQt6/core/auto_generated/mesh/qgsmeshdataset.sip.in b/python/PyQt6/core/auto_generated/mesh/qgsmeshdataset.sip.in index 5df433842ae5..f25cc96e3302 100644 --- a/python/PyQt6/core/auto_generated/mesh/qgsmeshdataset.sip.in +++ b/python/PyQt6/core/auto_generated/mesh/qgsmeshdataset.sip.in @@ -431,6 +431,13 @@ Constructs a valid metadata object QString name() const; %Docstring Returns name of the dataset group +%End + + QString parentGroup() const; +%Docstring +Returns the name of the dataset's parent group. + +.. versionadded:: 3.38 %End QString uri() const; diff --git a/python/core/auto_generated/mesh/qgsmeshdataset.sip.in b/python/core/auto_generated/mesh/qgsmeshdataset.sip.in index 16f891990df0..7ad800e693e3 100644 --- a/python/core/auto_generated/mesh/qgsmeshdataset.sip.in +++ b/python/core/auto_generated/mesh/qgsmeshdataset.sip.in @@ -431,6 +431,13 @@ Constructs a valid metadata object QString name() const; %Docstring Returns name of the dataset group +%End + + QString parentGroup() const; +%Docstring +Returns the name of the dataset's parent group. + +.. versionadded:: 3.38 %End QString uri() const; diff --git a/src/core/mesh/qgsmeshdataset.cpp b/src/core/mesh/qgsmeshdataset.cpp index 56d5dc6830f5..ed2667df8f77 100644 --- a/src/core/mesh/qgsmeshdataset.cpp +++ b/src/core/mesh/qgsmeshdataset.cpp @@ -19,6 +19,8 @@ #include "qgsmeshdataprovider.h" #include "qgsrectangle.h" #include "qgis.h" +#include +#include QgsMeshDatasetIndex::QgsMeshDatasetIndex( int group, int dataset ) : mGroupIndex( group ), mDatasetIndex( dataset ) @@ -142,6 +144,13 @@ QgsMeshDatasetGroupMetadata::QgsMeshDatasetGroupMetadata( const QString &name, , mReferenceTime( referenceTime ) , mIsTemporal( isTemporal ) { + const thread_local QRegularExpression parentGroupNameRegex( QStringLiteral( "^(.*):.*?$" ) ); + + const QRegularExpressionMatch parentGroupMatch = parentGroupNameRegex.match( mName ); + if ( parentGroupMatch.hasMatch() ) + { + mParentGroupName = parentGroupMatch.captured( 1 ); + } } QMap QgsMeshDatasetGroupMetadata::extraOptions() const @@ -169,7 +178,13 @@ QString QgsMeshDatasetGroupMetadata::name() const return mName; } -QgsMeshDatasetGroupMetadata::DataType QgsMeshDatasetGroupMetadata::dataType() const +QString QgsMeshDatasetGroupMetadata::parentGroup() const +{ + return mParentGroupName; +} + +QgsMeshDatasetGroupMetadata::DataType +QgsMeshDatasetGroupMetadata::dataType() const { return mDataType; } diff --git a/src/core/mesh/qgsmeshdataset.h b/src/core/mesh/qgsmeshdataset.h index ee0d34c9df93..6218fb4cb7c5 100644 --- a/src/core/mesh/qgsmeshdataset.h +++ b/src/core/mesh/qgsmeshdataset.h @@ -397,6 +397,13 @@ class CORE_EXPORT QgsMeshDatasetGroupMetadata */ QString name() const; + /** + * Returns the name of the dataset's parent group. + * + * \since QGIS 3.38 + */ + QString parentGroup() const; + /** * Returns the uri of the source * @@ -457,6 +464,7 @@ class CORE_EXPORT QgsMeshDatasetGroupMetadata private: QString mName; + QString mParentGroupName; QString mUri; bool mIsScalar = false; DataType mDataType = DataType::DataOnFaces; diff --git a/src/core/mesh/qgsmeshlayerrenderer.cpp b/src/core/mesh/qgsmeshlayerrenderer.cpp index 655d10e12a97..d494a133c5d5 100644 --- a/src/core/mesh/qgsmeshlayerrenderer.cpp +++ b/src/core/mesh/qgsmeshlayerrenderer.cpp @@ -99,28 +99,47 @@ QgsMeshLayerRenderer::QgsMeshLayerRenderer( case Qgis::MeshElevationMode::FixedRangePerGroup: { - // find the top-most group which matches the map range - int currentMatchingGroup = -1; - QgsDoubleRange currentMatchingRange; + // find the top-most group which matches the map range and parent group + int currentMatchingVectorGroup = -1; + int currentMatchingScalarGroup = -1; + QgsDoubleRange currentMatchingVectorRange; + QgsDoubleRange currentMatchingScalarRange; + const QMap rangePerGroup = elevProp->fixedRangePerGroup(); + + const int activeVectorDatasetGroup = mRendererSettings.activeVectorDatasetGroup(); + const int activeScalarDatasetGroup = mRendererSettings.activeScalarDatasetGroup(); + for ( auto it = rangePerGroup.constBegin(); it != rangePerGroup.constEnd(); ++it ) { if ( it.value().overlaps( context.zRange() ) ) { - if ( currentMatchingRange.isInfinite() - || ( it.value().includeUpper() && it.value().upper() >= currentMatchingRange.upper() ) - || ( !currentMatchingRange.includeUpper() && it.value().upper() >= currentMatchingRange.upper() ) ) + const bool matchesVectorParentGroup = QgsMeshLayerUtils::haveSameParentGroup( layer, QgsMeshDatasetIndex( activeVectorDatasetGroup ), QgsMeshDatasetIndex( it.key() ) ); + const bool matchesScalarParentGroup = QgsMeshLayerUtils::haveSameParentGroup( layer, QgsMeshDatasetIndex( activeScalarDatasetGroup ), QgsMeshDatasetIndex( it.key() ) ); + + if ( matchesVectorParentGroup && ( + currentMatchingVectorRange.isInfinite() + || ( it.value().includeUpper() && it.value().upper() >= currentMatchingVectorRange.upper() ) + || ( !currentMatchingVectorRange.includeUpper() && it.value().upper() >= currentMatchingVectorRange.upper() ) ) ) { - currentMatchingGroup = it.key(); - currentMatchingRange = it.value(); + currentMatchingVectorGroup = it.key(); + currentMatchingVectorRange = it.value(); + } + + if ( matchesScalarParentGroup && ( + currentMatchingScalarRange.isInfinite() + || ( it.value().includeUpper() && it.value().upper() >= currentMatchingScalarRange.upper() ) + || ( !currentMatchingScalarRange.includeUpper() && it.value().upper() >= currentMatchingScalarRange.upper() ) ) ) + { + currentMatchingScalarGroup = it.key(); + currentMatchingScalarRange = it.value(); } } } - if ( currentMatchingGroup >= 0 ) - { - mRendererSettings.setActiveScalarDatasetGroup( currentMatchingGroup ); - mRendererSettings.setActiveVectorDatasetGroup( currentMatchingGroup ); - } + if ( currentMatchingVectorGroup >= 0 ) + mRendererSettings.setActiveVectorDatasetGroup( currentMatchingVectorGroup ); + if ( currentMatchingScalarGroup >= 0 ) + mRendererSettings.setActiveScalarDatasetGroup( currentMatchingScalarGroup ); } } } diff --git a/src/core/mesh/qgsmeshlayerutils.cpp b/src/core/mesh/qgsmeshlayerutils.cpp index e6c00b840f35..a5398f0abbce 100644 --- a/src/core/mesh/qgsmeshlayerutils.cpp +++ b/src/core/mesh/qgsmeshlayerutils.cpp @@ -18,6 +18,8 @@ #include #include #include +#include +#include #include "qgsmeshlayerutils.h" #include "qgsmeshtimesettings.h" @@ -702,4 +704,17 @@ QVector QgsMeshLayerUtils::calculateNormals( const QgsTriangularMesh return normals; } +bool QgsMeshLayerUtils::haveSameParentGroup( const QgsMeshLayer *layer, const QgsMeshDatasetIndex &index1, const QgsMeshDatasetIndex &index2 ) +{ + const QgsMeshDatasetGroupMetadata metadata1 = layer->datasetGroupMetadata( index1 ); + if ( metadata1.parentGroup().isEmpty() ) + return false; + + const QgsMeshDatasetGroupMetadata metadata2 = layer->datasetGroupMetadata( index2 ); + if ( metadata2.parentGroup().isEmpty() ) + return false; + + return metadata1.parentGroup().compare( metadata2.parentGroup(), Qt::CaseInsensitive ) == 0; +} + ///@endcond diff --git a/src/core/mesh/qgsmeshlayerutils.h b/src/core/mesh/qgsmeshlayerutils.h index 2d25837692b9..e15f182dd10b 100644 --- a/src/core/mesh/qgsmeshlayerutils.h +++ b/src/core/mesh/qgsmeshlayerutils.h @@ -369,6 +369,14 @@ class CORE_EXPORT QgsMeshLayerUtils const QgsTriangularMesh &triangularMesh, const QVector &verticalMagnitude, bool isRelative ); + + /** + * Returns TRUE if the datasets from \a layer at \a index1 and \a index2 share the same parent group. + * + * \since QGIS 3.38 + */ + static bool haveSameParentGroup( const QgsMeshLayer *layer, const QgsMeshDatasetIndex &index1, const QgsMeshDatasetIndex &index2 ); + }; ///@endcond From 74c824e70f5f42499f1ff178585dc8484e57f381 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Mon, 13 May 2024 11:02:27 +1000 Subject: [PATCH 3/8] Rename to parentQuantityName --- .../core/auto_generated/mesh/qgsmeshdataset.sip.in | 5 +++-- .../core/auto_generated/mesh/qgsmeshdataset.sip.in | 5 +++-- src/core/mesh/qgsmeshdataset.cpp | 2 +- src/core/mesh/qgsmeshdataset.h | 14 ++++++++++---- src/core/mesh/qgsmeshlayerrenderer.cpp | 4 ++-- src/core/mesh/qgsmeshlayerutils.cpp | 8 ++++---- src/core/mesh/qgsmeshlayerutils.h | 4 ++-- 7 files changed, 25 insertions(+), 17 deletions(-) diff --git a/python/PyQt6/core/auto_generated/mesh/qgsmeshdataset.sip.in b/python/PyQt6/core/auto_generated/mesh/qgsmeshdataset.sip.in index f25cc96e3302..4bb5e1542275 100644 --- a/python/PyQt6/core/auto_generated/mesh/qgsmeshdataset.sip.in +++ b/python/PyQt6/core/auto_generated/mesh/qgsmeshdataset.sip.in @@ -12,6 +12,7 @@ + class QgsMeshDatasetIndex { %Docstring(signature="appended") @@ -433,9 +434,9 @@ Constructs a valid metadata object Returns name of the dataset group %End - QString parentGroup() const; + QString parentQuantityName() const; %Docstring -Returns the name of the dataset's parent group. +Returns the name of the dataset's parent quantity, if available. .. versionadded:: 3.38 %End diff --git a/python/core/auto_generated/mesh/qgsmeshdataset.sip.in b/python/core/auto_generated/mesh/qgsmeshdataset.sip.in index 7ad800e693e3..438f0fbf903d 100644 --- a/python/core/auto_generated/mesh/qgsmeshdataset.sip.in +++ b/python/core/auto_generated/mesh/qgsmeshdataset.sip.in @@ -12,6 +12,7 @@ + class QgsMeshDatasetIndex { %Docstring(signature="appended") @@ -433,9 +434,9 @@ Constructs a valid metadata object Returns name of the dataset group %End - QString parentGroup() const; + QString parentQuantityName() const; %Docstring -Returns the name of the dataset's parent group. +Returns the name of the dataset's parent quantity, if available. .. versionadded:: 3.38 %End diff --git a/src/core/mesh/qgsmeshdataset.cpp b/src/core/mesh/qgsmeshdataset.cpp index ed2667df8f77..58ee1aff1d18 100644 --- a/src/core/mesh/qgsmeshdataset.cpp +++ b/src/core/mesh/qgsmeshdataset.cpp @@ -178,7 +178,7 @@ QString QgsMeshDatasetGroupMetadata::name() const return mName; } -QString QgsMeshDatasetGroupMetadata::parentGroup() const +QString QgsMeshDatasetGroupMetadata::parentQuantityName() const { return mParentGroupName; } diff --git a/src/core/mesh/qgsmeshdataset.h b/src/core/mesh/qgsmeshdataset.h index 6218fb4cb7c5..750a88cb691a 100644 --- a/src/core/mesh/qgsmeshdataset.h +++ b/src/core/mesh/qgsmeshdataset.h @@ -22,17 +22,21 @@ #include #include #include +#include +#include #include +#include #include "qgis_core.h" #include "qgis_sip.h" -#include "qgspoint.h" -#include "qgsdataprovider.h" class QgsMeshLayer; class QgsMeshDatasetGroup; class QgsRectangle; +class QDomDocument; +class QgsReadWriteContext; + struct QgsMesh; /** @@ -398,11 +402,13 @@ class CORE_EXPORT QgsMeshDatasetGroupMetadata QString name() const; /** - * Returns the name of the dataset's parent group. + * Returns the name of the dataset's parent quantity, if available. + * + * * * \since QGIS 3.38 */ - QString parentGroup() const; + QString parentQuantityName() const; /** * Returns the uri of the source diff --git a/src/core/mesh/qgsmeshlayerrenderer.cpp b/src/core/mesh/qgsmeshlayerrenderer.cpp index d494a133c5d5..d6003f34e5b6 100644 --- a/src/core/mesh/qgsmeshlayerrenderer.cpp +++ b/src/core/mesh/qgsmeshlayerrenderer.cpp @@ -114,8 +114,8 @@ QgsMeshLayerRenderer::QgsMeshLayerRenderer( { if ( it.value().overlaps( context.zRange() ) ) { - const bool matchesVectorParentGroup = QgsMeshLayerUtils::haveSameParentGroup( layer, QgsMeshDatasetIndex( activeVectorDatasetGroup ), QgsMeshDatasetIndex( it.key() ) ); - const bool matchesScalarParentGroup = QgsMeshLayerUtils::haveSameParentGroup( layer, QgsMeshDatasetIndex( activeScalarDatasetGroup ), QgsMeshDatasetIndex( it.key() ) ); + const bool matchesVectorParentGroup = QgsMeshLayerUtils::haveSameParentQuantity( layer, QgsMeshDatasetIndex( activeVectorDatasetGroup ), QgsMeshDatasetIndex( it.key() ) ); + const bool matchesScalarParentGroup = QgsMeshLayerUtils::haveSameParentQuantity( layer, QgsMeshDatasetIndex( activeScalarDatasetGroup ), QgsMeshDatasetIndex( it.key() ) ); if ( matchesVectorParentGroup && ( currentMatchingVectorRange.isInfinite() diff --git a/src/core/mesh/qgsmeshlayerutils.cpp b/src/core/mesh/qgsmeshlayerutils.cpp index a5398f0abbce..b68f5bcfe9cd 100644 --- a/src/core/mesh/qgsmeshlayerutils.cpp +++ b/src/core/mesh/qgsmeshlayerutils.cpp @@ -704,17 +704,17 @@ QVector QgsMeshLayerUtils::calculateNormals( const QgsTriangularMesh return normals; } -bool QgsMeshLayerUtils::haveSameParentGroup( const QgsMeshLayer *layer, const QgsMeshDatasetIndex &index1, const QgsMeshDatasetIndex &index2 ) +bool QgsMeshLayerUtils::haveSameParentQuantity( const QgsMeshLayer *layer, const QgsMeshDatasetIndex &index1, const QgsMeshDatasetIndex &index2 ) { const QgsMeshDatasetGroupMetadata metadata1 = layer->datasetGroupMetadata( index1 ); - if ( metadata1.parentGroup().isEmpty() ) + if ( metadata1.parentQuantityName().isEmpty() ) return false; const QgsMeshDatasetGroupMetadata metadata2 = layer->datasetGroupMetadata( index2 ); - if ( metadata2.parentGroup().isEmpty() ) + if ( metadata2.parentQuantityName().isEmpty() ) return false; - return metadata1.parentGroup().compare( metadata2.parentGroup(), Qt::CaseInsensitive ) == 0; + return metadata1.parentQuantityName().compare( metadata2.parentQuantityName(), Qt::CaseInsensitive ) == 0; } ///@endcond diff --git a/src/core/mesh/qgsmeshlayerutils.h b/src/core/mesh/qgsmeshlayerutils.h index e15f182dd10b..da7c985d75fa 100644 --- a/src/core/mesh/qgsmeshlayerutils.h +++ b/src/core/mesh/qgsmeshlayerutils.h @@ -371,11 +371,11 @@ class CORE_EXPORT QgsMeshLayerUtils bool isRelative ); /** - * Returns TRUE if the datasets from \a layer at \a index1 and \a index2 share the same parent group. + * Returns TRUE if the datasets from \a layer at \a index1 and \a index2 share the same parent quantity. * * \since QGIS 3.38 */ - static bool haveSameParentGroup( const QgsMeshLayer *layer, const QgsMeshDatasetIndex &index1, const QgsMeshDatasetIndex &index2 ); + static bool haveSameParentQuantity( const QgsMeshLayer *layer, const QgsMeshDatasetIndex &index1, const QgsMeshDatasetIndex &index2 ); }; From 0e6c28f67dd945a40ba9c39e2ba90898acda3b90 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Mon, 13 May 2024 11:03:44 +1000 Subject: [PATCH 4/8] Improve documentation --- python/PyQt6/core/auto_generated/mesh/qgsmeshdataset.sip.in | 3 +++ python/core/auto_generated/mesh/qgsmeshdataset.sip.in | 3 +++ src/core/mesh/qgsmeshdataset.h | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/python/PyQt6/core/auto_generated/mesh/qgsmeshdataset.sip.in b/python/PyQt6/core/auto_generated/mesh/qgsmeshdataset.sip.in index 4bb5e1542275..a0725f4ddc7d 100644 --- a/python/PyQt6/core/auto_generated/mesh/qgsmeshdataset.sip.in +++ b/python/PyQt6/core/auto_generated/mesh/qgsmeshdataset.sip.in @@ -438,6 +438,9 @@ Returns name of the dataset group %Docstring Returns the name of the dataset's parent quantity, if available. +The quantity can be used to collect dataset groups which represent a single quantity +but at different values (e.g. groups which represent different elevations). + .. versionadded:: 3.38 %End diff --git a/python/core/auto_generated/mesh/qgsmeshdataset.sip.in b/python/core/auto_generated/mesh/qgsmeshdataset.sip.in index 438f0fbf903d..fae0e459b1c2 100644 --- a/python/core/auto_generated/mesh/qgsmeshdataset.sip.in +++ b/python/core/auto_generated/mesh/qgsmeshdataset.sip.in @@ -438,6 +438,9 @@ Returns name of the dataset group %Docstring Returns the name of the dataset's parent quantity, if available. +The quantity can be used to collect dataset groups which represent a single quantity +but at different values (e.g. groups which represent different elevations). + .. versionadded:: 3.38 %End diff --git a/src/core/mesh/qgsmeshdataset.h b/src/core/mesh/qgsmeshdataset.h index 750a88cb691a..727c2580de66 100644 --- a/src/core/mesh/qgsmeshdataset.h +++ b/src/core/mesh/qgsmeshdataset.h @@ -404,7 +404,8 @@ class CORE_EXPORT QgsMeshDatasetGroupMetadata /** * Returns the name of the dataset's parent quantity, if available. * - * + * The quantity can be used to collect dataset groups which represent a single quantity + * but at different values (e.g. groups which represent different elevations). * * \since QGIS 3.38 */ From 2495ed03f5fa201be52fcd26222b24afe81715cd Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Mon, 13 May 2024 11:06:22 +1000 Subject: [PATCH 5/8] Add note, rename more members for consistency --- src/core/mesh/qgsmeshdataset.cpp | 13 +++++++------ src/core/mesh/qgsmeshdataset.h | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/core/mesh/qgsmeshdataset.cpp b/src/core/mesh/qgsmeshdataset.cpp index 58ee1aff1d18..9c6d977f6994 100644 --- a/src/core/mesh/qgsmeshdataset.cpp +++ b/src/core/mesh/qgsmeshdataset.cpp @@ -144,12 +144,13 @@ QgsMeshDatasetGroupMetadata::QgsMeshDatasetGroupMetadata( const QString &name, , mReferenceTime( referenceTime ) , mIsTemporal( isTemporal ) { - const thread_local QRegularExpression parentGroupNameRegex( QStringLiteral( "^(.*):.*?$" ) ); - - const QRegularExpressionMatch parentGroupMatch = parentGroupNameRegex.match( mName ); - if ( parentGroupMatch.hasMatch() ) + // this relies on the naming convention used by MDAL's NetCDF driver: _: + // If future MDAL releases expose quantities via a standard API then we can safely remove this and port to the new API. + const thread_local QRegularExpression parentQuantityRegex( QStringLiteral( "^(.*):.*?$" ) ); + const QRegularExpressionMatch parentQuantityMatch = parentQuantityRegex.match( mName ); + if ( parentQuantityMatch.hasMatch() ) { - mParentGroupName = parentGroupMatch.captured( 1 ); + mParentQuantityName = parentQuantityMatch.captured( 1 ); } } @@ -180,7 +181,7 @@ QString QgsMeshDatasetGroupMetadata::name() const QString QgsMeshDatasetGroupMetadata::parentQuantityName() const { - return mParentGroupName; + return mParentQuantityName; } QgsMeshDatasetGroupMetadata::DataType diff --git a/src/core/mesh/qgsmeshdataset.h b/src/core/mesh/qgsmeshdataset.h index 727c2580de66..426ac0f40cb9 100644 --- a/src/core/mesh/qgsmeshdataset.h +++ b/src/core/mesh/qgsmeshdataset.h @@ -471,7 +471,7 @@ class CORE_EXPORT QgsMeshDatasetGroupMetadata private: QString mName; - QString mParentGroupName; + QString mParentQuantityName; QString mUri; bool mIsScalar = false; DataType mDataType = DataType::DataOnFaces; From a303c5c1d70c758c19bb48777b7a07cd97f04338 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Mon, 13 May 2024 11:43:24 +1000 Subject: [PATCH 6/8] Add test for parentQuantityName --- python/testing/__init__.py | 13 ++++ tests/src/python/CMakeLists.txt | 1 + tests/src/python/test_qgsmeshlayer.py | 68 ++++++++++++++++++ tests/testdata/mesh/netcdf_parent_quantity.nc | Bin 0 -> 207339 bytes 4 files changed, 82 insertions(+) create mode 100644 tests/src/python/test_qgsmeshlayer.py create mode 100644 tests/testdata/mesh/netcdf_parent_quantity.nc diff --git a/python/testing/__init__.py b/python/testing/__init__.py index 800a7fda454a..f7608a27518f 100644 --- a/python/testing/__init__.py +++ b/python/testing/__init__.py @@ -305,6 +305,19 @@ def render_layout_check( return result + @staticmethod + def get_test_data_path(file_path: str) -> Path: + """ + Returns the full path to a file contained within the test data + directory. + """ + from utilities import unitTestDataPath + + return ( + Path(unitTestDataPath()) / + (file_path[1:] if file_path.startswith('/') else file_path) + ) + def assertLayersEqual(self, layer_expected, layer_result, **kwargs): """ :param layer_expected: The first layer to compare diff --git a/tests/src/python/CMakeLists.txt b/tests/src/python/CMakeLists.txt index 51f359d93116..ad77a8f5c02f 100644 --- a/tests/src/python/CMakeLists.txt +++ b/tests/src/python/CMakeLists.txt @@ -177,6 +177,7 @@ ADD_PYTHON_TEST(PyQgsMargins test_qgsmargins.py) ADD_PYTHON_TEST(PyQgsMarkerLineSymbolLayer test_qgsmarkerlinesymbollayer.py) ADD_PYTHON_TEST(PyQgsMatrix4x4 test_qgsmatrix4x4.py) ADD_PYTHON_TEST(PyQgsMergedFeatureRenderer test_qgsmergedfeaturerenderer.py) +ADD_PYTHON_TEST(PyQgsMeshLayer test_qgsmeshlayer.py) ADD_PYTHON_TEST(PyQgsMeshLayerElevationProperties test_qgsmeshlayerelevationproperties.py) ADD_PYTHON_TEST(PyQgsMeshLayerRenderer test_qgsmeshlayerrenderer.py) ADD_PYTHON_TEST(PyQgsMessageLog test_qgsmessagelog.py) diff --git a/tests/src/python/test_qgsmeshlayer.py b/tests/src/python/test_qgsmeshlayer.py new file mode 100644 index 000000000000..ac023360fddf --- /dev/null +++ b/tests/src/python/test_qgsmeshlayer.py @@ -0,0 +1,68 @@ +"""QGIS Unit tests for QgsMeshLayer + +.. note:: This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. +""" + +from qgis.core import ( + QgsMeshLayer, + QgsMeshDatasetIndex +) +import unittest +from qgis.testing import start_app, QgisTestCase + +start_app() + + +class TestQgsMeshLayer(QgisTestCase): + + def test_dataset_group_metadata(self): + """ + Test datasetGroupMetadata + """ + layer = QgsMeshLayer( + self.get_test_data_path('mesh/netcdf_parent_quantity.nc').as_posix(), + 'mesh', + 'mdal' + ) + self.assertTrue(layer.isValid()) + + self.assertEqual( + layer.datasetGroupMetadata(QgsMeshDatasetIndex(0)).name(), + 'air_temperature_height:10') + self.assertEqual( + layer.datasetGroupMetadata( + QgsMeshDatasetIndex(0)).parentQuantityName(), + 'air_temperature_height') + self.assertEqual( + layer.datasetGroupMetadata(QgsMeshDatasetIndex(1)).name(), + 'air_temperature_height:20') + self.assertEqual( + layer.datasetGroupMetadata( + QgsMeshDatasetIndex(1)).parentQuantityName(), + 'air_temperature_height') + self.assertEqual( + layer.datasetGroupMetadata(QgsMeshDatasetIndex(2)).name(), + 'air_temperature_height:30') + self.assertEqual( + layer.datasetGroupMetadata( + QgsMeshDatasetIndex(2)).parentQuantityName(), + 'air_temperature_height') + self.assertEqual( + layer.datasetGroupMetadata(QgsMeshDatasetIndex(3)).name(), + 'air_temperature_height:5') + self.assertEqual( + layer.datasetGroupMetadata( + QgsMeshDatasetIndex(3)).parentQuantityName(), + 'air_temperature_height') + self.assertFalse( + layer.datasetGroupMetadata(QgsMeshDatasetIndex(4)).name()) + self.assertFalse( + layer.datasetGroupMetadata( + QgsMeshDatasetIndex(4)).parentQuantityName()) + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/testdata/mesh/netcdf_parent_quantity.nc b/tests/testdata/mesh/netcdf_parent_quantity.nc new file mode 100644 index 0000000000000000000000000000000000000000..1d3a88195ea16673445a01524b8116d1dfd71ac5 GIT binary patch literal 207339 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 Date: Mon, 13 May 2024 11:49:05 +1000 Subject: [PATCH 7/8] Add test for haveSameParentQuantity --- tests/src/core/testqgsmeshlayer.cpp | 31 +++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/tests/src/core/testqgsmeshlayer.cpp b/tests/src/core/testqgsmeshlayer.cpp index 73c3b4786b25..5c6b80909e54 100644 --- a/tests/src/core/testqgsmeshlayer.cpp +++ b/tests/src/core/testqgsmeshlayer.cpp @@ -28,6 +28,7 @@ #include "qgstriangularmesh.h" #include "qgsexpression.h" #include "qgsmeshlayertemporalproperties.h" +#include "qgsmeshlayerutils.h" #include "qgsmeshdataprovidertemporalcapabilities.h" #include "qgsprovidermetadata.h" @@ -37,12 +38,14 @@ * \ingroup UnitTests * This is a unit test for a mesh layer */ -class TestQgsMeshLayer : public QObject +class TestQgsMeshLayer : public QgsTest { Q_OBJECT public: - TestQgsMeshLayer() = default; + TestQgsMeshLayer() + : QgsTest( QStringLiteral( "Mesh layer tests" ) ) + {} private: QString mDataDir; @@ -108,6 +111,8 @@ class TestQgsMeshLayer : public QObject void keepDatasetIndexConsistency(); void symbologyConsistencyWithName(); void updateTimePropertiesWhenReloading(); + + void testHaveSameParentQuantity(); }; QString TestQgsMeshLayer::readFile( const QString &fname ) const @@ -2339,5 +2344,27 @@ void TestQgsMeshLayer::updateTimePropertiesWhenReloading() QCOMPARE( timeExtent1, static_cast( layer->temporalProperties() )->timeExtent() ); } +void TestQgsMeshLayer::testHaveSameParentQuantity() +{ + QgsMeshLayer layer1( + testDataPath( "mesh/netcdf_parent_quantity.nc" ), + QStringLiteral( "mesh" ), + QStringLiteral( "mdal" ) ); + QVERIFY( layer1.isValid() ); + + QVERIFY( QgsMeshLayerUtils::haveSameParentQuantity( &layer1, QgsMeshDatasetIndex( 0 ), QgsMeshDatasetIndex( 1 ) ) ); + QVERIFY( QgsMeshLayerUtils::haveSameParentQuantity( &layer1, QgsMeshDatasetIndex( 0 ), QgsMeshDatasetIndex( 2 ) ) ); + QVERIFY( QgsMeshLayerUtils::haveSameParentQuantity( &layer1, QgsMeshDatasetIndex( 2 ), QgsMeshDatasetIndex( 3 ) ) ); + QVERIFY( !QgsMeshLayerUtils::haveSameParentQuantity( &layer1, QgsMeshDatasetIndex( 0 ), QgsMeshDatasetIndex( 4 ) ) ); + + QgsMeshLayer layer2( + testDataPath( "mesh/mesh_z_ws_d.nc" ), + QStringLiteral( "mesh" ), + QStringLiteral( "mdal" ) ); + QVERIFY( layer2.isValid() ); + + QVERIFY( !QgsMeshLayerUtils::haveSameParentQuantity( &layer2, QgsMeshDatasetIndex( 0 ), QgsMeshDatasetIndex( 1 ) ) ); +} + QGSTEST_MAIN( TestQgsMeshLayer ) #include "testqgsmeshlayer.moc" From 4afec6a1c4c9c4cfccab4aa36f0517d2eecfbc5f Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 14 May 2024 08:19:20 +1000 Subject: [PATCH 8/8] Port test to standard render checker methods --- tests/src/core/testqgsmeshlayerrenderer.cpp | 253 ++++++++++++++------ 1 file changed, 185 insertions(+), 68 deletions(-) diff --git a/tests/src/core/testqgsmeshlayerrenderer.cpp b/tests/src/core/testqgsmeshlayerrenderer.cpp index 47e229cc770e..8c3cb3692d40 100644 --- a/tests/src/core/testqgsmeshlayerrenderer.cpp +++ b/tests/src/core/testqgsmeshlayerrenderer.cpp @@ -35,9 +35,6 @@ #include "qgsmesh3daveraging.h" #include "qgsmaplayertemporalproperties.h" -//qgis test includes -#include "qgsrenderchecker.h" - /** * \ingroup UnitTests * This is a unit test for the different renderers for mesh layers. @@ -47,7 +44,7 @@ class TestQgsMeshRenderer : public QgsTest Q_OBJECT public: - TestQgsMeshRenderer() : QgsTest( QStringLiteral( "Mesh Layer Rendering Tests" ) ) {} + TestQgsMeshRenderer() : QgsTest( QStringLiteral( "Mesh Layer Rendering Tests" ), QStringLiteral( "mesh" ) ) {} private: QString mDataDir; @@ -61,10 +58,8 @@ class TestQgsMeshRenderer : public QgsTest void initTestCase();// will be called before the first testfunction is executed. void cleanupTestCase();// will be called after the last testfunction was executed. void init(); // will be called before each testfunction is executed. - bool imageCheck( const QString &testType, QgsMeshLayer *layer, double rotation = 0.0 ); QString readFile( const QString &fname ) const; - void test_native_mesh_rendering(); void test_native_mesh_renderingWithClipping(); void test_triangular_mesh_rendering(); @@ -215,23 +210,6 @@ QString TestQgsMeshRenderer::readFile( const QString &fname ) const return uri; } -bool TestQgsMeshRenderer::imageCheck( const QString &testType, QgsMeshLayer *layer, double rotation ) -{ - mMapSettings->setDestinationCrs( layer->crs() ); - mMapSettings->setExtent( layer->extent() ); - mMapSettings->setRotation( rotation ); - mMapSettings->setOutputDpi( 96 ); - - QgsRenderChecker myChecker; - myChecker.setControlPathPrefix( QStringLiteral( "mesh" ) ); - myChecker.setControlName( "expected_" + testType ); - myChecker.setMapSettings( *mMapSettings ); - myChecker.setColorTolerance( 15 ); - const bool myResultFlag = myChecker.runTest( testType, 0 ); - mReport += myChecker.report(); - return myResultFlag; -} - void TestQgsMeshRenderer::test_native_mesh_rendering() { QgsMeshRendererSettings rendererSettings = mMemoryLayer->rendererSettings(); @@ -240,8 +218,16 @@ void TestQgsMeshRenderer::test_native_mesh_rendering() settings.setLineWidth( 1. ); rendererSettings.setNativeMeshSettings( settings ); mMemoryLayer->setRendererSettings( rendererSettings ); - QVERIFY( imageCheck( "quad_and_triangle_native_mesh", mMemoryLayer ) ); - QVERIFY( imageCheck( "quad_and_triangle_native_mesh_rotated_45", mMemoryLayer, 45.0 ) ); + + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_native_mesh", "quad_and_triangle_native_mesh", *mMapSettings, 0, 15 ); + + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_native_mesh_rotated_45", "quad_and_triangle_native_mesh_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_native_mesh_renderingWithClipping() @@ -260,10 +246,12 @@ void TestQgsMeshRenderer::test_native_mesh_renderingWithClipping() mMapSettings->addClippingRegion( region ); mMapSettings->addClippingRegion( region2 ); - const bool res = imageCheck( "painterclip_region", mMemoryLayer ); - + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "painterclip_region", "painterclip_region", *mMapSettings, 0, 15 ); mMapSettings->setClippingRegions( QList< QgsMapClippingRegion >() ); - QVERIFY( res ); } void TestQgsMeshRenderer::test_triangular_mesh_rendering() @@ -275,8 +263,16 @@ void TestQgsMeshRenderer::test_triangular_mesh_rendering() settings.setLineWidth( 0.26 ); rendererSettings.setTriangularMeshSettings( settings ); mMemoryLayer->setRendererSettings( rendererSettings ); - QVERIFY( imageCheck( "quad_and_triangle_triangular_mesh", mMemoryLayer ) ); - QVERIFY( imageCheck( "quad_and_triangle_triangular_mesh_rotated_45", mMemoryLayer, 45.0 ) ); + + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setRotation( 0 ); + mMapSettings->setOutputDpi( 96 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_triangular_mesh", "quad_and_triangle_triangular_mesh", *mMapSettings, 0, 15 ); + + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_triangular_mesh_rotated_45", "quad_and_triangle_triangular_mesh_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_edge_mesh_rendering() @@ -288,7 +284,12 @@ void TestQgsMeshRenderer::test_edge_mesh_rendering() settings.setLineWidth( 0.26 ); rendererSettings.setEdgeMeshSettings( settings ); mMemory1DLayer->setRendererSettings( rendererSettings ); - QVERIFY( imageCheck( "lines_edge_mesh", mMemory1DLayer ) ); + + mMapSettings->setDestinationCrs( mMemory1DLayer->crs() ); + mMapSettings->setExtent( mMemory1DLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "lines_edge_mesh", "lines_edge_mesh", *mMapSettings, 0, 15 ); } void TestQgsMeshRenderer::test_1d_vertex_scalar_dataset_rendering() @@ -308,8 +309,14 @@ void TestQgsMeshRenderer::test_1d_vertex_scalar_dataset_rendering() mMemory1DLayer->setRendererSettings( rendererSettings ); mMemory1DLayer->setStaticScalarDatasetIndex( ds ); - QVERIFY( imageCheck( "lines_vertex_scalar_dataset", mMemory1DLayer ) ); - QVERIFY( imageCheck( "lines_vertex_scalar_dataset_rotated_45", mMemory1DLayer, 45 ) ); + mMapSettings->setDestinationCrs( mMemory1DLayer->crs() ); + mMapSettings->setExtent( mMemory1DLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "lines_vertex_scalar_dataset", "lines_vertex_scalar_dataset", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "lines_vertex_scalar_dataset_rotated_45", "lines_vertex_scalar_dataset_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_1d_vertex_vector_dataset_rendering() @@ -327,8 +334,14 @@ void TestQgsMeshRenderer::test_1d_vertex_vector_dataset_rendering() mMemory1DLayer->setRendererSettings( rendererSettings ); mMemory1DLayer->setStaticVectorDatasetIndex( ds ); - QVERIFY( imageCheck( "lines_vertex_vector_dataset", mMemory1DLayer ) ); - QVERIFY( imageCheck( "lines_vertex_vector_dataset_rotated_45", mMemory1DLayer, 45 ) ); + mMapSettings->setDestinationCrs( mMemory1DLayer->crs() ); + mMapSettings->setExtent( mMemory1DLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "lines_vertex_vector_dataset", "lines_vertex_vector_dataset", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "lines_vertex_vector_dataset_rotated_45", "lines_vertex_vector_dataset_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_1d_edge_scalar_dataset_rendering() @@ -348,8 +361,14 @@ void TestQgsMeshRenderer::test_1d_edge_scalar_dataset_rendering() mMemory1DLayer->setRendererSettings( rendererSettings ); mMemory1DLayer->setStaticScalarDatasetIndex( ds ); - QVERIFY( imageCheck( "lines_edge_scalar_dataset", mMemory1DLayer ) ); - QVERIFY( imageCheck( "lines_edge_scalar_dataset_rotated_45", mMemory1DLayer, 45 ) ); + mMapSettings->setDestinationCrs( mMemory1DLayer->crs() ); + mMapSettings->setExtent( mMemory1DLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "lines_edge_scalar_dataset", "lines_edge_scalar_dataset", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "lines_edge_scalar_dataset_rotated_45", "lines_edge_scalar_dataset_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_1d_edge_vector_dataset_rendering() @@ -362,8 +381,14 @@ void TestQgsMeshRenderer::test_1d_edge_vector_dataset_rendering() mMemory1DLayer->setRendererSettings( rendererSettings ); mMemory1DLayer->setStaticVectorDatasetIndex( ds ); - QVERIFY( imageCheck( "lines_edge_vector_dataset", mMemory1DLayer ) ); - QVERIFY( imageCheck( "lines_edge_vector_dataset_rotated_45", mMemory1DLayer, 45 ) ); + mMapSettings->setDestinationCrs( mMemory1DLayer->crs() ); + mMapSettings->setExtent( mMemory1DLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "lines_edge_vector_dataset", "lines_edge_vector_dataset", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "lines_edge_vector_dataset_rotated_45", "lines_edge_vector_dataset_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_vertex_scalar_dataset_rendering() @@ -376,8 +401,14 @@ void TestQgsMeshRenderer::test_vertex_scalar_dataset_rendering() mMemoryLayer->setRendererSettings( rendererSettings ); mMemoryLayer->setStaticScalarDatasetIndex( ds ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_scalar_dataset", mMemoryLayer ) ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_scalar_dataset_rotated_45", mMemoryLayer, 45.0 ) ); + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_vertex_scalar_dataset", "quad_and_triangle_vertex_scalar_dataset", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_vertex_scalar_dataset_rotated_45", "quad_and_triangle_vertex_scalar_dataset_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_vertex_vector_dataset_rendering() @@ -395,8 +426,14 @@ void TestQgsMeshRenderer::test_vertex_vector_dataset_rendering() mMemoryLayer->setRendererSettings( rendererSettings ); mMemoryLayer->setStaticVectorDatasetIndex( ds ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_vector_dataset", mMemoryLayer ) ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_vector_dataset_rotated_45", mMemoryLayer, 45.0 ) ); + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_vertex_vector_dataset", "quad_and_triangle_vertex_vector_dataset", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_vertex_vector_dataset_rotated_45", "quad_and_triangle_vertex_vector_dataset_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_vertex_vector_dataset_colorRamp_rendering() @@ -415,7 +452,11 @@ void TestQgsMeshRenderer::test_vertex_vector_dataset_colorRamp_rendering() rendererSettings.setVectorSettings( ds.group(), settings ); mMemoryLayer->setRendererSettings( rendererSettings ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_vector_dataset_colorRamp", mMemoryLayer ) ); + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_vertex_vector_dataset_colorRamp", "quad_and_triangle_vertex_vector_dataset_colorRamp", *mMapSettings, 0, 15 ); } void TestQgsMeshRenderer::test_face_scalar_dataset_rendering() @@ -428,8 +469,14 @@ void TestQgsMeshRenderer::test_face_scalar_dataset_rendering() mMemoryLayer->setRendererSettings( rendererSettings ); mMemoryLayer->setStaticScalarDatasetIndex( ds ); - QVERIFY( imageCheck( "quad_and_triangle_face_scalar_dataset", mMemoryLayer ) ); - QVERIFY( imageCheck( "quad_and_triangle_face_scalar_dataset_rotated_45", mMemoryLayer, 45.0 ) ); + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_face_scalar_dataset", "quad_and_triangle_face_scalar_dataset", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_face_scalar_dataset_rotated_45", "quad_and_triangle_face_scalar_dataset_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_face_scalar_dataset_interpolated_neighbour_average_rendering() @@ -445,10 +492,13 @@ void TestQgsMeshRenderer::test_face_scalar_dataset_interpolated_neighbour_averag mMemoryLayer->setRendererSettings( rendererSettings ); mMemoryLayer->setStaticScalarDatasetIndex( ds ); - QVERIFY( imageCheck( "quad_and_triangle_face_scalar_interpolated_neighbour_average_dataset", mMemoryLayer ) ); + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_face_scalar_interpolated_neighbour_average_dataset", "quad_and_triangle_face_scalar_interpolated_neighbour_average_dataset", *mMapSettings, 0, 15 ); } - void TestQgsMeshRenderer::test_face_vector_dataset_rendering() { const QgsMeshDatasetIndex ds( 3, 0 ); @@ -459,8 +509,14 @@ void TestQgsMeshRenderer::test_face_vector_dataset_rendering() mMemoryLayer->setRendererSettings( rendererSettings ); mMemoryLayer->setStaticVectorDatasetIndex( ds ); - QVERIFY( imageCheck( "quad_and_triangle_face_vector_dataset", mMemoryLayer ) ); - QVERIFY( imageCheck( "quad_and_triangle_face_vector_dataset_rotated_45", mMemoryLayer, 45.0 ) ); + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_face_vector_dataset", "quad_and_triangle_face_vector_dataset", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_face_vector_dataset_rotated_45", "quad_and_triangle_face_vector_dataset_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_vertex_scalar_dataset_with_inactive_face_rendering() @@ -473,7 +529,11 @@ void TestQgsMeshRenderer::test_vertex_scalar_dataset_with_inactive_face_renderin mMdalLayer->setRendererSettings( rendererSettings ); mMdalLayer->setStaticScalarDatasetIndex( ds ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_scalar_dataset_with_inactive_face", mMdalLayer ) ); + mMapSettings->setDestinationCrs( mMdalLayer->crs() ); + mMapSettings->setExtent( mMdalLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_vertex_scalar_dataset_with_inactive_face", "quad_and_triangle_vertex_scalar_dataset_with_inactive_face", *mMapSettings, 0, 15 ); } void TestQgsMeshRenderer::test_vertex_vector_on_user_grid_wind_barbs() @@ -500,8 +560,14 @@ void TestQgsMeshRenderer::test_vertex_vector_on_user_grid_wind_barbs() mMdalLayer->setRendererSettings( rendererSettings ); mMdalLayer->setStaticVectorDatasetIndex( ds ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_vector_user_grid_dataset_wind_barbs", mMemoryLayer ) ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_vector_user_grid_dataset_wind_barbs_rotated_45", mMemoryLayer, 45.0 ) ); + mMapSettings->setDestinationCrs( mMdalLayer->crs() ); + mMapSettings->setExtent( mMdalLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_vertex_vector_user_grid_dataset_wind_barbs", "quad_and_triangle_vertex_vector_user_grid_dataset_wind_barbs", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_vertex_vector_user_grid_dataset_wind_barbs_rotated_45", "quad_and_triangle_vertex_vector_user_grid_dataset_wind_barbs_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_face_vector_on_user_grid() @@ -521,8 +587,14 @@ void TestQgsMeshRenderer::test_face_vector_on_user_grid() mMemoryLayer->setRendererSettings( rendererSettings ); mMemoryLayer->setStaticVectorDatasetIndex( ds ); - QVERIFY( imageCheck( "quad_and_triangle_face_vector_user_grid_dataset", mMemoryLayer ) ); - QVERIFY( imageCheck( "quad_and_triangle_face_vector_user_grid_dataset_rotated_45", mMemoryLayer, 45.0 ) ); + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_face_vector_user_grid_dataset", "quad_and_triangle_face_vector_user_grid_dataset", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_face_vector_user_grid_dataset_rotated_45", "quad_and_triangle_face_vector_user_grid_dataset_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_face_vector_on_user_grid_streamlines() @@ -542,8 +614,14 @@ void TestQgsMeshRenderer::test_face_vector_on_user_grid_streamlines() mMemoryLayer->setRendererSettings( rendererSettings ); mMemoryLayer->setStaticVectorDatasetIndex( ds ); - QVERIFY( imageCheck( "quad_and_triangle_face_vector_user_grid_dataset_streamlines", mMemoryLayer ) ); - QVERIFY( imageCheck( "quad_and_triangle_face_vector_user_grid_dataset_streamlines_rotated_45", mMemoryLayer, 45.0 ) ); + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_face_vector_user_grid_dataset_streamlines", "quad_and_triangle_face_vector_user_grid_dataset_streamlines", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_face_vector_user_grid_dataset_streamlines_rotated_45", "quad_and_triangle_face_vector_user_grid_dataset_streamlines_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_vertex_vector_on_user_grid() @@ -564,8 +642,14 @@ void TestQgsMeshRenderer::test_vertex_vector_on_user_grid() mMemoryLayer->setRendererSettings( rendererSettings ); mMemoryLayer->setStaticVectorDatasetIndex( ds ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_vector_user_grid_dataset", mMemoryLayer ) ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_vector_user_grid_dataset_rotated_45", mMemoryLayer, 45.0 ) ); + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_vertex_vector_user_grid_dataset", "quad_and_triangle_vertex_vector_user_grid_dataset", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_vertex_vector_user_grid_dataset_rotated_45", "quad_and_triangle_vertex_vector_user_grid_dataset_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_vertex_vector_on_user_grid_streamlines() @@ -586,8 +670,14 @@ void TestQgsMeshRenderer::test_vertex_vector_on_user_grid_streamlines() mMemoryLayer->setRendererSettings( rendererSettings ); mMemoryLayer->setStaticVectorDatasetIndex( ds ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_vector_user_grid_dataset_streamlines", mMemoryLayer ) ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_vector_user_grid_dataset_streamlines_rotated_45", mMemoryLayer, 45.0 ) ); + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_vertex_vector_user_grid_dataset_streamlines", "quad_and_triangle_vertex_vector_user_grid_dataset_streamlines", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_vertex_vector_user_grid_dataset_streamlines_rotated_45", "quad_and_triangle_vertex_vector_user_grid_dataset_streamlines_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_vertex_vector_on_user_grid_streamlines_colorRamp() @@ -608,7 +698,11 @@ void TestQgsMeshRenderer::test_vertex_vector_on_user_grid_streamlines_colorRamp( mMemoryLayer->setRendererSettings( rendererSettings ); mMemoryLayer->setStaticVectorDatasetIndex( ds ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_vector_user_grid_dataset_streamlines_colorRamp", mMemoryLayer ) ); + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_vertex_vector_user_grid_dataset_streamlines_colorRamp", "quad_and_triangle_vertex_vector_user_grid_dataset_streamlines_colorRamp", *mMapSettings, 0, 15 ); } void TestQgsMeshRenderer::test_vertex_vector_traces() @@ -635,8 +729,14 @@ void TestQgsMeshRenderer::test_vertex_vector_traces() mMemoryLayer->setRendererSettings( rendererSettings ); mMemoryLayer->setStaticVectorDatasetIndex( ds ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_vector_traces", mMemoryLayer ) ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_vector_traces_rotated_45", mMemoryLayer, 45.0 ) ); + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "lines_edge_quad_and_triangle_vertex_vector_traces", "quad_and_triangle_vertex_vector_traces", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 45 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_vertex_vector_traces_rotated_45", "quad_and_triangle_vertex_vector_traces_rotated_45", *mMapSettings, 0, 15 ); + mMapSettings->setRotation( 0 ); } void TestQgsMeshRenderer::test_vertex_vector_traces_colorRamp() @@ -663,7 +763,11 @@ void TestQgsMeshRenderer::test_vertex_vector_traces_colorRamp() mMemoryLayer->setRendererSettings( rendererSettings ); mMemoryLayer->setStaticVectorDatasetIndex( ds ); - QVERIFY( imageCheck( "quad_and_triangle_vertex_vector_traces_colorRamp", mMemoryLayer ) ); + mMapSettings->setDestinationCrs( mMemoryLayer->crs() ); + mMapSettings->setExtent( mMemoryLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "quad_and_triangle_vertex_vector_traces_colorRamp", "quad_and_triangle_vertex_vector_traces_colorRamp", *mMapSettings, 0, 15 ); } void TestQgsMeshRenderer::test_signals() @@ -716,7 +820,11 @@ void TestQgsMeshRenderer::test_stacked_3d_mesh_single_level_averaging() mMdal3DLayer->setRendererSettings( rendererSettings ); mMdal3DLayer->setStaticVectorDatasetIndex( ds ); - QVERIFY( imageCheck( "stacked_3d_mesh_single_level_averaging", mMdal3DLayer ) ); + mMapSettings->setDestinationCrs( mMdal3DLayer->crs() ); + mMapSettings->setExtent( mMdal3DLayer->extent() ); + mMapSettings->setRotation( 0 ); + mMapSettings->setOutputDpi( 96 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "stacked_3d_mesh_single_level_averaging", "stacked_3d_mesh_single_level_averaging", *mMapSettings, 0, 15 ); } void TestQgsMeshRenderer::test_simplified_triangular_mesh_rendering() @@ -733,7 +841,12 @@ void TestQgsMeshRenderer::test_simplified_triangular_mesh_rendering() mMdal3DLayer->setRendererSettings( rendererSettings ); mMdal3DLayer->setMeshSimplificationSettings( simplificatationSettings ); - QVERIFY( imageCheck( "simplified_triangular_mesh", mMdal3DLayer ) ); + + mMapSettings->setDestinationCrs( mMdal3DLayer->crs() ); + mMapSettings->setExtent( mMdal3DLayer->extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "simplified_triangular_mesh", "simplified_triangular_mesh", *mMapSettings, 0, 15 ); } void TestQgsMeshRenderer::test_classified_values() @@ -747,7 +860,11 @@ void TestQgsMeshRenderer::test_classified_values() classifiedMesh.temporalProperties()->setIsActive( false ); classifiedMesh.setStaticScalarDatasetIndex( QgsMeshDatasetIndex( 3, 4 ) ); - QVERIFY( imageCheck( "classified_values", &classifiedMesh ) ); + mMapSettings->setDestinationCrs( classifiedMesh.crs() ); + mMapSettings->setExtent( classifiedMesh.extent() ); + mMapSettings->setOutputDpi( 96 ); + mMapSettings->setRotation( 0 ); + QGSVERIFYRENDERMAPSETTINGSCHECK( "classified_values", "classified_values", *mMapSettings, 0, 15 ); } QGSTEST_MAIN( TestQgsMeshRenderer )