~ʫz0ǕB&KĶiqf÷^m%[vY P%gؚ>Meo5$^,زhJryX"E9`OT%0e$Dj`!_%XYTD$aq~XRcϕ:Yћ9 <~Byy l|/>2&C0S@m4 ]LT4g/sBEED-|Di& [¶L6*ՌC/L8nC usş&f@ <0\-5|"N@naDp cݡerA2hœ:"8W<5%lœ%bBC|C\,%g;bY it> ?=FĶ,wE4 TBftD#|"=a9mb&QE 4h^xэ0L)3^[+F$0<idPw)zwB*_w>WH^T)2F4)L7e[_1>,Ge&~r(h`/A@d)*@wGC5xW\ &Z۹Rs z>jNԓ I_^W&šD@k0H*G N/B.DrM %q4GÛ:d4 BRӕxVPDC꫚ SA2.&ne4bTu+N!gI&If]gZw׋zA:j z͔1>May{W]aVfLtYҙ2%&ؠW/Gzd#ĶUDh\469f_أEDqpo.nn6_eRPP/IG?U؈sݶTPzݵ5?<7 J`SG&SBP/VΕ04?!niur/fjaf3R0 0tȕoJXwn t\C,c  '˴ WAr35a"чƒdRkqۊ7Mp0ٕ$+WM]VK7h ͪчfq1Z"D6.)zh} ;%^c׃|^`~OХ.oO('b[a a[Ohb.0E0#akЍ.IE*3U# L~!Kc/!Ըnh v qIEQݦaxn9+B`pN/sOɆYh~BCG= bĥB"$qYìPTt8%]f,n9"_rGa!ȕM bHW]Q ax/ᄀDҚT-W5V3R~Uۉp qjYKSE{e^^.y çaG~mYO-_ SSFx"מ`9'J_&Eq9oJ''S.Ƃf̀ Ԙ`4wwTtsL(2'0'<:uP27DQ(Pc<sb@$O͕@Z?~,'~e3hA#J{a_@ z3zziͅ|A3&Q+!Oi4RfTş B8D&L/T<]S*`M slV4]QQek96V \Lˢ 4dxy46o`YOb+-2w`bn]C!NTH H'pK};-ːC7") b dkDvZ ٭#@]H{oaڃI͸ě%m*軭G)I ½0(gDԊdJj )gQ)Tmk#sPfR`M8O?`yTjc,x ,g"  \?u'L(qs,`AKR(IF tt>aH tKCO͂ZF6⭍B5z!0.gh[Фr.e [Vjȣ27aPr1o^G;bG@B<R ;f&'k5L?4j,ы7(2d\ @YL LKFй6V)z ^v#/[CL@q8, dk"3A2*pV.A:u gf̍&tN#_V :LK)4C% t|;.Y#Dऑ% ), 1‰|A@(O"&#C>:JkR? (N ;VՄZK M9yEz,7ja|4McTi,,h%zp׬7enO. 0oOC7G" KS޸"k@啵UCm7->NɔGۦ5EMQۈgK*2!>.%.):l}b;Z j_7v4_/B]w?>tw}o_E\UYuuf+O~ngmTC˫77cB]^9s|v=TD}[axo23 `[׆@"7'RZuLE.2py$0̀ =r){4O4d`Z Ay3vw*J;!=Z}e>U1#Ono;T{ΗRƗKޢ>0_P&~>վ#OJ=` m5܌53lc Bi5ԇMa֧ = XN&PoUb8c3; OEaGKGu.z;htj{`A1duU6(؋M>86jru^ _:9~/wWBi?E,Z> kʽ}ꎊqi ~x+i|_>!~ƳUQ ղ`ut#du S/EpVz(Z:wl>,bpK|ޟ84 _ulZ$6bPdz|QK1zm>WnT yz^`IܯtSSiwz\ߠh4"Icе]w|\WfʒO%RNϥ,%TF}.P0 'Fxj~$Dbo2#컩yR r՘׋ e^v'/fdnG,GY܌LpcGE52YZ!āQ3+?ly-C0Rg$V3$Q1 ,)؟:Bi,zǎtB#Z!5/ڥZ*@TZ{d))EK?%%w;ŷ<F/.}/ )(&q=`aB?oOeYY\.0UBitT\K\5 u`-ߔZ}WfޥL .l*]TyRMKDuRKU.]TuRKu.]ԻwRK/*^TyRKʗ/*^Խ{Vק4Ξ n{tCrw@[2\S{IܕXkjW?٣aA&(7*k9)D7dE'j&3NHkl}=>h9~!$ qiaϧ}/Q# ˲ tz\qY-+%?T~ gk3U]%ơuA׎23 >Sn,i/T݈ %RJF?F{^'紾uBj_@*퓨7|B4ʘivʶ8O3w)nѢ+"M6Bw'Sx~d, fiJi_``EžytF͏x/t\OM xmLqj*i3ҫ͒7~"=>Hgz}C#[}oOIOY^obf7ИivboSaM._7Kx{t"@d'}+BeK{~IDdzJ*-{}{Fi.o/Ky|xĈ13+Ayv U"a2!aw $l-VD{RKڗ/_T}zb~*'mӶaxt\7`A|Y&dl̔Ő/_i:+jWcH_4Q3#/6"2Ɏ $4򛚬84'* mVϊC!|-sZ8xV R f9"d>f!e3"˗b?7`J1G˸G@|)Yx@/df3늴=q>1Ohɑ)Rq,Er1g.DOeV`R[KYW$j+ǪH[wdTԄ`w"vHf4J.lzQ.[k&N\nS{97 qX* [qb]ʑ˻7J@_F۔!$~$`gfBvtX#U}bM.ӿ.i/聯[K='jad"k,?+K.Q-nD: lVtNg>Is>t(ᬔ펡Z}`ɩ JmRy%YuQSm5 '} Z#AF͖6'yef' ?uPeGA'TM$^i15=J :~C5I+OiRQM^Qً8@D>9,Hsh䫵uv}NUI@x1yDֺ֝HK iL`a|ޣN ~>.wG'Q;,~ٹM>)o3t޽.`*AO 4_߾AZ3{>c`h=`oCO'% =7}ARn_h| ӆʓSa&OGPweD[̌|ߍ/.^EjWn-*ҳ{&&ؔQTkVwe)Ҵ1d2jtmSy}.笉.ϻOegOxlĩG8]U/aAl- uLCҚKRs2g^o6^.)~%8Ull;d??1UG[w\\&ĭ`!/t41w}a tB}@5=IP 莏pI+贷 zz 3(t8GûQ{.w?`. _~o}a&)_v")?U<pu;zԹ`~1uŠ.tT}T+LS&1t8c;UWL"~Olv}:`Su\!2~VM/-ilH1X}X{lEjTNzaBW%6#vO|Jǭ6fx{y|dX @O03Sʘ:Ξ[HSb[,.XQ?OY+ZdSzf< c5`+ML YzssJTjU8a:m3J ~ }POg{?^gO薦:?Pz[;Qt8@m֬ 1 1]rxE}ϷT@'*.%R]_ɧN؉'{̟C\WS%[$Q^ñ(i`pe1Ly02&dl푝(ZRඇ/_ AmV\{ Nm Mz >(]|ѩ&^ڦئe hRt̫txm pl Hb]Gr2{56/jhY/Ku%.ajvIϔ;&^Fw`-OkKuD#wp.8&wzH%HHb;0J=X͠yAa/`A=r @8GA<A(ka5orRJS"sNCF@)]ي,=[]huCngP C۴1.Ʌ8+ݠM9L{=.ͥ{!NOQB:f}}4\q]#_>~8RNd_cZ-oV.,,93= =4G}&k=>v*Qo9y kX7oKW{whGu}7ȗIoz >):тN)쯚+.4Dpp?e’0_D߹ %P-I 8vyN]a^"| Ȧ'1&DT]yI tK؏,C ~oS1hOP4$0&oפgY]F)[@ۺ%E`JEdjj} ]$* ɨ{HT$"BM.L8N0\H`M".=.;uG;=U~Y<~})Zr# w4t|x(QR'fJ,81 ɜ(iF\HK T(8\K@U@L R5 3mƅ[PK Ge&zy0id(Y !X^ZY|1Pcfn q%ijͨ{W']ydJ(x$Sx.* )4/PBγxd,_q8CW-̶ȼHzj. 4pnE=#lĭ_w'#|~\wbkԍ3]bhH% M5bu} CKW | pp=z }m–%CP3ܕ(Nl( >Ӈ柱=mϲw#\9\ `wNa{8 T[ D+"!zբ\_ĽV/mr8A]RYSt=bl]ឩ^ܤvHaY,N'.&ђn|)mPDH0XRpHjeO60J 6<qJ'ry Tq4sؼ(y~oU` o28Ja.!?p>pAc?p[!X ݛi;>P V\MzSsLIVMLOϊd,؃L68{3|=Vk|{//mB`{lG(Xͣ.[.C渿W!pP+~/<].nDmPޜ5c nm}0Vˋqjt췇h%u A3b]pO\{ pj3MOIB%M=eNvez ў;=6^7:/|ms"jJHHѧ=tjڙ3m*uK.۪H[:}]jL<>rxj_uVαPwb6A/5ML }Rq^T.K@&>qՑ ]=h޲cJ"խ]X1EomҭE˰jhc~[y(EOYbCt``iU:o%\,uk^'Uэ|cYn!9yWKG6%gbT9 Rt_YN LqC%zeӹddYF:ZgmfEi%Gmǽ%otRW^1Bk>.o)XhcPQMtTTd>ӋBӮxm@1x&L  1zk8]?u_2"|e¡SLl̅LY^4#\±5E:;a,?u;XZ}hJ0>UUǙ,ʑI`U)Ϲg^V>#/nKYVfXM-ovÅ~Ӻ7,է'#}sIOy6?i5nܗ!j?.D9xۀ̋!MFIIn 2gO(o9?mVC=)Ż$-VzgW6xy[ FUyRRZtQ\y,ѵ+hk渽;\*ߑߓ\.Tu`Y #c^ l4RPȚTaI66FOzr@@e) C5HѫHA,W|F~Xa9 89+Ws %? 愍5}ɚZ.G\_7  &~fvQ$јib|b] Ɯ,[{`\ Hx "x_]&y8'6Mot*> kq'nMLL;_xK͢Cq[y]zϊ=>?}幜+wFL[?TpZq!b դMuӋ+Di^ڲ?捤}Md8ImLFVy-g7S_LmKaEnr}VbZ- l#)ZSeq?`këZ .!qB0d#8ʿQZٱ:b6 ]dH? W磈52QaOը(*0"cX٬7 ڀ3H*tE`cʭM cfoW44C̜A^ U.kbeQHR>X]lS12XbAXZE)UN PUKx4MT__F./+qKv|/ǹq8"~%Db4^XowxAn}|;MߺU5f4I}e\܈ XјemΌس%G{r?9B&[pxş?S~V~:9 ((z@Dف#NgHbX't)p`*_Ya_)ޚW9HTRQ7#e4'P=@ipF (r vłn4њK%Y/ C!ܙA^$Z%"I$- vLqi)ag>ȷ~ 0j6ZC0x+̖PŊs *--XqNeqfr(w,9+PDHA6!%?#0TfJ<[(00@ŢPFF0ن ߄e+lB NxJڤ`%8(3gY##-k Gr9D[B盛O[3HTOL&љsO$qïMIddXg֫8/qu 'bx$+rXdyF_uP+M@<#MHDI pmootFL*ؠ7 0$HˑR93W%䍾&K|~*·7pJ&QH?+,L[b*U"ZlkJm X DY:^(Y/v5BHkō2R.E9`xxLDpBIKQI'RLPCT>0Si8@ve@3P7 q F[XAⓘ7h TE'w68ɚ< ]c\}ٚwOupLbj=s58{lHrE\S0b |A;?kbi;'9V1S5c 4ׄ<˗ Tr??ж%(IIBiT&?-*=ua`M.f rna95k2u Ԁ<[*Ɋwc$6splIaDqx 4x\(hQ(W-V!*qlp>}p5x\.|2 X̭_Vj +(c^d5:(7d`W p?kHM\t/MGm#Ur2>5՛w#W][_֛5ufб{BivʭMO;!kxw̓_^07mKڰj/TC % KyEKW.=&;w慅OޥmynXiZ \`4#+=8E֤~ļW[ 9H^|ʮ YvkJ7$ GL|i&mg LN܍E]`M ՠuNvܪ;vV-i[ql-g'o^7TT֝HV2\[T5S٣.gV8ŷ8 –&䚠Q6"o_FV bUZِ5Nza7Ům*@eîVyvBV;ՔB0TR g]9V*GW]~JT܌Oek2=7(c#  6l&b;]SrxN gg3_QusW"q~U @q]RS̷/4,ƹ1/`qU6ǰ4\]VqI0ܞ`8B&) l.4d'ﶲxÊ$M*_`ը _vj%~IXl=w${I-ߦ?љ 4eO,9vg 4OT\-5Sx𯯯'h>//˴i@F"gS[ZھP%ӁaVϏjx-zZo7TyϞ'p QDŽsPt7JTP׃-.ce&'wX=Q|z{^Sk<;L)\'VBTBabpQ.6zpj,=w-;+QՇ5J!Fݡt+ ү`I*QC_eP7PYGS @jH+tM'^vcS<0' W0x 8v %ߋsxAtC9&_oѩ?fUNDo' ,o=hI&%i2<K tY1]dәaIz6APHYAuWaTğMgM`vA*NӾ9F_g`0rt|A"6ߢɴY/ P,"Sui;̳1ACqat߰%,SQ]0_>QpiR]-Jq(, T<8( vB}|ݩA:E1wѣg=@pqwPwa^JK7ٿJR0Z ˎˎ @'CtM f/Twb2oXB"lSyA*t[i.HGB,sk|yY[ Rh1a)E<}4J}QGDV:9~ɶM//?.;=>$b^NM<[o.u;O!dqmv)"-L!`l s"樋č;>|`Gp >Hhvl4M4q|% w+ N]3cdwz=H]İZ̧zk纋-#'5ܩ][u!HO51XE>0 BzW\?zx'jtYcŚ6T%`6ۋ*}=^gJj;)&ǚ+t˅4ѸlOkuYͱַ%LqׇO1PہQirAGU9bXrix!RX/F&cHdsӣ W$NbURG,n2[ޞzNi_hq 2#M0pWFG^cVlyo;78+Yh1q<9ikt6qnm>.+'h#x{TċKHV>?ax{1NC6VSV_puܞ7М:o",.QVZye؞kTJƍ7t-Ӳw.6xԎVZvPJQnm(y2NtQ$2BS Baalm{,֚L$oe~'+zc"ǵcu3m1_mh17PSD&ӛ\ߢ/s|rYXAhx԰1_[(~PIxZv -m-+hR*gAex?ыGF\M ypҼωat=z5)> 3Uɳ@UkP[fC 5} (< q{lO<=$5;A8 )|^kn- BfgKٛb-#R^7RXy"1m=]ʼQuI0DlHD R EXa{= 'vr:{,V;MM@{*dĒ]8txtT5t@YjK-7EtH8+}Sh7\KJ\^:M~T@"DG7@_m H@{^̔Yi}9;,H=J2LiD5~GDs-#H m{ӈrTƘ-$$KiLqI=cIk騨;] .nmSIucu^57Niw6RĕBGDty/@A $#;&4(f۪Y#KcQnl'I^K ͘O4Z2]P;tI]}g鴤:r+fl5M&'$r e<ʐ-oRn I I? ¤De}Psm>IS!+,FZ*[oW 0!Ħ"Y҂fqUnTs$&kkiiRT=Qν* dž5M  {,׸A6'I}400u:ǘ}ik\u?^i[k$k쑥n)) }ÍsYqĒ=^M[\.^ױ$ 9ZC\N''^yrh\ %==5aξ[BN]*VCzI ,sM֡qN5IHj`Nˮ2O>rz`sNlOP8WpVZ |tx9N~JRb$EvWd5Ѹ4@ Z)1)#ۦt)1$\XtFn5)@{Adi\0/&M~L-66斑plǑő.2R6)%+Ξ=w%tJA) )oe! ārJ/crL-tsax O",Zt]h価BLY`uH hg%o4\&H4.[ ]MT+/7p?d\F?kLa1^Z8|\j?s)a柎kf XȪ-{UXۨZ_cx[ Oٗ+H; !cW Zͤl^|st^*(Zǒ2p^L.#`p"e0r1\؈{/v&g1hzG׽zH4^741Iָ61"q8!x|hhmaѓpN킌TBIo1͞[;GK#qi̢Fc8vZ\b:H 96:*^ScAϡ9>8QY0 pvxP[+oo╒o \ a=/s6R\Y1::?+ XtC"?O^8&h=bh-ō/Dž< D9l@AQ5:ݮnBuȪ%CD3!gXi&Mǯuq5V\tMH&mm~IXnl9HS۷Qkd\t0,4pY ^JiXjD.yn?LPt.Dm;.uwQW;TʉTD z Uym;ciy.>Jp\Lo>,4nVyK}#üZŸļTHB{m#\ X= #ayOrRijѶ^|֫AxX": `cw#An&,6Sg;2 w0ipT|/m}# X5-i6=uW(p U89Zb l]WG Y8/elұݿn[Z֚{u )!OuQVpTb[pK%sђh@(k ws ^7ƇWnwBI+0o}0 ۿ6oIۘI lQo: ikwJD냭:%b#Pb qD>MuF /Уۄ}oe/˗5@ /BAn@j܎siI:bCIgU̔|͍@&]P1 (Yk_t,5tGqml5GtaeӺ i=ܠv#e:ئcuF[TkX_@{hQ]6s([:4BnH4T#GDvMX}&T\Z+<_&TaHt*2@K>42XkebL?@]龋^MxJGSWH,nl,]z8.,a!._.WY}:F2B}翅X\["p{C̝92Vm8Tq9X=i9mPS0RHZ4PBf%D~ qMV5ഋy,'Tb2)'𴉼G*sCQFZv-<_?.%uCY_Åjxn qfK0%5_ 1.`#0hk7j4pig\ 9$^۔8N q|O*7&܌i8,y;V X.nעD=)vX/ܒ-~WHrY(LuU^??dh;+ENiTK'agdo]^9\O0滑97dF{_Dȹtn1n/5Mjnz'5nn_d)A6!C]6t˺3el M5tidVnVgW>ݒOPQ\ Tq ƛ`1ڀN&hzi/r!¾" ȝ)i{l poxKcY]'[B4qF>"RTd"/lE$nysyx᳿U)̖oSml|}fd:Hݮ}4wb@׿eq̫;C懴z/T6J,f`bApI28]}ݑZ@y84Zjߪ%f6tyFCn,?C!(aŮw–~중xk -&v \"e N<>Qc3r`|DɏAo2\xο, _KnaeRh^.҇.I^Q^&ayfߘ>_Ixu_Sp0^SѺU݀_de9p$%qځ5<؍Ga6s.ʲ: ==-7:Y(3rh!ѸxW[_1zRI8{D+㓷Cd }:k^b,WñhV#τgɜ~ x輦-uxEK6T*dLحsx +$ b,{0brCꆧM^CVo+'7:XSM;wnCaE+s49lPWrM+/ٹցӆS65yRQBqvNdn^)ZX_k8h(_`4STMSך=2 U 7u;Kg,dU/7M7V'IEPysX6\򱭊=O^[l Itը*O ٤ 0 wg$[էElٻo,YgG^nB3oZ;mPWy#_f''8 .s #%:<a9{-3ռnu$䜤O5}^1WVNLb3 KaC=,Wdx9CzglV/Om-dfǮid͎ٽCʮ;%%ڎ+@,uCzv/ZzM.7R';gN̄oRߪA䑊F Inj\Թ.j\lIq䰙|uM.5Hr$u( T ϲH Z2F~B#/mPu68a;~NZF@Y{I9$UQKI6Xm~]Ԁ#Bm} GeoР ODLkͷ>&m}.~C(@(%H7Q'{ (8\uhF=6Mum Zu6H|$9 lQ(c6`׷-Qm9$5=Dv{rFnz#5艿4 豆s!0s9c&턇rԑ -&dp>))nЄ=:$ aumm-oml 7L5~~hH6h!@,vvQ-J@WNt1츁]E)= OJ`[ k&`3i©qyqӨWGQrTҵAf]R<83gX .Yn %5*^7cJ<_7]gx<=4{am81`4W8߂hW۷E(K4/!\24!ܕQU!:?\N,M$2S[ߵp_J'Nm=C^,2ER۴ 骄rʛF~[= Y; 8ԩ(q s3nWg64HcOb,> \ӽΐsW<>RΔg=u~]/6R2f{?Lj @єb5H!_%W念T٣Ϲs9E#Dxx;z ^Jб*O1U2C;m$l~i"ۍS 'jqU>?T-P)6U;hv5kn\<券,yj\T.osqA;kM\P]$&\/~'9}l$ ,K{]<}knWf$Cܐ}P~IDO7R.OaQ0Gtֿ0~Y jz 󿲎[?RvɁ.*3to8(_%.cK%7vXt96}k'e(cmQ&*InLoM].& {'b1Ua_敖k0*H;cQ}у۠ 2}$/d}o@Y7- sdoStP5h˽5tܑ&gC Xe\ \o846Rp"M}/tBAItI:P/{}E$H o0RYrTkH !QER.K!0d6!5#^G &sOd7qwe@ tټa *GEjeqny{(au-F[<:**PwP.S {Rl$):HZ ٓD jОiS)ni3a5 FI _(9cfa0 ȼ?Բ?q[k1o/.|Ò%=q k" {!+*ن6U7 nh꩕|A# [-~ceidjIc7 c ETӳ<CRw-+.Ykpi!/0/fMƄuՆ]7"F~rX(Efh/mR%'lZd|fhmr:&8\ͶLyzDeVM*ǒ׷4Hbv==|noqDZxci"T:!a%?^\.-2)"v9CR3}U%1Iz a^:7Rg۸O8  $JFZDDMz&__=ds)n̪/q~@m$.(뮅iB׽M߲ x#涩 sn5;Ou\˂3( ,Y &u0s'[)bTX@i^He-}U:cZM(p6-n1u$[gDXm#yGX[%a*X t;J,/rC\h.ע 4P*Ldme;A]+414^(ocߚEPS0V`tq879IV*@uwMQgub i&w}R3M܏ $؀Uq+sfY-=I\j̓I<, xsg\_Q^fB-lqb42.b1\6789?p:Tϒ Ocl$JSn]\+/ p&drdsGm o>sS^fͿ<2Ƙ;hje2t{K3 WGU jQ-,7d /^xl~4Q ,lT"Fi5JtM&Ӣk;tƅ*R^Iu}e TG$M/K%UId#rx0}*„+wCI4W=׵Nu> 6 U?̾^#_nkx-;~|z3^\ձT4ľ1 SSI$R:uHy+>,2JcuAExg,U @ɘP:\h7UI~> M<-]{,K Du@EF\yJS`0 ظ#smR{ݖn «0"0~W;\lB0TQ2/RÞ>VURxm5HTB KWp FW"/%/Ŝlna[k(^Ka$o-.RdtK˥M !RuM8vUgPr[/SnvBs0*&0u(:(h( pm<~ހoYd+Zͣq*YEOIn|NƂKȰ8r6[!.?>7cDai?/T34#Hw{9k't7?%>KSM(*,ʏ~JXOk*.Mgc,攏-JjN:$ZFڧQD 4AX}RCN[%Lb̵j[ktdZ&_%=Rν@Zt a.BBb6($R$} L64f>$fȍ1NaOhQ>hFN:ybT d+~`\%YCFk5Fmm@*ːJ~tZ$ p#+ k{X$}4Q(K4@"Gi!Rװ;tI3Eo@֍wf'`Gȿ Q`p:E{z۪Bv Si\k}O`4sM[tHKM nv#4{vF5 {.9GߘnuFMA%E7\M:yHF ܦo uSˆ uw(]vu("FӦ)soqvt 4<-DvJۂ> i$pi^j3\|Bft|^QpRXG#K~EyacZ. rGDL@}tJ`GK#y[6 ̱y<${,5sZ%lA/o.ml${1ST=S;QcsLI{I'u>PUWV>VwNbЖ.gkԨ7 d=s\5ZRT}Y{  u҂^,x.qJR5vߪs r'Lw[PUqjc+7Kj,16>44hpO%j6Mab ߚzq)P0zm(.77g.&f[WI2(6;1ɃgE.V.5׺H<5^T#TKst>v\nA)jy2ZwK}M O0mM܎&@@ӭ7s'4NUnl{2\"Ů@MJշ1$~ɣwL ;ARw@PG4:(_s$q,d\e"){y@|^&e~>2#1}V(9idy f$[ta0 gˮ>M5Me@ ]mفLLڥ[89>*$-R9Pq׵@"3u+ʡܯ쥨mޛk w Muč@JU4~iKa%M<Ѽs:]F4:2d;(i150g(o숒oMe!^.98Sw4zO%8Z=|هdv=Ik窋`*t\#ǕHSX{eUr9mN᜛_~s4g˹RT9Y H%Ӻ"ZDR ׺]akOa䃿;FMׯtf[w7TȦ=Jy뛇~߽b#_) otBA'ŀ]ԗD,_74ycMOe;=7^Zw̮Sہf1)# |WO$Wß 3騇pmjı6F6Ajwe񘖞?2bT3: Sp&8>vUi&oP[[`Ybt䐒tnk-5'Z&U {$HuNen/{{]hz[e9HtibÍߗk{ط`2ve3Y6YۅvçTZ 땡2.Hos7E|a^k` STm]$.,5E9ݭ'iVƄ+uv腈!}@JC0j${[y,J+X-F4/8f*+yajFw=UqϰZ\ǕqWe9#Ӌkafj)*s{n19uJ.e\wPlJ(llxwI em5!CPHap `_@k`Adhû]/ x/Lɱj(^=.׺pkcnF3KZ%4~Ulﺥp& ";뢶wCćI>eI>e %wT%Ѝ>Mz*aCx\"oK\A)#-7[7>Ib sQApv=J&c} K?ȦNZY2GFK  5t(|&t&_o$;k73: )Ky*˯Nɻd"'AH1(ޝt޽ni˹N\)M曇khgw@KיFSȞ6M"!4ޒ(eN 2d(MPFNCdtF}Mkdd% d$ok&K}n]1(ezLTWl{ N\}&(\SFsJ!0$"6oOS0&nRp]&۪#NhgF;K %柒,tM~%P1T3ȕ7M .c(& %\u4Ӭ(qjlMtHY(m}ξuqIr~kۤ| ϲpm&Hd~KI{\_7"o~ZOUTޒB{Zp"WNꥭ'lBoNc؄b絊,Wc"lNe錯 m_ ғvZ:\,׼͎A7ꪪ 2*.N) ˞ xd_W=0ŽsFel/~C<^Fg7bE+ .s`0 N&zCU=FS- E\dAs 8kdsY]h٤ Ø>qRmx#T^ODaET@=euCA 7]w8=-Lo`~CY.O8tFbtdnEnC?dUOi# + 4ʻL v$}n'~@X"/B)!k 3}NJ8m# >8sXǘH:^k ,mE59trQ;fqGŧ)' 53Xuq nsfHA7[e)O=Ŵu p}HW;Ge~GG0E @p >Sz6YI47O#x{J[đ=תkXH#UPups([nB0$ H\;l Z]dk{koLW\\vHK-wZ]#h*5~v Wk\Kl9OMku[Bŀn:-gsBbHC<6KNٺ9tn$Geߏ%^|6NӭJ8 SU8FSou؝\T˴`JuCWܺzzpo3аm]tn9n:xu'ujY|dQjrh)Ԭ 0=MSʜ?4e:q1G< uOñY4|6Zi؏ux[8nC8UlR^7v:,msqAް[Ce\0nq>̈́~?[{,K <;wSUÈPC#I1Hۋ(J|WaƒzFܤxve(HyR$F.ׯ4 )+B,xx,t*I k#mQhj<my+Co7˞K-f]9^8cc!E$Ԓ#iOTllqvGMB懇&F&r22 F{g[Bt{s\7,Ƴ1x 'ha%F-u3WGL?vn5eƪ|jKM^YM 7ok=-;(w\SΨlmNޞJE=SU C[6ݓ ZWO)f[%id=$%}P W3޳-ܯRc)q:Xn U|/Cb$w V!6M(D9n ,Iӽ.1Xdm`Ňa)XM fKFP=v+0|; E&W$HItƪj@l\-b۸27K )cnѧ`bnf J[*&JLT(,- Hx{w$C@3O$6I4|^!daG@!/GiS kl /}%FEfR#]#p0:.d qoq6M;m:@uT!klaZFJ7tnײ uײ3@ }XD[ho{|ѯrqBr BZFTDt\ VA!iK@Na.<.  !F[P~ICmw$ B(fRF@cWtY&cTlqw--v$`3 ,6eDvF hF4(^h-{E"؞@%"Z $MҤh\#lEy˯1 xT9mu -KҶh/6Nc&b!{eY1RVՉSfͺqW<ѹb3j!q7qvbsEnnލ6!CN9χ M6! >f!xZ<07id@`Y#O\%Fn`$_:;nZs.{pNoe2Ԯ LlIC3~iLm:NcwsNUW&pm=tlk_Y<Tveƹ $9DOzUoIr3ɜPT{5g.)=,uz +[E]-tI5I1sfΉ> (p8CY='}TA=J|_tI6@Z>, h_.JZG n)JCSI5([%M \.w(R)H;>wu ]pwI7q.{wD3_k'L慲ע>f&{%[ +Ǚ`e&I0tC-ϲDT@i$"ts(oD' (Nm. .ɧ-љ-`H1]%v u(jSvE2X]9K6@m{&Y=@ {&-mrn79-N5L~R෢X>(%46TvKY;.K$^]adGd葽_M-v6: M䋚x&^,t@]TO3B: s^ hɣV1fZ/kjR*g#Z8X\;sI q^pY0]`/mFÍQS9kF@*1e , Kr_!{}'{CpJ|nKuYyİ2wNj,n,{5UxeK]x|lͽv>$ɑ4^_h/e dUoF=p,|^Glz=GUFv^:i̱#xu5}qwUkĺqDY{mS+dfʸbpY-dv4_)*#TNsb\8n?^/sTsWb}B%۟g\E&v[ICۍױϔ27#Mô캱ǕlU>ؕ° ^Vy^Z6 i:mҼɳ+҄ΫM.f0 ȩ/ p?nf\31<@ )zҾbuMɏjV:W 9.X񰝖( DSgmT<9]`TXݶXco2H:Jp(4k]WUAAkݧ$恓Y#C)Bjռ8pKt34l~R<%OPi+rK>]c{O %nY/y.&xwc،MT"~6ߎ̞l[ {&-:za)1^hi l1h2` 20xa")/NKfA(9~!h8φUQG0FH =4+!%E8lZ9mdvNe$CqETw#:q*tLh|nclHЪ+kF!D4FTip>v0b *]Xأ4GoN-PcfvV<j*16V=/.V`{-bk}Lx>Fe ٘B~7(We۸'KN*k%MK[VĨ% YJL2j^ZȻeQx%,[r "*WD [߆&3jL!T pİc8Sѽȳ3RW͌ M_cNtꯓ DVTX[OH \:'A6"[:74ЙI=%s&ޑ1G=,~V!:И@no,l|ZDeO\ 6tRKB0mmkf h ;p:)F Gv7I -˚ wYsr,o*!c.N\EfBRnD#uK"8bu~$f@m.o ejo(t8vGߞ虃\M]1no.ku:#s쁅#nWB4'k]o{TPdf/uGMB|n'{~7  Ed;47\H;7P퍐 qfDp>SA&06FMCsC@ڏ{iH:.&od] C?34Ia;  9NQֺ@-F~gݭt[/N'[+(wD pDsF߾ EG챿(.;۫fi6*,+N8!|_Rݎ$jGA9%|#%MOtR]E8C_UT3Y)e۹pW"Xa;uSx"S1jԘ}+0:;XXfzqx<潀rt v[S ^<g`Rp01ir2(khGc4kE)ǖt4 ţ#3vW ӳe>Ծߒ+M ߞrnCH#բ։%(HpmȨN0 z)7.YB}݅kZy~1uyluwUv*o?vԅ^2[w H=P 䘅Y1ײ@#@1Ȝ͍6[$1IvFJ<؄WiPreybEQ%*{t ^ }y5{O]-+0w[qɬi RY&И-nڝQ!>|t\M@^wD%7cmwЖlۧgNEA0 M"dWyMM3n}#ts2lBu|rXowϔ]ڎ]$SsptF(;wKj},@)/[|{la54诒tth$u˨KSתk t|*]t,})ltF̀b5HhJwFAu%.P&vDO4 @ b;*=*!Wx_ة.L;@ґPJqCފRoeϖz_ɻVe)*f=Hl RqI2;,Nݼ E7fy>id!ɌUg^&")Kc/pij3ˢN]0UpMƅ\MkKuYB൷Q0DO9 "FRSeld];p jak̰6p/(?ŸOEE-$#2B{/8k xsP.$y'e*y?;%*˅pew~!pcޡk$E1E5JYl.C[Nt^*Z}*z ?U,͕g~ }[3PL:;HHmB"ojGo֐n ɊzrQ_Y<7Z [/Cb pøbBTlh%O`C'#^rxxhqśal`:Ų8yFk1ᘐY>\_J=uPN&H&I#qk4!`j]83Q n)*wp_?8v/*n/ /(A5K%|C1 `6vp"q]M3>acdt, O*1(1`@3+֙CQL04fiq1q~+GO/8-KH:l ŰÉG=,Z5~Eh.h|0~7"e9bODf\u`Һ#64ɧDbwx%\yyna8.h#VJ pZ]4Xơrl8E;O1[J8QF[΋ɕP{%!l>'q줛: x߭^c21ًuaQU 5,pБSdf C/ki(\| R t983߲[=T;pj uЃC ešۄtat$,`74tDZ_Kw a;| R[dhc汣0Rt Yc\!MARYbfA*V)]! ey W26d$#NXAP-M*0:ZfH<ږ p7 a{%cYZ չruW=mS笏5+Adps} 5}< 7Sad4Q k o"1rNéLMO;O)=cF37R {pJ`m˞~"{/ROPcK %Ag57c~WV_$х<}-F<J֚[cy4h.pIKK\4`ng8`Jq%uLq~AIdL,`@ǒTLo`y4uqJϻSCZ84ؚW,Ti_\Q[`"[gl:\>HlPRR{mMCnHw*"ʅrpǢm{~CmۦI  _A05m.D p.isF`Qìyni s=~e蓒[sF&Q dR6I$ 7k7ܥc6ך,=h؞|`&Heu#{XeSΈ^Je!;\4J!G5V:q/9fGS |JrKЎ= osLe ֫/!8D 4B#LݲF sY8qmȦ`x!T}re ;tPQ%J4h.Vry0߲PMOdvE$i]A1:S4gӽgҚtylZA~WƦU滗]};hby'Ѣf()fDESvs ;=5Y:L]e+u<dZ3eDEk]d4ɮBe 5otX9@pBp,KiV>ΰ^mr~/˻SF>J6N\<^fK8.yd ]Pe1#d 7o;ŐX]6K}: :@N['tva6GӷDa;d6䜶QqF ,Y?2E@bl|-E.@?{.tϲg^HeR&<tuL)Id-(<XKMP@' }ZǙ{k0eW͸ c?]8}̓6y]ĉ4rOvni9蹈B}{䶈8k C<.=5,ɆK q'LV~0nZYq,>F/`TT̽c1 hhf+9)B#Pv^|u'5R|Ux^5YU/{3^)xb.c+3R.dtH?u> {#HpmdFD/ʑ% kětmºp?$-lыȷI n$TYWX0LR5mrKA?exij^SSLf|UDYĩ4K3U;߲f ECZ2\8E= qhh\VR虒?!Tpz#Ķ+VFH4ZwImѲqrIИXw0:zWCcko͵eX"4`F|adZge7zb $՚'D$[MMM{ONܴ< F )DǙĈzJFp|~i\<\0TX=Sk5B}XeS>k5zV5g[VMQҚek9l!&ܔU[kr\})6:M&ڋ#-srG$G6Vm2+A(r u)aiA4iTD,?[Mu._1eUMA492yn=fѥwlx,Z᭹5ET%N]MLNwcȚ8` BγUẪ<ΈkCWddѠR\4kS}gT f~wXhnc)Z<*4J2; wH#ըVy$85ηebivP-&MMJCc)kH`FWkLOiZhjD@XۢY%в#[39q2)HqZpoc(nfAn2yu#RdfmљpC}o}ȬF"ZlDWؼzng?p o 6m ,BV;˜%nblvf{<J)ɡ^}ㇸ! >׀u~GtD\6=UНGbspy pI/k zӊ-mt^`$-? n`Ԏcc'渾3{J&CgM<4Rjڸv|旣Ir vTQsxY3 z/pN22QEa;XI VI@ٕ#ssEע~ΜlR∱:> 뎀W 2gQR/YY#N%ؔ8pUa{]MUK)\5EC$O1?+* &aZMY&f|/q 1W ?ʫOZN\1f;+ beDw1ԗ  ER4بsn:FYޫ& &PGʐfod᭒L9_ Շ)?͋$,bt^TP[vMRRcoS58% QM;[Y8S4anʭ*y@[t+\ NvvX[;P[09G͘n7hLIr<=]fL_n[ODH[; wMr30%%EcZw8d#)7p3oV#!hks$#l{C%s ꖊcM x]B5H?$-)TZx:sD'CD "TSnDt Bs`~H#[ۢu`/s&[BnK,^.$%ir( PXe &pPXY&AF40,RN@%ABd&! r4z*9J=ЃrMyZ͑$h#*3q͸#g4U3.bZ̬h V`1I2329CQ 56{*%qQQ[@=Haxd۪28cj}ûw%igC4Zu=J┵$4ͧk W$nU&4nb5`:5cwVyp8)S18 d͡bENUt Fuf~oTIx'vDG8=`L](D"G{$yVطt{i7+|8 ۪L;]wCekY/{nϯTNN Aa+[a*Z^t@鬮it;t C72/Nhb '{ota R1c$'NH#b[}wF [uV#\蓽;mЀ[fۮ7"Q6р `4 tYlDWhmqd/-akmP7.0Xl77D1;H`T,/d.namg&4sMyD,o+6t` ֺHd F76{"HzIjcn.: +[,/e?]Z#HS~&(Z7GhoP-SKɹ7L6 Oĩ[&40 1:R4ZdMr{o)a䌈ux26[{uZ; S)Up$%6Pq_^buҸG'MR,]*QKx͹lxj9t VdOeu r/4b!Ug k/Lз'("̸J߲I t^=î\E\\N twfDR );ԺbZQ#7?4HDSɄf8ĦܾkskjlIN5}1HJSF)кK !gK{!k'HOR)Cײ 0$!6tu [Co+]v옎ͮnw=f$ߪ/[sG"!-('˩[܅F5$=.´:-Z#.V+LB6bM&y62.s^VY=o8^| OkғN.*l6n7C7G]"dI%b>H3Id\%"]Dknʦ"w u 教程-使用Unity进行可视分析(5) - Haokai Qin's Vis Gallery

教程-使用Unity进行可视分析(5)

关于三维可视化视图的系列教程其五。本章主要是对制作流程的一些思考。

Posted by 秦浩凯(Haokai Qin) on 2022-02-12
Estimated Reading Time 5 Minutes
Words 1.6k In Total
Viewed Times

目录

前    言:为什么、以及什么场景下要使用unity进行可视化?
第一章:现有的unity可视化工具包
第二章:自行设计与实现unity可视化视图
第三章:设计与实现一个可视分析系统(上)
第四章:设计与实现一个可视分析系统(下)
第五章:设计与实现一个可视分析系统(技术问题专题)

第四章:设计与实现一个可视化系统(下)

本章主要是对制作流程的一些思考。

可视分析之‘分析’

本节将会简单地介绍‘可视分析’这个概念(不仅仅是“如何使用可视化系统”),包括它在可视化系统的地位,以及如何发挥作用。

可视分析是指如何使用可视化系统,以及通过阅读视图获得的结论。

小结:关于可视分析系统的设计、实现

——工时统计(详细)——

这是我第一次接触unity-hololens-WEB开发,此前并没有相关经验。
我们使用了大概两个月的时间完成这一系统的设计,并参加了ChinaVis 2021。
这个项目我每天贡献约八到十个小时。后期经历了约半个月的突击开发,每天大概贡献12小时以上。(几乎)所有的编码都是我完成的。

大概使用两周的时间确定了分析任务与场景,及使用的视图。我收集了大概15篇相关论文,从而确定了视图,以及能做出的结论。

随后进入实现阶段。
在实现阶段我首先设计了用于AR环境的六个视图;并实现了其中的地理视图、柱状图、平行坐标图、二维流场线图等。
在进行到第五周时,我们修改了原始设计,将其从纯AR系统修改为了现在的跨设备系统。由于人手不足,我裁掉了在平面端难以实现的视图,只保留了四个图。

随后直至最后一周,都在进行编码工作。
最后一周使用四天时间拍摄演示视频、制作说明文档等必要材料。这段时间进行了熬夜战斗。

整个项目中主要的困难在于如何实现各类代码。
实现的部分非常困难,因为可参考的代码不多(或者不能用,github上很多看起来可用但实际不行的代码),不得不用unity手搓可视化视图框架。

其次是演示环节的设计。应该如何讲述可视分析场景的故事?这个问题并没有想清楚。我的选择是照搬某篇论文的演示视频的镜头进行录制。

——可改进的部分——

  1. 从立意而言,实际上这次的挑战赛题目可能更偏重数据分析,以及分析结果(算法结果)的可视化。我们并没有使用太多算法,或没有实现,而是选择了偏重交互的路线。

  2. 从实现而言:
    2.1. 视图数量足够,但是平面部分可能过于简单了;而AR部分未必“好看”;这需要更多经验积累;
    2.2. 极坐标图不是很好的选择,至少最终效果并不好(实际上极坐标图从‘决定要用’到‘调试完成’只用了一个下午,时间太赶了);
    2.3. 算法部分太少。实际上这个题目可以用LSTM进行短期预测,但由于时间问题并没有真正实现;
    2.4. 设备成本太高,而强交互的增强现实可视分析真的有效吗?(这是评委的意见)

  3. 从任务进度规划而言:
    3.1. 由于设计不明确,设计上反复修改的次数太多。实际上就评委意见而言,很多当时纠结的细节(比如是否要使用某视图)完全可以不需要反复考虑。可以认为在这个层级的任务中,论文使用过的视图就足够了;
    3.2. 前期决心不明确;前期还打算兼顾科研进度,投入时间过少;实际上应该在完成科研方面必要文档后就转入这个项目,而不应该拖太久;
    3.3. 前期每天六小时的工作量还是太少。最好的状态可能是68小时,然后留出额外14小时处理科研和其他问题。

  4. 从技术而言:
    4.1. 代码复用做的不是很好;
    4.2. 没有使用设计模式,这本来可以成为一个很好的体验机会;

  5. 性能优化
    5.1 关于图形学的运用:这应该开个专题来讲,但使用的太过浅显(最基本的LOD/遮挡剔除),而且效果不如5.2。
    5.2 实际上减少交互响应组件数量、限制交互时更新的数据量更加有效。当然更好的优化,在当时是想不出来的,只能从特定逻辑上解决。

问题:如何管理团队合作项目?

这是一个非常困难的问题。
至少在我们制作这个系统的过程中,由于我(作者)本人第一次接触可视化工作,难以估计工作量,并没有进行详细的任务分配。这是不合适的。
我们的小组每周进行一次至少一小时的集中讨论,但只安排了一个人写代码。另外有一名同学负责进行数据处理工作。

由于只有一个人进行设计与实现,实际上并没有严格完成时间表,整个系统调试完成多花了半周,使得最终的演示环节没有足够时间进行拍摄,这一点应该注意。

在这里必须要强调的是:

  1. 负责人必须对项目的前因、过程与后果足够清楚,以安排分工;
  2. 分工是可以更改的,但不能不分;
  3. 应该确保所有人都能完成‘必要’的部分,对代码的质量检查也非常重要;

遗憾的是,在制作过程中,我并没有很好地领会负责人的职责。


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !