From 6bf4e0b5c9e67666b7638acca3ea3cd419fbabf5 Mon Sep 17 00:00:00 2001 From: Kartik Suryavanshi <158498247+KartikSuryavanshi@users.noreply.github.com> Date: Wed, 12 Aug 2026 10:01:37 +0530 Subject: [PATCH 01/11] [GSoC 2026] M2.5 - Fix part of #19614: Creator Side UI Acceptance tests (#26901) * added acceptance tests for creator-side * added the file in acceptance.json * fixed changes * fixed lint checks * changed the feature flag to test stage * fixed feature flag * fixed node_1 crash * remove unnecessary tests * fixed failing tests * added tests * finalised the spec files * fixed frontend tetss * removed screenshots * addressed comments * added screenshots * added screenshots * updated screenshots * addressed comments * fixed tests * moved flag from prod to test * updated screenshots * fixed flaky failure * removed extra comments * fixed tiemout flakes * Updated the tests to use translation admin instead of curriculum admin * fixed failure * updated screenshot * updated screenshots * updated snapshot * updated waitForNetworkIdle * reverted clearAllTextFrom to keyboard approach * fixed flaky story adventure tests * updated story editor adventure screenshots * updated snapshot * updated snapshot * Added scrollToTopOfPage * Updated dev and prod screenshots * fixed acceptance tests * Updated code to fix acceptance tests * fixed comment * added todo comment * updated screenshots --- core/feature_flag_list.py | 4 +- .../domain/story/story-update.service.spec.ts | 65 +++++ .../domain/story/story-update.service.ts | 9 + .../editor-tab/story-editor.component.html | 37 +++ .../editor-tab/story-editor.component.spec.ts | 49 ++++ .../editor-tab/story-editor.component.ts | 46 ++++ .../ci-test-suite-configs/acceptance.json | 5 + ...itorAfterEditingAdventureMetadata-snap.png | Bin 0 -> 166599 bytes ...itorAfterReloadPersistedGroupings-snap.png | Bin 0 -> 163851 bytes ...torAfterRemovingAdventureBoundary-snap.png | Bin 0 -> 157862 bytes .../storyEditorAfterSplitAtChapter3-snap.png | Bin 0 -> 164504 bytes ...ditorAllChaptersInSingleAdventure-snap.png | Bin 0 -> 157384 bytes .../storyEditorEditAdventureModal-snap.png | Bin 0 -> 167311 bytes ...itorAfterEditingAdventureMetadata-snap.png | Bin 0 -> 97299 bytes ...itorAfterReloadPersistedGroupings-snap.png | Bin 0 -> 83812 bytes ...torAfterRemovingAdventureBoundary-snap.png | Bin 0 -> 97299 bytes .../storyEditorAfterSplitAtChapter3-snap.png | Bin 0 -> 97299 bytes ...ditorAllChaptersInSingleAdventure-snap.png | Bin 0 -> 97299 bytes .../storyEditorEditAdventureModal-snap.png | Bin 0 -> 65153 bytes .../manage-story-adventures.spec.ts | 223 +++++++++++++++ ...itorAfterEditingAdventureMetadata-snap.png | Bin 0 -> 124957 bytes ...itorAfterReloadPersistedGroupings-snap.png | Bin 0 -> 122734 bytes ...torAfterRemovingAdventureBoundary-snap.png | Bin 0 -> 145108 bytes .../storyEditorAfterSplitAtChapter3-snap.png | Bin 0 -> 123259 bytes ...ditorAllChaptersInSingleAdventure-snap.png | Bin 0 -> 117415 bytes .../storyEditorEditAdventureModal-snap.png | Bin 0 -> 132727 bytes ...itorAfterEditingAdventureMetadata-snap.png | Bin 0 -> 92487 bytes ...itorAfterReloadPersistedGroupings-snap.png | Bin 0 -> 79489 bytes ...torAfterRemovingAdventureBoundary-snap.png | Bin 0 -> 92487 bytes .../storyEditorAfterSplitAtChapter3-snap.png | Bin 0 -> 92487 bytes ...ditorAllChaptersInSingleAdventure-snap.png | Bin 0 -> 92487 bytes .../storyEditorEditAdventureModal-snap.png | Bin 0 -> 59649 bytes .../utilities/common/puppeteer-utils.ts | 52 +++- .../utilities/user/exploration-editor.ts | 8 + .../utilities/user/topic-manager.ts | 253 ++++++++++++++++++ 35 files changed, 739 insertions(+), 12 deletions(-) create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/dev-desktop-screenshots/storyEditorAfterEditingAdventureMetadata-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/dev-desktop-screenshots/storyEditorAfterReloadPersistedGroupings-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/dev-desktop-screenshots/storyEditorAfterRemovingAdventureBoundary-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/dev-desktop-screenshots/storyEditorAfterSplitAtChapter3-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/dev-desktop-screenshots/storyEditorAllChaptersInSingleAdventure-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/dev-desktop-screenshots/storyEditorEditAdventureModal-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/dev-mobile-screenshots/storyEditorAfterEditingAdventureMetadata-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/dev-mobile-screenshots/storyEditorAfterReloadPersistedGroupings-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/dev-mobile-screenshots/storyEditorAfterRemovingAdventureBoundary-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/dev-mobile-screenshots/storyEditorAfterSplitAtChapter3-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/dev-mobile-screenshots/storyEditorAllChaptersInSingleAdventure-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/dev-mobile-screenshots/storyEditorEditAdventureModal-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/manage-story-adventures.spec.ts create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/prod-desktop-screenshots/storyEditorAfterEditingAdventureMetadata-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/prod-desktop-screenshots/storyEditorAfterReloadPersistedGroupings-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/prod-desktop-screenshots/storyEditorAfterRemovingAdventureBoundary-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/prod-desktop-screenshots/storyEditorAfterSplitAtChapter3-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/prod-desktop-screenshots/storyEditorAllChaptersInSingleAdventure-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/prod-desktop-screenshots/storyEditorEditAdventureModal-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/prod-mobile-screenshots/storyEditorAfterEditingAdventureMetadata-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/prod-mobile-screenshots/storyEditorAfterReloadPersistedGroupings-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/prod-mobile-screenshots/storyEditorAfterRemovingAdventureBoundary-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/prod-mobile-screenshots/storyEditorAfterSplitAtChapter3-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/prod-mobile-screenshots/storyEditorAllChaptersInSingleAdventure-snap.png create mode 100644 core/tests/puppeteer-acceptance-tests/specs/topic-manager/prod-mobile-screenshots/storyEditorEditAdventureModal-snap.png diff --git a/core/feature_flag_list.py b/core/feature_flag_list.py index 419996e6f3362..9c129309eb8fe 100644 --- a/core/feature_flag_list.py +++ b/core/feature_flag_list.py @@ -141,7 +141,6 @@ class FeatureNames(enum.Enum): FeatureNames.ENABLE_CERTIFICATE_ASSESSMENT, FeatureNames.EXPLORATION_EDITOR_NEW_CREATOR_FEEDBACK_TAB, FeatureNames.TECHNICAL_FEEDBACK_DASHBOARD_ENABLED, - FeatureNames.STORY_EDITOR_ARCS, ] # Names of features in test stage, the corresponding feature flag instances must @@ -160,6 +159,7 @@ class FeatureNames(enum.Enum): FeatureNames.ENABLE_FINANCIAL_LITERACY_CAMPAIGN_BANNER_TEST_MODE, FeatureNames.WEB_FEEDBACK_MODAL_ENABLED, FeatureNames.ENABLE_TRANSLATION_OPPORTUNITIES_WITH_NEW_OPP_MODELS, + FeatureNames.STORY_EDITOR_ARCS, ] # Names of features in prod stage, the corresponding feature flag instances must @@ -393,7 +393,7 @@ class FeatureNames(enum.Enum): ( 'This flag enables arc-based chapter groupings in the story editor, ' 'allowing creators to organize chapters into named arcs.', - feature_flag_domain.ServerMode.DEV, + feature_flag_domain.ServerMode.TEST, ) ), } diff --git a/core/templates/domain/story/story-update.service.spec.ts b/core/templates/domain/story/story-update.service.spec.ts index 46f2c3d690741..25a56d45a4631 100644 --- a/core/templates/domain/story/story-update.service.spec.ts +++ b/core/templates/domain/story/story-update.service.spec.ts @@ -21,6 +21,7 @@ import {TestBed} from '@angular/core/testing'; import {Story} from 'domain/story/story.model'; import {StoryUpdateService} from 'domain/story/story-update.service'; +import {ArcModel} from 'domain/story/story-contents-object.model'; import {UndoRedoService} from 'domain/editor/undo_redo/undo-redo.service'; import {EntityEditorBrowserTabsInfo} from 'domain/entity_editor_browser_tabs_info/entity-editor-browser-tabs-info.model'; import {LocalStorageService} from 'services/local-storage.service'; @@ -31,6 +32,9 @@ class MockPlatformFeatureService { SerialChapterLaunchCurriculumAdminView: { isEnabled: false, }, + StoryEditorArcs: { + isEnabled: false, + }, }; } @@ -117,6 +121,7 @@ describe('Story update service', () => { 'emit' ).and.stub(); + mockPlatformFeatureService.status.StoryEditorArcs.isEnabled = false; _sampleStory = Story.createFromBackendDict(sampleStoryBackendObject); }); @@ -531,6 +536,66 @@ describe('Story update service', () => { ]); }); + it('should create default arc when adding first chapter with arcs enabled', () => { + mockPlatformFeatureService.status.StoryEditorArcs.isEnabled = true; + + _sampleStory.getStoryContents()._nodes = []; + _sampleStory.getStoryContents()._arcs = []; + _sampleStory.getStoryContents()._initialNodeId = null; + _sampleStory.getStoryContents()._nextNodeId = 'node_1'; + + storyUpdateService.addStoryNode(_sampleStory, 'Title 1'); + + expect(_sampleStory.getStoryContents().getArcs().length).toBe(1); + expect(_sampleStory.getStoryContents().getArcs()[0].getId()).toBe( + 'arc_default' + ); + expect(_sampleStory.getStoryContents().getArcs()[0].getNodeIds()).toEqual([ + 'node_1', + ]); + expect(undoRedoService.getCommittableChangeList()).toEqual([ + { + cmd: 'add_story_node', + node_id: 'node_1', + title: 'Title 1', + }, + { + cmd: 'create_arc', + arc_id: 'arc_default', + title: 'All Chapters', + description: '', + node_ids: ['node_1'], + }, + ]); + }); + + it('should move new chapter to last arc when arcs enabled', () => { + mockPlatformFeatureService.status.StoryEditorArcs.isEnabled = true; + _sampleStory + .getStoryContents() + .addArc(ArcModel.createNew('arc_1', 'Arc 1', '', ['node_1', 'node_2'])); + + storyUpdateService.addStoryNode(_sampleStory, 'Title 3'); + + expect(_sampleStory.getStoryContents().getArcs()[0].getNodeIds()).toEqual([ + 'node_1', + 'node_2', + 'node_3', + ]); + expect(undoRedoService.getCommittableChangeList()).toEqual([ + { + cmd: 'add_story_node', + node_id: 'node_3', + title: 'Title 3', + }, + { + cmd: 'move_node_to_arc', + node_id: 'node_3', + to_arc_id: 'arc_1', + }, + ]); + }); + it('should remove/add a story node', () => { expect(() => { storyUpdateService.deleteStoryNode(_sampleStory, 'node_2'); diff --git a/core/templates/domain/story/story-update.service.ts b/core/templates/domain/story/story-update.service.ts index 7432dd0f6afde..a38f63b359a26 100644 --- a/core/templates/domain/story/story-update.service.ts +++ b/core/templates/domain/story/story-update.service.ts @@ -470,6 +470,15 @@ export class StoryUpdateService { this._storyEditorStateService.setExpIdsChanged(); } ); + + if (this._platformFeatureService.status.StoryEditorArcs?.isEnabled) { + const arcs = story.getStoryContents().getArcs(); + if (arcs.length === 0) { + this.createArc(story, 'arc_default', 'All Chapters', '', [nextNodeId]); + } else { + this.moveNodeToArc(story, nextNodeId, arcs[arcs.length - 1].getId()); + } + } } /** diff --git a/core/templates/pages/story-editor-page/editor-tab/story-editor.component.html b/core/templates/pages/story-editor-page/editor-tab/story-editor.component.html index 374400833374e..368f97c35ee78 100644 --- a/core/templates/pages/story-editor-page/editor-tab/story-editor.component.html +++ b/core/templates/pages/story-editor-page/editor-tab/story-editor.component.html @@ -1378,5 +1378,42 @@
v;592+sU(Y7e-dC#SiWvbxrH=&KtMx{z(R!#?9KAr@eZT4>b2BCbvZaH7+`SWMtc zODfYR4f~ZqM1~b{kRSj73O?no5~O8J_t|_8KUh-I=;@VSvn=4C0Dx!HXesiR)uVbB zfC^;YR!yhy$t!#Cxx~f-G(&%Gg+1GPN77#kA1rqOSQ+6^n?SQC3&7lmriGF$V-neM $usG5HDIc0+-*wM% TCE4=LB!#_g4C>L12|x(M Bq#e#Ot*|2cX7EVP}; zyl%HIo#aQe!1G{&xPs-+RCl$44=ArJE=i~R=4?KXgGSRB*xUN`Y|*rG^l=~(GZ=o) z+=tWjDk`b=?(PdGi%97bHA7>?zVgr3xZ|aenvIKQ&$r3^uCX^aZUKRT Q&EC>G!9QMH}^C6!cKZ#3k~ zRE9z?Cb#@bp>dMj`*|C*@3Q9JVW^ZWeBgA3#sv2PYJ}H6_>T|)ii{>3%mU>4V3$dZ zy$D)!lar%k22JmWPj9 UtT+X? zeA@bz%Es%}+LDAAXoI(5DFbMM?zSM)gxcxiY*T|bvF_xBa^?!SDKVWRT^Lg2@k4$= z;o&vUK!Gc?P#1waF4VeQ9RR+(sRKwBS~gZh8FmoQd8yRf?!yHxcZUA z+k|)#F;8@Ague;VL%`|7;hq$10e}r|tTT@VFwcNF!(P$sz`O8Qx<#O1Qv!>vMVFRJ zYArZUPboIiay%6X8)rvA{+^yKcf_-U-+h_g((`HpM=j0>`z=S1(@pXY?9IJ)PCDl$ zSbly73P-c2HK%@Ky;H);@P`Qz^X|j-)yr;bO*RnJ{WkA721bdC``4663S3@UWuh9& z^^d5$ctipQx`s*z2q3auhH~1UiwhiP r`> z0Rfo9b+p;L?-v@Ck^&~!0p$atyYPn;)R7Q<@e)&|5C!2v_oRB1i%&E6np?jDz!L$i z57;;2M76hjZr|5>OEPnAWUQyQgm-`u8G{R6qOm$U`x4Ez0A2q0MSBFGn!r+1OHR8D zfy!yA(GWw3fe_8N1d;ZJ=Q-FS;$57N%YeU0QZIi@+tty`T@DC<%KWpX`pT8!tvP^J zF+IxH&yf^D6%`BV+Q|_ m`{;Hate_9;-XT8j>S36jzy=1c zDe$r1`-_*D0pBJKa%)cWwY`AnAAs{0x=6-WR*@VkA_PcOzKML)*2nB`?dvk!gcAR$ zuH*`r9d(G`Z?x6o<#GQ7C)~Z$qIxl$tJ~<}xD9`Qcd;8-S-HDA|AZ0IooqZ*8rn3$ zOsEOL0LO5fruq=iWmnmhE`)FE$ C>!JR}dv1T}VEacR@f{vJINgGbXODwm2p>3oyM6msn6?0|zW61*m0F zbbJdLme@Sqil-G4Z_!F!k}iM9L%x?@aG7hEY Vy5 z|DxC{U_+&=6a@s8-cb=SAiZ~y8ba?Kjs+B@g(e^%(rf6U2Sq?YKx%*h0qKMe2@ptl zD|pWN{l52~JMJBC-0{X6caL)%Kz8 cKln7j^;(D-x1<+y_%Tb6wBQ(m!Q;bNulc?IXut z-r~OVR`9Rb(m1->{Gxi&;P~ERUabfE Aun3=a8rhnz zk0U5Q8e46)-df6e@3!5Tb~cYc`3*ENvCO%iyfLD5%D>2w#IFhd-~4R9m?uoqt ~6PlXlJQnO*O4|vm1n$$eJ*Z zOxEJDZJu}@DQm 2<3ly$Fl+KiC#CsO2%%bg1u06ie@|k?C_MD|Kt{dH>|))38x{ zO}NUkA0G)8IYv{ X@$4XN(ES)FpF
s~|He!MaM%iSCnU(RA~a@{p|g &BB;spa0h$#o1-A)5EKyc!(l6E+Exm8BU U~yq3HCr94 zLR)*LOJ5q8#oHW)%EkRdD*M+SeQ4_8ugSf1>sG~Gd(08*hx2j$8W445A@i|Cwh>gw z-l&1Rh<5xeuZ4(RVy$Jms#i5iO(7DzQfp+q;8o?hb2K`s1ZM474;)gNaeBnje!6B6 zJVJ>jKrz_N#!)@(izBK;W$t$CciYXf8P %Q9dWhqk^Ui{(W;v(q1{ o!)g zQ3VRUJpm4Tn~7Fo>6 kSPikDA@m$A`h8%%*7h@EfkABz8DpCJv+Uj$ zg26+zW?dNedap3m|H;ld3XQ3#J~Q;K*=__UDDH?q&aPPfY%Q&qw_N+);$v`KuyScE z3Skq?)g-7zPqo?|d6T|(mp2bZyF9P)V67hq=dFBiF~rg5InlND@x{^SV9B=p{Wp^p zKioC#_FLS@Osoj7uP<^P3t6?bL0@SOQOHqOTZ_7@?x}Je!GY1hTbmS}&3krvyz0eS zQgxEZVzO8njhp!4u&9DAf9kl?m%rJd{+*V2nmZK!VdG ERw_y#P6L7On zZ7zot7cFR4+MIl=`u#K{`KE8}q>CE^@Ak+$>CPHqv3(A6*ej~*;Aun4bJV?SF)Q$l zFQpn3{ey3aLkkW}e)V-Dw;4z56r3~^5ZL;TG}Xmm=XP(q_du;}K$?ugR>0wSn5Z3) z$}}NptmVY@Sr1H1R4QVKQ+eN@b){~UVf$Lmm`k vD?of{?IZo }4Vx2btw@C*8d7F71G zr(>Nc@vh*%{cX-mO>sAIxbnNnS^AA|_BNYOH-tjhp~zb(Gigb)`I?f}8HudmjPF10 z&wVje3f z$FW!I2697O%31kNh(uX$3Rcgeo{z0W8;5OeyZ0!Npv=f4_bH>MT&;|?V} )9H*9QdGN#zOh6UN#%DE5r z3;V%5j$u4CLb6I+#Py(pYBRNC?e} V-C-R z|MtG6N8}>P%O6soSBSI=fBxq6eVD3jvDiyX(U @y7qs+&)%fN^6dA#fE}HG7mWSz5l;JmrWyVyn7!$Kfs80Ik06r&hjW9b=w$!A z= i7l|k*V9rDBRx1~W#aki< zzz8Ou`kHrHN$oE)%*0mBJWvL{P<#>5D@xIbB{1IOXU$Aq^nj?~Q@ESUi;Ms=>L&5` z>}G!+)LcgQ&khQA|3D@EY<)7VCPUXS8Gfa3|5Ch8mL+VzuJZ`qYOw8H)MCs9?_a|D zCpd_fq|^}iRH5z<>aA86;TdN44l-7CGMESPV7wE7tUr|pG-V19m4RJZca8Dux58@c zZnOObyU@p8KGM)5WeA(+g7~b|&JfY%bVu-sf5aG**zv{?vwiBh#a gHYI|FH*ai1L57nF`25@mVXJ=8}6pnOlhV+uVrEN&MOkHtzX%< zOKH%r8N+h?;cD~qnh()^8A(K(qqP=oAV-^-h+9WcG+m$Q_mOL?EP2fLO!KyM$()AN zb4(pfgy3D_U8@CQh{n5)^f{F2r0bH`iVP4lmwOmph4Zn20kJn1-s60@iXczJmIFX~ zZt rD0Z165J{g%IU*-^vn}gSoi@AA2H0Cc7MNa8m;J zDZF#b+M$I193jl*`cUQ@J345|O e^%7y4P5+PyZ|?`$1l_=yLdmt zD~1m+AFI7nTdWn~SFLxOLq5;E>~!Z?odT@aH7{9aV)}_tgv;WTjBvZ*d&vP (eb#u}etzgTO6Q9Wy-iELc`2C+#Lv z$VjrOPveE1tcEs*L7}gvnI}Iy4^ci~@(FE88CE&?RQzyi&Ys{2Ib4p$h|@thv#Av$ zSgrHZNVs{Djgovrg`=m*JJr2!NQ9Q&T0>F5US3(@^7Ig=&wNKSJVW?Fm=GydHkJwV zU0m9r5Wn_zMX`ggKPb>2L0!99V9rV=F&X>$l&&!J%O!13LoFf(2Ol6?^BMP&Gr&Ny zxHv{1jAs{>)MFN>aNV)&$s>8W4v5nw5gFYFJ*wAIQ|zP~GIUE#m@$S>{WqsovgxuP=qOR~W(IL_zm#T~rtVSjP?vWa4E%b2%8DQ{oi`nxD8zwijDvgC?-9^`zZ zYGulJZB~Tp4sOHCGEw7gQ<2B|q)^J`OBM)c6p9G;DpiH&=QX5;ELqzwT&x~og8E{7}f@R<2=Cn;(l=R_SDDS4XOn@MK#Kq}(mj@*VVmM+&2 z>P`K#XlZH#J_Q8YRQYhUD#AaBe24}d2}^X*env-{DLi)N_Z`}YNQ>$GIdfB(qk6(f z^BdT1G#hw{T5;1MjjoYBYuLH`9lf0l#hCHaa=AV;+1iW0?mk{UsClG>v|K=*3W31o zx9!pyrT543at%AO1_{}&FcCQ;@Ps9Fiw@>sDlfTat5AP%YVFqzV|Nc<+`51C)y3Ua z-8+Imim)u#vsenvZQW6d H 7ZCf(b8dE4%iABb zesbgb<7(=--F*w!G~iv!S`CB*v|#MUTKtHi7H6)X@nj#%L5nT=Amh6~+8KawKld+% zdHV+kV5%@@?*(GZ4JCLUcV&gi_H*5Q47U(D-z)@WhqUu}Kz%(rHTlu(?erSUsx#%C zu|*4*N0p&k?uI&lr5psjVbA?OqmH )T2f|16?F0mmEZNj<#z3F%&ChTo>nketWeM^W?_=k_H$rg ?;ku{H_mjFXR)-VW+HR(}e6Cn?m2G`N$)Q? SzS?}}>Un15hlpTOEsR?|;nwvT&D9}DL$ywE1TJz+hkc{f{kq1Y2 zP803OSEV+WU2yCA%TqA-@m_oVL63p8a*fC_H9xQ2m`=V3q=6S#n|0`P9+>Vzejf+q zOq7}J;`x#+rSW9l0<4HOtqra2K+msOO=aDIOu3i}dn7X%InlF3Su`z$9p9y-x;xs* zE2$YkEiC_SK0Z7K^g%W%xkty`7g<<|a($6eVXU{9w?0Y|=&rjI-#%&rnMv2@K`#~x zW?3`B+GnM_g(94!J}NXA*x94JAoql5cvDaA&alE{h)BMxnN|iE-ITHMIXyqGoM2BF zRLX&_uc`~}I8O$)L8J6*RBL6$f|&Th8z{pj@w|OE- $ma*o5Cn5gT3-yV2%-;2UKwDu2^35$G-Na$=Xw%6$Ddn z9p5n#Xxa+VE=3-1Q9ob+?vMwCCNET-5yL%wDKmP7qdD5`M;e3L?+L>hW zVTwAi35C4cgEfWILdx|*u);21vTrKsJ<<|NjysPlfhtODUtMTFAZa+K^b=FMf!WZx zv2yKaTy=fT!TUE1TdS;o1jo)%&x8J-FJBGr_s3*PN38Dpkso1nV|9%-wFdV(c)80e zP07&MBG&CBBNl{e5*>6{e0d!q GCRt?}B1deCLCr z){v8ThvPEKQd08r$CG9M#^mk>7x~2Rex;GMi8MA&RLE7fyKLY20}Z!N5Fh#g<4sRi ze0#pHbXgyWU)rG}&Bw1*R6g{+ I+phAXYbT>nHSSi?6yo?XOO4TMADQ{Cpw z3X*=t!50CxpRKyBRpE$ZHy?njzsXh_B6)Pd%Ck6l!!xd`oB1q#+Yq5v8e<9baVK7^ zcChCiN_3u=rvsivYE;ACrosUbmJi#x@1C1q+t!=Py*Z5cQl{)Wmc+WJzWF~J{uuab zbVr 9y(zrf<9++KK|~;?*bo_h zAlp%Cy;s70IA|xy8&ot-Sgg>~&RYx+c$`B=ZxvRUSbYn8$`mouA~-l;UEW(%cZoy( zwaz{?BO^zCv4_7MJ9FYwYlF!buy3>3 0n{&~zs2z7Yiw2-gk1DJAu#4AmiOR#l&s^0Bo4ALTU_*@- @LFsQVHXd;Rb|as!Z{ r-3~J|v+c_s>xrii=gD;Kd{bnnRrHvH?o*q$pUhOm9?QzI zLmq|S@Rno&@gSLa3MkQd|Ge0e$D82bANS9D*Ryy_2D^U>+W3*PWY~273IoF}L@O7v zRrcVIK{gd!e~XHShDOK6<}Fj$w{I3m3CcZSppZPG$tg!a%8RMH@1Lg+PMe6l0Ld~c z;`f$xz=@)=Sm}drde@skvcMoL1 moXhPn_wKfuTgiy{0JpX6;;4ahp|HTk)`kPyI&Xo)zxqXGwlAMW~`jt#a67S-MM1 zcl#`K{>EdNa-IfK$EqH)FQa!6WpX)w>Qu+1la^n5J<+?agc8%)QJBdVRffc(x~6RI z7fK5&n;iRN3r)Q;yRKciU3h9K=X@aTYY~ctKy{Eu?C|3VP?h1&Bk=lD`f`BXa$Bh0 z+TwaJQ!MQL;a3m;N)_%X97tKPe=bq}|961B{{=4kzc2iU_!O*kv{3_Tj~=bwBpII! zr$S;1xiqst(5{orCs*saIvB&HS>fpz{tvhaz8S XORt zzKOYK+VJ@OwR_sD sC zQ(z+abE*(E78Vw2rU-^KIPs2nME{3`GWR`ukv0dU;ht&049cL~DT*Cx4vvBN*H*$a z#_PL(389S&vr__8Jjc9~Mzoh?G{83RlEg7p*rep#Lw$1lK}bT{4QQ&$WYe}*=xS+A zUo6bz tU%r87$dEtY24cr34Dsd53#s+#GNNUdBeh3&rG0cPyjPox%b1Rt znFA6U5m83qKtf%gtn}4+f4f*c=!iN<+u0FKUDJivWM Ev4i<1Ol zSgve0sU=_5pD#mK^O+_3fY3@w_d(Qf-?{Tk-#RtF%`{-(^L8@7Wgd&)yt)vySI=`a zAV2s#eL+H*6)u?3LBmQXjvcx(>Mf32a; 1dqVH)>4~NZkJ<{qUBx$V zgf!IEODY|dwOw5BYNelx)x>;Vf#AfIp^A&2!l&JW_4nG_+qE<_zO1b|rFskx4} +1TWO(y!C&UUb*4@zjnLm6r0ujysq*q=3L$f0eU2-Ic5D4rRIO>GFf_ z8=ISSOiTrlkr%4R9O&ri+7{fnZ{OC INe;;P2YC@n+YhP1Aq>z68i&n704bw!Nbx8t9h3h5m46iD?htn3(>@ zG$FFh%^dA{rws-8`D3G_(|`PU3doUPUfyrL<^1T;Utsv(nwn-@s$)`3Kd-HEw*UAM z15H$X_AHVesHDuyOfFH;Ct!p$q6VZ6M1zit3#@+U+vebpsj@Cf&A{5Fvm}1s@RKx5 z&rf^>CqosV+GK%Kq=s|WR+dmlf=Pw#K=0gKPALIAT2Xl{YkvMtLRNo{I$LT0DDoQx zkpJq#AO(e48cTwycJ3GGm#LT_bmNU&qNIuQmpfBYziv|rD{Gnt3TP|E^C1ahOndT) zDj)AdBs^C7n`p-z- PdMfC)3T;jdD zozNOjrJf&AY~^NCoc`opcClm?x~o_7v^&_1eV4TpB|IClNNdsVD*15`1_^@3o7b=V ztFi6vM#M!NmqEP`c60GpT0I{TcL!ATfQ=EU6Gfd%Uzop$iAsQ0(2Kdern?_V7=B`D zVYM(GIL-kvsP(Ale7661JXB5eZb4L0!=ejVZPw!O6X&jR-7QcLOY=AW`3e7iJYde4 z=NGHg;^Q&j)dOuwG=DvDgfa2H8CI}MWX$bVQO!o^F_U`|z6h(IA2VxL8)RWRhyk>z ze|kr&$?WA1T_44iwy_71_$s;0C$PQhIn!To4kbLvQ?uan*6!RvruXKx`C3O*RO^(O zjk4#scZ4FSbG+_TZmE>Vo~xN1?t|+@gBvg72QdfH>|u=CQJl)e$7NRJf& ?eRnDwE5nfPe_~Ndlg>m8jxOlBsTNNF(NJ@ zJ5@_wKA6RO%Nh5PeawHGxn}1JN)awi+%c~|AcrjW=cW%98X_bdP}+$7Ic;hdK{Zv$ z^_+|iTF7}Ox4-!6w_c2Sx7wfDANkj2*kROs$QrzR?rQsjTb_G<++rO3O9gI_vT?*4 z>~_!c8rK*Z*L*54bf{K0myd|SESH3DFAd8&AQcReaUph=mVEXj<#J%)QJq$OK)HaO zz(8I5{H+6O*~)!2 AR<`VrWgPd#Pfd cQS$S!U1gCFiq`8Lh0oPq2Pc`no0$bR6r}E93YK0~&G4sSjk~ZYBo-4Ez?69!t;A z8+1GcQ=mX>4Okq|Kq6F{`5;P~X*&gch76}==GPk@_N{Q4;f82Hp}7sIg!EwA+J_#s zq(~v}Iu`rUa(&t0^MkskD!o$Mqq*+5L0oofz#vDwQAW4S-V?an44pZ?Ipd7`Vm_~- z2LAWC?uAvfaeiH$ ;#85{=q1TCLx!1nEKeQP%?i9)VJc&^>~nv1=z*$bKYZ zaQoY@v{$ikm(Ubn0(2}8E5iY~huV6%l7D)V6|h;MA<_g R*)l@z*m1ioi;J{g)|)KCA)z5Fml!1ZDg<3R~^&(?Ah*hZl7iRaJ_M>t;+`rEGS} zh%&rC-P#k rF7WNpt3-66jN;Wiapml zLX!jHI@hJU=V9+oT#y yDg4WqFIQMhHe)(Z@lVtRC_)zUzJEVXB4Sw2($EZ=lKG#3(>LOU*0dG22^n;B zN6d{sX63#)cP-zz)&jra8h4A0ZJ^fkp8JYlX&ge2E55_Bf*HsnA=PJE`8vEpKK-Wb z5YREG(4&(>sa?Ut#AW@u5bP= D z&p!ANmTqPXJi`Xm-eXGDc3uH`0pYPcvX~JqzQ8JC;>avR+UoOLDe+pr1nJ#9cB(%w zO9(ayffv>Nb`f$+0Sf6}4Eyp>iKdyES!h^T6nk@X>ws %UD-g~Q?f6|ie0QVp!aY4U}o^=hHV%9`1=`Q~dW(XF_i^a!c6&6DQ`(<7wQ zwziDn8E@a7h9%;Ms`TE3gutd+l);wDU8%v*BnJ?ol!;*+Yvp(iIicUaL!{Ax`|Aqs zBTy-z*|YyT)}b)mooXr_8qjqQ#VszbXk1GqpZ|kv06t=Z0Vpelyknlio@?*I2yB!e z^jA5PI y`-qebOTK421;+b`W^e -t zc*MGF*o_F45?T&n^&inm?y9ryW(f@s@BIlpjM;>Gd{czXLOahrWLE#b`6Hq_7pc&i zGsK!H>HY84fe^?$!qRYhRh1}6d`Q?!woYvDRlyC*=Ia#pWPy^~&_1hVcO6Fv9Bnwx z2do65)`z7+EqXV3d3o-;1w9wNrT0RrwQtK+4g>rkPbZ`^$M?EbS*+>s=xTsT+5Y-p zR^~-Z5eyM%=d*J!Ummp|F4ay~FxJc7q{-m_G@jZzRT*yT+^m;s4rGr|$|m{L6gvb_ zPslRy1!auP`vP{<1DOR3gqw;787r5z{e{-{j{wU94kSS?pv>Y3tf E+5*F^71Bq8r!gixMaS&eMx@4*(ivzPl1*nK(zG}CE ztY^DAB3L)`3fz$W3~NKqJ~`JSarO}!;UUUY^L+k-|9)HcqV9v`&7e&pbFtLlA{E$> zFR7|nxE1(3fMn`g8tWKIO-jmt7v0eR^38jprI$BD-$C=r%LRc~AjULfTz@b>2G)~H zP*5xSb|44fd=@%QMTIA?JFLpMI6395lZP?3rfO=RflZ69C49aS63RU&6q`{Rs-Ap` zarooMk2zagZpnjXA>gc$e^-9~+S O*fJ+~65m%1PX80!r|h*w{iHI<_ce zRvaRi@$zNO<;2d!W+;A92pHVuS+~clpk)CE{zWYx=yO|CvQ_t*mEzj1%5q)jq8IT@ zwme`gK n+EE3#6f&!6K)rhve5Y*h$?xRXFRk) zhLv|$qd^r2AhUr33xxNsQNB`qmu-)vx~dGR;Ox2gg3liw_zY+n0-*;48@yviLrqPs zunRg+11d*ls3i9{_)EY79UO{;{Jk^ba1G-?l5)+;NWMD>kJjHy5`u9;xC^d})u9II zw)ILaa)FS13I|Scz#fU#J&)hEhV$4dnqRG{etEvDz7K(T%QbI(g*^4oVu@b8p9+<_ z`w^uE7ksg!#=%ihOm @IR7=YvV^9BBbdLs)Zd!fNL _N{x*MLIp 4|D0g%uEew^UJJjN>3XLiZFqQUw-gEe9AiaPH zGCFtlZvRjHG9hwbcm9~~&YIasgOswAj~nu3Z_S`qbUU=@8n01-5Ud?-;b3_232K{s z%AnG(+9a^vZwuH#xML>PzZy4Z+=3U#r&xOHyf-NZnAC2+K+O)k1GwbB`-Fk+Id*aj zUAyZ4nO1s74e0ltmnY8Q*VrNy;a%dmpP?QzGBT(GLWqW@=0KJ*EV&OELB@YWQ7kHh zGONNApGErR@p=XGdwZBisn)IG%!NH;*UmF*W1{nVK(f*N_-58Q%| z<#n6MZ_NhfUhmj*WkU$!>F5QWq(u1@ot3g-yTx%SIp9vB_f`XQZnFgH&81>ZF-S*r zOfD7zzjXOhyDC5TL7sH73-CNBDpEO_m<;UU5+J)c<(m|YoZgO)1Rh;-nM=Xw0*J?T zj`!Eg6EkeOz64S2SErI!`}l-~b*5yJZ$Ml`mumc$GS5;|7ZM~HC6a51c^&xO*Y^Yi z{JbwDM*eyhPg;iCZjV>m*8 vs0m?RT1nEHu>{? zzZi}-ucA^Zp0xYwc;QG1#REbi8j4s0_w|7+NHz)Bl^gTKzM?=5?2x%+w5ovB&peN= zB**%6S0W+TRar=R)p!^SP$^xbfCOoxSDjTSS?=8IK@s@4XX4Q@Jb90Gk+dzN1;h%) zTn43_q~~;&QvfJazez~)AtqS6W0pN3a05Zr{>u?Ei<|C6Tk~wRx!U=0#Q7=Jty#m> zr*MF9ZLKxY>K$>yRJJKX#N-?s@Zp06`uW#Pyi_8jiIFCL>l{+Vq08|0rfKUGZw*jP zJSS(NQS L0Hx@rmr7$P<_hoUqi>~?gR2@tPW^X#?~^mo&yjg;KwhzH-N)D9Ubv~ z^g0Oj{1bG2Q##4w;s8uZOG_J!>2j~uQB(W%2(4Pk+b0;Cl#~r{2Q|`E^CQ6$QhjbM>JCHfIJJvpfLx8=MGP7 zgj#_;l|gjk;Q1ouUpg4r0Kk4iKS+A1*&s2vt `+P_E zilQY)6KxFysv5AYT?|=^(ifWU)6oA0Rep3Zpiq|)ZcT(D39sGjp_L(L?5&Vc2Izk+ zk_pG-ja0>{fg~IjAdQH{zPY<$*B|`E&ip&Veg@5lQy-`BJ~JM*z)o`eh1dTpokM^} zsfa)R(xt@R+AIIu8YF)6?|f6rUxKL2Ha-8{@8EYfN(TPF*Z-$OLH`%T|7V^4Ckf9@ zATarZU%7A2@$d^r{{moTVCo&OWRUF=l)mtUBqagPq@KEP7)%4)Q}Fro^LMN|l$#&k zxUXDoWa(1f4&pd=m6y#Q3z*CSDKL>E{wT0p`r-wuQ*Sq}z0v6V=mo$wVlC6*8^Wu4 zdoNj9u0)}6)H@>Ce_j;qa*LGW|79ZoI@Pnj7&K1%W7(N|l#D#kshx+NUCXSCbMVK| z!)6>MNG6zZd1ia*@|hz}RQHuNflOD)?!#stKHNzQpnlaxML_}Pq3GSiqm@PNHQ;Dv zlC#>x4eqLv3qorl2Ejazo{7HGgFjbF?Z(0}{dPGCv6 gDhnqRb zumd2iv-(3lYo92oM!rs4*s}MGN1vZ+417zOUC{5AsMI&iyW`+zC+jIs_11?}OZRtZ zFHt^JGrAIDJ@MNq0{mQ6wkDC2{@=6SsZRYz);rCAWW6)}M{rE^Kho@-{v*wP;y=>t z8~@{ULC~xJ|G)6D{m F|xXp2Sd?+AL!E`n77QgvIdqPW>_^+v;D0#8kGg? zM+D6!!1#bx2dxA?RyvI3&2}a!wV(ORy6Y1Zafvd)kXbiAV$8s}+(e81;f~?r;E)rt z9W4DjVQbVy;TCQC*qAXNA0M!I!JkF6)dRa^0?BnOUK2;m13`-vU 9U=NDrr^q*0l5x6YF%ufL?H zYa< h4n^Z?&0V}9Od0AXsXD!rQlVoSFmi+$M< zAPi%_k_l?#Fg$qi8oY`VBJN8l0O)-hDE7 ~*S-Vi>Uogy4F$G;=$HbOhCZ{50e<>JM(Fh&vE@jCB~ z_4TOc7Z0)$8vJS&s2PQAnu4i`TYahnpv8>eq~nV9@87@KK~!f66k&g5S)#Xr-<^t( zu^le81emyno15ET{#lus5O|hqY7wo>{;#am;^O 4k*^#8oir37-p8 zQ=z?meH8&DA7%*;3YM8?P>~0GbZtogV`%Pzw|*1d7O_ zuEbZu!oniQcYCFU3>u|*_Z{vlwG43Ix1l1?1nn<-&?U#JEO4QhBZ&kSDi6RGBlW&W zVY{IlT(`Ht3k#lcMl0_~xJ*Aias0SVdkmMj_eKVQOzA)?HPEqQ4u=FyGHpkzN&rk> z2qJQjUW_BE5C9RlWh8bG1Z(m?e!QMe0)1%RSL?UArKF706(WScVL=c(2Q+juD0%UQ zg5T27WrF@dFi@cB#5iKuF0Qt=_R^(GcHgi7g!$3Yp)}PJ*4Gw&n~sI02=u50Fo4Gi z6N>X)rE|RTPCtMqw!WRacSl%Q7%Qf#s_GAx4s?S~akkstm;tCnWLa4mSmj&MZEg}B z^_;B{tmtC1rt-i8vfrGfl$1~)*$;%YFlqc0MxhFA0EQ$3# J`HwPzw`-^48Yq3 z2>)K#1pa4&09gH=$eSS9#l*zK2b7}Yn5kQm0u+LPAid$a^Febz6WFd@yGG3*_;ec^ zh|2hMvEvjClUk~@e@skF1_)I^;3?j-^!R0rE_`dVTLuTH19uq|B!iW=;7{mBn97*f z;6QCTy6aR3Q cAU__oBC&hjSWRmHr%+3Rk4oBe da+ z0V#H0+8<8e$$lf?T4YK}fGqlcQYV~US6BDMi4*jF0ta}sDG(~XLnY?!vp?wz!N@eT zp7nrsc@-9Im!>w?*Vj*&pqrcJ;950q& 8g(y1=0MYM~_+vCxLx(g`Peac*1!=;s8mW0Q|ohj5rTvZcIsK_2(Ls zp#z}ir^oZ>p9A)mMeMN+#sFUqVGy#l_+$t;Nvgf}CJ-wEmB)@9t8f?-XO{BO0!91O zL6dLxnb(cL&o0+}cR0x_Q15L2E(wMmd4NC7NDzRRnX6xBMUigOyVIAG*0v3Hi9`kr zxQp-U$~@L+6?M?CejCwYt;Q(o^trPkDJe<%VBa-;705sT-I;iw{q@#?9QE{DcxK9R z;}yFPRPujqG>nZ@yIRNIGc|!vFE1A!?9a&%N!wTs2 jI$-B4uB|G_R-nE?1z-Jy%U2Vr-$-or#&)fIVf< ze&!|MyxUxJVPlRByDeS<9zgylO8Hi@=lb9m6ZtI_8}>k-t-7nc1{O=;)qCKn@$A|K zdg`kUdqo%RC`|V5-Mbcs*2&39%J+b@b6Xh|1IkYUNVk5#dSSvq4WoC~r#K)0F!{_c zAW-rA>rqHAm;^fn8+cG3urqmTd9+&d=FOWxk{$>h_#YBl?aDND5G{*j4nQhn@2Gzh zjY~+#1)KklkdQXK+@|N<c*3d1>eYkgQ!pfm2~3;Kbk;P=swhOk})j7B|gYh+AIv zZ?4Q#j4d7RPJT&ri8pO+YGN}@0)PsXB6mUTq#Q^`3O` dfbR0wD*ZZ1dGr}z((6`iqz|zQ%x4n1U 09Xm0@oAzONDX*K zrcyjZDir96zqT*a(OKHlW1r#I; znJkah>N1Kr^aIRldTNU8ee;X{$ZhM%g#|7M5mcx9aNh{-u`-$qwCGhmo _Su)9du8hoXqj1i^8EE1kQTQt^eq7a z%_I>=VM4xEE*zn};>iHFYmm(WOei10V*l)RGFT;`M)QHN(p~lhd#Xk0H~1aBwa^!v zl2QaJ@53g)fm|LCgFE^h3}oM&Lg5G&sjcQ~rgylwfYgC7fQ DenLw zNY*`a )YSm1mNCNW-*s1@Ga1E%J%p7cN87L;yryaj77=-=qk`~Ar8FO@-h|e z_4^OOhUzUbZ~YMU9bOK$G7xv%z}N<8R!+bH$&&+AGj9&1^V#ZA*c>SF-F7ffoB`S# zb2 0ic>7cag5Xp{>A2lir0AlVxtMhmBi zCw3@qu<*pmMiAi@l7AM6AJA=CC*pCq_xBq9R?c5SSbXLaZ7Fl2`kXW0lTKlRjDdU* zyl>c@P4crJskDbl8k$CcZBK7z2Lh#_5>qrnnPN<(f(=nL+m#G+wF4G}i>qsNj6jVD z$W4klNy}0|F~t+CQ+f;?>n-a H~DMWfo I$|HdTyk+^QD^l>ziCP)Vs(4LTJ< z#Be)=`JN_GPtXy^FEv>Z3cpBJ)Br1~Rq{d(qG4xOK*J>Z86-q7&LOrwTk c1coCXm_Q(~o8aQ<8P5*X8vR_SRhjbMXl@)w+wibHuwr<03Miaz zKLQwHWGFl|lro~uUBDB=cNr~(lY~H*AoH_ONS;Z34X4T{y$LDzl~MhU_ O*@VQAqw1EfRYiE~$fV6mu1GFZqU+}G33jiTBt zG=L%-08P)Bfhaw9jjtc%IB;{_9`XYg;T92xxJKNqa~zAiXF5Jhp~Q#fx|`6VpdhLw ze`{-N{L-){P~0&wn=SU^LIG!!$oi$!hMVCh8xkq209-iKEJ35|>2w{RQPp!hQ{22c zW!
1-OcIMg`ZE4$O8tGxIeLcbaeE? zwH}UKAYTlsoYH_=bSEt7Cv?vGb? ZA$QD9@xk+bK|$27mF&N6V-&edoh8n1EBFY#aK&BWFG*RcU7Az+9}12-9@ +I2Er;9F*Kwn zb+Es=h(@FW<7lgiR_1!@a(`~05E@8PA6J}|2Xnobw((1X5zKqa?duioG2xQ7F# z6R?>zfG9dN7wrK|FtfB&ppmIa-zw}lUH~Y>!O1x?dQeetdo)j*Cw+XTBfbNRH3f!l z*}`QCCm&u_^rwT=Kfk+tdl4k?ji3TiAZ=sgL=hZ#in&p23JiM`I}NnE28Avl5lmuV zfP~IbO_c_2#WFQDbwza-uubi gZ&O4;D-~y-R-4lCbMs^k2VdnNcq@+^*MX`^!;!OV}k^pF0?SH`hnWt zcuxT?lBURHa-x`PR*FACe@buMJ@A~tF}>1cPzkoib2UJDd-`vw=U9)A1GdHHfGE&; zou9-s0onuRdV=Clf*d*XJ`a$Y*+Kwz3P?%z9jF18T;7pmCx@7PL4&e$``(9R4hrl7 z`LTMNNQ*W&f$z|rwExs4ms&bfdwNtfe*jc2xtmEj{nBZGEJy`L8-+Q57;R{1coSTv z(KS*D+LCjdHq?R3uFKNGVxHn0;_ BC{2khtWn2Ik}9>>L#x9bMm1o$G*hl?F6* z5>p^c)mE928I35_jgxvBbTzV`(Z_;}^F~+BXb2#lh?cCCRTgNOn-5ecV=F+IyksX4 z?6G(CHxgm%8yoG{tgvqbT`0$({#=a%7pT&Ii27{h0IS&2)oyL#t4H3yu@kDQ&Ek{y zLkocKjceFjDf6T(?cZNyes!_&4nOd-i|BZCe%MxU-?;IRg@uK{M>+WM=c-DlJlx6M zT^nqp`oD{RP(E7Gdv@gC)M`*E
Zcrp71ZhD+K|s1YT?R@@ zODiA^Bhm~oDAFY$-8s_TG5dO0Yklv#kNs~S-~3ohVut6gtIqShZluA<$G-oR883y$ zXKguXS(rKoRw}$mc%{D9txPD=*qf4CiL_N=D*m57G6J=wn<9Vs1e7Ioa8Z_c`yDS6 zQ_sKnkgeLmRkzL&hOrCPSOmb_|F_{v^#i-MFw12U+tXvC@QJ=&m;ULbGnRJ0xvALY zOex{YGQ6R>>fet-hVj2v691nfF-jNB%`p6{T!-wCVn2FIuk@M2QkB1WmReO#u%7(S zcdh|SjP%p{6+UL1d>Oh*XUt}WFWGc_`hd+Vv!UH4F~2;PUP(UTIF@WRTGSjJnq5#3 z{G+xxEYXY#kF__RnwiKkiYAG8AN7< @-3-zB tygQy`T3!2%C zI&U&4K!uwQo{YjIE*W?6^N2jYrYw~`e~=V$;DVyua@EpcH|8IB#6TSspcTC o0j 1DpmxPn)$4!Eg!fjp|<* 4F%yo;b 4;n;V`C# zQdhnE@}Z6W+EynHNVi-CsDp#Fp6RyHS|o0j)pK0@T9B(bsryW~;^=K~z7TC(SQee# zs(fpUDm+=`a9ZfzDJ|@$eE`OM51}QEGuh?KDUiiZi+Hb1$r*`2@*K&c5k?RGSw0NP zI_aiKUYg)_E?v4L@M{}_DRnUUwLg9|JmZ!NQ&m-+T3Uiq-QU~-fu&XV7jxRIcVH)X zS5(U8^*KvT3fnvHjeh9 h^{Iq)M+^0S_r#LC4t_arZIdZ8)9RYV z26`~C*dioBb5JN-qb(&h_yX;9PJ!^KO$&5+!Il1v{*65Utm(%xVZU5D&^nG|ALwUy z-pV?blxU~K4rS9`kkRWE(_&rxjH$p2d@s>wFo+q}U4MYB*nL(w(5B5Uw^yOyAm--7 zE;gohw;3;*H|;|cO@CNoM_oCZ_wH-1=J0yQHqln}{yJ03tIhG)G9#>FTbsYv>gbw1 z&nyfLZYu#(V~aC7d3#~5442piF@7PC86g7b60Cy6dD68xihXluGQ #@P-5>=vD9b>a!6YoK16vbuR}iY(3=<#E ztFO;O%-*-KRN9cKiaYv^3!m_;T4_JG;J8_Am&JGF=@A~DvvlAR(x5%6(h5^=E^(|{ zU$jt zq0Fy(=d}Hi@}die45}s%O7mQM zJ(fqK*U*WHiEAq>x3>&@4xQKmPC4A))`AF<&$x+nQupO4VqTY}A =BG%|I$OdE?$2CLSK1(W2w?Rh@f@&(l}Fv^*nB2 z?;1==_NT{wbEb6 z>RiF3V%s@fURxUrPDPbGTrJ4q+jNtBSQv-L8L#Q_%Q|j5QdJg}JzuNz_eI9o72C1t zLHb{oGnUr)vz2X~kX;jGKx^HVH>(%9VPD{$H8z{~ZM!#&UQhmknxxJ+=MVC!wb;EW zibgg$G%wbmbtx}(pJgxOFVnX3W}^#7>*aee8sEc95RjC?1VFkAnHarXyXbl#i&kDd zdKfBlK`SM28@K=4w?Cm4z-!WS6*2&2IGd0Rqz5u*oF=ABt*7x=*c$#@1N(FMbEV_1 z;IE eg3E^-w#oKaZ%=y?n^a0(Q!c@KX+&8S zS;fR8c-796PbnIP{Nh~<^@yFlFujz|Lt zW57!oY8!-4gz(~##rmRrOnd@gWet|}x0()DV dFmn2qJb*eFNL(qhvdLWPq4n;`(;|Nos{#rlyGFnh{?s z_e_{5s#n6Ddu8*Q(}lVdOf{KMVUl^oX3rFVP~O$6V3x+(py#09vr5a@w7pFbpssFh zX(Dwb&mCJMpM#y%l3ZleFmBdul_PmIUTo)rw_F&5*ggGlEN^i8LZ5m&-yfQXP193P z?fKFo5 % z_VJBIlLa_Q%HEq&pB2h8Uj+o@gx#_kacbS(OM3H7CW!EgS^U3T01b%`* gj!IE%wG~DW>1|SC+07if_&nCExAh{A$Wf=qn1OTrZo{>M^wAGOt zRd4vL;zl%7!Zzl)1}}YAD_QDrAhwt6#`EVHIkZhp J(qT{w&mT@#riBA~(;yDA`ni77r0$8@0Kn43-Q3*FpxguLr3Q3Ll#gO_ z6H)j(O~b!8>% ;8Ib(rl`(L*8orl zSPcl`GU+%=M2oPOwq!qfeHe}P8g`QFEVT0Avl<*Z(N3n>71`DsTlUd63Z|XuY&>Kj z58r>6`79!WI|wI+>>nyM^q@T)2YpFvFVY!5mdof3i$+!|*h=Invov#K(-dPQ|7r7a z6iR1zX7{@ReA<}O7^&A*Y9#Z=0FM7F!`|Y+6)Pwzs>{p!H$}3#)MmC^CLwuNq%#fZ z&$aAhH#~IqKdgrfB{>M=!KJ+Ez8WcQ&l%-G49M `{D z{ZA83-?-#^t(XP96HBNA5%|HEzx!0ezlKP|b@(3MXE5-HCJ;HBIh8G!OWB8k?ci(J z+C6eiT7Z0sYsWo8edm3musicz@^ICN*cjvGFx$8YM<*2_Wfu)jwWg8J@L{ALC#%0; zHUiHxJPJc}yT1w@J))0iO T+i(hr@URNOk5EHz0cy|=QzgAj&N=#Z 04%mscJ_}SmJ6x0(&dh0LQ8yn|i#D*93j;CAjd_g* z6upuxRom zqY@+$1OJfrkja@EH(x&CJHI(xvCQYzgn6Bq#C7PkICA;Z+e#0<1&Q|ILhnfqJ=OVQ zYV~|cBCFxTBY&&Qmq|8jI;SalS1t`}6wN)z9=G?{l44>P(<8q23v28(RrI8Tq;j?A z8C2mE!ho#6ySdnCKAM+HKMU2z0iUst`4^GDjl6sZ1E3;fzqh@d&HnV$0LhiCMjNFt z`qo|dV!IrT<|`$sqZ-*h5%dWnKKkUGbwgp|dA%hLIJ3I?0&4|>{fkt;6wrZc_$seL zqd}9yDh5Tuz3ncCdwv%97caw7tp-cx%RbdaCM0-0HizWp@0TyT3 GoHIF8?@gA -0Xz<}MLOqEqLw`Z)Lwm^us+&e|G*XDh{rRI|-58^1D7e|bEDBWtay5;ZR|5;6N z$RKCY``Wyw?t#4vXXe%-jcUW;CcT`2=WfwoCkPRS!fX7hU(@d1+~`Z1NHjWRBx&nY z6o h|{jb-`}q{)f0C8$5wr=X=Ja_sacW!%|i7)Om2XxCM?D16hc7<;I+AN@81rFv||! zeD?e60G)#xRcUI8JYVzfUl?2sQW~T`EO$=e(5+z7(h4uO8T~|XxX0vJBSTEN^Oi-O zi4(wEE=A0?)bk%-@VcwZh$Z>^6^MF67|@4N=B(Pt($&=~wClR%G~e+!n&XgxnK5Fq zvobw6NiegeMUj|RNPby)|I1H{MG4!7en+A?BVx3gqa&5PHb>k1ICA#gyUOB+Ic@P` ztbl5e%Y^W?0Vwcb-}cP~8d2y>2Pp#U lI-D%>-nMwC{ zV(PqUR!tT@zUiz(9GRoCQpVxYMo7f__fLifdmha5Js(3E8{^T5P;v#vTY`{-W @ifKeL$7)_mpo{hIt)XjwU}G?HXIH&);a5n(!2!k z?c*;b9h;5XUhtqu^b5s#4TxyJ3Y7rDJ{ezYn6LI4Cbc@@#U%&`fhZQXF_~oyxSJ++ zr1Dq(d<}A{VvpttDutgWm%A(`Z;yJ(hN)M&``*IxXtbYqQ-vz$Zr(N=+bo@KWx%XM z 2Kq_=xJ>ll={=Dxe zuDkq!hnMI)Pvz>~$;koiQK8Of1rLR=SiZyPD70>F{VC#KW$QSye3zs&tieufJF;1Q zC&q!$6wAkIN|6d+f*Dl&ky19jw2TZT?i4X4J!n=+gpoD!fIOb6bC$=HUT$PW=#wFk zHt6NfygTC`6wn13SCK<62Qn#XKD=svbaeQmp?=R^c?E^8@3jHlB`%yWhFJi8)LZe^ z?7L565G|f&zMb9NKw0=|j3#^RwL!pr<_6QFy&o0phHW&XEyxahijalm`sy@VbtuE$ z*vLFk;)7jvOZsXYbXo_?qCqeB?w!CEzk|6>)?avZlwGC8tOQz?b{4((xMpKuN6Tri zg+gp|!@+&w9b;rvl;)Ft>hbZpo}vO#F$YN}&I0Y>a_1hXW%U;}6Z k1DrUf<*y2F^bSWLziK`bfvyzhLdNTFK%CJX?r-b1u z@<04P$B%Wiwnm^2%Qvq9fh@;mG%3xv*&$6USlC-qrC#~>bbd-?L_AMc&+zc@P9PZD zR=#q_rPL6KUB%NEX*xTNS$Q{>H+>z_Q !T*?!5EKR$2r`N0$~(>8V#GfWT04z0Q7U(}er3tBg0Qt4gkc zD@qFNV~+i9SZY`LdPsa!DkWc*MSJ2OaYh*D 7h?7!^EP4@0255P6z@`9}W#BsYXfGR>fH@l3n*9~m5tOu#Q0-1ipPh?~ z)^eiQ# 5=5Qk4ZPNKbtHb>g+49(R_!vf7Dj!y;EE-Bv7y}TRnr|X4H-`f z*>wx0pu{z|YAfJ%`|zICK!x-rkL}ra>4}ZKHp}{A8-vB8-N|k|k*qjYW>c@RERDmB z2?g}?<*Gwr`;82JcjF3~Ah+4rrO!~=6}F%H5KJAQ3Vc>`^@~4`2u~MrS%z;(Ep(qV zs?%Rx@9pyG SH zwgDIV+W0ci6tbWIG@plA3Zu`}E#o%W2acc_=$ZNJVfw9dSlOm?MB)ee1r81u3fd9s zQ-dWxD+>#Y!3Tt;(ML#do9eqU4@Yx<|LoWG;(c@#H;|LXQjyL}?6j8YA*Nnw _)srirXoe zhw|@ q(#o-k~}E*Y5sNte=QP2hfmZSLV#XAph$NCKfafGWM+DH*6v;st4gv|mCDzV zk=>X5asBwnr7mFj0!N`hXl824u~h;`e65BThjBwfp&&~B(wSHoAPQ9*0M!hjYJCRs za_=8L4u?SXm+{>PWG53ig$U0U bij{H)?UuM`18o0C#h0WT|IXuWY*` z #cyLn_< zw >qI5Z{l~m&VQ;T{C7XnG0nB_y2OGn1 yHh@8q+I()I z@qZT(O%IiW>4g@NV?u!~-PeKwV>$Uy1|jJx tEJ Iimh5Q$KRxz=AP;U6AK;fSn#xV4ZyDTdLnjPJ$ zry=m9U;8)&qn((z$;im)5$&Kxwu$qU-QS15P#WKDUgUD7B=GpGAh;dQguAiiyiNLX zmF3~D2On;KJAM{aEzSQ(jLxP>A+xm*QucRJ0{@2n_rE0zLoo0u<02hk=?Q7GUD@5= zZ+^zzpBn{6ORv=SE_nG?7Y-m=gPuAcYyurf+I@z4K|_FKbU*|;n6#K4D78!B(67jV zD(bX|%lLPq)&vnPXi5|c>f7M@+S=K9G`0s+EJz)$%bZyr&O=+GST^i_&>s!Y=z?uk zN)pcn>Jey{=gadvKuh8U{7(0YcZ{F|n2pmuR#gmja2N0x%PDIb#!Am>&mOP9nE#OO zkb2fD?L=!Dd#776_d0%Hb%(f)4%U?sV9MukGumzeY?~@DFC!8Xa)D-&Vb+xfX>=vS zp+SYK3Sc!F2%!o_gP1{}FLi 8HziAZ={T3f1tYewLt9EJ@jZVAmJI)wYJnWu5P<=xeK^n-Af!_0csv#7B z_$qockd;8=gBNzz4exJ&s%M&S+bi3rSjz!4ILIl3D8YG_7FPPssw30P+cpOM_l>pm z7uDp-%KMh3ZNRWuguai;2wzQ)1YM=S{xsR|$HOBG1ieA1t1hqLx?co@LBihZ7la5~ z3`8)$K~@9nnd`XmTZLV>^dTfxmBxIQ1BG&k$O4T2Ejc90qw(H(D%aGD2WieU$Uk`8 zw`35g*f2i>7>f8EoigZWfG`v{mxeLb>p(e&+RBrvKY4H7lmr7BU9g@TLw&TCw7Tg0 z`3R90fD&d7_|D<|mOZTKie!j}vb_)Y5Ro@9xl@6TmIdC)9hcxz=()Q#f7TbGCl3Xf ziFF92n(OQRj^)tRR-rKone2=;8f^s&_yU*F4iyax+IlQc_ A=adP&$;aztdRl<{!zf&1gm2WjZ8 kszJ;qKw7CYUH-*u z-x*kGzkAWNR|1H9MV2cr17ol1U`+wA_S4lc&8??tJ$)OW83F_I0HkLq$A!L7KU(jr zzOeV~pc}=4vk1hz^o)$_Kkr?nXdDC%T6uEGvLI6Ye%EVL`z4 W_;TO+m&5PxvP#r940hTn47B_bo3{3r9dg z1)R&qbDR}0e3n%w8EI)QP%DC=coi3S&1-Mt6VSJ%XIz0=_qy$xkUc#d$SIJ7&@(V} z0IMA!^=cr%y$cCRhfPtjT6e9qyqq$hbo(GZEsfi4?O93~g05~X4euvUmRR;f4^xY4 za)(e(m6Vi3A!8ZFxCkuuW~%vtGT=&?voB~uz5+EJGDQG+gh7aR7N~cxUcXiWq9y?L zN-)~Zxo#uie1A|(GsNXQu||;W$?54@;H!aPiV%cwA~u7-5$1t9P%xFyUs$XJ$oqI9 zwyOXc46NbhOPB6Gd2$_6abut~w#4!U0Mpa_SH`z&bd`TeiA(5q`v)$g4?Lz9phrlZ zNdYoYefL=gUEPhzds4{DKN{!wb^Hha+{s@*hHG;RYk;V6sm$`OI2n`arg6 2V-!mYco0}4o9>!A;j36Ho=5`#wZs<@{hOtQ(^RO8gl%$4#g2rNJV z@&M+ILd=~PBpZscyk{B=g3F# tX8Z|M2~asYMgBlA{h6u8C=*O-?_Dx4Rsu z!*yYOAauLV%=`{87qYB}!GVEOu&+OX$q2m4^%unGq0!M=sS|?Y;xuusGV1E2ARDCz zdb}av(F>rz{Lvc|8`}h6?CSP5F1KVP8Q!UwC|cGhB>q@emkMM!rl3Ks`#K8!O>i)6 z(-7OG0LPmO`oMxDCp E3wm{55H`Qmph{?MkPvT}DKfOBPi zJq6m)qAGy)>bN)%2_YZ1_krtD)xNd9*QQ1=jaU=#4_+iMCxOx|5jpEX!Cir@@+;UY z=Y>9%sR1C@!t3lp;D`d*=o1DX_ _Uq;RY?4mQo#Gqoh>R0m(Y_l?8r@QboK*)?Xes{n@MK&TZb%os4=)ZmY1_8ot z$ih-sI$=iw^OfqtX{eT@!SMxSLt&IuNxzJI%AGqXPzMN*WI#pqb=@emk$Z2TCjxRx zkit;#nUeyWzR ;zT^8f^GlAfNT?~@|7*4C22ETVSy_9m8> zm1Sg3fu=1t^iQJS14XP3Gc5#9V7-v#+4<1{#UdtyDp6p&yk?1jVul6SD>HS`-Yks( z;N}9UI#ROz?%flcpj4?D9!`K_<87M}Q3!VBJrm$r4o2~Zv~c!QQ&Yi=+B!I}ItRBG zgSZ8Skh695^cq`Qp1}sMfU=8vo^A|;$E(2f9-E(U2I6k}{y}es%1h9*LIfoP?3yzd zE~G(=-qNx%J==p55OeTZgZ(A}AqY$t3PgR#afYQl@e}wJlDM?=bi^&L!*1v-wt9>L z{fi&uJSx*-W}WmonyeT6UMBe*QNY`M4RPn0>=Ro}z<9Nb?*~E_v)(`#a@7d7IyEq| zE%~o$W=Cq~>O3vz-vQC+@2>QVB_r;vC`f>AFfagT 0dv&*S{^bIM=EH&pber>$yfkHe*iMaKm>c*js}V>?SG~&0%dhlbD}`C* zHUIS%q{ZWNb4|b(Y=vb|l$1QNqBYTBU2^&I 1NX_j{t&RXQ7!IY`tgnPum5K`W?n>1+R*^7p^`%8Bi+;<|_s~9YkLIVM#=C zBPWR3wIJOLs)tbdL^X&$L;5Z2%!^KZ@xgl^92|Vn$%QkoYug6#wn@B8)oxI5F!09H zey(2z@BREa(|f!-hwGtr-xmU35Das{Zcp)o&kOLvi-MTQ6S|v;f@}c JUw22J7e9ZKa*loPktHt6Bb@|8)h612@)rvz{#e7@n+L4 z{gWwPu%)%N*1F`{ySokO7T&m4UaNr!H1;U={rmTlWa$ufm_j@a#yknUR^CIt=PwE_ zKRaG$>_;mIeewqvQ59PQ7Bb)S1fd8NFX|RHUgHPmp%y-*2}n852aDOk#eHZsnd`|t zR}H%L7YF{oL02@kylkVZU~SD|(UbED y1hV&HBFFcyHhp8y~L-f<1_CPOq^> zT%;90|L}Pg3MlOw^h$B9ni(vvFbL=k0K$0%#{_3g0!ZIF3rv+E^tz|7PXl~80g_qM z_SG`P5))n&eKIr(O+g_J=UQ6sFYto^d%{+bW9L9tMh1DCQOF=Tz%K}}v+>(*WEG0; z+Tfu }*!x>3+8^DFE*T@{u~D5V1E9BSIzmHHqK*Bvdd2fe-_{&f;lz1^^KFApSMuOc8g) zTn_%4vPHJRBQ{uJ2)X@+t#Ke}sQ^75Jp 3iZA%adnuZG|3RLoSp${wF zcrkcgI1wvbTXpU2At0GjiWj^qFMk%IJ4jPsdn}dJXHXRnE=tMDu7kXXf-6by)57>T z!IW0tEk;IY9Cj52lc&K{_tz1?G56q|Fa$#YBSfL=L}_Vh#BX6EBO{1nZU_o~09AKN zR@oDp_Qc5o(1?JY4NOgkCj}vUomT_;gH>m0qjVA;jBay=IeW%4j{E+JHU|(rA&~>< zdKAGH&iA6hCWsAzW>6*$Y)ih~q>R4XG#NMtWwA~5(BAhYB?1t>|EQ}Ai-`CESw}U* zrc#E6H(^`Ito2)$H~=A-Qo!2tn-FWCK E zEiVxR00u$3g~K%}Kg#(kvQf0+O(`zwwnV{3NtIG3VEeq(Axq1^!qSw%;^^e`86pAE zji2{WJG;C24mc%5G>;@Z;mYET0;8S~&RqldY6STU=*VNh-%6e-I6)Ly4qDLfZbmDs zt4~244Pvp&*REO6gAc%hx4h%s*$N8@GM(Gt5MdGn`z>c)oTgz?rO?UM;e&~=RM*|x z*|}}_;}00fISp4y?-Qlhk046Ue_C@2vUh?zpgp4yab^SW2+j@(d>|6Apbt5>g@@b% z9V(g&4MCvsiYFpK?K3He0ke9=pNoy{JS;HmUnFvd@5<7+y@EuL`lD2@Hl!M0GlHg* z&joAcJj!pNBB$TJ;lpfE(60zGFJEldM_A{JQ;a{M-S_if8JBK_&sMZcRD%hrhL}Mc zO2XhJ5L;ZQ8*g&}Qp=9C2iJfbg`|04-Op3 FF<4;@fIM2S&%nX8By5XC8?2A$e7MW|`h42PYWP zL2@ec>+I~r7cYhwUXI3r*t2$U5OY6?p|TCCVDP7fw)dNAXLeL|fA6-pwlau`RW?-U zT6$uJgNLm-w>DjvIgIn##nVfLFu#i7SXCQzw-Z5z5C42U!%9a-NKPJY7%e3c*EKr@ zIR!lbmGZRs_;|z7i^t})_xt!;LhvhWSDHtU_9xsOQt%1*{qgR?98U!^KV&ZLH7v!7 z0x;$-OpCYkV&j0H=0mB0YIaKbsFN=U5fZ!O=re9T-dzkh6A0;~H8rn5OPCd+!PwTB zn`F7