From ff258d0454ad2081e5ad28954a8c0fb0779bbffe Mon Sep 17 00:00:00 2001 From: chengxingzhen Date: Wed, 28 Dec 2022 20:25:05 +0800 Subject: [PATCH] =?UTF-8?q?xts-=E5=A4=B1=E8=B4=A5=E7=94=A8=E4=BE=8B?= =?UTF-8?q?=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chengxingzhen --- .../src/main/ets/test/ContextJsunit.test.ets | 29 +++++++++++++++- .../test/addContextAndAbilityJsunit.test.ets | 31 +++++++++++++++-- .../ets/test/getAbilityInfoJsunit.test.ets | 29 +++++++++++++++- .../ets/test/getAppVersionInfoJsunit.test.ets | 30 +++++++++++++++- .../test/getApplicationContextJsunit.test.ets | 30 +++++++++++++++- .../ets/test/getHapModuleInfoJsunit.test.ets | 32 ++++++++++++++++-- .../entry/src/main/module.json | 10 ------ .../signature/openharmony_sx.p7b | Bin 3443 -> 3650 bytes .../main/ets/test/ApiCoverAbility.test.ets | 2 ++ .../entry/src/main/config.json | 31 ++--------------- .../main/js/test/FeatureAbilityJsunit.test.js | 8 ++--- .../signature/openharmony_sx.p7b | Bin 4239 -> 3650 bytes 12 files changed, 180 insertions(+), 52 deletions(-) diff --git a/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/ContextJsunit.test.ets b/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/ContextJsunit.test.ets index 2aebc6107..6f8d8ca86 100644 --- a/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/ContextJsunit.test.ets +++ b/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/ContextJsunit.test.ets @@ -14,11 +14,38 @@ */ import featureAbility from '@ohos.ability.featureAbility' -import {describe, beforeEach, afterEach, it, expect} from '@ohos/hypium'; +import {describe, beforeEach, afterEach, beforeAll, afterAll, it, expect} from '@ohos/hypium'; import Utils from './Utils'; +import backgroundTaskManager from '@ohos.backgroundTaskManager'; export default function ContextJsunit() { describe('faContextTest', function () { + + let TAG1 = "SUB_AA_OpenHarmony == faContextTest: "; + let sleepTimeOne = 1000; + let id = undefined; + beforeAll(async (done) => { + console.log(TAG1 + "beforeAll called"); + let myReason = 'test FaShowOnLockTest'; + let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, () => { + console.log(TAG1 + "Request suspension delay will time out."); + }) + id = delayInfo.requestId; + console.log(TAG1 + "requestId is : " + id); + setTimeout(function () { + console.log(TAG1 + "beforeAll end"); + done(); + }, sleepTimeOne); + }) + + afterAll(async (done) => { + console.log(TAG1 + "afterAll called"); + backgroundTaskManager.cancelSuspendDelay(id); + setTimeout(function () { + console.log(TAG1 + "afterAll end"); + done(); + }, sleepTimeOne); + }) beforeEach(async function (done) { console.info("context before each called"); done() diff --git a/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/addContextAndAbilityJsunit.test.ets b/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/addContextAndAbilityJsunit.test.ets index 9f07dcd3a..f05b949cd 100644 --- a/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/addContextAndAbilityJsunit.test.ets +++ b/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/addContextAndAbilityJsunit.test.ets @@ -12,11 +12,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, it, expect} from '@ohos/hypium'; +import { describe, beforeAll, afterAll, it, expect } from '@ohos/hypium'; import Utils from './Utils'; import ability_featureAbility from '@ohos.ability.featureAbility'; -import ability_particleAbility from '@ohos.ability.particleAbility'; import abilityManager from "@ohos.application.appManager" +import backgroundTaskManager from '@ohos.backgroundTaskManager'; const TAG_TEST_0100 = ' context_isUpdatingConfigurations_test_0100 '; const TAG_TEST_0200 = ' context_isUpdatingConfigurations_test_0200 '; @@ -33,6 +33,33 @@ const TAG_TEST_0012 = ' context_featureAbility_test_0400 '; export default function addContextAndAbilityJsunit() { describe('addContextTest', function () { + + let TAG1 = "SUB_AA_OpenHarmony == addContextTest: "; + let sleepTimeOne = 1000; + let id = undefined; + beforeAll(async (done) => { + console.log(TAG1 + "beforeAll called"); + let myReason = 'test FaShowOnLockTest'; + let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, () => { + console.log(TAG1 + "Request suspension delay will time out."); + }) + id = delayInfo.requestId; + console.log(TAG1 + "requestId is : " + id); + setTimeout(function () { + console.log(TAG1 + "beforeAll end"); + done(); + }, sleepTimeOne); + }) + + afterAll(async (done) => { + console.log(TAG1 + "afterAll called"); + backgroundTaskManager.cancelSuspendDelay(id); + setTimeout(function () { + console.log(TAG1 + "afterAll end"); + done(); + }, sleepTimeOne); + }) + /* * @tc.number: context_isUpdatingConfigurations_test_0100 * @tc.name: isUpdatingConfigurations : Obtains whether the configuration of the current ability is changing. diff --git a/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getAbilityInfoJsunit.test.ets b/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getAbilityInfoJsunit.test.ets index e74925b20..bdbbd3538 100644 --- a/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getAbilityInfoJsunit.test.ets +++ b/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getAbilityInfoJsunit.test.ets @@ -12,13 +12,40 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, it, expect} from '@ohos/hypium'; +import { describe, beforeAll, afterAll, it, expect } from '@ohos/hypium'; import Utils from './Utils'; import ability_featureAbility from '@ohos.ability.featureAbility'; +import backgroundTaskManager from '@ohos.backgroundTaskManager'; export default function getHapModuleInfoJsunit() { describe('getAbilityInfoTest', function () { + let TAG1 = "SUB_AA_OpenHarmony == getAbilityInfoTest: "; + let sleepTimeOne = 1000; + let id = undefined; + beforeAll(async (done) => { + console.log(TAG1 + "beforeAll called"); + let myReason = 'test FaShowOnLockTest'; + let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, () => { + console.log(TAG1 + "Request suspension delay will time out."); + }) + id = delayInfo.requestId; + console.log(TAG1 + "requestId is : " + id); + setTimeout(function () { + console.log(TAG1 + "beforeAll end"); + done(); + }, sleepTimeOne); + }) + + afterAll(async (done) => { + console.log(TAG1 + "afterAll called"); + backgroundTaskManager.cancelSuspendDelay(id); + setTimeout(function () { + console.log(TAG1 + "afterAll end"); + done(); + }, sleepTimeOne); + }) + /** * @tc.number: context_getAbilityInfo_test_0100 * @tc.name: getAbilityInfo:Query the current attributionability details. diff --git a/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getAppVersionInfoJsunit.test.ets b/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getAppVersionInfoJsunit.test.ets index 8cb793202..0d97ec60f 100644 --- a/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getAppVersionInfoJsunit.test.ets +++ b/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getAppVersionInfoJsunit.test.ets @@ -12,12 +12,40 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, it, expect} from '@ohos/hypium'; +import { describe, beforeAll, afterAll, it, expect } from '@ohos/hypium'; import Utils from './Utils'; import ability_featureAbility from '@ohos.ability.featureAbility'; +import backgroundTaskManager from '@ohos.backgroundTaskManager'; export default function getHapModuleInfoJsunit() { describe('getAppVersionInfoTest', function () { + + let TAG1 = "SUB_AA_OpenHarmony == getAppVersionInfoTest: "; + let sleepTimeOne = 1000; + let id = undefined; + beforeAll(async (done) => { + console.log(TAG1 + "beforeAll called"); + let myReason = 'test FaShowOnLockTest'; + let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, () => { + console.log(TAG1 + "Request suspension delay will time out."); + }) + id = delayInfo.requestId; + console.log(TAG1 + "requestId is : " + id); + setTimeout(function () { + console.log(TAG1 + "beforeAll end"); + done(); + }, sleepTimeOne); + }) + + afterAll(async (done) => { + console.log(TAG1 + "afterAll called"); + backgroundTaskManager.cancelSuspendDelay(id); + setTimeout(function () { + console.log(TAG1 + "afterAll end"); + done(); + }, sleepTimeOne); + }) + /** * @tc.number: context_getAppVersionInfo_test_0100 * @tc.name: getAppVersionInfo:Gets the version information for the application. diff --git a/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getApplicationContextJsunit.test.ets b/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getApplicationContextJsunit.test.ets index 9fa00471c..a2b446760 100644 --- a/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getApplicationContextJsunit.test.ets +++ b/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getApplicationContextJsunit.test.ets @@ -12,12 +12,40 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, it, expect} from '@ohos/hypium'; +import { describe, beforeAll, afterAll, it, expect } from '@ohos/hypium'; import Utils from './Utils'; import ability_featureAbility from '@ohos.ability.featureAbility'; +import backgroundTaskManager from '@ohos.backgroundTaskManager'; export default function getHapModuleInfoJsunit() { describe('getApplicationContextTest', function () { + + let TAG1 = "SUB_AA_OpenHarmony == getApplicationContextTest: "; + let sleepTimeOne = 1000; + let id = undefined; + beforeAll(async (done) => { + console.log(TAG1 + "beforeAll called"); + let myReason = 'test FaShowOnLockTest'; + let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, () => { + console.log(TAG1 + "Request suspension delay will time out."); + }) + id = delayInfo.requestId; + console.log(TAG1 + "requestId is : " + id); + setTimeout(function () { + console.log(TAG1 + "beforeAll end"); + done(); + }, sleepTimeOne); + }) + + afterAll(async (done) => { + console.log(TAG1 + "afterAll called"); + backgroundTaskManager.cancelSuspendDelay(id); + setTimeout(function () { + console.log(TAG1 + "afterAll end"); + done(); + }, sleepTimeOne); + }) + /** * @tc.number: context_getApplicationContext_test_0100 * @tc.name: getApplicationContext:Gets the application context information. diff --git a/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getHapModuleInfoJsunit.test.ets b/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getHapModuleInfoJsunit.test.ets index 3703d15b1..0f4a2e1b5 100644 --- a/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getHapModuleInfoJsunit.test.ets +++ b/ability/ability_runtime/actsabilitymanageretstest/entry/src/main/ets/test/getHapModuleInfoJsunit.test.ets @@ -12,14 +12,40 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import {describe, it, expect} from '@ohos/hypium'; +import { describe, beforeAll, afterAll, it, expect } from '@ohos/hypium'; import Utils from './Utils'; import ability_featureAbility from '@ohos.ability.featureAbility'; - - +import backgroundTaskManager from '@ohos.backgroundTaskManager'; export default function getHapModuleInfoJsunit() { describe('getHapModuleInfoTest', function () { + + let TAG1 = "SUB_AA_OpenHarmony == getHapModuleInfoTest: "; + let sleepTimeOne = 1000; + let id = undefined; + beforeAll(async (done) => { + console.log(TAG1 + "beforeAll called"); + let myReason = 'test FaShowOnLockTest'; + let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, () => { + console.log(TAG1 + "Request suspension delay will time out."); + }) + id = delayInfo.requestId; + console.log(TAG1 + "requestId is : " + id); + setTimeout(function () { + console.log(TAG1 + "beforeAll end"); + done(); + }, sleepTimeOne); + }) + + afterAll(async (done) => { + console.log(TAG1 + "afterAll called"); + backgroundTaskManager.cancelSuspendDelay(id); + setTimeout(function () { + console.log(TAG1 + "afterAll end"); + done(); + }, sleepTimeOne); + }) + /** * @tc.number: context_getHapModuleInfo_test_0100 * @tc.name: getHapModuleInfo:Obtains the HapModuleInfo object of the application. diff --git a/ability/ability_runtime/actssupportfunction/actsonandoffscreentest/entry/src/main/module.json b/ability/ability_runtime/actssupportfunction/actsonandoffscreentest/entry/src/main/module.json index a44cb2a11..015dfcf10 100644 --- a/ability/ability_runtime/actssupportfunction/actsonandoffscreentest/entry/src/main/module.json +++ b/ability/ability_runtime/actssupportfunction/actsonandoffscreentest/entry/src/main/module.json @@ -35,16 +35,6 @@ } ] } - ], - "requestPermissions": [ - { - "name":"ohos.permission.START_ABILITIES_FROM_BACKGROUND", - "reason":"need use ohos.permission.START_ABILITIES_FROM_BACKGROUND" - }, - { - "name":"ohos.permission.START_INVISIBLE_ABILITY", - "reason":"need use ohos.permission.START_INVISIBLE_ABILITY" - } ] } } \ No newline at end of file diff --git a/ability/ability_runtime/actssupportfunction/actsonandoffscreentest/signature/openharmony_sx.p7b b/ability/ability_runtime/actssupportfunction/actsonandoffscreentest/signature/openharmony_sx.p7b index 66b4457a8a81fb8d3356cf46d67226c850944858..b901cc81c08614c4745ed72142857e7fc712baf7 100644 GIT binary patch delta 641 zcmZ8fO=y!r5ar9CP196Lq(YGrRxi~g-PD|FwYD^&muP#?gQdpJmx*rNeBZLWNfSZ| zrX|>82zbzgIEN?K*b;MBLHTTDVL}RPw-gDL5uPUerLQ>lb zTOX+J$hYMV2k{gmp?D&H_;d(Vlh9mZ@$lrOnZ* zrkhNn$qFKj*(;C*n?5(Lc9U~Ki2=V1!QC34FCWD delta 389 zcmX>k^I0n0pour1jZ>@5qwPB{BRkWACf)>~Pz)0zqam*WHydX{n+IbmGYb==K@%%K zLLuXVCRPTPCYC?dN@b}<#hLkey2<$|sY+IcI&gu!#9W|&lA)e~p25TkhWsU!1t5M= zYEEimajMe94DE>rZ8q~UE@1ZXFG$VvNG!_D&#Tl+EGW<`Ni8l>(osq*$N_37t}HG| z&5cjaFG>ZA73ij=CYF=}c~(jp`Ni>2d7wU}$r7xtn|av2vhg?>G%?x%ePNJokUaSx zhy7$9-n4oHBLfQqb3-E&<0u1txMw(743$_E`U<4XIj$t8_sTf$i9XT0GIfM A6aWAK diff --git a/ability/ability_runtime/apicover/apicoverhaptest/entry/src/main/ets/test/ApiCoverAbility.test.ets b/ability/ability_runtime/apicover/apicoverhaptest/entry/src/main/ets/test/ApiCoverAbility.test.ets index 0583b6db7..63c344e25 100644 --- a/ability/ability_runtime/apicover/apicoverhaptest/entry/src/main/ets/test/ApiCoverAbility.test.ets +++ b/ability/ability_runtime/apicover/apicoverhaptest/entry/src/main/ets/test/ApiCoverAbility.test.ets @@ -586,6 +586,7 @@ export default function ApiCoverTest() { console.info("SUB_AA_FMS_AbilityStage_0100===AbilityStage===" + JSON.stringify(globalThis.stageContext)) console.info("SUB_AA_FMS_AbilityStage_0100===AbilityStage===" + JSON.stringify(globalThis.stageContext.config)) let directions = globalThis.stageContext.config.direction + let pointer = globalThis.stageContext.config.hasPointerDevice let subscriber = null let subscribeInfo = { events: ["AbilityStage_StartAbility"] @@ -598,6 +599,7 @@ export default function ApiCoverTest() { console.info("SUB_AA_FMS_AbilityStage_0100===SubscribeInfoCallback===" + JSON.stringify(data)) expect(data.parameters["config"]).assertEqual(-1) expect(data.parameters["config"]).assertEqual(directions) + expect(pointer).assertFalse() commonEvent.unsubscribe(subscriber, UnSubscribeInfoCallback) await sleep(4000) done() diff --git a/ability/ability_runtime/featureability/actsfeatureabilitytest/entry/src/main/config.json b/ability/ability_runtime/featureability/actsfeatureabilitytest/entry/src/main/config.json index 201552f9a..9b43e045b 100644 --- a/ability/ability_runtime/featureability/actsfeatureabilitytest/entry/src/main/config.json +++ b/ability/ability_runtime/featureability/actsfeatureabilitytest/entry/src/main/config.json @@ -14,7 +14,6 @@ }, "deviceConfig": { "default": { - "process": "processTestAbility" } }, "module": { @@ -55,7 +54,6 @@ "label": "$string:app_name", "type": "page", "launchType": "singleton", - "process": "processTestAbility", "permissions": ["ohos.permission.ACCELEROMETER"], "deviceCapability": ["SystemCapability.Ability.AbilityBase"], "uri": "uriTest", @@ -75,8 +73,7 @@ "launchType": "singleton", "permissions": ["ohos.permission.ACCELEROMETER"], "deviceCapability": ["SystemCapability.Ability.AbilityBase"], - "uri": "uriTest", - "process": "processTestAbility" + "uri": "uriTest" } ], "reqCapabilities": ["reqCapabilitiesTest1","reqCapabilitiesTest2"], @@ -96,36 +93,12 @@ "when": "always" } }, - { - "name": "ohos.permission.INSTALL_BUNDLE", - "reason": "need use ohos.permission.INSTALL_BUNDLE" - }, - { - "name":"ohos.permission.GET_BUNDLE_INFO_PRIVILEGED", - "reason":"need use ohos.permission.GET_BUNDLE_INFO_PRIVILEGED" - }, - { - "name":"ohos.permission.CHANGE_ABILITY_ENABLED_STATE", - "reason":"need use ohos.permission.CHANGE_ABILITY_ENABLED_STATE" - }, - { - "name":"ohos.permission.REMOVE_CACHE_FILES", - "reason":"need use ohos.permission.REMOVE_CACHE_FILES" - }, - { - "name":"ohos.permission.LISTEN_BUNDLE_CHANGE", - "reason":"need use ohos.permission.LISTEN_BUNDLE_CHANGE" - }, - { - "name": "ohos.permission.KEEP_BACKGROUND_RUNNING" - }, { "name": "ohos.permission.ACCELEROMETER", "reason":"need use ohos.permission.ACCELEROMETER" }, { - "name":"ohos.permission.START_ABILITIES_FROM_BACKGROUND", - "reason":"need use ohos.permission.START_ABILITIES_FROM_BACKGROUND" + "name": "ohos.permission.KEEP_BACKGROUND_RUNNING" } ], "js": [ diff --git a/ability/ability_runtime/featureability/actsfeatureabilitytest/entry/src/main/js/test/FeatureAbilityJsunit.test.js b/ability/ability_runtime/featureability/actsfeatureabilitytest/entry/src/main/js/test/FeatureAbilityJsunit.test.js index 0467d3f53..36c786df4 100644 --- a/ability/ability_runtime/featureability/actsfeatureabilitytest/entry/src/main/js/test/FeatureAbilityJsunit.test.js +++ b/ability/ability_runtime/featureability/actsfeatureabilitytest/entry/src/main/js/test/FeatureAbilityJsunit.test.js @@ -905,7 +905,7 @@ describe('ActsFeatureAbilityTest', function () { // expect(info.labelId).assertEqual(0); //create by DevEco when building HAP. expect(info.icon).assertEqual("$media:icon"); // expect(info.iconId).assertEqual(0); //create by DevEco when building HAP. - expect(info.process).assertEqual("processTestAbility"); + expect(info.process).assertEqual("com.example.actsfeatureabilitytest"); expect(info.supportedModes).assertEqual(0); expect(info.moduleSourceDirs[0]).assertEqual("/data/app/el1/bundle/public/" + "com.example.actsfeatureabilitytest/com.example.actsfeatureabilitytest"); @@ -965,7 +965,7 @@ describe('ActsFeatureAbilityTest', function () { expect(typeof (info)).assertEqual("object"); expect(typeof (info.processName)).assertEqual("string"); expect(typeof (info.pid)).assertEqual("number"); - expect(info.processName).assertEqual("processTestAbility"); + expect(info.processName).assertEqual("com.example.actsfeatureabilitytest"); } /** @@ -1158,7 +1158,7 @@ describe('ActsFeatureAbilityTest', function () { expect(data.icon).assertEqual("$media:icon"); expect(data.moduleName).assertEqual("entry"); - expect(data.process).assertEqual("processTestAbility"); + expect(data.process).assertEqual("com.example.actsfeatureabilitytest"); expect(data.targetAbility).assertEqual(""); expect(data.backgroundModes).assertEqual(0); expect(data.isVisible).assertEqual(true); @@ -1304,7 +1304,7 @@ describe('ActsFeatureAbilityTest', function () { function checkProcessName(info) { console.info("checkProcessName processName : " + info); expect(typeof (info)).assertEqual("string"); - expect(info).assertEqual("processTestAbility"); + expect(info).assertEqual("com.example.actsfeatureabilitytest"); } /** diff --git a/ability/ability_runtime/featureability/actsfeatureabilitytest/signature/openharmony_sx.p7b b/ability/ability_runtime/featureability/actsfeatureabilitytest/signature/openharmony_sx.p7b index 76092d8925a3707cd267ba4265c30dc1b2c0ef74..88852f74445028c3308fe52c59f0ac16b3b9f11c 100644 GIT binary patch delta 431 zcmeBIJS0!pZq5Kw(22rNn{)-IUDY zlA_F{(h`t{lFEYAjrCzHY*^)zE0&0pI z(5|q|;>@I+RKNU^%(TkQ;T+%DxSR}{80~7t6A~xPwc%jn}hq0sC;W=aDS5c^2~h|i+7(z4Y=4ifB|~WmW7## z#lygjNs(d0qB^OR*9l>B?3Z0XWm$1GhCfm1ws}=XSMYVVOPbr31C{h@2-~QB%ZT6G dZYwdhd;bvu!!KFp`==Mq=6`iXY;9*{Gyt#vm@5DP delta 1035 zcmX>k)2~=>&?L~!#;Mij(e|B}k)3HllRynnsDg=+(U8}Gn~gJ}&4V$OnT3hbpov2l zp^$Mw6Nem26Ngl_Qdw$Iab|v=ZeC(;s*;tGk)DB`fszhfI5|HBC~Tyolvq%po03^v zQk0ogS_0BgQdy9?u|AB2ySTErBsDiaIlm}%@@*EYdZqk~{9?U=)S}$XVvx~#&W^sW zL5@H}(Iq_nfEjs^8Sm=n=;Y(-5)ZT^1e@VOuDogAIL-Gk!&fxd|k3ib2z^mE6e)X~}5)yFl+-`6$7H3*A5(78b&@eogV zx(3I)0hL0H2AQlhS(H_0G>mB+#*VB`lW(z#ZRTYA#>VAf(8Op1%u)u~lMUEXC+G3H z)>{}Dni?6KMH%SBGZiO`p%RONR@RlgD~qgIBD&tB?=i>}%l1;YWd68!ZCzTLwf=%B zFATWYIDpypoGlA86N{UH3zGszz*-*t