From cbe6877e50b69370170bea4057bb8d5baf42946e Mon Sep 17 00:00:00 2001 From: Eylon Malin Date: Thu, 21 Nov 2019 12:01:58 +0200 Subject: [PATCH] identify macro services without instantiation type in BE by feature flag Issue-ID: VID-705 Change-Id: Ia618f91133cdecbd35eac4346496a6ff38a3753e Signed-off-by: Eylon Malin --- features.properties.md | 6 +- .../onap/vid/asdc/parser/VidNotionsBuilder.java | 57 ++++++---- .../java/org/onap/vid/properties/Features.java | 1 + .../vid/asdc/parser/VidNotionsBuilderTest.java | 124 ++++++++++++++++----- .../java/vid/automation/test/infra/Features.java | 1 + .../vid/automation/test/test/BrowseASDCTest.java | 9 +- .../sanity/get_csar_zip_file.json | 10 -- .../src/test/java/org/onap/vid/api/SdcApiTest.java | 14 ++- .../csar15782222_invariantUUIDMacro.zip | Bin 27791 -> 38626 bytes 9 files changed, 156 insertions(+), 66 deletions(-) delete mode 100644 vid-automation/src/main/resources/registration_to_simulator/sanity/get_csar_zip_file.json diff --git a/features.properties.md b/features.properties.md index 1f9feccf7..45d5922c7 100644 --- a/features.properties.md +++ b/features.properties.md @@ -183,4 +183,8 @@ Any a-la-carte new service deployment will be open in modern UI, besides excluded services : Port mirroring, VLAN Tagging * FLAG_2002_VFM_UPGRADE_ADDITIONAL_OPTIONS - When flag is true the new popup will be opened with additional options to perform on VFM. \ No newline at end of file + When flag is true the new popup will be opened with additional options to perform on VFM. + +* FLAG_2002_IDENTIFY_INVARIANT_MACRO_UUID_BY_BACKEND, + When flag is true, VID use macro_services_by_invariant_uuid.json file to identify if csar without instantiation type is macro service. + Otherwise, MACRO_SERVICES list in vidConfiguration.js is used to identify if it's a macro service (in ng1 code) diff --git a/vid-app-common/src/main/java/org/onap/vid/asdc/parser/VidNotionsBuilder.java b/vid-app-common/src/main/java/org/onap/vid/asdc/parser/VidNotionsBuilder.java index 3f18a5ace..760eb4251 100644 --- a/vid-app-common/src/main/java/org/onap/vid/asdc/parser/VidNotionsBuilder.java +++ b/vid-app-common/src/main/java/org/onap/vid/asdc/parser/VidNotionsBuilder.java @@ -24,6 +24,7 @@ import static java.util.stream.Collectors.toSet; import static org.apache.commons.lang3.StringUtils.equalsAnyIgnoreCase; import static org.apache.commons.lang3.StringUtils.equalsIgnoreCase; import static org.apache.commons.lang3.StringUtils.isEmpty; +import static org.hibernate.annotations.common.util.StringHelper.isNotEmpty; import static org.onap.vid.utils.KotlinUtilsKt.JACKSON_OBJECT_MAPPER; import com.google.common.collect.ImmutableMap; @@ -42,6 +43,7 @@ import org.onap.sdc.toscaparser.api.elements.Metadata; import org.onap.vid.exceptions.GenericUncheckedException; import org.onap.vid.model.ServiceModel; import org.onap.vid.model.VidNotions; +import org.onap.vid.model.VidNotions.InstantiationType; import org.onap.vid.model.VidNotions.InstantiationUI; import org.onap.vid.model.VidNotions.ModelCategory; import org.onap.vid.properties.Features; @@ -78,11 +80,13 @@ public class VidNotionsBuilder { VidNotions buildVidNotions(ISdcCsarHelper csarHelper, ServiceModel serviceModel) { VidNotions.ModelCategory modelCategory = suggestModelCategory(csarHelper, serviceModel); + final InstantiationType instantiationType = suggestInstantiationType(serviceModel, modelCategory); return new VidNotions( - suggestInstantiationUI(csarHelper, serviceModel, modelCategory), + suggestInstantiationUI(csarHelper, serviceModel, modelCategory, instantiationType), modelCategory, - suggestViewEditUI(csarHelper, serviceModel, modelCategory), - suggestInstantiationType(serviceModel, modelCategory)); + suggestViewEditUI(csarHelper, serviceModel, modelCategory, instantiationType), + instantiationType + ); } private boolean isMacroTypeByModelCategory(VidNotions.ModelCategory modelCategory) { @@ -91,34 +95,47 @@ public class VidNotionsBuilder { return (featureOfMacroType!=null && featureManager.isActive(featureOfMacroType)); } - VidNotions.InstantiationType suggestInstantiationType(ServiceModel serviceModel, VidNotions.ModelCategory modelCategory) { + InstantiationType suggestInstantiationType(ServiceModel serviceModel, VidNotions.ModelCategory modelCategory) { if (isMacroTypeByModelCategory(modelCategory)) { - return VidNotions.InstantiationType.Macro; + return InstantiationType.Macro; } - if (serviceModel==null || serviceModel.getService()==null || isEmpty(serviceModel.getService().getInstantiationType())) { - return VidNotions.InstantiationType.ClientConfig; + if (serviceModel==null || serviceModel.getService()==null) { + return defaultInstantiationType(); } - String instantiationType = serviceModel.getService().getInstantiationType(); - if (instantiationType.equals(ToscaParserImpl2.Constants.MACRO)) { - return VidNotions.InstantiationType.Macro; + + if (StringUtils.equals(serviceModel.getService().getInstantiationType(), ToscaParserImpl2.Constants.MACRO)) { + return InstantiationType.Macro; } - if (instantiationType.equals(ToscaParserImpl2.Constants.A_LA_CARTE)) { - return VidNotions.InstantiationType.ALaCarte; + + if (StringUtils.equals(serviceModel.getService().getInstantiationType(), ToscaParserImpl2.Constants.A_LA_CARTE)) { + return InstantiationType.ALaCarte; } - return VidNotions.InstantiationType.ClientConfig; + if (!featureManager.isActive(Features.FLAG_2002_IDENTIFY_INVARIANT_MACRO_UUID_BY_BACKEND)) + return InstantiationType.ClientConfig; + + return isMacroByInvariantUuid(serviceModel.getService().getInvariantUuid()) ? + InstantiationType.Macro : + InstantiationType.ALaCarte; + } + + @NotNull + private InstantiationType defaultInstantiationType() { + return featureManager.isActive(Features.FLAG_2002_IDENTIFY_INVARIANT_MACRO_UUID_BY_BACKEND) ? + InstantiationType.ALaCarte : + InstantiationType.ClientConfig; } //UI route a-la-carte services to old UI only if InstantiationUI is LEGACY //So any other value for InstantiationUI other than LEGACY make UI to route //a-la-carte services to new UI - VidNotions.InstantiationUI suggestInstantiationUI(ISdcCsarHelper csarHelper, ServiceModel serviceModel, ModelCategory modelCategory) { + VidNotions.InstantiationUI suggestInstantiationUI(ISdcCsarHelper csarHelper, ServiceModel serviceModel, ModelCategory modelCategory, InstantiationType instantiationType) { if(featureManager.isActive(Features.FLAG_EXP_ANY_ALACARTE_NEW_INSTANTIATION_UI) && isALaCarte(csarHelper)) { return VidNotions.InstantiationUI.ANY_ALACARTE_NEW_UI; } if (featureManager.isActive(Features.FLAG_2002_ANY_ALACARTE_BESIDES_EXCLUDED_NEW_INSTANTIATION_UI) && - !isMacro(serviceModel) && + !isMacro(instantiationType) && !isAlacarteExcludedByCategory(modelCategory)) { return InstantiationUI.ANY_ALACARTE_WHICH_NOT_EXCLUDED; } @@ -206,13 +223,13 @@ public class VidNotionsBuilder { return VidNotions.ModelCategory.OTHER; } - VidNotions.InstantiationUI suggestViewEditUI(ISdcCsarHelper csarHelper, ServiceModel serviceModel, ModelCategory modelCategory) { + VidNotions.InstantiationUI suggestViewEditUI(ISdcCsarHelper csarHelper, ServiceModel serviceModel, ModelCategory modelCategory, InstantiationType instantiationType) { if (featureManager.isActive(Features.FLAG_1902_VNF_GROUPING) && isGrouping(csarHelper)) { return VidNotions.InstantiationUI.SERVICE_WITH_VNF_GROUPING; } if (featureManager.isActive(Features.FLAG_1908_MACRO_NOT_TRANSPORT_NEW_VIEW_EDIT) && - isMacro(serviceModel) && + isMacro(instantiationType) && !isTransportService(csarHelper) && //till new view/edit would support fabric service activation !hasFabricConfiguration(csarHelper)) { @@ -220,7 +237,7 @@ public class VidNotionsBuilder { } if (featureManager.isActive(Features.FLAG_1902_NEW_VIEW_EDIT)) { - VidNotions.InstantiationUI instantiationUISuggestion = suggestInstantiationUI(csarHelper, serviceModel, modelCategory); + VidNotions.InstantiationUI instantiationUISuggestion = suggestInstantiationUI(csarHelper, serviceModel, modelCategory, instantiationType); if (instantiationUISuggestion!=VidNotions.InstantiationUI.LEGACY) { return instantiationUISuggestion; } @@ -229,8 +246,8 @@ public class VidNotionsBuilder { return VidNotions.InstantiationUI.LEGACY; } - private boolean isMacro(ServiceModel serviceModel) { - return ToscaParserImpl2.Constants.MACRO.equals(serviceModel.getService().getInstantiationType()); + private boolean isMacro(InstantiationType instantiationType) { + return instantiationType==InstantiationType.Macro; } private boolean isUuidExactlyHardCoded1ffce89fef3f(ISdcCsarHelper csarHelper) { diff --git a/vid-app-common/src/main/java/org/onap/vid/properties/Features.java b/vid-app-common/src/main/java/org/onap/vid/properties/Features.java index 5bf4fbdc0..b53ddbe2f 100644 --- a/vid-app-common/src/main/java/org/onap/vid/properties/Features.java +++ b/vid-app-common/src/main/java/org/onap/vid/properties/Features.java @@ -82,6 +82,7 @@ public enum Features implements Feature { FLAG_1911_INSTANTIATION_ORDER_IN_ASYNC_ALACARTE, FLAG_2002_ANY_ALACARTE_BESIDES_EXCLUDED_NEW_INSTANTIATION_UI, FLAG_2002_VFM_UPGRADE_ADDITIONAL_OPTIONS, + FLAG_2002_IDENTIFY_INVARIANT_MACRO_UUID_BY_BACKEND, ; diff --git a/vid-app-common/src/test/java/org/onap/vid/asdc/parser/VidNotionsBuilderTest.java b/vid-app-common/src/test/java/org/onap/vid/asdc/parser/VidNotionsBuilderTest.java index c32dd2141..0f6f25c7b 100644 --- a/vid-app-common/src/test/java/org/onap/vid/asdc/parser/VidNotionsBuilderTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/asdc/parser/VidNotionsBuilderTest.java @@ -74,6 +74,9 @@ import org.togglz.core.manager.FeatureManager; public class VidNotionsBuilderTest { + private static final String MACRO_SERVICE_INVARIANT_UUID = "2efab359-cdd4-4da2-9b79-61df990796c2"; + private static final String NOT_MACRO_SERVICE_INVARIANT_UUID = "5d854f6b-759c-4aa6-b472-7e4bb1c003d4"; + @InjectMocks VidNotionsBuilder vidNotionsBuilder; @@ -98,7 +101,7 @@ public class VidNotionsBuilderTest { public void VLNetworkWithPropertyNetworkTechnologyOVS_UIHintIsPositive() { ISdcCsarHelper csarHelper = mockForNonLegacyInstantiationUI(); - assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER), is(InstantiationUI.NETWORK_WITH_PROPERTY_NETWORK_TECHNOLOGY_EQUALS_STANDARD_SRIOV_OR_OVS)); + assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER, InstantiationType.ALaCarte), is(InstantiationUI.NETWORK_WITH_PROPERTY_NETWORK_TECHNOLOGY_EQUALS_STANDARD_SRIOV_OR_OVS)); assertThat(vidNotionsBuilder.suggestModelCategory(csarHelper, serviceModel) , is(ModelCategory.IS_5G_PROVIDER_NETWORK_MODEL)); } @@ -118,21 +121,88 @@ public class VidNotionsBuilderTest { return csarHelper; } + @DataProvider + public static Object[][] identifyInvariantFeatureFlagDataProvider() { + return new Object[][] { + {false, null, InstantiationType.ClientConfig}, + {false, mock(ServiceModel.class), InstantiationType.ClientConfig}, + {true, null, InstantiationType.ALaCarte}, + {true, mock(ServiceModel.class), InstantiationType.ALaCarte}, + }; + } + + @Test(dataProvider = "identifyInvariantFeatureFlagDataProvider") + public void whenCsarIsEmpty_suggestInstantiationType_byFeatureFlag( + boolean isFlagActive, ServiceModel serviceModel, InstantiationType expectedType) { + when(featureManagerMock.isActive(Features.FLAG_2002_IDENTIFY_INVARIANT_MACRO_UUID_BY_BACKEND)).thenReturn(isFlagActive); + if (serviceModel!=null) { + when(serviceModel.getService()).thenReturn(null); + } + assertEquals(expectedType, vidNotionsBuilder.suggestInstantiationType(serviceModel, null)); + } + + @DataProvider + public static Object[][] noMacroNoAlaCarteDataProvider() { + return new Object[][] { + {Constants.CLIENT_CONFIG}, + {"don't know you"}, + {null}, + }; + } + + @Test(dataProvider = "noMacroNoAlaCarteDataProvider") + public void givenNoMacroNorALaCarte_when_FLAG_2002_IDENTIFY_INVARIANT_MACRO_UUID_BY_BACKEND_isOff_then_suggestInstantiationType_ClientConfig(String instantiationType) { + ServiceModel serviceModel = mockServiceModelInstantiationTypeAndInvariant(MACRO_SERVICE_INVARIANT_UUID, instantiationType); + when(featureManagerMock.isActive(Features.FLAG_2002_IDENTIFY_INVARIANT_MACRO_UUID_BY_BACKEND)).thenReturn(false); + assertEquals(InstantiationType.ClientConfig , vidNotionsBuilder.suggestInstantiationType(serviceModel, null)); + } + + @NotNull + private ServiceModel mockServiceModelInstantiationTypeAndInvariant(String invariantUUID, String instantiationType) { + ServiceModel serviceModel = mock(ServiceModel.class); + Service service = mock(Service.class); + when(serviceModel.getService()).thenReturn(service); + when(service.getInstantiationType()).thenReturn(instantiationType); + when(service.getInvariantUuid()).thenReturn(invariantUUID); + return serviceModel; + } + + @DataProvider + public static Object[][] instantiationTypeByInvariantDataProvider() { + return new Object[][] { + {null, MACRO_SERVICE_INVARIANT_UUID, InstantiationType.Macro}, + {null, NOT_MACRO_SERVICE_INVARIANT_UUID, InstantiationType.ALaCarte}, + {Constants.CLIENT_CONFIG, MACRO_SERVICE_INVARIANT_UUID, InstantiationType.Macro}, + {Constants.BOTH, NOT_MACRO_SERVICE_INVARIANT_UUID, InstantiationType.ALaCarte}, + }; + } + + @Test(dataProvider = "instantiationTypeByInvariantDataProvider") + public void givenNoMacroNorALaCarte_givenFlagIsOn_suggestInstantiationTypeByInvariant( + String givenInstantiationType, String invariantUUID, InstantiationType expectedType + ) { + when(featureManagerMock.isActive(Features.FLAG_2002_IDENTIFY_INVARIANT_MACRO_UUID_BY_BACKEND)).thenReturn(true); + ServiceModel serviceModel = mockServiceModelInstantiationTypeAndInvariant(invariantUUID, givenInstantiationType); + assertEquals(expectedType, vidNotionsBuilder.suggestInstantiationType(serviceModel, null)); + } + @DataProvider public static Object[][] anyAlacarteDataProvider() { return new Object[][] { - {"A-La-Carte", InstantiationUI.ANY_ALACARTE_NEW_UI}, - {"Macro", InstantiationUI.LEGACY}, + {InstantiationType.ALaCarte, InstantiationUI.ANY_ALACARTE_NEW_UI}, + {InstantiationType.Macro, InstantiationUI.LEGACY}, }; } @Test(dataProvider = "anyAlacarteDataProvider") - public void FLAG_EXP_ANY_ALACARTE_NEW_INSTANTIATION_UI_is_active_UIHintIsPositive(String instantiationType, InstantiationUI expectedInstantiationUI) { + public void FLAG_EXP_ANY_ALACARTE_NEW_INSTANTIATION_UI_is_active_UIHintIsPositive(InstantiationType instantiationType, InstantiationUI expectedInstantiationUI) { initServiceModelAndscarHelperWithMocks(); + String instantiationTypeAsString = instantiationType==InstantiationType.ALaCarte ? "A-La-Carte" : "Macro"; + when(featureManagerMock.isActive(Features.FLAG_EXP_ANY_ALACARTE_NEW_INSTANTIATION_UI)).thenReturn(true); when(csarHelper.getServiceMetadata()).thenReturn(new Metadata(ImmutableMap.of( - "instantiationType", instantiationType + "instantiationType", instantiationTypeAsString ))); NodeTemplate nodeTemplate = mock(NodeTemplate.class); @@ -143,7 +213,7 @@ public class VidNotionsBuilderTest { when(csarHelper.getServiceVlList()).thenReturn(ImmutableList.of(nodeTemplate)); - assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER), is(expectedInstantiationUI)); + assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER, instantiationType), is(expectedInstantiationUI)); } @Test @@ -159,7 +229,7 @@ public class VidNotionsBuilderTest { when(csarHelper.getServiceVlList()).thenReturn(ImmutableList.of(nodeTemplate)); - assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER), is(InstantiationUI.LEGACY)); + assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER, InstantiationType.ALaCarte), is(InstantiationUI.LEGACY)); assertThat(vidNotionsBuilder.suggestModelCategory(csarHelper, serviceModel) , is(ModelCategory.OTHER)); } @@ -169,7 +239,7 @@ public class VidNotionsBuilderTest { assertThat(vidNotionsBuilder.isALaCarte(csarHelper), is(false)); assertThat(vidNotionsBuilder.hasAnyNetworkWithPropertyEqualsToAnyOf(csarHelper, "unexpected_property_name"), is(false)); assertThat(vidNotionsBuilder.hasAnyNetworkWithPropertyEqualsToAnyOf(csarHelper, "network_technology","Standard-SR-IOV"), is(true)); - assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER), is(InstantiationUI.LEGACY)); + assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER, InstantiationType.ClientConfig), is(InstantiationUI.LEGACY)); } @Test @@ -177,7 +247,7 @@ public class VidNotionsBuilderTest { initServiceModelAndscarHelperWithRealCsar("/csars/service-fabric-configuration.zip"); assertThat(vidNotionsBuilder.isALaCarte(csarHelper), is(false)); assertThat(vidNotionsBuilder.hasFabricConfiguration(csarHelper), is(true)); - assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER), is(InstantiationUI.LEGACY)); + assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER, InstantiationType.ClientConfig), is(InstantiationUI.LEGACY)); } @Test(dataProvider = "trueAndFalse", dataProviderClass = TestUtils.class) @@ -187,7 +257,7 @@ public class VidNotionsBuilderTest { when(featureManagerMock.isActive(Features.FLAG_1908_TRANSPORT_SERVICE_NEW_INSTANTIATION_UI)).thenReturn(flagValue); assertThat(vidNotionsBuilder.isALaCarte(csarHelper), is(false)); - assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER), is(flagValue ? InstantiationUI.TRANSPORT_SERVICE : InstantiationUI.LEGACY)); + assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER, InstantiationType.ClientConfig), is(flagValue ? InstantiationUI.TRANSPORT_SERVICE : InstantiationUI.LEGACY)); assertThat(vidNotionsBuilder.suggestModelCategory(csarHelper, serviceModel), is(ModelCategory.Transport)); } @@ -195,7 +265,7 @@ public class VidNotionsBuilderTest { public void withoutMocks_givenZippedToscaFileOfInfraStructureVpn_InstantiationUIIsRight(boolean flagValue) throws SdcToscaParserException, IOException { initServiceModelAndscarHelperWithRealCsar("/csars/service-Infravpn-csar.zip"); when(featureManagerMock.isActive(Features.FLAG_1908_INFRASTRUCTURE_VPN)).thenReturn(flagValue); - assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER), is(flagValue ? InstantiationUI.INFRASTRUCTURE_VPN : InstantiationUI.LEGACY)); + assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER, InstantiationType.ClientConfig), is(flagValue ? InstantiationUI.INFRASTRUCTURE_VPN : InstantiationUI.LEGACY)); assertThat(vidNotionsBuilder.suggestModelCategory(csarHelper, serviceModel), is(ModelCategory.INFRASTRUCTURE_VPN)); } @@ -232,21 +302,20 @@ public class VidNotionsBuilderTest { @DataProvider public static Object[][] anyAlaCarteDataProvider() { return new Object[][] { - {true, Constants.A_LA_CARTE, InstantiationUI.ANY_ALACARTE_WHICH_NOT_EXCLUDED}, - {false, Constants.A_LA_CARTE, InstantiationUI.LEGACY}, - {true, Constants.MACRO, InstantiationUI.LEGACY}, - {true, Constants.CLIENT_CONFIG, InstantiationUI.ANY_ALACARTE_WHICH_NOT_EXCLUDED}, + {true, InstantiationType.ALaCarte, InstantiationUI.ANY_ALACARTE_WHICH_NOT_EXCLUDED}, + {false, InstantiationType.ALaCarte, InstantiationUI.LEGACY}, + {true, InstantiationType.Macro, InstantiationUI.LEGACY}, + {true, InstantiationType.ClientConfig, InstantiationUI.ANY_ALACARTE_WHICH_NOT_EXCLUDED}, {true, null, InstantiationUI.ANY_ALACARTE_WHICH_NOT_EXCLUDED}, - {true, "", InstantiationUI.ANY_ALACARTE_WHICH_NOT_EXCLUDED} }; } @Test(dataProvider = "anyAlaCarteDataProvider") - public void testAnyAlaCarteNewUI_byInstantiationTypeAndFeatureFlag(boolean flag, String instantiationType, InstantiationUI expected) { + public void testAnyAlaCarteNewUI_byInstantiationTypeAndFeatureFlag(boolean flag, InstantiationType instantiationType, InstantiationUI expected) { initServiceModelAndscarHelperWithMocks(); - mockInstantiationType(serviceModel, instantiationType); + //mockInstantiationType(serviceModel, instantiationType); when(featureManagerMock.isActive(Features.FLAG_2002_ANY_ALACARTE_BESIDES_EXCLUDED_NEW_INSTANTIATION_UI)).thenReturn(flag); - assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER), is(expected)); + assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER, instantiationType), is(expected)); } @Test @@ -257,7 +326,7 @@ public class VidNotionsBuilderTest { "UUID", "95eb2c44-bff2-4e8b-ad5d-8266870b7717" ))); when(featureManagerMock.isActive(Features.FLAG_5G_IN_NEW_INSTANTIATION_UI)).thenReturn(true); - assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER), is(InstantiationUI.SERVICE_UUID_IS_1ffce89f_ef3f_4cbb_8b37_82134590c5de)); + assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER, InstantiationType.ClientConfig), is(InstantiationUI.SERVICE_UUID_IS_1ffce89f_ef3f_4cbb_8b37_82134590c5de)); } @Test(dataProvider = "trueAndFalse", dataProviderClass = TestUtils.class) @@ -290,7 +359,7 @@ public class VidNotionsBuilderTest { "serviceRole", serviceRole ))); - assertThat(vidNotionsBuilder.suggestViewEditUI(csarHelper, serviceModel, ModelCategory.OTHER), is(expectedViewEditUI)); + assertThat(vidNotionsBuilder.suggestViewEditUI(csarHelper, serviceModel, ModelCategory.OTHER, InstantiationType.ClientConfig), is(expectedViewEditUI)); } @DataProvider @@ -316,7 +385,7 @@ public class VidNotionsBuilderTest { ServiceModel serviceModel = mock(ServiceModel.class); mockInstantiationType(serviceModel, Constants.A_LA_CARTE); - InstantiationUI result = vidNotionsBuilder.suggestViewEditUI(csarHelper, serviceModel, ModelCategory.OTHER); + InstantiationUI result = vidNotionsBuilder.suggestViewEditUI(csarHelper, serviceModel, ModelCategory.OTHER, InstantiationType.ClientConfig); assertEquals(expectedViewEditUi, result); } @@ -470,7 +539,7 @@ public class VidNotionsBuilderTest { emptyMap() : ImmutableMap.of(ToscaParserImpl2.Constants.SERVICE_ROLE, serviceRole) )); - assertEquals(expectedViewEditUi, vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER)); + assertEquals(expectedViewEditUi, vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel, ModelCategory.OTHER, InstantiationType.ALaCarte)); } private static NodeTemplate mockNodeTemplateChild(boolean withFabricConfiguration) { @@ -524,15 +593,14 @@ public class VidNotionsBuilderTest { initServiceModelAndscarHelperWithMocks(); Service service = mock(Service.class); - String instantiationType = isMacro ? ToscaParserImpl2.Constants.MACRO : ToscaParserImpl2.Constants.A_LA_CARTE; + InstantiationType instantiationType = isMacro ? InstantiationType.Macro : InstantiationType.ALaCarte; when(serviceModel.getService()).thenReturn(service); - when(service.getInstantiationType()).thenReturn(instantiationType); when(featureManagerMock.isActive(Features.FLAG_1908_MACRO_NOT_TRANSPORT_NEW_VIEW_EDIT)).thenReturn(flagActive); when(featureManagerMock.isActive(Features.FLAG_1902_NEW_VIEW_EDIT)).thenReturn(false); when(csarHelper.getServiceMetadata()).thenReturn(new Metadata(isTransport ? ImmutableMap.of(ToscaParserImpl2.Constants.SERVICE_TYPE, "TRANSPORT") : emptyMap() )); - assertEquals(expectedViewEditUi, vidNotionsBuilder.suggestViewEditUI(csarHelper, serviceModel, ModelCategory.OTHER)); + assertEquals(expectedViewEditUi, vidNotionsBuilder.suggestViewEditUI(csarHelper, serviceModel, ModelCategory.OTHER, instantiationType)); } @DataProvider @@ -540,10 +608,10 @@ public class VidNotionsBuilderTest { return new Object[][]{ {"117f5f1a-1b47-4ae1-ae04-489c9a7ada28", true}, {"117F5f1a-1b47-4AE1-ae04-489C9A7ada28", true}, - {"2efab359-cdd4-4da2-9b79-61df990796c2", true}, + {MACRO_SERVICE_INVARIANT_UUID, true}, {"67e09a1f-9e42-4b63-8dee-bc60bae50de1", false}, {"67e09A1F-9E42-4b63-8Dee-bc60bae50de1", false}, - {"5d854f6b-759c-4aa6-b472-7e4bb1c003d4", false}, + {NOT_MACRO_SERVICE_INVARIANT_UUID, false}, {"I'm not a uuid", false}, {null, false}, }; diff --git a/vid-automation/src/main/java/vid/automation/test/infra/Features.java b/vid-automation/src/main/java/vid/automation/test/infra/Features.java index a2892e5ea..7c2d61cc5 100644 --- a/vid-automation/src/main/java/vid/automation/test/infra/Features.java +++ b/vid-automation/src/main/java/vid/automation/test/infra/Features.java @@ -57,6 +57,7 @@ public enum Features implements Feature { FLAG_1911_INSTANTIATION_ORDER_IN_ASYNC_ALACARTE, FLAG_2002_ANY_ALACARTE_BESIDES_EXCLUDED_NEW_INSTANTIATION_UI, FLAG_2002_VFM_UPGRADE_ADDITIONAL_OPTIONS, + FLAG_2002_IDENTIFY_INVARIANT_MACRO_UUID_BY_BACKEND, ; public boolean isActive() { diff --git a/vid-automation/src/main/java/vid/automation/test/test/BrowseASDCTest.java b/vid-automation/src/main/java/vid/automation/test/test/BrowseASDCTest.java index 0671815bd..a9378e6df 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/BrowseASDCTest.java +++ b/vid-automation/src/main/java/vid/automation/test/test/BrowseASDCTest.java @@ -5,6 +5,7 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static vid.automation.test.infra.Features.FLAG_1908_COLLECTION_RESOURCE_NEW_INSTANTIATION_UI; import static vid.automation.test.infra.Features.FLAG_2002_ANY_ALACARTE_BESIDES_EXCLUDED_NEW_INSTANTIATION_UI; +import static vid.automation.test.infra.Features.FLAG_2002_IDENTIFY_INVARIANT_MACRO_UUID_BY_BACKEND; import static vid.automation.test.infra.Features.FLAG_5G_IN_NEW_INSTANTIATION_UI; import static vid.automation.test.infra.Features.FLAG_NETWORK_TO_ASYNC_INSTANTIATION; import static vid.automation.test.infra.Features.FLAG_SHOW_ORCHESTRATION_TYPE; @@ -29,7 +30,7 @@ import org.onap.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessi import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.testng.Assert; -import org.testng.TimeBombSkipException; +import org.testng.SkipException; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; @@ -181,9 +182,9 @@ public class BrowseASDCTest extends CreateInstanceDialogBaseTest { @Test private void browseServiceModel_deployServiceMacroByMACRO_SERVICESConfig_creationPopupIsOldMacro() { - if (FLAG_2002_ANY_ALACARTE_BESIDES_EXCLUDED_NEW_INSTANTIATION_UI.isActive() ) { - throw new TimeBombSkipException("skipping identify macro by uuid for awhile", "2019/11/25"); - //also need to handle the simulator preset by using good ModelInfo instance + if (FLAG_2002_ANY_ALACARTE_BESIDES_EXCLUDED_NEW_INSTANTIATION_UI.isActive() && + ! FLAG_2002_IDENTIFY_INVARIANT_MACRO_UUID_BY_BACKEND.isActive()) { + throw new SkipException("some 2002 flags shall come along together"); } deployServiceAndAssertInstantiationType( "csar15782222_invariantUUIDMacro.zip", diff --git a/vid-automation/src/main/resources/registration_to_simulator/sanity/get_csar_zip_file.json b/vid-automation/src/main/resources/registration_to_simulator/sanity/get_csar_zip_file.json deleted file mode 100644 index 7b39f77e6..000000000 --- a/vid-automation/src/main/resources/registration_to_simulator/sanity/get_csar_zip_file.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "simulatorRequest": { - "method": "GET", - "path": "/vidSimulator/getSomeFile" -} , - "simulatorResponse": { - "responseCode": 200, - "file": "csar15782222_invariantUUIDMacro.zip" - } -} \ No newline at end of file diff --git a/vid-automation/src/test/java/org/onap/vid/api/SdcApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/SdcApiTest.java index 918c4131e..8549613f8 100644 --- a/vid-automation/src/test/java/org/onap/vid/api/SdcApiTest.java +++ b/vid-automation/src/test/java/org/onap/vid/api/SdcApiTest.java @@ -21,6 +21,7 @@ package org.onap.vid.api; import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals; +import static net.javacrumbs.jsonunit.JsonMatchers.jsonPartEquals; import static net.javacrumbs.jsonunit.JsonMatchers.jsonStringEquals; import static net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER; import static org.hamcrest.CoreMatchers.equalTo; @@ -130,9 +131,16 @@ public class SdcApiTest extends BaseApiTest { ResponseEntity response = restTemplate.getForEntity(buildUri(SDC_GET_SERVICE_MODEL + MACRO_INSTANTIATION_TYPE_UUID), String.class); assertEquals(response.getStatusCode(), HttpStatus.OK); String emptyInstantiationTypeExpectedResponse = loadResourceAsString(EMPTY_INSTANTIATION_TYPE_EXPECTED_RESPONSE); - assertThat(response.getBody(), jsonEquals(emptyInstantiationTypeExpectedResponse) + + final String body = response.getBody(); + + assertThat(body, jsonEquals(emptyInstantiationTypeExpectedResponse) .when(IGNORING_ARRAY_ORDER) - .whenIgnoringPaths("service.vidNotions.instantiationUI")); + .whenIgnoringPaths("service.vidNotions.instantiationUI", "service.vidNotions.instantiationType")); + + assertThat(body, jsonPartEquals("service.vidNotions.instantiationType", + Features.FLAG_2002_IDENTIFY_INVARIANT_MACRO_UUID_BY_BACKEND.isActive() + ? "ALaCarte" : "ClientConfig")); } @Test @@ -154,7 +162,7 @@ public class SdcApiTest extends BaseApiTest { String minMaxInitialExpectedResponse = loadResourceAsString("sdcApiTest/minMaxInitialExpectedResponse.json"); assertThat(response.getBody(), jsonEquals(minMaxInitialExpectedResponse) .when(IGNORING_ARRAY_ORDER) - .whenIgnoringPaths("service.vidNotions.instantiationUI")); + .whenIgnoringPaths("service.vidNotions.instantiationUI", "service.vidNotions.instantiationType")); } @Test diff --git a/vid-ext-services-simulator/src/main/resources/download_files/csar15782222_invariantUUIDMacro.zip b/vid-ext-services-simulator/src/main/resources/download_files/csar15782222_invariantUUIDMacro.zip index c76b42601b8fee1c60fd96dfa1f44e9084132d2e..fe9a7dd83dceab154661b4901f128fa0acdcc36d 100644 GIT binary patch literal 38626 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

-5P8&p0ZY zw1!xt4d|hU;0?kYUBf4h*&bBWM<~z30UQp?-00bO^-IADUI&*Y5b7dr@`rU13m`v~8 zln?DL6>KSQ1i44Qi{_u^Y z^Bn320ObFd7XY$v8>u~BFXY%-7Kx@aBi#xQze-iQ^?!AgZ^NIi^OH>AfdC9B+>}yx z7BSy!gCoJMa=IUg;?03*KR>;v!uN{pd8@mT;Kv{vsVT6GrP0y0NK0ULnBa66Z>lTz zWb)`a;)CsWO>SI3wEzW7zZ#qYO1ymIB@ecF<5NQj>xJdh`Dy7lr(3Lry{9|luI6RO zZ+yw7pH+n8pyp5yUEhy}a2OZMT6ZP{5i9*OsUy*X4pL6MO>aHy#ayzt5%A4MEWePdTaQ}9 zq`Z+!UD;QEe5jGwce7o&a>^6CjZMi-ap)%V;?n74v=4<^JP&awN2XZMzQJlPN;pFTn!igYhoxR!uI%xw07=xT&0q7`(Ov zEel@@9)v3L*9OL+OCHj;+sri?q_J$k8tbIcC%9EM7#6dEXta%_JaU^AP+E=#;0@cP?nqOCE&kCe z<&Hoo!UE@{=05aRoFxH?3HSD^?Xh5k*jV~%TR~8YFWITza5H*xky5h9H_~62hq~Q2 zq6vATH`>Lj?A5NpXU1DaaTFQU=8iVznY5o~>m4iVJifl^6*gb;H*mAWKV*xOH!v(h zv?cllS!$OdzE?a*$i>vYht6nOXAe5*^cqesoY<^UaWP*xz04meh?>u+;}b*)kP;>X zHwexs3_c|6+ewjg5uxrtm4owt3gkznUvW(}r_iSu46UNouia2S1(U#?RQ%$#NEQ1!$Wr|_B6kx~xRVCvf&`Q|x~3eEnas#&1+rm<#fypiuc z?`5kKb~$RultD6;s!V=OGQI8sO*~+p>N2q*Uh7VNQDW{QOc7h^@cs(uXUch^P>vGc zu`l82KwR9=x#-i2liY4r_eph>y(k)!L>EJ!aUyi`TTHIhRT>Bb1q3|cc{DC6n_7lP z0J3~Z*=+1czYToDEt?v|!=ha>BghUYKLTLCD9iYI8DL^>!WB@OaRf3rNNjMhR&Zm8 zX*yvO1j6#5uf{adCNwS4+QYeIXdqytUKw`QY{WRLO@;-Y%94S?vf*0e5|w4iAf>kn zWld0FdLEE98=Ftlj7JG1Irk;jVf~3bd4-Q&NrP9^R-_qU8wgA2*ac^$pK+#7x_J{3 zMj-}e?W74mOC3&QM`{|Sa97@9JLZdYF&2k^R>}F%mif+Uz{we_K%!cp|Az_5?Mn}c zQ$^>3GD8A0ZQ!JfvC@b#f%#$P=|+=RqRekZDQqar8ke{vY>31m2c|OnM3_KQOkOk~ zGNJG_7!1?|Dnn6122>NGU?2|~I79(DJ#=?OC(w)^OKQ$0&lSY*3 z%xr%RuoR1YM(pA+@+o@3AJ>zU392U-@;@&n&C|lvv}(h8ipmKvIlXH}=k$C-T?ijA zCr&A&Gf5&s?&ci2vH9)%{N30BpyE#KX`KQZ3{_#stMM$8rZrO7j#>kg3lxL=1q#}( zm$59}KI+H8b!9jE#26k7v=asAR0>dQoS!&&t6XBP=b$+gYzdOz9a*|yC%#UN81Yj< z;Wo<;$C73^mo=)g-Em`RO=pR9pSc(&wxl%S(lVOtu9BJo4pTjI@8caGi?&gB>B9?@ z=ZbE8k%NU~_$UYKmD};Lny%qSb&fkJjXgcjD|^Y~P>0MMU*Ju-%D5H#xkdkezf*D1 z+wGl>>vG~P^F}C`1s9*X^|ke7K6YjEqKVi!2AYbAtM|S9&GqImI`zgd?CPqfT5a%b zeHpYuV($2@r088TWyX39U(bC~Ct6O*$4S{(&qy777UJk_>tO3`EAgW!?n){`q8jK) zBV-zjME1?QuJf{$C)Trq&P+V6QR5$tcR0GbLHlY=?%b>6*Q@>Ir!bf$px{)THj{aN zVknh@sw$z4x=`}W>!p!=4`aK+<~R|$2J@02|5K!+<>rf#;?5c3DzM zgOuq=d2b;p3jV#=d)a#ar~vt43P}m@WYYMEFyqgf@9qEdFe}oQhU0a(8~n$V5eZvQ zZ#XG5h4+sDKI9l6@{Fi7>1l+M3jpB$x6Pjzanf-3L5#hvyR97@NrL{2V?a)75%+~E zktVLR%m9AWZr`CK(&x^Dq`gzKrzavOkcS}JCmbe;9S;)r0}_!l$b)q3Gek-HjDw8- zNSl7!F65yc_BlF|zjFQ)*n!*?^67T_h&hX25eFyV9i;qjTF_4lKWP;K{gv{6CJ7xx z?Okc)!tZ^DRvgGtf0TifL&+tn`_KaC{{|%!s2;@rPLuc(%THQSx%>f3u24LP{GIx3 z-%~vDA0U5y{5}ZZYg=-O*gjmy?N9K3CKw~PL@qhnx1{3!2TOkxAd$1lWib0}TF*bQ ze=CY1=aLWR?sK2`{8R3q+y8gNDnBjolUDAxezoxb4ziFtPyWKT@4QF&|A79p|9jUD gc}KQyq(1t;bZh$BG^CsN-VK)x03mJNiPZFoWsnpqP zuf6x$3evzJC;$);5CF#}+|mI5Z9oEm02n(PI?>shx)^?s0{}p~IWEKA!MnLFKFQKb zF1k)kN-n`l(^5@O&NL`7EHdvxg;G06%1%s9&;X935GSPpBm)2_NP|P56G}R<{{6DZ z-$&v9xgX}=RTX(`>-Asz%f`w=1u-Cmyl{%rAyjQ#vNRDiq7_{6 zooaw3C?@2ywAiQ6?Tmb6<|bM$0k4*0|5C6IhjgE>FQ@C5sp3r(OM{3tRMlOsZxZ%P zeO`h+V0js!__d$5gvv&8h$N|%Ba%(v>qv>*3f3~{*ZrHQSfv6H=-p^dYtouRFzojI+GsjY*Jp^GV#wu>X_XD2SV2gwFg$N zg+#NBbayd22;gSKo})J@#h*h2+IXu3rS*p=WvwnULEtK#{XgnnON9$+4k-du$u3IN z6I2XnKblA@WtEdrFslJ4m=EcGsX+&j?%tl_;VP)?3Dht5_pi2+31dKk5fbI-bpBvt zi=~F6pxIFbdXxQ{SikVJnsx~^Ulk9BSRg%xg3@mk>5lne3*Jaz5=XUz{SAhkH4>!A zIMKyQc^dqQ%Ad=md!dM-S4_OH_u)V@exOSd3f#zBgSyzlNIijGN~YxN@6S+Bn?r1{ zKP_C6Y+T$3-{@TQcvulriXg+d%0l4tdJTdPl{StWmeWzfrZLN;u&SICt}E2wd^<=j zub7(ypj03qp$)w1;BW%irs-}d6tOC*z2qgRE+(=1UVodHRh}rRdxMpQWb54qjxY@f z<_gOl;VudcXZm;~4`Dvb%muuNrJj_j&6h{DUq}7!stj_eDrPT{Aaxrl(&;Vtv9Ikg z+yzia8*ymFiL7sDv3NQ#ZSpa>n0mOr+jxQ1=C^OYG<^81=c{QHPfbs>E@b3nu+AD3 z*4;uValB?xD|!K6mbR9EvH=rR|L(|-SOI!3UNYlf2DKCE(mdcxcTA4iah+Ss&9V5< z#j(1Sy_?BYiW_0v)+4Yu{6K^ig+ab064)}>$mpd>mobN&jld6Oktj^Mm!zx0&ZU7RA%qM*Rl!x_79oG-{EU#q&#RamL-%XFzBp?vrhu)!>Jaae~lZQ(-m z6eaZ-;h-g_K7#{>*}{qEw$vG8u1`2G#U=Q%anD1tO*!=an0dxM0%O{3CL^hN6T8{< z-90vyH^mD&doB5{JqDV*d(SLs9%Htv+GKZeDHxopgDHoM7ScM;6W78P5JjzR)_+p& zuj?cKmfPBMl3Eg^MQ#^iy^{x+YHsk6FS_LF%G^8gBlX6onR?tXMgOHc7yqh?lrnTm zZz$LBMAk;&ATz+V3BXu%QjB>IVh@K!EyB_{aDEff2Npb}pt)W`@T9LW^vrKD&Mf zn63xZH$bY^XO6lJkolr3tdK!dG|4PZ%hKJC^ zOMhcHtN39h5pAWr5y^5(jn(rmhd+9e2-QuHrUvH> zEvW;~M;4aKuA}9uYFdxxu9Ip|qTzi4Z3a!NWnqt^-qm_gN8q72^6qr1JO{Te%orUbbIhu=P57RSf2cWe3YBPF5C z`U(qU`VsR@Jbr`dtM`UCVoP_s>O243A4gkFi3%V9K=t1{{J;K-Ncv3f@0I9Xzr^?=J&+WZP zG-tz=4Ll;zsSb@=x)|X_mp5R>UAQ3r@&n;fdJ}xOn(l9yb3S!#ujzHRZ(-2+Y7Q)K zqyQOiHUPSA8duy1f)^&tyJyOq%cEnw`@#2R#w%n=6CgxhG;oI)$QpWFzSQXhYub|% znz`v^Hg{OF(dGLILV)|@AB`(O1sx(7xC^F4hj8m0-3CfWsHREBk;vGev!RPx0_b@1 zzA8{Q%2aP=lDp9IxCoaT`~ItE=cBUVg1V~O6a&Ac!u{b1iVp@o%CI&=E`>qA*8(rPwBn2>&)%H@hOa+& z!N40-Vy%GTm2)MQKmL#|(UqG95g$Q9Rd)0c;~{Cpg|3Zu70s|hYB3=ec+mipy*elK zlr)&gW0!#gpldSLcPS-p+LNm=^oU~>?)O5=TxU40bnJf(K=CB>n~Pm9Of>#w|0rs;rfT@V4}$V zfl07tw$=;Wd+&Y71@XNyxm3K#4 z&CM8*AhLDNM&yG8af8GeNJPkz%1b3eidUN&sr%dJWGLX(TGzba(pN5urW=5=NTZa) z^Ka$esc61okS5i42LC)q3`$B#0*|q)0GQFUsHxBkDNZw;Z&QoJ3=veWVc2nzGr?j; zeOh`20%nw3%hF#tdJ@S7rxF;ch8ZNe!Qp}Pi|Qs@S}d6c+cFzKtA=5bDF9w19oOl?ZBAxXL>sVoC8`) zj%GBrcvc6#*BS{;{;x(hDWnwd~l@o-B{epXRt+ zq*p)B=2D|7(HBER|5U-5c<+Y*)y23jo#Aw&T`$cUahbwOEewl15V9`9cO_5Q7koK< z;PPPB2R|5l-TxQ0b$>&5hz9`xXomjpu=np_0?NO^-ao|sAL_crYwf(jk+AbXt&sjl zS_zffk?jD!yQ^w`T{6bXSlrr^smaxOC{R+OKa{A=d-Qqx%5TSxM?%3nuxS7Ao-jfp zZ|)Sm9UJzx)SN$Fe$!O2pCqLhcgrUUw078o7z3(r=hA&x47Su}t}>DEO5Mcyj-`(+BI_ z1`2|LH^><imC zVPHo|8_8Q{0~B`1^Ya3|eZ&p_yjkaQM!n&Y;fHbij|U~$YE**vs^Q*ZA#pu00v|n*vTSRf#S{hgVXV{qe~j1FAiX8gK&N3fo0) zc~L&?S5BzDCP7k3A@?ca)aPTC2#e(Pz$!CfsBnrsZ6;w&5TLzbVNwHf}O zy^~l)^<4*_i=ly8abrb^Eul9m;T>aSPG!dFu=Vy{58aY^H#)TwV28 zfI2$oH0dCM*DZvQH$fsi$|_idkZJhNomJX%w#lHDzvT%?Ch>ew`d1F`Q=>>rMo2j1 zPoo5Sz0dAMI+#up3U0;3{LuzaCTz}mtM@tA>yl; zd+xIBt6g51?kHWS&PH5TC+&|9i#4{5m|mVK>L51)tUBKrEeQd*({OF4f|6o3fOjFk z6=4)nX9?ri3|D4&bZSBpA{G-7hh4_6e!eTfBWUXBLh4*+SDV2#jZ=MitD?{QM5Uxj&c?eQC< zetuypn=QzRaH ztSdq=QsXkX4w#_aPj3593*Ae*(k^O&9u1v6*g+Y{^xpE`ipcnCwZ&deb?^}tsm5S^ zJC8$9*z45_fPT8z)z!WoC7pRlD(xW1LJsV9%V;>+g4HtOPXC=krf*3btdR^cAV)V_@VF_{F+NP`>QLNPATC9g{FhGb(!hCDv#w3Nq?^Io7?4o4d0U#0a zei!0^>2=7(YT9&FrA~V$s)>f}CKO!D^|4#By(a}8GM2GU3?sxV<1=xa=F8dxN4Q`B z!U!;9sCnc3G%F3PRi3O{HSEw!X`RvO^eax2QQM^X@QO>+Lq^Q@P?v0JF#{{J)hijX zKH#*lMyd*RlNcaiGyocdYQK5|ea>F+AX=!|DHGbNfPh;GsC@0d_9xBz&-Bo$2MLr3 znuSD5MmI%}O6qKZ6_+y&m_KM^6`|r>shS7&&4wLO+H&aG)A@}a6x#A2$|GLus4Wck zgsMq$MQchO!MQ~=YTCb~$l&V1>t}X7JtfZ{E6gZkyeuhXw!gfHuF=~RU3J$P`jIR# zK)o6Cs&Xw<_0~iy&mfFZ+GvMf?t9sM)J^!33{_?T_lr~>N8(8^H#JhIb<}v*0 zE4uguFf~KzLJZR~Q$*JWBO3l3EKR;bhq&iljLZJG_kUqW%viLgZ^}|$NG0Q1m2N{$ z-hGUf_j@neb?DXwjZ+ZSCC1YQ`wOPferr#<8IEVk;+W0(LxHYkhhL}hCR$=-kmOHL z;w34b1P}y{GZ)w2QLN$Z;}W#D=T<%f6uGg0J|T#QiY&4d#sUL{4P;CXWXN70vu41+ zPpuA%;=7b~R+5xlu)1@fq@9GJO?)Xn*GV}n1vPA@4FAbnT$=;0_$oplbvYe$Uy~bV z5^U};cFe&SE`#ki$WtapW4<@~HC9GX?xX!~y4+25bQDkAvH@mwV^rRJF)F=T`Rl2w zQ6t}8yX$^K4T9f@l6?^$k`|k2Qci_zMSm22>=#UcJm0o28ed5LF$MNjdQ`^8%a0$CvkJE|vk76>R@PMvxjh@z`~*x)gI32b%IR zKc5r7X$m<>Mfx@lPW&yFP7DroNueCMX~$@3x$bLv&=~QYHfTvG=+`&|a2&4$U?WmK z=yReMyV#nDV62GvI21oZ62Oe&5o+OA^5vBSqZOq&1Ry^4y1qf!w?wWRQA{bjVWZ&2 zy?{?F=P`&)h7KZ27ph7jRTKYo7l;`+AcX8dYyI42cI*A73vbWP2aUX`%&}PN;7zhe7p6z{tx>t&-EipQK+C_UQ*o zVxX%41mM~icoYu?PDzM|kNM{EZ)tjTp^*cGs-;QahLvy6GJq%|scS?99d+cykBkO#ruZ=Qhll zg;R$ef3uaG^K1b`xi06<(JHc5z*finX>sDof|CwVVjRmSWAEVvf$GUk5Z@cnMDu=+ zPRi8Y1EAG@$KPr5jFNaeNq7X#m+P`mde-^r(C2wY^DvNqb* z;aby-2JG2gycx!eH3(gjT(P*3Pu=3wx4KB(_~w_)Vu( z%++^=1K39v@ZwwtRey;S^x@ zyi`D;bc&f>ph3$9(+|kZqtdnKIXqF>DA}%PG(AKG%|%IkR0TN(1^ue^h5}QqA;a*_ z@hIS2zdrZxTD$k3x>qz;*6A%6x|9-PXX*0ivsUn+-GX8!ADN_FKMwI9lHMrRUI9QW z+Y-t(TuPG_Vehdrlpp+2Ha6-z3yYdjpE!;)IGlm&@mAEA#}w^ut%onWJVNUv$nLMpNAH71j+}583Apr0d&A2xbo~nE5bc?sr!fpuumSe;+&`>WrvF9O zmQ(2H6PsN0hfEP6^ccd3wgAk%x5R2HkLsHm+NKJZzigKVU4QJC8OtyyR*VGBa_Q4g zLJ(Vt(@U$tn2C4zBamjLB;S=(DT}&VMm(H$kU8RLLnS`i#M_ef{n5fFR<=(0@3;G- z1E0Fow=1xO0?)T#H=gm01P^!9o$+P8*KfL_%a{7JBlNxmTG>&`{cdPuvLM$S^ZECk zU*=aSsq)uZP0}{9sC<#>F9yCO&785dgb+* z>riJ_wC2UzZSYinQx?A?D+ZQB2=bR!O?QPMt;g>sSicLA*z+58t-{I6#mbEe`Pfg% z%Yp|AzdpW^wq+6uim*%L^}p5o^T7e9a{>X(6OngqFaT9#7`jN&WV2x(Bkoi*3{xKB z!4mV_hOBjLtgi?tVl82&SZ{KI!a@{{QbNf&zdh2#-;I0t(ScI|_7CeceneU|JwD&>vf_0qy;1Z^5ihckxpWLG+J zX;jaJpK0l{>P1<=*AKWg1IQ8(012vS*+Zf%n^g#ZVqc)<<-DQ>h) zT;$%`<_;A7_qqOrZsfHc=@utT5xZY z|55mO^x675bJ*#+P}>iAb=k?FW`B8Kso+GK2Mxo4As5Mzq>2N)V6O6z&nz%8th?{* z#eEns0PZUVD2m%1>j3ci;}mhfA#14^NMn` z&rkB!UVk7+`JnHNnw1%1f-3&KPJ>#poR8~@?EC(gqap$%ynjVd9jpz)75bEjtbqF6 zGMw}uAjSA#p!YND*EcvnKJ=a)%LFkGzp~*bzogmv6piWb9`)xr_#5&`g`^hkF!1!P zii@<>2HXk4_>U;yjo*H#Fa7Y$H@BOblz+H*cI4m+-S3rrlx6V3707$4Ed&Ik^``Vt z7SUIxxGYaE3#C-POd7#;9*5d9zHdk8+^_HwU-eT~4riQj(j5kQc0c)#qXL1!)}Zxv z0k{2IJ>)PumYIR~I)BXxFLb}Ma0u}^z#A;70;|21n(Yv>Ey%0D^KCMMZQ$tTPw&ck?UA`HR=hY?4=SVLYWb0+FRCi4w)W3)@SNs*kAG2Xja!M1Bi zC8NC*4bCwtO>{XsDmymuiGq7HlK#e)oFsneev`v`$;`8K7-Vm{)AOeaWiwFG zSbUq?F8NlmaVI#*#+7a{TzS$^cC?OR=T6Nrpwi^U$W>hyxmw@h0Q=ZlPyADpR-95tpQCa*9z%}kieXNB2F zjw^P>)a=xmhxHkhkSWJdGcFfnHXEMIezfb=ARMG(*;*%{96TwqkvEYj^ueTfJZR6^=@ zTW={kpTYX9F;Nns&9BcVZdbd)1t)C{?_>dr4?^ono2i-B8eURypl#|d)|aIzA%`|m z64)*HvO|+{Ug$e;BW}|rTK473$IJ0H7-%UCRMi@O-Kr_W#S2|$rvp1T*qsvjc6%m8DbS_0SftD@B5(?OyZa3i!K)oz(Rt*=$N< z;MhcB&9*z!J+l(0A-(r8rGhv)(hI>lL{8Od3jLm@I42dbt4TgHK7mTN^R)F{XMBm_ zwU6>lw11BWGE3041_VNbY?^3j?jkX%ss%Eq6IQnAhB7oI2J3iN>6W#bnoNy$7ubt# zz@=Sf{kDCjsjB*wntJiXWe8|n@VKueBJKQU>B5R5ABrB#@p-HV#RA6S>#n0*{XknA z31Dg?#{jAwG~bJcbv8`}?@`rus-B|7wKP{skFL zru({@8%=g{cworV)z+2UFZ^>|&7Tt+irm^2RIzbqz=FFKd$z&)IHJE7H|OC1C!wQ= zv8l3tK>mC4A-s*;Hn0^uPXY0FIl}?y3B~mP&MM9#TI90fZd1F zfSM+qOSl(Ti6vcBOP4GtHt{>5kldKH@vGb| zMge_|`H}JIw&vQw6#|* zE!^U}cQ+qvrl66i<0FDmSItwwc(h{JKj6s=$wWgS9787Y0xwz%PeTgFx;1rMfMd&9 z8DP~Q#o_HVZi7n88YhZ)*S=SSIsfVW1{$E|V>AZQQd_a6ns{CbF03 z9BE$}3Fzy}3AGvJ{!D_lY&_bN-jPrB=Eh1&GkUkYXfy87M_LNZ&r8K%wDj<1Kj$vI zdOVk{E>frO$b2bp*0*Cmmlpjr4k!XnyM3h>2R5$_m`JHz$%Vsr$->g^kXpO1>k-{_ zk>~iGcEKNdTdZ}>UeuVFCn3XWxiiLQ_YojA%=G!-Sa6-Rr^}^7p1fJ<{YlBfwI!c| zawdpf*cemoxz3{$h3t^p1cIxP=>h00!f14&88s2GoDe-cu*Q!E7 zTO(UXBd?EeAxHme*e1BZMLzH_`$NJ7j^?M*uT=Gbl}0F(H5E}}LOqM7VHoeN2i{Lj z-Kj8y$kBC6Z5FTKwAYFHFn&|EG+$WI0xUsavP&?Pmy6pw!g66Q9(-5D|HhLgx2w&C zR~jVQliKG1V?NO5={JuLcY1+b6h!?xkDrAPn4p#fW*-gv8BqkmWrQa(f#427<03qY zd1yq)u~Zxxi3$;-SD>l_htXK^vY6QJh zXQ(mGh(}0Ty$nYB{K(>Dl+-rWfpO#TDg)|Zf4}P6i?Z5% zM_XwJZ=L?ex{Gy8)`R49mH|5zVp7vvCK^s!Kg1PJO-jLV%p?SHL1W*l%fe0Yl~T>< zgMaXrE?Dm9V8*0xp{h1!63 z*;G|)SKsN2ANbMmE_vf_j@)Wsiq|@d#+%B$iBnt zvE%Vn*^S(GU$%@Q_hjB8rq(TWupyz+yK0qAFM6XK7OWq+UmqrRmYQ_w$U(M9l0tOds&te6(Di60`m+o5w&4A_ zox~fr4fov`j~^RXY>0riMmF2(bMsF(Vk<2NXIG?za9(`YA=3dv_{EJV7e?R(1Onw6 z2r{J21~lQDL{**x{w-?1${(N|%+6Z+i9E-O9@OZhe*CMj@IbfN2)ctq7xqxZ7L+~s zvtmoo4-YOZo*nN!!SuskUIy-LT)0EVcy;85*$dY!m`Y0F8F2i9{KOA3p#}CMWBYPL zOg}-CnBvkHEtLns0aD0-oIp#QD3v3nPl`toof-ryC~+uetBVgdTtMiF>7}ZR(fK;x zXeqdk2eDHlJwv6-O&K!njrd>)=s1UiAF?$n-j+VkgYjaX>>QjRDRrlXsMf>i)~Zmu z#)Hw9a+SOqrQ_AC(NqWP5{5Q!ph(aWW+c|F>Dt(bAFu>M>6+?q0jHyp8fRH(ERs~a|)$GD;t(PTx3A|m;=#2g_%$Tb2 z{{%Wqh)m#<7R!XLFR0Ers#a^GNPUZ+5jQ>L>sSbW0s%+Z?=cd^I_UHYtG8G9TN|%5 zhWIljN&*Mxg7sSdc>uR)(l7?!?zKiHHPoS!@i|OyS=xm!M4_w4350S(%opy+rvcW- zB)iMn{q5I~A(Bx>1n=CyhDpW8%bEgJ#K3hxGE=KyCLXF96Lvw0At5w}qaGB&r}Rhl zz86#YCPu8fsi|%i=Xe(;k%v%FBBcKkrf%n37pTf+J=qxzNN z>u}qhInL217oRrL+CqFwSQiQyBAre}V|7K(=do!{Iz6>HgtR>hb(LzFExc%LS+hb1 zlUaF%+T5D$#0D3qk=!q%!P<-qDoYR%zA{{dc0vO}tRX@nZ_YmE3od2)$V6k7d0uu- zyLCy^ki@<~diu~QBIS8WTj$VGSTkj+tCsV<3kFa}%>my+>#C0Ub==vB{ON_VM*i7#HD;d`LfNLm>cM1F=aAD5JU5soQz+qu*i2)^xTff*f;MQgX=iD-~ksKcD#Wn&tJ za*%C+yCCWD1j`&Ci#8DcB_x}ve%`J^CZ!c-_GlI(_xpWixak*aUTexK=Viy6hT9|7c9<9*N2(OYY(hPSfC0$(vS`lD`VvWg0-QXF5aL zC!PH1FDn3ba@Nw#?AX(KCe9}`Rm|aTR1O=ky3n-oLmIj;plT%c=>i*^2I3OM4%Y0I z=;!ytlAiHF)f@Og{kS$@4XC49V+l?ygBo1JjuG{I2lg*b4D=2>dX^~)J);Y^Py#mNw@zgOiD~aiDVK1+%a9 z`1={JE+FjqF}fsOT)Ru|(xzQ}Bwea3&lHTMB^x|qkWKf!<6xM8jn&D#ijb2(vFP=|J)GjQhkh)e|3J<1& z_}Qh{{m)M1bID#BHZp->ytJ3CbSAz#Y49T=dOlwLFlCl#wK=GRuTc@dw_i5LZMgln z3C5zJ^wTC@zb5fxq2CjBSr@~>3az}BZ^ItUZ+R&IF+vX*W zw@qKeSlb-2gYp;CA?7-<3b8Dy?B<&Oj<_XR^M(sMXe1aQQYOmV>#M}s*c$S$Lh0rJ z>T{c+9HS`~Yt;z;prb&$HSjB%FU3!}lYItEnZ&c)@Y#-7tffTP`1W3id|=xq!~Gf3 zmiWfvdDg1A@e~;^+>0bL2ql8SFv8#s5m0;3AGF-&5#OTyHRRWlT(05g^LwYB9dxRE z+N>Sjj7vX0;IM)?+}_lBmULRn?yT8|HK*=Qf#{cqCH<8fwMSn! zXJ+lnY}}wD)di)@(}Ur;6~C1NdKw{ zf1!!u?QHd z)F%hgH53r!8n30ar-r8nW^Wh1(29mqmGZL4ZbtKQ@h(+Uosn+SG>Tl>;TvJc1D&Ls z2r9VZ6&qwH(}!wGJb>o}?SuDFTbg6oRUEhFU|cPcDh$ya~6;-1^k0Il#TI55ld zdS2N^lbqS^Wm8%g0j+A)T&_^BH^r->77TROq&5fCAF|{ahEs2S=l#A0CZZzlE925h z6h>SQ%Ip|SfAg`JIR-Fgqh0-{v~YwwP#4%Ggjv3!fU0d*CfSqr-Tgo^hltLrNfWML zlC+iuY!vkkmK3Lju3nAeZ@42#=)^PMgy$zjGy%Dfnmp?HzAzu9Bfg!$31Rhq&196Y z62ff8`K%O7Fl>*;#2>K}j<2G%HJ|E7YZYt>l?_#8=+6EidD`hfbqjQ&$*N*53 z>S)Dd?a*A?8OP@pfgL_-A$}UO;1)#8<3MmJ$#OaYV;(I252YXL|NJ$ z+&KeKyU&6pF8C2;9gu)w5Fc9^R}VCV$_Tpf9@|6Y`Yw%Q#d?BH%KB@{uPTE-qDA4fut;0Zo<|RA z@8uviEh@Z!mJ*r{4hXlHN2v>XL((@0h`j6rh3+6xJ8qUArnz5mSp^>G{-`1x8if}cgo%cBqx*w?96DDL( z9m%{*I_MyB=}176J^67k z(V*iv8*}Ctyy_BUuKC@y6{I+(KRF@2Z&J z7rpTMT8<57FJrmng->DgmM)sP3*~C0dwhe;UbsKE&zdj%O{mww^o?!rkR|M{!t+_z z5$Zq;3e@})Fo5~?0JEj#l-Wen{%~4Jjs#%14kBMn1@DFwiQa}|n{AFx=UZfEC`$Hz zB9QAiksr^f-_80jsTeWl_n5@r;(vx=eW|RI#H`~6PcqnJMraA>VLA6r&9hHnSR$!a zbQy&j@53fBxj_*OlFah3+2tYm+D=mwf;}OJSFeK_T;vs0kmNl3RjpWV?HUw*`X_SXfx9AmSlg>m`z!Jfv zX>lh#3_R;d+8?71-i8|hzX9a)eUBegkn2_m|Lzs0xctNh@~4kW7YLs7Yv4>4jw=u- zsOmi8I8%1>-P59$McsQ}B{FG@l2zeXAuc0>(Q`O%<)v4r3ECdD=IO6FC;CKumKH~4*?orXb8`g?4PmOZsZ z>y?qYf!Lwqr77HJtYFK5$FxbLLE-(#2^3rW9G*)*v#`{r-xbX)iEjxqLdw;Fh4WbE zcDA&K(k^-+#v37 z(WX0D@3^K`g`*TmvPDAB$~7Fl^geGH+>ju1k-uLi!>AQGM)rQZ?!&5YV%jw#+{xo! zf(?f5jz=1t*`~rmg#{?NXMcoVeQj&WszRHHpfBL6RwgXIhK^x=zNwH4bjNmHbBWWR z=I0d8q%$yN)~$ zE-hB6E?a699Z)$lKGe-9i8;OQ#Ivf)ZPGivDXKL9TsJ?|p#j29;_?lY4C17RZGAIZw+W z$W|B;EUuD(S}o8E_usZ;{jjo9(%eL%E*h2}qsrN#&&wW3l=cK(WN)90v|4)(MXf|i z_0{d~hcUjdn>R0Dg{5w`>Tj3~Y;>-sEac3wwgluZy-d{g-Q^4-TV2`lPj|^{EtOo2 z^AxCy*C&r%G5xh%-X>=#SB02)ke$-D=Dd8Wzg}by0WQ^=OJID^8)5C*5f`^I#d%M1 zT<5D;xTC*Nyl(V3v+kxj#|V-`F%Gx}TY&1U4uIP_n1WY?=umuWuARl5e|98HC6K-J zA)tyroIZjlTshgGVmw8-7dek+06cD|w;?u9v4VW+-CDQxk)}qzn35DX)rBrS&EC^- z5)o9|w>c|6bP7E@V$FXY@P}^-lk;d@ZjUY!PwoGNWWxe}twn#b|HGYsTphKr{&Ht% z?EmCru>Q@*{GUFzf05^y1VQ^u0fdm7Z&c!sc_}!%UoP@2j;f0g(!-WX$XfKkc#v)_ z9l{Vl-N38yi8_;@p`H&{UcganKzI^`kQxHkP>;Rh!K;+CEz0JQeskdUVBO+7yAuRy zxmpi3{K2yuXjn@@buhL9f(rf#Rv_L>rx>ID%`p{{m@%`6_#?)0zaB z%fgsHCt$N)3V6z+ikmm)#<=ETOt*sUOWCB16QZQ3Eft=)X?ATU&!-2ir#CggGyiSk z{EBHV*^Dx*T>sPMvpJyLxiNIcw`Nki)wjjgCI39emVAyrc*guGIsZYLcPSOyr+xzd zW0VleYs5%HE9`Ba*O-{UtDr2Y<&^$M6;;Soe-=9e7|uu7@HIp55>=?YoKTIY`wc}Z zHoXp3>j*T(#3Jd4e&MG!v>X*oKJDdC`NPJi8(Hxa&T<1b1xiJk{W&J4m_Ahu=L=jh z_=3aZGDLhGs2FQfFdg8&{kS2tE139Zk1h-feStu*1 zYE=)OGv2ENR3(qTH0Dq)< z*5B&o|A@5g>`neR6}j@cuse`Qxc>2t9E6#6Lp7*qhYosEJQ)!p-Pl^c6E$wrNz=ta zKuJz;iX>v~9DSaIWB41MJL4Vgc20EmcK3@NhM3&vBpueWWbz;R&Ru&$V^U_-0_S;xsBn5tu z8UQ@9c@e#UK{%gbMqRGJ_rVACz)*anyh&aO4GqKFv5t56*&?;t#KwlLrS@?y^2QA`^TGkO*_mb3)llm5cTEql1KCpVxvq`_tQFZb(a| ze5Zin)e5t*Xfz;*GlSe8&qhrw)6^4x%LY(-Ou@(Fb2YP;LLW1Jr!}Fz-$sPz3Kd0Y z$v>|*`8NB01MB7??AylnQkspcKg@zRi3_s6`>AWWMb#9#{qUUwX_wt5BA>%*PpIJ{t-e{UMiuh~I8S-b zjJ``e*T#M_MCn@`icLV{ka+j^3GMEY6`dI~)*MoZyBH^WFWJk^Wx2;ChXaDbNJ5;W ze4~80pz22 z&lCI5qryF(V&|KTN2}paje`q)V0}1z@D*g1(%J?PS`GJJC}k+HUIV~$Mx@eqVMvY} zCpVwW6t<_uqB8w}p)~>5EcY&Mpo9hZm0{-5_BuX{gt{eFq(v^i)+=V&Y@ILpjhO^C z$c#dbH64(3>Eu6$Ma&)mfBqX4bA#kG_W-=lE1gicswsE0-)+FT^ zCT!XkvN2COhWbS!n9-cQGDu|+QI>nkvf!QIGRY&BCNPf@vxu<+7LRy| zKfM}fO_S3E(PB=70!s?2@}R(RI|#C)cU(PQ_1qo86vCoj*m-1-p)HQTI%miFsNaUE z{f#DH<;|+AEO&)bMk}(ub4qhBv4Chjn=@9|@gW6y z9*HAJU1-2ndrr^ZTb<4tw_+=03{)QBNPzxuno;X*Sn|@E<47w3H*HG@57Rt&3z*j} zQ?h?gR({k4!Wt`lZl(Q3MyCotsG*5-vfhjhD%sS13+U~sbwMt1V^IG9{RZ@;fP)G(m2IcRAWQk4(&*PwpX%hRp@kwCSWp% zq}L)=Uy7GaJ!EcFB-9GaFQd$I0bC}#P%f9Ce8>!mKr&A89=8Ip^` zJ|6N$!^O+9$K@@Wz2pxW>&lc7bOE=VOPxqsQYNGp9j5KQ3&M z#y2Q0!!F_GZnyl_6${4gY4dV3HJY)`wy%fyioY~m9tAbhcWoeeBIE9g|MYZpU?nza5p1UQ;zT}7^)TJQgr7w?dmi7m z5NdOUTTuWBqIWXTsUq#FpYL?&7KPBGYTHRc`^td?oh*7}3xq!*j(fLa(Dg+powh$>Q&#&TdPq6RT5z9cNTQFR(hY{cI1!O{w{)hM zLD$pg1I%FaQ^`5+H71Da<+7h4DmI3gyW8Dmf3eHJsZa(^cR+r2xHmCNe8$nZCHp!! z77??ntMPDYqSLV$9E)%*;uUHL7wtGC`|d&XG?iPZr8wakOth;!A_zI@+BYDbUwaf31FzAH9CR(0ZiHjn_3IR$6#Bvl z4)vp+ZOaZPvWHC*gp~lqG;;B_Q9>1lDztat+Y$d}TGPh53hcz9gkot&fIQk@t{vLF z?hb*uvgso40?Y#mofa`TC0uDk-P3UDv0p8DpS#F1q63CK_LXhSp~gdj?oJxx-Eg5E zMclXL<{tbEWo@R^dI1)YaaYohe5jL5OzLb>1UjGZ!w9u-2}=(Oc8ZWlFp(PtlrF`6 zq(u0sc&o7e--d8h(nD3I#ZJ=!xZl9RpL;lTIBUBf(gt1UXKk+yc!;Y>ySSBBNgJ^c zK~q8bb<1Np3{0Dv$2hE(;K0jJiBz4lZiDIx9G0;51GBq>o)wL-OH)z^J+4$r9#~cr z9JbJMYfmh5;WRE*AzTYl&Gg*#V<@fZ&-%NrmzVHlR)gHZs`ax#C)S}_Y+}4eBGgD^ z1shFg2fSiO&+FUIN@16hC5_Grd43>WIZ;TJTMF-kZCP;BIy5^HrsElB&?JKxJ9yb( z7cb~wa)D?BSq5`o;zwJMFu`1V?C@_)bgwMk6J$QKwM{=b<6flo|XwjtsB;+XIo&qCL_76f4+FbBq5a|0kH=0C#AY$45+8*PGEiTX2Y z8n_s$h+sYxRHI{lB()gL&wkVtsN#XX$OEEmP63~R0kH>~^;R?Uwj-Cpw*H79d0&(9 z;29@q)qO%U6}##~;K$5zqq0yA(t+!{bZ-1nC{e`si%>v+eB?|G%MR{ZbQNW12ik2O z)1(yr5DkuyfE)7>7f3yfZVwOKi=9u@fWuWHt1`UTtovu}CP=V+{Js}$xhDvP0; zOf%yP_FcE%(#c8>Ts-F4Qv(jJBT*Z%Iq9Pha{wUv|!Mf;>yBrBahi zmv~E;=ruS@AZw~|S@OAe>7LoLa3?3F2W{hKo85F%OPo^<%&B3RQuDs78iPXCs@c^aKU|5VX$kv1g?|Xgdb?`>6YIK z-lK1nS;uuy%MmKm9GzPC+xl_s&nJN{vwzgw*NZmL$A==up;v}I$$N8)cMjHr^1_82 z!!Lg#n;xy$5~*Wto({BbZIl_UckC+ZMnVyh=GQ1?cr}OjGeG;XQ<-u!-pWZXjE4)P zOs?Tre#(lY@ol}weDs{FG2+nOn!8j2u7!65`Ec?IX}>7%N$bN*a(fbJ+Fle-@YE)g z$%uH=Hyb?mdB-y7Lh;d;?A_UtTF$^ZJYuc2t2ot#;gj>PHgefhgA0%+7eD&tg`codV(u!>jBP!_#Y8;%r5pY;p*$V zGx35YyI0Ji$fE5***UO02vwp0Wt3;2Zmef#2~<+t+YOA99hu61!{Qdh;$_BZ+7g@C zyEs4|#N(-006hTqy`B{lV_oGGq7yY+u+ZfMb^qDc%F~h}Cf@iOSQ8an(2mcZ!}p_` z-{b4&vy;09^Dd1>6nx^20&ax?v9pys0dt5v*96cL;u-;W#OyL6mRvq@_>8nD0$x3I zcfP1kh$OSpmbV*?{O8*3OF(97E|Ex_wX5#RY>~*k9&ay|uTMl&MR6KW%M z<j*-PKk)myYaCW8O8@I6c^vzy~8 zUMML}3)nI8Fp_m`##C>K64+TN$qw32!|wnO^Pqbsb2 zl;b1<-K)I2C-q%Ul?oVD4;ERUqsbblhAjE-G_h-xD%jw#y6U>B6lxQs=9exjA@1k& zB?Np=pidNOenWV~+UDXndaN9`i%+#Hr=J}TtI7ztpN15<7c-mQtCbhz=dLMuUXKbM zU+p~H70L`dWsL(f1<$@#nnmTisjY*(%Lrskg4*j9;X7&=Eta|u!h)ywE?z;`qaLL% zFZ1q_wrjzZ@_EIfat^(DwzJ!DD#XWDUmp2@Y2@8Afo2z5&#tnA@g<|khQ^2eHkwGibz#j920o#>un1AOqM5ToCudXKXa#M7&DS5L z90Q;L4N4W`WL{pMA3eX_dpQ;H9K77NLVs-=BvIzwzKw1!gq3}QvdFl81@i$w93>n= z2{x9h9WD=m@5kJpQv$hvAB|fRwgN!l)*PbipWt$#PWYebcGfY1Ye=~hihl+#t|)`h z*SoI}U-ZXE+mEZ3l01v6mWhOJDK;v7lpSjTnLZPhv+IUG|2-Fv^K)eC4i?!!9tu56}4fWoR9D}=x*a2z~7 z-3S0QLp%_&bP=0dd(AsEQeg0jALrI$ifIy8G1g%}^$yM~g6T zkd^^;6lps%dr+ITfp)Ym6|wP)-jGL5#K#V6Wm8GbG{mipF0&6y#iSxDZ5S5ZY#s__ zV5<1^osZ{RKrJmNUD#k%u*sncSO{t}kr1(kz!@gcmb+^{c-mnV))$HwO`P!hpLa3( zs`Rm5CaR1H>)RO5^Pt?g+~W~s5VE@qZ$?}M&p0SH^hIcWK}B&Ey;Xz-qNDP@(S)i) zt2i54og2$zXqW(7EM0tCp1}5G>`g>YiY1C=5y;l5hU@dj#5jTCNbOB||GT0`H+>N; zi=#^p4e&?W8J0tbJQ$vGQZ^B+*{bTT)-Rr;6iFd18l?gT>E-F6wxjnlL?1_> z^2(UueJ+GK8)ZWzN|BQjzQpoBDw8}49xQ76h@``0*{TZ~T)zR=bZ3kUV*Bd9ubhzV zOR9|cOz#=b8_I)n5x1aY@R8SI4haTV7l>1<{0JG{O_#+cPZxb`?2ps5EgUr|+7ZjH6_;3!H`Ga;iC(ZeoU3TznxkR#VN#Gef zTpa#uVdY&}r}Kb*)(^uzL;by*YdV3#_ez`y7J{p?5gk7V zE-%=>UtJN*?Wq0hQ;*og^190$xYY>R$9qHqco~ShC0)v(A}zdZRL3@FwcReI*)MpK zLLkanmgQ&kio59tQ2Twg_-*0N0_C9{R1;?jZ@$8a4i;M;o|nt_a(l~WEh(Q2wGHjR zgMV-3gKJ+|#WRdt$&hCV&ULVGeQ>%jEV@4@P& zQy_FEU?Y9es}%S3FcIRuPmn;smhW=hZliQ}K*J{j_lGqyO;eEq&Qq372|esuN}$uu zDwAePjzxE-6gzoHb;Ed-Ds%m0!~j1#4)PUR=mUUkg0cdUeM@s8)Sik-xDbM2=MmU5L$|$Vl4>PkN_7>t# z@?ZR@k0n(fN_%ojbBMv>*?*Lip3`rNjsUW zcEjJ7#fBVkH_UZum8IRqYo?Um78zfh<*b7>8mnW!tryarj8A~Hw&n$Dg!EQA2m?Ia zYLm1GS(@7Mbi1RYcq{oZoyD?mw+ufW(+K;5%1r7LITymEoz#4zw;2Lp@LGGo$_$1C z-l(q+>)QyXRF9*0Vw{`=qdNqYkgo|7Bp>A{{{%xrZ97D-b2pDCWvdWZ7X0Z-oWv-$ zM=7+wBHfTwZ6D_n zY?DeA(OQOs5^f&B;C@p)Z6$i}HJI7j`AsnHVNR&9iGHQB&A66QQ*X=ByWK@eBA$D)1F$!<(Q1q6zW%7p=|C~tm(Wt*DE(ofWPgXA zQeO_*b;M3wVDu2po=*-_d?PK1^dapg$XWeS>pEom3TBx)9cb}iZjJW?WS&S6OqWdQ zz=q?;!?_4;SaOREq(U*q0|EA(0k7~9GbY?X*n^q?k8HR!bfzu?LC?}0Sd1O=@7VI| z0-y_swzcslXELkM$h!lEIhrn^X6$8X7;@NAAh9#fIE;0-a^`&N4E?JcCF5sTm-d$P z2yz#|FG7*6X0NfdD*6w8;P6&=s1Ka2YhdI38f|-gs!T3pxyL+pM5HIgHV$8{LQXjL zkIFyb5^Eyjv?wdLIl6qvgftk2jaQ`i>wrQdHZd6OYC0Mbq@;8fOrzBq<1*+B@00+O z-^TUg8chWnOj9Znj~v!V7r#`WSv{{1TOpFsBPRk@U3ner6S~*8DGe$@8amR9M)iCJ zvl@`mTFIF8meaveR4{;b^c>}B?xVmO=D}hzqmITjGJt=cSV+&+q;*f*5++%|>w=+- z<(#2~5j!iFYJ-T@?*cE$dMP1Gu?gHh#|n{qKC2}>&m*dIYXRXn6Epen8HCw-Ye`=1 z2d7%BO7-xyOzUhhbx864&}XyVgBOi25X#VLy&Gnzlf_QAKf=cb@#xcb=%h)Cb*3P@ zD)+?k#Z?h&9V3ge2BjWD67grlm3!tYU6+nz)nH=1{Jc`CsXt0&rLrhxIo6oq4_Xf$ z=U@%t(Kgn+8N1>mCNb6L2ZEIgsFPcRS>Zm-eF(7dRM$x`3tSi-8%hleLXQ^{ zG0f2hDm^+^?a?^K)>4rp1Er@CW5F6aEBx^6FKTCm(lF?xbsXkmj5cV7EXo+*tfVJQ zXGz>o-r-G_;H|skZAh!mT`&ciseoVMODg6n?AGC+Te^2~@@_ zKFB5|9h18i5d+x-;R}j8;P}ayhKr~eG$&soWhnj0pn>vxPC=l8vov;fpkV}=7czI& zA^cO~R#$C(+ayKX=SfW^9uYGhtxp6CrC2#?xHh3(SQL3=?y>Ot*lo?i+9trO{JxDP zUS=M3PuKI|q~rd~cwjzLxmXt3RB1Uh}~yq4k?^k;>bjnqbz-_1pIw@Ms^3l(1Cy zG)Ua0k8O0O4SblH5}jH&#olA!IS$0-o|rvBGxADZ&zWf-llf_De05{=$z1N-IlwAo zK5@ZD3iumsm|Db!##qAc%?J-K&dEU-|IliUD9ZJK+~gj!_-Q=nlqygGHMsEnXt?gD zJN;t+2pg+;F^`)AMJ)2grxJzRgo2vnt0r2s!q6`Kex0><6;*Dmm{5v|NOr8|h^T%V z`-fR=G1ACos{@bMIRcqR^;t7vpLkA1<)4t3mP|4MZ20>!b(j*k9zY}MlsTB*`ldCW zgRf=`Wm)MBOeI7UCgQO=9qg%0+COqJi9TxH#ZXw-ur-iwg+|I703&WF#?c`4&jDB{qDRiBw4kK9znh%!3W z;h%2f-Y+c2f0AFGYr}oB_i`v{Lt%IW?jhznB?>#ZUq>W^Dcj3&j0I+q(uJ>zhL3Ez zSF#37iXZmGEWkTy^JipsJsR1TZuJx5is}=rQ3rc-D!@D$R41iJf8J5>%6&KqxrG$Z zqPNBkVgBG#fI#q?R1bd^@;+5V0MheE?}RCKETf))ei1e@H8-aE33hM97c$`-X0P>| z36UJTw~Kb?TO3x!u4nDa{NA|2a17|p<)K@W2Pu4{WkuwU6}SsJT}k}9A!dN^Gjw2! zelkhyf;FLMmI&VKd#Io!|1UJRrV%&TJBKJQnKknpTaAbGWt3*D9`z?S(U=5jm9 zv+3@AyveNG!6v49_Yq_0_yl=}i2tf{Bh6KN>Uoue7*;*ovCfB8AgnMynV4Pn3`-wV zbFnfj#yTAq$L?r)#VSko96w6AZ&p9CGY-2V;~X4PvSh*>WfzOFoQgHSyRw0sfHzv( z+tVC~=jn5J6UnFN9CTS=R6dM-EMEr)%9N-2{Hp!10JwkfyMM`s_<4s9nd9(mckeU= zI{-xdc`W`6>g0%O(}`hX@k`a29Ur_M3LQT!f_5$vVQHPg+-2g+OmGbVKX!;966Ioz z7Wq{6wixbbn&iCHB;{eHq4Fkv1V9ohCO$dUn?zZHCKurKswMcSjOpIe-GS`hZ zn0JG8>*{dA40g#FH87IV*R`=Rda<67R=V&*ZgR9NbMuYaG|wliVY0zC$m%n}sXP7H z>s8J9dwbMgTp(YJPrYGm=Y@LPOvZ9k>XGq=;2E-*Ka&PzgcH6c?&p17{7i0rn;&Yh zyI@|&B&+UZspwT=MyV+&G>0?ju!NFg5u0@LvMl$KlpeCyePPsn)ur^tm1c&(jc-2p zgfhBwOS`eKrM#G`tHe}c&OMFZu)lcvVyvugj6MnTm9^z5i96?!?Cg|LPNymV^hu@3uDcPat);W@9?>nBl+Y>J3E_T6$e1ZCEc@V?z7*`l#&jauM72mHZnNnSo%Iq zkUeX2Z^KJbK^$@cioUO|H2`v{$W3yKE32yJJ<;h`E59RPM^SduVx57b=MbgHl$wqq z(000)No-+pwB(1u`89rx#&1aari%T#$C&tLzZPeA#N5{Ea3@HmEiP0M z(^iT2P#Z_T>_h0J)RbGyA3DTfC7X^>v{?odK_NtU(%y(5Yp#o5iWQMpLHDf4ImKFq z_;r?|TV>&i!qH~wensmJ#QXw_p;1Ss@h41c{#uJ2psh>LVOeIly3V)@f(yu7lU6g+ z!{POF*+dg|Goyyk5V3P-69YG{>K3xj5JhmTQ)q3`E*8|C?d{I{<{h1fq?>#F`veUo z>DZ0O#fn_$&DHZ~hQ|7uq^Vvpq9uA|FHvTvBoWMN4YUfR9sc7&s4KgKaEwBX@PVgP z6;cWHs}a7s{g?&0jo=ov>iAm0sUh6bk8WtjKlDndU$l<+Fm(dhb%n0-pBTlDFp#Pv ze|BZ5p^s88p86OaxzdkqmT6-BM7knTSvbWXq42JKdh&!`+_m$O7L{6_wQ1;D;>G0Q zzJE0|(s$T>^y@>Pqu`%ZEE!&nk0zuZ&r6EmG)sDNLGengn=P+Di%-Nf_jd?P6@D!D z+;eiUAun}um&Z#&@q|~YEw3_m z0g!jGf!elug{Gu%a-lW3F=vA6D`aUKuV5*Q1}0`S4gfbWk1~6!%a0!iCe4l{PB$#v zU@ee6&($HBerR)_dOe<1Jy&BGnR%qu0gvUTXBqHGbYs{2%)92Y|p^s&-6Kv~pJyqD# z4>krTes0qio)1TCM3exXEj#mMJZk!JTADnd>yM@@98@bKPie!>(SYKVmA+ zRU_LUiy%-4*mB)!btNQEl!-4YTlEG(;8p#=*$5?gokwFe{Ec+?Y9xc1cE#<^%Od-7 zS+g+h7{Gsn=n#w(kp_6-P-?_*9yXE-juXb3>sRcxau)D^gV6SYzDCV28pH z24l0eB4&xE5Was9S2nCTW{jXELk0ZE7Pgiy%1UrbCK@l>z{yLIA_N3GXz>^vNGLeH z&q`rifc=8SA7%gi)5i=jH|h zYh%NHMbCV77-Pl4OsR?Otg97wE#+%QBn8c=o;7>^z+EIlBB)UAZ2z4<%9xYHG%Fv( zbh3K*&u>eTALOhVyIG7itPV2Y?)l9j(VL$t-rn9`69kf!@L+>d&^dTWbok)M4QA_& zx?B9Ot6s%EU>6yx_=ZPo!;6PHF@6;d4Z9-K%axSIQ!REf=B~#E!2!}gTFM~qT<8fg z934K`wWiuV-CTuOsfr-B(cd)1<$;vmk_8pUKFNv79b_0Tf%GgqLxpSX-nS~ui0Vq~kT(yO7st_=6o_763%sO(&{n=qV{3)MaGC9!_5#VFJyAg51`z*QQJ$p%AbeY-8W8P|Me1)=4d0 z$+(NnGbZ+jadteC+%j#*f2KJU&@IThS6Wsq)12A@K5=X8R-~P5K|OWs@XU&0E44g# zL#z0dM2Nr*4BZgpCFEW8DQoq1w~~q*bgOfF6yOk|>~sJrpI)O{H_J(XNhKSJs%vv2 zVzvye$R5OAsl`0e8(+p{9Z@opr+?HxIn|%iDIaxBthf~%kPX)gz8u@GmB1yGHwvhPUc1GxM6A>4bdF2M<{cwIFkJ^4 zGH-GW00I~ewSj*=iCEOKcIlWWbME8KS&JWyYinofJgPU8c07P0uKNh{^!N#)72Lx% z;H0xQsuPDvtz1Mrq_}AFG3dO89bnP8y4^b!W>v@W_!{HR52 z!H_%yt>7mAj8EK>xKQD>QQJTNLJ(x_fxg19m*}8Al%Q**=$4(+sgoCI!PCAD9s}Vr z^~LdHA*tdiWJ6kA`{vC#dyDy<`RQite7E+;;*w=W9hOJBq=C~wO{BW*dgc;w&-Clb zRk>#|>q`0(4xNV1y6pWLt!dc1g*sYZ9S#|){UNn)7>u(eGN$WGIWvyKB@)v)(e_&3 zFoIRc$!Wt=+o+`V;`14YrbIm+bLhMj6G>@@NJ>1|(+g}G5L-`&;*Fdoz*cUC(B7XH zQS)YX0gdTY!o4+?>W&v%vni&N*K+zVobbWlI&Ti~4K67|U*{?2qD3|Y8TAjFUN4*6 zZji^P41#;)AFa~Ky0pN6=uVu_<^U<8j(9qI?JcVW2mypms?cT;KC3mj8+NXI*C5Tq zSQQe5LKUTtL&R*Ukdhtelj`}QgE4I`o?C6}Rb&g(MuSmUQ7$=t2D@`agTasdawSBH z9(!8SidNFt|F@9phKJFCPsBSvmy{1UP_hdfy<&uOsBrdX>=pNyT(RE1zRHpc2#8`7 z_&>(5_rM1zAfTDBt-q22;DGS{k}ImJKm&mywczO>zrUSaVS#|(Js3dm@jLJMWiR_L zmg#?35Z_t;$;Aw&CGxO$`$?Z36-#`BI zoqlKd{7ds^EXJ>ZoZpanSA72IocsTc%lWs$pTP~k;x&H57W{u-;qS1GKWqJpg7|Y< z`mZR6-(Z6LyVn0E7~;<=zf`Y(4(s_fdHpvi-#t5j{$~Go4*S0he@?LYHPq)f5J>)J z_&wt1UyeU5_P=Ib{02AW-yDBVzWA5rPZ#AcJN|F1(frNw-^}^{QvGRM`umC${O~u` zUnb0dY5vrv|8hC~1~%K@H2->@{$=`8xBN@X{u^FAe>459Z2y<%&xZ0#<@_5Z?-%r+ z=llO@o_|rm0R2y$=g-rnW%@UTstWjj^`ZaPgMKsq_b&7&W7a$4KllHCNPqRD|3(V_ V?g9V;LVSNkzqg-*_d|hz{tq5}?E(M* -- 2.16.6