ࡱ> =X:;<`!׌abNx, KxڵoENqkPj Q,,?T7QS5|@Q/5"K\,BB"J*{xvKlz}{ (kTfwUG~ƒ4[0(qF쨿pIz\ ɓi~GjA+*?",U˅݆}'怚ì~1z^qI\sVE^E2WlT̚c Ey~f"m©3K~Ex-/ "S+>rbPTv2̤Â6{v,G0~^x-*kkJ[ShVW#(q;A'eǝ9W2q(<$aZX5kf<4tjֱ[:gF||9%6>oqv)؊75`!semU8VgW Z2Ko`+`{,{1Bbb! SU<żr$8f|nPY| fspa\Ʋen6y3t! a>VW+,t! a;>6M&,tC ==$rM9թ9Gb~D>PC~D^_o6ׯ[}$Mud:#QGm"#Q:jyYnOV_BuRc[H-2K |l 6Yf}vCخJ0,/Ni"4 f{2q;Iޞ;/{k{JZ;TFtc \Ns#_JFIF,,C     C   " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?͈`epUH}:B+N9 i2@WBN?"7",N2B3r~ °T>\<~?P7IFOcuF̎2Izc ab]H# {DZ"\Fs{ghT(T> 7`kTX6P_9tm屟ŶI`2=!x+dnhg8O_E*,0"~foncWatA?'q֭1r2 V1}]b: Xkjv-yk9G4"B$.6ItB8[t` ݞsK %H/fcϿ\2.˂ =1JeUa|~tDeYgp)#sSr>P2ެ\X Ƿ ̴ƃ-֥*W,F~aϭ5G%A=xDĩ,#PIi(ݹ`cΒHWMʛ[3Tnfw ȸ$qR"#*z*)$*S}OTD 2~l6|I@p|:{RnvXcsHIy`pA㯿|z;+t?> ǒC:A*=rIwqL24%f=N?5*2I?v `?֔F88trt4-C|MnLr1q]SPUۈ+AӭU`zYJtE'ho_HV=V 䆔Lz}8o^3ʍu⼼XI?N3^;hs_ljpz#\xR)Miv9UQ 9,kv=1B8\gXp۽|DHa! x8@I ~T9#bI?OI909zT =Yl<f%c,= *4ƞnةϜ԰8y}M$yccELd7j0+mUp3ܟ֫F5ʰBʝTք('$lb%m!mJRGdz W(Cy?(\ѵ 3 dfVesS2ҟCgLj:1I>W->T85neu>cZoq.5sӱ3|j˙dgq]͗_1q\#9v># Yd:0?"5~H WkGܝB{*ݧy uj?[[A|,8]_"IkaH<5RqȆpN8[j jV-t  ry't2J>Y7 #+ךыf?s3ιLX6?xu1UuS#{:oC$v'e,~g:לO&X9 |Emb{>?qfA v'M`0lgx+*YpZXj7׏Fp@,z|n1O1屟jYa4qA"%T`~㏚_7sM#f9emC7)W1 3(;==x[;j q㊔F,"#{ұd G!bq9?z'>e*4Keˌ.=JUz}tR]J9'L~y?:*JjΪtz3P]$g,y_Ycd$jG [)rێO^qTz^ÿ,0w}za,([pnq؎M* 'E`~GNXn03[4ubI#8U͝Żmf.8S+Hzl։.|gny8dև-!H9%O'Jo.ոnMqe~SF [6LUA n>njuSaҫZcȨ$`ԯP]APӾ--l+?ɐҙ3,ky4º|V{}ٮ QVPNdd*6K%l"ךg5>(k9fUۘ+-ed< Jow>$XUD ?ɵB]z }J7*tuѮs5"Ad _Z ?[w H @iQ,ʉw-Ư}m=0v̉D'P TEZjcс|㞧ּM{VT5\em Kr`7)92Mu0xZtYJp"d.W1X!UHW7.Wky#lcp]IVSEX kJ$b(++l)f ǓWM^l37 @X.YF`:Y;'Hߊpj'bI09<0S$RT(QS޸ߋ>xn$B!߱g`v 8fcH}O~ u'E_GIٌUm!Np>-lAo[Sm5xaN>FHT`lb6Mrn?֓1QexӍ,䞻&v}U/i4ޝ3}OK p GjV;W;?z~ \xfHBYó':cMalvkt#r_ja8?:={gY5\qjkMz6'mϞh>'ޝ_j6馤l֖JIJpq¼V$; Nk߁_:g5JF>;`oc̰Ucd`qERFC!)< L@cA$T!LKu kn-Bp76?>H˓46ўQO K`$w=?^e9o''TAA9UiNJ$RLY`qԑ>Vr~`9=uB&yf0z&QPaU"ike.Ȕq{.F?_9X|C"eOEWW''$yXFk^H~_2.{ruܱl@O &: c vfnǽ|0~ K&G'Irwg<L(3׵`[C.vKMbHBN 2 pp:1ϥY-կ٧IWj!0 +d$c4ޤ}9"BKRxHwDB̧r3#>HLe Bf'0뚺Aldg{n+%6qOVf+ -$1I%FF0qeAiÙg$d#4nuVBW2ϱ:FqĻUQ ,L 9<I"a<<je77v4!,  <1_ўۇxN첻6+yמZQ$;u*y?6^{j}d䎠gûUGf2$x_Nwwxϥ=%Y&V 1z;uiJq!O^׬Cv 691ȡ>P?Abs}*K?oRi;a$l.9 pN %s@뜓ijES?!M>zlS$1nI?F;-C{ba38;T8;1I!?1ODxl?ۙ͞=SLvfl?xwe5Ò~U;#RoɸN8##ZH|Yoo['6ݢՙ`GOJ,ȄbH^rC00~|vM6n `zU`8$ӽk\[/eQTdf1ʎS)y7˟~hHv4S`֧r1^7]|gxCy8 k~>n'%G^-į¨gs;8'qfWXm.q;كpŽ}&y%qTfHf dwndO=3vV7%ԓNsepʎŎUgPI.+M.b} M :U I1*p S]؛[{eն*2iCdId i棨-_[Zw-ڪLLD'͖*[[I-dYã:zd,r֍";q+9ݾ"mP;$nmIuk;9eim#1%O'PyMsO P\I3r m#J=%Ln1Y ${f3nFa UQXDVA3fVdy$T*2ۺaAܨ oz0䥼 TKnVao `ei#dH@3#û&B7M1lDXx*zujHI [S#mppw0qjO> wCܛwc"HT[$b͵ËhqوE{V!@'16n,~b142WR] d1ď6n_P| Ij6k1 yYp'x*v[Wu&w= vZnBHlyY$KbHf , ( @_|/v:Z|[Ds Wn'mv!~<9Yxݣio>h$~L 8cK$Πv۲KW^x&;=na[aQed! 9eҭHD#H!^wmխt IAyq-RGI] 0w V?:w<ʥmYcᆤf⻵켋b3-D1-+Z 0`YYB;[ m]8|?XJ孰$mūzr;S!YM_1Gf؋k湔ɽ- ;Br3X^]u鋦j L^E=M9JO:RRHVG62Km4P*-X⺊0o^8#wDg38DI!W sz< ,om4 =,m.佔TtTPԒzsx֩Jdek_Uy.O{G.F\?nXs9<}(#㞴ؑ0KTRg&U켮 <6> 7xۘR۰ s_g0$19>^>=85y Os\;\ds#;63ܓA׭B,Ԗ:v9ީGn$\;T&ёѤǖWOҦ¾㡷՗\n%f$`l5sVצ7 ;fvO'ʀ0Et;|FT > xG֮y ճH22O_o`𔿑}ȥ,?X/~$_0I.pyߎխaK|O홧2|Z6sߧ:H.#;ue=_tFX%k1 me|_ZzĮ8+N\`U($D+s{̣Ҝ~GdU/'Б(Y6:mQV.TIsf[ +qʼҝZ_G@8j_IIpE`w?'xHՋITYkXЩ%PNN@OZ>8iS}mlnE|Ԟ>8?J@0cq<)m}L#޲_S81,mofLlh Q =^xK$H$Ir>OkA}kΫi;MYS|0s]4jt[yȌw2.A>`G"yWn>׏[ `wH֮Ŷi=bikj՛T)S^KoiSox#Ltj5 .ySՐ?+AԚ%:啘,39#8+91_g'NYi4בJ *(HD$dˀG83\C.ݠ 늕U2ե>g" uϘ13KdÈrdoμ8 9.۽hʎipWr3S)7{:2YYQ"'q?3\G5?]'Tuoew[ǝaEuܤt!E._[\z\BA>?ȞIZR挕kj2I227ǎWɸNzT'ڿxl+`*w+FRK1p>T c.Fx>QV)h`1}~+e% RNA\uw*'9+׿dDž~I@?U?yj:V~^xp ǩ<㘏]77.%73IPnz}( y"5gZD,I(f`0 V2|&mDI$u<`={U_X^]>kC f1ث4)hc_~+U#J< ¦c߸!c6@/-uFo$vlQd>(b8ʜQKie,H R[aR l~O͊[K )gIXyb~S6.1AxoNɖ4yieWv1ܖ|o`7pq +G(k4 [suZe>Pm^ s akX糎}+Rwi`̑,ikCyg  +_m!_3LC4+#:me]f ֑s$ˤ4<#!gٙ$fwb b{-w0,<-Ρ֑k9E/km19rYF$pV>'Ogmfद%KܰUR@ 8+x48ڀq |JH͐xhPjr':kuml-!7;FeB.em~Vkjziq7:aloB^cX;̒N]"B+AׁOU{~rXu5DI7#*mv?agGeihnI/tNr[`.Z@zq^7vv*sXpG#P$)ʬxp# kdRVJ~Թj8%I28u9)pq{T$pGPzWs gh&6nېoׯ#]sg0B8Vy+1;8N?zӹ¼ m#?R4Nkd+<jXUp'OS'vǦ*6{%X888 =}zVuVH})˸7e$ïQRH2ǮGRHdo9?w1F=7+Ƞ@2yRdM=NPpGr)$h4Ii? { R9qC31ӑFKz&8ig9:c{ҘI=JqF3뎟"q3N=NRw 9}1ϭ!8}CтH…8T80sH.yړ%>@N( +| >BҒeEt03^42qO4MS 6*n?L3fxݕ߯cm1Q8/앬jmĵ8̿h@e|y`*N| B\xЇ⇇3xq_Ҿ2Ѥ^L6<Smo+s/C.hi%զ-5v7f%[͹v `vk;:M^ӄiN]]!;vmeJ~COTYOL5:|WS{cAFaT^|N&YTIwT۾X6O_Z,tddVR[fFoԞ}Ey4EloI% ynIɐFG7N~]Z1B?H#hN*RmuJik7aLעZɛxQ% ~%.&ǫؒ:p:7nv:#F:_<9rRV>SRJ${;4U9e #rߞ}a cO¬!ۑ*ܾ0^@')dD?!}I'|(0]@8쟲Dh4W|׍(; ` =>+?cPHIXߧ~Ogt?Lп(Uͣ1*,gV[vW;gY( Ly=;nb?G?}cl˴JAz^}x~#~*Ӭ=`HI6HHwl+pO^+Ҿ2x|5c+*Yڱ X?e&'RW:ȴX̪Яm@b@NI?Z: g_~0\ &?#ɩ\%ibH9jAI݅}R߭i:s|k`TiS k"GzUg10=q\޹sԎ@PkA*擒[Z{(i8X qƦthvzΏve-bzy?c,:y[yl9b`e:qWdÓqkH5GR4۫mbiG(fcsg?Qi70ZYʧںɱvGL{?d'zլ)yB&n/00Fխdݦ _S>^v)ӵ{QKjH+'˙#*lu ;6$c5/&Pɇ;8+~;e4Vc$Z4\M/c,RBIn OZ?wtKV"ʄ]hb0;ZF N*M/E s}jDyׄگI(+֛UhW\93gOi~!]|Bڬzhkht3I&qnm4]m_Sj>=Rg'2M !xoQF EpjK?=ⓧxtnhݝ 0$vW)dwIJO}ecsN+=[DZY1WTsCXQS8MV[i>HO~ O/Z-+m2tQɻPxv?BVc_"s%,D[.$y`+O⯙|R ;|aCgui-F7xOX,Fs~5XM ?K S/%{; ;PV1u-u;> rp?ZT|o{xE>4dzC*5kH9a_֯~BxJ~WZ7QMϻ}.͸f=Ҿnd3{u^_/x[m:3$vdaDVQsDx/gNV[wl Cg9>u1ֿ=|}ᗇڿjznqQe +v_ſ]UCmkw{otд\"mK08rɴ|ۍ.qW߷{d n J+>-w~9u-~/H2D0.$`I>T*2Ha⏋'`o,o-4bKeU ,%wڪMy=aH%^;{L{iAyZpq W*48A?1ϥ|iž$OY폜Qhbk<ydvn9:/Ojڬ%3*V2ax:4N(sMɶWwvS[ctE.pA)qUĿ< 隇]sx{Pk-n9Pr"HHV3Z#~6UDD|IX#OmF*=;49Q1M~qٷaDm,`+pbǩ5yY~팗>RZy2GC?Ͻ/GIewWqto4˶fK#5{ċ* uҵmXI7NgZWq%"{.~?kK$s72NX igӿ0rvy@Gͻ=5+68?D q2Epy'<{Sp[<è⁁9sHA 8 錂y1@+??pNW$SG+|&89H$u9;h!w20sT29!lnJpG#8@ߏ~@ <́4=I)eᔎ9F7|ww8 z<5cd.FC$U{eqVn<1ď9/)?ڷ>;eK x&k|O%EdS7cg']W6+tAu8PVQ7xw|uej!gE "O,ƺh%7-nߡKUC~/[Q㿃^Πvp7Iďnrrܩ[GĭKs?[Ꮗ,-VID[=̭,F7H?xVJ> u6$jXCo$hllm|J4Kpk*UGPA<礡]'{31[mvqz.%Yôe܅ 0xY7Ojz$r2NZaC9'^q)oNh[> kpgR1 cUv 8݌S\Ѥx#vZjL[ڴO0ـ/1 '9<3#Km\Uz~~@[9?^J71ss pHC d߰Nj o-^%IT:YM >UێدYoO}We&v0YHvA)kgO[·^hPmOn?T.I!y$וտ/|;cQ<##^}GOG4~m tk2fFU N.lyĶܐ?"k)I~(-,eXܮ DW AƟ~4s~8I,@L2ņF rAZ*һE'><-ࠟ $p6ӬXf+)o şO]V/ZgmsHY*LUu7 YHf}Y2nL^1Q:s|B6Y 9Z$(T LҐ(*#XILjR<^jjF mlvp?-?kWGgƢbE$* w\uĆ7qz կ?o(|<\LZ[Eeڏ.hf!)$a4g# -,tB4LӦgM&&K K:,v\SHY]~@E +qC'g9}3Y_یz.+he ii5;tg큖nE㎼gZYoqlɫyr$HEVG(>{=pqOto~aҬZei$9vcXE| ڗ44mFhJd] < #,zVKj^Cs]:7rY[_Bv;~/oMм+ǥ, ;%rO0SG+}~TqzWӣ> ѮOMzr^G^^}}M,TI 0$b~*xK+.k?aZ~uŷ.%/d1Zujer$:U ޵߆YKWIFӥk Q,I$h?"&~1M -𽦫w ZܔچxY$d,T'5 I~_RϋmOχws=; )<'J[,*EV99|< iuuḦqۛ;1![l}_ YL]ed$1+42vTW]Z_tgNt t phl#^J1^v'cC=kN~x-ds<|#g*,Wn^Ka|9tx[I-ouug2l7V'b">7BJ6hdR E= b:X Y ãs9NVM|2xV`t[NY M$^pUV.F3=42uOrxxe7Ac?gZ+ 7HR d$6 ^Aj17'̞Eigt,5qRmI[; ~oj$i,\d>º>$v[a`)V' {p2+IEܕ`͜:zctXND#ib{dWd6:C36rBa>VHERj=6I 4 :sZwM%#ʪA/ J<˫sp'd!Aa bDQv"nanߗk]E&A?(b3yd8pVr:1ybSuU%$!\bMGL猌j$69Paz9\vNGZ# ͓q̮ÌG_ҐT#-jRb\1>V) zt,\l'Npjo[p:@ {;Sl2 A*\'=,LGxZPew9ZpbwFqJF'ґ|9kK{nC7BE{?gqwn=eNʩ? x|A3ZxQg67fp3gҷH*});K1c֧k^ƓM=l].HSocnǞj3WdӬE3[-hGwddO.}kweqrOnq?kk^/񧅾xrɯQp'r]wG-sj1Pl_-Ǎ-3IlIS_:$:LJ5[]cNζ6Qe%X28\hxbW2Dq1 iSNg]/Rcc3B8lnrw>iB.\Woh>B孟5g]Dgy'nNH #882|\|>mS./%lt+}/nTdv|=kϲּEwo;M{+uO4IYgĥ:)^s&#\_&m PZM:[m,5%W|GJP$y?z-oGj_!iY2Vէ "B^'lW :oP?şk:uuO^B 8:z7_o?Mz׉5/k yܓ`T)rI[;խ.϶*Uƾcuj[>;||8ulSP,/c/(8ڬ'$u?j o^'<%nƾ3ԓΏHc$cERpPT8Y슱ۥH_3~/Գ#LcF!pHhsqC[Vo ~$k\g#*(lԁ"JU}OL~4ࡸjrO+qO^t8㞴1$hpOQA P)dODgAHnd 9N> p)éNu#R1 dqRg}i>ƀ JGː888#c( a܀"/ W 39=C5U996?zO]vOΣrk'tE6x0\$*<}? > q{~usD;ݶ"mͷ<+1~HZ(Äc'~yA==ֶ$+Vm#Vf a9n8g_Pni&Iآ0,r<;V!Lyji1$ i ۓq7G乬p,j~B{9'؏JŴ_:] FH<[6q. %6^1c#'n_[nGnGۧ3M5潋ۋ[E&%~BO_NPپQӵLf1?FuM{bVvvM|/g ZS|Kw}hmɸ;r885|:y׈4xvQmeE-+zF{ODhfQkk4kn#!v+cOdH5wT.W sŬRmÓ,qzcWOQWnK#cJ%4:oSY[fԠ( LunzpGX/_Ҿ͟Kԭ" JVu8=Aggt|d^ 钨N8 rGJ($iە^(MˍNi8=g8#89bqq 0c}x3m NIfat߇X>1 Qͷo-"k;L֠2à5vX4P0 u Z+H:q^$Olvx*9T&i8OE^嶺F~Uzt?}k?c`ADX)^* )q9<^|~y|l8'q_Pߣ{0E~f* 1ǜc5g|^Uj>u];W{3r&>$?JK B+wȢ( ?诲`cxM8-NOfŬI&`2@elGxj-wj ٦{.|Yq"G¯XIS{3T\MFO ?SOLZxvjXWUK,9@gYx W6čاɐj(|Ҍj*1ײK Ɨ/44CLk8 0]1wmʧ$g O~ѿnz>FҭNӢg3]fT+*Ttů ._[o-.<_~9I'[R75ń:gmopL;MpB~Y#]H{k`b򵄷ڴxFmrǻ'Q߷b/t "GVdO+p)E q>n:O/O- ^':^Ӵ%ldaĪȅFтv'3čo(i68)a(Gw}k[џ?XjSJ/N/0ĩgHs;q%xRs|WFK,YXECF [-c\ $nV}hZUPU6W{Cc}jP8L0OCTL5sR*ңQqR>e!dǭ8:tGp i rqzWM*@zuB?x6x@`z rqsցsޗ3ޜ@Q1ԕP 9*C@^8=;q֐Ghmbp3xO%~mF"P??1+ЍBrOH_`ך(!Eu'5NJ;0j/3n&U"5#u*S6Wd{usm #k}kSFEI'rq9EZ'~i}{#<-[ H!Wd*Qt䞣Kviʆ01 ݐOF/5yQI H wFi,Ft)k<0ykh 3;OHx-r>bZ#|OX]GeMl]L]ﱊi>Xyn҆#Xs>bOIq$ (+ç =}9`\$v6wq+=2Fݏ19Wʨ[RU 4 IXAeGr{N(!py9ձ&UK!p~VJdK[CU`J`cuM⽯>8?PA$.A?7ב1^!<8rY@ 8sOjGӛ\gJalSĥق|lrt̋,N025i^,}YtfOWdɂ#i 0Y_M&Kmp=F{ӳ,qJ1V'A\hʶ1yli7\/<[ˌ ">QQ9X8ºu:}{ef$3P;:TѢt犙|Ydҵ|2ς X&D$n|U[|W OwKuqobQ-08zr@?ӒKt;hϽLݪ5S'R*H~jh`¹;jzm]*|4tn5{3+"1;86ӿi6Ya>zԢIm$+t]H#4&= R00+0rvaŅݜIa$Hp1OtPH1w I&\va" Է@РM ϣTn~)MgGÞ/4mj:Wm E_[liF`dn^i?αi'+7^B'K{{ˉ̓i; B'[Y4h YR}fsO8jA1n -PXwTX5mXȧjJdDIY'9ZWkХ`ېAi?O<ЫoJpNG#Hr c3ʞݍHIP@BӇ~0OJUc{m'#8?_OUہ'lN;X_`sPYXv*x9WcG$q_Q+ 1r:s\Xe_ѝ|U53Ii*WEx'Q{c|U0좒#,JdHG*_ mlvV/ ǮdKdhcy@Uf봏$k^tn.,,< *n~|̼dJ>\Z$ HUOBzY%-uF7tZk]]aH7 R5SWA'\5H˕IxbO]oxSvW I@s7]ǐIU1ri;!E9sȃ#0l)1,w,*㧭uOq!uk $)r8^ӱrs0 \pgAR#_]1O]Ŏ:+ʼ?J>qDڹ՟–j|'@d`k|a<{ž&-cPuG3j.3rkRWt HSD4&K[C "B wd+nhw/JZ/^jڟ8-Gjږc0] E%|PY0s^|N1㻯k׺>IKm#!@lt=!ngg:Yr_>J@SN/S`7S³}7#1+11NT˪軻}O]ԼxkX0JQ-RŪ¤eXՋ/˼6C6}ki7֚բ)&[xS >e<{M uGIkd\"ٹaӄ_2T*Kz~ ߮{mF0lwm ğ'*}xBhM&DI&B]rAk⏂/KK3w%jksA$9QhLHDN|,ia_WhN6X]~WXASǺTuܴ9̊Uc;.iMc62Yx?ȶKO4Q$VQ B|s|HWOӾ9}ŕ^P0#H21y5y}:y֠B!=>-&B;̸bFI<2J?6S?9> F)lMݕa_.Y`5? ?Wdvze}mw7f% y6{ˌLdge#/?[k^X7I$s8]ߚo7c~XXh_iv}Sh2%kh^*Y.qF3:(ia}^\B gn{WKnGmGνS.6?o^7%4O+mXA,ĞNkiiFo-ԯC߈~"|! ~).En5VH_out;#ׇ #Au_t[kr=V"VI| #~eS 5 OimY-g!«p"1a:V$|F>x646e6y r3 hwm=w\-f|n1f-2Nw鶍{h!75 vT<j]O51|AlR-ĐYY[Z (d|3*w]Mcgu+MZ-2/iRY $Dg,*U8QzT6ikv my |~V;oAk(m8Ja20@pv|W 4Pql& DoQQ=XԮa&Ys_Y`i$i#L%C skw(񿄴?XG46:7r%HEU0"G[̿]w?!,<5J$[KM9--B>[%aҫ~Ο|j)#o+{V&qȯF08ޞ^g-7I}>0㟎 ~|%|xFwsk遬#})d`AbW%s _/h7ĶM;Ԯŭ,2J&Y&R;*zLu[M[{6!s]IS.> AbicToّ]$&@U2"IC 7ƞ$o p[fOPգ4 l w;e]'2<铟ڥϛuXsJcƘpN,Tw!fPv01O#>HqJW p: R]ބsxBex ,dddSF7 }F~D#>sR#N3PRv M~gE]n @c;_6<&^אRL 8P{ӷ\8gk|a9< OӁ]4 sݛc})yz-lmG[5At9#$) HW{%31!j6HIWx\-䏫f= Auu][  9%MdI ;,òIS+s+K UArr~^V7w-y&h1́T$'I4۽b;}>HO!1r9}8O3K!׹ O~ϕ_wujy"k]2|3C+' 1;$y!sɜO *⳵l6 *@z |Eo~'8s* V`wu`g5f4qg)mrH@P1e1s^ii:j#`! }+()׿{9RϩLN}Zt`h=7A"I+OhWZ<WH~c߃'5}OŞ,[ٷ3"U51QVEC)ӕ[/Şg(mn [wn&2p⠗t^9bAc8;A=Yy$sNZɞ-Jɲ=W) I{`c]d5 9?$}~Z٣:/c T=dgaf>ﯭxG6Uc!2<?OƔ#9'~t k+()Ўœ=xLsBv,Jq˵ sҚ흼 ݾU?~i1?t YO'#|U cj*2O־{5C˷ș@=Yg{g ㊸o: s?3ߊ-6肓sڊsnvҊkBD 0q?0MzB|xtW8p V9y׎ޗ=$ˌ0?!$~UJ>8]vrPs~>N{'gE)7>#ϵ8 zkWPq.t]gl2y5ys zG'_)uDtI 0T '"7Ŏ<; 3AΞ$熮)YMMe , ne* TI$^o׀gDkuxn WՃsǶV>^LjuM:Ox86ōp8xBW~Wl n+Dt+]N񏆴{+m+>7K|$⸿ |e}|s;Kp/41P2<5% x>5|=q-D# -8BLjHRd"gYK :ޏs?qd5;Ev $*948ӿwjQ>.ztK8]`kި\)Z 2HK=X Hz^ F4}fMVj=U,r'Ꮩk2jݑdשx zX]wR:uKHJZ8ʠ.CL%u_Kdi_4>q)t-&'Լ~7پh'+ "%LRǪ?_muƛT廉х\ ~b*jzƍ֞0<]61m$yf2:.qa-ܿq. Fbؔ6d>nwoɌc'$h3x5>CE߄S.N Z~g9lbðOn[{ Ah*Hb5]Q?u#ñxf4c-c PR>!pvEn~xڌڥ+$7'$n=8+I:j2Qo>XD~|~t{K?ZzX<8l9ox,>&XVGiAmwx0IiyYZ%#d8•oG٥xPĉݠe`r A:W>#^xot <8ź:˽ v+ajo)I/''g?xVq:Gt0.˝[ wsئGwC W{ɧk6v+MQݭ\Geƍ ' ;>;Q4OpPbWqIwWL# SG~tb1r3=1=M18<Ӛϯ.ڞ󃞧`` .:zӗyPl(X.1@?-⨈my$ +ChйFt \ [\0 $5Íe K?NyMy&C:}շ"[pam0 BHozm*Za׌}OnGRXE-[wb{H8?ك@К hUi&QGT#g]W':}IJn n"Ku۽ٜ a8Wv%Ѿřʼn#Lp09>=[MfIkܛK42H]6J^*_E,ts4c20x9B(am S{)P 8ܧ?{<7>7\u d3|G ˜r9pNOo*mbv*ғ`; ) g>[WШKTF)|丆xoP$; m w'&eG7a#9Q]V.jh'K}q"YćjuDZ< \vkFErpNz $ɭ^ޡ#/eV 8^Տw $FLj lMl_O3DCD`}~=-y@6+hn33*gh8gL@ֈd|$[$}UHeI+F:=~'cDQL#A YK ^uy{2؁{clX.vRR!X  #<?SSOƆ8p:}i\HWZW~#m ,͌rqP 6@$ϥ}ONYQxǑF#Ϯ@'= %ȶ ^%asut𥷅K}.-$ɖS1Lz«Q%H 쪆,J~g&>=O>kzzb |@h[i{{u;?B+j_wi-tdCcKr=_3~?4+l!3xV +# r:>S\ZU0NuNW-+S~,xOHt[MڨKzF9b g$łɠm ZsXǯ_W1-완d`Cg8|gxk.;JUJ'R7=9 ;PtbO x [em%ܮ"˕\' U5 ^50!ՁkHJN ꏘ/3Z;ӈ>᳌YC^ WO=|/9$pϴ_xd'Wg #pbm=Hun3;RcI5ថA PXPAAϦϽ.6z F@ 3c uZBzgpI^ci^+<&cP0}}MHQvNje9NՈ"gGhyI$X#3")ffP$ LV3jȩeC')$mXnW:5]EӦ-"dʨ;H?wxgRxCQ,5{solo@P>_ E70?ƤYD=G?kL;^6Qŵj[}HKy>H,g}Z+`Nj}\@p{`Tn!BS$=s.-ݮ9:q[T:쿐[j8L.3/,mgd^~;Kg+4W򖖛"W' J厧'ӾС~,Y. f}@i9 3K[&,Y;-P e T yA?} Wm֒`S QZ#sv9x+V2:z[OW~|2g<2ZQw۠ȤR;f=|ͬ@odfHRdݏ1mL}6O3V//漜F َEM~rv򁷠!|]V+7էd -!XPp87s}5>6>2$mlIP͵as4;+5k32рP*8ۑ F %{/q}MGKCή _h̀aTiZG s[ɲTu!rxÊ俐ss%a,I=]ɻDNǂ B3ݶǟmᤷF7#Y0AJrNwc(q R%X!W#;Qt9/䶵w1Mtp: S0K눷c,kz_ְus xO5;)Ҍ|͓0|߿~wSm33OTWW* H@DZ(BG\dӧV&Gf r <)V ڠKj:]</UV,YA@y$rFO;W9xSf ACz3Gi{%݂{ :.<sRga yׂ&ψEv,Ksp~Ps1“WJrQ4=| ~oSCG_>p yAԭlݵAv3ɴoB"8@I g=9:xSvˢW~Y6v/O@ 9cP((ݽϏݗC7~P)0Ly,[<տVZź+hyq:v.xǹ'z7KDM*=(B'Qu?,<rGnnlFqyjQU788[ cS,x;iDp[;2{qyҾJujZOwr$u!KĬЀU$~i 9ۓg eT'F !?_tֵ [ fc}c GfFOk䏅zt8]UfOX՜qQ_Z=6vfyK[htHU;O#7yyR=sjmRFfޙێr 'VG#6 d1$q7p}k<3"=3Q'%L7ku+FTnZgle\<U˖'i6ay8?:r20zHgNzWvwcw4$H=SYs> zGn٠-41Op2SFKd(q:{M(yc#.G s,`$cAJnbznF8_PH6s $?~)b8,q_?F?rקU߱imS/1x?BwnV-xaѽ t=l5$j w1U} +TBH2Dfz1cG9wuka_^kDUYl,^{w9+4B|Wn_P[N5.>,.kP07*FBu9fch=89#ۿo=zTpjԌ>SA޵*:*$H *kv>8rq 뵑'G^2=몎h.54jT=U:/]$ [8~-lxh`talRXg u9jd=F1Q''~2:^y#OZP3*zS&3~t~]sbn5.A9_c]gp36Č+PDz29?\TJ9SSFHZC$^Hm^DxR'OLG[$#8V;𻓧7#*=l޼L GKtO DLjM52YeD3%;I+mL vo "3b""f ɒ*|V1 +Oh?'Ԋ!jWǕiI2[~H~^+/Ѧ96<.2"}k>/5]N;M:&kʈI|~-M? m_O|O{2e;lJ|/NTVJo1lq=$̬e:3M8hP?> |-iwBxÚm鱆SJ{$hgi9'~Tg@%4<7Y$\ {ݛq Gvї9@}>C$d 9#>)|-Ğ I}e"@J" .R@CuW~^&Ticf< p9ćc.ǩ5(LR}S4UcmikLxƓ~-: ߎ/.KJJH.@fNkC)-o4sz^kņDOv C)N)q;e!e[P!?->F-Dcʹ'aØ/ioFFN6=.k\klr`)y eWUPN ,C2R@kn~m~!~s6Ϥėb#T`䂵>)VsK,* 勒|rs>]z].61KAٵ 2Up{+&OIy3;Jq!%2g_3;NkVtEO5;ւs-nڭ˛!ERF8p=H8ֺ-NѭQv/u۷= 3ϯ\ ffG]v̼0'zŧOT2dUbY678I qLڬ%1 z<'VBe +#ӵ$vUp@Pq>ZЯ1qk$+/G\p:)Y16O+hBmm&\|+3[b4X;Bᕶ#Ɓ@\t8~# ip0ڄÝ͜@`"|uKXYA4~O TN6;~eGPY,W72]3IfrK1~C W}YӭWklăs-#hvJ_,1x$#wY4lW%[*k9 ;mGq (q=qgd%j+3+>& o:tWd.7<[uƾ-.M\T{F|| bc¾EA8{|'_Ĭ9W#<1bkMcdI&a9VyV XۢeZ0Tϑ)I/+ƭF({3o$qYYy$b$F2>c_OTy˻gS${!au){҂AMq+K''Ú`N>>ґQwXt8N%\t@ƞpx:Gn'N:@ $qހW :w\F: o B1J\$ v'?hoGZ[yMAǮk;Kd'q_ x2KP[@S{G +:p?1# '9[Re"/=0>v$5$8W,{~ Ak{snK ʌc'EC+3ElB]ψ rw<:u ~th~'UmqFrq_zeRv2)<rr:V×0EÜ jv$c^ad3_῍SպVDC毫b^:us:ZJCHO^;V3;>*uW*0A*g^q"ojڡ_MLsN:\XSn25('듏]4cD{܊9֠Qղ|v8v5ӷW#53VXjÃ=`9=FNzsP튙H<+!+G_2cڠRT8>?ʚ8h<:WJhOA%''*8ԀFPC*P͎Ҁ: i #Ӆr=+¬'\+Yu}k =|FzWkhbN~pe(Gei1O*WHd pgP03<~)Ҫ[?n7gmǧ_~`LE 1W8= ?)~6xNXn U)@ :kǝ#TO¿]ުjQb\)Dv_6G lml87i_ƩylcKI!† ]Q~o7ˋpu.ǁ MJ^Y7^tI0JHeMN w@3_~~O>>InYl}hܨmЮDg#hn='/ xV3[\fWs|\SnNX}ov>WG9Q t4dNG\g8?B!18cz>1]¿E|ϻ.;k !)EyO-0gp0JŷyF`[: ZkTK4jݗ!w1Ԓ{g I3nӺ0]S]&v4S[}'Re@Bn*dL޸C㻘}CS:rpۣ۝%WĜ6ȹch:m[^]3 hER#ER@99$1$.@% F+{wygU1@%k2}#cdZ8K@Q~C1'^+ZZ&Fs׿T8ڇZ# 1yþrIl_&0`Clp0wf|4PQ,H'ߑrO0 !K\w3zھ,7j[LJ+8E}]K'JTԩ:[Mcq֯E`~[|=!3Ȟ~#_iΤҎgnNtK]rA9>r0rW׊q}xL6]qsf. tҿ=b~U=8z> /~ibґvtF99Qמtn4ЁZR@3;(L)3@J~̺|m?|F6 5} ö#b82<"BܲhJrG<`u zi}RJwؒ)m9 rx=k/ x-ګP|d} DO:zgT߷?) / ww>aڣ8)GL:ғ85?¦4; 4Uv[8CR9#hW'?7N鞔9#H(m')6'84y}G<.f^qqON0u#4#'=7~_~.50'#FWeF[$w_9z rObtǿ^PJ{{A&ܠgdQ0auҼ5H\F KЏM^y(U*p7}X>)YtV(3(Xn '#l )\8'}zgprܘcT>=18$w LV.Z[8Ϸ+|7ZB͊ӗ@`QlQʶ2'9 V8g*ZMnmEŕ޳wմ Nx`:ԑY7LR>?WIl_wnv\ = I&ͣJ2I!E'Nuf/k𖲁Ιw{W4_'j+OO|IK\ǽn*g궑[|*oh*^ʶ :<\U2H=N+M#6!k݇OIuXI .`Kg]3G(,`KEџx5&wiF9/Aϸa52]BqNv;TY\G̿ZR-]x\:tfkSla X㧿W~ѱ xXc]6Om(uea\~/Ƌ=pHÑj?_2O?DOʻ^+;}O֏n j]?$ӟLh_zȅ<ʎcsO\)›{R~_xt&}ͽz#eV?ο ՆU~ ~nd \5MF58um}3PE4GԑW`xE J(:s˯Iz2V;0?ֺ4r@ϥB2tFO#1G\n;Shѵ _R.ws8ʊ4.*&x %q^U@?k_UqRgsmIm59q5, )DW#,1s] SpT0q_߳妟l4=b;n Hc sqڥI:iZ|OqsX5velԨP0u]σ1ұ|K>DV:z^o<{8 D!r=Cլ^84otm3m!# 2w& zQ~,\|D׼jzYi5!u!wL;Fs֧ǚ >ٺc^?&QRḟ=ᎿZgͮ/o#>w.5ce˛_-lO4mB5u# "m,1s.)n? ]iF !G?]@X;O*GRhŢqi|pu>~>$욯-[VXM-n:LI6*xnlZ~֞,׾(+/U|GC/ٗa?-FHZi"}m~=_α񖓣H𶥪Eo ؍ծ,y@ξE!;M|7M&5-7ÐG6vIPUV757oQ|ωR׼-/tۉnl?~7l.2PIɻ1v&br8UJr)>~xW$@8,R$8'GvV*@챖9Ce{">ࡊ؎xIa-_vxo{fJ[ [}zӹ 7\woF}|S>V#*$g0v'HZ ?*#v( u4 %|s?zK񕬆 kBq5m824߯} :K͞xV5"]G!FP?̙SmoX-E TTG#89u}kٱgŽ*FJ,?xCꚬ L ҫy8s_@E-c\vb<č]`2=IR]fHn G$^%y(+~jȌЛ_ _?x=&vl/hZ2G bMy_h^[NUNn|pie%~sq#j"|M]OV#k$o2Hw#,2wp:QI_~*=[Uy5 4ۖR?z$U%,+^!myzٻM_Y]tz{84&o>h SUN6 i$M*#~+B)hޯ+ʒ%Ca^ OЃ_QxWVS1vt=E]`2H~ar-L88!g=SPI.]uyxلrJT.qҾ~9"jJէ=u<,"-亷= ]wѕ; ^G^GYB'jܥBs;KCٜ9!gDeUSѳڵ>cv ]^Ҽ_w\fr@vȔXӵ|Ael+_ f$dH&I@}+{.O~}!}F̘>G8,trö:R<?Z % m8ڔ|!tG rw8ܧ׊: ؏>:9ǁJ8qQ nQ>#MǯZvoas%&oiqۺ!89%wʨ/ξPxH~ C$Oa**pI$'_W2Ƀ!rF2sZk5MT+iEF0A'UGOzt)"{zIX"@+ĽkVE OV8OR8NE=V>/E)G|6؍IGQҮxq˯α6#G8'#둌-m @wmBI+u9+%᝛!'F[*>aܞy䎕VJG,DI8ʴ$? Ӥ k`Zlpbe{-voo߽qwîZ 5[vltZ_g$k4ma;%8\ٗGO<=x7X( ,b".ccpG9'JkT%h'?VıF Rk[[Bk;XNpFGZe\hs(:k63#߁o|{Շa}tf $Ku4rl(lҿn)$UywM[QId Y)5w4M.Ԉ2@u a3Ppǡ|GQѻF8 ^]Aeu5I4D,y{o4,)Ջ p.EޟopDѬ{um[º\iw 47pf9 7 MI~_ҡ:`Tvj8Tc):c88?J2H\Ԉy h⟙$a^wGW8cX<15ܒ@1< z'daF'?7+̣O߲|?j>.ִ;ºmݞ-<+\V͍?-F0>b׾~^._jYAU߈~_CnU+gOܩI<~5_6>PU鿳iTK-b/4R%FeF!NG|ew.im ƚVwtggr ,Po~9w<U%GZFbYU,~d~U{7 o7m9!H\m+P:pc$N =wҙz, EU d$;$aGh:"tϩZ%3;Wث#1\-]--qQOCH֣`K+J.;{U++?!鸕$5ZW z˞9o9:ؚV$}; sUXmC{HfwbxfZwZ)h -f9Oy?oƾ j:N Z{0[G;!72 rQckƒt+y~m]>Ko%OJZfCSkO;υ=a:n]OOO)asm!eN-8p_]zoߴ_:xxͲ6ᔽZmd-֐8+}]ޖi|{Gyk{@qFjN=k/ :U]|v+cل##jo#4~Ͳ7ïGM +Lvܬo|,' qT:_ rzÚm؊M{v}Cpy״;{'RʴGṬ'5xkf b?qݺkmdpF3=ko@OV<7){g\[]ȩ%Cvԍ2 yS`~o{WZj6u[\ȹUy Nu鶷:)qmi+(䐪 gw?ӏ]#9,U_k 2/ Vu Tg V,C6nB{ wY"M+Pm_dF7`:p} rZpkc3%s]{ɵY"+'H߻i-ޡ{>3:DU!, R8tP|z}uayaqfn-fݝT)Z}'Ŗ8bHbF8 jP>yFAN<+KBv%c$OiGr'㸲F|[*bT]5fWlE4mR\C K=Č#K3xw56cqe<ݨQƦT rH?!ͦ|FAxfV`ĿxӃ׌r8ay5%nʜ=7.18#j-9X˄GtNHOoD W: 4揇zh~2t)‡';੼ Rֱ ٸLg?,:G3W,z-5ie,rv54}/ _xgĞ $u!\]dB0͝@+uXLa[>-ҵEB{zWs8bM焵4W7ZL& G,pރrьԚϡB]8˧|O_ƞ-YMaA 8/ZMBN>l=k]]?D>7vmt\I2"nCsǯhCy(-6z3>d3ǺyiK[C%̒V߀< x Q'_jbOy$e{yNȥoj~azW'h+mGqGDYS/b >J9݇#23(&{!,>֦NB SgMG'H3=9$rJ mp r }h׳v_uZ77ʷ ڟ ->&92 ݳ+vA t>?*6"K7ՙ31fff$k)I5bk=j DN$1T5ٰ$L?JJI\Td=rF45|=!]MWH_C慁'd hxbÞt|q ;mnɃn3dk3l+\I=揗kbKfce;Ese5[wHCn1^RAg>'vB]>< &;JJAZ(Cl!0Ԍ}+NoܔX^f^$1;GD`.0T׾?k^}v䍧#*=?Újym}yoi$ى (ڛ`A=!F[thrG^Ɵx 4/MsY-23dܘ\3 V5? Vh$x%OLRDbIA#:`W|i?|5ռ>8yҼS! OcwE Ps2PW:?? tMkZ@,PF$M78+n5 -5aEDaXRC edPwWw̠6Ir}&۽o.FI5xe |g(B=B6:E>/{[}Cðĩ,th0x+su(=oG^6VȒOXz8=Y~-"RV|/{mgq̚ژ$ra9 q^[xG}-xn>Z5S6b*$ ! 8bk{Y%V^D`oC=3*$6I9||u*Ju𮾊}:RO'Oh?xAX5曦63K+MkBUﻩ=_]'֡s^)2ek7nXg^~"ڦ 62j;K|:( dps^yo:U坥-7B,Z[WNY=#<_ť=/?cD;v@b3RUJ9_G; mF\OW\H| P g+u/Dan6-O0f7fYw|}sZ-мQ|Xe!Mo&|),J@ ݑpҪ|koޥ<=Tzyw@ofmfM}'4KN>#w>3ixOû&w͔6:G %7!P888rFy:kjV^:DUi" 0z8Qx&(4˘R(JEz[q*,r8J0a;M]~5>,kZtۃvo-Q_Ƨ Vm=|"m63y R@#p@oc|t3wO r)c`1z9^4aE(*Pw+9a8{9]i_[,=H>_ ]6ei_۽r ];j̛  %DŽ]F,f$u͉l#>~6'ⳳ{o#TˏFёԢO>%/q,S, 6%bDjZJr@O>5}dp[/:! p޷5o2e'N3WDG$zuĵ~CvTūi&8t +gZ- X:Q ~"k1uOIZuƍi,^vmo՛t3'rzuj6!qr~jߍmjM[\Od.QFIA`1޺{WN^GZɪEyX:㌤ǝy_!ɫ(0O{7Ÿi׋cyoes~c ˰RT`?¸ִp쨑AI~U:VLcsUZ+XEw"e2u9 3RwTeC I'z q g'MT`8F>ޣL }eSNq5Hi20<nݮ~j6<+$uEݣckHំ?f;v p #Kvj>'[_{9 -HGfe$1Soi: :0t4;`|#6 5ׂRyZ$N@NNx$81\Ǡ?|{&Rlӈp?~̞% x^|ی,MJzp2>1^%1xJ -֦.e3sl5]~^in$b]r (>%\񗊵mGJW/51Vդx%0GowimvCm Pb1?co +|n/k@,VBx- Hו}O5ջUq4onX.q-f*됡Y[|~W\=N\V~U{pF)+Y H5-ZQAq>o,mm*y̪H8v*kԇ=ow4[J?gwlsi?@ncFKOvȨ蒺ꟓ kݺǏ[;G܋Y"KUPqa2qӭrPigS6ԒO:!9UGm8r[/ }?ಖHſ 2kk- HYNד,0k>#xcz\.{y3_Icepf(d-:jKF֖i>dm}#b2R3'ƾ ~"l̙nF$P*ƻ[Zoh#RSW!׼]j/>""#nԎZ33-5i%rxy, o;]y W p`#y=~/5MYA4m_w~`#;V~\nj,~ @Bjҕ,7Dǿ,?@IEjgUf[,>d \Ț؈d8GZ8Pd m+Gsb߼F-Dp?WgVpƮ*aW&08*6G$8R1Їrd|` )ozT ?L"XӔ R\5Y3X_9ߞ>Dۥ2R$x=֑0SzboSR9d=GRhR[y0!? >֝'Q]B㤓D#(a=}f$)#$}ڒEd!w qFuxH!ʃz r}E&3(طWp 9ҐvW?P22Uu'Ty{T'=kռw [Խ-95Ji]vH$S_;F]WPvY۔kѨ]E i )pAG1p@Ӵoïxr]jcp .XDdlҡbd ǧ_^N#GW.r=YO ۮ=IYU|Tc0AnVJ˷JIntηL֢1#ֹo-yӿ&hgt=8cҵ~A~:|"h).nʇMު o~i>-o< kxKxBFKr>bP[pcG}wZѢq g$3؃Cn9'{|84]+DO{yVKyR5c#u,|+tPO9( @f#^ʀ`g'Ԟp91ΤN*-x;~qڠU9秽=wgo@A@9?0?;wP:|lS/(?Fz`++:[D ɥ0s_[QPo]Ꮬa&ZtQ= OTUg|;P@]Atmndȗ21_$Vo4*D răsu' /'_x vu\{Os#2FXv,*1u"xf>BuxQ5FMGX&fi_s( *P}ᏏxY.3 q$qݬpv3e ;Nk~<+w)nmC*20UQ_~?_Ɗf sh:*"$'KϽ0LqǽS)TIosڕt*/hȻoϚ=S*rXԣ--I.}`65Kآ_E l7QA9 Juwi:TA"VVlj\JOy-,ZUk]1#2d($_Oڸľ7gj׆.5+hpۀX8OqֺOJFG K`sW&2Ik vSM.Kv5~gcꟁq72o=9e'#o mխ,Мu6g\~UXM>OZB4!kiPi~$C29 3ApByeBь[IZ%;H$HdFnK%I$NI$<%îsYmՌ]H*7fN~>ᎫU#*'vƒKLmt_-ቋ=O.y]9wW/yr=Fa]NdA+RG7y>-ϵ4W$?pzxtăj%,r6܌8SSv3ힵiX sV2vǯ5l[c ղB?SUca֬ǀfnFz眎arxUU #*B{Hb>-iqu Ljk/L3ڸ gS8#]W `J7 }*3өT. ֡ א61|qs 5RaEg|^KoڄlL;5[֊5_*miy@X(F;u$Z|HӠx/#h6dcsjbd ¯,Ga:*>T\eVS0z+TS<כ~z OA@@;^>dÞ]jT}yZ/y{Ҿi@?4}‡Ěuլw (v,Jظج<_gjo dg b^ =H\:Um>M^a3Rz~UUelm_gLUdOֶ(ns{ ڢEO2ޚ'e0S{#Ԏ|=G:͞kwXDF7` 1ҾsEGdV7;cfUc boxookxciܟhD~yQI9v޹ 6.x➭?>hu9mkp,DU; ˷>?si–p\ Q2T=O[\hMbcFdf,&KF|,OƁ:ɧxye~'-c {2WT+cjVR=_[2b?*:97;KWz]^f4F#n^f9QW!7oxR^^x&Pϑ{m&rrxYM]JXϰ(O&Kx{Oomc]`?ָOh |?=żnHDe>v Z?{?ƢI5浫4T/$8V>[O%%B}sXْ[+輵|Q L[qj6pЃ~$(`qf/?o7F5H)PYY)vlc990+)Yw;2Poլ'wg|@2v㞵[kwn%&-2_d'O8w8*"9$?crpI<_HY~8t_|+( Tqq^gH)׵H%.}rOֳo'؀c9bI'Kf'H~6ԓKM5"sqꬒr+pNsRl#J9V6= n#yC~;sNL0e# hJ&\E/3שm ķ~ԭFm6Đ]KC+H<#^|N4,.O!&=Bd碁 ޙe$'KkPof֥n$THV ȣUE-ػ+Ǣr2A>x+׏VKa(>~,45#ߘZ {7υ1\g<`qQl {WT*x5r{:j@NX!+ ̤y}>s91 n7 <% ч +r/Sm~*Yiz]wHuec{4\.YcF +##*ng8A^q6AWTw3N[[ZC|akk 1ZW0H*zT|WSTR&K%ipWw/ $$*P*`a{j|ͫ ߍڃzE̞fs 9Km$4 8dfxnk[A5{-6&\$} 0Qއ7mX3IgiKjVh-5'?d'#̂Fvb~9 $b$|;nM7ԡi2 aq 1y~/tn?-p1Qfs1Et1㾼# 895~5ʲz /ŎN7#=OŽTp9 מn O^|R^2ofDmƃ'[eHqHÌ$(Su|У'1~kSh\a)S򁜎b%* 0hקm|}rz<4 ^ 9'ɌʩڸUwavzO/ꚟtȮodhɹ$D~W'_7"`~!$[_Gs{WfNˀ擃ѱI+⤃ NzT(+|{8jo0)PG$~tVp`|{a7E\V>POU@y=_&S 3J5GXIt s}J]O|"R!Q UI҅xxZq'ric p[[H.?{6<^3;ڒ(?%Q?½8yժ:/ ŦhPVd$$/B|N񷈼33Zi[kX+HpFࠅU^ DM\#O'.Gھeм{ixEeb mȰe"JI"mu~yBrv[$q>Z煮5Im"o(8!s=FqGëXeTHP$-\c #[:G5rK)߱[<Z9}wvTCK3 ÖViɾf}ycsi-qvxg;/tv)>lV#z =3;@C3H*K"$cc 5?k KQ]WUY|9yrbxR*2\7?<2!KՂ$|&&F9c^~5dQ8>,x@]S(gYeRLQPGmSӚuU۩܎\ޫ񑌟QV5{:*0ֽlQ":}j!CG=Iu(2zsA<kdAOk< ʪIfDRD)!^xWD-cwIF^pzH]TZ]q_jS_ #w3$4~ gÖgr{sשQzqE=OkG=xoijk>M^($*:W ~a9!*$a#_?N+27[:p:?ο t>u)yB@iPMEva6W|XlG IJ/CsHO1__ +I8霩^?O :5v!ᜀI8x~]j6^#n4lSTl[=#ssW,D34ԝ;nY'ZY68u~"SiAHm؎I ۝dc W jfM4k.@<_1R'vzg>K?÷:bMWʸշ[\y67o||E$m78ݒG-K+]Wsv!L$aPa{}sx $~K7Ҥ1GQ|FJ[ &Б觷 («adZdY̓㎜0M,Ҍm?-z)aqR 88U8>}F'O3NA=S2=i B+O8ҽoG<8e2X~U4W(Ul }\mۈ rqI$`i\z3l%nSi*n> q{R`)xPnTR4ȏ78l\JMpy}AT&=1UqpAHϧ|Ww7r.F@ּ9q=+fm=ubOu\}CcZяwk9Ҝ]*M*]WX]_Mϑk \9اQ7{.A Nq\]t^ k) 1=>2g)OKNY'bT|V#P~5yyc+y0:1ֿ8ܤϺ=BO~M6gZPN~6īƌ۱nx(l=pN;T,ZOIa'+ C &WO4?&>G7ǻ3nf$*/h l1+%<uǵ}3)0=P~ 9OIߧEq)r:J~UIirv'&|L o=V$sUd<\-ݬ zk@כwqƔQd}7,|SG~=_N[) xŬrz g$ض']7O_Whc׹<_/IF=ESԹRU;@'(V-3~9xb};4E;'G/uc2 'X)׳>h>pc{⾛tH$ ^OOx}x&& 0c=+P( 0V< =ϠgYCi.p'fB6b+?g "3 qWF)+դwDx^H3 w>%l󭅪ʞTlz㏅t3RVc H@YTg{*$ 8Qv+;eUe&N:~ZA__i{y n ϒ[,@T #JͤM|-k~&Ӵ屆yra#QGZI~C];U jlWpc 33\_#|\lzG>i.kX4սDCtYo#[C2I1\{|+%9͍r qUJTX嫬n}(cS!uU^`=+3-*d$]NpsS@@BtU!tj>]RBw?P^p2}+ : *U=~_zĹ9jU8 g.2^1N%=~\rFH 00| OcC䞕*qҡGR2V8*nMHz@|Ǚ~;a,i +:|]D & ewq~Fk^|[e;߱!8[Ag'Sa9O9 xV>ihcZ1\ r?$Wxo#Ky{M}-֜e0.t J.~ GϊzE6 OhPxFs=?$֣k=VnoT=x!10G`KhTҗ-g={V %QZOb,l>QgLzIS8[Oss:qxjM}fVF=O6%"\n#uŧ~F~7f=ŴZ5b9ͥ\o;0< W n@⫐=ŝ}jsTU#r1 ;vOsQd㨧8 :`R<4I)8`p$=vJ@)&MH#'4]c^=UImƀ|sW»k^i.m'?堯vWSc_OO?`O3>p 'VfȠ|gƾ&φe}}+=_?IKFҤ=(ʆ9IxO]Yg}1QH9 ݦ~2S9'i;nmyh'5$g]~\`5#6 Sÿىw3zEti"@z<W7/ Ae\I=ϵDϸh u#0$"II$NܟACI8lQ/G':c@<08: F$}{hu7 I#~+N|ܑϨ?Z'.1|gLj>]=_]^BLu}IJsg|X@q1jYyEťaP58Azgߚi1 5- uȣ\=9+=P8<~T'#3Oyc=6Ґ $3K=:J@OSpߠV8''֞pޔ;p#Ҍ`i6[ pʓ{qy$?ۥ G8Z@AR9h aoϕ\8?RzE22܁z?uChsGSͰd`_+xȎI~#ކpjJ*FGQڛu-E 3Mq$[/_%5KcY#%g$~Ve (qG5K g=O_J|q*3҃.:?JKPYapkvbH}KXY#a(qŶ,~־qY!X1=MzGn=+0U(A)~_hė4/Eo.܉U\ 6]x^m;w -FmGTO)*o W 3רWjW%ݑ[_ZkzlFרҗ2;F!4x׉|3e4kn1  ۄhiNW LT2c׭`kch֚m@k~ZnkycWwԟLY 3*K?Q^k:x~[$nqN1x*@A-؊žqҹoa' yx}ִ_R%SKdSa$e9f&vU珜̋r;NZծח&C_(z}4JHW<`#'oOzi00>scV 98 5/ZLJx8S׸ V !v溟ge'֢Q6a.Xqb#€OZRm=yq4C\~2By#dIj"X))==JCb}?2L1Ob[O;}*c/&AHYϱܷ3nү|IK 9u6]xko^IvwNX*Ͻ]0l]摵Yw`H}3R#d` ۚي KSoLC q_B_~9_2ɀ;3`Ic=kqʌ) @~7|u|4[_;mfKI]C*ȪYs # jVN:bU&݋`Nsު N7p`UmqzH?ƢϱtR`}}* ?SQcE8g{;qaQ*{IMcJTzӨ'Ȑcעd >ׁܲxW.P u??Ki̘4g%Og_9ލC0LDȚ">]S^~;GG_6xϏ+㝭kߌ;_ᶳcl$suK A_3S( }pCv;z`99JLf;~fߐ=i}Qq'949N st#Җܪ@Oo}=! 88w~~b;S88?֚J?4j|a` O֗a`Hǥrzz+1ݓJX@Q<.g9Ȧ㯰'%Ac89F#8|sFpq Q#(~E? 8>Q;!Aݎ3 /#4$upUa@ϧ`|\'@3g6 ޾OʀJ0=?m}9'|y-zG# +[IqrEvCNk⫤uO1<E)?j䂼TGΒ ;S]$rpz2z}kW0diee$3ږ-}EW,!㯱PY=+v3O|5g*O_+`l<}<u蘷&7:?½و\v4~3rFP;~FH v5xR]Y*s׃]oҶ[ܴH<{tcR`shA8ǧֹ m sҷVkOC1=VW9ֻXSSg ڪ!ms3RzPk @L T$/7A>Ht3J2KvsSۇUU|:{bz#={ i͌Dj=CZC@9vu3ߵ@GU$YF'~TVJw`hLRTx+S${u s޽6?W%n<"rAUPY 9ǽpoɦgQ1}#&6I`|űX(#uVKHUp* vbu9$Hoř[~WuX$޼LV\7}Xe\%àv$݉]qV;}G?~y9ہ֞޼g րL$p} _!#bV!3'W˪ŝ@ 0P>+u A0q-R^sxrk8C_4^9 gg x8~&e4I5ҡ3ܼrH +8EK2ȳ{N il5\rx4]&_<[B{r2 +~-̑α JBrz+ӾVÚ%qEg!i"yȿ/*2¤}Fb\ JkwWWD(HnѝUn̞vKnpsi䜐:)u8ps֘ lwsM5\q?H0:00xF7ǡ0fv'N9ۥ7n3 r~ӾR8e~'ؑsJ"j#tʜ`pxZ\ךhAQۿ4e|}߭rGnӀ>{fYX>P3_Z@*3qJ62y “c)v p?Z쪞}ElvqI''$ɠM#A$vtݤE4x0@#MuϨ)HQKN;=Fr>恈<"6@ZXH1OOƵ\YipgIol8CF@I#;'^9\FYюx<;C|/mQ{R;qnХI<I(ec!C[4=Ž4$0" ` H./pzzR@ׯvOj؇(bC50$I$TQհ18<1$yN8t$:(?ʴ4jƢ}yy}*ykm#Ƿ~d6qӚWB3 >1N\7q[nkYH5ynf2sdʀ7<2c9ap'UnZx=FM}"K+OXE&h?0pIR>OcC{oxsijZBg=+/|[|yu,eD{mi;v=L6yn{9.T'J\>VU~,Þ/=h3ݣfI#y#* /#Q5r BF ^rO|+I-R 'rAݜ4S]\{QSfGnIry*jkg"B GBn e}=+B(Smsl?Z$s3+٭%! xo{f虯ˤ>sokcsW#ɮ79k}J竩`xGֺ!E L>T;Vtn*|'?Z(MNNl`Ո Pg2.N?]:0x2O) ~F:W _^V=XzA j@q}|X#(5yýe#֫ącT߆}*>Gy@@e^q8*I Ǯ8L H{zX#Pqzצ=kBYr"v6W~:7+i^Ú{+b6qn2(,c9x#{oCEI-[1򋙄j: bc^$pRX/,yZr[jRY>|Pv YF̓id>sX$rB^ x?{nMd\|'ڛYݬw%:V2ܣ+$h@ȍ'thʂt_?h_w,Z$ڶ΀XiBl/*o:f'#_( )pe PA |vܭr@]YKEhJȇ9Vyj|̖w#Ut|/H.,EhBQ0хnKHi+5/tIfݓxH)H#WQr1^.=HC4]YouMx+5sdKv?08e`wmsnף{ݫXW$[i4Vʮ';t 꺦dR(HyǦkW-,;9ׅ>"K_zMŽ忇ZEc &yn',@)XٵG%h=kf蚆iy ?;#V#/IawM<1ίw}K4&1bH7t8!bR4K[(5_\]FSk$DqƱFXwe1cNmi<#o:-fRX=Z'R\H`ghjsc銹/;v2[&iYV+(vys[: m'㏽_lq\؂:Uwj\CJGϿu1ߟ_-{⣓X d֯ ,|%D~_?ucYȷMG#,3eKK[ Wz@!q៌?t~8OZ'WLX%)pcYc,Fý_ǏnU]CHegvHo%>g.KǷ~`;.W_ qwkK/~ۍ+()rݧ~ {߄|w=/v ΛVw)E$1H ;8uv3$KB>)~$xkLn4xt~кG5?ĞѮ4KgZ].-(B!͹y#asnl \,zu]KIOVawk,ٍy4j7̊ѐV+hlԅewR__ 4?k5#Ak+t'Ӣ8gU)8E 6 |v.;Q~V6뿨r#Y>5*M-fO{tQt٢[!0$\9CpyJK"CX7*"ź.F6\GFI'2>|ebGʱE{xn8zLsҾK%ئ9XN$`'5a!n1žqcHD;#~EWsQVNypmfہyF8թ-lVSEf#=8^>|C8[=}_a6^6< ZeIiF:.9هR1W]~ӮN m'!e{4zTzMfq9EASg7Iw SLz!oKܱ>M*͵QF 9;BkFJ2lwC~ELi /IϨ w"pA\ߞjt$q\~KZxL1Hrt|ֶU@b|?g --Ӈ_yC$C,_k7RcOP s }ɭQsHq[UE`p ^q ^ $'qU;h?jU!Ӥ Ri2zU,>uqcH(Ɂ-SӑJO]ʿ<j2#8皏m#I6cOFp 9mxԁب4 I$ 秖?ŸFtӮ+ҢthǜMdf0GskcKTF*(o)|co2Ak%^[s95ۂsUx;tJZ4O-s4p;6W qY+jSޡ]u)Hw,:H3ҩCRClơ kw&M )W) HRmR^^K3R\h)M N{{ye^XZybQ .A]JnQM,RL/mo,&; $\` wz̳%1} Y,@Y82  BY&|C%檰,Q q[j+d&_bBjõȯ9U4 ?UJ"`׈|I0ѯ5IM`$ײR8H(/-|6 (Ǣ]x2/֢Vˉ{ҡxH%xbyR2+ u-w }dH<9DvF77c8@|evdǢjXj/4wZDKl]a!]6]ZYС|=oi j^tJ=¥&2cy@e!Ɵ|;޵^!Ӽ%Yh$L ֤<Ȗb4,c9C5{{c+DPAo> G s Q@T}Ĺvj ,]3K*o M-vbHȠG UIk}WN͵9ukZ&I#ll 86=jth%ۦ];q { 3o3ҪMz{o +]GN)>gN>']Oė>H6ŮD$!9+ ,5HXZXz2~ݟ-PqO-'|09q_L'5&}7R7VYU&lx,#qO:|%gnbct|AO'Nm$~yCRյxP2>.^f}fĠ?ew10Dێ'k W$ SBQ#5?,rE Utz1bGS8R0i$D?T }8?f jjBC%*4 =7X*d#s֥x'GmbĜ`ɯ<*eokc<:~)&Xƙ+%̜N̩tO2 }߇[Om>J0Hr:UY,'p)}o 4HQ<ޮ!h@-Rz?>P?Ox 2 w%_~? ,{|e9;_Of$b2Q<~?+G6gÏf$u\֚֌b:=VeA{UDzx㵆&csۦ*?~?WG /<D~-XI#c_C:Ս)ZCgŏW3/+0 &ZVȗWcL|ׅe|Gx\&(Eto1S?΍8u\¯?%=]d=*Ug"|pu@r_(xCWʱf{!m ƓQo ;Q.8"MJ`ڍ13v,PM֮*#uQ\NEݖFaSҺn"ЃϽHV ]C%ߩq$\ QMGۍNvLz wM;Fٓaܿxm>p#.f=q<{Xzjh_),ǒ1鏧YP`X=y&Ȇ#9$q*F[ $~PICcg13+u#ۊMQ/ۯ^:`'7TPITq)q{E8hu?犊_DS9$TӸ%}OVs '9Krbrx@>`( t*I%nَ?Id3S͡jd;CpFp{r?J `HsNo.T'qs=8N% 4vXt _'ސJ^e(w dk`1Κl9Q2$*Iӿ$"˹=ӷ'9gܿR JI.KXqӐ2H{߿PyEEgby BO^F-p_1 c³#mXG5391_3n z9n[pp{D!*W-!<̨-A' c5\͇" e:vJd!IbO6c T7*F[#:uɕʈap7}zԭY;xG_ŞOo֥2eܭ?0;ג1*UF:N}{_El#9Lrj\2鼶C:S@ \\rj075' ;TZ=Ini $,클.=qtf9jYŒﴺ(`B'@ұ,J"pw(`3# .x2Er~UjDI * ¯wO ܾzj$$wpGAZ!m4XkeMlZ*A_oΊQF'<vw ϾjP󷓞+gș1T819?<\fU2jW?6qH8bs44|ef brc2~PTg/1IKWh%N] TJOS,6~`:dh˥5f%@q*Jj{`UTo)fiF61Bx.^~>|uu2\8*w" VȈo 8#ʫ||Ud#rI\NSDYb*q׭1^r`tT9Rˆn b99%5_mȢbNNFsUNe@Fvԁڟn#v=zS!>kOmE)] fҬx~Uq[G qU5F )9-1{GYV=odaP b~Y?um0{a~Y}h=*UG3ޣrxpV}㌲j0_F 8UnWV!j?=C*Ůʻ?W_&b3Nezؔ 9ʝ-Aҫ3xxtGx/V^UɏdbW/gcV 28G?\H!t}?@`Bb>aЎ*N71lcO[Eۨ8j>RdѴ0>,Big1of|vu 3ڦK$sjk(c:Uhr@f>,V )v7@ ԗM{0H8_܈6s ˇ_hlo@OD G_n#ڥty%jw8WMU# $~uMmm.;Fm}?퉊;sɳ& Hv:e*5l7=3+cc$Vzt0"e#nz;eXGҩ;qy8cXh Eyڝ-!c1uFΗ3Yn玾oj'Ȁ(2N1>`;,Aaq班R\VĹ*OY䀁3T qa@W X^ia$$?Jnid,C/z:p0f !Fx_`jp! =ig$I9O[\Qyf$c$|=? y8vF9#u]ٱA:{f} U#nR^ݎOވ˒'y')-G/d\V! `/"rOڣcǂN847nfgj*nȼĢM ']njo)pO$g8?֝򢪕 зߐba R7VM ]!$g$zTWWd`:*jJ NA[JK92{VĬ8۸gnn;4ٛ}#&У)N04Uxԁڊ{pqNZrrvvK cocVDSlcY`Px.P(?xzqYܻ@9=1WWi'v#YI&W[! I28r-Ǯ*HV-Op:YrHjX @ 9vVY@pQ]`1QGp; cG5\H%nNޣQ"Fmԣ IxnX(?.s88't^gxUr0֒pr}1:[ȑeI+:m q8N$2+94+Ԇ]p;~t^B xP$zSBXz7ƌ2;G9 vrqg$<.g2r={SQnHz4E0wr9׬3sB; I.D˹1Z0-k2yo$qNxe?1瞕F֦ʣ<"}w'/Y϶&rrrzrJQ2{W1ձ~6%YNg֬:mž?\pP@'ti;qӭ"^0}~5 A?Pe𮣂"gb1? $^Ay q@fBgq;w`OΣB+n~i.NQ(J\ҙJ@G`?4ddBc@Md.3&^Ny=Qv<4ԼŸSd ۉ=8_;ef:a;X:1Qb<q8ORsMiS!X2n#pN?+w}.5r1*1RI9yswUhI?0#LZn 7 s4b?+lPcl/J ܫГXKV\2g8RK0y=TY 'KtQIkG.M3ap2qzgǖ7 '=#6[i ԟƩ cisz֚BNezI 8r}ªOǗuTND%x~=*l.޸9OEqsd I -Nx5h7<Ӝ929Q+H=H fgCnQ מ2|$h9z;qM.eLhN@V;uQZ=̺x>`^zt=*XnFEEOErMAC+װaߕR4ng$ԯ71S2 cg YrO\=0 G U$4o%N:VbюQEhBzmC)#8s7j(c,=;~_NYr8'>QLbeyjxeޙ0(>.ڋ[uQ袙(tR6H58[EƱ@KpǜJm<(O+>5a63ފ+N0w ʬ*`ǭTar9<ӠߜooEKQXK*@8 ֫pgy8(DfNg#5|O__Z(Q ˁ,8b<6$H*!/MkX`fF 9 QEeM$klKgc%G4QV̌Y<20UJN_ҥIgErS\J;}{}* )oa>QB IAi  :Z慘BIZ(=ggwQ9אv[+Sz29vtqGOi&muڊ*2XXD3FH'QNڒ +lJ7L5Ha#j(%!\c?T6YH ߿J(}D6d&y6}q(I ̛=A>y@N ]lɻ vM>3<`s:(cc?ޘ\F6f([#rO8=L|`=~U^D#8r}?U6NHEJ; nVs28W(Ba?Ue AEbdۍ qƚJdzEZ=M&א: ()3n ȌbPNG  IHDR,3JPLTEfr9_&?r?L|y_/OuOo/i/|ol_؂VBot &tRNSzbKGD%gIFg$0c( cmPPJCmp0712HsIDATXGn@ v3 ?AɔǶV(c[[^ZMKey=C8bȄ&dYJa3agQ~NY[y2!ʋ]_sJlG-P Y.\PdVo Ul~z?[ vQ~Kˆw.2f O›lQc;Si Kѕ Ӄ +Y+W&ҰˤmeQJt0dEv'Rw^21w{rD1$Jh]tSN1g1F+WN9*pIYjdSsHZo D:tLsΛea,n)ˬU-Y@ ~ Q%R1b:XbS7-"w}-)Ʈɭ+o™ku8Ǹ'o?(Z~n}Z%=Rn5Ms R94Q w~i2ʟ_H9t*XK - RN)n)op`[S-]x-*uv/fW0ՒV6qsN,kpKt#Ji_zQxϧ}y->U7iӢ9)H0M1@q`U)%๊7IwO=:52>q!jkQ]*emkIX֜ωctL Gd`@_L߁>?;=ImX$ـJ+woD؅9_q[Lj #0K#i u rL)On& SJ$آ>hǽhֆp?ncu,dӠ_K/UK)p?OsP֟ IENDB`-( '$/ 0LDTahomaS 0ܖ0tt8r 0"@ .  @n?" dd@  @@`` P     "##$; ? G H,LVl ostuvwxyz{|}~5o2$׌abNx,#$$R$c \Ns#_t#$b$ Ȍby 0AA0 f@ʚ;ʚ;g4IdId~ 0ppp@ <4dddd@k 0tr h___PPT10H pp.0Simon Murphy.n___PPT9PH0?  %O  O#ZUsing and Extending Excel with Visual Studio A high level discussion of the main options.[,($,Simon Murphy simon.murphy@codematic.net Developer  Codematic Ltd*B $  0'xAgendaBackground Patterns and technical options VSTO demo The main questions (how to choose) Automation v COM Add-ins Demos Com Add-in Automation Add-in Deployment Justification Summary & questions \vZZ-ZZv-y BackgroundROn-line confusion No (easy to find) succinct info from MS Mild panic after VB6 retirement (VB6 ~ VBA) Few books (changing rapidly) Why target Excel? 400 Million installations Very powerful, very programmable client ~ 200 objects ~ 80 events ~ 200 enumerations ~ 4,500 methods and properties Note: this presentation pretty much ignores VBA^ZBZLZ0ZBL0  zDesign PatternsYWorkbook with code behind Excel Add-in COM Add-in Automation Add-in Automation executable6''n Working with Excel - The options!!(hVSTO (Visual Studio Tools for the Office System) COM Add-ins Automation Add-ins Standard automation projects Open, Automate, use features and Close Excel Excel 97 maybe earlier? XLL Add-ins Native win32 DLLs (ie pretty much C++) Excel 4.0 maybe earlier? Still very relevant VBA Add-ins  Not discussed here mE U!mE U!  b~ VSTO Demo/VSTO (Visual Studio Tools for the Office System) Special VS template projects that incorporate strong office links. Closest replacement for workbooks with embedded VBA. Excel 2003 professional or better VSTO 2003 US only VSTO 2005 any locale. Locale still very much an issue for other .net developments *1ZZ1k4 Big Questions}What version of Excel? Function or Feature? Application or Workbook Level? Who initiates connection? Or Hosted v None Hosted Le" " " el1. Which Version of ExcelJIf Excel 2003 all options are possible Anything less than 2003 (professional) VSTO (Visual Studio Tools for the Office System) is not possible Anything less than Excel XP Automation Add-ins not possible Anything less than Excel 2000 COM Add-ins not possible Total Office Installs  around 400MNZAZZ ZZZ$ZNA $m2. Function or Feature?Function (as in worksheet function) Automation add-in Visual Studio 6 (generally VB6.0) Visual Studio .net VSTO not appropriate XLL Best performance Feature COM Add-in VSTO Standard automation$ZZJZZZZ$Z$J  $o!3. Application or Workbook Level?""(WApplication COM Add-in Automation Add-in Standard automation project Workbook VSTO VBA L 9  9  p4. Who Initiates connection?jExcel (hosted) VSTO COM Add-in Automation Add-in Your application (not hosted) Standard automation projectL""DemoCOM Add-in  load up events Application level functionality Excel 2000 or better Visual Studio 5 >>&HHqAutomation v COM Add-in Automation Add-ins are COM add-ins that can be called directly from a worksheet cell. COM Add-ins Must Implement IDTExtensibility2 Generally load on Excel start up (can be changed) Automation Add-ins May Implement IDTExtensibility2 (discouraged) Loaded on demand only TcSEcSErDemoAutomation Add-in  Worksheet formula Directly callable worksheet formulas Excel XP (2002) or better Visual Studio 5 >>&&R&Rs Development & DeploymentPExcel is written in unmanaged C with COM interfaces for VBA and other apps. VBA/XLL has the easiest initial deployment (updates are more complex though) VSTO has the most flexible and overall easiest deployment (server or local) COM Add-ins & Automation Add-ins standard COM local registry issues. Should have a shim (Custom CLR loader)&KK COM ShimsWhat are they? COM dll that loads Mscoree.dll which then loads our managed component Excel>>COMSHIM>>Mscoree>>MyAddin.dll Why use them? Security (code signing) AppDomain Isolation Protect other apps from failures in our component Protect our component from other failures`k,\k,\ t 8  gt  Why bother?Why change from the current VBA / COM approach? Deployment and maintenance easier 1 version Write controlled location Cleaner tiered architecture .net framework functionality Visual studio .net IDE better than VBAIDE Enterprise code reuse .net security may be better than macro security?d0Z"Z@ZZ0"@{When to bother?Note: my personal guess only! Mainstream in 2007! Excel 12 due mid/late 2006 Excel 12 is a genuine improvement VSTO 3 will probably match that time scale Very likely to include more application level features Task panes, Add-ins, etc Approx 12 months to get reasonable uptake VBA will be looking very shabby by then VSTA (Visual Studio Tools for Applications) will have fully arrived .net framework should have reached saturation level.MZ#Z+Z7ZZZM#+7  } Resources u Summary~VSTO for modern workbook based solutions COM Add-ins for application level features Automation Add-ins for worksheet functionsZv Finally:Any questions? Simon Murphy simon.murphy@codematic.net (;$ 0 9/(-   0` 33` Sf3f` 33g` f` www3PP` ZXdbmo` \ғ3y`Ӣ` 3f3ff` 3f3FKf` hk]wwwfܹ` ff>>\`Y{ff` R>&- {p_/̴>?" dd@,|?" dd@   " @ ` n?" dd@   @@``PR    @ ` ` p>> _W (    6  `}  T Click to edit Master title style! !  0  `  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  0lȍ ^ `  >*  0͍ ^   @*  0pҍ ^ `  @*`B  s *Do")`  C *ACodoLogo")   0Ս3f#" `q^ =DDD(2 fH  0޽h ? 3380___PPT10.Z Default Design 0 zr0 (    08k \   k P*    00k   k R*  d  c $ ?D, k  0D k d k RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  6`%k \   k P*    6@*k   k R*  H  0W޽h ? 3380___PPT10.rpt t8(  t t 0t \   t >*  t 0HIO   t @*  t 6ثk \   t >*  t 6Pt   k @* H t 0W޽h ? 3380___PPT10.i`ħ} 0  $(  r  S O,Z O r  S O d O H  0޽h ? 33___PPT10i.Z+D=' o = @B +}  0 d$(  dr d S \OT  O r d S 4O'g O H d 0޽h ? 33___PPT10i.J "R+D=' o = @B +}  0 h$(  hr h S [k `}  k r h S \k'gY k H h 0޽h ? 33___PPT10i.K+D=' o = @B +}  0  l$(  lr l S kk `}  k r l S llk ` k H l 0޽h ? 33___PPT10i.[(+D=' o = @B +}  0 `<$(  <r < S ,Nkw'g<  k r < S okj'g k H < 0޽h ? 33___PPT10i.+D=' o = @B +  0 B(  r  S Lk `}  k   <$k 9, k H  0޽h ? 33___PPT10i. /a+D=' o = @B +  0 00:(  0r 0 S `k `}  k  0 S k ` k "p`PpH 0 0޽h ? 33___PPT10i.PR+D=' o = @B +  0 @4(  4r 4 S (k `}  k r 4 S k  k ^ 4 0Lk6 c- Excel Versions ~ 2003  15% - 60M 2002  35% - 140M 2000  40% - 160M 1997  10% - 40M2Y 2HH 4 0޽h ? 33___PPT10i. +D=' o = @B +}  0 P8$(  8r 8 S k `}  k r 8 S k ` k H 8 0޽h ? 33___PPT10i.0+D=' o = @B +}  0 p@$(  @r @ S rk `}  k r @ S $k ` k H @ 0޽h ? 33___PPT10i.I+D=' o = @B +}  0 D$(  Dr D S t `}  t r D S tt ` t H D 0޽h ? 33___PPT10i. h +D=' o = @B +  0 0(  x  c $t `}  t x  c $t ` t H  0޽h ? 33___PPT10i. 3.M+D=' o = @B +}  0 H$(  Hr H S X t `}  t r H S 0!t ` t H H 0޽h ? 33___PPT10i.PH+D=' o = @B +}  0 L$(  Lr L S `O `}  t r L S /t ` O H L 0޽h ? 33___PPT10i. 3.M+D=' o = @B +}  0 P$(  Pr P S (5t `}  t r P S 6t ` t H P 0޽h ? 33___PPT10i.  ѕ+D=' o = @B +}  0 $(  r  S =t `}  t r  S =t ` t H  0޽h ? 33___PPT10i.`+D=' o = @B +}  0 T$(  Tr T S Et `}  t r T S Ft ` t H T 0޽h ? 33___PPT10i. 9A+D=' o = @B +}  0 0p$(  pr p S Wt `}  t r p S Xt9Y t H p 0޽h ? 33___PPT10i.e +D=' o = @B +W  0 nfPx(  xr x S ]t `  t L x C $A booksH x 0޽h ? 33___PPT10i. +D=' o = @B +  0 X(  Xr X S tlt `}  t r X S mt  t ^ X 6A ? H X 0޽h ? 33___PPT10i. ]+D=' o = @B +}  0 \$(  \r \ S t `}  t r \ S t ` t H \ 0޽h ? 33___PPT10i.ϸ+D=' o = @B + 0 @((  ^  S D,  k  c $6kd  k  H  0W޽h ? 3380___PPT10.rptr0-?C$?' 9zk{RUYSM[ ^!ce+h5mtwx@EIHJo}@?rOj`.|1.( '$  p"www.codematic.net2http://www.codematic.net// 0LDTahomaS 00TTxtܖ 0ܖOh+'0T `h   Visual Studio Excel DevelopmentSimon MurphySimon Murphy126Microsoft Office PowerPoint@p@h^`Z@ e'GSg  )'    """)))UUUMMMBBB999|PP3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f333f3333f3ffffff3f̙3f3f3f333f3333f3ffffff3f̙3f3ffffffffff!___www4'A x(xKʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwwϵϵϵϵϵϵϵϵϵϵϵϵϵqqqqqqqqqqqqqqqqqqqqqqqqqqqqϭϭqvvvqɧէϨįqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"www.codematic.net2http://www.codematic.net// 0LDTahomaS 00TT4xܖ 0ܖ"@ .  @n?" dd@  @@`` P     "##$; ? G H,LVl ostuvwxyz{|}~5o2$׌abNx,#$$R$c \Ns#_t#$b$ Ȍby 0AA0 f@ʚ;ʚ;g4IdId脍 0ppp@ <4dddd k 0Tx h___PPT10H pp.0Simon Murphy.n___PPT9PH0?  %O  $ZUsing and Extending Excel with Visual Studio A high level discussion of the main options.[,($,Simon Murphy simon.murphy@codematic.net Developer  Codematic Ltd www.codematic.net  Excel Development.0i A4  0' 0BSxAgendaBackground Patterns and technical options VSTO demo The main questions (how to choose) Automation v COM Add-ins Demos Com Add-in Automation Add-in Deployment Justification Summary & questions \vZZ-ZZv-y BackgroundROn-line confusion No (easy to find) succinct info from MS Mild panic after VB6 retirement (VB6 ~ VBA) Few books (changing rapidly) Why target Excel? 400 Million installations Very powerful, very programmable client ~ 200 objects ~ 80 events ~ 200 enumerations ~ 4,500 methods and properties Note: this presentation pretty much ignores VBA^ZBZLZ0ZBL0  zDesign PatternsYWorkbook with code behind Excel Add-in COM Add-in Automation Add-in Automation executable6''n Working with Excel - The options!!(hVSTO (Visual Studio Tools for the Office System) COM Add-ins Automation Add-ins Standard automation projects Open, Automate, use features and Close Excel Excel 97 maybe earlier? XLL Add-ins Native win32 DLLs (ie pretty much C++) Excel 4.0 maybe earlier? Still very relevant VBA Add-ins  Not discussed here mE U!mE U!  b~ VSTO Demo/VSTO (Visual Studio Tools for the Office System) Special VS template projects that incorporate strong office links. Closest replacement for workbooks with embedded VBA. Excel 2003 professional or better VSTO 2003 US only VSTO 2005 any locale. Locale still very much an issue for other .net developments *1ZZ1k4 Big Questions}What version of Excel? Function or Feature? Application or Workbook Level? Who initiates connection? Or Hosted v None Hosted Le" " " el1. Which Version of ExcelJIf Excel 2003 all options are possible Anything less than 2003 (professional) VSTO (Visual Studio Tools for the Office System) is not possible Anything less than Excel XP Automation Add-ins not possible Anything less than Excel 2000 COM Add-ins not possible Total Office Installs  around 400MNZAZZ ZZZ$ZNA $m2. Function or Feature?Function (as in worksheet function) Automation add-in Visual Studio 6 (generally VB6.0) Visual Studio .net VSTO not appropriate XLL Best performance Feature COM Add-in VSTO Standard automation$ZZJZZZZ$Z$J  $o!3. Application or Workbook Level?""(WApplication COM Add-in Automation Add-in Standard automation project Workbook VSTO VBA L 9  9  p4. Who Initiates connection?jExcel (hosted) VSTO COM Add-in Automation Add-in Your application (not hosted) Standard automation projectL""DemoCOM Add-in  load up events Application level functionality Ex  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~?      !"#$%&'()+,-./0123456789\>@ABCDEFGHIJKLMNOPQRSTUVW*Z[]^_`abcdeRoot EntrydO)'YPicturesKCurrent UserDSummaryInformation(TPowerPoint Document(PDocumentSummaryInformation8p"@ .  @n?" dd@  @@`` P     "##$; ? G H,LVl ostuvwxyz{|}~5o2$׌abNx,#$$R$c \Ns#_t#$b$ Ȍby 0AA0 f@ʚ;ʚ;g4IdId, 0ppp@ <4dddd k 0TTt h___PPT10H pp.0Simon Murphy.n___PPT9PH0?  %O  #ZUsing and Extending Excel with Visual Studio A high level discussion of the main options.[,($,Simon Murphy simon.murphy@codematic.net Developer  Codematic Ltd www.codematic.net  Excel Development.0i A4  0' 0BSxAgendaBackground Patterns and technical options VSTO demo The main questions (how to choose) Automation v COM Add-ins Demos Com Add-in Automation Add-in Deployment Justification Summary & questions \vZZ-ZZv-y BackgroundROn-line confusion No (easy to find) succinct info from MS Mild panic after VB6 retirement (VB6 ~ VBA) Few books (changing rapidly) Why target Excel? 400 Million installations Very powerful, very programmable client ~ 200 objects ~ 80 events ~ 200 enumerations ~ 4,500 methods and properties Note: this presentation pretty much ignores VBA^ZBZLZ0ZBL0  zDesign PatternsYWorkbook with code behind Excel Add-in COM Add-in Automation Add-in Automation executable6''n Working with Excel - The options!!(hVSTO (Visual Studio Tools for the Office System) COM Add-ins Automation Add-ins Standard automation projects Open, Automate, use features and Close Excel Excel 97 maybe earlier? XLL Add-ins Native win32 DLLs (ie pretty much C++) Excel 4.0 maybe earlier? Still very relevant VBA Add-ins  Not discussed here mE U!mE U!  b~ VSTO Demo/VSTO (Visual Studio Tools for the Office System) Special VS template projects that incorporate strong office links. Closest replacement for workbooks with embedded VBA. Excel 2003 professional or better VSTO 2003 US only VSTO 2005 any locale. Locale still very much an issue for other .net developments *1ZZ1k4 Big Questions}What version of Excel? Function or Feature? Application or Workbook Level? Who initiates connection? Or Hosted v None Hosted Le" " " el1. Which Version of ExcelJIf Excel 2003 all options are possible Anything less than 2003 (professional) VSTO (Visual Studio Tools for the Office System) is not possible Anything less than Excel XP Automation Add-ins not possible Anything less than Excel 2000 COM Add-ins not possible Total Office Installs  around 400MNZAZZ ZZZ$ZNA $m2. Function or Feature?Function (as in worksheet function) Automation add-in Visual Studio 6 (generally VB6.0) Visual Studio .net VSTO not appropriate XLL Best performance Feature COM Add-in VSTO Standard automation$ZZJZZZZ$Z$J  $o!3. Application or Workbook Level?""(WApplication COM Add-in Automation Add-in Standard automation project Workbook VSTO VBA L 9  9  p4. Who Initiates connection?jExcel (hosted) VSTO COM Add-in Automation Add-in Your application (not hosted) Standard automation projectL""DemoCOM Add-in  load up events Application level functionality Excel 2000 or better Visual Studio 5 >>&HHqAutomation v COM Add-in Automation Add-ins are COM add-ins that can be called directly from a worksheet cell. COM Add-ins Must Implement IDTExtensibility2 Generally load on Excel start up (can be changed) Automation Add-ins May Implement IDTExtensibility2 (discouraged) Loaded on demand only TcSEcSErDemoAutomation Add-in  Worksheet formula Directly callable worksheet formulas Excel XP (2002) or better Visual Studio 5 >>&&R&Rs Development & DeploymentPExcel is written in unmanaged C with COM interfaces for VBA and other apps. VBA/XLL has the easiest initial deployment (updates are more complex though) VSTO has the most flexible and overall easiest deployment (server or local) COM Add-ins & Automation Add-ins standard COM local registry issues. Should have a shim (Custom CLR loader)&KK COM ShimsWhat are they? COM dll that loads Mscoree.dll which then loads our managed component Excel>>COMSHIM>>Mscoree>>MyAddin.dll Why use them? Security (code signing) AppDomain Isolation Protect other apps from failures in our component Protect our component from other failures`k,\k,\ b 8 ' gt  Why bother?Why change from the current VBA / COM approach? Deployment and maintenance easier 1 version Write controlled location Cleaner tiered architecture .net framework functionality Visual studio .net IDE better than VBAIDE Enterprise code reuse .net security may be better than macro security?d0Z"Z@ZZ0"@{When to bother?Note: my personal guess only! Mainstream in 2007! Excel 12 due mid/late 2006 Excel 12 is a genuine improvement VSTO 3 will probably match that time scale Very likely to include more application level features Task panes, Add-ins, etc Approx 12 months to get reasonable uptake VBA will be looking very shabby by then VSTA (Visual Studio Tools for Applications) will have fully arrived .net framework should have reached saturation level.MZ#Z+Z7ZZZM#+7  } Resources u Summary~VSTO for modern workbook based solutions COM Add-ins for application level features Automation Add-ins for worksheet functionsZv Finally:Any questions? Simon Murphy simon.murphy@codematic.net (;$ 0 9/(} 0  $(  r  S DY,Z  r  S Y d Y H  0޽h ? 33___PPT10i.Z+D='  = @B +r|Ы|U10( '$  p"www.codematic.net2http://www.codematic.net/4simon.murphy@codematic.netBmailto:simon.murphy@codematic.netp ՜.+,D՜.+,    6On-screen ShowCodematic LtdP TahomaDefault Design[Using and Extending Excel with Visual Studio A high level discussion of the main optionsAgenda BackgroundDesign Patterns!Working with Excel - The options VSTO Demo4 Big Questions1. Which Version of Excel2. Function or Feature?"3. Application or Workbook Level?4. Who Initiates connection?DemoAutomation v COM Add-inDemoDevelopment & Deployment COM Shims Why bother?When to bother? ResourcesSummaryFinally  Fonts UsedDesign Template Slide Titles 8@ _PID_HLINKSALhttp://www.codematic.net/"mail$_, 0Simon MurphySimon Murphyto:simon.murphy@codematic.nethttp://www.codematic.net/cel 2000 or better Visual Studio 5 >>&HHqAutomation v COM Add-in Automation Add-ins are COM add-ins that can be called directly from a worksheet cell. COM Add-ins Must Implement IDTExtensibility2 Generally load on Excel start up (can be changed) Automation Add-ins May Implement IDTExtensibility2 (discouraged) Loaded on demand only TcSEcSErDemoAutomation Add-in  Worksheet formula Directly callable worksheet formulas Excel XP (2002) or better Visual Studio 5 >>&&R&Rs Development & DeploymentPExcel is written in unmanaged C with COM interfaces for VBA and other apps. VBA/XLL has the easiest initial deployment (updates are more complex though) VSTO has the most flexible and overall easiest deployment (server or local) COM Add-ins & Automation Add-ins standard COM local registry issues. Should have a shim (Custom CLR loader)&KK COM ShimsWhat are they? COM dll that loads Mscoree.dll which then loads our managed component Excel>>COMSHIM>>Mscoree>>MyAddin.dll Why use them? Security (code signing) AppDomain Isolation Protect other apps from failures in our component Protect our component from other failures`k,\k,\ b 8 ' gt  Why bother?Why change from the current VBA / COM approach? Deployment and maintenance easier 1 version Write controlled location Cleaner tiered architecture .net framework functionality Visual studio .net IDE better than VBAIDE Enterprise code reuse .net security may be better than macro security?d0Z"Z@ZZ0"@{When to bother?Note: my personal guess only! Mainstream in 2007! Excel 12 due mid/late 2006 Excel 12 is a genuine improvement VSTO 3 will probably match that time scale Very likely to include more application level features Task panes, Add-ins, etc Approx 12 months to get reasonable uptake VBA will be looking very shabby by then VSTA (Visual Studio Tools for Applications) will have fully arrived .net framework should have reached saturation level.MZ#Z+Z7ZZZM#+7  } Resources u Summary~VSTO for modern workbook based solutions COM Add-ins for application level features Automation Add-ins for worksheet functionsZv FinallyAny questions? Simon Murphy simon.murphy@codematic.net www.codematic.net  Excel Development. `9''* 08 09J/(}  0 \$(  \r \ S XX `}  X r \ S 0X ` X H \ 0޽h ? 33___PPT10i.ϸ+D=' Y= @B +rv m1