TSP/0000755000176200001440000000000013623676650010736 5ustar liggesusersTSP/NAMESPACE0000644000176200001440000000316713612366100012144 0ustar liggesusersuseDynLib(TSP, .registration = TRUE) importFrom(stats, as.dist, dist) importFrom(utils, read.table, write.table) importFrom(grDevices, gray.colors) importFrom(graphics, image.default, plot, polygon) importFrom(foreach, foreach, "%dopar%") export(TSP, ATSP, ETSP, TOUR, reformulate_ATSP_as_TSP, n_of_cities, insert_dummy, cut_tour, tour_length, solve_TSP, linkern_help, concorde_help, concorde_path, read_TSPLIB, write_TSPLIB, ## as.matrix, as.TSP, as.ATSP, as.ETSP, as.TOUR ) ## TSP/ATSP/ETSP S3method(print, TSP) S3method(n_of_cities, TSP) S3method(labels, TSP) S3method(image, TSP) S3method(print, ATSP) S3method(n_of_cities, ATSP) S3method(labels, ATSP) S3method(image, ATSP) S3method(print, ETSP) S3method(n_of_cities, ETSP) S3method(labels, ETSP) S3method(image, ETSP) S3method(plot, ETSP) S3method(tour_length, TOUR) S3method(tour_length, TSP) S3method(tour_length, ATSP) S3method(tour_length, ETSP) S3method(insert_dummy, TSP) S3method(insert_dummy, ATSP) S3method(insert_dummy, ETSP) S3method(write_TSPLIB, TSP) S3method(write_TSPLIB, ATSP) S3method(write_TSPLIB, ETSP) S3method(solve_TSP, TSP) S3method(solve_TSP, ATSP) S3method(solve_TSP, ETSP) ## coercions S3method(as.TSP, dist) S3method(as.TSP, matrix) S3method(as.dist, TSP) S3method(as.ATSP, dist) S3method(as.ATSP, matrix) S3method(as.matrix, ATSP) S3method(as.ETSP, data.frame) S3method(as.ETSP, matrix) S3method(as.matrix, ETSP) S3method(as.TSP, ETSP) ## TOUR S3method(print, TOUR) S3method(cut_tour, TOUR) S3method(as.TOUR, integer) TSP/README.md0000644000176200001440000000417113271620736012211 0ustar liggesusers# TSP - Traveling Salesperson Problem - R package [![CRAN version](http://www.r-pkg.org/badges/version/TSP)](https://cran.r-project.org/package=TSP) [![CRAN RStudio mirror downloads](http://cranlogs.r-pkg.org/badges/TSP)](https://cran.r-project.org/package=TSP) [![Travis-CI Build Status](https://travis-ci.org/mhahsler/TSP.svg?branch=master)](https://travis-ci.org/mhahsler/TSP) [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/mhahsler/TSP?branch=master&svg=true)](https://ci.appveyor.com/project/mhahsler/TSP) This package provides the basic infrastructure and some algorithms for the traveling salesman problems (symmetric, asymmetric and Euclidean TSPs). The package provides some simple algorithms and an interface to the Concorde TSP solver and its implementation of the Chained-Lin-Kernighan heuristic. ## Installation __Stable CRAN version:__ install from within R with ```R install.packages("TSP") ``` __Current development version:__ Download package from [AppVeyor](https://ci.appveyor.com/project/mhahsler/TSP/build/artifacts) or install from GitHub (needs devtools). ```R library("devtools") install_github("mhahsler/TSP") ``` ## Usage Load a data set with 312 cities (USA and Canada) and create a TSP object. ```R R> library("TSP") R> data("USCA312") R> tsp <- TSP(USCA312) R> tsp ``` ``` object of class 'TSP' 312 cities (distance 'euclidean') ``` Find a tour using the default heuristic. ```R tour <- solve_TSP(tsp) tour ``` ``` object of class 'TOUR' result of method 'arbitrary_insertion+two_opt' for 312 cities tour length: 40621 ``` An online example application of TSP can be found on [shinyapps](https://shrinidhee.shinyapps.io/SimpleTSP). ## References * Michael Hahsler and Kurt Hornik, [TSP - Infrastructure for the Traveling Salesperson Problem,](http://dx.doi.org/10.18637/jss.v023.i02) _Journal of Statistical Software,_ 22(2), 2007. * [TSP package vignette](https://cran.r-project.org/package=TSP/vignettes/TSP.pdf) with complete examples. * [Reference manual](https://cran.r-project.org/package=TSP/TSP.pdf) * [Concorde TSP solver home page](http://www.math.uwaterloo.ca/tsp/concorde/) TSP/data/0000755000176200001440000000000013623555031011634 5ustar liggesusersTSP/data/USCA312.rda0000644000176200001440000022604412606077054013321 0ustar liggesusers7zXZi"6!XS])TW"nRʟXS#&'ƯNP7ϡBDxo"ZZk_^Cl'תᙧ38_efTaWFon됤1>C}CqR=/x AcGy)4myNc5G_fS B-/'>(f(=Q4uR5ɪ6B.#HAr!CZxCTQ`IsdESaX7¡wuf%Ί4uĕqd QDId!w+n/߰-heBc̕3օ:-U@r "l6{(Ey_mTizu B%ew24,ڗJ {"*'c5E(vzD:1V$:D*knnxz7ҟ(3Dd%+ILѯOd"ݝW xh}dcXc*$"CI2,Ujث- ih"-rDP)8)X7$o:6-Ge }?q_ni|A P’j ;ۃM̙&tX Y5$lD/H6#4xpXæWi6NFMk|c  חlr}Nh7ȘZ;W0?|h1;(%o+q6`B&uyO*bmN^O53o_D[ h'+t%*Nc`ypyӯUS"77K'o2Q`(d<5J+_Q7do]EIXW#-q1BrbR.dk-y v]ptp$@P9Xd7@cLnh̡IUܺ=l|"jW ^on@jJһ_Bg46'*ɵ ]BeK;[ƽRBcV*#G%#1hc]O4GV9Y$/elqƪɾKQl28WUUV;uNا] rK%43]&7x(B{'Ib%BnէX7{YeY2u#یV}ZdKN5a"ݕ+h)逗"5|MwUs0\^B(CYߧ531^ym|Y őWJ#!ScLM b]c~u\[sLy&w8V~#b Ym[OY`#!DN=>☃݃U!! |; @ǰ޹e 3mO߱%›uDSG'OӨ&(<epDX=1`N:\ ga]!]1ro*RYSJJj:l)0H[S@ hǦ^l)$gb s9ێ@v &ƟRub|T\dώUcR A42Z@=@5';ܘ;Y-Ο^_'I&*l/ g Zf"Ie9[}Ro ÇmV/Z(e1r P~gSqT(f+7d}azc,=^J/͝z-Q&cѲzOhť;=D֙&f'M?IKPWl5z܉R!/9A QG'6 Џg+ꢰĔDQ PO6WM398!<'@S}+0%'w8CC#:*H oHsy2";2!kG?+N-]pl1&7"Tbl-J&X5i32Б :[%^,M >|tU[6 JŢHs@6O^qLCYEL#*=?ʪ 2༐'8nMѸǬǬO`+E @(ikz$tir˱yX)}> aֱɋO7W2VA JZ&(*=i~Q+RPkM] @]qS^~4`~M̆ϳ H|諝n-oJbL1Dl>^gtl]O5qT2D~odiQ'W-<&YY~w3X-P*^mgnfdB/8$-΀ץW`HBIeCb>'xB>ps4Y9H }CP[CV*Ro[v2ze둎 һPHu}Ân%Hxq|2yk. a{)6 ȣU. ;y z#TQzLভ fs I@ICSߚY,Ǒb|?P1R 6jp,Դ*l;upd' Ԅ5 AM ݪQY86Z9L^t(j:ڛ[Qdl Ma4R=vϿTai|)b;-O@C?> 8kwݐW:2jG\ ,yH 2GR;qYdV tM*-fAsiu0·?f';lS`oCk.x<AP.L%X,O ngߴTEy0,1>;l*\|$ D un"gDk$NzA< '\Pvs0ɁEpIk ϸ+$EtE=p:hrٜH/n\I_#ã @3 s?h{\wf:휷b~bhndo,ࣆ5kK3ΠT5H 5ɕS@YǦ~ۃ؛Bc~ԑ0TOb3AtF:B2#WUyG-Nj78xDfMؐfs$Chuc ,Ϫُcê e4y3a>_Hv0xBS!h P 1tKU'`)]͓mȵж!Oi˵~җH&C_O+"VhXp-ڰِF dMHJ  itZ.J9p;_^^}һĪָy0xYޠjB_g>ٛ}#ڝ-(cxk)uF^w_78VuSecp*Zm G[96PL"6 ]+MusH0C2==njVPfH^+CNufCedy`lV {󂪘@6r_ŵaoUxI C!@'%7,}W`}#Q!t\[n-gS#+xf`bJz3nwyP ӟkX6ٺƪD/ȜynHGeE쌶}WxvUW6l 6>"k IX,.r ߙK@kbO0c%vD 9?uчy-c-pM&1DBٸwH⼾0qiNR͞5֛C5.(#DNʛrqgS&T>/D4 A~]fT_? R(tlHA&Y B^p[O9HE*膿M|g"; !<[5[$Cdr*A#C_z>>Ìx嘾"WoZHXpG=I\gaIiP~[7XIߺx২'0c^vx}, :FO[!YSGT~%TՒ~cXl "KH_j& hzՕeĜ# }KzGy=R^8T!M8h! \MQ3e5@5$,=绪ǺVFNZVoJ@Mu{bh4aWRXqmݮZGE/C*-vkv7 n |L"96]w?H9U}NH獙a*bWxϭ:Zbár"K |QcUjcC:%!onxjWH1G7;v%*R\ G6k؞S8!>!m5e"~i9|);{cĭ],1=F;hdB.fn!v |W⍦J@/ TI}~;زT-ܮ9Gsdhcd+CQ ?mdؑ|)OY&\.Q!ZF>\YD7-wÃb\./<C7d%H3F9~@Տc#x45sX0[`fЀA΃: kTVD$0+ Μ1eLpw/\")zmKb*yMO|okt)j]X"hIUftIJFWxjUEJ)}4XUk;qs\Tgz G{hw͔СT|-D'U:ks{k|5Iށ/܀F/ewœIjlƎ3Dj4Jn-Sƌ98 9>T k D歐Z m>|\˜zd4Cr~wc "Gؔ{O0ix_-8n˞ IcO$]]%& *gU1ySVPG!Oƒ%d2d)J!ݴuRM;wx4pXU^$V9RzH:Q2ޯ8W+ojS;]ڑy'A4{S[^7:٬3S=͐+B8waZ唝h}A_)trcW#6xΆq'vVr"G!-Ahܻc4)CS.stTr`*<pwˮ6\.L'H 3b6;ۇGM"0ZviDdzngGl!>I,Ǥyv'6M]0o.Y{i_Ky as(K u]lHTO9yq(CYFӎ kA#Yg>Z/3Ѹh]=W >O (>K3wݙTCpàg4]mm"  +OJoumƗL+ gX0fABߓگʓEIP۸)8ViT6B*qiAeC'K_Gq%O줯{ǞG?eۋKPB ƅLdUiE@ŶL}0/cDB2rhR38,]LUȔ$ͼ^ n\qY dƛ$їJ_"1 ""Fygߩ, Z|'U`<}(=H%~ 9]֌=KJR?$ir$u)/cR& Ȣ{JF!{.bvd}/qzpLҪltiݑ61S; + zJscϣɖmPq@[]URKҪ(a\PhA3P5_x&Elݯ~E)5˅Xo"d8 D44"ORZX#pltdwe("e(H*KZ/9 pԜ-)Y[qjWFΗt |vX9" \/c\rOn3w`yg/bb Kς  :fW*Ls?#䷄Be=H2峅-cR_p善~]/宏ORߘՄ'/ o1+X"HAkffH!r}ܹ%eV6OF>o"锋r0JyO7r0m‰?3w1 FYD{z ;``V_qjJ($Dw{yp>AZI)M!6ʆ髇ThoO!Hϓ*[ux=dvܰv|;H~XZBE=gi'SC ~1s$^XfMuN GhӄqmŚ{yA8>ZLšHTs3;"nQg{OtOAG>XPBh' fуwk4y[fK\o L A{4! ʁ([ܚ>-M5]Dm.K^E/7EvˢRV_iw8 #Zd;6?fc "Q8MrcT^ CJ3r21Ab>jNΚ+Ü /_sk60$s^44:IsIHQm\;QByGQ9_ 'nHbVuʗ (4 ! ^3-QR~}6k yt9#Ȼ8R.ta{hc;}J43wvGfjhnt@(ZsD:X&y;-rĿk媠TQ} CVSY .,Zc#pxf^Q}$(Nh.&\=,_r3ŗּO7~ІRjbjtB(!7fXіX biB?J%7 ;zNT[) ktq" eu5#J7f=("klcߣr$XgZBоwC\NlVBTYt1%gorutNERYaGɫo ]*㺱y5y^sQ@.1:25j6Ȫ:1H~Xf3=b2q L/m5=}~74?$3vJ?bQq҉%Ms zOBMҦ|v@Kdg⒒xb)(g_1kkDkK;'Ha€OZ?";}x !:0"EvRL찀Ļ?hH1:"S wrR'j!ߣyӝA{X߹e$#:~m$ST9U$;<ZCs ^.ψ{8+pi.a\:3\<#ހR/]Ep ;ȹj澨FF(gՙW,|ϭq.SU-?PU n_Ԟ %q*gpo>E`O %<6|j\1wz2WLZc$vϞ sUy\ é"sh&S- Ux?Irs9/vi` ]~zu\PP,SgSi:Mܮ'P,lobOD鱊`yt]b; /F#V CGx<0?XC+T[tIs :)G7kfԺͧk 6eA`8D&|%)?c)>J1N֥۾'YR2',TvS7ra}҂1AQl߲%׵H%W25K-u π/t%k$D+aXJz Ŗ l[-O)2OZ,OhNmVvp8RYQKre^~$ԫ;)r*O ˛)^o-%]ΰw^~#h :(Xp%SzAlE&%DjcMQu{Zx7=te:o6A9rAE"0Bl'G4!>t@/_Er =E269+>d)DB5]"1N6Jk<az&ë2D SLz2Ym{irʕ^Vh*ZqX0ruU+F\{tfQ7 -1k:db\ޫ~va_=UZ'? ^o.﮶ƃ4AۜʞpTy4Qj_m7d}LDO2y;z-g2B:?kR=׮A}T K}Sv|S~Y8 ̸$q:JdqQiu4&@ z"Z9$lրb"-+Hw}]񵌜if-eyAG9QTg/!L;J#};N# 2&t \!k[ь;Mn;goU >mlHÌyj`Ub*71xZ3c&+~*-ݗFz'S]Gf"Y{6!O3<sS:A/\hyVb.~@sEC]Uf"_ Q5K4N"R:aO ]=E{Hb:,Ss8Oi>6g;NɥR;[ꃞXs^[\z:OX*lqx7Ds# oOo :U/AMgV5'QHce( dG]~Zo4 hUBnmS(DXL#0h Qjq6"2p@ل၀_ULueЊAڿ$=6aF6#> \P>^'W_ڶ9AR7 uyNCkRj- _#?L`yL%◎mN /hbֶ5LwQ<'g\%@r'żtՖKg&1fHeu{J!:q*yEg;[<}uك8-{3Zz C8㏽-ou-ȷUUٽ6d>$NXLsҎ m)O_"\n+;=;{3#\9}0 -7 @i z0HڏK9/~ y5Y᱇n跄](Qz9;nL0F,@BxEYCՉ/ NAl ("gE>;ڞv$mwd RLmG-r+j@J9<Û&Y,WIr=2Ty kU_+|O$޵h/0]aaL5@1OLߞ*,Si{Ȥ7'vZԃyqZ-ux#~'d$`$#&9nlOݵqKRfR DtG|ꩀq=^"ҷk{Hr2'`DR v"3#^j?+*li^͑Y-x_g4x;ʛ⤈![FMÁ2BO!Ezt/D<ᓇːu)nG"5Qb #dcKMQb{\r̈́q@.lxj={GP'C ~tΐ BNdl~)s.$W2h&'DAd]p)ZdEё8W|Mw +5+Kh]ikj[`1h %?f{%8$V^4-.^9Dݟv6ˌ# Bc/$:70/#㏵8[DiYN߮{{_)6B'(PȳcWiЯ Ϭ.+9T3KTr!{5⧏w[yk6序ȈIo]d&WUoUFIL *>g'DΪxe3mŖHvS =VʰlN̽ %e 6 }]iW^ԑ,!5;Ðߴ95 S0K rKl5QZoxv LQG!E3\} 3X5PZz~?Kp@ dռbs7.J\j\Ŧ;lʉ~zyOc5"P:6vZ2N)5LnЯH0{Oe~* 2?MJ_Z`LuLyc<d'fat׈łp k}^}U0&ac6 N3`PV>Kng90Eo`e=nL̢JNSOC}şXi}B[NoELNџΡ(~' ݓ]o:2:-K.9W-.F5GT rm .έ;"S5!;{d~r"9>ħݑ7Sc\=z1" O0Ď R;A272.P"*X%ན>Gt3Jv_}@ex89[Dk[ >Vۚlf>cs#wbRNռOsAcq9;=!kp|Q W&SGGbo-pt+ b\pXj 9}r'k=GwΕOc:" /l {]ӣ2W%ł)~yFnG`i,e䖈LrG؋O$qQwn{{ G[F KcI ּ[A,;-NMX}8GPӨmVdsY lV(8^-O8V#A w t< @[NrBPTwHzgi[V 5۠XO8}5W u%CLC;w1mmrJfqf 3-_rTë:^|o /PW[?G{vm5n?(mHpuo:Dz2X2qx̅yUpYFie3Wz3`.wbMU1oKBd SnSBʋQri0=x]E;%1OPafpF}[>+R?cqAO8>,f^%kU&w,ng51Cv<y0?@t%1+xo/)#kh $@YŠG;|2_gG=>( ~&5GQZ eLlg%| `ҌZ)^gJ.vC\'^=dڦt(@g-0#2Nqqx&٧t䔪l4ףt= lA 6O\l 7~4P\ ΊȲUʜʑfcZ$i @[:U-Y}2KY!ogPJz%f$Cxv() VYL>-s*Q2Ͻybzo_ۯQHg]K>TnbĞhqq? (9M!Y|e7PK6DR ;/f݌22DT@*xmkʩ Ӓ'Dz5ӿ6MfP' O=di8k!>Hj]AP~E1ÂrfT\rLuà!\ri~Kޣ|m/M^v3ɢx` VSd rb ePzu3\{b+C8݊RBIv"a(arcBceq ê# ĪГ6a_Q‡HS0pi?$}C"%g暾rDrw_at^^CLaQv$EDn A0c+!Ŋxt-Oi'B$7Ai$[ڒ+w-"]dƔ~3^q\,Hc8>xx?{ vKwR$xPQce4mdMMm.pՇ[; R{~W~g@js0y #bka>6*Hv{:S7t8ha c= a{L_ 'OGmj+T+?h?_1'=m=;.RnwpGN u0WT])HqP_` ~ȑhmbwr]JK;JB#K4%-tD"gV J.MqE}*r h x@Lm2.Nr r9L~'w)5.WpU;ÌL;{ VX47MI-nAA)ށc+PٔYH YIZRbw?_SUUBpGhzTCb K;bCxIy&m+[_飺NIJA>ҖV7okB.|,AfDr|r#sf)v_;N2n߻Yɷחcڪw-rҮ*_`r&ؼ2 iÃV3tOY N 5wI9-= K=v4_uN!cobWFWf^F$S$lnߞ^I hi/P݋SX!!v=C9Q+X''%<"Ùqi!`k.|Kq񆂱\MN<Չ aET0aiɻLgӉ`X28檰 8L>mGNgo1b9?ğ2`(y\G-ORIM ㋾vZ Y@[Vg$HP:wI.4`) B^]wMomxt<ċC νm/R0l%WUo{ҌP|YF&Ɓ%4U6n%k*0ç*[ z:}VBu3_?j"n;$0Laz{1.:L]dfXB%xxQt)…y<%úQZ0Hy@W ^0$\dVu}܊%Fbޏq:XsItq/3yCh.7Q ])30"~Gl ͘YUNOl Z]B!ӥFX9SAX˕: :Y(n ٚHpQS}HsT{y/Ze:@vm[ӧEd?k0+NFm:j1~#E"Fu 1 !tZ֒0plBVeW:e#{v4Rm2%=_?0%$mL!Ѓ3&a:9E "r[[(7eED??ve{q.prd;ہlv9q*.99\f+\/+<-OMEdeb,SϭR hFfDI@);F p L,*Q-qJ8۲n@Ox=BhY161Z`ssV;zpFq_Htuةa$nBkGqkGmdeegg'5eJ#uZg;2q_ )(t//$|eaģ.ƉM i0h͘H,瞍l2{+gxijV$Lnn* ) QDƭ<GX^4p6I=꛾# q 6 tn cNlkRx";8 m/JY$ABg$v` r8ntE˿t-QʃEbZZV)@ӋoKm&f-B=)F,Q$ ZXCTFzI) a qLG9CeѮZ#w}{% oxۍuo~C2\RoY:]qt3ظyfI,ȇ?*Ǧm u8 Gʍ1s,^%\AB6\g:iS5ٺI^ӣ-@//t @ʝDc@3AUU%̸dI\ MpI {a#x6$~"esGoeTBi- 6[J"Z\1mIǭnn7ݓ!j \%y N/HVN]2/2.1C KĵOܘVzʼnkNDJ?8t:ϥn4oᏇ/0b=_JVJm*I?AoRS@28bzlufѓuL4,2|zʱGulnYr"T. !Õqux)#Ph_{6CH9p?x%L/,Ͱ{L@SȜ{>a&ƟoH8썳y(J58>9My]Ǚ ԳZ19wIxt>_] C $םX:l׶\p/:ܼJ%WE^ @~rNpeh72~N Wb& q mgHQylk2%BR}yχHkR !tc?wwgDG”b>KH#1j?lpDt<7 f<ήyL & fghLci1VS҂xuD)DnHs۫Ҋ/]Ңxm-Nzvp2By֝0,i>)rnր}hC;=8lGcũf]ӋLG;WyVU.0UZ4#Νx__tEMk5i3 yR דz?iϳΩ;ߍȇR R/Z.?O/ιݛ|Y_w,q/M]߀]c>@qb B~4 ayIE#H:A [%Y@=a`|G1 ,@X,JWLG,"rKlnSzE,0}݄%~ |4&@)}i ˳%U<+@G8S^%pW| 4PՠR@8sT|o2rNxINm6Anzk+>2P3[ŭOݳ>oPVY\DܑerN8r6n*܅8~cH1lb1;wFxx+}GބlCAj$;V yj8 WhiXS \͸O93EM!9 +<>.f%oo<UX <~69UPmvGzze.fxQ~x;\]px鼳/J$)S>o -o|aF^;eߒ3ܰCϺO+MRd󆸙P%|սZju8ȪБu_UX^5<Bl,ebë]7ТO>>;kpOHD"Ii æT!FPjȝG0r+FMqN)j5:|%6юq pMpl'[`}ƔG%SM6Rq&,(7E_jRctQ,)^l!e]V?uvFCL)eY>E9 7b f9閕@:ʮ5^]2q܊0WE_u!R}@-<HBr}B ۡi?A:'L.k?ZpkPLV_f'' iòxD݋̡=aU-ԻILu)ANZJ jn16tY?"tHŐL_G_MIm(B{MryOTm1Gי[ZK;&>}%';A/`+' ? AEj-{=wW>aG!@Dڈ %Lp F&ZӐ-oq!| MUCl;IASrwXڎx!';8ϦG3=(JR_]sRLR1/zb[}h$ 1$o'<1,>8@a3F(&C(3t/X0QX;Ϯ0я~Pn'RߪKK?S LrEFa9bC&8ӏ,x_-t$F^Hu$tP?lܖD$`Ƥ+K*9R[rAՄTm}l+_"ivbg_v((KD;jhowniⷒ\pHεe';똛3`X>H.q@U΃1n/BU3%1diQb,?쩚2#zP j;ou:e|w_ZkZ)ynD/-HGDjBWWH(0E}U7A(j` _DŴmJʾwu4͊L/s9li*~l"'\=6EU g"?+Sk"|%805C+MF1+#V82O0LC iy]RadY~9HcWS ZDLxX뜭l5zJ*݅uYFyihBjњ0}5)ˢix&x|tw!f8 MtOw2Enva$c#?Mg hxGyNSj+07`pPlɵe|೎vdoH[`& =o}ӊ3YC? fu fs  tڼ)݇ФlzF =+X8-71/SO{Fڂ9E_݋,!跚d_MW[nQQg;uf=2+Up3 @#`r3 $?մ]NSWIHt{Oa_ª@!B? Vv Z&=)m#"+drqj GB[oaM|"lrXCK(ԋ4V4.*M:"+Rba}/\.p9X8fiL1퀡V<]ӳ;s9|$X9gW\7"ׁ'q+B\!u^';VZoPxm5&]$e&]BB,S?>U@r$xN9asdYPjvC*[@}Q?(z+"$luopQ)0690V7-yr1#>UmIze9\J0nK-'hiEAjEv0U~B"~L{kxXΒMwt9U@y(\5{ZՏa?R9m4{fcPվܡPUQk5X4ipƛpl XL!c0RƱ>UlT 2e*)*OFɵzMkô\x4˃6h`9# l.+4T/rر +7 uSk_.Aܛ#Jk@Dg{PA܃ y"އ =ĨJvz4NYOOXO)$jkfʃݺL6MHa %mKa<̋4Px09WjD9^U5;B-Tw9[}i) B:XF궈ZJe7G <}J9@uW:XթY^Cw{5Oi,^H~u|zÍ@O* ?:]S9hoD*Bu!EךUUPdcZLj*,쐂?  x$涞u>Դ4傏d*- ,RrbIE4RW'p7L^Q}↮]׻c=vׁk]"@Rs}\@ "l~mtڋbR/T_X0-%] 'IV^jkjPX])b3Ԥ픵,ChbNi GI i~;Lp{v{gnVVNB,[FXGH|S߯n%t;Hqh_r#]6Bx.ww1X0'\j{=LpZПzECfcHc%[/ "(1z㏓|N 9ud-!s|jQ34C`E|R#yS&(Li`Ͳ6¯/řtGrBO^&+zw |/̯V[ ~ʟh̩'t/j=nx uإ݇[5ޓ@'s.pn(U "t<`0 _55 ⼯%")/=cdJunsW k>]Z_mI HDD L•E0$9*нtdlkTف[]-  N] JiI8)oh㭅f58~@K,zG VyiF e]kD )k gГ?& wK{P3 mV=23ܜ~D[S&zi*f.JbprFʷmN9P/\ [ݝKZ/tml:܇0ܵ83K2Ɣ hmkGL!\/@ȑ󄅢z*v\24ufr`ܭCk &K \Byٸ K >++*h Y*QewWhpTDH5t>RY,oĖYFJqu8ħ$a~F̷Z0_C$&Aԋ_O֚݋x$= o7$Y݁B7%ɯd1|Lu˾d1r^%#zː [Q)߂̇ㅳr蘘S͚s7H hG1` l;1 GOKK?n"."v>!_PWѭ8i2in/~>7d2I]VY {mo]0ZPDg3p%&kGc[WLeUbtl| NK-Je@uHLCteG 8#GuZ??^_ C?@,l2/%!\mPPD'cy(j4.c,0ٟts\|,1Ndž?W!` To#O:* jd]pEdbZ6jKAnnd@]m9}[†)z!Gf| ` ,ϭ.)1:o!~zSՀBs!t p|q&lF‰y;R![Qfr%h1#kpfJZ M{I>Se~&l(p-ncj;]Mqxq d714ؼ!cA(&OHSKPgQz$2Dx lD~J-Jʄ!8$OA`ھxz[mj7@>qm[_z+01$́8Eg|@E4ti'GȴߙeH͐p&EޘSyF8"VKZK^Ui)j` ?XHQWJnabq 'Pgл $|-p J3:BTn'ʂ3Y]2#+"Yl6+[PD|IBk0;-N-S5uUF4J+L( S])څ_S7ାZ䨤vDMJ hHQaDxӡTfl [i[̱ QcyyUw|6#f'ZZ'amӏM>kp= De [^6BN-)ܟݑ{6>Y ɜCx$^kJc_\:SYؚW*k) Bi"Fo2B*Q͊`#Rj1ႋ:hb. Y5qzwQ9 4ӳneѽ{Tzz$B489a4ɑ{ZK}VjyKeSrH7;}&_Lx9_ݫH[bJ7VI`鞕LOF9jb݂ܭ~lЯ& X I|Ob8=@|P٨'6=ڕ3 6S ݋٠b9R/'ךF4)ȅNuăѩ+jJ ^b|J3v ꍆyX={]H?P k&r5쯕ڲ)7J.薌vVU*|3Ts4&KBerВ"^oddMkQrYG)HߵqMX@|N0lKGt(2L*->@_ zkIQTVS}4xW2oYI !i= |j<[k55ߪiuLc.~ /ՍWάn?(Xi#IQ!}z?tzaBY{AY rseKU-(Θ (~xauWOr$hzcj>}x9iЬTlу6YN$r> 6ok O@qs}6p8C\.ւ=JWd̠:;'n.?5*MPW*1𹖉ϺS+Q|`7u.&<|L\ʧ笘pN)]ܥOgiw[vV ^K)lpG7 2P1j}W ! n2Rpmk&23֬$IN2dNJuDr}c|B(Ԥf!l޵GqPx;hK ]U,a.6(7Oޢ`C{=%E?6ZC+;# jt(!;yMcF /)GDX%R`oBYVe3Ym90\ؤ ѓ1o{QKV!g2cQO9;/sK@+u{@ FDInt#?6} ܺīQ& uk{rSP?[@?QXqkl*pR+pǬ2&=VWŽB#h=%4,LT0TSܶJ iręu.Yz$<~$ a,+j=NPs5BsjB~lws+Ӻ^k.OGc*F3ܥSgK +4xGP#P7_YK4y))k4| n Dw){};Ik+8Ġq5>4 gv1][J~j?mW.$dI# ]_D޳F{Iy8_For~"bz,Gw)#I9ZsX3 Y}zuuC:"٤fKU)+*9GECO0'qryAgeޠˬ+Hl˯z˝mJ2p'_($|XQ$LLKQ!+W"tO y/xB< U#e( ]Cث{QlgEJ3uIHz7p |8 由0xoޓ^j}[gL!VTB@Îm݉I(ac&d$LJ#{FiP|׹dd)kA!g;Rw,ceSاVlS`ꚰfjK1B.bqAO<,p'30S#d|F!Z&.XM9@9PHƂX.0UzIGaVhX~ZU N64\띺*4 KCukbs 6U3y~L+K cjޔ:@b#o֥z3T/`iĄds-Gw/6iynR24#T^)UCK']U#p,-SG.Ʉ}V(_USh[Z k*4;NĺXY4~Ad*(7PK/;, V2Ou.Ue>] v`VRlL,\Q#jacޓF# A6>ʆw1{A핶#NEH-:{]Qx$?;(;yiIFA$k,/H|RUSڑ&gSa~\o9;U fѼOQSRMT׎¾MhO1 1Il ѼCCr$iX[\ɍND.[v|#~ FU{D" ]pVp=$B.͛9\3^H;KЁN|#nv 5v DUų&U 7\>CI=k0&xe! t|jethD۵8E3CFօԛ(`P:9{L٤*'\MiY 3wEsW$9bз({F #O0E"mvR&w4ͨqE6dJZ\m"̒y& K.~;V 9vi7O /o"XJM_C set7kkeTO(rqU_Q?j= lXWݖ []dhhɯ S<Ȅa ؾMC3Ds"p- Xf7_L1MVC&{%ZAAխ{!:] 춯"Iަ4hě+k-VCFT(I$˷=UaoAk6Ge RpfhzLėruX D-%N, !Av ^c<[%F9P>u袆9=E? fa "ϛC٦g'?c;#P[ Lx+`ۀ,0L=<6h\]A_t8PD -d1yM6|gF{J^)0z$"PfBZԒ%)Ɵk栱Ȱ]:Wk˞O۔3pBJ"6RZbQ} p=ۣ-D`g%up6y^0% ބ4hW\pF |Uf}jPVlцì84[Vƍr ߨL0.D5 ] |qQx|1AN/haB<ĥgT }@:{k)66~+ܐO٨TjʖG>.&'q.4̖Uﭺ|$;y F'a*fl3,˻,pfB HЛ_xyw3;Dfo7o:&/,Y:+2`s/8qn.T3Y/#E!hAN~9q!W~gp I 'fGGFaF\3Ĉ0"Wu5n5 #gS  ߻C 2 T=iE = Tg/jR&Ҏ7&[,q.Anm 3pĆ[2|&#YQ/1@4S${暗L`R&0=.i3)A,z{r&+S"}P>PSHt.|.'qP fPX2+4E|Le'FBw8z$S;Yt17`5DM<C7d/FBo/?U&'W)]&`E)ȹq8]4HÎ~κ9$IxA~eWU/ȬI-Eri7>퍲<8AD.;*aE Kզ{sj)1K&9k$ -;}5xH)6L SVBP4'}!/ nj65 h[hG؄n[m>0YSWcf'D,J$+h%t"CyA0Z$"=KRzeͤDrF&#cn6P"Yjau*r, 6O㟘G)D8{ݥ.m UG] a /K?р?G34kQ{KAaOs`?*\T]pKo{C=$WդPOu\LԪLw8)S&&r\5~!A`m(w/;'3*pcQ#1!ٹ{}g4?#8Zz?Ht_,+d~7Gh ]k b/:8+8,ģJz }1/@Yo I..Dᐬ 06daYrG,#YtҷK!{7c)"_@#[W6A<4Z >Y4iLE-fP8+H\[o*tSu`-!Yp;xD.WfkP $[8 ^T1oDvʅ9Q[G|f&KK@R?5vz*esDHn`];D'W]M^f("dTp.DX.A+D,[;2toIOGkY 嗼/y`" ZуӵVfn/- z4]U'ZvDEf!QjW$*y2Y]+ӏHYMQS8Iu*ކreZu2wQ8$prs@ؠ 0س kUco-kGbu<2T;(&|_ȇTvD75ڵϝfuE-pH Ka{B-xSX_8-)kH+iY|$ߗ&-RIbsoKsaU,oX\nD[( |= [ťtj9a;yZT^WLgRo>E sY[2/ YiQ1{ `1Go=/%M7!/wh4~jB ЁA:3>ok&4k2 7ѧߋYg9;j x"CB㥖Co 9Ё]V uUJߔ|)) rɮ~Rlv*Eh)%rfx? jVC ew*OdH1X= ׯ"RbB ~!]{{5p1$}T̴/{0n5ѣ؟H( XS}@%(#&P@X8@WQ;4w ۋR u̝9Qfe{*^2V;bOukrȁO6fdq2k̚ѭ:"IɄd_`(߱\,El裏$.>A22k+ j S(TM]Ҙ@Kv™6-Fzt~XgА)b DCtwjW'?qgqR+'bbYs+!S[QcDH~7w5 ܎۝Qd=jtZ^e?fc35ѻ!;)jdߟ %juYCW]U6S I#)\ۧ+1[ &xGW "yH3 k֊l$tlgqF%EE-@W<"*.DE P$LNUdsiEx4ebu9Z {6MAZMGhkKC ](xBBC B'GnA6XΝu8=rqsj|Bs0޼ }ԾT;B:HGf鍒ŴމV^otGzSۥ$.x'1\Umfl, qem[܁>F! hb^P T2EQkc.dIL bA%:H߾nFlNe +)CˌS?R7PU/` /VcsJ@\BL*tNDũ#Iy !.~Q_C+uL]vJrc1) H w󼪩2[E4^a%d[z|~ ,["+Qe DJL0| LIe8G8q>huJ0)%]Jأ}gfLiVMP|6ĵTx;f^@ e0=.Mq*JHGg/=G:N<,C' ۞2_l=./^ !ƛ+kW4|k'z$ܤ^uJ3fyso3q}JיFjɊy6㸲p{\iO*v`u;?gp#e66+?,]߭>.F>t˿{/' &JڭBRlzeG=pV~3kO2:_>h9OF/q9w_nkl_Ʈ55wNair.zp |VFP=?!9OQ2IdT62FI {7uSuȆC'\t (q1+=X(4-p2%$߬Ջ */&# P\"3'7Z|L%7pt @{Alzҿᤦ 7L@%)5򻓼ю>zIw =agTd&9 kjkd-Ϩlk j5o{h_2W9'D7v} $^4+D:\}p3dC[`Zj6a `@n4]^:#BMm{X zimxv9`ק+ffyKFP >qD-bФ:hZ8y5 B8OrZ͎/; ٟ:'wcNH? 8` 56*DFK^km+ukXq; s#ahy:?fJ5<lAӭmg]Ԙ[,s>X)4!,7rAYMp+6E$Z)97ӥv|`+ }H Ъ> ^&,S`ωVbEo?lwa0I3UEt0Q t;̗{a坕/Ȉ-x}v 1JwvMA5hwǃ kH& !"#=)X[`^Sk@N1` a q aR>UBiKE۬NCd}JFl[( ؄fvF?ܣn\jEW#rB@s(5q[G jGU #jWЪo ӭÆ*IQgρDkmٻ ¢(8S1IW/ǬEiDwùz3$ ѣч؋!gY gRqJ2v#m$:kF0 jg警<kUw 3|60g$ol.[tUNz)×i0O.~ęjC8ZkE/ 3 ɨԌ>Gm,KY 2"[3b7y]؁ B~S9Eo *bBa)*3!]mރDO]q#B'5dzrק`*͖Z[S҈, 5}Og"^4Eԫfk6CFcr| .WOZ!X;%b Q.^L]jc'h;Y1  -W 冉`><4K{ƱE\L״߃ s@ZI\GY{T@Y"P0/+x9ukOa~OWUD/Xm:)Sut( VJn\z6Z̑[OM`dd&WQUpKVLbzA<\It^ X3ˡlhJeGkAs%tۤH,&ƁuRY:Q}7W]:lxe.+u#138"B TҜ#¬kFj*$Z6 nT ΌP"+۹m@C/}ǗRзj[ b(D[k$" V%vũ۟d3\ BFB9~.kI`S,e~庑wD8yaj m:2SZ$CŠ.[[L} @-?u†¦&,ԺyUv%Ex:d~;sZnIt\y,)TnT 6g.Ba}硊oB%!Gb|ח.5\E@DiBfa\|y``2%U^^sy# Mcbz ̆Dd9s+[GU)A K%"k4LgOE`2I qhioٛ"="R$&00KWf4e:8@"lڅKHgdp!F;)UiGz ^Umwr!N~Mu7Ae (Ma%}ӡ%{}3rǭ R;9@k?qN|cL4J h%dZzIQo6X{:] QU9"k۪RHix@"^ DF>#m{1Bg<^˚r$\}W&bkr"J[-*Bqc̨+̙ ]lwK.1Ӵ ^{mNqrak4NzkOvFR곖n qtHUZ&AI\}dB8Bgscuյ:;A4@5Y2>/SRHH#;`mڒQ*m'#v6w RZ{7û9iF|3?ŻmhΒpMU/ 0'vM'蔜rdaO/j`#EChwS U&h'y'0;НJmBAbT5)_ ^.,V TF xxrdؾz`o2Y@w'qʩV:~qrzy)˛w |C]5ǣa$&.9N(H1T C fV4"INT8Ҩ_3 dm^4+blmuI@BJzUGR&$Bk08VgjɝP?tKR5ֱB!+ "W8\ 1Հw-;GC]S*7warLb"g0g|* 0#8Y'OYyyp3 k+Evkg~q;jJ_!I$yߺ#Aa> aNRo.G05oc1K$אC-/Wܕ3\.z>}ʫإ.ղ)‡*.YEFq<|^j_)K8ϤO?ϽЂWFRP82p{*0]ە5٦_MCAE2u*ɦP% HΤ:K&RDe- Yc(NJzog̵/;ג4<2V:&nV'Fpy>8U ]M͖mTԵFys1&}w5mJ_rZ_5aMWŔ?>*>!Ps@% 6 1zd@ѹjO̮ܸ0ǹӧ0GKEX-h>Pr[.ՊŎT܏}+Hqm} ?zLY~zRw6jԖTFr=ú910=4Ҽ-_0e&V&19 //"ʤ^#3Wwڔ6)5ɐ_<[0;[],'3A6JY*IJ=s"ـ5 0#ҀIhaԶLO±Ss' 8aBmr -\83|FY?ip1tR=ƀ-cBerG|uF޴Je<@7xy)/M+A_u4 RF2mz z5ĤOU|ɕ"JŦViDT.C?cSNUɩcMW=wT%@RE x i#v7/x{kv8ͨL% ]&cض_c60n-h?yr^Kx&?uـg3҃zM 38d1 os %`g5D) >.ƈ5s!e Pjv{ /~icRMQ ^+ͤvo(F؃gWܦL RqBJ ɻG^1 {tk@\T<UE> P}_>?3!.;0~)OhR{YnWnl:Vl& :BB{0JUxeH<R`@BS#A1ERD2JEMHյo!s̤8tP;p7e5 D6AQM#MC"CM-doN~fUS'!C jYrhc$i/uh~ͺ4Hj]߮fn.;rqKZx*$Jcy E:dndb e84 g&$#Rx]}tkԖWĿMڋ${W>KO7 B:C_>A Faߗ GΌTE`0-ˡt9,S֙׮Y#@_}])nmGg'xSLNƵBͺ̭D b>q%*:F=BϣKA~>Da}Zj)Y:I;q 8 qZ@)|!U<&h ٭jw:r1<(a 8&$;-:aoX-pҟ0ơ]5י/d,8% xo=n-6S@-e@.Xuȳ L" b!gYCbX>B" CAtSz&Q g"׌$Z&qFx?lfDs* Ck{^7;\q95tT ͿZKy؍0@ղzD@Uw҄MtDeyxEˌ*.33p~It"EAjKVulZU|%>Ƞt#t^U} a /X1!بP7-'=x ʸϯr$>(\|ʏ9T 5wY k6-1"FNEHf,e(93`:=JH ښ-yM<(Ua/c7`S3wlQyNcD7'o > g.4LQ#\ ٭P d#ejSy-AL#z69NVU7D> 5g`[]P7Պ%nɭ [Z7%8ݪTU..$5ITl*w޵uz2҆s3O Kc*ZI6.uzad{rcP]C䠐T]VX(Y-'c|%ԗK/ pʮgz?a60L:jŤoX{/޻Ekl{ӈz|KBJDfu&t]T훃lw^Ah©PSynWSl`t!-TP(E8x\'wl#xgM᫧=F&/5ڑW{Z!1rS 3t8orXqIp̦\ڈ!e(JY DX\74|.Z6 MٺtpS]O2g3"] nbvHJy QT0֥ ^taNCC3Fa9]xywP .GiuQ573Єh, @N(愻s*B٭rYFJdkL|Wy_Eb*9R2@jfO`߀CZE9/ m?Aixm>|k-{e=):Q7I(@9`.cJE <<+v/ⱸ?K)J;AV?,=,$IXd;O e%3@Q"3rJq` NprVZy:n4p&2B$.Bٶoi{V# z5bCCjUG1k:fw)Y :Jul:N]mª88+BxnA+ e6M>#{|n9Yr]}co]<;bu-NeXoɈeT]&lPw}H5tVp? 5uLg^ #{ -{e P-m:hDVP:Pvo/"!\ %֧W:c5\s-&}<^JvE6HH6GzxcQ Ȫ7''BlIXfo4)! Ո딫V,gޜ# wiy6!G0IkVmg@ ވ֏0i\ hti-L2h!/z!\Z6DxVW;5CF-RxVLlQA91]X'~ltub0g xH"kn@w졺(5]Wݵ-gwMbץVTIEpF>^@>m  0 w֡8#lW׈Y Vwlц,L D൪i;a<H(e\<:Ӭ.40taI=K+> LZ( xoy4䙂'eEmЏC0!C[ 3kۗ(t&+Qh%1 QDtVW `7a jdL _]&!~KN(Y}rAmȩsǔ>OZh$lT$\DZ0iEZɡeHمQnJ| 0"R ~Omf@KcPPAC@ὣ9LH9naNaz!n(wRU4ݒWًcr۫8Q5<$Кk?5$L8- %چ:I}fc_l.9R* X^>]U y=^xuc0jqj;k'#;DumA/n,(":Ĺ.+vmc Bz4FQ;nmH3?~1SR/ȿFN ,j6'9U}gTpT0UeI!J/^ : ~X3ǼCXbcflHun8wiûh1x(Ӟ\ŧ9\@"mQߩ#d۱|^%e+ᎂ1VfuT$5/ [ c]nL63SXC!!BSsf{pMcb6틫䑨pcN?"&bv!{vBh~&>n|r a'INrk'j?1cgB#o1܉4[7M3B`RڮRDŽ+w,orWŦInb^lJ i6W<Ȣp)#~ⲇ"7IsS(kA"YΉ*"H lv3X{y?!l?O#؂ HȊ Bi @"bi [vN@џ/4`lKduojN@, kZf@. gC b]G=,^JZ!D%m MF0i"AνqQXv'VU=گ;>4q\d!5e#Z]-d9bωVLV%&O&}%Wkd brS#$K7"~cTHYIh9zn٪oFC0]kh _ #eR8nWTE ;WNՕy;\1pQTxt@$IjO6IjA+8dnbdЎ"xb' "8Q?WuE;zu2=.vտ#wZ#,x,A7\/_&kymPԈjuXP&hZ=T. AMl {ڔA\3jJ 4N,t28 L}|J3Kj?# 6!Al 'vCE-̈́ʣep;ڭD`\#ёBmH ^z:) VL-Qp,<8 T,Iqkq-^)?iy"/׆@@PEn:$8myH"߰HN28CګB L| qݿK2RFuNa,DAɍrX52JCr*3b.dHm2 ay()|ulڡYFK%iyvJ\coLg&az.T2Z㫪vB!$j,XJ1\Z!Yڜ+|̖uyd+(uFYFXQ#XaaH94V-y$k v줹];e5S_N^G; ep'Fe[\T17+΃="O"^S ,b[ fOlV9,\Ř> QĦ4z7Rl L6E3NQӘ2f(JbY|ί\/je4N$Ugk$!]}4o 3~B v0!5 27w}X~0.ѵl})@(y׀V^$vcM1(b/;Nu^va2XfP dbjDBVވp#v XY;'2Jm5Ƹ.B0 9^̊EO)`hAES\yiL|1o&DÍ8B*8xpX!2B%B&BmZhQ9;PJL9:&#J^eNRƴ@)W[Mk 6f"$ꛔb;4ڴ ć7GbH,x;eɰd]0q)CԵM+q$sU! :1ݼH%_i ӛ8p; Ɗ 4f] lURp&b&t89~M$t? md[VB)"GHf{$5a x[ 6Wru*h˄ӘyũzfCmK VB00gzə;P98m]٧\> l$LKyHO\#AƷtu|`)Qd%h+dN&U18/NXX”驍e|ɛvVzLEI{#+xpݶZ&=|SN,aO.OX۱f"H-X<3?po%4LEls|\i@{(z!Ӻ$-wyx_!V1kIETtǨ| W2qiC+~@B \)9LcpdAm3ԧ3kP5*a֋07:>(GpL!z.WأuiHDR +"Uz ɷge'ja:8ʔT##.(@IɂFRZd+َglf|Z@vp+7;ah4x*Y#2\[Ec)5VhdL,Woq[y !/݇‘Rh)0 s:"!0MD*4%_J>X3.b qay*W9+! 8ɹdS QDC#aK<%_elD%F!LPA}48]脁ڕ'%"UގWѕ~3 O#\guH{(㇕&ۀDXk|4T ֹ%\ÂO#zJ^rg$#*fؕ ͥB<ory>i~ $km8"F 0vtl>f M`Èu%b{ޖr<_;ƈ{I͆2;آtLm{95iH(B$q4q\:IB wM lHDQfAXSEFJu~23.Te_5GI+f%dV"Lc֣hϾL|:QzhܬB'%)9++ԉ)&>v& FHD`ľ{rtV΋COoˊ9 zccg\F;QB)AWd KDS#3ՃMlA6_X3_DfKT.;kMНuL*$HkϥS{1kѽp_p$Nxq3xSoyھr,}yGʇl3C |p@jc zWuqXzuڽ] dÅ5['_;3m]j%{u.ڴAĬ59//6JC${Kg#/c_`}))w0ċ's,$5 L_r7 &87 ,xٍ {떶W>P`"@݄d23<\{RkV,/wa~d&Y)Eɜ}F6S!8R##ԻGV>^;GTrj8`^8LJgherD5z,zZ2 ?)c;Vdx'8  h/QP!B^^ɉc =dsGpxMvhA[x0ihHhys˵oCɪvL [=MߣE 7h 5( z6KxP ɒ% F5q⿰7&u@7xT\TOzw3 #uɅ/E [P;"]Y!v-4 _l*v{|* 3; $]ŇTIJjD_mQs<2݁L',JJ"PNltw (w*BRuvyݹ&A%x3[||~Yh^y*3QzAW?즮b^v35+rЅk\ٟkZD)1 6W zW-ccɫQ Pz@U"oswn8nc! H-^ }+yfUsP A[7}t0-ANO"2uzjH=Qf~d/Tp9vdψ~]&(HMKIUi2+ ]2hݷp-]ZqJ-s|5na+vSɭé20?d&GNNX)ʋ0)q_AC o{f@^Zۅ!Zwo{'fi ÷I ZLw88M]zE){}NwJWknYIfĘpxϫ_of 3U{w/,䙻N!Xښ&G\\p'8w*fK8!9EQ=[j&j#{ ?w"@Sj*[b&ϒ0Ts n"MI7<apOy\3H_)ӞtKZFpBZ3ؙ#Mrw9i(n%^>c\%gM՟Ơ 8qcAuа|9ݑ rʱ!u;k@ٹdClA@\ ;iJJax`fiK7NvXmKLlI41?@>#teZӘ^Cq.-mV$ 4%J]uҤs*Bn:Qj_C GBάPYIJ $Nl-V:_>noVMJ{/'%<%!`pa6EpE"GW{TJ64 !]|5#s.pxO aNKf 6%SU>J t[/Árþ6"%Ut+;[#3?^=HkTޝcH?)Am ak63jEz.}L CΔEC=Dq$t{Ax9d? <ü>_2&gw=SPG득"c|:)J*ı`?;>n NݓY8ICm|cB mw9(ѰsPSdqБxہI\.:/@TLae' G !~Ǹ@5U=q.pi>|n:Əbn:5/r,rÃ7K|kVDWɏpWX:r- 0g[IzE֜Wإ*kE)O(ᡆ~z1OY7KeKCsLG,k݋4jv^{ݞdF;%r))ႣK1V0 O.Հ_. SuNepQK'ʒG3=W5*5r iS 4n.&%tiRM;!BW# .I$f Xt0B 4^ d?4W#5HOˤ$qL )noy y"e/ d&sw4>8 q&1"ztCӡ@OkpX\袛_BM5!c ,t0ۂ.; ٝGG @xUǿwMfc+$%AM=v JiYo!/8CQ@n<b6EC<~3J e#BY/'{cb$S;=, ;"8 #]1N4RW֥Vk0B&~/;wF3l[aZpX,KRd:oHW?ԈuU2/C9.y<d 4̹EA@@UoR4LsmȢNjxL9,ZxMZ zR;#Ez@r;z I͙iT 3k]ͅZ(Rk )f/ow6f/ˇ1eQ,m0"剶̩C״lGIG#܍lg67hߋ2hd@Z,C{R%"3ӗ2?@'So^'~ӼrτOKUS jur;IWsD$)'bjN+ESm@!w~AaR!Ȯp[%1p3jȱcd)@.O.O!RLp٩0#Z @\2&U_ːbheqan0 TNjjYi;f dѩԳy#/dT 91S;iv|,l8mb pmp8*!bF gxeZ>yb( 8.L6[ 34usz9||˾M"KI: ' xpJxwM^E[NuH`K1;]nTxQ9]OVbZm^6<%D^&EpO'Ⰸjʹc$][5!v& etVa!E#'<^ ~I>> զLʱ~Oe[]}{[6$/^c ?s'.s8ґ}7æW>1MsyQD(7.Cj y;L`n:1 5$:I5@x޲@.'Ak`kDl0*8ulfOҴ=74a'!p';@U9cͧU7pac"Ǹ7FwQ+6{?4 x=S?L(ɄYgH@Uu,"^s:N/b^TnyW^׆l;&Ie>"[gBL=7wqafzLj-DIRI%R6~Z|LM`NJ3-H]-vKO[{6VM*qt;S剚|(f&|EeykމlK?yl&KI{f=ͅ62sG=} s@)`קث~>|;xצ $![}6U1v4L;:y8<*zɿ)!ɠi1`g iE51# kt/ 3qZ!X|? H֘y& _M"tWt/Ñb7щi.ǫV^ br&ج P\<'GbOǰ: -Igxw؍iqܾ3 -@ӂh(,2PU (Ә.5|2r0P! T'@zԷQt͌rHiPKHyeY1 =t)FK󜙢-~܎~6^10xp8sg_QkOTzKHRiǵtHb fj`հUDM{ĻM[g?і$l!u(GȻ ωB:=Z6nl >DL_"²I|PjwVu0O viXq%J?Gd璡17xN3c效X%^=95 M%oE{祀CL@*9 ]G $NCa Y[s MwIeoMt>]m4pHgJwk!"+yȆ 2>,27ÂIR]>0n`gG,4ծ$u6z i z> p9%P%Y^QH;{WIz\8UKvHdQ:˱b u/Pyd_)#oAyYBυym3 =|!?:gͷfd/^J?/[- ?8# ՗r&?oFL;F~4!tdqhM$MmeU f[(J7U`]=\bCY9C02ό逎{VS' {@ɋ6.t9 ~?y5# Tn064<$mI .-r6_sS~/TNUt _-Yq[IDzZ#\ %@&П2-LBF7pt#S~| `u 3QjҶgs6}c}!ci!EoT@7n#6-̼]iV2I-GsN3R .ӐصѽIzגQ!%V\^q Hc'MJY[S88U-+[b^"t 'I:;EwEta@[)p3ReFq l7 &d q:{6<{8D8++}&=:^E8kgU3fFTXSdŃ {/&<^BRMr8C,egΘ]2`ܘiq5J&|s&6MQ^ }6 E9E3>E l~^+ƒ:}1Z+VaȬhq{Ӆ!4ȰamֽH"pԼnynEj'n<'ԟdK(8p5k9)󍱅qw[{iAL0v$#L3Ewk;(l(z#ޟ7m NU!iIR)$H@%%_Fi@4OKodgFDD ÇM[LWbNgޥ }rj>CU9k e=:e)×Щ>l{̹u )"zB1e ,//`)ǜSVrJU1*In>;I7ڌl=[ԲP*S \jyیҺV_B0 rk:Ay;aRVp Nd=B]Do  )e./@X%&>>(),zh2΁T|ʊQu͋tIU{pkay?0.8&Py1'L,/6ޠjvSu2֥s#-5sΡx(jHI]{kpJHxy}ߕ]ڽQ->)ȬV1f.rFbwew1v+nͱ5U>.VISFWS``Pn#_'7%ɢ]p>yl8'HӨp&UHu5-%GYh˳|\+vBveo7 Cci-u<榣7!6[۵r4{wV8~is ߜaGщε-9 v#E:0esO(>6ta(r{c!xԵa[6z㠆 V.N+z*lə~tr:N| +'K09v{r鮴6([ޱm/3^Ԃz@IU}O. ɍY߹vm1{'յn!cku7S 1Tv@洍q_a*6i!G;3 3զ;3IWq|@H=,?pR iJZ"70saLc1wct( ?us5VψR!яlffF%pV"pTV/o`Q+h^yG1rze_3o3AYnlcsvN mZ7Ц " !Y1pF3|uphkQr{RcҤ(̓>cOqdIF3 tT+>" dkCP@rbm ;`7Tc4@DI{zUUCӂH(5p%w1Q;L=-h=E$eamV[w.Mdv&õǜ2T4tI9$ԑ:²@Z^Ot=Fơa2EKD_pA &)ډEQH]v}?>loOb7e[5>D&%{5,sXSh $'sFN_XIgk#6;~GȲ%qiw!Y'cL23HApmptDK–-eV&Cmyv;' 0(WQWm9Rv0H!fY-% E1֩ Q^F@Zxudyv`֒kQPDzyX4>ISip&'M#-X Ck0hpd<,c>CvX2xxA}: Rֈr?*[/Y AkT z!ã@cioV[\K; }mxGuo /Ķ8e^ˑ\"1G9<^Zvp2O9|&Hh4| a'>xY; d擕'k](6\jۭRٵXsBo;-$E!H{EhW 1)mL7T;8QbX7)zh2u=.;PSi:?2)4 4g6K55RV*|UЅt2λsv߮}!z,偔岈9NFuNc#qI.a.&NҬ-g+w(i S$]$$(+2AN:@Fx-Cy3ŘT:0vxuvBA9'fA :pybfRߦmKXpK wS v[$>G]8YV@,V¥6}XȋHc^qGj \$|u޼-|\Xb@G/V07K`Oʙ9V2lKg6x( K8h_Hd̲8[> BiE'^(yݙ= I!s#3pdhϽ:o UjE#s)ү$h@o!~; ,. )ׁawܕ> p+o6ke _&C!R^AG :>[(O"HC0}}2ɟk ay=Q3)%Zl1ZG}cE$/4{MGEEmt $`Eg(QNR"WKkHf4xW)NE戓o;vq7#/r`nWYph^ŕNrڡ~ɽP/ja8kb=*_)Z!sѣv? E">]0A'j{xS[M-LY !͗^Zwa5JuP?N]`Cp8t׬DžY4 I?ʋuӕ`N1.%0V (5*MV `y[En5"%=ϬY7\0|!عJ>^+ؑPaD͵V6hZp3،kPT.> ?9CzH+|`R ڙq'2Ah(M EV).ndޠ)N }0~YTiXRvvϋ//&[Ճ#WF|\9Rg``sGҹH&4gukڀhNKB1Eck|K[i:0Fɩ}<'_L|~|FsԯHdX5S\&%g+)“:Mx8|SWk40x@s@) Y<9TSu0 JD vuT&N_7ѵl>c3rW(WpqF34"nPQbf%Ŋ_3E|ot[nك_x!NR]nkD82.VM~qOso*܄ʤ5^ /H}a%(:MKr c*Ę\6=ˎGݳ1I8=q Tx v*"w n 2-)hNS_P{ωCpJ"&YXB2nX |AYf Rtwl<w'E 7gH^zC3gIWO'@kcA1׮a"Ғ5-%:S*[p kv46%՚;;қubͰ(UՃW-T#7kb1 7MKgcvlA'5Qjw ~5^p6Z ):?MM_.&ﻊj'Ě~G[GU< z;WK-_'))qgʄ8NnG/*d8C\j"*H)uy(M*޲(XɈFp2TQ&V.Cy @/mdzPr@^@|[ՁQ (r A*ye;E~Yg,x.4W[f`\5z)7 t,Nrx&^w}GٟZT}{!tgw2QQ|@H"恷2]'&y35f_Qi3%~&*,^߇ɱ&:Qy ܂ukO~orn#CfR:r1U@p~#+ϑ` pW/I9}TF7w&|"r{dJx8 2~[Vlr_ÅCA L}SFS>P0pG.k +k0@;e~YS4MWVh,@v6،~ɵqꢹ-{ H޸9a ~Gȁ@R݇z_@:*ͅSa=|]\}u ) 63ygpBrɵ9=cTq~UQy&1km\ Dv w wYAǰhkz==@M+'%%Rf彺ڊ>\="rAq%=f&i{-Lſ4KP~{U31p)Z֝S4fe iXOp{ c >O$Pz1N4AT G o2>2-&ԟ5u"EMxj1y,4k/NG2.J/]WފB@^{ gz.ܱ'ڦl 6\~s~WH'xa!gEgMӻSay vN=WF14*nZ4pEV$7b8ƪwltsrF $?b-yt*Z2F]bἀ!ڪ$684O!^mI?!ՄCyhB=AF{tip!s)K?@>mcAڕ@xc|E{lXc.ND 2*UØd2$Zh7w$-Z=~?))5p2#VIMO|N\8"p 8_dJ̞q.^#pkfRͥsヌP$2u naf<7YX6IiiEZe CIrV F}tQ/( |=OArFXUY"Qls}[ذNa<3u/ns)0[ayZUMqޞJ:F֭SJ`Ըm5`!XO4ľi?qFV<%E:O ;͡W!vnٚARI<JISQ|fTx֟ %ZgC.X#JO&tX/`$U/ܼٻbW㝄%kKxr_chvj2X"9NSw(p|Z-5V+R|m!d'Ixi]4h /5ퟤ./H ؃Cm9%)<2H<g} Z enձ.]["\${Į\HN{=-(88 E%]4+`JbPf]H;W&`c̔(rBrpKk:}Bk-j#n7&׈ x})(4S8peOa[rĪ0UPDwsD{u4omXӨ0{C#IƁragNS?grT; \ &x*\\wW)^&& 6V@@OrZ_ 4# ξIR}&\19`n=f/?4ffFd9CA_omMlrX_Rýy[9Kv&w"3_'ZÌ !AVVZlC WMwr_%a=_X2h1a _JqPKEihu疟\#\K)[]`Uf:?:H?{cQ|J_pѽgIjŎ* "~\V],.`57XݴpviǢWJ)jp^TBf#8ǢUL[q~II2C*Z(/; q.Wj{#mSy|=9r?_T~b]+vq\3ij♸Qx챁*b s:/RTO{0=*~؏`:mYQd_lShC|lv5fme﵋<$d2G zp1v ~|+sNy-e:V&;J?WWq>wa[#$I)|󄃏+MIaޑ){^mxa$h!/Z5RA ]xb# n%RS{) 1\KOξLL)^R:Z)13EĽ7s[.UbY&>;OE4H WJX/mNC`x9`X *X.ai=1" M8:'LRabsH@T+~XWB| K\ 71m~$ЛJ įk"~ol+&-$d.ʥXe&^A.ih:̢}H׿`C ĢT=("xa{tP3P _ǩQ|M:gE_h.ԔXq[#Mx,AuI?dTyoDͮx  ԐF`8=N'cbor% N׆H}#m|Q\ E7tH^hGd_$\Ao22ZE[ ?4D|]3*02bf2[y'^?׳SH,>`O?'T!FdA 2#I~q?77 1$yI^90v=ɁQX28.ߑa`a[U v5AQȃ9<.;¥~+Qr׼3_,m5ٖ;-DuI@.a!&|`bMi aCc9VSH}@cD׷l)ҵn'ĤKXI2 -GP㘿 \8FY~h[$[E9x&H-' $*˓U/~ٸ' yZmU  tª2(}L;xJ~Y&3~'.UŤؚbM]'6'jX3 ߷`Vsk뙛ϵ*E?ك,guf}178p4W0p01R2B,r$l? jZVuy7cOՇjY+yT`~妳_o (0F0',vbgLI]ޗ@ &+Y}VX/aIو#9"t/3y ʑڴ%Tͬd@[%ԀNylDуڛY{4kwֹv3eŹ=*RܻF =0.$B}xXw" *|I)#wl'f u_p7RA%jJq2(h\g7uk(͈bpڕɴoCFEh-z'XyWMe4lĐ)ݦ5m pvIwK:#Hz;(g+ n%0Smo _zI6SxY)zӹ s2⳸/fdQ -P G]QD:ܠ BQ :pf-`; KwP> ^RժQ s m/!x2Hi&9Q|(ymhqbkdaPHYlq;*fTuRзH/Tւyuhʚ/ew-y,$W@:Mn3wܑR.;n\z e:Z#kUDN+>t75/i'_}7D W~ycOd&DnjA:R^,Υ/I .Ygbfd$aa@U~.Wiί` C*dnֳ-UIz 6ٝwZ<Æeq+ &ӚGײs^5 Ep1'Ɲ'6x= KpyЂTte;۲Fɒ:HB_8,#+]7J@Uq+-gzrͧ[M(nׅ HfDF6ߧvL1@mM hsY:+ txJ禮.+yDD, ~=E87waUذn#)zS6C5G&̓pǛ҅O kd}9LHiAhC6rXTL`R*g>q)v+]k5~MXh ?riOdNq"u8E@E!eD7j2BVo~dVJ3~o`FKw3ce?fuyuy`JGΕX_jYl+3It%E1 YiUi6N~b!*'=q{VZjĝUfv^D6Eatis"4 ,~V#|HlΚ7n-fv[pNj̋^c"){  F\;BmNZT7ZaUOFdJ,S 66Dm,h62xT|mщO5cقybS8\x93=!{c؊%GV1ۯAAf6s׃L1Ba$j N'wԘc"P>0 YZTSP/data/USCA50.rda0000644000176200001440000000627312606077054013240 0ustar liggesusersBZh91AY&SYnI UUU_uUUTtEUDUUU` Uh๾{vnzsT|DIS4cM&52mS@'zh&@jiF# @hhh 404i2z6L~  MhhF A?E1L&SO@MM1?Pɦh d 4&ОITP=OP2!P52ixMM46QQ=LPPh M4i3JzL?I<Ч4ا4=OQyM  4F@2V{L521;No*TΕL#dju_2ڕ6؞l

o'sX@gDְA@ qD/þuAq%.meC%TlY# E v[3Pؽo &3wF8mLΉ ⅉ"DFR1>aw(Şl~ ln1 'es3S`WL;e}[gOI1ޘh@1 9b# C[y C*; ,5s_3GխM.[ԒPR d2 о6"*QJqfdz։Ɔ 1gz B+3VMM'D(@#bV0@vBg(4 ,H(`CѸ啪u0Ĕ(\0=A  @u{ -|յv#E[ Y|^U*'9kP HS $OBy#V&`d[n e*aIC&:ݧUuDV6 N EMS ޒ$Ml3xo7J$87mLKQu* `KʮJ&Be-k#3J2tf C!vDRd̋ A&*8XE;&F2BOIO-hZ䨤J Jp&B<Β}m xPhTh*r$o)[{Y-h@ܘej+tzN#4$LR:֮ [ 2 G>L oFڵk`n2"+D⸞Fz`k˿cP]}Mss,I%/R;հRhDX0I h!f  6Aǿog{F=vuM W<ʶ;)zxK_@!\Kzt2kLbTŖ{ D++M1G 9a>Lwvvt8kq!IbϬK  P.lG!YIsT=y56ȬQ,q#rjWj&Ee[UZ?_,XOo"f^,jQwj(\*dݒnҘ ",3Zw`"1Z>\{zs.]h+Lx*тh[kInMX\rZdYv{e D8Dҹ͂ʇzA۝]`8ų ͨ:6E3< .feDFFhvYhlrE8PnITSP/data/USCA312_GPS.rda0000644000176200001440000001562113623555010014020 0ustar liggesusers[U QADQ^nzK'wNWwNJB8*#.:}}ܝQ\Fe~羗T_}SU{9W!oܒE#8FƯE#Q#hTQ1~Fܣ, ø|WM<и0kx~-\o7LbE_,4s9;sO;yebo}7qpeo/ޏG?CWݧpn|zx[o2ҿ&ǧzÇΥoI?2GjV_pOqe'r]Wa}Lwl~w\󥳟NCuЎ~"?qos}xte2X獛%\. ɔd9дy|7~~`M|>W򶃎8mkjqXk]}+MNi~ɣ_sM񍭒h|N֫oe9|7rԇ'M=yvyF9N{H%2:cPցZY'ڿXC:Lp:ߖ۟ S Bew\"t!ƯHGo-bC_~Mʺ4S[\uU-gha<& PTHr_+s%bcg1O;y\WSr]5Dޑ~.6 G&re.ߖ~!J<^[ң\y4O75py] Uu:WkYcj1Ncx^̻´έ̵^[\'ty^0BWXUwWz՚?3B2E/0_=" ޳E( 8sI?ynzlQ$|>^}[4YěEݘƪTѯ0;H#?EL'; Ǽ s|/|cYr}S>mDg|m̗^" +, {]~?Q^( %ݢ3}j'[ٖ\X\ēyfnW35BX ϙuy/ϼ_ J}|+39gA'3WU tyv g+Oln1%uy>p*3]ٛ7CCScr@yݢd?%ϡڮyOzsd| ]c^gm T4e+o+[{>6QW[I{~Znfugag1*),c~뙻X'{Z-[!<43ϽBRiNxżQ P_=zW 7:\n1Bow{+> [$d\M׋z eC$<d\=H?Px$AO=$˵/d;*};a?k(̽E5zv0.y;i.:x]K~3Jѧ1W.&9yv:ʣW;Dcެע^ǘI ?U{P?^;^'lD/Pso[G>}[3T'cU sQzdeK(,71 o1fgi0r2}},#Yw23Tf_ԗ~,_]_Ai<|N=TXC5̻cw6ɤwPA@I2|kemDzK=<,'U5[oYU_$/=kE|6R!dD_D #S$_:+#uBB2#Q+1ϣ [L_N?Kc׷vq!~K'ލR=ȟ)8M?Ϡq~f(yՙ-Xü9+vJᾁ{veڿTOeQjZʅ]%m#ʩ'GF 00gb){ɢJ`0Й$`27/k`?` 08i!tP0p`p0 :B`R x/@%@ P @@  Ā&hZ6TKe@@1z'@R'4r`X +U)oS5iZwY:`=p6pp.88  = p3  #pp'pgn^O}C#_<<l^^^^^^ l    O K`+@_~~l~v;:oԀݒw΀;࿃tc;w;w';w;}4;Gw;qR߆ԖkIb8m凫SOj)mSiʙ]lJ\N558YߜT’=9u֝I $1+/ܮ>ԓI6f+Oڃǹj ƔevLg]eL'帝XH'jk2e`ɨ3I;=zĺ6ۓM`YnAOf]V{53ݭkI [V01:on+)gҪkw9ԜSzm /sl3Rۤ*PCݪzjLgUՒڠmen]\85y=ia [ϓ}ˏ-<1DZzaХJnCOciqIE1@sࠔ=n) u[)m]6WTHF^!5wS `b4CgPvwBf23mfkbw6l-D\=j_mV3L#r GRMgH׻jwTtRͿ܃z=0IM?%k,j{4ĺ,Z9 R_d2j0z0%2OBRF1+W{ ۼ0V֌'PWxT\OԌnOG8c$5]3oL4XS0پN 6 9[6m c" ϦiuKj2Zf`EuB ≙NO^-fu%^-\3m jig4{֌iTx dc.jօYQ lxl/XL! VfTԬӓTuȘ%g.3ZER_TC/T;5𱾔NA6uVuJ|YʬPbjM*|T:'ٗ1M޴6U*gHδZWMJUKIeXWA쮭ZfqK`N 63pN wl:OY d JjWʀJq-ʛ֖rX(o=pl@H5sI6tc7y9*fJ{)DF0hHXs YjMdvVI[]MeUjJ/ͪU vf{ckX 5V7JQe%}n$6[iUT&*+S]Rl1Z 5+Ċ͔iϬ\VGܳw*_b$R=Z%FZ%KCKU]TԕaψPM2CCKkNv cHUjHFFs1eȭ*Jj:Vm3j:C[.1l)UA!UuDy^ժۋ}E-.ZmE:Z=AlZOWZG#IbZ]!2KMJj CڥZ#tziVY=Lp&r)N1FaQiB]v" tU:$Tzڸ:KGלUj^8괾 %L'I:%KyP0U֡,nNܗW14ڭZR[bY!Xpǚa5uWc ՇhN̥*J{'_ 8fP fZ~)'k|*؀yn۱0{m e lb|Uro%z& m$qoQS1A핝 ="7їB=(nSI8,>b]}}Ƞڕ [Ɨ9QtPEފ.d yT#5äj5JU.c/`w1]_М`R [{QDQ_ΧeE\*aUZsWAM&.2c+IP7iQ2֮f: ZdbB=><]UꃦK*3-%IFXߢQIH%հ4&5|T/DϒgiH`쵿$#dž4  ]Ŗ lz5{Cg hQ[-[Xj4liRt8=j&MAs%lmLަf C5Ĭ{6sA5 D۲SF< "V0 -V`)5n/̔j"v7^]Ǔя6Ct?J}R 6n*搝cfWX37Ll2vYdӽj|>N ÷>d4'n?3IY52,ڣxF5qxb;D*'NcGRa4;MC$Ź2]•&9-8@7+`+5WA &A\Յ4G?d FR"Ps/_mKl}gԾ=6lo_?lq7ۅ  iNKƒ.:+eƒR Daa 9$tZ7 ٻj :>XV̫D±b2Z]iJ#)YbMyAA1zf{cNPLCO†ŏʹfpqQ q%L$B}{Y.dj?0FVlU-(mlL%2Fwmq[7^1j$E80v7d:K|0 j=a VC3v^-= "eT*`p_8S]iþ*)k=3>mVNڭcE6dne7wkFVlYʂp@o?M(7*v C~2e;w(EPߡ C~2Eߡ C~R4EaJ>Pߡ C~2e;w(ޡ (IpH9뿥t"e)#sQI#Փ}dRt=F(R3ݦuMi zӳ{gtvIGLTSP/man/0000755000176200001440000000000013623553701011500 5ustar liggesusersTSP/man/insert_dummy.Rd0000644000176200001440000000560013612366100014500 0ustar liggesusers\name{insert_dummy} \alias{insert_dummy} \title{Insert dummy cities into a distance matrix} \description{ Inserts dummy cities into objects of class \code{TSP} or \code{ATSP}. A dummy city has the same, constant distance (0) to all other cities and is infinitely far from other dummy cities. A dummy city can be used to transform a shortest Hamiltonian path problem (i.e., finding an optimal linear order) into a shortest Hamiltonian cycle problem which can be solved by a TSP solvers (Garfinkel 1985). Several dummy cities can be used together with a TSP solvers to perform rearrangement clustering (Climer and Zhang 2006). } \usage{ insert_dummy(x, n = 1, const = 0, inf = Inf, label = "dummy") } \arguments{ \item{x}{an object of class \code{TSP} or \code{ATSP}.} \item{n}{number of dummy cities.} \item{const}{distance of the dummy cities to all other cities.} \item{inf}{distance between dummy cities.} \item{label}{ labels for the dummy cities. If only one label is given, it is reused for all dummy cities.} } \details{ The dummy cities are inserted after the other cities in \code{x}. A \code{const} of 0 is guaranteed to work if the TSP finds the optimal solution. For heuristics returning suboptimal solutions, a higher \code{const} (e.g., \code{2 * max\{x\}}) might provide better results. } \seealso{ \code{\link{TSP}}, \code{\link{ATSP}} } \author{Michael Hahsler} \references{ Sharlee Climer, Weixiong Zhang (2006): Rearrangement Clustering: Pitfalls, Remedies, and Applications, \emph{Journal of Machine Learning Research} \bold{7}(Jun), pp. 919--943. R.S. Garfinkel (1985): Motivation and modelling (chapter 2). In: E. L. Lawler, J. K. Lenstra, A.H.G. Rinnooy Kan, D. B. Shmoys (eds.) The traveling salesman problem - A guided tour of combinatorial optimization, Wiley \& Sons. } \examples{ ## Example 1: Find a short Hamiltonian path set.seed(1000) x <- data.frame(x = runif(20), y = runif(20), row.names = LETTERS[1:20]) tsp <- TSP(dist(x)) ## add a dummy city to cut the tour into a path tsp <- insert_dummy(tsp, label = "cut") tour <- solve_TSP(tsp) tour plot(x) lines(x[cut_tour(tour, cut = "cut"),]) ## Example 2: Rearrangement clustering of the iris dataset set.seed(1000) data("iris") tsp <- TSP(dist(iris[-5])) ## insert 2 dummy cities to creates 2 clusters tsp_dummy <- insert_dummy(tsp, n = 3, label = "boundary") ## get a solution for the TSP tour <- solve_TSP(tsp_dummy) ## plot the reordered distance matrix with the dummy cities as lines separating ## the clusters image(tsp_dummy, tour) abline(h = which(labels(tour)=="boundary"), col = "red") abline(v = which(labels(tour)=="boundary"), col = "red") ## plot the original data with paths connecting the points in each cluster plot(iris[,c(2,3)], col = iris[,5]) paths <- cut_tour(tour, cut = "boundary") for(p in paths) lines(iris[p, c(2,3)]) ## Note: The clustering is not perfect! } \keyword{manip} TSP/man/reformulate_ATSP_as_TSP.Rd0000644000176200001440000000464112606077054016363 0ustar liggesusers\name{reformulate_ATSP_as_TSP} \alias{reformulate_ATSP_as_TSP} \title{Reformulate a ATSP as a symmetric TSP} \description{ A ATSP can be formulated as a symmetric TSP by doubling the number of cities (Jonker and Volgenant 1983). The solution of the TSP also represents the solution of the original ATSP. } \usage{ reformulate_ATSP_as_TSP(x, infeasible = Inf, cheap = -Inf) } \arguments{ \item{x}{an ATSP.} \item{infeasible}{value for infeasible connections.} \item{cheap}{value for distance between a city and its corresponding dummy city.} } \details{ To reformulate the ATSP as a TSP, for each city a dummy city (e.g, for 'New York' a dummy city 'New York*') is added. Between each city and its corresponding dummy city a negative or very small distance with value \code{cheap} is used. This makes sure that each cities always occurs in the solution together with its dummy city. The original distances are used between the cities and the dummy cities, where each city is responsible for the distance going to the city and the dummy city is responsible for the distance coming from the city. The distances between all cities and the distances between all dummy cities are set to \code{infeasible}, a very large value which makes the infeasible. %The result is a distance matrix for the TSP of the following form: % %\eqn{\begin{pmatrix}\infty & D'^T \\ D' & \infty \end{pmatrix},}{} % %where \eqn{D'} is the original distance matrix with %the diagonal replaced by the value for the \code{cheap_link}. } \value{ a TSP object. } \references{ Jonker, R. and Volgenant, T. (1983): Transforming asymmetric into symmetric traveling salesman problems, \emph{Operations Research Letters, 2, 161--163.} } \seealso{ \code{\link{ATSP}}, \code{\link{TSP}}. } \author{Michael Hahsler} \examples{ data("USCA50") ## set the distances towards Austin to zero which makes it a ATSP austin <- which(labels(USCA50) == "Austin, TX") atsp <- as.ATSP(USCA50) atsp[, austin] <- 0 ## reformulate as a TSP tsp <- reformulate_ATSP_as_TSP(atsp) labels(tsp) ## create tour (now you could use Concorde or LK) tour_atsp <- solve_TSP(tsp, method="nn") head(labels(tour_atsp), n = 10) tour_atsp ## Note that the tour has a lenght of -Inf since the reformulation created ## some -Inf distances ## filter out the dummy cities (we specify tsp so the tour lenght is ## recalculated) tour <- TOUR(tour_atsp[tour_atsp <= n_of_cities(atsp)], tsp = atsp) tour } \keyword{optimize} TSP/man/ETSP.Rd0000644000176200001440000000413012606077054012542 0ustar liggesusers\name{ETSP} \alias{ETSP} \alias{as.ETSP} \alias{as.ETSP.matrix} \alias{as.ETSP.data.frame} \alias{n_of_cities.ETSP} \alias{print.ETSP} \alias{labels.ETSP} \alias{image.ETSP} \alias{plot.ETSP} \title{Class ETSP -- Euclidean traveling salesperson problem} \description{ Constructor to create an instance of a Euclidean traveling salesperson problem (TSP) represented by city coordinates and some auxiliary methods. } \usage{ ## constructor ETSP(x, labels = NULL) ## coercion as.ETSP(x) ## methods \method{n_of_cities}{ETSP}(x) \method{image}{ETSP}(x, order, col = gray.colors(64), \ldots) \method{plot}{ETSP}(x, y = NULL, tour = NULL, tour_lty = 2, tour_col = 1, \ldots) \method{labels}{ETSP}(object, \ldots) \method{print}{ETSP}(x, \ldots) } \arguments{ \item{x, object}{ an object (data.frame or matrix) to be converted into a \code{ETSP} or, for the methods, an object of class \code{ETSP}.} \item{labels}{optional city labels. If not given, labels are taken from \code{x}.} \item{col}{ color scheme for image. } \item{order}{ order of cities for the image as an integer vector or an object of class \code{TOUR}.} \item{tour, y}{ a tour to be visualized.} \item{tour_lty, tour_col}{ line type and color for tour. } \item{\ldots}{ further arguments are passed on.} } \details{ Objects of class \code{ETSP} are internally represented as a \code{matrix} objects (use \code{as.matrix()} to get the \code{matrix} object). } \value{ \code{ETSP()} returns \code{x} as an object of class \code{ETSP}. \code{n_of_cities()} returns the number of cities in \code{x}. \code{labels()} returns a vector with the names of the cities in \code{x}. } \seealso{ \code{\link{TOUR}}, \code{\link{insert_dummy}}, \code{\link{tour_length}}, \code{\link{solve_TSP}}. } \author{Michael Hahsler} \examples{ x <- data.frame(x = runif(20), y = runif(20), row.names = LETTERS[1:20]) ## create a TSP etsp <- ETSP(x) etsp ## use some methods n_of_cities(etsp) labels(etsp) ## plot ETSP and solution tour <- solve_TSP(etsp) tour plot(etsp, tour, tour_col = "red") } \keyword{classes}% at least one, from doc/KEYWORDS TSP/man/Concorde.Rd0000644000176200001440000000701713612366100013521 0ustar liggesusers\name{Concorde} \alias{Concorde} \alias{concorde} \alias{concorde_path} \alias{concorde_help} \alias{linkern_help} \title{Using the Concorde TSP Solver} \description{ The Concorde TSP Solver package contains several solvers. Currently, interfaces to the Concorde solver (Applegate et al. 2001), one of the most advanced and fastest TSP solvers using branch-and-cut, and the Chained Lin-Kernighan (Applegate et al. 2003) implementation are provided in \pkg{TSP}. Concorde can solve TSPs and ETSPs directly. ATSPs are reformulated as larger TSP's and then solved. The Concorde TSP Solver package is freely available for academic research and has to be obtained separately from the Concorde web site (see details). } \usage{ ## set path for executables concorde_path(path) ## obtain a list of command line options for the solvers concorde_help() linkern_help() } \arguments{ \item{path}{ a character string with the path to the directory where the executables are installed. } } \details{ The code of the Concorde TSP package is not included in this package and has to be obtained separately from the Concorde web site (see references). Either download the precompiled executables and place them in a suitable directory and make them executable, or you can get the source code and compile it on your own. \pkg{TSP} needs to know where the executables are. There are two options: (1) use \code{concorde_path()} to set the path to the directory containing the executables for concorde and linkern, or (2) make sure that the executables are in the search path stored in the \code{PATH} environment variable (see \code{link{Sys.setenv}}). \code{\link{solve_TSP}} uses \code{\link{write_TSPLIB}} to write the TSP for Concorde and tries to find the appropriate \code{precision} value (digits after the decimal point) to convert the provided distances into the needed integer value range. The \code{precision} value can also be specified in \code{control} in \code{\link{solve_TSP}} with method Concorde. Warning messages will alert the user if the conversion to integer values results into rounding errors that are worse then what is specified in the \code{precision} control parameter. To get a list of all available command line options which can be used via the \code{clo} option for \code{solve_TSP} use \code{concorde_help()} and \code{linkern_help()}. Several options (\option{-x}, \option{-o}, \option{-N}, \option{-Q}) are not available via \code{solve_TSP} since they are used by the interface. } \seealso{ \code{\link{solve_TSP}}, \code{\link{write_TSPLIB}} } \author{Michael Hahsler} \references{ Concorde home page, \url{http://www.math.uwaterloo.ca/tsp/concorde/} Concorde download page, \url{http://www.math.uwaterloo.ca/tsp/concorde/downloads/downloads.htm} David Appletgate, Robert Bixby, Vasek Chvatal, William Cook (2001): TSP cuts which do not conform to the template paradigm, Computational Combinatorial Optimization, M. Junger and D. Naddef (editors), Springer-Verlag. David Applegate and William Cook and Andre Rohe (2003): Chained Lin-Kernighan for Large Traveling Salesman Problems, \emph{INFORMS Journal on Computing}, \bold{15}, 82--92. } \examples{ \dontrun{ ## see if Concorde is correctly installed concorde_path() ## set path to the Concorde executible if it is not in the search PATH ## Example: ## concorde_path("~/concorde/") concorde_help() data("USCA312") ## run concorde only with fast cuts (-V) solve_TSP(USCA312, method = "concorde", control = list(clo = "-V")) } } \keyword{documentation}% at least one, from doc/KEYWORDS TSP/man/TSP.Rd0000644000176200001440000000362213373425054012441 0ustar liggesusers\name{TSP} \alias{TSP} \alias{as.TSP} \alias{as.TSP.matrix} \alias{as.TSP.dist} \alias{n_of_cities} \alias{n_of_cities.TSP} \alias{print.TSP} \alias{labels.TSP} \alias{image.TSP} \title{Class TSP -- Symmetric traveling salesperson problem} \description{ Constructor to create an instance of a symmetric traveling salesperson problem (TSP) and some auxiliary methods. } \usage{ ## constructor TSP(x, labels = NULL, method = NULL) ## coercion as.TSP(x) ## methods \method{n_of_cities}{TSP}(x) \method{image}{TSP}(x, order, col = gray.colors(64), \ldots) \method{labels}{TSP}(object, \ldots) \method{print}{TSP}(x, \ldots) } \arguments{ \item{x, object}{ an object (currently \code{dist} or a symmetric matrix) to be converted into a \code{TSP} or, for the methods, an object of class \code{TSP}.} \item{labels}{optional city labels. If not given, labels are taken from \code{x}.} \item{method}{optional name of the distance metric. If \code{x} is a \code{dist} object, then the method is taken from that object. } \item{col}{ color scheme for image. } \item{order}{ order of cities for the image as an integer vector or an object of class \code{TOUR}.} \item{\ldots}{ further arguments are passed on.} } \details{ Objects of class \code{TSP} are internally represented as \code{dist} objects (use \code{as.dist()} to get the \code{dist} object). } \value{ \code{TSP()} returns \code{x} as an object of class \code{TSP}. \code{n_of_cities()} returns the number of cities in \code{x}. \code{labels()} returns a vector with the names of the cities in \code{x}. } \seealso{ \code{\link{TOUR}}, \code{\link{insert_dummy}}, \code{\link{tour_length}}, \code{\link{solve_TSP}}. } \author{Michael Hahsler} \examples{ data("iris") d <- dist(iris[-5]) ## create a TSP tsp <- TSP(d) tsp ## use some methods n_of_cities(tsp) labels(tsp) image(tsp) } \keyword{classes}% at least one, from doc/KEYWORDS TSP/man/USCA312.Rd0000644000176200001440000000375313623555177012771 0ustar liggesusers\name{USCA} \alias{USCA312} \alias{USCA312_GPS} \alias{USCA50} \docType{data} \title{USCA312/USCA50 -- 312/50 cities in the US and Canada} \description{ The \code{USCA312} dataset contains the distances between 312 cities in the US and Canada as an object of class \code{TSP}. \code{USCA50} is a subset of \code{USCA312} containing only the first 50 cities. The \code{USCA312_GPS} dataset contains the location (long/lat) of the 312 cities. } \usage{ data("USCA312") data("USCA312_GPS") data("USCA50") } \format{ \code{USCA312} and \code{USCA50} are objects of class \code{TSP}. \code{USCA312_GPS} is a data.frame with city name, long and lat. } \note{ We want to thank Roger Bivand for his help with plotting the map. } \source{ John Burkardt, CITIES -- City Distance Datasets, Florida State University, Department of Scientific Computing } \author{Michael Hahsler} \examples{ data("USCA312") ## calculate a tour tour <- solve_TSP(USCA312) tour data("USCA312_GPS") head(USCA312_GPS) # The following examples requite the suggested package sp, maps, and maptools. # We run the example only if the packages are installed. if(require(sp) && require(maps) && require(maptools)) { library("sp") library("maps") library("maptools") data("USCA312_GPS") # create spatial coordinates and a basemap using WGS84 projection. USCA312_coords <- SpatialPointsDataFrame(cbind(USCA312_GPS$long, USCA312_GPS$lat), proj4string=CRS("+proj=longlat +datum=WGS84"), data = USCA312_GPS) USCA312_basemap <- map2SpatialLines(map("world", xlim=c(-166,-47), ylim=c(15,83), plot=FALSE), proj4string=CRS("+proj=longlat +datum=WGS84")) ## plot map plot(as(USCA312_coords, "Spatial"), axes=TRUE) plot(USCA312_basemap, add=TRUE, col = "gray") ## plot tour and add cities tour_line <- SpatialLines(list(Lines(list( Line(USCA312_coords[c(tour, tour[1]),])), ID="1"))) plot(tour_line, add=TRUE, col = "red") points(USCA312_coords, pch=3, cex=0.4, col="black") } } \keyword{datasets} TSP/man/solve_TSP.Rd0000644000176200001440000002617213514032543013650 0ustar liggesusers\name{solve_TSP} \alias{solve_TSP} \alias{solve_TSP.TSP} \alias{solve_TSP.ATSP} \alias{solve_TSP.ETSP} \title{TSP solver interface} \description{ Common interface to all TSP solvers in this package. } \usage{ solve_TSP(x, method = NULL, control = NULL, ...) \S3method{solve_TSP}{TSP}(x, method = NULL, control = NULL, ...) \S3method{solve_TSP}{ETSP}(x, method = NULL, control = NULL, ...) \S3method{solve_TSP}{ATSP}(x, method = NULL, control = NULL, as_TSP = FALSE, ...) } \arguments{ \item{x}{ the TSP given as an object of class \code{TSP}, \code{ATSP} or \code{ETSP}.} \item{method}{ method to solve the TSP (default: arbitrary insertion algorithm with two_opt refinement. } \item{control}{ a list of arguments passed on to the TSP solver selected by \code{method}.} \item{as_TSP}{ should the ATSP reformulated as a TSP for the solver?} \item{...}{ additional arguments are added to \code{control}.} } \details{ Treatment of \code{NA}s and infinite values in \code{x}: \code{TSP} and \code{ATSP} contain distances and \code{NA}s are not allowed. \code{Inf} is allowed and can be used to model the missing edges in incomplete graphs (i.e., the distance between the two objects is infinite). Internally, \code{Inf} is replaced by a large value given by \eqn{max(x) + 2 range(x)}. Note that the solution might still place the two objects next to each other (e.g., if \code{x} contains several unconnected subgraphs) which results in a path length of \code{Inf}. All heuristics can be used with the control arguments \code{repetitions} (uses the best from that many repetitions with random starts) and \code{two_opt} (a logical indicating if two_opt refinement should be performed). If several repetitions are done (this includes method \code{"repetitive_nn"}) then \pkg{foreach} is used so they can be performed in parallel on multiple cores/machines. To enable parallel execution an appropriate parallel backend needs to be registered (e.g., load \pkg{doParallel} and register it with \code{registerDoParallel()}). \code{ETSP} are currently solved by first calculating a dissimilarity matrix (a \code{TSP}). Only concorde and linkern can solve the TSP directly on the \code{ETSP}. Some solvers (including Concorde) cannot directly solve \code{ATSP} directly. \code{ATSP} can be reformulated as larger \code{TSP} and solved this way. For convenience, \code{solve_TSP()} has an extra argument \code{as_TSP} which can be set to \code{TRUE} to automatically solve the \code{ATSP} reformulated as a \code{TSP} (see \code{\link{reformulate_ATSP_as_TSP}}). Currently the following methods are available: \describe{ \item{\code{"identity"}, \code{"random"}}{return a tour representing the order in the data (identity order) or a random order.} \item{\code{"nearest_insertion"}, \code{"farthest_insertion"}, \code{"cheapest_insertion"}, \code{"arbitrary_insertion"} }{ Nearest, farthest, cheapest and arbitrary insertion algorithms for a symmetric and asymmetric TSP (Rosenkrantz et al. 1977). The distances between cities are stored in a distance matrix \eqn{D} with elements \eqn{d(i,j)}. All insertion algorithms start with a tour consisting of an arbitrary city and choose in each step a city \eqn{k} not yet on the tour. This city is inserted into the existing tour between two consecutive cities \eqn{i} and \eqn{j}, such that \deqn{d(i,k) + d(k,j) - d(i,j)} is minimized. The algorithms stops when all cities are on the tour. The nearest insertion algorithm chooses city \eqn{k} in each step as the city which is \emph{nearest} to a city on the tour. For farthest insertion, the city \eqn{k} is chosen in each step as the city which is \emph{farthest} to any city on the tour. Cheapest insertion chooses the city \eqn{k} such that the cost of inserting the new city (i.e., the increase in the tour's length) is minimal. Arbitrary insertion chooses the city \eqn{k} randomly from all cities not yet on the tour. Nearest and cheapest insertion tries to build the tour using cities which fit well into the partial tour constructed so far. The idea behind behind farthest insertion is to link cities far away into the tour fist to establish an outline of the whole tour early. Additional control options: \describe{ \item{\code{start}}{index of the first city (default: random city).} } } \item{\code{"nn", "repetitive_nn"}}{ Nearest neighbor and repetitive nearest neighbor algorithms for symmetric and asymmetric TSPs (Rosenkrantz et al. 1977). The algorithm starts with a tour containing a random city. Then the algorithm always adds to the last city on the tour the nearest not yet visited city. The algorithm stops when all cities are on the tour. Repetitive nearest neighbor constructs a nearest neighbor tour for each city as the starting point and returns the shortest tour found. Additional control options: \describe{ \item{\code{start}}{ index of the first city (default: random city). } } } \item{\code{"two_opt"}}{Two edge exchange improvement procedure (Croes 1958). This is a tour refinement procedure which systematically exchanges two edges in the graph represented by the distance matrix till no improvements are possible. Exchanging two edges is equal to reversing part of the tour. The resulting tour is called \emph{2-optimal.} This method can be applied to tours created by other methods or used as its own method. In this case improvement starts with a random tour. Additional control options: \describe{ \item{\code{tour}}{ an existing tour which should be improved. If no tour is given, a random tour is used. } \item{\code{two_opt_repetitions}}{ number of times to try two_opt with a different initial random tour (default: 1). } } } \item{\code{"concorde"}}{Concorde algorithm (Applegate et al. 2001). Concorde is an advanced exact TSP solver for \emph{only symmetric} TSPs based on branch-and-cut. The program is not included in this package and has to be obtained and installed separately (see \code{\link{Concorde}}). Additional control options: \describe{ \item{\code{exe}}{ a character string containing the path to the executable (see \code{Concorde}).} \item{\code{clo}}{ a character string containing command line options for Concorde, e.g., \code{control = list(clo = "-B -v")}. See \code{concorde_help} on how to obtain a complete list of available command line options.} \item{\code{precision}}{ an integer which controls the number of decimal places used for the internal representation of distances in Concorde. The values given in \code{x} are multiplied by \eqn{10^{precision}} before being passed on to Concorde. Note that therefore the results produced by Concorde (especially lower and upper bounds) need to be divided by \eqn{10^{precision}} (i.e., the decimal point has to be shifted \code{precision} placed to the left). The interface to Concorde uses \code{write_TSPLIB} (see there for more information).} } } \item{\code{"linkern"}}{Concorde's Chained Lin-Kernighan heuristic (Applegate et al. 2003). The Lin-Kernighan (Lin and Kernighan 1973) heuristic uses variable \eqn{k} edge exchanges to improve an initial tour. The program is not included in this package and has to be obtained and installed separately (see \code{\link{Concorde}}). Additional control options: see Concorde above. } %\item{\code{"grasp"}}{ % Greedy Randomized Adaptive Search Procedure (L.S. Pitsoulis % and M.G.C. Resende 2001). % % GRASP is a metaheuristic for combinatorial optimization. It is % implemented as a multistart procedure, in which in each iteration a % random route is constructed (construction phase). To find an % optimum the route is improved by a local search algorithm % (implemented as k-opt neighborhood search). This is % repeatedly done until a stopping criterium is reached (i.e., a number of % iterations). % % Additional control options: % \describe{ % \item{\code{start}}{index of the first city (default: random % city).} % \item{\code{iterations}}{an integer containing the number of % iterations after the algorithm stops (default: 100 iterations).} % \item{\code{max_i}}{an integer representing the max. steps to find % a better solution in local search (default: 100 steps).} % \item{\code{k}}{an integer needed to change k edges of the tour in % local search (default: 3 cities).} % } % } } } \value{ An object of class \code{TOUR}. } \seealso{ \code{\link{TOUR}}, \code{\link{TSP}}, \code{\link{ATSP}}, \code{\link{write_TSPLIB}}, \code{\link{Concorde}}. } \author{Michael Hahsler} \references{ David Appletgate, Robert Bixby, Vasek Chvatal, William Cook (2001): TSP cuts which do not conform to the template paradigm, Computational Combinatorial Optimization, M. Junger and D. Naddef (editors), Springer. D. Applegate, W. Cook and A. Rohe (2003): Chained Lin-Kernighan for Large Traveling Salesman Problems. \emph{INFORMS Journal on Computing, 15(1):82--92.} G.A. Croes (1958): A method for solving traveling-salesman problems. \emph{Operations Research, 6(6):791--812.} S. Lin and B. Kernighan (1973): An effective heuristic algorithm for the traveling-salesman problem. \emph{Operations Research, 21(2): 498--516.} %L.S. Pitsoulis and M.G.C. Resende (2001): Greedy randomized adaptive search %procedures. In P.M. Pardalos and M.G.C. Resende, editors, Handbook of Applied %Optimization, pp. 168--181. D.J. Rosenkrantz, R. E. Stearns, and Philip M. Lewis II (1977): An analysis of several heuristics for the traveling salesman problem. \emph{SIAM Journal on Computing, 6(3):563--581.} } \examples{ ## solve a simple Euclidean TSP (using the default method) etsp <- ETSP(data.frame(x = runif(20), y = runif(20))) tour <- solve_TSP(etsp) tour tour_length(tour) plot(etsp, tour) ## compare methods data("USCA50") USCA50 methods <- c("identity", "random", "nearest_insertion", "cheapest_insertion", "farthest_insertion", "arbitrary_insertion", "nn", "repetitive_nn", "two_opt") ## calculate tours tours <- lapply(methods, FUN = function(m) solve_TSP(USCA50, method = m)) names(tours) <- methods ## use the external solver which has to be installed separately \dontrun{ tours$concorde <- solve_TSP(USCA50, method = "concorde") tours$linkern <- solve_TSP(USCA50, method = "linkern") } ## register a parallel backend to perform repetitions in parallel \dontrun{ library(doParallel) registerDoParallel() } ## add some tours using repetition and two_opt refinements tours$'nn+two_opt' <- solve_TSP(USCA50, method="nn", two_opt=TRUE) tours$'nn+rep_10' <- solve_TSP(USCA50, method="nn", rep=10) tours$'nn+two_opt+rep_10' <- solve_TSP(USCA50, method="nn", two_opt=TRUE, rep=10) tours$'arbitrary_insertion+two_opt' <- solve_TSP(USCA50) ## show first tour tours[[1]] ## compare tour lengths opt <- 14497 # obtained by Concorde tour_lengths <- c(sort(sapply(tours, tour_length), decreasing = TRUE), optimal = opt) dotchart(tour_lengths/opt*100-100, xlab = "percent excess over optimum") } \keyword{optimize}% at least one, from doc/KEYWORDS TSP/man/tour_length.Rd0000644000176200001440000000235512606077054014330 0ustar liggesusers\name{tour_length} \alias{tour_length} \alias{tour_length.TOUR} \alias{tour_length.TSP} \alias{tour_length.ATSP} \alias{tour_length.ETSP} \title{Calculate the length of a tour} \description{ Calculate the length of a tour given a TSP and an order. } \usage{ tour_length(x, ...) \method{tour_length}{TOUR}(x, tsp = NULL, \ldots) } \arguments{ \item{x}{an object of class \code{TOUR}.} \item{tsp}{a TSP object of class \code{TSP}, \code{ATSP} or \code{ETSP}.} \item{\ldots}{further arguments are currently unused.} } \details{ If no \code{tsp} is given, then the tour length stored in \code{x} as attribute \code{"tour_length"} is returned. If \code{tsp} is given then the tour length is recalculated. If a distance in the tour is infinite, the result is also infinite. If the tour contains positive and negative infinite distances then the method returns \code{NA}. } \seealso{ \code{\link{TOUR}}, \code{\link{TSP}}, \code{\link{ATSP}} and \code{\link{ETSP}}. } \author{Michael Hahsler} \examples{ data("USCA50") ## original order tour_length(solve_TSP(USCA50, method="identity")) ## length of a manually created (random) tour tour <- TOUR(sample(seq(n_of_cities(USCA50)))) tour tour_length(tour) tour_length(tour, USCA50) } \keyword{optimize} TSP/man/TOUR.Rd0000644000176200001440000000365412606077054012572 0ustar liggesusers\name{TOUR} \alias{TOUR} \alias{print.TOUR} \alias{as.TOUR} \alias{as.TOUR.integer} \title{Class TOUR -- Solution to a traveling salesperson problem} \description{ Class to store the solution of a TSP. Objects of this class are returned by TSP solvers in this package. Essentially, an object of class \code{TOUR} is a permutation vector containing the order of cities to visit. } \usage{ ## conctructor TOUR(x, method=NA, tsp=NULL) ## coercion as.TOUR(object) ## methods \method{print}{TOUR}(x, \ldots) } \arguments{ \item{x}{ an integer permutation vector or, for the methods an object of class \code{TOUR}}. \item{object}{ data (an integer vector) which can be coerced to \code{TOUR}.}. \item{method}{ character string; method used to create the tour.} \item{tsp}{ \code{TSP} object the tour applies to. If available then the tour will include the tour length. Also the labes of the cities will be available in the tour (otherwise the labels of \code{x} are used).} \item{\ldots}{ further arguments are passed on.} } \details{ Since an object of class \code{TOUR} is an integer vector, it can be subsetted as an ordinary vector or coerced to an integer vector using \code{as.integer()}. It also contains the names of the objects as labels. Additionally, \code{TOUR} has the following attributes: \code{"method"}, \code{"tour_length"}. For most functions, e.g., \code{tour_length} or \code{image}, the \code{TSP/ATSP} object used to find the tour is still needed, since the tour does not contain the distance information. } \seealso{ \code{\link{TSP}}, \code{\link{ATSP}}, \code{\link{tour_length}}, \code{\link{image}}. } \author{Michael Hahsler} \examples{ TOUR(1:10) ## calculate a tour data("USCA50") tour <- solve_TSP(USCA50) tour ## get permutation vector as.integer(tour) ## get tour length directly from tour attr(tour, "tour_length") ## show labels labels(tour) } \keyword{classes}% at least one, from doc/KEYWORDS TSP/man/ATSP.Rd0000644000176200001440000000406613373425054012545 0ustar liggesusers\name{ATSP} \alias{ATSP} \alias{as.ATSP} \alias{as.ATSP.dist} \alias{as.ATSP.matrix} \alias{n_of_cities.ATSP} \alias{print.ATSP} \alias{labels.ATSP} \alias{image.ATSP} \alias{as.matrix} \alias{as.matrix.ATSP} \title{Class ATSP -- Asymmetric traveling salesperson problem} \description{ Constructor to create an instance of the asymmetric traveling salesperson problem (ATSP) and some auxiliary methods. } \usage{ ## constructor ATSP(x, labels = NULL, method = NULL) ## coercion as.ATSP(x) ## methods \method{n_of_cities}{ATSP}(x) \method{image}{ATSP}(x, order, col = gray.colors(64), \ldots) \method{labels}{ATSP}(object, \ldots) \method{print}{ATSP}(x, \ldots) } \arguments{ \item{x, object}{ an object (a square matrix) to be converted into an \code{ATSP} or, for the methods, an object of class \code{ATSP}.} \item{labels}{optional city labels. If not given, labels are taken from \code{x}.} \item{method}{optional name of the distance metric.} \item{col}{ color scheme for image. } \item{order}{ order of cities as an integer vector or an object of class \code{TOUR}.} \item{\ldots}{ further arguments are passed on.} } \details{ Objects of class \code{ATSP} are internally represented by a matrix (use \code{as.matrix()} to get just the matrix). ATSPs can be transformed into (larger) symmetric TSPs using \code{reformulate_ATSP_as_TSP()}. } \value{ \code{ATSP()} returns \code{x} as an object of class \code{ATSP}. \code{n_of_cities()} returns the number of cities in \code{x}. \code{labels()} returns a vector with the names of the cities in \code{x}. } \seealso{ \code{\link{TOUR}}, \code{\link{insert_dummy}}, \code{\link{tour_length}}, \code{\link{reformulate_ATSP_as_TSP}}, \code{\link{solve_TSP}}. } \author{Michael Hahsler} \examples{ data <- matrix(runif(10^2), ncol = 10, dimnames = list(1:10, 1:10)) atsp <- ATSP(data) atsp ## use some methods n_of_cities(atsp) labels(atsp) ## calculate a tour tour <- solve_TSP(atsp, method = "nn") tour tour_length(tour) image(atsp, tour) } \keyword{classes}% at least one, from doc/KEYWORDS TSP/man/TSPLIB.Rd0000644000176200001440000000551213612366100012760 0ustar liggesusers\name{TSPLIB} \alias{TSPLIB} \alias{write_TSPLIB} \alias{write_TSPLIB.TSP} \alias{write_TSPLIB.ATSP} \alias{write_TSPLIB.ETSP} \alias{read_TSPLIB} \title{Read and write TSPLIB files} \description{ Reads and writes TSPLIB format files. TSPLIB files can be used by most TSP solvers. Sample instances for the TSP in TSPLIB format are available on the TSPLIB homepage (see references). } \usage{ write_TSPLIB(x, file, precision = 6, inf = NULL, neg_inf = NULL) read_TSPLIB(file, precision = 0) } \arguments{ \item{x}{ an object of class \code{TSP}, \code{ATSP} or \code{ETSP}. \code{NA}s are not allowed.} \item{file}{ file name or a \code{connection}. } \item{precision}{ controls the number of decimal places used to represent distances (see details). If \code{x} already is \code{integer}, this argument is ignored and \code{x} is used as is.} \item{inf}{ replacement value for \code{Inf} (TSPLIB format cannot handle \code{Inf}). If \code{inf} is \code{NULL}, a large value of \eqn{max(x) + 2 range(x)} (ignoring infinite entries) is used. } \item{neg_inf}{ replacement value for \code{-Inf}. If no value is specified, a small value of \eqn{min(x) - 2 range(x)} (ignoring infinite entries) is used. } } \details{ In the TSPLIB format distances are represented by integer values. Therefore, if \code{x} contains \code{double} values (which is normal in R) the values given in \code{x} are multiplied by \eqn{10^{precision}} before coercion to \code{integer}. Note that therefore all results produced by programs using the TSPLIB file as input need to be divided by \eqn{10^{precision}} (i.e., the decimal point has to be shifted \code{precision} placed to the left). Currently only the following \code{EDGE_WEIGHT_TYPE}s are implemented: \code{EXPLICIT}, \code{EUC_2D} and \code{EUC_3D}. } \value{ \code{read_TSPLIB} returns an object of class \code{TSP} or \code{ATSP}. } \author{Michael Hahsler} \references{TSPLIB home page, \url{http://comopt.ifi.uni-heidelberg.de/software/TSPLIB95/} } \examples{ ## Drilling problem from TSP drill <- read_TSPLIB(system.file("examples/d493.tsp", package = "TSP")) drill tour <- solve_TSP(drill, method = "nn", two_opt = TRUE) tour plot(drill, tour, cex=.6, col = "red", pch= 3, main = "TSPLIB: d493") ## Write and read data in TSPLIB format x <- data.frame(x=runif(5), y=runif(5)) ## create TSP, ATSP and ETSP (2D) tsp <- TSP(dist(x)) atsp <- ATSP(dist(x)) etsp <- ETSP(x[,1:2]) write_TSPLIB(tsp, file="example.tsp") #file.show("example.tsp") r <- read_TSPLIB("example.tsp") r write_TSPLIB(atsp, file="example.tsp") #file.show("example.tsp") r <- read_TSPLIB("example.tsp") r write_TSPLIB(etsp, file="example.tsp") #file.show("example.tsp") r <- read_TSPLIB("example.tsp") r ## clean up unlink("example.tsp") } \keyword{file}% at least one, from doc/KEYWORDS TSP/man/cut_tour.Rd0000644000176200001440000000222413612366100013624 0ustar liggesusers\name{cut_tour} \alias{cut_tour} \alias{cut_tour.TOUR} \title{Cut a tour to form a path} \description{ Cuts a tour at a specified city to form a path. } \usage{ cut_tour(x, cut, exclude_cut = TRUE) } \arguments{ \item{x}{an object of class \code{TOUR}.} \item{cut}{the index or label of the city/cities to cut the tour.} \item{exclude_cut}{exclude the city where we cut? If \code{FALSE}, the city at the cut is included in the path as the first city.} } \value{ Retuns a named vector with city ids forming the path. If multiple cuts are used then a list with paths is returned. } \seealso{ \code{\link{TOUR}}. } \author{Michael Hahsler} \examples{ data("USCA50") ## find a path starting at Austin, TX tour <- solve_TSP(USCA50) path <- cut_tour(tour, cut = "Austin, TX", exclude_cut = FALSE) path ## cut the tours at two cities tour <- solve_TSP(USCA50) path <- cut_tour(tour, cut = c("Austin, TX", "Cambridge, MA"), exclude_cut = FALSE) path ## cut a tour at the largest gap using a dummy city tsp <- insert_dummy(USCA50, label = "cut") tour <- solve_TSP(tsp) ## cut tour into path at the dummy city path <- cut_tour(tour, "cut") path } \keyword{optimize} TSP/DESCRIPTION0000644000176200001440000000231713623676650012447 0ustar liggesusersPackage: TSP Type: Package Title: Traveling Salesperson Problem (TSP) Version: 1.1-9 Date: 2020-02-20 Authors@R: c( person("Michael", "Hahsler", role = c("aut", "cre", "cph"), email = "mhahsler@lyle.smu.edu"), person("Kurt", "Hornik", role = c("aut", "cph"))) Description: Basic infrastructure and some algorithms for the traveling salesperson problem (also traveling salesman problem; TSP). The package provides some simple algorithms and an interface to the Concorde TSP solver and its implementation of the Chained-Lin-Kernighan heuristic. The code for Concorde itself is not included in the package and has to be obtained separately. Classification/ACM: G.1.6, G.2.1, G.4 URL: https://github.com/mhahsler/TSP BugReports: https://github.com/mhahsler/TSP/issues Depends: R (>= 3.5.0) Imports: graphics, foreach, utils, stats, grDevices Suggests: sp, maps, maptools, testthat License: GPL-3 Copyright: All code is Copyright (C) Michael Hahsler and Kurt Hornik. NeedsCompilation: yes Packaged: 2020-02-20 19:33:51 UTC; hahsler Author: Michael Hahsler [aut, cre, cph], Kurt Hornik [aut, cph] Maintainer: Michael Hahsler Repository: CRAN Date/Publication: 2020-02-21 06:50:16 UTC TSP/build/0000755000176200001440000000000013623557437012036 5ustar liggesusersTSP/build/vignette.rds0000644000176200001440000000031113623557437014370 0ustar liggesusersb```b`fcd`b2 1# 'f  +G+)O)M.S(W*æ % Ml ba DX%Z]?4-ީE0=(jؠjX2sR,s\ܠL t7`~΢r=xA$Gs=ʕXVr7}TSP/tests/0000755000176200001440000000000012676120024012062 5ustar liggesusersTSP/tests/testthat/0000755000176200001440000000000013623676650013740 5ustar liggesusersTSP/tests/testthat/test-ETSP.R0000644000176200001440000000070513612366100015575 0ustar liggesuserslibrary(TSP) library(testthat) context("ETSP") x <- data.frame(x = runif(20), y = runif(20), row.names = LETTERS[1:20]) ## create a TSP etsp <- ETSP(x) etsp ## use some methods expect_equal(n_of_cities(etsp), 20L) expect_equal(labels(etsp), LETTERS[1:20]) ## solve tour <- solve_TSP(etsp) tour ## compare tour_length expect_equal(tour_length(etsp), tour_length(as.TSP(etsp))) expect_equal(tour_length(tour, etsp), tour_length(tour, as.TSP(etsp))) TSP/tests/testthat/test-concorde.R0000644000176200001440000000457313612366100016625 0ustar liggesuserslibrary(TSP) library(testthat) context("solve_TSP (Concorde and Linkern)") m <- rbind( c(0, 1, 0, 1), c(1, 0, 1, Inf), c(0, 1, 0, 1), c(1, Inf, 1, 0) ) d <- as.dist(m) tsp <- TSP(d) tsp skip_if_not( Sys.which("concorde") != "" && Sys.which("linkern") != "", message = "skipped test for concorde/linkern. Not installed.") o <- solve_TSP(tsp, method="concorde") expect_equivalent(tour_length(tsp, o), 4) # large numbers should be scaled right. o_large <- solve_TSP(tsp*2^15, method="concorde") expect_equivalent(o, o_large) o_large <- solve_TSP(tsp*10^10, method="concorde") expect_equivalent(o, o_large) # expect warning for rounding expect_warning(o_large <- solve_TSP(tsp*2^15+0.1, method="concorde")) expect_equivalent(o, o_large) # expect a warning for rounding expect_warning(o_round <- solve_TSP(tsp/0.3, method="concorde")) expect_equivalent(o, o_round) o <- solve_TSP(tsp, method="linkern") expect_equivalent(tour_length(tsp, o), 4) # test ATSP #data <- matrix(runif(5^2), ncol = 5, dimnames = list(1:5, 1:5)) data <- structure(c(0.13930352916941, 0.897691324818879, 0.509101516567171, 0.430898967897519, 0.141799068776891, 0.0334562903735787, 0.902805947931483, 0.203576791565865, 0.435874363640323, 0.0641707226168364, 0.101683554705232, 0.631239329231903, 0.555331876967102, 0.0829615572001785, 0.272443652851507, 0.215095571940765, 0.532841097796336, 0.795302660670131, 0.43256876245141, 0.582661165855825, 0.250269076088443, 0.164849652675912, 0.638499777996913, 0.857200765516609, 0.0134391817264259), .Dim = c(5L, 5L), .Dimnames = list( c("1", "2", "3", "4", "5"), c("1", "2", "3", "4", "5"))) atsp <- ATSP(data) ## Concorde (gives conversation warning for reformulation of ATSP to TSP) expect_warning(o1 <- solve_TSP(atsp, method = "concorde")) o2 <- solve_TSP(atsp, method = "concorde", as_TSP = TRUE) expect_equal(length(o1), 5L) expect_equal(length(o2), 5L) # Concorde should find the optimal solution of 0.8082826 expect_equal(round(tour_length(o1), 7), 0.8082826) expect_equal(round(tour_length(o2), 7), 0.8082826) ## Linkern expect_warning(o1 <- solve_TSP(atsp, method = "linkern")) o2 <- solve_TSP(atsp, method = "linkern", as_TSP = TRUE) expect_equal(length(o1), 5L) expect_equal(length(o2), 5L) # Linkern should find the optimal solution of 0.8082826 expect_equal(round(tour_length(o1), 7), 0.8082826) expect_equal(round(tour_length(o2), 7), 0.8082826) TSP/tests/testthat/test-solve_TSP.R0000644000176200001440000000451713514544532016715 0ustar liggesuserslibrary(TSP) library(testthat) context("solve_TSP") m <- rbind( c(0, 1, 0, 1), c(1, 0, 1, Inf), c(0, 1, 0, 1), c(1, Inf, 1, 0) ) d <- as.dist(m) tsp <- TSP(d) tsp ## from matrix should give the same result expect_equal(as.numeric(tsp), as.numeric(TSP(as.matrix(d)))) ## test error on NA tsp_na <- tsp tsp_na[4] <- NA expect_error(o <- solve_TSP(tsp_na)) ## test Inf methods <- c("nearest_insertion", "cheapest_insertion", "farthest_insertion", "arbitrary_insertion", "nn", "repetitive_nn", "two_opt", "random", "identity") tours <- lapply(methods, FUN = function(m) solve_TSP(tsp, method = m)) names(tours) <- methods #tours tl <- sapply(tours, attr, "tour_length") expect_true(all(tl == 4 | tl == Inf)) ## test rep res <- solve_TSP(tsp, rep=10) tl <- attr("res", "tour_length") expect_true(all(tl == 4 | tl == Inf)) ## no two_opt res <- solve_TSP(tsp, two_opt=FALSE) tl <- attr("res", "tour_length") expect_true(all(tl == 4 | tl == Inf)) ## test special case: two cities d <- dist(rbind(c(0,0), c(1,1))) tsp2 <- TSP(d) tours2 <- lapply(methods, FUN = function(m) solve_TSP(tsp2, method = m)) expect_true(all(sapply(tours2, attr, "tour_length") == as.numeric(d)*2)) ## test special case: one city tsp1 <- TSP(dist(1)) tours1 <- lapply(methods, FUN = function(m) solve_TSP(tsp1, method = m)) expect_true(all(sapply(tours1, attr, "tour_length") == 0)) ## test ATSP (just for errors) #data <- matrix(runif(5^2), ncol = 5, dimnames = list(1:5, 1:5)) data <- structure(c(0.13930352916941, 0.897691324818879, 0.509101516567171, 0.430898967897519, 0.141799068776891, 0.0334562903735787, 0.902805947931483, 0.203576791565865, 0.435874363640323, 0.0641707226168364, 0.101683554705232, 0.631239329231903, 0.555331876967102, 0.0829615572001785, 0.272443652851507, 0.215095571940765, 0.532841097796336, 0.795302660670131, 0.43256876245141, 0.582661165855825, 0.250269076088443, 0.164849652675912, 0.638499777996913, 0.857200765516609, 0.0134391817264259), .Dim = c(5L, 5L), .Dimnames = list( c("1", "2", "3", "4", "5"), c("1", "2", "3", "4", "5"))) # best solution is 0.8082826 atsp <- ATSP(data) methods <- c("nearest_insertion", "cheapest_insertion", "farthest_insertion", "arbitrary_insertion", "nn", "repetitive_nn", "two_opt", "random", "identity") tours <- lapply(methods, FUN = function(m) solve_TSP(atsp, method = m)) names(tours) <- methods TSP/tests/testthat/test-insert_cut_etc.R0000644000176200001440000000112712676234052020044 0ustar liggesuserslibrary("testthat") library("TSP") data("USCA50") context("insert_dummy") tsp <- insert_dummy(USCA50, label = "cut") expect_equal(n_of_cities(tsp), n_of_cities(USCA50) + 1L) expect_equal(labels(tsp), c(labels(USCA50), "cut")) context("cut_tour") tour <- solve_TSP(tsp) ## cut tour into path at the dummy city path <- cut_tour(tour, "cut") expect_equal(length(path), n_of_cities(USCA50)) context("reformulate") ## reformualte atsp <- as.ATSP(USCA50) expect_equal(tour_length(USCA50), tour_length(atsp)) tsp <- reformulate_ATSP_as_TSP(atsp) expect_equal(n_of_cities(atsp)*2, n_of_cities(tsp)) TSP/tests/testthat/test-TSPLIB.R0000644000176200001440000000174312676124153016033 0ustar liggesuserslibrary(TSP) library(testthat) context("TSPLIB") set.seed(1234) x <- data.frame(x=runif(5), y=runif(5)) ## create TSP, ATSP and ETSP (2D) d <- round(dist(x), 3) ## TSP tsp <- TSP(d) tsp write_TSPLIB(tsp, file="example.tsp", precision = 6) #file.show("example.tsp") r <- read_TSPLIB("example.tsp", precision = 6) expect_equivalent(tsp, r) ## ATSP atsp <- ATSP(d) atsp write_TSPLIB(atsp, file="example.tsp", precision = 6) #file.show("example.tsp") r <- read_TSPLIB("example.tsp", precision = 6) expect_equivalent(atsp, r) ## ETSP (2D) etsp <- ETSP(round(x[,1:2], 3)) etsp write_TSPLIB(etsp, file="example.tsp", precision = 6) #file.show("example.tsp") r <- read_TSPLIB("example.tsp", precision = 6) expect_equivalent(etsp, r) ## Infinity d[2] <- Inf tsp <- TSP(d) write_TSPLIB(tsp, file="example.tsp", precision = 6) r <- read_TSPLIB("example.tsp", precision = 6) expect_equivalent(tsp[-2], r[-2]) expect_more_than(r[2], range(tsp, finite = TRUE)[2]) ## clean up unlink("example.tsp") TSP/tests/testthat.R0000644000176200001440000000007012676120023014041 0ustar liggesuserslibrary("testthat") library("TSP") test_check("TSP") TSP/src/0000755000176200001440000000000013623557437011526 5ustar liggesusersTSP/src/tour_length.c0000644000176200001440000000513713271504171014214 0ustar liggesusers#include #include #include "matrix_pos.h" typedef enum {false = 0, true = 1} bool; /* * Calculate the tour length given a distance matrix and a permuation vector */ SEXP tour_length_dist(SEXP R_dist, SEXP R_order) { double tour_length = 0.0; SEXP R_tour_length; double segment; bool posinf = false; bool neginf = false; int *order = INTEGER(R_order); int n = INTEGER(getAttrib(R_dist, install("Size")))[0]; double *dist = REAL(R_dist); if (n != LENGTH(R_order)) error("length of distance matrix and tour do not match"); for (int i = 0; i < (n-1); i++) { segment = dist[LT_POS(n, order[i]-1, order[i+1]-1)]; // check Inf if (segment == R_PosInf) posinf = true; else if (segment == R_NegInf) neginf = true; else tour_length += segment; } // close tour if (n > 1) { segment = dist[LT_POS(n, order[n-1]-1, order[0]-1)]; // check Inf if (segment == R_PosInf) posinf = true; else if (segment == R_NegInf) neginf = true; else tour_length += segment; // inf if (posinf && neginf) tour_length = NA_REAL; else if (posinf) tour_length = R_PosInf; else if (neginf) tour_length = R_NegInf; } // create R object PROTECT(R_tour_length = NEW_NUMERIC(1)); REAL(R_tour_length)[0] = tour_length; UNPROTECT(1); return R_tour_length; } /* * Calculate tour length form a matrix */ SEXP tour_length_matrix(SEXP R_matrix, SEXP R_order) { double tour_length = 0.0; SEXP R_tour_length; double segment; bool posinf = false; bool neginf = false; int n = INTEGER(GET_DIM(R_matrix))[0]; double *matrix = REAL(R_matrix); int *order = INTEGER(R_order); if (n != LENGTH(R_order)) error("length of distance matrix and tour do not match"); for (int i = 0; i < (n-1); i++) { segment = matrix[M_POS(n, order[i]-1, order[i+1]-1)]; // check inf first if (segment == R_PosInf) posinf = true; else if (segment == R_NegInf) neginf = true; else tour_length += segment; } // close tour segment = matrix[M_POS(n, order[n-1]-1, order[0]-1)]; // check inf first if (segment == R_PosInf) posinf = true; else if (segment == R_NegInf) neginf = true; else tour_length += segment; // inf if (posinf && neginf) tour_length = NA_REAL; else if (posinf) tour_length = R_PosInf; else if (neginf) tour_length = R_NegInf; PROTECT(R_tour_length = NEW_NUMERIC(1)); REAL(R_tour_length)[0] = tour_length; UNPROTECT(1); return R_tour_length; } TSP/src/matrix_pos.h0000644000176200001440000000072312606077054014056 0ustar liggesusers /* LT_POS to access a lower triangle matrix by C. Buchta * modified by M. Hahsler * n ... number of rows/columns * i,j ... column and row index [0, (n-1)] * * Note: does not cover the case i==j! */ #ifndef LT_POS #define LT_POS(n, i, j) \ (i)<(j) ? (n*(i) - ((i)+1)*(i)/2 + (j)-(i)) -1 \ : (n*(j) - ((j+1))*(j)/2 + (i)-(j)) -1 #endif /* * access for matrix */ #ifndef M_POS #define M_POS(rows, i, j) \ (i) + (j)*(rows) #endif TSP/src/dll.c0000644000176200001440000000237113053150677012440 0ustar liggesusers #include #include #include extern SEXP two_opt(SEXP R_matrix, SEXP R_t); extern SEXP two_opt_sym(SEXP R_matrix, SEXP R_t); extern SEXP insertion_cost(SEXP R_matrix, SEXP R_order, SEXP R_k); extern SEXP tour_length_dist(SEXP R_dist, SEXP R_order); extern SEXP tour_length_matrix(SEXP R_matrix, SEXP R_order); void R_init_TSP(DllInfo *dll) { const R_CallMethodDef CallEntries[] = { {"R_two_opt", (DL_FUNC) two_opt, 2}, {"R_two_opt_sym", (DL_FUNC) two_opt_sym, 2}, {"R_insertion_cost", (DL_FUNC) insertion_cost, 3}, {"R_tour_length_dist", (DL_FUNC) tour_length_dist, 2}, {"R_tour_length_matrix", (DL_FUNC) tour_length_matrix, 2}, {NULL, NULL, 0} }; R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_useDynamicSymbols(dll, FALSE); R_RegisterCCallable("arules", "R_two_opt", (DL_FUNC) two_opt); R_RegisterCCallable("arules", "R_two_opt_sym", (DL_FUNC) two_opt_sym); R_RegisterCCallable("arules", "R_insertion_cost", (DL_FUNC) insertion_cost); R_RegisterCCallable("arules", "R_tour_length_dist", (DL_FUNC) tour_length_dist); R_RegisterCCallable("arules", "R_tour_length_matrix", (DL_FUNC) tour_length_matrix); } TSP/src/insertion_cost.c0000644000176200001440000000372212606077054014730 0ustar liggesusers#include #include #include "matrix_pos.h" /* * Calculate insertion cost for the insertion algorithms */ SEXP insertion_cost(SEXP R_matrix, SEXP R_order, SEXP R_k) { int n = INTEGER(GET_DIM(R_matrix))[0]; int length = LENGTH(R_order); int *order = INTEGER(R_order); int k = INTEGER(R_k)[0]-1; SEXP R_cost; PROTECT(R_cost = NEW_NUMERIC(length)); double link_add1, link_add2, link_remove; double *matrix = REAL(R_matrix); double *cost = REAL(R_cost); if (length == 1) { cost[0] = matrix[M_POS(n, order[0]-1, k)]; }else{ for (int i = 0; i < (length-1); i++) { link_add1 = matrix[M_POS(n, order[i]-1, k)]; link_add2 = matrix[M_POS(n, k, order[i+1]-1)]; link_remove = matrix[M_POS(n, order[i]-1, order[i+1]-1)]; //Rprintf("Links: %f %f %f\n", link_add1, link_add2, link_remove); // check for infinity if(link_add1 == R_NegInf || link_add2 == R_NegInf || link_remove == R_PosInf) cost[i] = R_NegInf; else if(link_add1 == R_PosInf || link_add2 == R_PosInf || link_remove == R_NegInf) cost[i] = R_PosInf; else cost[i] = link_add1 + link_add2 - link_remove; } link_add1 = matrix[M_POS(n, order[length-1]-1, k)]; link_add2 = matrix[M_POS(n, k, order[0]-1)]; link_remove = matrix[M_POS(n, order[length-1]-1, order[0]-1)]; // check for infinity if(link_add1 == R_PosInf || link_add2 == R_PosInf) cost[length-1] = R_PosInf; else if(link_remove == R_PosInf) cost[length-1] = R_NegInf; // removing a inf is very good else cost[length-1] = link_add1 + link_add2 - link_remove; } UNPROTECT(1); return R_cost; } TSP/src/two_opt.c0000644000176200001440000001271513612366100013352 0ustar liggesusers #include #include #include "matrix_pos.h" //#define TWOOPT_DEBUG 1 // only improvements >EPSILON are used #define EPSILON 1.0e-7 /* 2-opt * * R_matrix ... matrix with distances * R_t .. initial tour * * inf and NA is not allowed! * */ // this implementation also works for asymetric TSPs SEXP two_opt(SEXP R_matrix, SEXP R_t) { int i, j, n; int swaps; int swap1, swap2; double imp, imp_tmp, imp_best; int tmp; double *matrix = REAL(R_matrix); // make a copy of the initial tour (Note: t is 1-based) int *t = INTEGER(R_t = PROTECT(duplicate(R_t))); // check n = INTEGER(GET_DIM(R_matrix))[0]; if (LENGTH(R_t) != n) error("tour has invalid length"); for (i = 0; i < n; i++) if (t[i] < 1 || t[i] > n) error("tour contains invalid values"); // main loop do{ swaps = 0; swap1 = swap2 = 0; imp_best = 0.0; // find the swap with largest improvement // i is first city to swap (0-based index) for (i = 1; i < n-1; i++){ imp = 0.0; // add gains for getting to the first city (i-1 -> i) imp += matrix[M_POS(n, t[i-1]-1, t[i]-1)]; // gains by adding one more city to the swap imp += matrix[M_POS(n, t[i]-1, t[i+1]-1)]; // j is the last city to swap (0-based index) for (j = i+1; j < n-1; j++){ // gains by adding one more city to the swap imp += matrix[M_POS(n, t[j]-1, t[j+1]-1)]; // increased cost for one more city imp -= matrix[M_POS(n, t[j]-1, t[j-1]-1)]; // include gains from closing the tour (i-1 -> j and i -> j+1) imp_tmp = imp - matrix[M_POS(n, t[i-1]-1, t[j]-1)] - matrix[M_POS(n, t[i]-1, t[j+1]-1)]; if(imp_tmp > EPSILON) { swaps++; if(imp_tmp > imp_best) { imp_best = imp_tmp; swap1 = i; swap2 = j; } } } // check the last city (needs distance to first city) j = n-1; // increased cost for one more city imp -= matrix[M_POS(n, t[j]-1, t[j-1]-1)]; // include gains from closing the tour (this time with first city) imp_tmp = imp - matrix[M_POS(n, t[i-1]-1, t[j]-1)] - matrix[M_POS(n, t[i]-1, t[0]-1)]; // check improvement if(imp_tmp > EPSILON) { swaps++; if(imp_tmp > imp_best) { imp_best = imp_tmp; swap1 = i; swap2 = j; } } } #ifdef TWOOPT_DEBUG printf("two_opt: %d possible swaps\n", swaps); #endif // reverse sub-tour if(swaps > 0){ #ifdef TWOOPT_DEBUG printf("two_opt: best improvement is %f\n", imp_best); printf("two_opt: reversing cities %d to %d\n", swap1+1, swap2+1); #endif for(i = 0; i < (swap2-swap1+1)/2; i++) { // +1 for even length tmp = t[swap1+i]; t[swap1+i] = t[swap2-i]; t[swap2-i] = tmp; } } R_CheckUserInterrupt(); }while (swaps > 0); UNPROTECT(1); return R_t; } // this implementation only works for symetric TSPs // Note: code is slightly faster than the code above but is not unused SEXP two_opt_sym(SEXP R_matrix, SEXP R_t) { int i, j, n; int swaps; int swap1, swap2; double e1, e2, e1_swap, e2_swap; double imp, cur_imp; int tmp; double *matrix = REAL(R_matrix); // make a copy of the initial tour int *t = INTEGER(R_t = PROTECT(duplicate(R_t))); // check n = INTEGER(GET_DIM(R_matrix))[0]; if (LENGTH(R_t) != n) error("tour has invalid length"); for (i = 0; i < n; i++) { if (t[i] < 1 || t[i] > n) error("tour contains invalid values"); } // main loop do{ swaps = 0; swap1 = swap2 = 0; imp = 0.0; // find the swap with largest improvement (works only for symetric TSPs) for (i = 0; i < (n-2); i++){ e1 = matrix[M_POS(n, t[i]-1, t[i+1]-1)]; for (j = (i+1); j < (n-1); j++){ e2 = matrix[M_POS(n, t[j]-1, t[j+1]-1)]; e1_swap = matrix[M_POS(n, t[i]-1, t[j]-1)]; e2_swap = matrix[M_POS(n, t[i+1]-1, t[j+1]-1)]; /* // handle pos inf (now handled in R code) if (e1_swap == R_PosInf || e2_swap == R_PosInf) cur_imp = 0; else if (e1 == R_PosInf || e2 == R_PosInf) cur_imp = R_PosInf; else */ cur_imp = (e1+e2) - (e1_swap+e2_swap); if(cur_imp > 0) { swaps++; if(cur_imp > imp) { imp = cur_imp; swap1 = i+1; swap2 = j; } } } // check the last city (needs distance to first city) e2 = matrix[M_POS(n, t[n-1]-1, t[0]-1)]; e1_swap = matrix[M_POS(n, t[i]-1, t[n-1]-1)]; e2_swap = matrix[M_POS(n, t[i+1]-1, t[0]-1)]; cur_imp = (e1+e2) - (e1_swap+e2_swap); // check improvement if(cur_imp > 0) { swaps++; if(cur_imp > imp) { imp = cur_imp; swap1 = i+1; swap2 = n-1; } } } #ifdef TWOOPT_DEBUG printf("two_opt: %d possible swaps\n", swaps); #endif // reverse sub-tour if(swaps > 0){ #ifdef TWOOPT_DEBUG printf("two_opt: best improvement is %f\n", imp); printf("two_opt: swapping %d to %d\n", swap1, swap2); #endif for(i = 0; i < (swap2-swap1+1)/2; i++) { // +1 for even length tmp = t[swap1+i]; t[swap1+i] = t[swap2-i]; t[swap2-i] = tmp; } } R_CheckUserInterrupt(); }while (swaps >0); UNPROTECT(1); return R_t; } TSP/vignettes/0000755000176200001440000000000013623557437012747 5ustar liggesusersTSP/vignettes/TSP.Rnw0000644000176200001440000013174513623555613014112 0ustar liggesusers%\documentclass[10pt,a4paper,fleqn]{article} \documentclass[nojss]{jss} \usepackage[english]{babel} %% my packages %\usepackage{a4wide} %\usepackage[round,longnamesfirst]{natbib} %\usepackage{hyperref} % \usepackage{amsmath} \usepackage{amsfonts} % %\newcommand{\strong}[1]{{\normalfont\fontseries{b}\selectfont #1}} \newcommand{\class}[1]{\mbox{\textsf{#1}}} \newcommand{\func}[1]{\mbox{\texttt{#1()}}} %\newcommand{\code}[1]{\mbox{\texttt{#1}}} %\newcommand{\pkg}[1]{\strong{#1}} \newcommand{\samp}[1]{`\mbox{\texttt{#1}}'} %\newcommand{\proglang}[1]{\textsf{#1}} \newcommand{\set}[1]{\mathcal{#1}} %\usepackage{Sweave} %% \VignetteIndexEntry{Introduction to TSP} \author{Michael Hahsler\\Southern Methodist University \And Kurt Hornik\\Wirtschaftsuniversit\"at Wien} \title{\pkg{TSP} -- Infrastructure for the Traveling Salesperson Problem} %% for pretty printing and a nice hypersummary also set: \Plainauthor{Michael Hahsler, Kurt Hornik} %% comma-separated \Plaintitle{TSP -- Infrastructure for the Traveling Salesperson Problem} %% without formatting \Shorttitle{Infrastructure for the TSP} %% a short title (if necessary) %% an abstract and keywords \Abstract{ The traveling salesperson problem (also known as traveling salesman problem or TSP) is a well known and important combinatorial optimization problem. The goal is to find the shortest tour that visits each city in a given list exactly once and then returns to the starting city. Despite this simple problem statement, solving the TSP is difficult since it belongs to the class of NP-complete problems. The importance of the TSP arises besides from its theoretical appeal from the variety of its applications. Typical applications in operations research include vehicle routing, computer wiring, cutting wallpaper and job sequencing. The main application in statistics is combinatorial data analysis, e.g., reordering rows and columns of data matrices or identifying clusters. In this paper we introduce the \proglang{R}~package \pkg{TSP} which provides a basic infrastructure for handling and solving the traveling salesperson problem. The package features S3 classes for specifying a TSP and its (possibly optimal) solution as well as several heuristics to find good solutions. In addition, it provides an interface to \emph{Concorde}, one of the best exact TSP solvers currently available. } \Keywords{combinatorial optimization, traveling salesman problem, \proglang{R}} \Plainkeywords{combinatorial optimization, traveling salesman problem, R} %% without formatting %% The address of (at least) one author should be given %% in the following format: \Address{ Michael Hahsler\\ Engineering Management, Information, and Systems\\ Lyle School of Engineering\\ Southern Methodist University\\ P.O. Box 750123 \\ Dallas, TX 75275-0123\\ E-mail: \email{mhahsler@lyle.smu.edu}\\ Kurt Hornik\\ Department of Finance, Accounting and Statistics\\ Wirtschaftsuniversit\"at Wien\\ 1090 Wien, Austria\\ E-mail: \email{kurt.hornik@wu-wien.ac.at}\\ URL: \url{http://statmath.wu.ac.at/~hornik/} } \begin{document} <>= options(width = 75, useFancyQuotes=FALSE, prompt="R> ") ### for sampling set.seed(1234) @ %\title{Introduction to \pkg{TSP} -- Infrastructure for the Traveling % Salesperson Problem} %\author{Michael Hahsler and Kurt Hornik} \maketitle \sloppy %\abstract{ % The traveling salesperson (or, salesman) problem (TSP) is a % well known and important combinatorial optimization problem. The goal % is to find the shortest tour that visits each city in a given list % exactly once and then returns to the starting city. Despite this % simple problem statement, solving the TSP is difficult since it % belongs to the class of NP-complete problems. The importance of the % TSP arises besides from its theoretical appeal from the variety of its % applications. Typical applications in operations research include % vehicle routing, computer wiring, cutting wallpaper and job % sequencing. The main application in statistics is combinatorial data % analysis, e.g., reordering rows and columns of data matrices or % identifying clusters. In this paper we introduce the % \proglang{R}~package \pkg{TSP} which provides a basic infrastructure % for handling and solving the traveling salesperson problem. The % package features S3 classes for specifying a TSP and its (possibly % optimal) solution as well as several heuristics to find good % solutions. In addition, it provides an interface to \emph{Concorde}, % one of the best exact TSP solvers currently available. } \section{Introduction} The traveling salesperson problem~\citep[TSP;][]{Lawler1985, Gutin2002} is a well known and important combinatorial optimization problem. The goal is to find the shortest tour that visits each city in a given list exactly once and then returns to the starting city. Formally, the TSP can be stated as follows. The distances between $n$ cities are stored in a distance matrix $\mathbf{D}$ with elements $d_{ij}$ where $i,j = 1\dots n$ and the diagonal elements $d_{ii}$ are zero. A \emph{tour} can be represented by a cyclic permutation $\pi$ of $\{1, 2,\dots, n\}$ where $\pi(i)$ represents the city that follows city $i$ on the tour. The traveling salesperson problem is then the optimization problem to find a permutation $\pi$ that minimizes the \emph{length of the tour} denoted by \begin{equation} \sum_{i=1}^n d_{i\pi(i)}. \end{equation} % see Lenstra & Kan 1975: Some simple Applications to the TSP For this minimization task, the tour length of $(n-1)!$ permutation vectors have to be compared. This results in a problem which is very hard to solve and in fact known to be NP-complete~\citep{Johnson1985a}. However, solving TSPs is an important part of applications in many areas including vehicle routing, computer wiring, machine sequencing and scheduling, frequency assignment in communication networks~\citep{Lenstra1975, Punnen2002}. %and structuring of %matrices~\citep{Lenstra1975, Punnen2002}. Applications in statistical data analysis include ordering and clustering objects. For example, data analysis applications in psychology ranging from profile smoothing to finding an order in developmental data are presented by~\cite{Hubert1978}. Clustering and ordering using TSP solvers is currently becoming popular in biostatistics. For example, \cite{Ray2007} describe an application for ordering genes and \cite{Johnson2006} use a TSP solver for clustering proteins. In this paper we give a very brief overview of the TSP and introduce the \proglang{R}~package \pkg{TSP} which provides an infrastructure for handling and solving TSPs. The paper is organized as follows. In Section~\ref{sec:TSP} we briefly present important aspects of the TSP including different problem formulations and approaches to solve TSPs. In Section~\ref{sec:infrastructure} we give an overview of the infrastructure implemented in \pkg{TSP} and the basic usage. In Section~\ref{sec:examples}, several examples are used to illustrate the package's capabilities. Section~\ref{sec:conclusion} concludes the paper. A previous version of this manuscript was published in the \emph{Journal of Statistical Software} \citep{TSP:Hahsler+Hornik2007}. \section{Theory} \label{sec:TSP} In this section, we briefly summarize some aspects of the TSP which are important for the implementation of the \pkg{TSP} package described in this paper. For a complete treatment of all aspects of the TSP, we refer the interested reader to the classic book edited by \cite{Lawler1985} and the more modern book edited by \cite{Gutin2002}. It has to be noted that in this paper, following the origin of the TSP, the term \emph{distance} is used. Distance is used here interchangeably with dissimilarity or cost and, unless explicitly stated, no restrictions to measures which obey the triangle inequality are made. An important distinction can be made between the symmetric TSP and the more general asymmetric TSP. For the symmetric case (normally referred to as just \emph{TSP}), for all distances in $\mathbf{D}$ the equality $d_{ij} = d_{ji}$ holds, i.e., it does not matter if we travel from $i$ to $j$ or the other way round, the distance is the same. In the asymmetric case (called \emph{ATSP}), the distances are not equal for all pairs of cities. Problems of this kind arise when we do not deal with spatial distances between cities but, e.g., with the cost or necessary time associated with traveling between locations, where the price for the plane ticket between two cities may be different depending on which way we go. \subsection{Different formulations of the TSP} \label{sec:formulations} Other than the permutation problem in the introduction, the TSP can also be formulated as a graph theoretic problem. Here the TSP is formulated by means of a complete graph $G = (V, E)$, where the cities correspond to the node set $V = \{1,2,\ldots,n\}$ and each edge $e_i \in E$ has an associated weight $w_i$ representing the distance between the nodes it connects. If the graph is not complete, the missing edges can be replaced by edges with very large distances. The goal is to find a \emph{Hamiltonian cycle}, i.e., a cycle which visits each node in the graph exactly once, with the least weight in the graph~\citep{Hoffman1985}. This formulation naturally leads to procedures involving minimum spanning trees for tour construction or edge exchanges to improve existing tours. TSPs can also be represented as integer and linear programming problems~\citep[see, e.g.,][]{Punnen2002}. The \emph{integer programming (IP) formulation} is based on the assignment problem with additional constraint of no sub-tours: \[ \begin{array}{rl} \text{Minimize } & \sum_{i=1}^n\sum_{j=1}^n{d_{ij}x_{ij}} % = \mathrm{trace}(\mathbf{D}^T\mathbf{X}) \\[3mm] \text{Subject to } & \sum_{i=1}^n{x_{ij}=1}, \quad j=1,\ldots,n, \\ & \sum_{j=1}^n{x_{ij}=1}, \quad i=1,\ldots,n, \\ & x_{ij} = 0 \text{ or } 1 \\ & \text{no sub-tours allowed} \\ \end{array} \] The solution matrix $\mathbf{X} = (x_{ij})$ of the assignment problem represents a tour or a collection of sub-tour (several unconnected cycles) where only edges which corresponding to elements $x_{ij} = 1$ are on the tour or a sub-tour. The additional restriction that no sub-tours are allowed (called \emph{sub-tour elimination constraints}) restrict the solution to only proper tours. Unfortunately, the number of sub-tour elimination constraints grows exponentially with the number of cities which leads to an extremely hard problem. The \emph{linear programming (LP) formulation} of the TSP is given by: \[ \begin{array}{rl} \text{Minimize } & \sum_{i=1}^m{w_ix_i} = \mathbf{w}^T\mathbf{x}\\[3mm] \text{Subject to } & \mathbf{x} \in \mathcal{S} \\ \end{array} \] where $m$ is the number of edges $e_i$ in $G$, $w_i \in \mathbf{w}$ is the weight of edge $e_i$ and $\mathbf{x}$ is the incidence vector indicating the presence or absence of each edge in the tour. Again, the constraints given by $\mathbf{x} \in \mathcal{S}$ are problematic since they have to contain the set of incidence vectors of all possible Hamiltonian cycles in $G$ which amounts to a direct search of all $(n-1)!$ possibilities and thus in general is infeasible. However, relaxed versions of the linear programming problem with removed integrality and sub-tour elimination constraints are extensively used by modern TSP solvers where such a partial description of constraints is used and improved iteratively in a branch-and-bound approach. \subsection{Useful manipulations of the distance matrix} \label{sec:manipulations} Sometimes it is useful to transform the distance matrix $\mathbf{D} = (d_{ij})$ of a TSP into a different matrix $\mathbf{D'} = (d'_{ij})$ which has the same optimal solution. Such a transformation requires that for any Hamiltonian cycle $H$ in a graph represented by its distance matrix $\mathbf{D}$ the equality \begin{equation*} \sum_{i,j \in H}{d_{ij}} = \alpha \sum_{i,j \in H}{d'_{ij}} + \beta \end{equation*} holds for suitable $\alpha > 0$ and $\beta \in \mathbb{R}$. From the equality we see that additive and multiplicative constants leave the optimal solution invariant. This property is useful to rescale distances, e.g., for many solvers, distances in the interval $[0, 1]$ have to be converted into integers from~1 to a maximal value. A different manipulation is to reformulate an asymmetric TSP as a symmetric TSP. This is possible by doubling the number of cities~\citep{Jonker1983}. For each city a dummy city is added. Between each city and its corresponding dummy city a very small value (e.g., $-\infty$) is used. This makes sure that each city always occurs in the solution together with its dummy city. The original distances are used between the cities and the dummy cities, where each city is responsible for the distance going to the city and the dummy city is responsible for the distance coming from the city. The distances between all cities and the distances between all dummy cities are set to a very large value (e.g., $\infty$) which makes these edges infeasible. An example for equivalent formulations as an asymmetric TSP (to the left) and a symmetric TSP (to the right) for three cities is: \begin{equation*} \begin{pmatrix} 0 &d_{12} &d_{13} \\ d_{21} &0 &d_{23} \\ d_{31} &d_{32} &0 \\ \end{pmatrix} \Longleftrightarrow \begin{pmatrix} 0 &\infty &\infty & -\infty &d_{21} &d_{31} \\ \infty &0 &\infty & d_{12} &-\infty &d_{31} \\ \infty &\infty &0 & d_{13} &d_{23} &-\infty \\ -\infty &d_{12} &d_{13} & 0 &\infty &\infty \\ d_{21} &-\infty &d_{23} & \infty &0 &\infty \\ d_{31} &d_{32} &-\infty & \infty &\infty &0 \\ \end{pmatrix} \end{equation*} Instead of the infinity values suitably large negative and positive values can be used. The new symmetric TSP can be solved using techniques for symmetric TSPs which are currently far more advanced than techniques for ATSPs. Removing the dummy cities from the resulting tour gives the solution for the original ATSP. \subsection{Finding exact solutions for the TSP} \label{sec:exact} Finding the exact solution to a TSP with $n$ cities requires to check $(n-1)!$ possible tours. To evaluate all possible tours is infeasible for even small TSP instances. To find the optimal tour \cite{Held1962} presented the following \emph{dynamic programming} formulation: Given a subset of city indices (excluding the first city) $S \subset \{2, 3, \dots, n\}$ and $l \in S$, let $d^*(S, l)$ denote the length of the shortest path from city $1$ to city $l$, visiting all cities in $S$ in-between. For $S = \{l\}$, $d^*(S,l)$ is defined as $d_{1l}$. The shortest path for larger sets with $|S| > 1$ is \begin{equation} d^*(S,l) = \mathrm{min}_{m \in S\setminus\{l\}}\Bigl( d^*(S\setminus\{l\},m) + d_{ml}\Bigl). %\text{ for } |S| > 1. \end{equation} Finally, the minimal tour length for a complete tour which includes returning to city $1$ is \begin{equation} d^{**} = \mathrm{min}_{l \in \{2,3,\dots,n\}}\Bigl( d^*(\{2,3,\dots,n\}, l) + d_{l1}\Bigl). \end{equation} Using the last two equations, the quantities $d^*(S,l)$ can be computed recursively and the minimal tour length $d^{**}$ can be found. In a second step, the optimal permutation $\pi = \{1, i_2, i_3,\dots,i_n\}$ of city indices $1$ through $n$ can be computed in reverse order, starting with $i_n$ and working successively back to $i_2$. The procedure exploits the fact that a permutation $\pi$ can only be optimal, if \begin{equation} d^{**} = d^*(\{2,3,\dots,n\}, i_n) + d_{i_n1} \end{equation} and, for $2 \le p \le n-1$, \begin{equation} d^*(\{i_2, i_3,\dots, i_p, i_{p+1}\}, i_{p+1}) = d^*(\{i_2,i_3,\dots,i_p\}, i_p) + d_{i_pi_{p+1}}. \end{equation} The space complexity of storing the values for all $d^*(S,l)$ is $(n-1)2^{n-2}$ which severely restricts the dynamic programming algorithm to TSP problems of small sizes. However, for very small TSP instances this approach is fast and efficient. %\marginpar{time complexity if order $n^22^n$. Check!} A different method, which can deal with larger instances, uses a relaxation of the linear programming problem presented in Section~\ref{sec:formulations} and iteratively tightens the relaxation till a solution is found. This general method for solving linear programming problems with complex and large inequality systems is called \emph{cutting plane method} and was introduced by \cite{Dantzig1954}. Each iteration begins with using instead of the original linear inequality description $\mathcal{S}$ the relaxation $A\mathbf{x} \le b$, where the polyhedron $P$ defined by the relaxation contains $\mathcal{S}$ and is bounded. The optimal solution $\mathbf{x}^*$ of the relaxed problem can be obtained using standard linear programming solvers. If the $\mathbf{x}^*$ found belongs to $\mathcal{S}$, the optimal solution of the original problem is obtained, otherwise, a linear inequality can be found which is satisfied by all points in $\mathcal{S}$ but violated by $\mathbf{x}^*$. Such an inequality is called a cutting plane or cut. A family of such cutting planes can be added to the inequality system $A\mathbf{x} \le b$ to obtain a tighter relaxation for the next iteration. If no further cutting planes can be found or the improvement in the objective function due to adding cuts gets very small, the problem is branched into two sub-problems which can be minimized separately. Branching is done iteratively which leads to a binary tree of sub-problems. Each sub-problem is either solved without further branching or is found to be irrelevant because its relaxed version already produces a longer path than a solution of another sub-problem. This method is called \emph{branch-and-cut}~\citep{Padberg1990} which is a variation of the well known \emph{branch-and-bound}~\citep{Land1960} procedure. The initial polyhedron $P$ used by \cite{Dantzig1954} contains all vectors $\mathbf{x}$ for which all $x_e \in \mathbf{x}$ satisfy $0 \le x_e \le 1$ and in the resulting tour each city is linked to exactly two other cities. Various separation algorithms for finding subsequent cuts to prevent sub-tours (\emph{sub-tour elimination inequalities}) and to ensure an integer solution \citep[\emph{Gomory cuts;}][]{Gomory1963} were developed over time. The currently most efficient implementation of this method is \emph{Concorde} described in~\cite{Applegate2000}. \subsection{Heuristics for the TSP} \label{sec:heuristics} The NP-completeness of the TSP already makes it more time efficient for small-to-medium size TSP instances to rely on heuristics in case a good but not necessarily optimal solution is sufficient. TSP heuristics typically fall into two groups, tour construction heuristics which create tours from scratch and tour improvement heuristics which use simple local search heuristics to improve existing tours. In the following we will only discuss heuristics available in \pkg{TSP}, for a comprehensive overview of the multitude of TSP heuristics including an experimental comparison, we refer the reader to the book chapter by \cite{Johnson2002}. \subsubsection{Tour construction heuristics} The implemented tour construction heuristics are the nearest neighbor algorithm and the insertion algorithms. \paragraph{Nearest neighbor algorithm.} The nearest neighbor algorithm~\citep{Rosenkrantz1977} follows a very simple greedy procedure: The algorithm starts with a tour containing a randomly chosen city and then always adds to the last city in the tour the nearest not yet visited city. The algorithm stops when all cities are on the tour. An extension to this algorithm is to repeat it with each city as the starting point and then return the best tour found. This heuristic is called repetitive nearest neighbor. \paragraph{Insertion algorithms.} All insertion algorithms~\citep{Rosenkrantz1977} start with a tour consisting of an arbitrary city and then choose in each step a city $k$ not yet on the tour. This city is inserted into the existing tour between two consecutive cities $i$ and $j$, such that the insertion cost (i.e., the increase in the tour's length) $$d(i,k) + d(k,j) - d(i,j)$$ is minimized. The algorithms stop when all cities are on the tour. The insertion algorithms differ in the way the city to be inserted next is chosen. The following variations are implemented: \begin{description} \item[Nearest insertion] The city $k$ is chosen in each step as the city which is nearest to a city on the tour. \item[Farthest insertion] The city $k$ is chosen in each step as the city which is farthest from any of the cities on the tour. \item[Cheapest insertion] The city $k$ is chosen in each step such that the cost of inserting the new city is minimal. \item[Arbitrary insertion] The city $k$ is chosen randomly from all cities not yet on the tour. \end{description} The nearest and cheapest insertion algorithms correspond to the minimum spanning tree algorithm by \cite{Prim1957}. Adding a city to a partial tour corresponds to adding an edge to a partial spanning tree. For TSPs with distances obeying the triangular inequality, the equality to minimum spanning trees provides a theoretical upper bound for the two algorithms of twice the optimal tour length. The idea behind the farthest insertion algorithm is to link cities far outside into the tour first to establish an outline of the whole tour early. With this change, the algorithm cannot be directly related to generating a minimum spanning tree and thus the upper bound stated above cannot be guaranteed. However, it can was shown that the algorithm generates tours which approach $2/3$ times the optimal tour length~\citep{Johnson1985}. \subsubsection{Tour improvement heuristics} Tour improvement heuristics are simple local search heuristics which try to improve an initial tour. A comprehensive treatment of the topic can be found in the book chapter by \cite{Rego2002}. \paragraph{$k$-Opt heuristics.} The idea is to define a neighborhood structure on the set of all admissible tours. Typically, a tour $t'$ is a neighbor of another tour $t$ if $t'$ can be obtained from $t$ by deleting $k$ edges and replacing them by a set of different feasible edges (a $k$-Opt move). In such a structure, the tour can iteratively be improved by always moving from one tour to its best neighbor till no further improvement is possible. The resulting tour represents a local optimum which is called $k$-optimal. Typically, $2$-Opt~\citep{Croes1958} and $3$-Opt~\citep{Lin1965} heuristics are used in practice. \paragraph{Lin-Kernighan heuristic.} This heuristic~\citep{Lin1973} does not use a fixed value for $k$ for its $k$-Opt moves, but tries to find the best choice of $k$ for each move. The heuristic uses the fact that each $k$-Opt move can be represented as a sequence of $2$-Opt moves. It builds up a sequence of $2$-Opt moves, checking after each additional move whether a stopping rule is met. Then the part of the sequence which gives the best improvement is used. This is equivalent to a choice of one $k$-Opt move with variable $k$. Such moves are used till a local optimum is reached. By using full backtracking, the optimal solution can always be found, but the running time would be immense. Therefore, only limited backtracking is allowed in the procedure, which helps to find better local optima or even the optimal solution. Further improvements to the procedure are described by \cite{Lin1973}. \section{Computational infrastructure: the TSP package} \label{sec:infrastructure} In package~\pkg{TSP}, a traveling salesperson problem is defined by an object of class \class{TSP} (symmetric) or \class{ATSP} (asymmetric). \func{solve\_TSP} is used to find a solution, which is represented by an object of class \class{TOUR}. Figure~\ref{fig:overview} gives an overview of this infrastructure. \begin{figure} \centering \includegraphics[width=14cm]{overview} \caption{An overview of the classes in \pkg{TSP}.} \label{fig:overview} \end{figure} \class{TSP} objects can be created from a distance matrix (a \class{dist} object) or a symmetric matrix using the creator function \func{TSP} or coercion with \func{as.TSP}. Similarly, \class{ATSP} objects are created by \func{ATSP} or \func{as.ATSP} from square matrices representing the distances. In the creation process, labels are taken and stored as city names in the object or can be explicitly given as arguments to the creator functions. Several methods are defined for the classes: \begin{itemize} \item \func{print} displays basic information about the problem (number of cities and the distance measure employed). \item \func{n\_of\_cities} returns the number of cities. \item \func{labels} returns the city names. \item \func{image} produces a shaded matrix plot of the distances between cities. The order of the cities can be specified as the argument \code{order}. \end{itemize} Internally, an object of class \class{TSP} is a \class{dist} object with an additional class attribute and, therefore, if needed, can be coerced to \class{dist} or to a matrix. An \class{ATSP} object is represented as a square matrix. Obviously, asymmetric TSPs are more general than symmetric TSPs, hence, symmetric TSPs can also be represented as asymmetric TSPs. To formulate an asymmetric TSP as a symmetric TSP with double the number of cities (see Section \ref{sec:manipulations}), \func{reformulate\_ATSP\_as\_TSP} is provided. This function creates the necessary dummy cities and adapts the distance matrix accordingly. A popular format to save TSP descriptions to disk which is supported by most TSP solvers is the format used by \emph{TSPLIB}, a library of sample instances of the TSP maintained by \cite{Reinelt2004}. The \pkg{TSP} package provides \func{read\_TSPLIB} and \func{write\_TSPLIB} to read and save symmetric and asymmetric TSPs in TSPLIB format. Class \class{TOUR} represents a solution to a TSP by an integer permutation vector containing the ordered indices and labels of the cities to visit. In addition, it stores an attribute indicating the length of the tour. Again, suitable \func{print} and \func{labels} methods are provided. The raw permutation vector (i.e., the order in which cities are visited) can be obtained from a tour using \func{as.integer}. With \func{cut\_tour}, a circular tour can be split at a specified city resulting in a path represented by a vector of city indices. The length of a tour can always be calculated using \func{tour\_length} and specifying a TSP and a tour. Instead of the tour, an integer permutation vector calculated outside the \pkg{TSP} package can be used as long as it has the correct length. All TSP solvers in \pkg{TSP} can be used with the simple common interface: \begin{quote} \code{solve\_TSP(x, method, control)} \end{quote} where \code{x} is the TSP to be solved, \code{method} is a character string indicating the method used to solve the TSP and \code{control} can contain a list with additional information used by the solver. The available algorithms are shown in Table~\ref{tab:methods}. \begin{table} \caption{Available algorithms in \pkg{TSP}.} \label{tab:methods} \centering \begin{tabular}{llc} \hline \textbf{Algorithm} & \textbf{Method argument} & \textbf{Applicable to} \\ \hline Nearest neighbor algorithm & \code{"nn"} & TSP/ATSP \\ Repetitive nearest neighbor algorithm & \code{"repetitive\_nn"} & TSP/ATSP \\ Nearest insertion & \code{"nearest\_insertion"} & TSP/ATSP \\ Farthest insertion & \code{"farthest\_insertion"} & TSP/ATSP \\ Cheapest insertion & \code{"cheapest\_insertion"} & TSP/ATSP \\ Arbitrary insertion & \code{"arbitrary\_insertion"} & TSP/ATSP \\ Concorde TSP solver & \code{"concorde"} & TSP \\ 2-Opt improvement heuristic & \code{"two\_opt"} & TSP/ATSP \\ Chained Lin-Kernighan & \code{"linkern"} & TSP \\ \hline \end{tabular} \end{table} All algorithms except the Concorde TSP solver and the Chained Lin-Kernighan heuristic (a Lin-Kernighan variation described in \cite{Applegate2003}) are included in the package and distributed under the GNU Public License (GPL). For the Concorde TSP solver and the Chained Lin-Kernighan heuristic only a simple interface (using \func{write\_TSPLIB}, calling the executable and reading back the resulting tour) is included in \pkg{TSP}. The executable itself is part of the Concorde distribution, has to be installed separately and is governed by a different license which allows only for academic use. The interfaces are included since Concorde~\citep{Applegate2000,Applegate2006} is currently one of the best implementations for solving symmetric TSPs based on the branch-and-cut method discussed in section~\ref{sec:exact}. In May 2004, Concorde was used to find the optimal solution for the TSP of visiting all 24,978 cities in Sweden. The computation was carried out on a cluster with 96 Xeon 2.8 GHz nodes and took in total almost 100 CPU years. \section{Examples} \label{sec:examples} In this section we provide some examples for the use of package~\pkg{TSP}. We start with a simple example of how to use the interface of the TSP solver to compare different heuristics. Then we show how to solve related tasks, using the Hamiltonian shortest path problem as an example. Finally, we give an example of clustering using the \pkg{TSP} package. An additional application can be found in package \pkg{seriation}~\citep{TSP:Hahsler+Buchta+Hornik:2006} which uses the TSP solvers from \pkg{TSP} to order (seriate) objects given a proximity matrix. \subsection{Comparing some heuristics} In the following example, we use several heuristics to find a short path in the \code{USCA50} data set which contains the distances between the first 50 cities in the \code{USCA312} data set. The \code{USCA312} data set contains the distances between 312 cities in the USA and Canada coded as a symmetric TSP. The smaller data set is used here, since some of the heuristic solvers employed are rather slow. <<>>= library("TSP") data("USCA50") USCA50 @ We calculate tours using different heuristics and store the results in the list \code{tours}. As an example, we show the first tour which displays the method employed, the number of cities involved and the tour length. All tour lengths are compared using the dot chart in Figure~\ref{fig:dotchart}. For the chart, we add a point for the optimal solution which has a tour length of 14497. The optimal solution can be found using Concorde (\code{method = "concorde"}). It is omitted here, since Concorde has to be installed separately. <>= set.seed(1234) @ <>= methods <- c("nearest_insertion", "farthest_insertion", "cheapest_insertion", "arbitrary_insertion", "nn", "repetitive_nn", "two_opt") tours <- sapply(methods, FUN = function(m) solve_TSP(USCA50, method = m), simplify = FALSE) ## tours$concorde <- solve_TSP(tsp, method = "concorde") tours[[1]] dotchart(sort(c(sapply(tours, tour_length), optimal = 14497)), xlab = "tour length", xlim = c(0, 20000)) @ \begin{figure} \centering \includegraphics[width=11cm, trim=0 10 0 0]{TSP-dotchart_USCA50} \caption{Comparison of the tour lengths for the USCA50 data set.} \label{fig:dotchart} \end{figure} \subsection{Finding the shortest Hamiltonian path} The problem of finding the shortest Hamiltonian path through a graph (i.e., a path which visits each node in the graph exactly once) can be transformed into the TSP with cities and distances representing the graphs vertices and edge weights, respectively~\citep{Garfinkel1985}. Finding the shortest Hamiltonian path through all cities disregarding the endpoints can be achieved by inserting a `dummy city' which has a distance of zero to all other cities. The position of this city in the final tour represents the cutting point for the path. In the following we use a heuristic to find a short path in the \code{USCA312} data set. Inserting dummy cities is performed in \pkg{TSP} by \func{insert\_dummy}. <>= set.seed(1234) @ <<>>= library("TSP") data("USCA312") tsp <- insert_dummy(USCA312, label = "cut") tsp @ The TSP now contains an additional dummy city and we can try to solve this TSP. <<>>= tour <- solve_TSP(tsp, method="farthest_insertion") tour @ Since the dummy city has distance zero to all other cities, the path length is equal to the tour length reported above. The path starts with the first city in the list after the `dummy' city and ends with the city right before it. We use \func{cut\_tour} to create a path and show the first and last 6 cities on it. <<>>= path <- cut_tour(tour, "cut") head(labels(path)) tail(labels(path)) @ The tour found in the example results in a path from Lihue on Hawaii to Prince Rupert in British Columbia. Such a tour can also be visualized using the packages \pkg{sp}, \pkg{maps} and \pkg{maptools} \citep{TSP:Pebesma+Bivand:2005}. Note that he \code{if} statement and the \code{plot} in the \code{else} part in the following is not needed and only checks if the appropriate packages are installed when building this document. <>= if(require(sp) && require(maps) && require(maptools)) { library("sp") library("maps") library("maptools") data("USCA312_GPS") # create spatial coordinates and a basemap using WGS84 projection. USCA312_coords <- SpatialPointsDataFrame(cbind(USCA312_GPS$long, USCA312_GPS$lat), proj4string=CRS("+proj=longlat +datum=WGS84"), data = USCA312_GPS) USCA312_basemap <- map2SpatialLines(map("world", xlim=c(-166,-47), ylim=c(15,83), plot=FALSE), proj4string=CRS("+proj=longlat +datum=WGS84")) plot_path <- function(path){ plot(as(USCA312_coords, "Spatial"), axes = TRUE) plot(USCA312_basemap, add = TRUE, col = "gray") points(USCA312_coords, pch = 3, cex = 0.4, col = "red") path_line <- SpatialLines(list(Lines(list(Line(USCA312_coords[path,])), ID="1"))) plot(path_line, add=TRUE, col = "black") points(USCA312_coords[c(head(path,1), tail(path,1)),], pch = 19, col = "black") } plot_path(path) } else { plot(NA, xlim= c(0,1), ylim = c(0,1)); text(.5, .5, "Suggested packages not available") } @ \begin{figure} \centering \includegraphics[width=10cm, trim=0 30 0 0]{TSP-map1} \caption{A ``short'' Hamiltonian path for the USCA312 dataset.} \label{fig:map1} \end{figure} The map containing the path is presented in Figure~\ref{fig:map1}. It has to be mentioned that the path found by the used heuristic is considerable longer than the optimal path found by Concorde with a length of $34928$, illustrating the power of modern TSP algorithms. For the following two examples, we indicate how the distance matrix between cities can be modified to solve related shortest Hamiltonian path problems. These examples serve as illustrations of how modifications can be made to transform different problems into a TSP. The first problem is to find the shortest Hamiltonian path starting with a given city. In this case, all distances to the selected city are set to zero, forcing the evaluation of all possible paths starting with this city and disregarding the way back from the final city in the tour. By modifying the distances the symmetric TSP is changed into an asymmetric TSP (ATSP) since the distances between the starting city and all other cities are no longer symmetric. As an example, we choose New York as the starting city. We transform the data set into an ATSP and set the column corresponding to New York to zero before solving it. Thus, the distance to return from the last city in the path to New York does not contribute to the path length. We use the nearest neighbor heuristic to calculate an initial tour which is then improved using $2$-Opt moves and cut at New York to create a path. <>= set.seed(1234) @ <<>>= atsp <- as.ATSP(USCA312) ny <- which(labels(USCA312) == "New York, NY") atsp[, ny] <- 0 initial_tour <- solve_TSP(atsp, method="nn") initial_tour tour <- solve_TSP(atsp, method ="two_opt", control = list(tour = initial_tour)) tour path <- cut_tour(tour, ny, exclude_cut = FALSE) head(labels(path)) tail(labels(path)) @ <>= plot_path(path) @ \begin{figure} \centering \includegraphics[width=10cm, trim=0 30 0 0]{TSP-map2} \caption{A Hamiltonian path for the USCA312 dataset starting in New York.} \label{fig:map2} \end{figure} The found path is presented in Figure~\ref{fig:map2}. It begins with New York and cities in New Jersey and ends in a city in Manitoba, Canada. %The path shows the typical behavior %of the nearest neighbor heuristic with first connecting the cities close by and %then making rather big ``jumps'' for the final cities. Concorde and many advanced TSP solvers can only solve symmetric TSPs. To use these solvers, we can formulate the ATSP as a TSP using \func{reformulate\_ATSP\_as\_TSP} which introduces a dummy city for each city (see Section~\ref{sec:manipulations}). <<>>= tsp <- reformulate_ATSP_as_TSP(atsp) tsp @ After finding a tour for the TSP, the dummy cities are removed again giving the tour for the original ATSP. Note that the tour needs to be reversed if the dummy cities appear before and not after the original cities in the solution of the TSP. The following code is not executed here, since it takes several minutes to execute and Concorde has to be installed separately. Concorde finds the optimal solution with a length of $36091$. <>= tour <- solve_TSP(tsp, method = "concorde") tour <- as.TOUR(tour[tour <= n_of_cities(atsp)]) @ Finding the shortest Hamiltonian path which ends in a given city can be achieved likewise by setting the row in the distance matrix which corresponds to this city to zero. For finding the shortest Hamiltonian path we can also restrict both end points. This problem can be transformed to a TSP by replacing the two cities by a single city which contains the distances from the start point in the columns and the distances to the end point in the rows. Obviously this is again an asymmetric TSP. For the following example, we are only interested in paths starting in New York and ending in Los Angeles. Therefore, we remove the two cities from the distance matrix, create an asymmetric TSP and insert a dummy city called \code{"LA/NY"}. The distances from this dummy city are replaced by the distances from New York and the distances towards are replaced by the distances towards Los Angeles. <>= set.seed(1234) @ <<>>= m <- as.matrix(USCA312) ny <- which(labels(USCA312) == "New York, NY") la <- which(labels(USCA312) == "Los Angeles, CA") atsp <- ATSP(m[-c(ny,la), -c(ny,la)]) atsp <- insert_dummy(atsp, label = "LA/NY") la_ny <- which(labels(atsp) == "LA/NY") atsp[la_ny, ] <- c(m[-c(ny,la), ny], 0) atsp[, la_ny] <- c(m[la, -c(ny,la)], 0) @ We use the nearest insertion heuristic. <<>>= tour <- solve_TSP(atsp, method ="nearest_insertion") tour path_labels <- c("New York, NY", labels(cut_tour(tour, la_ny)), "Los Angeles, CA") path_ids <- match(path_labels, labels(USCA312)) head(path_labels) tail(path_labels) @ <>= plot_path(path_ids) @ The path jumps from New York to cities in Ontario and it passes through cities in California and Nevada before ending in Los Angeles. The path displayed in Figure~\ref{fig:map3} contains multiple crossings which indicate that the solution is suboptimal. The optimal solution generated by reformulating the problem as a TSP and using Concorde has only a tour length of $38489$. \begin{figure} \centering \includegraphics[width=10cm, trim=0 30 0 0]{TSP-map3} \caption{A Hamiltonian path for the USCA312 dataset starting in New York and ending in Los Angles.} \label{fig:map3} \end{figure} \subsection{Rearrangement clustering} Solving a TSP to obtain a clustering was suggested several times in the literature \citep[see, e.g.,][]{Lenstra1974, Alpert1997, Johnson2004}. The idea is that objects in clusters are visited in consecutive order and from one cluster to the next larger ``jumps'' are necessary. \cite{Climer2006} call this type of clustering \emph{rearrangement clustering} and suggest to automatically find the cluster boundaries of $k$ clusters by adding $k$ \emph{dummy cities} which have constant distance $c$ to all other cities and are infinitely far from each other. In the optimal solution of the TSP, the dummy cities must separate the most distant cities and thus represent optimal boundaries for $k$ clusters. For the following example, we use the well known iris data set. Since we know that the dataset contains three classes denoted by the variable \code{Species}, we insert three dummy cities into the TSP for the iris data set and perform rearrangement clustering using the default method (nearest insertion algorithm). Note that this algorithm does not find the optimal solution and it is not guaranteed that the dummy cities will present the best cluster boundaries. %\marginpar{FIXME: Was sagt Concorde dazu?} <>= set.seed(4444) @ <<>>= data("iris") tsp <- TSP(dist(iris[-5]), labels = iris[, "Species"]) tsp_dummy <- insert_dummy(tsp, n = 3, label = "boundary") tour <- solve_TSP(tsp_dummy) @ Next, we plot the TSP's permuted distance matrix using shading to represent distances. The result is displayed as Figure~\ref{fig:clustering}. Lighter areas represent larger distances. The additional red lines represent the positions of the dummy cities in the tour, which mark the cluster boundaries obtained. <>= ## plot the distance matrix image(tsp_dummy, tour, xlab = "objects", ylab ="objects") ## draw lines where the dummy cities are located abline(h = which(labels(tour)=="boundary"), col = "red") abline(v = which(labels(tour)=="boundary"), col = "red") @ \begin{figure} \centering \includegraphics[width=9cm, height=9cm, trim=0 20 0 0]{TSP-clustering} \caption{Result of rearrangement clustering using three dummy cities and the nearest insertion algorithm on the iris data set.} \label{fig:clustering} \end{figure} One pair of red horizontal and vertical lines exactly separates the darker from lighter areas. The second pair occurs inside the larger dark block. We can look at how well the partitioning obtained fits the structure in the data given by the species field in the data set. Since we used the species as the city labels in the TSP, the labels in the tour represent the partitioning with the dummy cities named `boundary' separating groups. The result can be summarized based on the run length encoding of the obtained tour labels: <<>>= out <- rle(labels(tour)) data.frame(Species = out$values, Lenghts = out$lengths, Pos = cumsum(out$lengths)) @ One boundary perfectly splits the iris data set into a group containing only examples of species `Setosa' and a second group containing examples for `Virginica' and `Versicolor'. However, the second boundary only separates several examples of species `Virginica' from other examples of the same species. Even in the optimal tour found by Concorde, this problem occurs. The reason why the rearrangement clustering fails to split the data into three groups is the closeness between the groups `Virginica' and `Versicolor'. To inspect this problem further, we can project the data points on the first two principal components of the data set and add the path segments which resulted from solving the TSP. <>= prc <- prcomp(iris[1:4]) plot(prc$x, pch = as.numeric(iris[,5]), col = as.numeric(iris[,5])) paths <- cut_tour(tour, cut = "boundary") for(p in paths) lines(prc$x[p, ]) @ \begin{figure} \centering \includegraphics[width=10cm, trim=0 20 0 0]{TSP-clustering2} \caption{The 3 path segments representing a rearrangement clustering of the iris data set. The data points are projected on the set's first two principal components. The three species are represented by different markers and colors.} \label{fig:clustering2} \end{figure} The result in shown in Figure~\ref{fig:clustering2}. The three species are identified by different markers and all points connected by a single path represent a cluster found. Clearly, the two groups to the right side of the plot are too close to be separated correctly by using just the distances between individual points. This problem is similar to the \emph{chaining effect} known from hierarchical clustering using the single-linkage method. \section{Conclusion} \label{sec:conclusion} In this paper we presented the R extension package \pkg{TSP} which implements an infrastructure to handle and solve TSPs. The package introduces classes for problem descriptions (\class{TSP} and \class{ATSP}) and for the solution (\class{TOUR}). Together with a simple interface for solving TSPs, it allows for an easy and transparent usage of the package. With the interface to Concorde, \pkg{TSP} also can use a state of the art implementation which efficiently computes exact solutions using branch-and-cut. \section*{Acknowledgments} The authors of this paper want to thank Roger Bivand for providing the code to correctly draw tours and paths on a projected map. % %\bibliographystyle{abbrvnat} \bibliography{TSP} % \end{document} TSP/vignettes/TSP.bib0000644000176200001440000002704512606077054014073 0ustar liggesusers@INCOLLECTION{Garfinkel1985, author = {R.S. Garfinkel}, title = {Motivation and Modeling}, year = {1985}, chapter = {2}, pages = {17--36}, crossref = {Lawler1985}, owner = {hahsler}, timestamp = {2006.11.06} } @INCOLLECTION{Hoffman1985, author = {A.J. Hoffman and P. Wolfe}, title = {History}, year = {1985}, chapter = {1}, pages = {1--16}, crossref = {Lawler1985}, owner = {hahsler} } @INCOLLECTION{Johnson2002, author = {D.S. Johnson and L.A. McGeoch}, title = {Experimental Analysis of Heuristics for the {STSP}}, year = {2002}, chapter = {9}, pages = {369--444}, crossref = {Gutin2002}, owner = {hahsler}, timestamp = {2006.12.07} } @INCOLLECTION{Johnson1985, author = {D.S. Johnson and C.H. Papadimitriou}, title = {Performance guarantees for heuristics}, year = {1985}, chapter = {5}, pages = {145--180}, crossref = {Lawler1985}, owner = {hahsler}, timestamp = {2006.10.06} } @INCOLLECTION{Johnson1985a, author = {D.S. Johnson and C.H. Papadimitriou}, title = {Computational complexity}, year = {1985}, chapter = {3}, pages = {37--86}, crossref = {Lawler1985}, owner = {hahsler}, timestamp = {2006.10.06} } @INCOLLECTION{Punnen2002, author = {A.P. Punnen}, title = {The Traveling Salesman Problem: Applications, Formulations and Variations}, year = {2002}, chapter = {1}, pages = {1--28}, crossref = {Gutin2002}, owner = {hahsler}, timestamp = {2006.12.06} } @INCOLLECTION{Rego2002, author = {C. Rego and F. Glover}, title = {Local Search and Metaheuristics}, year = {2002}, chapter = {8}, pages = {309--368}, crossref = {Gutin2002}, owner = {hahsler}, timestamp = {2006.12.06} } @ARTICLE{Alpert1997, author = {C. J. Alpert and A. B. Kahng}, title = {Splitting an Ordering into a Partititon to Minimize Diameter}, journal = {Journal of Classification}, year = {1997}, volume = {14}, pages = {51--74}, number = {1}, owner = {hahsler}, timestamp = {2006.12.19} } @MANUAL{Applegate2006, title = {Concorde {TSP} Solver}, author = {David Applegate and Robert Bixby and Vasek Chv{\'a}tal and William Cook}, year = {2006}, owner = {hahsler}, timestamp = {2006.10.06}, url = {http://www.tsp.gatech.edu/concorde/} } @ARTICLE{Applegate1998, author = {David Applegate and Robert Bixby and Vasek Chv{\'a}tal and William Cook}, title = {On the Solution of Traveling Salesman Problems}, journal = {Documenta Mathematica}, year = {1998}, volume = {Extra Volume ICM}, pages = {645--656}, owner = {hahsler}, timestamp = {2006.10.06} } @INPROCEEDINGS{Applegate2000, author = {David Applegate and Robert E. Bixby and Vasek Chv{\'a}tal and William Cook}, title = {{TSP} Cuts Which Do Not Conform to the Template Paradigm}, booktitle = {Computational Combinatorial Optimization, Optimal or Provably Near-Optimal Solutions}, year = {2000}, editor = {M. Junger and D. Naddef}, volume = {2241}, series = {Lecture Notes In Computer Science}, pages = {261--304}, address = {London, UK}, publisher = {Springer-Verlag}, owner = {hahsler}, timestamp = {2006.10.06} } @ARTICLE{Applegate2003, author = {David Applegate and William Cook and Andre Rohe}, title = {Chained {L}in-{K}ernighan for Large Traveling Salesman Problems}, journal = {{INFORMS} Journal on Computing}, year = {2003}, volume = {15}, pages = {82--92}, number = {1}, owner = {hahsler} } @ARTICLE{Climer2006, author = {Sharlee Climer and Weixiong Zhang}, title = {Rearrangement Clustering: Pitfalls, Remedies, and Applications}, journal = {Journal of Machine Learning Research}, year = {2006}, volume = {7}, pages = {919--943}, month = jun, owner = {hahsler}, timestamp = {2006.10.06} } @ARTICLE{Croes1958, author = {G. A. Croes}, title = {A Method for Solving Traveling-Salesman Problems}, journal = {Operations Research}, year = {1958}, volume = {6}, pages = {791--812}, number = {6}, owner = {hahsler}, timestamp = {2006.11.29} } @ARTICLE{Dantzig1954, author = {G.B. Dantzig and D.R. Fulkerson and S.M. Johnson}, title = {Solution of a Large-scale Traveling Salesman Problem}, journal = {Operations Research}, year = {1954}, volume = {2}, pages = {393--410}, owner = {hahsler}, timestamp = {2006.12.10} } @INPROCEEDINGS{Gomory1963, author = {R.E. Gomory}, title = {An algorithm for integer solutions to linear programs}, booktitle = {Recent Advances in Mathematical Programming}, year = {1963}, editor = {R.L. Graves and P. Wolfe}, pages = {269--302}, address = {New York}, publisher = {McGraw-Hill}, owner = {hahsler}, timestamp = {2006.12.10} } @TECHREPORT{Hahsler2007a, author = {Michael Hahsler and Kurt Hornik and Christian Buchta}, title = {Getting Things in Order: An Introduction to the {R} package seriation}, institution = {Research Report Series, Department of Statistics and Mathematics, Wirtschaftsuniversit{\"a}t Wien}, year = {2007}, type = {Report}, number = {58}, address = {Augasse 2--6, 1090 Wien, Austria}, month = {August}, owner = {hahsler}, timestamp = {2007.12.04} } @ARTICLE{Held1962, author = {M. Held and R.M. Karp}, title = {A Dynamic Programming Approach to Sequencing Problems}, journal = {Journal of {SIAM}}, year = {1962}, volume = {10}, pages = {196--210}, owner = {hahsler}, timestamp = {2006.11.27} } @ARTICLE{Hubert1978, author = {Lawrence J. Hubert and Frank B. Baker}, title = {Applications of Combinatorial Programming to Data Analysis: The Traveling Salesman and Related Problems}, journal = {Psychometrika}, year = {1978}, volume = {43}, pages = {81--91}, number = {1}, month = {March}, owner = {hahsler}, timestamp = {2007.12.04} } @INPROCEEDINGS{Johnson2004, author = {David Johnson and Shankar Krishnan and Jatin Chhugani and Subodh Kumar and Suresh Venkatasubramanian}, title = {Compressing Large Boolean Matrices Using Reordering Techniques}, booktitle = {Proceedings of the 30th VLDB Conference}, year = {2004}, pages = {13--23}, owner = {hahsler}, timestamp = {2006.12.19} } @ARTICLE{Johnson2006, author = {Olin Johnson and Jing Liu}, title = {A traveling salesman approach for predicting protein functions}, journal = {Source Code for Biology and Medicine}, year = {2006}, volume = {1}, pages = {1--7}, number = {3}, owner = {hahsler}, timestamp = {2007.11.28} } @ARTICLE{Jonker1983, author = {Jonker, R. and Volgenant, T.}, title = {Transforming asymmetric into symmetric traveling salesman problems}, journal = {Operations Research Letters}, year = {1983}, volume = {2}, pages = {161--163}, owner = {hahsler}, timestamp = {2006.12.05} } @INPROCEEDINGS{Kruskal1956, author = {J.B. Kruskal}, title = {On the shortest spanning subtree and the traveling salesman problem}, booktitle = {Proceedings of the American Mathematical Society}, year = {1956}, pages = {48--50}, owner = {hahsler}, timestamp = {2006.10.06} } @ARTICLE{Land1960, author = {A.H. Land and A.G. Doig}, title = {An Automatic Method for Solving Discrete Programming Problems}, journal = {Econometrica}, year = {1960}, volume = {28}, pages = {497--520}, owner = {hahsler}, timestamp = {2006.12.12} } @ARTICLE{Lenstra1975, author = {J.K. Lenstra and A.H.G. Rinooy Kan}, title = {Some simple applications of the travelling salesman problem}, journal = {Operational Research Quarterly}, year = {1975}, volume = {26}, pages = {717--733}, number = {4}, month = {November}, owner = {hahsler}, timestamp = {2006.11.07} } @ARTICLE{Lenstra1974, author = {J. K. Lenstra}, title = {Clustering a Data Array and the Traveling-Salesman Problem}, journal = {Operations Research}, year = {1974}, volume = {22}, pages = {413--414}, number = {2}, owner = {hahsler}, timestamp = {2006.12.19} } @ARTICLE{Lin1965, author = {S. Lin}, title = {Computer solutions of the traveling-salesman problem}, journal = {Bell System Technology Journal}, year = {1965}, volume = {44}, pages = {2245--2269}, owner = {hahsler}, timestamp = {2006.11.29} } @ARTICLE{Lin1973, author = {S. Lin and B.W. Kernighan}, title = {An effective heuristic algorithm for the traveling-salesman problem}, journal = {Operations Research}, year = {1973}, volume = {21}, pages = {498--516}, number = {2}, owner = {hahsler}, timestamp = {2006.11.27} } @ARTICLE{Padberg1990, author = {M. Padberg and G. Rinaldi}, title = {Facet identification for the symmetric traveling salesman polytope}, journal = {Mathematical Programming}, year = {1990}, volume = {47}, pages = {219--257}, number = {2}, address = {Secaucus, NJ, USA}, issn = {0025-5610}, publisher = {Springer-Verlag New York, Inc.} } @ARTICLE{Prim1957, author = {R.C. Prim}, title = {Shortest connection networks and some generalisations}, journal = {Bell System Technical Journal}, year = {1957}, volume = {36}, pages = {1389--1401}, owner = {hahsler}, timestamp = {2006.10.06} } @ARTICLE{Ray2007, author = {S. S. Ray and S. Bandyopadhyay and S. K. Pal}, title = {Gene Ordering in Partitive Clustering using Microarray Expressions}, journal = {Journal of Biosciences}, year = {2007}, volume = {32}, pages = {1019--1025}, number = {5}, month = {August}, owner = {hahsler}, timestamp = {2007.11.28} } @MANUAL{Reinelt2004, title = {{TSPLIB}}, author = {Gerhard Reinelt}, organization = {Universit{\"a}t Heidelberg, Institut f{\"u}r Informatik}, address = {Im Neuenheimer Feld 368,D-69120 Heidelberg, Germany}, year = {2004}, owner = {hahsler}, timestamp = {2006.10.06}, url = {http://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/} } @ARTICLE{Rosenkrantz1977, author = {Daniel J. Rosenkrantz and Richard E. Stearns and Philip M. Lewis, II}, title = {An Analysis of Several Heuristics for the Traveling Salesman Problem}, journal = {{SIAM} Journal on Computing}, year = {1977}, volume = {6}, pages = {563--581}, number = {3}, owner = {hahsler}, timestamp = {2006.11.13} } @BOOK{Gutin2002, title = {The Traveling Salesman Problem and Its Variations}, publisher = {Kluwer}, year = {2002}, editor = {G. Gutin and A.P. Punnen}, volume = {12}, series = {Combinatorial Optimization}, address = {Dordrecht}, owner = {hahsler}, timestamp = {2006.11.29} } @BOOK{Lawler1985, title = {The Traveling Salesman Problem}, publisher = {Wiley}, year = {1985}, editor = {Lawler, E. L. and Lenstra, J. K. and Rinnooy Kan, A. H. G. and Shmoys, D. B.}, address = {New York}, owner = {hahsler}, timestamp = {2006.10.05} } @comment{jabref-meta: selector_journal:} @comment{jabref-meta: selector_author:} @comment{jabref-meta: selector_keywords:} @comment{jabref-meta: selector_publisher:} @Manual{TSP:Hahsler+Buchta+Hornik:2006, title = {seriation: Infrastructure for seriation}, author = {Michael Hahsler and Christian Buchta and Kurt Hornik}, year = 2006, note = {R package version 0.1-1}, } @Article{TSP:Pebesma+Bivand:2005, author = {Edzer J. Pebesma and Roger S. Bivand}, title = {Classes and methods for spatial data in {R}}, journal = {R News}, year = 2005, volume = 5, number = 2, pages = {9--13}, month = {November}, url = {http://CRAN.R-project.org/doc/Rnews/}, } @ARTICLE{TSP:Hahsler+Hornik2007, AUTHOR = {Michael Hahsler and Kurt Hornik}, TITLE = {{TSP} -- {I}nfrastructure for the Traveling Salesperson Problem}, JOURNAL = {Journal of Statistical Software}, YEAR = {2007}, VOLUME = {23}, PAGES = {1-21}, NUMBER = {2}, MONTH = {December}, ISSN = {1548-7660} } TSP/vignettes/overview.odg0000644000176200001440000003027712606077054015311 0ustar liggesusersPKAOx5.++mimetypeapplication/vnd.oasis.opendocument.graphicsPKAOx5Configurations2/statusbar/PKAOx5'Configurations2/accelerator/current.xmlPKPKAOx5Configurations2/floater/PKAOx5Configurations2/popupmenu/PKAOx5Configurations2/progressbar/PKAOx5Configurations2/menubar/PKAOx5Configurations2/toolbar/PKAOx5Configurations2/images/Bitmaps/PKAOx5 content.xml\nߧm1BbK$] H& 3`$VGX,K퉓Ɖs\IyaGaYHk,ģ~̮_~R =rSo$Wf\[()XLLesoӽX\}3a0p5jl3`?d蟬.~`)XSG ߋ,6_!CߏHIŵ@ eN(ހ^aRUmM )>/ \Td[4ϹHnwrޢT5t08(-{ f4< DjGph,(zY߯W~h".] 2A [VlѵRR'6:s'ߔʕnhS_tMM eh߾5Ig*Y.*c X>˫[4X^*[,Y{s^H&>bNӞ.8Jʟ!8j7ʌ$mfm4= Y4?iWx:4_N6fdcsc' ]L}’]9Yz@ڲ.WîaW=~P:uqy;c N~vH=Z/__"44a$5mt1ރ(>w˅Qm8oG=fsJ}xE,4: ?tO!CGjۇξ%/S_J(A[8"I''("TtvQ..Sw-=u rV,2~AYjm,bq=`1b4$x{0( (# '3"<uI'Cgo!9o!d& !M3=>o4N;'Czq=!Bo3N3Ad@. f|W潸o}E͟\ݣ{I}y6^j_x囗w$͐LY㎙w)l@|Dۏ% 8"RҕI__RQ?V=^ȋ[zP&@uNjTݭWY'siiiON%'+'ɜÇIB, .钁&zYNaF'&*_8mFԥI? k(bnskrkzr?޴b#Omt4]C~FW/62U ltѝ7W3faKvC':1tbs[:* F90uI|YJѥά[2}gtWLIRj/׾AUpTN,LHW{0:S_T޻w5fI/H1ĤSOldV9hA MA™ R٭nach@#y(9be*xD,f;k L#0]zy%9]qz+gt[>xE!1bVUKhߎ ڕ*J VY~kw畦u_#}xxow9=l[|d EjrPRmmxC\ҘCyr92(rF؎#gőWN궢稜Yܴ> M-ٶ8T8Gu1m sxV`ƠM:UN[Q-NF'鳱lguChG|@:n~0mc()P- h) CB@PMCR}Lu8cC d hm3~LO8Mr#k`.ѳNwqZ'Y(tw%YX!4wjN8QVJ&a_ǫi-R>_ n;]n;BVk#q=kOViVZ8%ז#垡_ ڦ g۲f,u5Y,쇗:>7vu-ԛPK-<( LUPKAOx5 styles.xml\͎6)֏ev-hsAKDZ=$%xw݅ YsfęΘoȸ#<,Y6 ,vm0߾5 CU<&@8D$3@8V6shJpLW,%I)jrTzD=lbnJ r/ Kޖ, Y17C%/`P,B!C>S,M>͝ʲd?0ri)j_9W[$"rr&UDIަJIo dUSN2`s_{PS_wua>sUpWM].w@T+K9MJU)7R׵mҟ{N v,#B]c"w+c x{'t0EXl7ekEg `m9ۛ8ꎒO~mچm18x_rε2di1uL8Spfp%; cD+$YOCLh3wJg̦7WQ =bXro)XÒpA!iL e)ɌiV;lli"W@^ӈtm83/Je(f<>HlJR $ KdzUO4(# VfoV.:6|=R,biJ)~xOM'{4~-#ڒkKGJs*i=[F\\/j,6[ 4DpPǏ]S~ɑpu(EjURAToVI#u~%]Zʰ5X:uV$зv֞*=t NmW|n(Ag@ =ȤgqkpomK:~s+T}^hTqIiUT#˥rX`w&h6Lh 8* KDQ2"}6I,MZ/,:MG4 Fzm("D95 ;u>b~8D4cwϩ{1C40Iɨd6aD>+JL T>)r&DȻ"BjE"4BϫBjy/4N/ˌӎ}5f@ a9ۏJ8偿=XUOê#Zޱ lI"JQRՕE| A N5U; $,y1[DuOY= =Vjc5ִaNqe_G'lh˚DC%sh^uaQkEt7QsQU@m>_쩀0շk͔3RtZ^hpfT4Qre~.8ޕ_y8sn[)5Ho;;/Y"!r3iٌ|Ծ煭[:ұ_:Ko_:K~/}^~/~iY2є.Is{e֭ 06 3pՍ^,GWGЮ/ }|5ڽ09c]=7XWuXWuXW6Bc]}Zx|6RE(.rFgzї5y+/>8]g8FU%Fx> Zeˡ{Zf:QZDc?~mv. Uw9NrKPqupQ*:QI(ak追4\i>?"D-YLePk]Lܙ榕bֿL w|6 5l = ůu@R9xdr0&w B3 OpenOffice.org/2.0$Linux OpenOffice.org_project/680m5$Build-90732006-10-06T11:33:592006-11-24T10:58:02de-AT20PT1H18M25SPKAOx5Thumbnails/thumbnail.pngL PNG  IHDRFKҟ IDATx]?lDN,P;hw8,Ud]YQj-Pw1*CEJ @y#!BuA$`^hɂC[Wcx&ཻZe;;%9$:)Ł;c7|a۷3[ޢ˶y֤n6 ZtUqH %)?Ym2H 's&8;Q7 2MV;"Bp}c},GgRMwE${a].ѳ0!GKdY!i$l5za &d`ڍםkJ.-޳=ZYQo9j'z.|`*+  F7^\?;eZm.cU*7:DU: -'gܥRf%Vϯ;'$=1p䱬/fy3O[Z^^sMӳw دeFEB74 | 1cL 9++LdUk̀I@`Ҁn$DDVF IJ(%G+ݰCtչ('kf?\N3`RـN7gzM(N6ɓKLq FD%9J!Y,ʿgZW XㅙDV~{w_ݱqhO޴]E{R6gPUhh7H[LUgS;&¦-&as^74$x/w$9Ym49$w qN=PV,akn90W4 S=Z.t0$j3 [z SgjuM*| "si G$A&ʸO—~*Kiedsvi-?Ne/kzu;_/94M@X;&(Doؕ4i>6~X dQZ4qK~P,k%x$ =.y!OL"|eQ/ܤҧ_rڕ|ǮLڊo~A%FoTZȿAoT{R@5X񇿓q&/}QuE;eÃZ6UqUP~ps.e+5>GK7gz p$::3fO޼#2f; (''I+~ϊu}Xp"=P$0 Yʈa(Av@ZhjuHKmZ(\I~mLS}31x}XJ4_lXu&Fa>FE!*[緈`5,\-~=e8Rq~]mu-,v$sb 4zS8B2ӔEgu2_;;WJxȡrT6^4Ƶ_tsٗdа\Y W+Z(R.2?6U "G  H7Om[Ƭ3]P^Tis@B%1 <>H셯@SG8\:q{6{errHP vCՏAJڣ'dts?2@?F8M yl12˞!'bH8P;QAꨔ#G˸'*TGEH5'cEO+t( ^e?V K|1ZG^s8VWYr4m@/x؆ &! a1lǝE  5^3~N/P87 /B 'bڼ(k= O@Co L~qy^@ Ѽnd_bY=pZN\G TQyTeX/^*%Ҽ[ݭכ_(L*\8$G|,K[ ]3sL&!:y!<H" 6~%ހ)+/VT'C5<߇B傤w^3RE@ xhX*L!\(t KA RFjJh/ j' o$9G 1ԈysmIENDB`PKQ L PKAOx5 settings.xmlZr8}߯HQ[[@@%L[`0ooR@,$9|H성恀.紺ۭ/+\<#.0e&u Ԡ_KߦcOOB,FTR-j;}@DAZ V_]6#+>)y%s# vH(( }O#߳Ok1秢lVg 7l djacr*^(g䍮0zީcζ;KclmO1^=!!0&GϜnR5LW7;Idb0 lu@7S6pҘBB y(S$F^)$W*jFǰ!81F qFu|Qf ܍sS~mbB)ΠȒ5gi3%s6qEPH0 v]5nP%HfdR&bnc$LGwt]RBuhw{M .4DcQZ̔*ϒ0`a"wK‰c7uޔ գ!" # !Jx s [>Z*ġw|Sse"H2/']E')?L?Gtt#W;s؉"M"J9;\X5.;pcAd8S2qؾk#$ɩf\A i0Kcc9/4M6ȍs)j)cw1 J¦mƯtL!@$82TR]amtU%06lU^;WgM#ɬh 9aDN\"mO@瓕w1>"j]ȦJ݀"h+ѭ!f?bJ8Gm- v 1-U 7}|GXdG|H+szY~CBټRKIU J- JOP2z|lu&ӛkXe'QTs$94z+%>ND~AU N2@FtS=" \gMr!YmF9p=׶ 'u\@aܖLsSoP<>2*n2q#?z7{^P-]uz^2 c2Zv=RuՕSy͊mˋt\ʀJf2ʭBۛ: 0;j2i9ɸ(/kՇAn +Nu:.h1[;~gnv6*Rg2d#}RbHC۝T yb`yʝ뛣V4cՊą0$c.mʛwS<&Bϒ8b<(sT)i]EX|H!_Tʝz18{oIjN7IQׂpqr՛5\AkagMv@|6s-,2O\څ'.?PKANPKAOx5.++mimetypePKAOx5QConfigurations2/statusbar/PKAOx5'Configurations2/accelerator/current.xmlPKAOx5Configurations2/floater/PKAOx5Configurations2/popupmenu/PKAOx5NConfigurations2/progressbar/PKAOx5Configurations2/menubar/PKAOx5Configurations2/toolbar/PKAOx5Configurations2/images/Bitmaps/PKAOx5-<( LU 1content.xmlPKAOx5Kq?E styles.xmlPKAOx5Koometa.xmlPKAOx5Q L HThumbnails/thumbnail.pngPKAOx5h.% $settings.xmlPKAOx5AN7+META-INF/manifest.xmlPK,TSP/vignettes/overview.pdf0000644000176200001440000003513512606077054015307 0ustar liggesusers%PDF-1.4 %äüöß 2 0 obj <> stream xXn7 Wh"~έ@uv/y$ܑ<8Dԃ:#rcΞOѰw;bOȏlB99CB6TmMk m&{v=/.-?_p׏ qy\ 4)8|6$]̝0sR;'&Elތ0.,I yes9R˜^7꽭WI ݍ;UTz=:ŵvc+ܮlH_ 8"x4èԳLJ!̅m{=+ۋWg>MD7@6($4)',jB4P-Ym Ɉ0HyWxO 쭱(RFoQ GV%l1uA#-6نٝD`P @ CH$J EDE$P..)m]7m;V$a 3B>P492Q M9ثet Hцb.ZJ cJ ׽47d]nc0fŌ0ᤶבX5esPC/:8[(]W|(=Pr >U)v=U u{'WA1$Wݦs/5{c:49˚:|@qnZ\YLP!pprwkb4U MPZicNs2imh)(X $>Tɔ`򠧥II1h[48^x$f4fҟfV`~5aoGȫe)hf b].&&wF0I.VGTDB~],&ލ޿==DXB&)HR?D,5\_&jة4+1YWG;rӧmS ЮG6WMJ@̓*jf%L#߿P}x9'?s.l` endstream endobj 3 0 obj 1405 endobj 5 0 obj <> stream xW{P\gǾ𺰰OBKxIh$rv&MӇMjӇmcDZ>:uik?:mtԚ86ZM8ڎS9<~|;nt.&TrD ;gB$G%V >K8ǵo !*&%g6 IIWnI-_:.>3oK4=/F$ȴ\İ?$}_}<B2LHHLJ^6O1["ɠrssEE4MxcR ar\Ӝcv5ndݶ{7tjVDj)71F-.a7Vj.I2E*; BFe=w.;MȾ;ܕU4Ѽ*lݸyi\Sv*00\[?RZahH,r;x~ T JnLtNK%e١Kôz&kj9DŽY<[j]lUMC0_Ö?ѩspKG*-N6S51{坞MXdR, &ڭ<eAFR^e.d $en~= Wws}}Ǖ=}%{0 u䨾\9 *:~̰gp-+$|:c`G$`4R^x rrgM׆i7;褱]gv4lS~ʖ'w?jPݸr8Y$OW&0yWr%jΒ>ԑg\_jvV>th^dw߯ :Rg0L@}7_~Kרϳ<)P6j@r}WG\mKepGtPw4XX|#6OuYAIԱ,7tm\B?/@r YުU.lbR*z|&KTލ兎#U<6\)k&IjfSRf?f5~pC elvV<٬&>?ysر__|Qsb@QO[Q@)76כRy џP-з ;E-7C=23yf_'C qjm5b 7#KA Z?ݱ]80AOMoӶ:0X BL…ɖxw:@3nql'`ǁpY_uGw遣u+];<{9 qwTQnxx`NUwxQrU.t;OGFN7ҕ}[_fc=ZOFovgkOo۴.22}橡=*O;4}Ɵ_*.T궙J֦hћÑdomW;s- \-ȕs5aY(hX*ϔNd,)gie⅔ۏNIiaM/xkĕ:zɧ>E=&5 QXsTba/= *n 5Lx!L{Hd9!]\BV+@AV ނFWKΒ?O N6nbٗvU +NPj6EO;K೅kSȡ URF5:qNDF'9FgFHhB qZєdӻ4tF H.F''K$Ͷht9:4:dh T3Fg[ }5"uėE,HQ^ScWzu9INr,<尕{`,Q<7!^3mеj8s Js!9%gX*zMJbl^q1:_:1G1q>6:%bT{RXψљ`@dF#6‚u"-ej~hG蜼FEq*̋ai%qdI'xUI,"1[ckv Uk:K-5Z ~U$$Jĺf1i̓c#!" ]Α K-ljGu\^KܤG ͽqhݐ*עy_X}O}@g,E/j(B#d \@ՊB_$QW j3_՞nuTPN:'6|ԯðj{j4.n,xiУ/崈uJݡqܹ 0AyʈaZ~aHZUzSj~cQZi+jU}!5bPQ Yj=I MiϜ_ǦxD_a[ endstream endobj 6 0 obj 2838 endobj 7 0 obj <> endobj 8 0 obj <> stream x]Mn0Fta$BJIXG=1CTeȂ3Ro/Eul?ǯ~45̢maoހJDۛo34.CmL3 ,ⷰ7~c;^!_| W(갮o}v2sB<5 uՆ~^֡/8 5|ceR"+<H.t!BTmN7f'%8UȚ~q~gNĚȏ;:`̉3'33Ur{*ɼGf@f+O)Z#> endobj 10 0 obj <> stream xX{l[y?^DJLR},J,JSÒ%YOK-˖H銤Wڎޒp֤1c6n;Y j"@2 qץ: 4@lj9ȥG *H(D"f#N""7.Sxa_+BHbP@({@aUoFRqplѮ.G|0 ,hE9B%SB]=sAT5<>`SafTl޲u))-CNQٯcTrCBy(DEJΡ5rSRTi)X`.sGx޼E8BBmo v5cX v Ys!瘁! } X&єZ[2c0*j *,mݴ;&Z渶ZF_#$!3Mت[f2xdok/Ճ] ]!6b@EvzMnrIIyyJѤ0z;DLΚm v Nmx=dVK \G{-ӥyj~`zlpf7Fo2.f@mk Z| Q)B29;!23:YZ{K33 ^eo˶hm|h9:r0#(dq sp8zABЯNVF{Y[V\П.kfI$&}o uWhG^粫fjR \m2jU!̔?q t'Z PXisR md]G*2!dKmKGCU}yKho)!ql[BQm5= Ivj׿\R!!!=Y?}vK|_QdrQ]h EEOqɘi!X y ;dFs#B <ꛄ?On+)leb)ޭr]qaD: b]`.'|]2}}'x6wz~{\$Zb՜yd4hUx&Y b;hڤKUҜ-l={N=J|lqx>fR ?_s` )(SSSSb`d*R゚TXmmcqI3l݇ Ӈ'GvZg܇jqy;shٽVg2ꪕ<@| +y <}~ JꚙEU=L+ud{teuAcWC]UR5RYhm=2J5skcRHb઼RHU6l̨b="-XXi6ğP{8q( @0 Lt(t/LZ?00k/Mb)^=|+znV{ ݬרM c.8yb]ҢJlޚ Y*BW3x z_2!?JB^$dO|Stwn֧!;Ss*ҥJqjrT%tIIIB{rK޽~b)CgiVzBsvu+Ŋ#nNCq$A:{:B++ n߇F%>>1άBfeCa nzłꝬ85wExm4 Zo{bf70R ˽y}/]WUC1K 1mni1یscsM2pNJ:ڨ쮙3gN?P$24 kt _=?qJ٥M x|kn69%o__k0厠No[Yͬ[ Қ&)|0-P[pcn5؆.%.!(\~(ŝQ U*jJeիOssr15%v"߾/tr, 5j]r~8mC9VKntO96]XܰJz6 (~XS1]sa_B+@³S !ZF q k_yM1*TUq ghBɱ 8TX {|tApVSΣUcZVgXGeVhD(fcJ4y3aV! S ]u fg5|H^~a9c.8qRy.sL0L(]^J8tErFcJWlu9GgcXc+~IWp ke)2?10ӷcQg 8 3ǔϝJXOIz.t[NȲ4O-KG|P,j/cؠ<JGcTw,{Ԥlq߬<Omc-YnG`Q}k xn'0΃U:`2?M(2pQlL71FEw +blɐk`|. ^BK{]xu|h vfa7n.Ht@)ƓA6(ÊnFK1,(ScN>ЍP4 \O`Nr,PhM\ \{06Ӱ1)]$>1"wv!jd) @}g#[f l+ uh@#tiE>4${k̫phj^??9 kC03L.jUx~ '1R}TaT$1 CpRb4h&Q< =҈[e^]>CܷJM,Zʛmyd**VF}*1VyC,3,#`)UdVBcSȬcj$XHyK\ ZU_$\#ʺlQX[2Uj@գj }fG [h]]Ua; XQbqA+&Jf{iYeb?wǨY¿|}L#*tE*""6 {aeݴhmmeS^D9o endstream endobj 11 0 obj 3916 endobj 12 0 obj <> endobj 13 0 obj <> stream x]n0 3SLJ2b/_?E $ǔ{xOSQJu?=!O1P.'q|3?o3=,/vv0d1o/ endstream endobj 14 0 obj <> endobj 15 0 obj <> stream xYmlS~Ͻ0|$8!_7`F c8N}+]@*M]UNn:NӴiu?6i۟iժ c*sI t{ss}sX֠΀ 4jx NtN `/J*377;|`R'LĎ'es#'yn񝦣&l'Y;?Q8Ym-O/xy`3G>vf֖ddXkjm Hs .I/*Z |@{F.M"K̺ML>BXp7܁YxnJ/ޚHck#Eކ(6xVj`=?Р?lBO-xУ}6`=j&S.ܶ?|}>>~xb>gKHa5uuw4 1Ct0p太.ɽCҠ{F2WgΌJ ?DɢE);]hP]+NU}{%ɣI/+q5c\>Xq+IeQS LfY_[ >{Y0MrkH;j _{3-X<+%bmI[_qlB㊮/%E  !wI}StRR﬚8}DU]؎,|Ѱ77(+FQ2/#^6aip ywC]k5[9c}Rvy6ѾL-P|;0n7Sn%^,@/L{`tVU].L'N.\"_^M&4ezNb]L5b8%ǓFFZCG~kS_v?kv%|Ό`O!/m [|nߨ[{k^~SeVs>`$${ Γb<~gϊ"ٞx#B/I֓m+0k*X0f2]fE@>e耭+K6zV`3*^]X HZ#d ɈNISK^XfrM`yc3rR 4H1#}c r+^zY`1VeY`9a#g&Jh_P`7VeT`t)O l5ei_cKײ\n 2#ı 9Y1W3w83? y0979^eyL`-iYW1-oF-#ฎuT`\a̱e}S`KӋOML`g.SscSh3u2;#:VoWV`C[3~I`*0rl͍̎Yюyǰrh%.c p9:Ƶsl#ϛxE`V^KN+:%9o79.qmכ,0zJ`P0&t舴k_cti@~B5:/q=υH>Wp>)v;h1 񄖤ݝݛ{6Jㇴb L!#ީtpRFTL*S񜎖J)-S=Ow;Vgx&{ -W“^mo r0zޞhO280tb9T:ABg"k4?9GT)(U8n iB?s.$^u(@/w8$"vH *dp۱0EC8p{j6Z8iTKgK4V%-^/W[1^bPށ׶exKl,VT cOHbi{xyR,*2|X[w1ЉPZYBo[cl`wB7lvac_Rc zg[A-S,\vgJ5VFT3=O%9SJpkm>K!Ws2~g Z,t1i8;r"x,-gFlv}>:̣]+wtUw-I7Lf\QYׯTQuiz;uN?08NS8KbbķY?-V4F?3쩬Q-}9*=ا*WUˇ;뻒Q%]e2)CJң< (-+/~ ߳ZWYNWIh Za??X?t1Zf3̜KG)1TlfWL7qI{ |)FRNFYcaڍ7?!Bc;/KgŞiܧi4Jf, endstream endobj 16 0 obj 2613 endobj 17 0 obj <> endobj 18 0 obj <> stream x]n E|tI$Rʒ}n>EaߗGJ]0ftOY{pxJXXj9&Pc!G33xo-Ny Bȫ`>Wc`0Eu33/l]Nt[8Kp-`1ejTQZmkJew0Of4RJOsl7IS.{\D)19qyIL_#/{7ݰϟ5`ZWgSKb xK endstream endobj 19 0 obj <> endobj 20 0 obj << /F1 9 0 R /F2 14 0 R /F3 19 0 R >> endobj 21 0 obj <> endobj 1 0 obj <>/Contents 2 0 R>> endobj 4 0 obj <> endobj 22 0 obj <> endobj 23 0 obj < /Producer /CreationDate(D:20061124105806+01'00')>> endobj xref 0 24 0000000000 65535 f 0000013835 00000 n 0000000019 00000 n 0000001495 00000 n 0000013978 00000 n 0000001516 00000 n 0000004438 00000 n 0000004459 00000 n 0000004648 00000 n 0000005074 00000 n 0000005347 00000 n 0000009349 00000 n 0000009371 00000 n 0000009561 00000 n 0000009987 00000 n 0000010263 00000 n 0000012962 00000 n 0000012984 00000 n 0000013178 00000 n 0000013522 00000 n 0000013726 00000 n 0000013781 00000 n 0000014077 00000 n 0000014125 00000 n trailer < <49C1E7F026D6A67060FABDE68E754300> ] >> startxref 14304 %%EOF TSP/R/0000755000176200001440000000000013612366100011117 5ustar liggesusersTSP/R/reformulare_ATSP_as_TSP.R0000644000176200001440000000300213612366100015620 0ustar liggesusers####################################################################### # TSP - Traveling Salesperson Problem # Copyrigth (C) 2011 Michael Hahsler and Kurt Hornik # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ## create a TSP form an ATSP by doubling the cities reformulate_ATSP_as_TSP <- function(x, infeasible = Inf, cheap = -Inf) { if(!inherits(x, "ATSP")) stop("x is not an ATSP object!") method <- attr(x, "method") m <- as.matrix(x) ## scale matrix and add cheap links diag(m) <- cheap tsp <- rbind( cbind(matrix(infeasible, ncol = ncol(m), nrow = nrow(m)), t(m)), cbind(m, matrix(infeasible, ncol = nrow(m), nrow = ncol(m))) ) ## create labels (* for virtual cities) lab <- c(labels(x), paste(labels(x), "*", sep = "")) dimnames(tsp) <- list(lab, lab) attr(tsp, "method") <- method ## return as TSP TSP(tsp) } TSP/R/tsp_two_opt.R0000644000176200001440000000306013053151215013620 0ustar liggesusers####################################################################### # TSP - Traveling Salesperson Problem # Copyrigth (C) 2011 Michael Hahsler and Kurt Hornik # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ## heuristic to improve a tour using exchanges of 2 edges. tsp_two_opt <- function(x, control = NULL){ control <- .get_parameters(control, list( tour = NULL, rep = 1 )) ## improve a given tour or create a random tour ## we use a function since for rep >1 we want several random ## initial tours initial <- function() { if(!is.null(control$tour)) as.integer(control$tour) else sample(n_of_cities(x)) } xx <- as.matrix(x) if(control$rep > 1) { tour <- replicate(control$rep, .Call(R_two_opt, xx, initial()), simplify = FALSE) lengths <- sapply(tour, FUN = function(t) tour_length(x, t)) tour <- tour[[which.min(lengths)]] }else tour <- .Call(R_two_opt, xx, initial()) tour } TSP/R/write_TSPLIB.R0000644000176200001440000000720713612366100013457 0ustar liggesusers####################################################################### # TSP - Traveling Salesperson Problem # Copyrigth (C) 2011 Michael Hahsler and Kurt Hornik # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ## generic write_TSPLIB <- function(x, file, precision = 6, inf = NULL, neg_inf = NULL) UseMethod("write_TSPLIB") ## write a simple TSPLIB format file from an object of class TSP ## (contains a dist object or a symmetric matrix) ## TSP has data as integer write_TSPLIB.TSP <- function(x, file, precision = 6, inf = NULL, neg_inf = NULL) { ## prepare data (NA, Inf) if(any(is.na(x))) stop("NAs not allowed!") x <- .replaceInf(x, inf, neg_inf) ## Concorde can handle UPPER_ROW and dist (lower triangle matrix) ## is symmetric. format <- "EDGE_WEIGHT_FORMAT: UPPER_ROW" zz <- file(file, "w") cat("NAME: TSP", "COMMENT: Generated by write_TSPLIB (R-package TSP)", "TYPE: TSP", paste("DIMENSION:", n_of_cities(x)), "EDGE_WEIGHT_TYPE: EXPLICIT", format, file = zz, sep = "\n") ## only integers can be used as weights if(storage.mode(x) != "integer" && precision != 0) x <- x * 10^precision x <- suppressWarnings(as.integer(x)) if(any(is.na(x))) stop("Integer overflow, please reduce precision.") cat("EDGE_WEIGHT_SECTION", x, file = zz, sep = "\n") cat("EOF", file = zz, sep = "\n") close(zz) } write_TSPLIB.ATSP <- function(x, file, precision = 6, inf = NULL, neg_inf = NULL) { ## prepare data (NA, Inf) if(any(is.na(x))) stop("NAs not allowed!") x <- .replaceInf(x, inf, neg_inf) format <- "EDGE_WEIGHT_FORMAT: FULL_MATRIX" zz <- file(file, "w") cat("NAME: ATSP", "COMMENT: Generated by write_TSPLIB (R package TSP)", "TYPE: ATSP", paste("DIMENSION:", n_of_cities(x)), "EDGE_WEIGHT_TYPE: EXPLICIT", format, file = zz, sep = "\n") ## only integers can be used as weights if(storage.mode(x) != "integer") x <- x * 10^precision x <- suppressWarnings(as.integer(x)) if(any(is.na(x))) stop("integer overflow, please reduce precision.") cat("EDGE_WEIGHT_SECTION", x, file = zz, sep = "\n") cat("EOF", file = zz, sep = "\n") close(zz) } ## ETSP use data as real write_TSPLIB.ETSP <- function(x, file, precision = 6, inf = NULL, neg_inf = NULL) { if(any(is.na(x))) stop("NAs are not allowed!") if(any(!is.finite(x))) stop("Only finite values allowed!") if(ncol(x) == 2) type <- "EUC_2D" else if(ncol(x) == 3) type <- "EUC_3D" else stop("Only EUC_2D and EUC_3D supported.") zz <- file(file, "w") cat("NAME: ETSP", "COMMENT: Generated by write_TSPLIB (R package TSP)", "TYPE: TSP", paste("DIMENSION:", n_of_cities(x)), paste("EDGE_WEIGHT_TYPE:", type), file = zz, sep = "\n") ## fix row names rownames(x) <- NULL x <- do.call(data.frame, lapply(1:ncol(x), FUN = function(i) sprintf(paste("%0.", precision, "e", sep=""), x[,i]))) cat("NODE_COORD_SECTION", file = zz, sep = "\n") write.table(x, quote=FALSE, col.names = FALSE, file = zz) cat("EOF", file = zz, sep = "\n") close(zz) } TSP/R/tsp_concorde.R0000644000176200001440000001614413612366100013732 0ustar liggesusers####################################################################### # TSP - Traveling Salesperson Problem # Copyrigth (C) 2011 Michael Hahsler and Kurt Hornik # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ## prepare distances as integers in the appropriate range [0..MAX] .prepare_dist_concorde <- function(x, MAX, precision) { ## handle inf x <- .replaceInf(x) ## fix neg. values min_x <- min(x) if(min_x<0) { warning("TSP contains negative distances. Shifting distances by subtracting the minimum.", immediate. = TRUE) x <- x - min_x } ## get max (excluding) to check for possible integer overflows max_x <- max(x) prec <- floor(log10(MAX / max_x)) x <- x * 10^prec if(prec < precision && any((x %% 1) != 0)) warning(paste0("Concorde/Linken can only handle distances represented as integers. Converting the provided distances to integers with precison ", prec, ". This may lead to rounding errors."), immediate. = TRUE) storage.mode(x) <- "integer" ## so write.TSBLIB does not do precision changes x } ## interface to the Concorde algorithm ## (can only handle TSP and no neg. distances!) tsp_concorde <- function(x, control = NULL){ if(!is.null(control$exe)) warning("exe is deprecated. Use concorde_path() instead!") ## get parameters control <- .get_parameters(control, list( clo = "", exe = .find_exe(control$exe, "concorde"), precision = 6, verbose = TRUE, keep_files = FALSE )) ## check x if(inherits(x, "TSP")){ if(n_of_cities(x) < 10) MAX <- 2^15 - 1 else MAX <- 2^31 - 1 x <- .prepare_dist_concorde(x, MAX, control$precision) }else if(inherits(x, "ETSP")) { ## nothing to do! }else stop("Concorde only handles TSP and ETSP.") ## get temp files and change working directory wd <- tempdir() dir <- getwd() setwd(wd) on.exit(setwd(dir)) ### fix for Windows by Stephen Eick ##temp_file <- tempfile(tmpdir = wd) temp_file <- basename(tempfile(tmpdir = wd)) ## file name needs to be unique tmp_file_in <- paste(temp_file, ".dat", sep = "") tmp_file_out <- paste(temp_file, ".sol", sep = "") ## precision is already handled! write_TSPLIB(x, file = tmp_file_in, precision = 0) ## change working directory ## do the call and read back result ## we do not check return values of concorde since they are not ## very consistent system2(control$exe, args = paste("-x", control$clo, "-o", tmp_file_out, tmp_file_in), stdout = if(control$verbose) "" else FALSE, stderr = if(control$verbose) "" else FALSE, ) if(!file.access(tmp_file_out) == 0) stop("Problems with reading Concorde's output.\nIs concorde properly installed?\nFor details see ? Concorde") ##else cat("Concorde done.\n") order <- scan(tmp_file_out, what = integer(0), quiet = TRUE) ## remove number of nodes and add one (result starts with 0) order <- order[-1] + 1L ## tidy up if(!control$keep_files) unlink(c(tmp_file_in, tmp_file_out)) else cat("File are in:", wd, "\n\n") order } ## interface to the Concorde's Chained Lin-Kernighan algorithm ## (can only handle TSP, handles neg. distances) tsp_linkern <- function(x, control = NULL){ if(!is.null(control$exe)) warning("exe is deprecated. Use concorde_path() instead!") ## get parameters control <- .get_parameters(control, list( exe = .find_exe(control$exe, "linkern"), clo = "", precision = 6, verbose = TRUE, keep_files = FALSE )) ## have to set -r for small instances <8 if(n_of_cities(x) <=8) control$clo <- paste(control$clo, "-k", n_of_cities(x)) ## check x if(inherits(x, "TSP")) { MAX <- 2^31 - 1 x <- .prepare_dist_concorde(x, MAX, control$precision) }else if(inherits(x, "ETSP")) { ## nothing to do } else stop("Linkern only works for TSP and ETSP.") ## get temp files wd <- tempdir() temp_file <- tempfile(tmpdir = wd) ## file name needs to be unique tmp_file_in <- paste(temp_file, ".dat", sep = "") tmp_file_out <- paste(temp_file, ".sol", sep = "") write_TSPLIB(x, file = tmp_file_in, precision = 0) ## change working directory dir <- getwd() setwd(wd) on.exit(setwd(dir)) ## do the call and read back result ## we do not check return values of concorde since they are not ## very consistent system2(control$exe, args = paste("-o", tmp_file_out, control$clo, tmp_file_in), stdout = if(control$verbose) "" else FALSE, stderr = if(control$verbose) "" else FALSE) if(!file.access(tmp_file_out) == 0) stop("Problems with reading linkern's output. Is linkern properly installed?") ##else cat("Concorde done.\n") order <- read.table(tmp_file_out)[,1] ## remove number of nodes and add one (result starts with 0) order <- order + as.integer(1) ## tidy up if(!control$keep_files) unlink(c(tmp_file_in, tmp_file_out)) else cat("File are in:", wd, "\n\n") order } ## get help page concorde_help <- function() { cat("The following options can be specified in solve_TSP with method \"concorde\" using clo in control:\n\n") system2(.find_exe(NULL, "concorde"), args = "") } linkern_help <- function() { cat("The following options can be specified in solve_TSP with method \"linkern\" using clo in control:\n\n") system2(.find_exe(NULL, "linkern"), args = "") } ## path concorde_path <- local({ .path <- NULL function(path){ if(missing(path)) { if(!is.null(.path)) return(.path) else { ## find concorde and/or linkern p <- dirname(Sys.which("concorde")) if(p == "") p <- dirname(Sys.which("linkern")) if(p == "") stop("Can not find executables for concorde or linkern. Please install the executables or set path manually.") return(p) } } else { if(!is.null(path)) { path <- normalizePath(path) ### translate all special characters ex <- c(list.files(path, pattern = "concorde", ignore.case = TRUE), list.files(path, pattern = "linkern", ignore.case = TRUE)) if(length(ex) < 1) stop(paste("no executable (concorde and/or linkern) found in", path)) cat("found:", ex, "\n") } .path <<- path invisible(.path) } } }) ## helper to find the concorde executable .find_exe <- function(exe = NULL, prog) { ## if not specified if(is.null(exe)) { ## was the path set ? if(!is.null(concorde_path())) exe <- paste(concorde_path(), .Platform$file.sep, prog, sep ="") ## no, so it must be in the systems execution path else exe <- prog } exe } TSP/R/insert_dummy.R0000644000176200001440000000365413612366100013771 0ustar liggesusers####################################################################### # TSP - Traveling Salesperson Problem # Copyrigth (C) 2011 Michael Hahsler and Kurt Hornik # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ## insert a dummy city ##generic insert_dummy <- function(x, n = 1, const = 0, inf = Inf, label = "dummy") UseMethod("insert_dummy") ## use insert dummy from ATSP insert_dummy.TSP <- function(x, n = 1, const = 0, inf = Inf, label = "dummy") { x <- insert_dummy(ATSP(x), n, const, inf, label) TSP(x) } insert_dummy.ATSP <- function(x, n = 1, const = 0, inf = Inf, label = "dummy") { method <- attr(x, "method") n <- as.integer(n) p <- n_of_cities(x) if(length(label) == 1 && n > 1) label = rep(label, n) ## add dummy rows/columns x <- cbind(x, matrix(const, ncol = n, nrow = p, dimnames = list(NULL, label))) x <- rbind(x, matrix(const, ncol = p+n, nrow = n, dimnames = list(label, NULL))) ## place inf between dummies if(n>1) { x[(p+1):(p+n), (p+1):(p+n)] <- inf diag(x[(p+1):(p+n), (p+1):(p+n)]) <- 0 } attr(x, "method") <- method ATSP(x) } insert_dummy.ETSP <- function(x, n = 1, const = 0, inf = Inf, label = "dummy") stop("Dummy cities cannot be used with ETSP! Convert the problem into a TSP.") TSP/R/tour_length.R0000644000176200001440000000343413053151055013600 0ustar liggesusers####################################################################### # TSP - Traveling Salesperson Problem # Copyrigth (C) 2011 Michael Hahsler and Kurt Hornik # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ## generic tour_length <- function(x, ...) UseMethod("tour_length") tour_length.TOUR <- function(x, tsp = NULL, ...) { if(is.null(tsp)) { len <- attr(x, "tour_length") if(is.null(len)) len <- NA return(len) } tour_length(x = tsp, order = x) } tour_length.TSP <- function(x, order, ...) { n <- n_of_cities(x) if(missing(order)) order <- 1:n .Call(R_tour_length_dist, x, order) } tour_length.ATSP <- function(x, order, ...) { n <- n_of_cities(x) if(missing(order)) order <- 1:n .Call(R_tour_length_matrix, x, order) } tour_length.ETSP <- function(x, order, ...) { n <- n_of_cities(x) if(n != nrow(x)) stop("x and order do not have the same number of cities!") if(missing(order)) order <- 1:n sum(sapply(1:(n-1), FUN = function(i) dist(x[order[i:(i+1)],]))) + as.numeric(dist(x[order[c(n,1)],])) } ### faster for small n but takes O(n^2) memory #tour_length.ETSP <- function(x, order) tour_length(as.TSP(x), order) TSP/R/tsp_insertion.R0000644000176200001440000001015313215316321014141 0ustar liggesusers####################################################################### # TSP - Traveling Salesperson Problem # Copyrigth (C) 2011 Michael Hahsler and Kurt Hornik # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ## Insertion algorithms ## (Rosenkrantz et al. 1977) tsp_insertion <- function(x, type = "nearest", control = NULL){ ## since sample has an annoying convenience feature for ## lenght(x) == 1 choose1 <- function(x) if(length(x) > 1) sample(x, 1) else x ## this is slower than which.min and which.max but works also ## correctly for only values Inf in x and breaks ties randomly choose1_min <- function(x) choose1(which(x == min(x))) choose1_max <- function(x) choose1(which(x == max(x))) types <- c("nearest", "farthest", "cheapest", "arbitrary") type_num <- pmatch(type, types) if(is.na(type_num)) stop(paste("Unknown insertion type: ", sQuote(type))) ## x comes checked form solve_TSP/solve_ATSP n <- n_of_cities(x) ## we use a matrix for now (covers TSP and ATSP) asym <- inherits(x, "ATSP") x <- as.matrix(x) ## place first city control <- .get_parameters(control, list( start = sample(n, 1) )) start <- as.integer(control$start) if(start < 0 || start > n) stop(paste("illegal value for", sQuote("start"))) placed <- logical(n) placed[start] <- TRUE order <- c(start) ## place other cities while(any(placed == FALSE)) { ## find city to be inserted ks <- which(!placed) js <- which(placed) ## nearest / farthest if(type_num < 3) { m <- x[ks,js, drop = FALSE] ## for the asymmetric case we have to take distances ## from and to the city into account if(asym){ m <- cbind(m, t(x)[ks,js, drop = FALSE]) } ds <- sapply(1:length(ks), FUN = function(i) min(m[i, , drop = FALSE])) ## nearest/farthest insertion winner_index <- if(type_num == 1) choose1_min(ds) else choose1_max(ds) k <- ks[winner_index] } ## cheapest else if(type_num == 3) { winner_index <- choose1_min(sapply(ks, FUN = function(k) min(.Call(R_insertion_cost, x, order, k)) )) k <- ks[winner_index] ## we look for the optimal insertion place for k again later ## this is not necessary, but it is more convenient ## to reuse the code for the other insertion algorithms for now. } ## random else if(type_num == 4) k <- choose1(ks) ## just in case else stop("unknown insertion type") ## do insertion placed[k] <- TRUE if(length(order) == 1) order <- append(order, k) else { pos <- choose1_min(.Call(R_insertion_cost, x, order, k)) order <- append(order, k, after = pos) } } order } ### faster arbitrary insertion (random sampling takes care of breaking ties) tsp_insertion_arbitrary <- function(x, control = NULL){ ## x comes checked form solve_TSP/solve_ATSP n <- n_of_cities(x) control <- .get_parameters(control, list()) ## we use a matrix for now (covers TSP and ATSP) x <- as.matrix(x) ## deal with special cases if(nrow(x) == 1) return(1L) if(nrow(x) == 2) return(sample(1:2)) x[is.na(x)] <- Inf ## random order rorder <- sample(n) x <- x[rorder, rorder] ## FIXME: specify start city ## place first two cities order <- integer(n) order[1:2] <- 1:2 ## place other cities for(i in 3:n) { pos <- which.min(.Call(R_insertion_cost, x, order[1:(i-1L)], i)) + 1L order[((pos):i)+1L] <- order[(pos):i] order[pos] <- i } rorder[order] } TSP/R/solve_TSP.R0000644000176200001440000001166213514030555013131 0ustar liggesusers####################################################################### # TSP - Traveling Salesperson Problem # Copyrigth (C) 2011 Michael Hahsler and Kurt Hornik # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ## generic solve_TSP <- function(x, method = NULL, control = NULL, ...) UseMethod("solve_TSP") ## TSP solve_TSP.TSP <- function(x, method = NULL, control = NULL, ...) { .solve_TSP(x, method, control, ...) } ## ATSP solve_TSP.ATSP <- function(x, method = NULL, control = NULL, as_TSP = FALSE, ...) { m <- pmatch(tolower(method), c("concorde", "linkern")) if(!as_TSP && !is.na(m) && length(m) > 0L) { warning("NOTE: Solver cannot solve the ATSP directly. Reformulating ATSP as TSP. Use 'as_TSP = TRUE' to supress this warning.\n") as_TSP <- TRUE } # reformulate ATSP as TSP if(as_TSP) { x_atsp <- x x <- reformulate_ATSP_as_TSP(x_atsp) } tour <- .solve_TSP(x, method, control, ...) if(as_TSP) { tour <- TOUR(tour[tour<=n_of_cities(x_atsp)], method = attr(tour, "method"), tsp = x_atsp) # Tour may be reversed tour_rev <- TOUR(rev(tour), method = attr(tour, "method"), tsp = x_atsp) if(tour_length(tour) > tour_length(tour_rev)) tour <- tour_rev } tour } ## ETSP solve_TSP.ETSP <- function(x, method = NULL, control = NULL, ...) { ## all but concorde and linkern can only do TSP m <- pmatch(tolower(method), c("concorde", "linkern")) if(length(m) == 0L || is.na(m)) x <- as.TSP(x) .solve_TSP(x, method, control, ...) } ## Deal with Inf: punish (-)Inf with max (min) +(-) 2*range .replaceInf <- function(x, pInf = NULL, nInf = NULL) { if(any(is.infinite(x))) { range_x <- range(x, na.rm = TRUE, finite = TRUE) if(is.null(pInf)) pInf <- range_x[2] + 2* diff(range_x) if(is.null(nInf)) nInf <- range_x[1] - 2* diff(range_x) x[x == Inf] <- pInf x[x == -Inf] <- nInf } x } ## workhorse .solve_TSP <- function(x, method = NULL, control = NULL, ...) { ## add ... to control control <- c(control, list(...)) ## methods methods <- c( "identity", "random", "nearest_insertion", "farthest_insertion", "cheapest_insertion", "arbitrary_insertion", "nn", "repetitive_nn", "2-opt", ### deprecated "two_opt", "concorde", "linkern" ) ## default is arbitrary_insertion + two_opt if(is.null(method)) { method <- "arbitrary_insertion" if(is.null(control$two_opt)) control <- c(control, list(two_opt = TRUE)) } else method <- match.arg(tolower(method), methods) ## check for NAs if(any(is.na(x))) stop("NAs not allowed!") ## Inf x_ <- .replaceInf(x) ## work horses .solve_TSP_worker <- function(x_, method, control) { order <- switch(method, identity = seq(n_of_cities(x_)), random = sample(n_of_cities(x_)), nearest_insertion = tsp_insertion(x_, type = "nearest", control = control), farthest_insertion = tsp_insertion(x_, type = "farthest", control = control), cheapest_insertion = tsp_insertion(x_, type = "cheapest", control = control), # arbitrary_insertion = tsp_insertion(x_, type = "arbitrary", control = control), arbitrary_insertion = tsp_insertion_arbitrary(x_, control = control), nn = tsp_nn(x_, control = control), repetitive_nn = tsp_repetitive_nn(x_, control = control), two_opt = tsp_two_opt(x_, control = control), '2-opt' = tsp_two_opt(x_, control = control), concorde = tsp_concorde(x_, control = control), linkern = tsp_linkern(x_, control = control) ) ### do refinement two_opt if(!is.null(control$two_opt) && control$two_opt) { order <- tsp_two_opt(x_, control = c(control, list(tour = order))) method <- paste(method , "+two_opt", sep = "") } TOUR(order, method=method, tsp=x) } ## do rep? if(!is.null(control$rep)) n <- control$rep else n <- 1L if(method == "concorde" || method == "linkern") { n <- 1L control$two_opt <- NULL ## no two_opt for these! } if(method == "repetitive_nn") n <- 1L if(n==1L) return(.solve_TSP_worker(x_, method, control)) #l <- replicate(n, .solve_TSP_worker(x_, method, control), simplify = FALSE) l <- foreach(i = 1:n) %dopar% .solve_TSP_worker(x_, method, control) l <- l[[which.min(sapply(l, attr, "tour_length"))]] attr(l, "method") <- paste(attr(l, "method"), "_rep_", n, sep="") return(l) } TSP/R/ETSP.R0000644000176200001440000000414412606077054012031 0ustar liggesusers####################################################################### # TSP - Traveling Salesperson Problem # Copyrigth (C) 2011 Michael Hahsler and Kurt Hornik # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ## create a Euclidean TSP problem ETSP <- function(x, labels = NULL) { if(inherits(x, "ETSP")) return(x) x <- as.ETSP(x) if(!is.null(labels)) rownames(x) <- labels x } ## coercion as.ETSP <- function(x) UseMethod("as.ETSP") as.ETSP.matrix <- function(x){ mode(x) <- "numeric" if(is.null(rownames(x))) rownames(x) <- 1:nrow(x) class(x) <- c("ETSP", class(x)) x } as.ETSP.data.frame <- function(x){ as.ETSP(as.matrix(x)) } as.TSP.ETSP <- function(x) TSP(dist(x)) as.matrix.ETSP <- function(x, ...) { unclass(x) } ## print print.ETSP <- function(x, ...) { cat("object of class", sQuote(class(x)[1]), "\n") cat(n_of_cities(x), "cities", "(Euclidean TSP)\n") } ## number of cities n_of_cities.ETSP <- function(x) nrow(x) ## labels labels.ETSP <- function(object, ...) rownames(object) ## image image.ETSP <- function(x, order, col = gray.colors(64), ...) { p <- n_of_cities(x) if(missing(order)) order <- 1:p x <- as.TSP(x) graphics::image.default(1:p, 1:p, as.matrix(x)[order, order], col = col, ...) } plot.ETSP <- function(x, y = NULL, tour = NULL, tour_lty = 2, tour_col = 1,...) { x <- as.matrix(x) plot(x, y = NULL, ...) if(!is.null(y)) tour <- TOUR(y) if(!is.null(tour)) polygon(x[tour,], lty = tour_lty, border = tour_col) } TSP/R/TOUR.R0000644000176200001440000000366412606077054012055 0ustar liggesusers####################################################################### # TSP - Traveling Salesperson Problem # Copyrigth (C) 2011 Michael Hahsler and Kurt Hornik # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. TOUR <- function(x, method=NA, tsp=NULL){ if(inherits(x, "TOUR")) return(x) x <- as.TOUR(x) attr(x, "method") <- as.character(method) if(!is.null(tsp)){ attr(x, "tour_length") <- tour_length(x, tsp) names(x) <- labels(tsp)[x] } x } ## coercion as.TOUR <- function(object) UseMethod("as.TOUR") as.TOUR.numeric <- function(object){ l <- labels(object) ### preserve lables object <- as.integer(object) names(object) <- l as.TOUR(object) } as.TOUR.integer <- function(object){ ## check tour if(any(object < 1) || any(object > length(object)) || any(is.na(object))) stop("tour contains illegal elements.") if(any(duplicated(object))) stop("tour indices are not unique.") class(object) <- c("TOUR", class(object)) object } ## helper for tour print.TOUR <- function(x, ...){ cat("object of class", sQuote(class(x)[1]), "\n") cat("result of method", sQuote(attr(x, "method")), "for", length(x), "cities\n") if(!is.null(attr(x, "tour_length"))) cat("tour length:", attr(x, "tour_length"), "\n") else cat("tour length: unknown\n") } TSP/R/TSP.R0000644000176200001440000000552013513342076011720 0ustar liggesusers####################################################################### # TSP - Traveling Salesperson Problem # Copyrigth (C) 2011 Michael Hahsler and Kurt Hornik # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ## create a TSP problem TSP <- function(x, labels = NULL, method = NULL) { if(inherits(x, "TSP")) return(x) x <- as.TSP(x) if(!is.null(labels)) attr(x, "Labels") <- labels if(!is.null(method)) attr(x, "method") <- method x } ## coercion as.TSP <- function(x) UseMethod("as.TSP") as.TSP.dist <- function(x){ ## make sure we have a upper triangle matrix w/o diagonal x <- as.dist(x, diag = FALSE, upper = FALSE) ## make sure we have labels if(is.null(attr(x, "Labels"))) attr(x, "Labels") <- c(1:n_of_cities(x)) if(any(is.nan(x))) stop(paste(sQuote("NAs"), "not supported")) ## make sure data is numeric mode(x) <- "numeric" class(x) <- c("TSP", class(x)) x } as.TSP.matrix <- function(x){ if(!isSymmetric(x)) stop("TSP requires a symmetric matrix") method <- attr(x, "method") x <- as.dist(x, diag = FALSE, upper = FALSE) attr(x, "method") <- method ## make sure we have labels if(is.null(attr(x, "Labels"))) attr(x, "Labels") <- c(1:n_of_cities(x)) if(any(is.nan(x))) stop(paste(sQuote("NAs"), "not supported")) ## make sure data is numeric mode(x) <- "numeric" class(x) <- c("TSP", class(x)) x } as.dist.TSP <- function(m, ...) { class(m) <- "dist" as.dist(m, ...) } ## print print.TSP <- function(x, ...) { method <- attr(x, "method") if(is.null(method)) method <- "unknown" cat("object of class", sQuote(class(x)[1]), "\n") cat(n_of_cities(x), "cities", paste("(distance ", sQuote(method),")", sep=""), "\n") } ## number of cities n_of_cities.TSP <- function(x) attr(x, "Size") ## generic for n_of_cities n_of_cities <- function(x) UseMethod("n_of_cities") n_of_cities.default <- n_of_cities.TSP ## labels labels.TSP <- function(object, ...) attr(object, "Labels") ## image image.TSP <- function(x, order, col = gray.colors(64), ...) { p <- n_of_cities(x) if(missing(order)) order <- 1:p graphics::image.default(1:p, 1:p, as.matrix(x)[order, order], col = col, ...) } TSP/R/read_TSPLIB.R0000644000176200001440000001115513471325021013235 0ustar liggesusers####################################################################### # TSP - Traveling Salesperson Problem # Copyrigth (C) 2011 Michael Hahsler and Kurt Hornik # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ## read a simple TSPLIB format file read_TSPLIB <- function(file, precision = 0) { ## TSP or ATSP type <- NULL lines <- readLines(file) ## get info metadata <- grep(":", lines) info <- list() lapply(strsplit(lines[metadata], "[[:space:]]*:[[:space:]]*"), FUN = function(x) { x[2] <- sub("[[:space:]]*$","",x[2]) ## kill trailing spaces info[[toupper(x[1])]] <<- toupper(x[2]) }) ## check if(substr(info$TYPE, 1, 3) == "TSP") type <- "TSP" else if(substr(info$TYPE, 1, 3) == "ATS") type <- "ATSP" else stop ("Currently the only implemented TYPEs are TSP and ATS(P)!") dim <- as.integer(info$DIMENSION) if(info$EDGE_WEIGHT_TYPE == "EXPLICIT") { ## get data data_start <- grep("EDGE_WEIGHT_SECTION", lines, ignore.case = TRUE) if(length(data_start) == 0) stop("EDGE_WEIGHT_SECTION missing") data <- lines[(data_start+1):length(lines)] data <- sub("EOF", "", data, ignore.case = TRUE) ## kill optional EOF data <- sub("^[[:space:]]*", "", data)## kill leading spaces data <- strsplit(paste(data, collapse = " "), "[[:space:]]+")[[1]] ## remove everything after the data if(info$EDGE_WEIGHT_FORMAT == "FULL_MATRIX") data <- data[1:(dim^2)] else if(info$EDGE_WEIGHT_FORMAT == "UPPER_ROW" || info$EDGE_WEIGHT_FORMAT == "LOWER_COL" || info$EDGE_WEIGHT_FORMAT == "UPPER_COL" || info$EDGE_WEIGHT_FORMAT == "LOWER_ROW") data <- data[1:(dim*(dim-1)/2)] else if(info$EDGE_WEIGHT_FORMAT == "UPPER_DIAG_ROW" || info$EDGE_WEIGHT_FORMAT == "LOWER_DIAG_COL" || info$EDGE_WEIGHT_FORMAT == "UPPER_DIAG_COL" || info$EDGE_WEIGHT_FORMAT == "LOWER_DIAG_ROW") data <- data[1:(dim*(dim-1)/2 + dim)] data <- as.numeric(data) if(precision != 0) data <- data / 10^precision ## ATSP if(type == "ATSP") { if(info$EDGE_WEIGHT_FORMAT == "FULL_MATRIX"){ ## todo: find out if FULL_MATRIX is row or column oriented? data <- matrix(data, ncol = dim) }else stop("ATSP needs EDGE_WEIGHT_FORMAT FULL_MATRIX!") return(ATSP(data)) } ## TSP ## we have only symmetric data here! if(info$EDGE_WEIGHT_FORMAT == "FULL_MATRIX") { data <- as.dist(matrix(data, ncol = dim)) }else if(info$EDGE_WEIGHT_FORMAT == "UPPER_ROW" || info$EDGE_WEIGHT_FORMAT == "LOWER_COL") { class(data) <- "dist" attr(data, "Size") <- dim attr(data, "Diag") <- FALSE attr(data, "Upper") <- FALSE }else if(info$EDGE_WEIGHT_FORMAT == "UPPER_COL" || info$EDGE_WEIGHT_FORMAT == "LOWER_ROW") { m <- matrix(NA, nrow = dim, ncol = dim) m[upper.tri(m, diag = FALSE)] <- data data <- as.dist(t(m)) }else if(info$EDGE_WEIGHT_FORMAT == "UPPER_DIAG_ROW" || info$EDGE_WEIGHT_FORMAT == "LOWER_DIAG_COL") { class(data) <- "dist" attr(data, "Size") <- dim attr(data, "Diag") <- TRUE attr(data, "Upper") <- FALSE data <- as.dist(data, diag = FALSE) }else if(info$EDGE_WEIGHT_FORMAT == "UPPER_DIAG_COL" || info$EDGE_WEIGHT_FORMAT == "LOWER_DIAG_ROW") { m <- matrix(NA, nrow = dim, ncol = dim) m[upper.tri(m, diag = TRUE)] <- data data <- as.dist(t(m)) }else stop("The specified EDGE_WEIGHT_FORMAT is not implemented!") return(TSP(data)) } else if (info$EDGE_WEIGHT_TYPE == "EUC_2D" || info$EDGE_WEIGHT_TYPE == "EUC_2D") { data_start <- grep("NODE_COORD_SECTION", lines, ignore.case = TRUE) if(length(data_start) == 0) stop("NODE_COORD_SECTION missing") data <- lines[(data_start+1):(data_start+dim)] data <- matrix(as.numeric(unlist(strsplit(data, split="\\s+"))), nrow = dim, byrow = TRUE) data <- data[,-1] return(ETSP(data)) } stop("EDGE_WEIGHT_TYPE not implemented! Implemented types are EXPLICIT, EUC_2D and EUC_3D") } TSP/R/cut_tour.R0000644000176200001440000000352613612366100013114 0ustar liggesusers####################################################################### # TSP - Traveling Salesperson Problem # Copyrigth (C) 2011 Michael Hahsler and Kurt Hornik # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. cut_tour.TOUR <- function(x, cut, exclude_cut = TRUE) { ## city label if(is.character(cut)) { cut <- which(as.logical(apply(sapply(cut, "==", labels(x)), MARGIN = 1, sum))) if(length(cut)<1) stop("cut has to exist") ## city id } else { if(any(is.na(cut <- match(cut, x)))) stop("cut has to exist") } if(length(cut) == 1L) { ## single path path <- c(x,x)[(cut + as.numeric(exclude_cut)):(length(x) + cut - 1L)] } else { ## multiple paths, return as a list path_names <- labels(x)[cut] ## make first cut the begining. Note we keeb the boundary at the begining and the end! path <- c(x,x)[cut[1]:(length(x) + cut[1])] cut2 <- c(cut - cut[1] + 1L, length(x)) path <- lapply(2:length(cut2), FUN = function(i) path[(cut2[i-1L] + as.numeric(exclude_cut)):(cut2[i]-1L)]) names(path) <- path_names } path } ##generic cut_tour <- function(x, cut, exclude_cut = TRUE) UseMethod("cut_tour") TSP/R/tsp_nn.R0000644000176200001440000000446012662161447012562 0ustar liggesusers####################################################################### # TSP - Traveling Salesperson Problem # Copyrigth (C) 2011 Michael Hahsler and Kurt Hornik # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ## nearest neighbor algorithm tsp_nn <- function(x, control = NULL) { ## parameter x comes checked from solve_TSP/solve_ATSP n <- n_of_cities(x) ## we use a matrix for now (coveres TSP and ATSP) x <- as.matrix(x) control <- .get_parameters(control, list( start = sample(n, 1) )) start <- control$start if(start < 0 || start > n) stop(paste("illegal value for", sQuote("start"))) placed <- logical(n) order <- integer(n) ## place first city current <- start order[1L] <- current placed[current] <- TRUE while(length(rest <- which(!placed)) > 0L) { ## nearest <- rest[which.min(x[current,rest])] ## which.min has problems with Inf ## so we can break ties randomly now too x_sub <- x[current, rest] current <- rest[which(x_sub == min(x_sub, na.rm = TRUE))] if(length(current) > 1L) current <- sample(current, 1) ## place city order[n + 1L - length(rest)] <- current placed[current] <- TRUE } order } ## repetitive NN tsp_repetitive_nn <- function(x, control){ n <- n_of_cities(x) #tours <- lapply(1:n, function(i) tsp_nn(x, control = list(start = i))) ## no backend would warn! i <- 0L ## for R CMD check (no global binding for i) suppressWarnings( tours <- foreach(i = 1:n) %dopar% tsp_nn(x, control = list(start = i)) ) lengths <- sapply(tours, FUN = function(i) tour_length(x, i)) tours[[which.min(lengths)]] } TSP/R/ATSP.R0000644000176200001440000000520113373424542012020 0ustar liggesusers####################################################################### # TSP - Traveling Salesperson Problem # Copyrigth (C) 2011 Michael Hahsler and Kurt Hornik # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ## create a (asymmetric) ATSP problem ATSP <- function(x, labels = NULL, method = NULL) { if(inherits(x, "ATSP")) return(x) atsp <- as.ATSP(x) if(!is.null(labels)) dimnames(atsp) <- list(labels, labels) if(!is.null(method)) attr(atsp, "method") <- method atsp } as.ATSP <- function(x) UseMethod("as.ATSP") as.ATSP.matrix <- function(x){ .isSquare <- function(x) (dim(x)[1] == dim(x)[2]) if(!.isSquare(x)) stop("ATSP requires a square matrix") ## check for NAs if(any(is.nan(x))) stop(paste(sQuote("NAs"), "not supported")) ## make sure we have labels if(is.null(dimnames(x))) dimnames(x) <- list(1:dim(x)[1], 1: dim(x)[1]) if(is.null(colnames(x))) colnames(x) <- rownames(x) if(is.null(rownames(x))) rownames(x) <- colnames(x) ## make sure data is numeric mode(x) <- "numeric" class(x) <- c("ATSP", class(x)) x } as.ATSP.dist <- function(x){ method <- attr(x, "method") x <- as.ATSP(as.matrix(x)) ## make sure data is numeric mode(x) <- "numeric" class(x) <- c("ATSP", class(x)) attr(x, "method") <- method x } ## print print.ATSP <- function(x, ...) { method <- attr(x, "method") if(is.null(method)) method <- "unknown" cat("object of class", sQuote(class(x)[1]), " (asymmetric TSP) \n") cat(n_of_cities(x), "cities", paste("(distance ", sQuote(method),")", sep=""), "\n") } ## number of cities n_of_cities.ATSP <- function(x) nrow(x) ## labels labels.ATSP <- function(object, ...) dimnames(object)[[1]] ## image image.ATSP <- function(x, order, col = gray.colors(64), ...) { p <- n_of_cities(x) if(missing(order)) order <- 1:p graphics::image.default(1:p, 1:p, x[order, order], col = col, ...) } ## coerce to matrix as.matrix.ATSP <- function(x, ...){ unclass(x) } TSP/R/AAAparameter.R0000644000176200001440000000405513612366100013531 0ustar liggesusers####################################################################### # Code to check parameter/control objects # Copyrigth (C) 2011-2016 Michael Hahsler # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ## helper to parse parameter lists with defaults .nodots <- function(...) { l <- list(...) if(length(l) > 0L) warning("Unknown arguments: ", paste(names(l), "=",l, collapse=", ")) } .get_parameters <- function(parameter, defaults) { defaults <- as.list(defaults) parameter <- as.list(parameter) ## add verbose if(is.null(defaults$verbose)) defaults$verbose <- FALSE if(length(parameter) != 0) { o <- pmatch(names(parameter), names(defaults)) ## unknown parameter # if(any(is.na(o))){ # warning(sprintf(ngettext(length(is.na(o)), # "Unknown parameter: %s", # "Unknown parameters: %s"), # paste(names(parameter)[is.na(o)], # collapse = ", ")), call. = FALSE, immediate. = TRUE) # # cat("Available parameter (with default values):\n") # #print(defaults) # cat(rbind(names(defaults)," = ", gsub("\n"," ",as.character(defaults))), # sep=c("\t"," ","\n")) # } defaults[o[!is.na(o)]] <- parameter[!is.na(o)] } if(defaults$verbose) { cat("Used control parameters:\n") #print(defaults) cat(rbind(names(defaults)," = ", strtrim(gsub("\n"," ",as.character(defaults)), 50)), sep=c("\t"," ","\n")) } defaults } TSP/NEWS.md0000644000176200001440000000575513623556657012054 0ustar liggesusers# TSP 1.1-9 (02/02/2020) * Maintenance release. # TSP 1.1-8 (01/23/2020) ## New Feature * solve_TSP for ATSP gained parameter as_TSP to solve the ATSP reformulated as a TSP. * Concorde and linkern can now solve ATSP using a reformulation as a TSP. * cut_tour can now cut a tour into multiple paths. # TSP 1.1-7 (05/22/2019) ## Bugfixes * concorde_path now normalizes the path (translates . and ~). * reformulate_ATSP_as_TSP now keeps the method attribute (i.e., used distance measure) * TSP and ATSP gained parameter method to store the name of the used distance metric. * Fixed read_TSPLIB for EDGE_WEIGHT_FORMAT of LOWER_ROW, LOWER_DIAG_ROW, UPPER_COL and UPPER_DIAG_COL (reported by klukac). # TSP 1.1-6 (04/29/2018) ## Bugfixes * Start for insertion algorithms is now coerced to integer. * Fixed problem with TSP with 1 city on Win 32 on R 3.5.0. # TSP 1.1-5 (02/21/2017) * fixed TSP labels. * fixed tour_length for ETSP and added tests. # TSP 1.1-4 (2/21/2016) * fixed bug in arbitrary insertion for TSPs with two or less cities (bug report by Shrinidhee Shevade). * concorde and linkern help: exe argument was removed. The exe control argument for both methods in solve_TSP is now deprecated. Use concorde_path(path) instead. * concorde and linkern gained a control argument verbose to suppress the output. # TSP 1.1-3 (9/2/2015) * two-opt now works correctly with asymmetric TSPs (bug report by Luis Martinez). # TSP 1.1-2 (7/30/2015) * Fixed imports for non-base packages. # TSP 1.1-1 (5/15/2015) * improved speed of C code. * compatibility with new release of testthat # TSP 1.1-0 (3/14/2015) * default method is now arbitrary_insertion with two_opt refinement. * we use foreach (use doParallel) to compute repetitions in parallel * ETSP (Euclidean TSP) added. * generic and arguments for tour_lengh have # Changed (fist argument is now a tour). * method "2-opt" was renamed to "two_opt" so it can also be used as a proper variable name. * solve_TSP gained methods "identity" and "random". * solve_TSP gained options "repetition" and "two_opt". # TSP 1.0-10 (2/3/2015) * added check for argument cut in cut_tour * Finding concord and linkern is now case insensitive (Reported by Mark Otto) # TSP 1.0-9 (7/16/2014) * Check for NAs in distances. * +INF and -INF are now handled in solve_TSP. * fixed single quotes in vignette. # TSP 1.0-8 (9/6/2013) * service release. # TSP 1.0-7 (8/22/2012) * Added PACKAGE argument to C calls. # TSP 1.0-6 (11/29/2011) * Fixed bug in read_TSPLIB. # TSP 1.0-5 (11/10/2011) * Changed constructor for TOUR to allow for method and tour_length. * Bugfix: labels in creator ATSP() (reported by Tiffany Chen) # TSP 1.0-4 (8/31/2011) * Fixed bug with missing row/column labels in as.ATSP() (reported by Ian Deters) # TSP 1.0-3 (5/26/2011) * Service release # TSP 1.0-2 (1/14/2011) * Fixed Windows/R bug with temp files. * Fixed the code for SpatialLines thanks to Roger Bivand. # TSP 0.1-2 (9/18/2006) * Initial release. TSP/MD50000644000176200001440000000546413623676650011257 0ustar liggesusers28f533ce925658e7b23be86723ce004b *DESCRIPTION b2c2d8bae25226353017db593b866e20 *NAMESPACE 7674320f69526088b1c70aef74729621 *NEWS.md 53fd0b4cc668ff06fe00424278f70ae8 *R/AAAparameter.R 6884890a132ba1cbef7290386d2c7b26 *R/ATSP.R ef5606a4c60f2346bd801e9a03a52d9e *R/ETSP.R c2ed5738d10905fc864a813a4293e931 *R/TOUR.R efa4a6bd48ecb3145c9a4bc91467a8c9 *R/TSP.R 64228689ef626d54672cad7682694ac4 *R/cut_tour.R bb52852ef254f94c20fb23b265e54af8 *R/insert_dummy.R 8f0b9fa8a1ae0fde26867b8748c6f42a *R/read_TSPLIB.R 3d0859d070d7b01359d9a343354a7f40 *R/reformulare_ATSP_as_TSP.R fe38686649d503ebe9eca449e5b57d19 *R/solve_TSP.R c7747eb3cbc78b778327a8add2dad9e0 *R/tour_length.R f48b86de87bbc78d3f1b1231bcb9f7c1 *R/tsp_concorde.R 84afdfe790fbc33dc7171e41b042ccd6 *R/tsp_insertion.R 019fd78b7be4b192712f4ce62e5c2432 *R/tsp_nn.R eb85d50fbf1f67db0f3d8b791481de49 *R/tsp_two_opt.R a5dbb0ee3ef7fa6d459387fff2c1aaf6 *R/write_TSPLIB.R 8c4fa3da715e93723b9e7ff951281008 *README.md 51023c861c1fe2b5be47099e4f80cdfc *build/vignette.rds cbc08fbda69c99bfd002bd94e83f18e9 *data/USCA312.rda 4e7f660688a4bc16dee5b14a5a9a41c3 *data/USCA312_GPS.rda 654e60750bbc434a2c4ef01f6ac38885 *data/USCA50.rda be45c0307d5298f11d16981be22ae321 *inst/CITATION 04f5f5784d807b00cafc952979e65f77 *inst/doc/TSP.R 417ce8acf2d479da4b1c6923bac655e4 *inst/doc/TSP.Rnw 2014d84cf38c4cff008df186a77c5502 *inst/doc/TSP.pdf 9d75b7ee2a0295809647546e2caec298 *inst/examples/d493.tsp 92e0f7e2d80c7917481425386862771b *man/ATSP.Rd 26315ee53dca90df61f32ed3d0f4dc33 *man/Concorde.Rd 2f59eca0288ad57b46a11824958d1e10 *man/ETSP.Rd d2954b8209bf2a5c30c35a005483780c *man/TOUR.Rd ff8080911158b4309f2c13c717e31505 *man/TSP.Rd 0d31b3ee76eeed28a3b2572e70c6834c *man/TSPLIB.Rd 597c47801ad15f2a7609c19826046c79 *man/USCA312.Rd d10b52711ceb1e8a8ab2db20292e5733 *man/cut_tour.Rd ad9af1a18be586698f5596918e97bec2 *man/insert_dummy.Rd ee3b8983877711166a54b91be7dd4cc1 *man/reformulate_ATSP_as_TSP.Rd 8d236f611f2bd45c202e809b7e4387dc *man/solve_TSP.Rd abf360616535762c8674251359a802fe *man/tour_length.Rd f0276d6a12d50703983732ab3dc0240a *src/dll.c fc6380482b910ae85f24f5f2dafd99b9 *src/insertion_cost.c 99188c97466f9ca7ed78e9c45636dad9 *src/matrix_pos.h fdf8786b17a9dc12ae34dc7b8c70134d *src/tour_length.c 929133f72945fa502bcaa41ed37ed574 *src/two_opt.c 3703922de28f16a1f0bd1ca82302cb51 *tests/testthat.R 6cc29a47b81c493ef81b21b3b871138e *tests/testthat/test-ETSP.R 7237e16e4567845c541dc413648d8bd3 *tests/testthat/test-TSPLIB.R 78002959873e428aaeba65f4b0ea5e05 *tests/testthat/test-concorde.R de9c7c23e346b1a888f5410ded78e091 *tests/testthat/test-insert_cut_etc.R 998eecca7ceecf1bffb9b82d7305e430 *tests/testthat/test-solve_TSP.R 417ce8acf2d479da4b1c6923bac655e4 *vignettes/TSP.Rnw e5fefe1a7b9cc2d989c7a10694f263be *vignettes/TSP.bib c760b2e30089afe4035f4c86a0faca1a *vignettes/overview.odg 76b5cfce452ac70b4c4b51bf5164887d *vignettes/overview.pdf TSP/inst/0000755000176200001440000000000013623557437011714 5ustar liggesusersTSP/inst/examples/0000755000176200001440000000000012606077054013522 5ustar liggesusersTSP/inst/examples/d493.tsp0000644000176200001440000003277512606077054014753 0ustar liggesusersNAME : d493 COMMENT : Drilling problem (Reinelt) TYPE : TSP DIMENSION : 493 EDGE_WEIGHT_TYPE : EUC_2D NODE_COORD_SECTION 1 0.00000e+00 0.00000e+00 2 1.11630e+03 1.55520e+03 3 1.35760e+03 1.47900e+03 4 1.14810e+03 1.77110e+03 5 1.18620e+03 1.79650e+03 6 1.20520e+03 1.88540e+03 7 1.23700e+03 1.99340e+03 8 1.30050e+03 2.00610e+03 9 1.16080e+03 2.02510e+03 10 1.17350e+03 2.03780e+03 11 1.22430e+03 2.05050e+03 12 1.35130e+03 2.24100e+03 13 1.73230e+03 2.13310e+03 14 1.74500e+03 2.19020e+03 15 1.76400e+03 2.29180e+03 16 1.76400e+03 2.34260e+03 17 1.73230e+03 2.39340e+03 18 1.74500e+03 2.41880e+03 19 1.64970e+03 2.43150e+03 20 1.75770e+03 2.52040e+03 21 2.29740e+03 1.77110e+03 22 2.21490e+03 1.42820e+03 23 2.22760e+03 1.33930e+03 24 2.18310e+03 1.32030e+03 25 2.61490e+03 1.11070e+03 26 2.50700e+03 1.16150e+03 27 2.34820e+03 9.52000e+02 28 2.22120e+03 1.00910e+03 29 2.20850e+03 1.08530e+03 30 2.20220e+03 1.13610e+03 31 2.21490e+03 1.17420e+03 32 2.02440e+03 1.12340e+03 33 2.04340e+03 1.30120e+03 34 1.94820e+03 1.30760e+03 35 1.94180e+03 1.39010e+03 36 1.84660e+03 1.41550e+03 37 1.75770e+03 1.36470e+03 38 1.80210e+03 1.35200e+03 39 1.83390e+03 1.26310e+03 40 1.73230e+03 1.25040e+03 41 2.04340e+03 1.58060e+03 42 2.04980e+03 1.74570e+03 43 1.99900e+03 1.80290e+03 44 1.96090e+03 1.81560e+03 45 2.05610e+03 1.82190e+03 46 2.01170e+03 1.82830e+03 47 2.04340e+03 1.85370e+03 48 1.84660e+03 1.78380e+03 49 1.82120e+03 1.82830e+03 50 1.84660e+03 1.86640e+03 51 1.81480e+03 1.65050e+03 52 1.66880e+03 1.80920e+03 53 1.85930e+03 2.16480e+03 54 1.98630e+03 2.13310e+03 55 2.01170e+03 2.17750e+03 56 1.94820e+03 2.19660e+03 57 1.89100e+03 2.24740e+03 58 2.01170e+03 2.27280e+03 59 2.03710e+03 2.30450e+03 60 2.05610e+03 2.35530e+03 61 1.89740e+03 2.41250e+03 62 1.89740e+03 2.45690e+03 63 1.91640e+03 2.46960e+03 64 2.05610e+03 2.46960e+03 65 2.15770e+03 2.13940e+03 66 1.63700e+03 2.69820e+03 67 1.70690e+03 2.70460e+03 68 1.76400e+03 2.74900e+03 69 1.70690e+03 2.77440e+03 70 1.76400e+03 2.79980e+03 71 1.87200e+03 3.06650e+03 72 1.85290e+03 3.00300e+03 73 1.87200e+03 2.99670e+03 74 1.89740e+03 2.99670e+03 75 2.21490e+03 2.97130e+03 76 2.19580e+03 2.93950e+03 77 2.24660e+03 2.88870e+03 78 1.89100e+03 2.86970e+03 79 2.20220e+03 2.84430e+03 80 1.90370e+03 2.81890e+03 81 1.87200e+03 2.81890e+03 82 2.01170e+03 2.76170e+03 83 1.90370e+03 2.69820e+03 84 1.95450e+03 2.58390e+03 85 2.05610e+03 2.57760e+03 86 2.09420e+03 2.56490e+03 87 2.19580e+03 2.47600e+03 88 2.58950e+03 2.99030e+03 89 2.60860e+03 2.99030e+03 90 2.50700e+03 3.00300e+03 91 2.89430e+03 3.04750e+03 92 2.89430e+03 3.00300e+03 93 2.90700e+03 2.97130e+03 94 3.02770e+03 3.04750e+03 95 2.79270e+03 2.81250e+03 96 2.22760e+03 2.81250e+03 97 2.58320e+03 2.79980e+03 98 2.59590e+03 2.77440e+03 99 2.50700e+03 2.77440e+03 100 2.72290e+03 2.75540e+03 101 2.61490e+03 2.74900e+03 102 2.88800e+03 2.73000e+03 103 3.21180e+03 2.73000e+03 104 3.14200e+03 2.71730e+03 105 2.75460e+03 2.69820e+03 106 2.45620e+03 2.69820e+03 107 2.57050e+03 2.62200e+03 108 2.72290e+03 2.62200e+03 109 3.36420e+03 2.62200e+03 110 2.90070e+03 2.61570e+03 111 3.13560e+03 2.60300e+03 112 2.71020e+03 2.59660e+03 113 2.71650e+03 2.54580e+03 114 2.88800e+03 2.53310e+03 115 2.84990e+03 2.51410e+03 116 2.29740e+03 2.51410e+03 117 2.60860e+03 2.49500e+03 118 3.22450e+03 2.48870e+03 119 2.69110e+03 2.47600e+03 120 2.87530e+03 2.43790e+03 121 2.50060e+03 2.41880e+03 122 2.43080e+03 2.39980e+03 123 2.87530e+03 2.39980e+03 124 3.12930e+03 2.36800e+03 125 2.58320e+03 2.36800e+03 126 2.49430e+03 2.36800e+03 127 2.78000e+03 2.36170e+03 128 2.33550e+03 2.35530e+03 129 2.61490e+03 2.31720e+03 130 2.92610e+03 2.30450e+03 131 2.80540e+03 2.29180e+03 132 2.58320e+03 2.29180e+03 133 2.82450e+03 2.28550e+03 134 2.86260e+03 2.27910e+03 135 2.79910e+03 2.26010e+03 136 2.69110e+03 2.26010e+03 137 2.75460e+03 2.25370e+03 138 2.91340e+03 2.25370e+03 139 2.34820e+03 2.24100e+03 140 2.90700e+03 2.23470e+03 141 3.13560e+03 2.23470e+03 142 2.92610e+03 2.22830e+03 143 3.43410e+03 2.20290e+03 144 2.88160e+03 2.19020e+03 145 2.60220e+03 2.19020e+03 146 2.71020e+03 2.16480e+03 147 2.79270e+03 2.14580e+03 148 2.82450e+03 2.13310e+03 149 2.42440e+03 2.10770e+03 150 2.86890e+03 2.10130e+03 151 3.43410e+03 2.10130e+03 152 2.61490e+03 2.08860e+03 153 3.07850e+03 2.08230e+03 154 2.58950e+03 2.07590e+03 155 2.48790e+03 2.06320e+03 156 2.73560e+03 2.06320e+03 157 3.44680e+03 2.04420e+03 158 3.35150e+03 2.03150e+03 159 2.62760e+03 2.01880e+03 160 2.69750e+03 2.00610e+03 161 2.48790e+03 1.99340e+03 162 2.68480e+03 1.97430e+03 163 2.46250e+03 1.96800e+03 164 3.13560e+03 1.96800e+03 165 3.39600e+03 1.96800e+03 166 2.74830e+03 1.96160e+03 167 2.72290e+03 1.96160e+03 168 3.23090e+03 1.95530e+03 169 2.97050e+03 1.94260e+03 170 2.47520e+03 1.93620e+03 171 2.51330e+03 1.92350e+03 172 2.92610e+03 1.91720e+03 173 2.49430e+03 1.91080e+03 174 2.61490e+03 1.90450e+03 175 2.51970e+03 1.89180e+03 176 2.58950e+03 1.89180e+03 177 3.40870e+03 1.89180e+03 178 3.64360e+03 1.89180e+03 179 2.78640e+03 1.88540e+03 180 2.65940e+03 1.88540e+03 181 2.49430e+03 1.87910e+03 182 2.95780e+03 1.87910e+03 183 3.45950e+03 1.87910e+03 184 3.05310e+03 1.86640e+03 185 2.77370e+03 1.86640e+03 186 2.71020e+03 1.86640e+03 187 3.23720e+03 1.85370e+03 188 3.32610e+03 1.85370e+03 189 2.73560e+03 1.84730e+03 190 2.49430e+03 1.83460e+03 191 3.26900e+03 1.83460e+03 192 3.30710e+03 1.83460e+03 193 3.36420e+03 1.83460e+03 194 2.67210e+03 1.82830e+03 195 3.35150e+03 1.82190e+03 196 3.47220e+03 1.82190e+03 197 2.86890e+03 1.81560e+03 198 2.81180e+03 1.80920e+03 199 3.35150e+03 1.80290e+03 200 3.29440e+03 1.79650e+03 201 2.54510e+03 1.79650e+03 202 3.11020e+03 1.77750e+03 203 3.16100e+03 1.77750e+03 204 3.28170e+03 1.77750e+03 205 3.33880e+03 1.75840e+03 206 2.99590e+03 1.75840e+03 207 3.19910e+03 1.72030e+03 208 3.00230e+03 1.72030e+03 209 2.63400e+03 1.72030e+03 210 2.50700e+03 1.70760e+03 211 2.96420e+03 1.70760e+03 212 3.05940e+03 1.70760e+03 213 3.09750e+03 1.70760e+03 214 3.64360e+03 1.70760e+03 215 2.80540e+03 1.70130e+03 216 2.58320e+03 1.69490e+03 217 3.07850e+03 1.69490e+03 218 2.89430e+03 1.68860e+03 219 3.14830e+03 1.68220e+03 220 3.21820e+03 1.66320e+03 221 3.19910e+03 1.66320e+03 222 2.72920e+03 1.66320e+03 223 2.95150e+03 1.65050e+03 224 2.43080e+03 1.64410e+03 225 2.50700e+03 1.63140e+03 226 3.59920e+03 1.63140e+03 227 3.13560e+03 1.62510e+03 228 3.07850e+03 1.62510e+03 229 3.05940e+03 1.62510e+03 230 2.77370e+03 1.62510e+03 231 2.91340e+03 1.61870e+03 232 3.30710e+03 1.61870e+03 233 3.13560e+03 1.60600e+03 234 3.01500e+03 1.60600e+03 235 2.42440e+03 1.59970e+03 236 2.83080e+03 1.59330e+03 237 3.29440e+03 1.59330e+03 238 3.12930e+03 1.58060e+03 239 3.37690e+03 1.56790e+03 240 2.61490e+03 1.56790e+03 241 2.93240e+03 1.54890e+03 242 3.04620e+03 1.54730e+03 243 3.07220e+03 1.54730e+03 244 3.09820e+03 1.54730e+03 245 3.12420e+03 1.54730e+03 246 3.15020e+03 1.54730e+03 247 3.17620e+03 1.54730e+03 248 3.20220e+03 1.54730e+03 249 3.22820e+03 1.54730e+03 250 3.25420e+03 1.54730e+03 251 3.28020e+03 1.54730e+03 252 3.30620e+03 1.54730e+03 253 3.33220e+03 1.54730e+03 254 3.35820e+03 1.54730e+03 255 2.72290e+03 1.53620e+03 256 3.06570e+03 1.52460e+03 257 3.11120e+03 1.52460e+03 258 3.13720e+03 1.52460e+03 259 3.16320e+03 1.52460e+03 260 3.18920e+03 1.52460e+03 261 3.21520e+03 1.52460e+03 262 3.24120e+03 1.52460e+03 263 3.26720e+03 1.52460e+03 264 3.29320e+03 1.52460e+03 265 3.34520e+03 1.52460e+03 266 2.43710e+03 1.52350e+03 267 2.96420e+03 1.51080e+03 268 2.74190e+03 1.50440e+03 269 2.43080e+03 1.50440e+03 270 3.41350e+03 1.49860e+03 271 2.99750e+03 1.49210e+03 272 2.82450e+03 1.48540e+03 273 3.02020e+03 1.47910e+03 274 3.39070e+03 1.47910e+03 275 3.41350e+03 1.47260e+03 276 2.83720e+03 1.46630e+03 277 2.60860e+03 1.46630e+03 278 2.99750e+03 1.46610e+03 279 3.10470e+03 1.46610e+03 280 3.13070e+03 1.46610e+03 281 3.15670e+03 1.46610e+03 282 3.18270e+03 1.46610e+03 283 3.20870e+03 1.46610e+03 284 3.23470e+03 1.46610e+03 285 3.26070e+03 1.46610e+03 286 3.28670e+03 1.46610e+03 287 3.31270e+03 1.46610e+03 288 3.41350e+03 1.44660e+03 289 3.07870e+03 1.44660e+03 290 3.11770e+03 1.44330e+03 291 3.14370e+03 1.44330e+03 292 3.16970e+03 1.44330e+03 293 3.19570e+03 1.44330e+03 294 3.22170e+03 1.44330e+03 295 3.24770e+03 1.44330e+03 296 3.27370e+03 1.44330e+03 297 2.90070e+03 1.44090e+03 298 2.69110e+03 1.44090e+03 299 2.99750e+03 1.44010e+03 300 3.33220e+03 1.44010e+03 301 2.43710e+03 1.43460e+03 302 3.39070e+03 1.43360e+03 303 3.30950e+03 1.42710e+03 304 3.02020e+03 1.42710e+03 305 2.58320e+03 1.42190e+03 306 3.07870e+03 1.42060e+03 307 3.41350e+03 1.42060e+03 308 3.28350e+03 1.41730e+03 309 3.12750e+03 1.41730e+03 310 2.99750e+03 1.41410e+03 311 3.33220e+03 1.41410e+03 312 3.23720e+03 1.40920e+03 313 3.19910e+03 1.40920e+03 314 3.10150e+03 1.40760e+03 315 3.39070e+03 1.40760e+03 316 3.44040e+03 1.40280e+03 317 2.95150e+03 1.40280e+03 318 3.02020e+03 1.40110e+03 319 3.30950e+03 1.40110e+03 320 3.41350e+03 1.39460e+03 321 3.07870e+03 1.39460e+03 322 3.16100e+03 1.39010e+03 323 2.99750e+03 1.38810e+03 324 3.33220e+03 1.38810e+03 325 2.93880e+03 1.38380e+03 326 2.87530e+03 1.38380e+03 327 3.10150e+03 1.38160e+03 328 3.39070e+03 1.38160e+03 329 3.13990e+03 1.37540e+03 330 3.02020e+03 1.37510e+03 331 3.30950e+03 1.37510e+03 332 3.41350e+03 1.36860e+03 333 3.07870e+03 1.36860e+03 334 2.79910e+03 1.36470e+03 335 3.59920e+03 1.36470e+03 336 3.33220e+03 1.36210e+03 337 2.99750e+03 1.36210e+03 338 3.10150e+03 1.35560e+03 339 3.39070e+03 1.35560e+03 340 3.26900e+03 1.35200e+03 341 2.91970e+03 1.35200e+03 342 2.83720e+03 1.35200e+03 343 3.02020e+03 1.34910e+03 344 3.30950e+03 1.34910e+03 345 2.87530e+03 1.34570e+03 346 3.07870e+03 1.34260e+03 347 3.41350e+03 1.34260e+03 348 3.48490e+03 1.33930e+03 349 2.97050e+03 1.33930e+03 350 2.99750e+03 1.33610e+03 351 3.33220e+03 1.33610e+03 352 2.91340e+03 1.33300e+03 353 3.10150e+03 1.32960e+03 354 3.39070e+03 1.32960e+03 355 3.30950e+03 1.32310e+03 356 3.24360e+03 1.32310e+03 357 3.02020e+03 1.32310e+03 358 2.95780e+03 1.32030e+03 359 3.15470e+03 1.32030e+03 360 3.07870e+03 1.31660e+03 361 3.41350e+03 1.31660e+03 362 3.61190e+03 1.31390e+03 363 3.33220e+03 1.31010e+03 364 2.99750e+03 1.31010e+03 365 3.10150e+03 1.30360e+03 366 3.39070e+03 1.30360e+03 367 3.30950e+03 1.29710e+03 368 3.02020e+03 1.29710e+03 369 2.84990e+03 1.29490e+03 370 2.87530e+03 1.29490e+03 371 2.90070e+03 1.29490e+03 372 3.54200e+03 1.29490e+03 373 3.41350e+03 1.29060e+03 374 3.07870e+03 1.29060e+03 375 3.17370e+03 1.28850e+03 376 3.33220e+03 1.28410e+03 377 2.99750e+03 1.28410e+03 378 3.10150e+03 1.27760e+03 379 3.39070e+03 1.27760e+03 380 3.30950e+03 1.27110e+03 381 3.02020e+03 1.27110e+03 382 2.76730e+03 1.26950e+03 383 3.07870e+03 1.26460e+03 384 3.41350e+03 1.26460e+03 385 2.60220e+03 1.26310e+03 386 3.12750e+03 1.26130e+03 387 3.28350e+03 1.26130e+03 388 3.33220e+03 1.25810e+03 389 2.99750e+03 1.25810e+03 390 2.88160e+03 1.25680e+03 391 2.79270e+03 1.25680e+03 392 2.55780e+03 1.25680e+03 393 3.10150e+03 1.25160e+03 394 3.39070e+03 1.25160e+03 395 3.47850e+03 1.25040e+03 396 3.02020e+03 1.24510e+03 397 2.91970e+03 1.24410e+03 398 2.81810e+03 1.24410e+03 399 2.51970e+03 1.24410e+03 400 3.07870e+03 1.23860e+03 401 3.41350e+03 1.23860e+03 402 3.29320e+03 1.23530e+03 403 3.26720e+03 1.23530e+03 404 3.24120e+03 1.23530e+03 405 3.21520e+03 1.23530e+03 406 3.18920e+03 1.23530e+03 407 3.16320e+03 1.23530e+03 408 3.13720e+03 1.23530e+03 409 2.99750e+03 1.23210e+03 410 3.33220e+03 1.23210e+03 411 2.88160e+03 1.22500e+03 412 3.09820e+03 1.21260e+03 413 3.12420e+03 1.21260e+03 414 3.15020e+03 1.21260e+03 415 3.17620e+03 1.21260e+03 416 3.20220e+03 1.21260e+03 417 3.22820e+03 1.21260e+03 418 3.25420e+03 1.21260e+03 419 3.28020e+03 1.21260e+03 420 3.30620e+03 1.21260e+03 421 3.41350e+03 1.21260e+03 422 2.58950e+03 1.21230e+03 423 2.57050e+03 1.21230e+03 424 2.99750e+03 1.20610e+03 425 3.02020e+03 1.19960e+03 426 3.39070e+03 1.19960e+03 427 3.45950e+03 1.19960e+03 428 3.48490e+03 1.19960e+03 429 2.65940e+03 1.19330e+03 430 3.41350e+03 1.18660e+03 431 2.93880e+03 1.18040e+03 432 2.99750e+03 1.18010e+03 433 3.06570e+03 1.15410e+03 434 3.11770e+03 1.15410e+03 435 3.14370e+03 1.15410e+03 436 3.16970e+03 1.15410e+03 437 3.19570e+03 1.15410e+03 438 3.22170e+03 1.15410e+03 439 3.24770e+03 1.15410e+03 440 3.27370e+03 1.15410e+03 441 3.29970e+03 1.15410e+03 442 3.34520e+03 1.15410e+03 443 2.92610e+03 1.14250e+03 444 3.05270e+03 1.13130e+03 445 3.07870e+03 1.13130e+03 446 3.10470e+03 1.13130e+03 447 3.13070e+03 1.13130e+03 448 3.15670e+03 1.13130e+03 449 3.18270e+03 1.13130e+03 450 3.20870e+03 1.13130e+03 451 3.23470e+03 1.13130e+03 452 3.26070e+03 1.13130e+03 453 3.28670e+03 1.13130e+03 454 3.31270e+03 1.13130e+03 455 3.33870e+03 1.13130e+03 456 3.36470e+03 1.13130e+03 457 2.74190e+03 1.12980e+03 458 2.86260e+03 1.12340e+03 459 3.06580e+03 1.09800e+03 460 3.03400e+03 1.09170e+03 461 2.87530e+03 1.07900e+03 462 2.79270e+03 1.04090e+03 463 2.90070e+03 1.02820e+03 464 2.83720e+03 1.02180e+03 465 2.94510e+03 1.01550e+03 466 2.86260e+03 1.00910e+03 467 2.93880e+03 8.31300e+02 468 3.07210e+03 9.32900e+02 469 3.05940e+03 9.52000e+02 470 3.03400e+03 9.64700e+02 471 3.06580e+03 9.71000e+02 472 3.09120e+03 9.90100e+02 473 3.20550e+03 9.83700e+02 474 3.40870e+03 8.75800e+02 475 3.45950e+03 9.20200e+02 476 3.51030e+03 1.01550e+03 477 3.36420e+03 1.01550e+03 478 3.38330e+03 1.02820e+03 479 3.49760e+03 1.02820e+03 480 3.39600e+03 1.05360e+03 481 3.29440e+03 1.05360e+03 482 3.51660e+03 1.07260e+03 483 3.21820e+03 1.09800e+03 484 3.56740e+03 1.10440e+03 485 3.55470e+03 1.12340e+03 486 3.39600e+03 1.12340e+03 487 3.54840e+03 1.14250e+03 488 3.52930e+03 1.15520e+03 489 3.40870e+03 1.16150e+03 490 3.47220e+03 1.17420e+03 491 3.69440e+03 1.30120e+03 492 3.74520e+03 1.27580e+03 493 3.74520e+03 1.02180e+03 EOF TSP/inst/doc/0000755000176200001440000000000013623557437012461 5ustar liggesusersTSP/inst/doc/TSP.Rnw0000644000176200001440000013174513623555613013624 0ustar liggesusers%\documentclass[10pt,a4paper,fleqn]{article} \documentclass[nojss]{jss} \usepackage[english]{babel} %% my packages %\usepackage{a4wide} %\usepackage[round,longnamesfirst]{natbib} %\usepackage{hyperref} % \usepackage{amsmath} \usepackage{amsfonts} % %\newcommand{\strong}[1]{{\normalfont\fontseries{b}\selectfont #1}} \newcommand{\class}[1]{\mbox{\textsf{#1}}} \newcommand{\func}[1]{\mbox{\texttt{#1()}}} %\newcommand{\code}[1]{\mbox{\texttt{#1}}} %\newcommand{\pkg}[1]{\strong{#1}} \newcommand{\samp}[1]{`\mbox{\texttt{#1}}'} %\newcommand{\proglang}[1]{\textsf{#1}} \newcommand{\set}[1]{\mathcal{#1}} %\usepackage{Sweave} %% \VignetteIndexEntry{Introduction to TSP} \author{Michael Hahsler\\Southern Methodist University \And Kurt Hornik\\Wirtschaftsuniversit\"at Wien} \title{\pkg{TSP} -- Infrastructure for the Traveling Salesperson Problem} %% for pretty printing and a nice hypersummary also set: \Plainauthor{Michael Hahsler, Kurt Hornik} %% comma-separated \Plaintitle{TSP -- Infrastructure for the Traveling Salesperson Problem} %% without formatting \Shorttitle{Infrastructure for the TSP} %% a short title (if necessary) %% an abstract and keywords \Abstract{ The traveling salesperson problem (also known as traveling salesman problem or TSP) is a well known and important combinatorial optimization problem. The goal is to find the shortest tour that visits each city in a given list exactly once and then returns to the starting city. Despite this simple problem statement, solving the TSP is difficult since it belongs to the class of NP-complete problems. The importance of the TSP arises besides from its theoretical appeal from the variety of its applications. Typical applications in operations research include vehicle routing, computer wiring, cutting wallpaper and job sequencing. The main application in statistics is combinatorial data analysis, e.g., reordering rows and columns of data matrices or identifying clusters. In this paper we introduce the \proglang{R}~package \pkg{TSP} which provides a basic infrastructure for handling and solving the traveling salesperson problem. The package features S3 classes for specifying a TSP and its (possibly optimal) solution as well as several heuristics to find good solutions. In addition, it provides an interface to \emph{Concorde}, one of the best exact TSP solvers currently available. } \Keywords{combinatorial optimization, traveling salesman problem, \proglang{R}} \Plainkeywords{combinatorial optimization, traveling salesman problem, R} %% without formatting %% The address of (at least) one author should be given %% in the following format: \Address{ Michael Hahsler\\ Engineering Management, Information, and Systems\\ Lyle School of Engineering\\ Southern Methodist University\\ P.O. Box 750123 \\ Dallas, TX 75275-0123\\ E-mail: \email{mhahsler@lyle.smu.edu}\\ Kurt Hornik\\ Department of Finance, Accounting and Statistics\\ Wirtschaftsuniversit\"at Wien\\ 1090 Wien, Austria\\ E-mail: \email{kurt.hornik@wu-wien.ac.at}\\ URL: \url{http://statmath.wu.ac.at/~hornik/} } \begin{document} <>= options(width = 75, useFancyQuotes=FALSE, prompt="R> ") ### for sampling set.seed(1234) @ %\title{Introduction to \pkg{TSP} -- Infrastructure for the Traveling % Salesperson Problem} %\author{Michael Hahsler and Kurt Hornik} \maketitle \sloppy %\abstract{ % The traveling salesperson (or, salesman) problem (TSP) is a % well known and important combinatorial optimization problem. The goal % is to find the shortest tour that visits each city in a given list % exactly once and then returns to the starting city. Despite this % simple problem statement, solving the TSP is difficult since it % belongs to the class of NP-complete problems. The importance of the % TSP arises besides from its theoretical appeal from the variety of its % applications. Typical applications in operations research include % vehicle routing, computer wiring, cutting wallpaper and job % sequencing. The main application in statistics is combinatorial data % analysis, e.g., reordering rows and columns of data matrices or % identifying clusters. In this paper we introduce the % \proglang{R}~package \pkg{TSP} which provides a basic infrastructure % for handling and solving the traveling salesperson problem. The % package features S3 classes for specifying a TSP and its (possibly % optimal) solution as well as several heuristics to find good % solutions. In addition, it provides an interface to \emph{Concorde}, % one of the best exact TSP solvers currently available. } \section{Introduction} The traveling salesperson problem~\citep[TSP;][]{Lawler1985, Gutin2002} is a well known and important combinatorial optimization problem. The goal is to find the shortest tour that visits each city in a given list exactly once and then returns to the starting city. Formally, the TSP can be stated as follows. The distances between $n$ cities are stored in a distance matrix $\mathbf{D}$ with elements $d_{ij}$ where $i,j = 1\dots n$ and the diagonal elements $d_{ii}$ are zero. A \emph{tour} can be represented by a cyclic permutation $\pi$ of $\{1, 2,\dots, n\}$ where $\pi(i)$ represents the city that follows city $i$ on the tour. The traveling salesperson problem is then the optimization problem to find a permutation $\pi$ that minimizes the \emph{length of the tour} denoted by \begin{equation} \sum_{i=1}^n d_{i\pi(i)}. \end{equation} % see Lenstra & Kan 1975: Some simple Applications to the TSP For this minimization task, the tour length of $(n-1)!$ permutation vectors have to be compared. This results in a problem which is very hard to solve and in fact known to be NP-complete~\citep{Johnson1985a}. However, solving TSPs is an important part of applications in many areas including vehicle routing, computer wiring, machine sequencing and scheduling, frequency assignment in communication networks~\citep{Lenstra1975, Punnen2002}. %and structuring of %matrices~\citep{Lenstra1975, Punnen2002}. Applications in statistical data analysis include ordering and clustering objects. For example, data analysis applications in psychology ranging from profile smoothing to finding an order in developmental data are presented by~\cite{Hubert1978}. Clustering and ordering using TSP solvers is currently becoming popular in biostatistics. For example, \cite{Ray2007} describe an application for ordering genes and \cite{Johnson2006} use a TSP solver for clustering proteins. In this paper we give a very brief overview of the TSP and introduce the \proglang{R}~package \pkg{TSP} which provides an infrastructure for handling and solving TSPs. The paper is organized as follows. In Section~\ref{sec:TSP} we briefly present important aspects of the TSP including different problem formulations and approaches to solve TSPs. In Section~\ref{sec:infrastructure} we give an overview of the infrastructure implemented in \pkg{TSP} and the basic usage. In Section~\ref{sec:examples}, several examples are used to illustrate the package's capabilities. Section~\ref{sec:conclusion} concludes the paper. A previous version of this manuscript was published in the \emph{Journal of Statistical Software} \citep{TSP:Hahsler+Hornik2007}. \section{Theory} \label{sec:TSP} In this section, we briefly summarize some aspects of the TSP which are important for the implementation of the \pkg{TSP} package described in this paper. For a complete treatment of all aspects of the TSP, we refer the interested reader to the classic book edited by \cite{Lawler1985} and the more modern book edited by \cite{Gutin2002}. It has to be noted that in this paper, following the origin of the TSP, the term \emph{distance} is used. Distance is used here interchangeably with dissimilarity or cost and, unless explicitly stated, no restrictions to measures which obey the triangle inequality are made. An important distinction can be made between the symmetric TSP and the more general asymmetric TSP. For the symmetric case (normally referred to as just \emph{TSP}), for all distances in $\mathbf{D}$ the equality $d_{ij} = d_{ji}$ holds, i.e., it does not matter if we travel from $i$ to $j$ or the other way round, the distance is the same. In the asymmetric case (called \emph{ATSP}), the distances are not equal for all pairs of cities. Problems of this kind arise when we do not deal with spatial distances between cities but, e.g., with the cost or necessary time associated with traveling between locations, where the price for the plane ticket between two cities may be different depending on which way we go. \subsection{Different formulations of the TSP} \label{sec:formulations} Other than the permutation problem in the introduction, the TSP can also be formulated as a graph theoretic problem. Here the TSP is formulated by means of a complete graph $G = (V, E)$, where the cities correspond to the node set $V = \{1,2,\ldots,n\}$ and each edge $e_i \in E$ has an associated weight $w_i$ representing the distance between the nodes it connects. If the graph is not complete, the missing edges can be replaced by edges with very large distances. The goal is to find a \emph{Hamiltonian cycle}, i.e., a cycle which visits each node in the graph exactly once, with the least weight in the graph~\citep{Hoffman1985}. This formulation naturally leads to procedures involving minimum spanning trees for tour construction or edge exchanges to improve existing tours. TSPs can also be represented as integer and linear programming problems~\citep[see, e.g.,][]{Punnen2002}. The \emph{integer programming (IP) formulation} is based on the assignment problem with additional constraint of no sub-tours: \[ \begin{array}{rl} \text{Minimize } & \sum_{i=1}^n\sum_{j=1}^n{d_{ij}x_{ij}} % = \mathrm{trace}(\mathbf{D}^T\mathbf{X}) \\[3mm] \text{Subject to } & \sum_{i=1}^n{x_{ij}=1}, \quad j=1,\ldots,n, \\ & \sum_{j=1}^n{x_{ij}=1}, \quad i=1,\ldots,n, \\ & x_{ij} = 0 \text{ or } 1 \\ & \text{no sub-tours allowed} \\ \end{array} \] The solution matrix $\mathbf{X} = (x_{ij})$ of the assignment problem represents a tour or a collection of sub-tour (several unconnected cycles) where only edges which corresponding to elements $x_{ij} = 1$ are on the tour or a sub-tour. The additional restriction that no sub-tours are allowed (called \emph{sub-tour elimination constraints}) restrict the solution to only proper tours. Unfortunately, the number of sub-tour elimination constraints grows exponentially with the number of cities which leads to an extremely hard problem. The \emph{linear programming (LP) formulation} of the TSP is given by: \[ \begin{array}{rl} \text{Minimize } & \sum_{i=1}^m{w_ix_i} = \mathbf{w}^T\mathbf{x}\\[3mm] \text{Subject to } & \mathbf{x} \in \mathcal{S} \\ \end{array} \] where $m$ is the number of edges $e_i$ in $G$, $w_i \in \mathbf{w}$ is the weight of edge $e_i$ and $\mathbf{x}$ is the incidence vector indicating the presence or absence of each edge in the tour. Again, the constraints given by $\mathbf{x} \in \mathcal{S}$ are problematic since they have to contain the set of incidence vectors of all possible Hamiltonian cycles in $G$ which amounts to a direct search of all $(n-1)!$ possibilities and thus in general is infeasible. However, relaxed versions of the linear programming problem with removed integrality and sub-tour elimination constraints are extensively used by modern TSP solvers where such a partial description of constraints is used and improved iteratively in a branch-and-bound approach. \subsection{Useful manipulations of the distance matrix} \label{sec:manipulations} Sometimes it is useful to transform the distance matrix $\mathbf{D} = (d_{ij})$ of a TSP into a different matrix $\mathbf{D'} = (d'_{ij})$ which has the same optimal solution. Such a transformation requires that for any Hamiltonian cycle $H$ in a graph represented by its distance matrix $\mathbf{D}$ the equality \begin{equation*} \sum_{i,j \in H}{d_{ij}} = \alpha \sum_{i,j \in H}{d'_{ij}} + \beta \end{equation*} holds for suitable $\alpha > 0$ and $\beta \in \mathbb{R}$. From the equality we see that additive and multiplicative constants leave the optimal solution invariant. This property is useful to rescale distances, e.g., for many solvers, distances in the interval $[0, 1]$ have to be converted into integers from~1 to a maximal value. A different manipulation is to reformulate an asymmetric TSP as a symmetric TSP. This is possible by doubling the number of cities~\citep{Jonker1983}. For each city a dummy city is added. Between each city and its corresponding dummy city a very small value (e.g., $-\infty$) is used. This makes sure that each city always occurs in the solution together with its dummy city. The original distances are used between the cities and the dummy cities, where each city is responsible for the distance going to the city and the dummy city is responsible for the distance coming from the city. The distances between all cities and the distances between all dummy cities are set to a very large value (e.g., $\infty$) which makes these edges infeasible. An example for equivalent formulations as an asymmetric TSP (to the left) and a symmetric TSP (to the right) for three cities is: \begin{equation*} \begin{pmatrix} 0 &d_{12} &d_{13} \\ d_{21} &0 &d_{23} \\ d_{31} &d_{32} &0 \\ \end{pmatrix} \Longleftrightarrow \begin{pmatrix} 0 &\infty &\infty & -\infty &d_{21} &d_{31} \\ \infty &0 &\infty & d_{12} &-\infty &d_{31} \\ \infty &\infty &0 & d_{13} &d_{23} &-\infty \\ -\infty &d_{12} &d_{13} & 0 &\infty &\infty \\ d_{21} &-\infty &d_{23} & \infty &0 &\infty \\ d_{31} &d_{32} &-\infty & \infty &\infty &0 \\ \end{pmatrix} \end{equation*} Instead of the infinity values suitably large negative and positive values can be used. The new symmetric TSP can be solved using techniques for symmetric TSPs which are currently far more advanced than techniques for ATSPs. Removing the dummy cities from the resulting tour gives the solution for the original ATSP. \subsection{Finding exact solutions for the TSP} \label{sec:exact} Finding the exact solution to a TSP with $n$ cities requires to check $(n-1)!$ possible tours. To evaluate all possible tours is infeasible for even small TSP instances. To find the optimal tour \cite{Held1962} presented the following \emph{dynamic programming} formulation: Given a subset of city indices (excluding the first city) $S \subset \{2, 3, \dots, n\}$ and $l \in S$, let $d^*(S, l)$ denote the length of the shortest path from city $1$ to city $l$, visiting all cities in $S$ in-between. For $S = \{l\}$, $d^*(S,l)$ is defined as $d_{1l}$. The shortest path for larger sets with $|S| > 1$ is \begin{equation} d^*(S,l) = \mathrm{min}_{m \in S\setminus\{l\}}\Bigl( d^*(S\setminus\{l\},m) + d_{ml}\Bigl). %\text{ for } |S| > 1. \end{equation} Finally, the minimal tour length for a complete tour which includes returning to city $1$ is \begin{equation} d^{**} = \mathrm{min}_{l \in \{2,3,\dots,n\}}\Bigl( d^*(\{2,3,\dots,n\}, l) + d_{l1}\Bigl). \end{equation} Using the last two equations, the quantities $d^*(S,l)$ can be computed recursively and the minimal tour length $d^{**}$ can be found. In a second step, the optimal permutation $\pi = \{1, i_2, i_3,\dots,i_n\}$ of city indices $1$ through $n$ can be computed in reverse order, starting with $i_n$ and working successively back to $i_2$. The procedure exploits the fact that a permutation $\pi$ can only be optimal, if \begin{equation} d^{**} = d^*(\{2,3,\dots,n\}, i_n) + d_{i_n1} \end{equation} and, for $2 \le p \le n-1$, \begin{equation} d^*(\{i_2, i_3,\dots, i_p, i_{p+1}\}, i_{p+1}) = d^*(\{i_2,i_3,\dots,i_p\}, i_p) + d_{i_pi_{p+1}}. \end{equation} The space complexity of storing the values for all $d^*(S,l)$ is $(n-1)2^{n-2}$ which severely restricts the dynamic programming algorithm to TSP problems of small sizes. However, for very small TSP instances this approach is fast and efficient. %\marginpar{time complexity if order $n^22^n$. Check!} A different method, which can deal with larger instances, uses a relaxation of the linear programming problem presented in Section~\ref{sec:formulations} and iteratively tightens the relaxation till a solution is found. This general method for solving linear programming problems with complex and large inequality systems is called \emph{cutting plane method} and was introduced by \cite{Dantzig1954}. Each iteration begins with using instead of the original linear inequality description $\mathcal{S}$ the relaxation $A\mathbf{x} \le b$, where the polyhedron $P$ defined by the relaxation contains $\mathcal{S}$ and is bounded. The optimal solution $\mathbf{x}^*$ of the relaxed problem can be obtained using standard linear programming solvers. If the $\mathbf{x}^*$ found belongs to $\mathcal{S}$, the optimal solution of the original problem is obtained, otherwise, a linear inequality can be found which is satisfied by all points in $\mathcal{S}$ but violated by $\mathbf{x}^*$. Such an inequality is called a cutting plane or cut. A family of such cutting planes can be added to the inequality system $A\mathbf{x} \le b$ to obtain a tighter relaxation for the next iteration. If no further cutting planes can be found or the improvement in the objective function due to adding cuts gets very small, the problem is branched into two sub-problems which can be minimized separately. Branching is done iteratively which leads to a binary tree of sub-problems. Each sub-problem is either solved without further branching or is found to be irrelevant because its relaxed version already produces a longer path than a solution of another sub-problem. This method is called \emph{branch-and-cut}~\citep{Padberg1990} which is a variation of the well known \emph{branch-and-bound}~\citep{Land1960} procedure. The initial polyhedron $P$ used by \cite{Dantzig1954} contains all vectors $\mathbf{x}$ for which all $x_e \in \mathbf{x}$ satisfy $0 \le x_e \le 1$ and in the resulting tour each city is linked to exactly two other cities. Various separation algorithms for finding subsequent cuts to prevent sub-tours (\emph{sub-tour elimination inequalities}) and to ensure an integer solution \citep[\emph{Gomory cuts;}][]{Gomory1963} were developed over time. The currently most efficient implementation of this method is \emph{Concorde} described in~\cite{Applegate2000}. \subsection{Heuristics for the TSP} \label{sec:heuristics} The NP-completeness of the TSP already makes it more time efficient for small-to-medium size TSP instances to rely on heuristics in case a good but not necessarily optimal solution is sufficient. TSP heuristics typically fall into two groups, tour construction heuristics which create tours from scratch and tour improvement heuristics which use simple local search heuristics to improve existing tours. In the following we will only discuss heuristics available in \pkg{TSP}, for a comprehensive overview of the multitude of TSP heuristics including an experimental comparison, we refer the reader to the book chapter by \cite{Johnson2002}. \subsubsection{Tour construction heuristics} The implemented tour construction heuristics are the nearest neighbor algorithm and the insertion algorithms. \paragraph{Nearest neighbor algorithm.} The nearest neighbor algorithm~\citep{Rosenkrantz1977} follows a very simple greedy procedure: The algorithm starts with a tour containing a randomly chosen city and then always adds to the last city in the tour the nearest not yet visited city. The algorithm stops when all cities are on the tour. An extension to this algorithm is to repeat it with each city as the starting point and then return the best tour found. This heuristic is called repetitive nearest neighbor. \paragraph{Insertion algorithms.} All insertion algorithms~\citep{Rosenkrantz1977} start with a tour consisting of an arbitrary city and then choose in each step a city $k$ not yet on the tour. This city is inserted into the existing tour between two consecutive cities $i$ and $j$, such that the insertion cost (i.e., the increase in the tour's length) $$d(i,k) + d(k,j) - d(i,j)$$ is minimized. The algorithms stop when all cities are on the tour. The insertion algorithms differ in the way the city to be inserted next is chosen. The following variations are implemented: \begin{description} \item[Nearest insertion] The city $k$ is chosen in each step as the city which is nearest to a city on the tour. \item[Farthest insertion] The city $k$ is chosen in each step as the city which is farthest from any of the cities on the tour. \item[Cheapest insertion] The city $k$ is chosen in each step such that the cost of inserting the new city is minimal. \item[Arbitrary insertion] The city $k$ is chosen randomly from all cities not yet on the tour. \end{description} The nearest and cheapest insertion algorithms correspond to the minimum spanning tree algorithm by \cite{Prim1957}. Adding a city to a partial tour corresponds to adding an edge to a partial spanning tree. For TSPs with distances obeying the triangular inequality, the equality to minimum spanning trees provides a theoretical upper bound for the two algorithms of twice the optimal tour length. The idea behind the farthest insertion algorithm is to link cities far outside into the tour first to establish an outline of the whole tour early. With this change, the algorithm cannot be directly related to generating a minimum spanning tree and thus the upper bound stated above cannot be guaranteed. However, it can was shown that the algorithm generates tours which approach $2/3$ times the optimal tour length~\citep{Johnson1985}. \subsubsection{Tour improvement heuristics} Tour improvement heuristics are simple local search heuristics which try to improve an initial tour. A comprehensive treatment of the topic can be found in the book chapter by \cite{Rego2002}. \paragraph{$k$-Opt heuristics.} The idea is to define a neighborhood structure on the set of all admissible tours. Typically, a tour $t'$ is a neighbor of another tour $t$ if $t'$ can be obtained from $t$ by deleting $k$ edges and replacing them by a set of different feasible edges (a $k$-Opt move). In such a structure, the tour can iteratively be improved by always moving from one tour to its best neighbor till no further improvement is possible. The resulting tour represents a local optimum which is called $k$-optimal. Typically, $2$-Opt~\citep{Croes1958} and $3$-Opt~\citep{Lin1965} heuristics are used in practice. \paragraph{Lin-Kernighan heuristic.} This heuristic~\citep{Lin1973} does not use a fixed value for $k$ for its $k$-Opt moves, but tries to find the best choice of $k$ for each move. The heuristic uses the fact that each $k$-Opt move can be represented as a sequence of $2$-Opt moves. It builds up a sequence of $2$-Opt moves, checking after each additional move whether a stopping rule is met. Then the part of the sequence which gives the best improvement is used. This is equivalent to a choice of one $k$-Opt move with variable $k$. Such moves are used till a local optimum is reached. By using full backtracking, the optimal solution can always be found, but the running time would be immense. Therefore, only limited backtracking is allowed in the procedure, which helps to find better local optima or even the optimal solution. Further improvements to the procedure are described by \cite{Lin1973}. \section{Computational infrastructure: the TSP package} \label{sec:infrastructure} In package~\pkg{TSP}, a traveling salesperson problem is defined by an object of class \class{TSP} (symmetric) or \class{ATSP} (asymmetric). \func{solve\_TSP} is used to find a solution, which is represented by an object of class \class{TOUR}. Figure~\ref{fig:overview} gives an overview of this infrastructure. \begin{figure} \centering \includegraphics[width=14cm]{overview} \caption{An overview of the classes in \pkg{TSP}.} \label{fig:overview} \end{figure} \class{TSP} objects can be created from a distance matrix (a \class{dist} object) or a symmetric matrix using the creator function \func{TSP} or coercion with \func{as.TSP}. Similarly, \class{ATSP} objects are created by \func{ATSP} or \func{as.ATSP} from square matrices representing the distances. In the creation process, labels are taken and stored as city names in the object or can be explicitly given as arguments to the creator functions. Several methods are defined for the classes: \begin{itemize} \item \func{print} displays basic information about the problem (number of cities and the distance measure employed). \item \func{n\_of\_cities} returns the number of cities. \item \func{labels} returns the city names. \item \func{image} produces a shaded matrix plot of the distances between cities. The order of the cities can be specified as the argument \code{order}. \end{itemize} Internally, an object of class \class{TSP} is a \class{dist} object with an additional class attribute and, therefore, if needed, can be coerced to \class{dist} or to a matrix. An \class{ATSP} object is represented as a square matrix. Obviously, asymmetric TSPs are more general than symmetric TSPs, hence, symmetric TSPs can also be represented as asymmetric TSPs. To formulate an asymmetric TSP as a symmetric TSP with double the number of cities (see Section \ref{sec:manipulations}), \func{reformulate\_ATSP\_as\_TSP} is provided. This function creates the necessary dummy cities and adapts the distance matrix accordingly. A popular format to save TSP descriptions to disk which is supported by most TSP solvers is the format used by \emph{TSPLIB}, a library of sample instances of the TSP maintained by \cite{Reinelt2004}. The \pkg{TSP} package provides \func{read\_TSPLIB} and \func{write\_TSPLIB} to read and save symmetric and asymmetric TSPs in TSPLIB format. Class \class{TOUR} represents a solution to a TSP by an integer permutation vector containing the ordered indices and labels of the cities to visit. In addition, it stores an attribute indicating the length of the tour. Again, suitable \func{print} and \func{labels} methods are provided. The raw permutation vector (i.e., the order in which cities are visited) can be obtained from a tour using \func{as.integer}. With \func{cut\_tour}, a circular tour can be split at a specified city resulting in a path represented by a vector of city indices. The length of a tour can always be calculated using \func{tour\_length} and specifying a TSP and a tour. Instead of the tour, an integer permutation vector calculated outside the \pkg{TSP} package can be used as long as it has the correct length. All TSP solvers in \pkg{TSP} can be used with the simple common interface: \begin{quote} \code{solve\_TSP(x, method, control)} \end{quote} where \code{x} is the TSP to be solved, \code{method} is a character string indicating the method used to solve the TSP and \code{control} can contain a list with additional information used by the solver. The available algorithms are shown in Table~\ref{tab:methods}. \begin{table} \caption{Available algorithms in \pkg{TSP}.} \label{tab:methods} \centering \begin{tabular}{llc} \hline \textbf{Algorithm} & \textbf{Method argument} & \textbf{Applicable to} \\ \hline Nearest neighbor algorithm & \code{"nn"} & TSP/ATSP \\ Repetitive nearest neighbor algorithm & \code{"repetitive\_nn"} & TSP/ATSP \\ Nearest insertion & \code{"nearest\_insertion"} & TSP/ATSP \\ Farthest insertion & \code{"farthest\_insertion"} & TSP/ATSP \\ Cheapest insertion & \code{"cheapest\_insertion"} & TSP/ATSP \\ Arbitrary insertion & \code{"arbitrary\_insertion"} & TSP/ATSP \\ Concorde TSP solver & \code{"concorde"} & TSP \\ 2-Opt improvement heuristic & \code{"two\_opt"} & TSP/ATSP \\ Chained Lin-Kernighan & \code{"linkern"} & TSP \\ \hline \end{tabular} \end{table} All algorithms except the Concorde TSP solver and the Chained Lin-Kernighan heuristic (a Lin-Kernighan variation described in \cite{Applegate2003}) are included in the package and distributed under the GNU Public License (GPL). For the Concorde TSP solver and the Chained Lin-Kernighan heuristic only a simple interface (using \func{write\_TSPLIB}, calling the executable and reading back the resulting tour) is included in \pkg{TSP}. The executable itself is part of the Concorde distribution, has to be installed separately and is governed by a different license which allows only for academic use. The interfaces are included since Concorde~\citep{Applegate2000,Applegate2006} is currently one of the best implementations for solving symmetric TSPs based on the branch-and-cut method discussed in section~\ref{sec:exact}. In May 2004, Concorde was used to find the optimal solution for the TSP of visiting all 24,978 cities in Sweden. The computation was carried out on a cluster with 96 Xeon 2.8 GHz nodes and took in total almost 100 CPU years. \section{Examples} \label{sec:examples} In this section we provide some examples for the use of package~\pkg{TSP}. We start with a simple example of how to use the interface of the TSP solver to compare different heuristics. Then we show how to solve related tasks, using the Hamiltonian shortest path problem as an example. Finally, we give an example of clustering using the \pkg{TSP} package. An additional application can be found in package \pkg{seriation}~\citep{TSP:Hahsler+Buchta+Hornik:2006} which uses the TSP solvers from \pkg{TSP} to order (seriate) objects given a proximity matrix. \subsection{Comparing some heuristics} In the following example, we use several heuristics to find a short path in the \code{USCA50} data set which contains the distances between the first 50 cities in the \code{USCA312} data set. The \code{USCA312} data set contains the distances between 312 cities in the USA and Canada coded as a symmetric TSP. The smaller data set is used here, since some of the heuristic solvers employed are rather slow. <<>>= library("TSP") data("USCA50") USCA50 @ We calculate tours using different heuristics and store the results in the list \code{tours}. As an example, we show the first tour which displays the method employed, the number of cities involved and the tour length. All tour lengths are compared using the dot chart in Figure~\ref{fig:dotchart}. For the chart, we add a point for the optimal solution which has a tour length of 14497. The optimal solution can be found using Concorde (\code{method = "concorde"}). It is omitted here, since Concorde has to be installed separately. <>= set.seed(1234) @ <>= methods <- c("nearest_insertion", "farthest_insertion", "cheapest_insertion", "arbitrary_insertion", "nn", "repetitive_nn", "two_opt") tours <- sapply(methods, FUN = function(m) solve_TSP(USCA50, method = m), simplify = FALSE) ## tours$concorde <- solve_TSP(tsp, method = "concorde") tours[[1]] dotchart(sort(c(sapply(tours, tour_length), optimal = 14497)), xlab = "tour length", xlim = c(0, 20000)) @ \begin{figure} \centering \includegraphics[width=11cm, trim=0 10 0 0]{TSP-dotchart_USCA50} \caption{Comparison of the tour lengths for the USCA50 data set.} \label{fig:dotchart} \end{figure} \subsection{Finding the shortest Hamiltonian path} The problem of finding the shortest Hamiltonian path through a graph (i.e., a path which visits each node in the graph exactly once) can be transformed into the TSP with cities and distances representing the graphs vertices and edge weights, respectively~\citep{Garfinkel1985}. Finding the shortest Hamiltonian path through all cities disregarding the endpoints can be achieved by inserting a `dummy city' which has a distance of zero to all other cities. The position of this city in the final tour represents the cutting point for the path. In the following we use a heuristic to find a short path in the \code{USCA312} data set. Inserting dummy cities is performed in \pkg{TSP} by \func{insert\_dummy}. <>= set.seed(1234) @ <<>>= library("TSP") data("USCA312") tsp <- insert_dummy(USCA312, label = "cut") tsp @ The TSP now contains an additional dummy city and we can try to solve this TSP. <<>>= tour <- solve_TSP(tsp, method="farthest_insertion") tour @ Since the dummy city has distance zero to all other cities, the path length is equal to the tour length reported above. The path starts with the first city in the list after the `dummy' city and ends with the city right before it. We use \func{cut\_tour} to create a path and show the first and last 6 cities on it. <<>>= path <- cut_tour(tour, "cut") head(labels(path)) tail(labels(path)) @ The tour found in the example results in a path from Lihue on Hawaii to Prince Rupert in British Columbia. Such a tour can also be visualized using the packages \pkg{sp}, \pkg{maps} and \pkg{maptools} \citep{TSP:Pebesma+Bivand:2005}. Note that he \code{if} statement and the \code{plot} in the \code{else} part in the following is not needed and only checks if the appropriate packages are installed when building this document. <>= if(require(sp) && require(maps) && require(maptools)) { library("sp") library("maps") library("maptools") data("USCA312_GPS") # create spatial coordinates and a basemap using WGS84 projection. USCA312_coords <- SpatialPointsDataFrame(cbind(USCA312_GPS$long, USCA312_GPS$lat), proj4string=CRS("+proj=longlat +datum=WGS84"), data = USCA312_GPS) USCA312_basemap <- map2SpatialLines(map("world", xlim=c(-166,-47), ylim=c(15,83), plot=FALSE), proj4string=CRS("+proj=longlat +datum=WGS84")) plot_path <- function(path){ plot(as(USCA312_coords, "Spatial"), axes = TRUE) plot(USCA312_basemap, add = TRUE, col = "gray") points(USCA312_coords, pch = 3, cex = 0.4, col = "red") path_line <- SpatialLines(list(Lines(list(Line(USCA312_coords[path,])), ID="1"))) plot(path_line, add=TRUE, col = "black") points(USCA312_coords[c(head(path,1), tail(path,1)),], pch = 19, col = "black") } plot_path(path) } else { plot(NA, xlim= c(0,1), ylim = c(0,1)); text(.5, .5, "Suggested packages not available") } @ \begin{figure} \centering \includegraphics[width=10cm, trim=0 30 0 0]{TSP-map1} \caption{A ``short'' Hamiltonian path for the USCA312 dataset.} \label{fig:map1} \end{figure} The map containing the path is presented in Figure~\ref{fig:map1}. It has to be mentioned that the path found by the used heuristic is considerable longer than the optimal path found by Concorde with a length of $34928$, illustrating the power of modern TSP algorithms. For the following two examples, we indicate how the distance matrix between cities can be modified to solve related shortest Hamiltonian path problems. These examples serve as illustrations of how modifications can be made to transform different problems into a TSP. The first problem is to find the shortest Hamiltonian path starting with a given city. In this case, all distances to the selected city are set to zero, forcing the evaluation of all possible paths starting with this city and disregarding the way back from the final city in the tour. By modifying the distances the symmetric TSP is changed into an asymmetric TSP (ATSP) since the distances between the starting city and all other cities are no longer symmetric. As an example, we choose New York as the starting city. We transform the data set into an ATSP and set the column corresponding to New York to zero before solving it. Thus, the distance to return from the last city in the path to New York does not contribute to the path length. We use the nearest neighbor heuristic to calculate an initial tour which is then improved using $2$-Opt moves and cut at New York to create a path. <>= set.seed(1234) @ <<>>= atsp <- as.ATSP(USCA312) ny <- which(labels(USCA312) == "New York, NY") atsp[, ny] <- 0 initial_tour <- solve_TSP(atsp, method="nn") initial_tour tour <- solve_TSP(atsp, method ="two_opt", control = list(tour = initial_tour)) tour path <- cut_tour(tour, ny, exclude_cut = FALSE) head(labels(path)) tail(labels(path)) @ <>= plot_path(path) @ \begin{figure} \centering \includegraphics[width=10cm, trim=0 30 0 0]{TSP-map2} \caption{A Hamiltonian path for the USCA312 dataset starting in New York.} \label{fig:map2} \end{figure} The found path is presented in Figure~\ref{fig:map2}. It begins with New York and cities in New Jersey and ends in a city in Manitoba, Canada. %The path shows the typical behavior %of the nearest neighbor heuristic with first connecting the cities close by and %then making rather big ``jumps'' for the final cities. Concorde and many advanced TSP solvers can only solve symmetric TSPs. To use these solvers, we can formulate the ATSP as a TSP using \func{reformulate\_ATSP\_as\_TSP} which introduces a dummy city for each city (see Section~\ref{sec:manipulations}). <<>>= tsp <- reformulate_ATSP_as_TSP(atsp) tsp @ After finding a tour for the TSP, the dummy cities are removed again giving the tour for the original ATSP. Note that the tour needs to be reversed if the dummy cities appear before and not after the original cities in the solution of the TSP. The following code is not executed here, since it takes several minutes to execute and Concorde has to be installed separately. Concorde finds the optimal solution with a length of $36091$. <>= tour <- solve_TSP(tsp, method = "concorde") tour <- as.TOUR(tour[tour <= n_of_cities(atsp)]) @ Finding the shortest Hamiltonian path which ends in a given city can be achieved likewise by setting the row in the distance matrix which corresponds to this city to zero. For finding the shortest Hamiltonian path we can also restrict both end points. This problem can be transformed to a TSP by replacing the two cities by a single city which contains the distances from the start point in the columns and the distances to the end point in the rows. Obviously this is again an asymmetric TSP. For the following example, we are only interested in paths starting in New York and ending in Los Angeles. Therefore, we remove the two cities from the distance matrix, create an asymmetric TSP and insert a dummy city called \code{"LA/NY"}. The distances from this dummy city are replaced by the distances from New York and the distances towards are replaced by the distances towards Los Angeles. <>= set.seed(1234) @ <<>>= m <- as.matrix(USCA312) ny <- which(labels(USCA312) == "New York, NY") la <- which(labels(USCA312) == "Los Angeles, CA") atsp <- ATSP(m[-c(ny,la), -c(ny,la)]) atsp <- insert_dummy(atsp, label = "LA/NY") la_ny <- which(labels(atsp) == "LA/NY") atsp[la_ny, ] <- c(m[-c(ny,la), ny], 0) atsp[, la_ny] <- c(m[la, -c(ny,la)], 0) @ We use the nearest insertion heuristic. <<>>= tour <- solve_TSP(atsp, method ="nearest_insertion") tour path_labels <- c("New York, NY", labels(cut_tour(tour, la_ny)), "Los Angeles, CA") path_ids <- match(path_labels, labels(USCA312)) head(path_labels) tail(path_labels) @ <>= plot_path(path_ids) @ The path jumps from New York to cities in Ontario and it passes through cities in California and Nevada before ending in Los Angeles. The path displayed in Figure~\ref{fig:map3} contains multiple crossings which indicate that the solution is suboptimal. The optimal solution generated by reformulating the problem as a TSP and using Concorde has only a tour length of $38489$. \begin{figure} \centering \includegraphics[width=10cm, trim=0 30 0 0]{TSP-map3} \caption{A Hamiltonian path for the USCA312 dataset starting in New York and ending in Los Angles.} \label{fig:map3} \end{figure} \subsection{Rearrangement clustering} Solving a TSP to obtain a clustering was suggested several times in the literature \citep[see, e.g.,][]{Lenstra1974, Alpert1997, Johnson2004}. The idea is that objects in clusters are visited in consecutive order and from one cluster to the next larger ``jumps'' are necessary. \cite{Climer2006} call this type of clustering \emph{rearrangement clustering} and suggest to automatically find the cluster boundaries of $k$ clusters by adding $k$ \emph{dummy cities} which have constant distance $c$ to all other cities and are infinitely far from each other. In the optimal solution of the TSP, the dummy cities must separate the most distant cities and thus represent optimal boundaries for $k$ clusters. For the following example, we use the well known iris data set. Since we know that the dataset contains three classes denoted by the variable \code{Species}, we insert three dummy cities into the TSP for the iris data set and perform rearrangement clustering using the default method (nearest insertion algorithm). Note that this algorithm does not find the optimal solution and it is not guaranteed that the dummy cities will present the best cluster boundaries. %\marginpar{FIXME: Was sagt Concorde dazu?} <>= set.seed(4444) @ <<>>= data("iris") tsp <- TSP(dist(iris[-5]), labels = iris[, "Species"]) tsp_dummy <- insert_dummy(tsp, n = 3, label = "boundary") tour <- solve_TSP(tsp_dummy) @ Next, we plot the TSP's permuted distance matrix using shading to represent distances. The result is displayed as Figure~\ref{fig:clustering}. Lighter areas represent larger distances. The additional red lines represent the positions of the dummy cities in the tour, which mark the cluster boundaries obtained. <>= ## plot the distance matrix image(tsp_dummy, tour, xlab = "objects", ylab ="objects") ## draw lines where the dummy cities are located abline(h = which(labels(tour)=="boundary"), col = "red") abline(v = which(labels(tour)=="boundary"), col = "red") @ \begin{figure} \centering \includegraphics[width=9cm, height=9cm, trim=0 20 0 0]{TSP-clustering} \caption{Result of rearrangement clustering using three dummy cities and the nearest insertion algorithm on the iris data set.} \label{fig:clustering} \end{figure} One pair of red horizontal and vertical lines exactly separates the darker from lighter areas. The second pair occurs inside the larger dark block. We can look at how well the partitioning obtained fits the structure in the data given by the species field in the data set. Since we used the species as the city labels in the TSP, the labels in the tour represent the partitioning with the dummy cities named `boundary' separating groups. The result can be summarized based on the run length encoding of the obtained tour labels: <<>>= out <- rle(labels(tour)) data.frame(Species = out$values, Lenghts = out$lengths, Pos = cumsum(out$lengths)) @ One boundary perfectly splits the iris data set into a group containing only examples of species `Setosa' and a second group containing examples for `Virginica' and `Versicolor'. However, the second boundary only separates several examples of species `Virginica' from other examples of the same species. Even in the optimal tour found by Concorde, this problem occurs. The reason why the rearrangement clustering fails to split the data into three groups is the closeness between the groups `Virginica' and `Versicolor'. To inspect this problem further, we can project the data points on the first two principal components of the data set and add the path segments which resulted from solving the TSP. <>= prc <- prcomp(iris[1:4]) plot(prc$x, pch = as.numeric(iris[,5]), col = as.numeric(iris[,5])) paths <- cut_tour(tour, cut = "boundary") for(p in paths) lines(prc$x[p, ]) @ \begin{figure} \centering \includegraphics[width=10cm, trim=0 20 0 0]{TSP-clustering2} \caption{The 3 path segments representing a rearrangement clustering of the iris data set. The data points are projected on the set's first two principal components. The three species are represented by different markers and colors.} \label{fig:clustering2} \end{figure} The result in shown in Figure~\ref{fig:clustering2}. The three species are identified by different markers and all points connected by a single path represent a cluster found. Clearly, the two groups to the right side of the plot are too close to be separated correctly by using just the distances between individual points. This problem is similar to the \emph{chaining effect} known from hierarchical clustering using the single-linkage method. \section{Conclusion} \label{sec:conclusion} In this paper we presented the R extension package \pkg{TSP} which implements an infrastructure to handle and solve TSPs. The package introduces classes for problem descriptions (\class{TSP} and \class{ATSP}) and for the solution (\class{TOUR}). Together with a simple interface for solving TSPs, it allows for an easy and transparent usage of the package. With the interface to Concorde, \pkg{TSP} also can use a state of the art implementation which efficiently computes exact solutions using branch-and-cut. \section*{Acknowledgments} The authors of this paper want to thank Roger Bivand for providing the code to correctly draw tours and paths on a projected map. % %\bibliographystyle{abbrvnat} \bibliography{TSP} % \end{document} TSP/inst/doc/TSP.pdf0000644000176200001440000300035513623557437013630 0ustar liggesusers%PDF-1.5 % 77 0 obj << /Length 3405 /Filter /FlateDecode >> stream xڕ˒>_ܤC|z'~;vmJ%UW/Ҏ9O0 !n̒$K_,LbԚ"O뤮Һ*ʚM\%?͖fj[.Bhפ)wpU>oo8ÿӥ3<>?d1[Λ|vj~ @Fd1apxa%UiSd7b^!nvw#Q9XL$ e ,#n _ Orbfi5"m P #C%0=A/f+Fljs[ o]4a*;5I~[, Q'$t J֩^;l=充ɲ|&"}4bk^'#Sղp 2 l,-?:)_.;UNո| <7 ]tڕߒ kt#/+uSx.'L"/rO Nfx](dPۊL b2vu?_ b7ܧWNd8:ķ舙EςU= ?0˰cM5-5w_tKْ( j/(Ap}TJ켈I`yw'$ҀATU߮wX( {Nų2Oʲ}g|מ=b*Yӱc4_h (lMj! GruZVF<ʮߐOyP+V. b*ؓ Brw"ۻo2|ܷ_Jt\[UEs̚RBC!EvjVw7G/_P^e#ޛV#MVK*UeՑ)B4U/'+kǯH48'. .n1ؕasК@As{d(u|"I: =f;};|'M5td֫MjƜykC1@LVM{)Dt [ N -&gޡ@jЪW1i"ͲZMDC7/,zB#Ck"3 -WA±4!*Ec==TOczs~6ϦH-̲CA)m[oUȤmRr>sы=0U9cK WiSl./q"KsYM=l0X.yp7$S{Zb qRbuM( q_ 8+.umT$D?~uDVmϽ~2WwD:aݏSAs᪙,q4u1!lڻ*趚.+l Ufcm[Zޅ, 8qۖ"(xk" \vX%ܶv4lr\n`d3X$n0[oh)T# [<)#^uwGtwGuw\QVWW|X:]} zu*8%I;_RͱȮwX 9VՠI?VKOBhud =@A\>h/NbFnSS00١3ǦJσM^@!R ʹߙrJCդϣt:@>=)qc&bB)P?Al 3N*ͯȮ${6}lkY[o^!U8$ݏRUAF8Qۜbm6 (K˭Kswu1nJw/zeg`I3hO#PvL>%jbũ$C/p?ZS " q s6#}kg [;0b?gDs.ːMJ8[RAa[F!fi{#xɓ7.A< I/=mluf3S{sjK.&P9}#bq.Bp[uE٨ҺVWfS ԆkRZnYȁ9PYH=i/ZD\eF D;nB5A ğ~pee!l* BN:r%) xpc\BF? + Y(﹆-MZQJ 8"u~'Τ`A((lkH ”ꃡT\>،;ٲN3g#'DP[o |MF>j8'AN3ӈ(5W*G˚vx#vQR(UEz&Y/ݳٮN핝H1˞e29;߁ e<]F<> stream xڝ[YsF~BUL*&MպbC KV_} V*8st}MUrwzk+uR\y6]_髷e" hJõOf8qjoMرF*MukP'& 5  lȁu wsuGgG1N:R_TdoN~GaWd_/2ԎF q@Ծ KBӁZS27L(8m& J`l7b? k^$lk(aCg`y@ˈDF z6d_A^?9HNU wSV{2VO &i(=(X~&\S {N d".b[Ν$ZMpC;>AC>rÝ{nq}?ޒ\Ё}3ܑj󰿙Ο-Ȝ ӌDcB ۧ뼈̛pLctAggfN$>Ee/kՂ2g *e^ X]*!(Pǩ|+)x 9ةۭ_u0`amIzi'o^PR~|x2K2\Vポgؼ$5:i#|C7} q' v<MY#ˑO'=w2U.ԶSvJuJAC}71;IiC&!dό>C-|>_mMsn_r8-\n⍬$p }`J=)?_u9[jPe/8//cLǩqtd*Rw;CȼNC(AMpD6dC- :M77')Ӹ6u=L]֓d 7`$.@IbD`fE^EiaU? #e[vl%-aV*l}z>P).xMQXv|3[ҵfK cVqYBMt6:m)rKJ| y'h:=ܹìNb/:<߰XH{St^QOzވ umV U Yk$F ,!rҹIV!Za ;x Tw&lGmKFVNF F( |HY(NTGۆ^j+n?Plm#]b;88V/IE9iZ0fR1c'k0#*/@NhݒE Rv9_֙<%l)HY3jq`JƅVOu@%ÆNw[':BsIȝy]LVp֠-E}JuN^=e: z`b 3[zD]KXx7u9|l[M,ҁq3|qY:JR#ys3tis`^~SrзW^{Jr uJcؑI=ɈtXʟ*Nta5]jYp>9XxI^\; K,4'<=C{=y+~UjJ_,]jBm>.YieJ&U@.Va_ӊIԭb1+pd^Wpf?;t*ZH eBy\HVBODS_t.- Osk_p- b@˥ET`"n SĔ4N,lԅBw!q2u>n{ H:.2 ˸j3ڸRxA5DqO~.c}UCׇ U x/pT0c\9k{4arUE?Ucb iV/Iiw"7ט~j9.Lϴ9 Faq{Ԁ8ClNAyrR#P7Dn̍%A&U%@iw6tVfJ)N^}Z ߭tlP0Md)/#3r'.Ve[h1L˞<6̓Qۑ3hf{7ox-˸rIFKb2j1-˱"gM lj|eb$&  &IS)a+KzcW 0[9ƭgxū0ҡ{H52}- )>B _,?(,r"M$L\9%:ƵڶO^I}J:k+V //Fs((Jg]8C'?S#SRXjQѿOqeYJ Ri A<] *;>f6+ӄ^on}z[b8K|7iWjbT h2)GpvMz\GLr+ҏjgyeJ-œ YpB{K9M8r\S4dJ_LWe@,gilkxGˑ4( qJrB8 HEo q[ޜ}VİX4Bxw~a%ZR:1#Kh( CADZA!1/*jw,o,xLI4USq!LE$אiekq;*Ф0GW H1>"I1.sk #=>/'=?,?J7?C%rv?S0r%\%|+![k ^zm endstream endobj 133 0 obj << /Length 3745 /Filter /FlateDecode >> stream xڽZYܶ~ׯq+ʩ+'RTd?pgIĻ O"Llu[AFI8P``5rM @S]`;u+Qҏ.;mwQ?Oa n/.`E~nx^],rMWxa%OtPs|8~4 wrYJbiK㞹ϒ{t(t4XY\4Z8, .n㬨 aE}ཫd~Wڙ;ɻ#WqU{DoX˘m]V.dݹs8qX\d,>Uv+S:$b3!NrUWK3.rdWAa!""P,,`8?ohQFsԘ+իచJXRuNUѲHr2 5bimqDZ'D Td#nn=x`ȵamgj"pG{ <šbFjX>nF{)>ŀ43cU;uY7MуJ݈.IY*js6=>ڼ~2$B,@lmʬݙۘ>v{#`"urY*n!og2^Vɰ )68QV-2 4zUQ#dP1+OX=vg;2:TXiS#[!_UwߋX K $tWvj8 "=2)lT=j'7*f/b:D~G CJ_d;fVGnDY xgqa.D]i0F g Ҏ]o^mY8 oAe bV_ x ^s7Qu/k lͩeW$ֆ"78Gcmm) ߿ᗻ|g#L\jȦKzC"B|mb@ۢnIT|Z"26C<%$ψ{u'VvJtngNVA ,>ٵ?4>rsx?=A]8Ĕ 3!} Fb1HL7uq*! k`c%7|QL}9K4FZNNc/ݠ,ٸ94gC|:V1=m!0HS!<=a&\)<W^;fŒޑK]}83/dt笞db]BC-UU >t?rXKd8XM}ˡ\p͹,ztq62ٸµ*Ha.1䃶*hAW 5I"?׍*fgxM4~};P=o&i|X7[vjfĥ+eB'{} ,qDӟq blYn?iJw5(ϋx" P"'%a jISD)95p}b|IB7|Ѱ/5 $|KFVsC0f9H_:[tYӌtl݁tY4Sɚ|RhFᰓƃ+}$4H,nIUx.dІi4\^P>#AU5l}p) ]O=Bh޹§|b{v~ Qg2Bšw1gG1# 1Hb0V0?dkwLt5c oJ[qt p{W * Z:Ƚ|%Y~EYx7m_TkģMb A6WRdbb$4'ge%6%p%J[,ĹoU-gQA"-&tEk 2I7c4Zsy4;,guMpYwz+_!PTtuZCGݝR.2wV29pBk}d-cNh'|$`[gQH :cWeq)x$`od6mWD3뛔P"͟LMw l>YǑ8Ze&D=[KJAΆ䶊?,MUvi M ij+JGDu Īp1;75דkOFYB֙fqi![!{bH1 endstream endobj 146 0 obj << /Length 3991 /Filter /FlateDecode >> stream x\Ks#`nTYTlWvrqy,5eRק `!vJʵ"F??4' |W_f"8kx#&+&YnT_o_t$ӘWbz? b͟|c]͔͎~5}pWܓ6k֜)lU];JO0v|&-~n{.ሓ>=w4pyxb >/Glf2]-vGm76ZՕࣻE⮰`WHY l Ōnw)pkix| 7+ऻ͊d\je3 I^nMOZڶ K,@ҋW(#`YayU74ag2= DY>޹"O?А{q|we* ๟pp&-H#X-jE0{ ne{|Nsk`ߣ5|uwv؉ KJ@͹ jE{HC7< sNP"6i k:~pު'#~b?pГ7BB< n-r88Xy*$ǵrֆi.pӀ802yI7׽LNnTjT%@7Lhw( =ɺJޅEd&Ԝq!!|.n7,$,xI2Tit3@#K&EŔpR䍳Cb;$ΜMä BA&{Cd0do&oA D f*}(򒺾 ]8S.:KAE+x`%ym~ֹ D[QLL|#>QIƭ[́g_3m1"|1)#Fr,~V -gfu%^h >CG .>vajC9GKCkLΗOgWS}>dYeLK /92G1y!7o&o/4.oJ)cG+,SJOv-fn3f~\h[hL$Iݞ>Vw˒`lw"f1(!sڵC4+Mҳ!1>3gJ ]qɼކt,g3>E .v\7K"bR ]|Hw ={ =}SgC4d; sg,SLAJj`ߣ,\XA_/CyH-~ת8'cn q31'g8q$wm¡e7=m')\w]׷_D5I{MÉMqk{;6U<]Lvx@͟5!?tKZC az0= 4/4A3`eQ' l",%~{/VY9c7M+#'Av}m:@&AX9`7`|G ً5DCu=m]1! gvt\~_Co@њ̓vܥK}lh`)6y qn-"3 p:0JZ\SiuX1C@*_H:cR7QG>΢9׋l!#f(Ö >d1WSiC3N*+s!FʧQ+HeԲLY%Ű~Q#oolS@ uQӸ,6`j/]!y7CHOxE\bN϶1TcZ+E1C:*g`Cܢ+JGA&>~}e_=Ua&oF|]4GQy(*dgS\Xey֜0I֜0I-$!v_1g!Mu]؏JF&9gJm#^nt'Q|%wc6\`*hyD=΢%-i4 tgs jYšLŠA-$ ժ3$W;C8`i}a te&BJʁ!Ab+$qJF yYD̈́d7ʣ?r̤,[hp /5ѧȅ@/s`Q+ZVVr."3)G厉wS{8EH8'5 8ABtયE!ZǴ4J)JTqvA N ct.?bN>F5 Q/b)] 3D~7#ܔr_O[{lZ^T 50dQ{&X1?܀3y聇)X6du 777_ b2xAg^bVX=3OƊ99ړ99eۦ g0ˢ\&/Hmn4 &'vI C}JB>.$Pޕ6tYl6^ Պg7\ٙ'aWw+(t}nFOvÃ]Ȥ U8(Ć?#4F.¡Fߨs}_b1~! 9?Ό`R8em©z?FzsܺƱmxhxȳ$K[Ch? }}5>r]vM8 v%(T0.{-Qn,ǂ@{W[٩~ԋT/x,E!zE_bdzơrfAG^ ٌ]гEYY~nNdϩߴZޘ<`s]BGxuGjp Usq&!z2R0̖kk^{TB]fd948譻vהW>/:p?re`o`*0$73^`xHyV93Xm>1:'ҹŖ5hlr=j'EXkwe 咁8e OóƚL,֢Mԃ]`#}0c3#z}3bUo@fO+\ayFJBZQ4J\ `PX6{UGr.>+h_gmł:z8ut F}bd %NЕ^<Scʷ9*ߗYycJI2hl* |^RT#,T 1>UUP@ V ֆ~m}p*K7/ة66h݈8t㫧oQ?@KU+g|-F#x}i y`a\\yiFZ)T5SjÂae3VJ]_,>$JP2+lUi|KAT(Zf]#`2bhua:_ tc.OJz?MD?z~\S05yDTM,?; Z%lWlۘ߷[W元wz g~~BW n endstream endobj 172 0 obj << /Length 3987 /Filter /FlateDecode >> stream xڭ[_s6ϧ#=SASk뵝L빗huE⸟/Ru2H`,2*W7o|ܕ&kUnʕ.mlyu5$;]rm^Y'ߵ#o7?_pNG!뇃?7ΔUULz%ҼɄ˫UQ-^ W%W ;B r_y&K;2Y~iv/OHɳ;nŭmaԲEM2"UOndY$(G4٧(@ǿ|#Bv helZ ox P#6z^Ҫ#A&==k w/;(. ^Nwe󨗎8 =祻4ϻQ|5n(>H|? ApAc+}(r^-S +~i#|Ѕ1 8<g'`c!1+#7n+6h'7z}$c@,/RXU䓧.":u#"5 +eL4;Jv} 88I0?Ld`_29І*Z4Ry.gZ |H0P9x8՗^jv" !2|$ FH?ID"]rE=$b\n5+0r Jp3EO2D$7Zw2D.a3+5#VxHY d5wyZ-6,;6cP`ݣfEhL^xWtydӫt2N<3ٖp=G2 `4!̤I.A~`_&[2= v~BEBү0^O" wD!9D6q'?ķ'U\Ճ^h~ xccLSt 0;9Zc7B(]*G~Dk4S"[] ("m8< ي!NNq"ڕ3T@Rx )8Nft]:{/Ě Z:y.5bbz5"g a\LXu=ggSYSۜyiWX ;=s[YZJ@Is9"|q&5-M zg-bڦuf>#v> ݍams>\%qHnoe5jz6gy΅a63P4  hp pȎ/red֕^ӠMX߁QX z`̟:L,ۣwu8DԅP6$8e&(kd4U-yZ͋a2=/˸,rjt,p_0-Wuj5{z>ύg"*"(-[z~TZ./zД(' N,VuV"IYx C.~ /VTG_EВ8:VwA =_z tY:&P$k_}4{QC-Rj'Q`kx}$a2Q?p1p^_G&Ie٥@XZ{(,̨B1n4%cWu8 /Xf{t!AȔ4Qo"C˞MNRpKny7 wXrX++Rpr5'}D+W/~~κRG9WOwx!٬Q{>FU4b1}<1Ss ytĖNWJԯlޢRיT3SPaOg V3TO8fX8͠3YZ*P^rc \O{D_̉} +WZ{Ts03i|Ht/Ij. G^Ɨܬ$ZYe'1$!z~%#LŅ:K{pBj׻^k7T7~Tc5ll4)0Y#~bFoo qa6bna.}JgZW5[~R{%dlvOZ/`YkETS/&<8FQk!`Z%yM{mjD ֡G- =BQ{a?31:&$ijՁS_LmP_13\Oq;ZX /` F5~X*>.v*zweLm[tZ(E.^"HE;.Z׃yYj~ O,tn~Kh!S[6#N v.lxbMBY$i[mLt/74] &uO C8)xav*Z/ם}|A_'憾s?zqpFv/=<0r5ecʿ?tO>n{=8Lr{ÑyhLF괠XG7gJX߰+"qQPZe,kPO2ۺXOrS%,!_@r:E8E 1m?WD> stream xZmo7_-8|ghKC0b^6:b+ܯgvʉ$XaJCP$p:W")EAFP"AVha4>$4aJh-lrB;<ȼp%F 0Ɉ0VD!0D, X] c 屢ǘVD!8;쮣Jqxg@oR0:X";#Sv$B`֐0\*Mv6{:`qH aQbvObv1BYea 4?bBQ+~ ʢiZbYQH`[ń׸y&x'o &~j2=|W):b{/*p2}W.r6IDk-ɘ.&X-OUUct-` )lΫOusY6-u1=6/X1QɄTF"(@x4Zˠ"~:/Kl(Eײs,6yI8eC8E!k@2%M4-4ri7_+ R@,r`1JzéqĈKKkvCG}]-eTF gP=p(d4#݃+V77C#ȌBȴ2&{Ԟ *1xB ʼn:?ÕDCG?#iu썡FVg$5ʷn}@6쬄:_~u=DStY^w;;cRz:piԾv>܌s-vvX,B&T,qFià>ncF[eSְk54uktLj+քg_30 ~ ò:JMȍH>aʛKJ~V-JDOªgݣ4yIеL2G!!Hw/BBDi_Z;È40)mЬlݳn[ ~!7mn vr#8)_ R|)HV {AnnnTw RVsD $ 1QQXAǘ%[& Y}C7({]T?Rrvϑ`sd A 5~d][6鈌qO5rZ\~(IjDG(h DG@L{hBwCb{}}k c endstream endobj 202 0 obj << /Length 3217 /Filter /FlateDecode >> stream xڭZKsϯ-Re%'aLdjvs%RFQקHAwrY ,}zw}4˝Z3k&sE5]~׋~Ǧf5Z2 [- LD14{ޒۖsFK O8pߏyK0^p˧wK?}&q$rck!"%tׄ̿MNPпS?=h'w󁀅f mCGoHՉTEXD)p/{>)[2rZ]`Pԏ7(4W?P AƖY)ӢVE1sJli*,Ѥ|EDc&l߸+CD Ic1Uv#n <937?+oyЫ-̃"zmx|ǟ)@$UM0{ \wB WcmsܓU9u-*">^sSO3)=l*3ئğg|x7QH71NQ`gAaA9!\D9 { &EUHZIq\9G$"sdum ;–gdX"^|i;\ֶ7\ˆv 6k M2(# 1o|v`ǠˁGyk`l4?ᨈx{*Fₙ," =]n ƔcKHn]*SWWWi}\8*v h5w-:69/SLLieW{EuN h^72g7IS*ŋLMQҥ@O+rx 6lUx7N+]߾UN~dA)|.W\"l/q_> #R9JL :gn 5^Yx(L*i F{֐G.bpr!s!Est1KB;L{U+Zq>3.P*FU 4}ІQ†zlNu2:o)}.';z"Є?uaB&_eo=GT+oF$*\1NOIZ@l -ђk<½H+^iC=y:CH.ev#eTȂawO +n=ڭ+ӅII%_XI;)kڂ~(EQ9qqc gg*=!8Ӗ5yEZQ解3KYipQ~w_65EF Fنc.itFĮGӢIESYsWZEon=/6zQ wKTJ,r+RL(%)|(fy'DpY>SUWrh.Uq% ت3*T;,UAn:Ы쐐{4ȵAζE 좇;>ݳd'YJXM^ 1!\%9!V*1h,P>%ppZcD *! dkȲ9HL$ RaZUwzZ/o8~+6r6j"ݡ,\呉&b.T !`6HO7Q12~nS-:7$Ȃ8w/w˝N?ie=О@/A3xy\Ya6d\[M@!T&'mF*<-M벼iESnͷ{H` n46jHI_pgJ%hsMgq B\f#A%>Y LJkvTTC|y +{m*$:=vs8m#pV?I+mE,f?2`ÊAAz}%]ES.j $U6my*IGq_:Mr|?e/7s{uVo')piS^k.+ť@e~z?pS0ޔFI h~9MK'oۄaVAn0Mp(86vT£ӊGi)^}YյeL=k@ 9gp[=)5Y8(ٶ _Xl"Tze eP|:ϨkS5$%v\"W(ZA0xZ',5Dj +a(vE-x,k*oL4`hgN;.F߬4N|{Z>z)@‘ %:̑<>r7Ѳ| eSV/jD1` |Pgh *^BZI"lC%;N'& +0e:Z@Z[+>eQC>@Q.> stream xڝZ[s6~#51kKvi'th(E﹂L%v'sEMfY27W$qTfvs7.KgEVĕf7ѯs_3EAn lzO8ߏB;tǧoFV&. JK}|se` |fYpl>_(wD0hAfOV&16UWeu;Wo.2o4uێEC~ےHM;&;-pH,~ر033,*U7@ۤ \ =ll'6*eQۣ~"Bt5 Whwţew8,;o'k "@^VT^Iivxq y=1{U<[@"< ő6$|%Rck~lJ#na\k'gAlӖ*VA5AkG6UTU8[9h)b`Iۓ]./`b]WoYD 0D>^`iM 0ܶ 5+*1;Wܺ>c@pAʰ ~Pkp`˫c@clc .I%_MUϪSz4X/j~x`j )</-~ύajbkkh o9{9y>/"Sslk` aHuYذ}@=k=H%s9c$&&j/C^ {7 .@p[{48;!G )C 065-$!LuÇ9Yߒk S'H@ydеs.ipӬ[ tc;4UHoxJ غ,4}WE9wWi.2SX کD.lϛ}sr:):16H$by˹z:ي{ln _@5/\QМk~,}JW({'{MZ +ˡ/7.bS]">)'ob[n/5?x| }R fS))$+=IYNUE}FmvCiʰ)NJ>XK(~aљ?38ZA(KℚS^Ʈʞɿexw{ׂ/5T$M eBԩJVo'`5A\ذx@Nz-hp&>\ji&tGegWX&dlFq SrJ^0\גxo47%a٩I%/)q1(졞u rWo)v>OcS4u.g%+_Qoy puͧ'OZ>MN6B]tz^ YWߖ\:Oa;oFA)9X8=No9&y9җCE'Z 8˫QTUMK)RҦ =玌pu邏SҼYṓyoR# &5v[aTkщ'NYO~VKDɖ*asbW endstream endobj 216 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpPmvMA2/Rbuild570a1ed057bf/TSP/vignettes/overview.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 227 0 R /BBox [0 0 539 234] /Group 221 0 R /Resources << /Font << /F1 228 0 R/F2 229 0 R/F3 230 0 R>> /ProcSet [ /PDF /Text ] >> /Length 1405 /Filter /FlateDecode >> stream xXn7 Wh"~έ@uv/y$ܑ<8Dԃ:#rcΞOѰw;bOȏlB99CB6TmMk m&{v=/.-?_p׏ qy\ 4)8|6$]̝0sR;'&Elތ0.,I yes9R˜^7꽭WI ݍ;UTz=:ŵvc+ܮlH_ 8"x4èԳLJ!̅m{=+ۋWg>MD7@6($4)',jB4P-Ym Ɉ0HyWxO 쭱(RFoQ GV%l1uA#-6نٝD`P @ CH$J EDE$P..)m]7m;V$a 3B>P492Q M9ثet Hцb.ZJ cJ ׽47d]nc0fŌ0ᤶבX5esPC/:8[(]W|(=Pr >U)v=U u{'WA1$Wݦs/5{c:49˚:|@qnZ\YLP!pprwkb4U MPZicNs2imh)(X $>Tɔ`򠧥II1h[48^x$f4fҟfV`~5aoGȫe)hf b].&&wF0I.VGTDB~],&ލ޿==DXB&)HR?D,5\_&jة4+1YWG;rӧmS ЮG6WMJ@̓*jf%L#߿P}x9'?s.l` endstream endobj 232 0 obj << /Length 357 /Filter /FlateDecode >> stream x]Mn0Fta$BJIXG=1CTeȂ3Ro/Eul?ǯ~45̢maoހJDۛo34.CmL3 ,ⷰ7~c;^!_| W(갮o}v2sB<5 uՆ~^֡/8 5|ceR"+<H.t!BTmN7f'%8UȚ~q~gNĚȏ;:`̉3'33Ur{*ɼGf@f+O)Z#> stream x]n0 3SLJ2b/_?E $ǔ{xOSQJu?=!O1P.'q|3?o3=,/vv0d1o/ endstream endobj 236 0 obj << /Length 274 /Filter /FlateDecode >> stream x]n E|tI$Rʒ}n>EaߗGJ]0ftOY{pxJXXj9&Pc!G33xo-Ny Bȫ`>Wc`0Eu33/l]Nt[8Kp-`1ejTQZmkJew0Of4RJOsl7IS.{\D)19qyIL_#/{7ݰϟ5`ZWgSKb xK endstream endobj 237 0 obj << /Length 240 0 R /Filter /FlateDecode /Length1 4368 >> stream xW{P\gǾ𺰰OBKxIh$rv&MӇMjӇmcDZ>:uik?:mtԚ86ZM8ڎS9<~|;nt.&TrD ;gB$G%V >K8ǵo !*&%g6 IIWnI-_:.>3oK4=/F$ȴ\İ?$}_}<B2LHHLJ^6O1["ɠrssEE4MxcR ar\Ӝcv5ndݶ{7tjVDj)71F-.a7Vj.I2E*; BFe=w.;MȾ;ܕU4Ѽ*lݸyi\Sv*00\[?RZahH,r;x~ T JnLtNK%e١Kôz&kj9DŽY<[j]lUMC0_Ö?ѩspKG*-N6S51{坞MXdR, &ڭ<eAFR^e.d $en~= Wws}}Ǖ=}%{0 u䨾\9 *:~̰gp-+$|:c`G$`4R^x rrgM׆i7;褱]gv4lS~ʖ'w?jPݸr8Y$OW&0yWr%jΒ>ԑg\_jvV>th^dw߯ :Rg0L@}7_~Kרϳ<)P6j@r}WG\mKepGtPw4XX|#6OuYAIԱ,7tm\B?/@r YުU.lbR*z|&KTލ兎#U<6\)k&IjfSRf?f5~pC elvV<٬&>?ysر__|Qsb@QO[Q@)76כRy џP-з ;E-7C=23yf_'C qjm5b 7#KA Z?ݱ]80AOMoӶ:0X BL…ɖxw:@3nql'`ǁpY_uGw遣u+];<{9 qwTQnxx`NUwxQrU.t;OGFN7ҕ}[_fc=ZOFovgkOo۴.22}橡=*O;4}Ɵ_*.T궙J֦hћÑdomW;s- \-ȕs5aY(hX*ϔNd,)gie⅔ۏNIiaM/xkĕ:zɧ>E=&5 QXsTba/= *n 5Lx!L{Hd9!]\BV+@AV ނFWKΒ?O N6nbٗvU +NPj6EO;K೅kSȡ URF5:qNDF'9FgFHhB qZєdӻ4tF H.F''K$Ͷht9:4:dh T3Fg[ }5"uėE,HQ^ScWzu9INr,<尕{`,Q<7!^3mеj8s Js!9%gX*zMJbl^q1:_:1G1q>6:%bT{RXψљ`@dF#6‚u"-ej~hG蜼FEq*̋ai%qdI'xUI,"1[ckv Uk:K-5Z ~U$$Jĺf1i̓c#!" ]Α K-ljGu\^KܤG ͽqhݐ*עy_X}O}@g,E/j(B#d \@ՊB_$QW j3_՞nuTPN:'6|ԯðj{j4.n,xiУ/崈uJݡqܹ 0AyʈaZ~aHZUzSj~cQZi+jU}!5bPQ Yj=I MiϜ_ǦxD_a[ endstream endobj 238 0 obj << /Length 241 0 R /Filter /FlateDecode /Length1 8524 >> stream xX{l[y?^DJLR},J,JSÒ%YOK-˖H銤Wڎޒp֤1c6n;Y j"@2 qץ: 4@lj9ȥG *H(D"f#N""7.Sxa_+BHbP@({@aUoFRqplѮ.G|0 ,hE9B%SB]=sAT5<>`SafTl޲u))-CNQٯcTrCBy(DEJΡ5rSRTi)X`.sGx޼E8BBmo v5cX v Ys!瘁! } X&єZ[2c0*j *,mݴ;&Z渶ZF_#$!3Mت[f2xdok/Ճ] ]!6b@EvzMnrIIyyJѤ0z;DLΚm v Nmx=dVK \G{-ӥyj~`zlpf7Fo2.f@mk Z| Q)B29;!23:YZ{K33 ^eo˶hm|h9:r0#(dq sp8zABЯNVF{Y[V\П.kfI$&}o uWhG^粫fjR \m2jU!̔?q t'Z PXisR md]G*2!dKmKGCU}yKho)!ql[BQm5= Ivj׿\R!!!=Y?}vK|_QdrQ]h EEOqɘi!X y ;dFs#B <ꛄ?On+)leb)ޭr]qaD: b]`.'|]2}}'x6wz~{\$Zb՜yd4hUx&Y b;hڤKUҜ-l={N=J|lqx>fR ?_s` )(SSSSb`d*R゚TXmmcqI3l݇ Ӈ'GvZg܇jqy;shٽVg2ꪕ<@| +y <}~ JꚙEU=L+ud{teuAcWC]UR5RYhm=2J5skcRHb઼RHU6l̨b="-XXi6ğP{8q( @0 Lt(t/LZ?00k/Mb)^=|+znV{ ݬרM c.8yb]ҢJlޚ Y*BW3x z_2!?JB^$dO|Stwn֧!;Ss*ҥJqjrT%tIIIB{rK޽~b)CgiVzBsvu+Ŋ#nNCq$A:{:B++ n߇F%>>1άBfeCa nzłꝬ85wExm4 Zo{bf70R ˽y}/]WUC1K 1mni1یscsM2pNJ:ڨ쮙3gN?P$24 kt _=?qJ٥M x|kn69%o__k0厠No[Yͬ[ Қ&)|0-P[pcn5؆.%.!(\~(ŝQ U*jJeիOssr15%v"߾/tr, 5j]r~8mC9VKntO96]XܰJz6 (~XS1]sa_B+@³S !ZF q k_yM1*TUq ghBɱ 8TX {|tApVSΣUcZVgXGeVhD(fcJ4y3aV! S ]u fg5|H^~a9c.8qRy.sL0L(]^J8tErFcJWlu9GgcXc+~IWp ke)2?10ӷcQg 8 3ǔϝJXOIz.t[NȲ4O-KG|P,j/cؠ<JGcTw,{Ԥlq߬<Omc-YnG`Q}k xn'0΃U:`2?M(2pQlL71FEw +blɐk`|. ^BK{]xu|h vfa7n.Ht@)ƓA6(ÊnFK1,(ScN>ЍP4 \O`Nr,PhM\ \{06Ӱ1)]$>1"wv!jd) @}g#[f l+ uh@#tiE>4${k̫phj^??9 kC03L.jUx~ '1R}TaT$1 CpRb4h&Q< =҈[e^]>CܷJM,Zʛmyd**VF}*1VyC,3,#`)UdVBcSȬcj$XHyK\ ZU_$\#ʺlQX[2Uj@գj }fG [h]]Ua; XQbqA+&Jf{iYeb?wǨY¿|}L#*tE*""6 {aeݴhmmeS^D9o endstream endobj 239 0 obj << /Length 242 0 R /Filter /FlateDecode /Length1 6952 >> stream xYmlS~Ͻ0|$8!_7`F c8N}+]@*M]UNn:NӴiu?6i۟iժ c*sI t{ss}sX֠΀ 4jx NtN `/J*377;|`R'LĎ'es#'yn񝦣&l'Y;?Q8Ym-O/xy`3G>vf֖ddXkjm Hs .I/*Z |@{F.M"K̺ML>BXp7܁YxnJ/ޚHck#Eކ(6xVj`=?Р?lBO-xУ}6`=j&S.ܶ?|}>>~xb>gKHa5uuw4 1Ct0p太.ɽCҠ{F2WgΌJ ?DɢE);]hP]+NU}{%ɣI/+q5c\>Xq+IeQS LfY_[ >{Y0MrkH;j _{3-X<+%bmI[_qlB㊮/%E  !wI}StRR﬚8}DU]؎,|Ѱ77(+FQ2/#^6aip ywC]k5[9c}Rvy6ѾL-P|;0n7Sn%^,@/L{`tVU].L'N.\"_^M&4ezNb]L5b8%ǓFFZCG~kS_v?kv%|Ό`O!/m [|nߨ[{k^~SeVs>`$${ Γb<~gϊ"ٞx#B/I֓m+0k*X0f2]fE@>e耭+K6zV`3*^]X HZ#d ɈNISK^XfrM`yc3rR 4H1#}c r+^zY`1VeY`9a#g&Jh_P`7VeT`t)O l5ei_cKײ\n 2#ı 9Y1W3w83? y0979^eyL`-iYW1-oF-#ฎuT`\a̱e}S`KӋOML`g.SscSh3u2;#:VoWV`C[3~I`*0rl͍̎Yюyǰrh%.c p9:Ƶsl#ϛxE`V^KN+:%9o79.qmכ,0zJ`P0&t舴k_cti@~B5:/q=υH>Wp>)v;h1 񄖤ݝݛ{6Jㇴb L!#ީtpRFTL*S񜎖J)-S=Ow;Vgx&{ -W“^mo r0zޞhO280tb9T:ABg"k4?9GT)(U8n iB?s.$^u(@/w8$"vH *dp۱0EC8p{j6Z8iTKgK4V%-^/W[1^bPށ׶exKl,VT cOHbi{xyR,*2|X[w1ЉPZYBo[cl`wB7lvac_Rc zg[A-S,\vgJ5VFT3=O%9SJpkm>K!Ws2~g Z,t1i8;r"x,-gFlv}>:̣]+wtUw-I7Lf\QYׯTQuiz;uN?08NS8KbbķY?-V4F?3쩬Q-}9*=ا*WUˇ;뻒Q%]e2)CJң< (-+/~ ߳ZWYNWIh Za??X?t1Zf3̜KG)1TlfWL7qI{ |)FRNFYcaڍ7?!Bc;/KgŞiܧi4Jf, endstream endobj 259 0 obj << /Length 3873 /Filter /FlateDecode >> stream xڵZێ}WX\yOl#8q=XGH%QO>u E'Xdw/UNUw2[͒o_cZ$n&tVUdv9%oq~*QZۼߤkOg[̳Db TE"//Ii^Ʀ6yVuY>4 `I\WNgzD:c-r0>c[5&l\?}11144AB0‡${/\(=wa_y Q/fg;$yvpj.aQj1`Bmq"8YSl'^P%ο=>rNl$A.#TTv,L.p9o}1홋/sX962ZL7Fzn1#vWXR~^A6=- $PXn#?+W= k.=L\ v=sUzQ;L^ۖħ&D%IDHIt%KfDfdIdV_r-Oa+B;vPO~vwݔYow)H#Q!*xϨM l$^e^kaQV<o0kJ$;ٜ҄g X)F: vr = mhl#Zb&rAlFGj~-g 8O O.gs{IýY!=X.B\Kl]+" ^/UҍAus+'B7`SCMp(W껳5Ɖ'' B쯯`cY]I k> &\<2i0ةxSUĦe#K ,$!f}N|,[^\Rm ',NYl&P$E cƲcn5 @[r>:ka`K !V9Sbs'\e!@{֑NGa9FQx=~_]a PqjY_?YxEA3m*&ef#gN/*-A)B4h6l&販F.VD9N{ `y,hZ(zgyePRTRP#y.~ מb KX@~nYFDf(,S_}ѭ ͹&j<!BzrJyhOq$)Rz:ݞj%mąnڙ[^-;ʨrFεxOsϺI{,Z 6ZcʥVд ˽q~}NS5C`Z򇼕Oo`ЊK"+=c4Cͮ$j9JĩqX :?[$52H3MBStʼn^kHd,._fT GAXn>t%bRψ3BXI)r5$G^.zlSB!r߳Kiue 5iR+CsP|惖\Ė_ATk&Ř1rg3"I'Mp۵[;l| @ZKx^YXBRo<_W[BAʢu;>YŠ3LY7fv ǼTIC-&^T'sfLyXtM.hUt&7%C+K͉B(Q5^"Zab ]mUum`+YL:@DgKo:u&0utFM vaG)1d^40.`*zD,prEsb38V#](7J)F, T7<9;H38H#g!Tz{J]iVlj T YLUwFͭHLZZo. œs{kq.I.O1&߂}9 aa$4O_D/"Rv)Kp> stream xZ[~_A9V6F'iޠN`p%J$ds )vװВΜΡ6o.x("*ltu%ill"+Lf"z3aj'+ͧI1YMݬ4M&/kK|e~+{zݳ6ZYS9EU"*hZk\VE3iNk%M'/әsiON x"#A6{ej3RkA6e^~ʚ2=υ8QQac4o.G .MZDwYſXyT'&qUTU~IL¯EŠtfe<sl PiRrc[iX~cLUi02iGdbdžmw6bvKk=i^Ph1JL/`V~_:{6ghWpl8u&`65=jH3J^&-.1jcoOV1؅ S2#ų =JM}q: ;ݶ2tMN\|<4Tg&`T}DI#{Kttz;nΪ=?T-n;W'#=]!=AJc'+M\q`!CN,$!nyOq %ʪ%p{8vXꑼ w[d8cMҐH3P}g+V?@ׁ od "LY 8֙ 7y%ꜩ)p@β8|^\` k-resnA60LFώrvZu@+v"17X$y@L ġ^Mf q#1oLx‘2ߡ^P{Vqfc deߠyM,ػ#`Uqr/im<\ᦞi- u8u8Wj9" /M.,rRdl@Ζ%DŤPjq_\D*:|P>湩4vJ)gn(mƤC|OG3E\:*4h4!P@x,&'okkD0ڄoaW~ȟ_DN3Vp8]- zBT 6Ŀ9u5c?l:\$w;yᓶ= Ux0r_p'0>~5XvئL?䓽ofd0`)夕ߡ kGm,u켏 OEB_+4_)Ȫj?7޶-n{Y˧hcc;>qß|w]ǻ3#?b~_SbZ!"PXȋU/_>?!b=g뫋  endstream endobj 282 0 obj << /Length 1772 /Filter /FlateDecode >> stream xXmo6_!+J[ 躦0`]~jN[my47JT$M? c<{ᑡBN<",7?reI8Kッã_dK\8&Djwc : 8Ϛ;8F? ׸,LC'MxIU.f*yӥ).MC_m#fY(@ڄ*NA8SI3' ~ muJEOcbY} Q d \4wo=MBYEp9ᷚT kkG*(ȋ09XRFQˣD)ߠC& *1ss?}]ad|q~h:f H \{͂R'꭬hh#WwvoGe 4(fu]k(Sf_"ׂ4-"uV);usr.2ƹ%AڛIQ4eu OVͤbƜT.S:V.$;a]0ZVsU UĖ>8n8XvveCIRB=VOx1Cft||)/!F;'Ř(9rWcx:>))upcIT B>=DWqZ  rqrv4#tY\HH nQuWGA EƲޭʌ3 :ݚ̌BWI0/-ېֻZvLa-\PeFo.' 29%ܶ8j61){#yGiF:˒ŵvbw<{F-+-yU[i:5ɛ)"Ku/[SDr϶XJ,o e#ݡ0Ab\eKK l!QW綤4*At%rZ"&/>xQbx-]$/bmf/Y􎫰۷a^m5Y5g\UY'U,i*e%.oc`"bmT4lLpcXS'Q)3 joGn8]Ж ]3݈2 Z>ȯj$Xs @GIg6O$(wBe1ɂB,4 (zǿ6 s2=+{o {;?F&L,2n\no6ad# Y_ O)&ʍNx, fK|Jc""-w݃ Qz_+(ٖLn\"C(pR%l1R-UW("jz<-Tѹö`9ϞR|PHʇ'ʑQY_4N'ot$ws)|(C* \MZt쩈c|Rv{}5>o6Jv[߽= FĘ)|0*2 t|śT>%U-&4=(*<ΣDZzO endstream endobj 277 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpPmvMA2/Rbuild570a1ed057bf/TSP/vignettes/TSP-dotchart_USCA50.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 285 0 R /BBox [0 0 504 288] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 286 0 R/F2 287 0 R>> /ExtGState << >>/ColorSpace << /sRGB 288 0 R >>>> /Length 640 /Filter /FlateDecode >> stream xVMo0 W[6t1CQY s#-9Vס"IIp𽸤YU??(|/"~u Ra2!b-P pVfպx[d)4W:Y_V];9fkFP5k.&PK}}ݭ( 'Msz: yפak^W2/x:.JJbv7T+)Qz4}6΀h hmQGm I|>^B>?򬅇*Ƣi_ [P$GS` > stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 183 0 obj << /Type /ObjStm /N 100 /First 897 /Length 2956 /Filter /FlateDecode >> stream xZ[s6~ׯ[Lg|Y'iĻFmndҥN~CRd[j-OPB{LB.IXF8VNDkQzGQinm5Bqড় .qpE/@=WKR\AZRIt@1ad1 6,ȝ%# Ó#4;ä0@} L0\QTЧIv5b"P(::\ɣ3$Ybd5WxJJ s '*J.)7) ,zZx; o0cw?i'|7 ,X9"'^,OIJX=uHTs8@CY/uhd%0yZ**`"EL ~FJi]@rЏ"Vab/bP*)ͭ* $p&ȟHp%ϲ@f:E `AhSVaVF`ؔxl,aJ{$(yZъeX% %Xx9Y\U7=ks,oEnl5ŵ`Goߎ. UUݎmCY}eu3)v>dxxeq+~3QKYg$f'rҒ{ݞxVdE>Ev(^˶?R^ӡ@6`Ӧ!$s[Owa&Ac#B~, ,.W34xPި˺:D0#^drQWJw/"yYGW3MڃjuI{L\9 ǿޢNIQsOg1-j;åR4Y%@/\qS^Bp2[U9'^~CyqŏuUߋyM0yaŋu^&~hx~4w}9,#?/ni~:x!7a9 J|hi9ޫNOqo6f-<?&~:/Y۵/_ 8*'C`_[6Ü 澨ɮFMCP,'7"{gb{$r@NđIڏkM39-/t7nPDm%o;9g*9ʂt%r tf .*$|HIki'X,hx7 ymC/|H1-k4Hql:;-f| iK$p 1 k-"ceJNfs %O[T997#9)OM!F{7dx8x Br+1"@}u!bG# ۔[Maj.#nZ>%wi BtA Cr~!rC AsC韖\i˚! AP7luƈ$b)ebuP~3$5PVŴCZ+%ꎲ:u;+]?* 6^E!oD_WMv>R/c4tK, _ Xf;£!j W.`?gBxRbh 'v|.X mC쫋or>H|huK4X7U'd#CjuZU[\⠮bh`C`}ALwM~qVgy{1o_/+>Lŧ;_>qwWӽ'eu5ogVx_L(rUz;CNSONwl2̢EeګfayrRp `[|&~m1-NZXUMjp6+&-qٌ'Ϭ-";M]e_4h9MJ 1+g:OB2/iϧӺ*e]bKN;؁|{H9[ ([>}py$~ xXi l)'`nv?^ʺZ,צ+E׳ |>7j6 endstream endobj 296 0 obj << /Length 2064 /Filter /FlateDecode >> stream xYYoF~"`@NS lA--ITH*N?ߝc/cy(ZlM<<k\>E-k-Uy?x"bGj&QHP@t೚a0)ƠEB$A T0Ђ hh6_Ғ|:eZ93.ipBH )UaL4@vƊ41x~dK bs. dITCzmxTtMlZd\Bs;$-0$Tzqa*$WeO(\WYFm2|DS|%H/J>,@F{P˒^ۆuӸnRExKKTh.BxaT&C*ک_(X'mGByXscY@t WQjSP{R0J= Hpn}W[Ҟd~RWDٚ|d_ӀMc&7 K6]4d 6;6EB9la%'nY)Wr\P.,.;؜1IPzgR/"ƺii%r¬6KA5 t Fq"dd hg崡[W.s}m`͌`% (_WYGA=Ej lhL DR}‰7YY$L|/ L_#_5o9فz T b\* ȥ#A]o@P%Ub 7i Y (>a.UxK#u\d u2_s];X{+K>+͟ZX͒6|8Β(̒XK.:Z䁟HRqdBe`m-z5vmټ[u$h9k1wzBC'zvv``4nxX Cm &9>uq01rm|fl?i2MtGڄ32cҢBIQ4+VНEQVEk-->u4<2ZoNtՂhkör:lMK z}ե ,;_chSnY*Kǵ]6xR)?aITM.֦G~$g)=PAU{k$O\Q2.jvK97w`a{UW0q]O,m\Xxa3>;IB/bVT{w ݊^ܫr^Ozp@7" S[}r9uXvqe̥M`KDתU2\-4|XF{.Şk[nx2 5YwT7+kk;}xqj.-;wJ S>.)H"H8֢cςjMMP^T1?8Bʗj9* ND͍|D JxK2Nj2 v[Ve\1nga{ί[.֦\ˆA*wm%yqNwɖ 5L%@~=X{5UWn=%wᨣ82W$%ju9ph~720/iUW\N]e܇r+p'+Vũºԭ^YYԺ30t)?W}k`k[5lZ֬{^3{{` .b't+lq#cf񄃶:?O|mJ`b=xAn*k OphQUF=1SbX[Vi|šGG.Vw$0]yf_m­sĥ ?<Hq?37pGAjEz¾8cn g=? endstream endobj 304 0 obj << /Length 1161 /Filter /FlateDecode >> stream xWo6_!I"EaoC6]bh;)- ŖecҠ"M94֑<~wG#"uQ\a4Th y8ԩ7xGoNR T:!tQ?]_i-q+ĺZY33h4џ@ÝzfF=D)O0^%x&XipH2"/4tz˦~Fa  :Y%ITshv3JDg ' '~/v!MfVCuߋ3 ΢[TxY,J\ӂ,#1~_hҟ1ۯ@LNcᚋ-!4 UF)gjxKb6Gh 3hEHh$b'&]B/{VYY3_+(g#DWf Ϣ+Tb)UW c AhaF+ ݸ`8FmjZUYGUݵ$ e; y׺E\m`)o%ұ |Ytc+I.lZ1U_Khv$Tم`N2'bfb|NDzMx+DP{AJ2)as=ߕ&) _TD3密L`ۚ$\~:(cC5D& nmB&iˍy&y<(Az,쉉 Ρ&@U\Wx.^b +$Llɵbč&3KK_GR05ONYnX̘<N44 endstream endobj 300 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpPmvMA2/Rbuild570a1ed057bf/TSP/vignettes/TSP-map1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 307 0 R /BBox [0 0 576 576] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 308 0 R/F2 309 0 R/F6 310 0 R>> /ExtGState << >>/ColorSpace << /sRGB 311 0 R >>>> /Length 114923 /Filter /FlateDecode >> stream x56}*2 n@C#4=kc] #e}d`0ԟ/o?g_?_#~?|?V~R~?]??[~oǯ57u:31ٿq_?ms3ќu}/YiCO{k;O{?gtpDϿ/5_Ļ[Pg~}~\ŵ ;~;?mQg/zF=ڨijF3FOYQG_u/9cн_/uU"Yۿg/_Q>̴~fC ׾aX=O{q_3>m_gv=t.js5|s/o㜰vUxįƝ^WYqQǯ]_ο8h-8n !q?o0ܐ>{t_w/=ϐ FQ${\)U~S?_?zHş|1adkm%:*o45Fru*q|$ >?ğX8&/`H?~zNSoxAB>7p OG|X}?DØ^o{ƛ_>|sG#6xs-cNU*Ұ{%&XsN>x kmӄ?UF80g*8|A;^G{R<'x<&gWyx<Ĥ|?Ʈ/x;=3]X?#>l?_;0/?i?cs Φ[d*.JOoz(i\79☗q͉7Nr(oL^RS0p{α/Gܪ!q^{rfv%Fk&un01ghy(eڅ#]x&O~̿^Wh69 xwⶍ7 wΆ 1i,<#^|˜C+\’hYh*` V⾅+n-µyp>>xT|?`P'kCƙ6g=|RjՁ7?n/~r<1tK~bs<>)|}/r_Ktn$Wfz 0*z!xVFl>ԉSBx(-|p \bpr;g]+n4t^0ΒM5I/@}]pNl{G4{*ϲL]b(ߟ_\t+o]xg3f7Nq%1%\F0KdNER{?pX)}~|>1g//Z_hP:&$MU"<*.yr~|>"q6h0訇7pLj1gxDy0MJ ܌B'W!>֠?hILb}kبH_mZ5p0&M4x#ə4&)-D{?>0~?rKr?'WaPx|qs\cI< ' =W4T2u ցOIݎ8k+qM8W W`ߗGo L_ tʴCxI)$TFԨYKg1_5o%4śnMEu@E&wK/{+"MR7EqmL.{q[HIs:G&-O$XsN! $^7]5>IddH51=Bj$CqXI >r9-5o{.'#Rմ<98ۿsX1g$֏0(o~ Mˇ4|Y/ kWv:-QWXz I'=é"R,b7mg4+NcխqHgM]XnI]7aon՜K@)_,[u S%kC~G~0uzSZolp }!'su#M1@֞Ƴ>\$ 9o|/8{IF n}fy7|Rt (]э&ߨ7 w㓴άIcqEn,C7񊂭k!I{|d j$PcP,(NV|2NjʨxY0}zRW7ӎGWz O4o<}xxr߇5qԍv[ u 5yԌuݙ$2YXB:!\I_*|NS'/zOoޗ)Y߼% Cޔ5:ۡt"]e;gs+n Sx\+/'ߒjץag?e։}>"| O'''/"LU?y'1iz% O2~z.T.ct;Ҏzi۞A"{Amhn驠vRL_> lrj w~O{F@)\-[WrOD}gRLk),+s'ok_zIXg6"ylgkF|tpb}QŗPwmkw?rfn0?3ؖ2ƒpM|}"֊9+ߴw&éS }G5 |yHA|O7W*IlNo 71xnV9 7X\χ$`G{ NǚpÅOH1q? -6$5PpL},Ӛ#KG?{Ldbiq|GVc)"fR.q~ǑxA5iz~n=CJ^IGX0USp$n' gf><ZVun c)e&4HR5˛n p~k};߿>_qM,zOg(ܦ 8<&ZHJL~MX~pn!p/ x nUОzw[p/W zHOJj:n gd@߄=&1e򉨁ĭCAoݘP! `4<|;7>qGI;&0qPǶ|>wp|Kz{ھuxL|mAy"ĘO߉>2H=q|$# 5ܘ |1?|A_}G  {>| D1#/_}ǠwԨ }oJqz0OT6pěxq~'8_ߛ;uG7gGA~w<:ABm O/ò^7J(k?#oǫ<O}pE0bn{~#,9Dux}&oX k4=^O Ll%ۚ鯭|M=S7~i|q|}p%=|h O Ō0? ѿs%&EuIAćxx309CR'_tbK Kђ_iA|ot~)o±6`[:s= Hտo NQ|45 |4*b"v{ xR5{r|$J<*]3󹲿eUUOM'ZZ) p7^-||5/~YS@Jk# _L/e'")?_ަW=~%w#~pKey!=7f{{zߴp-nKu:g~yzXW{V@ί|3k'x5hz^n?ڒ?Y{߷uCͱɉ_>\%1;g8S Kel~; #g8?=3ݞeob'Oy/ǣ@9*E Gpww>L}t>ap>K4Ga=&wP~*K0 ٌ98Xnχ>rT߀SEH׫oizy? 5{Gƞ7}Aa~/ļf\;Uo&`+==7? t'=WXpRJS7ǣAw UyK>Wz<ק31%݉uEDJ*z_+ 7dN%G&.cWs}C7Sx7a,Ouzwq?m1Ica'?i S& '+,}<=߱^2Ѿ_zx-/{b>R^ y@^G}3z(KH=\Q../'$=p6ϰ| #oY&n\ {ֲr. Lx3ꇟWg,1ڟa7Sst5QB};P7? a79w۝qT]~y]m\~_TΡZQs*a]"֋3Vk}ڊZNa+apUD_deGWOKVp4v1:j盭 gڊ_z|߶+oyp>K0&)գg9ZN߱9.jQo(OV`pVbF2?#Fsˎ6wX_P^:b+\c/i{~[e,T|QH^WRn:{ii {u)N+OAHykr?.{x׶Glye0 1ްWj[`Se/F^xOIr?Nvwcuv88$.퍙۱$/n{I^:/U±7sL{]VMgP`>v[ffKOgvw˛t{6 { z+^N8p=򢮾MX`5|׋x&d/oG [&7{W偳Weؕ-C^7ߜ_o5P ;陪cy w^>{a8ېgl;PvR~6rlyfvgmhgW"75{._2+ʖby*`/чW#R6|5ң2fk>fS2G+[N>4>tX}0n1?d~u )^Ct~+A}"U‡M~uBkQ)zš_ƽpq&/ͥ]ƒ8m7#=BެVvkvXǦpc[+ }5p:VE1CbnjE>U=yZʖi߿ؿ (k `u6?0N#~zs]x7 E/#Bw8-Sȸcs^As\?=7h}xqf5\'^ ,bܨX_ۧkxZuZ{* b!n|kztGZ{6L=ިO.҇aX3Oe~1:jz^Џu;+|_x?+y*_=]:sd{LI~;Mw6R010[qVjAy!7+Pp6g~kp$_S5҆1La,yIpv!|TMϼ?i o4l =Q̫\I ܹƭmRg"YM;^.DI~ZA{iQcTSE!oȟlɭ^Ǽ6M}_?r=l\ZU)ryt'<]CʆӃHQsV}?[fCp-l~~k=VWU_eu%Z޸>gdߺJi>yǗ/_̏]evx}pO'/{waGL_>u92LR.ڙ\\}+tb}^(ГSv~җ)ūbIUuDŸϗ*yTaUUjyVޟ;7ˋj|{Ozx+:&-߆U[/M9-d>mއ=W)EG|,c{,nͻ}ªLaW+<Ga^4}٣H{p> 8z~ak^gYN_yٟ FUmzbQ_|Qm mq9yN^=GKxSp{vkڼ8%:n/?;+]}aR?Y6R.l#eq^Mﺩ*WK!{UxS^b){J{q^nw<<*L"%WԼ[~A`=0;3;o7z=moݿ؟_ӟx(KwoO__y=T͡y_v `Q8~MOQWΧ}Wc|__?B?@󠩚ϲg7o r5n_!~ Ep?4Cwzph+П-sڃwNQ{,[^ Q]}hB_ǓO|^}+T1~|K ]y44|>?9|_|8wQ^j˃a},@;_ߺCr6M+f],?,I\|ke=us2Qϳs1ă=\| }z?'oo'Sm^4 H_&WzzkX~ԗy | W0lwG-MNg͉@GīkNg}cXcK}lR>i w&35!ĝN(z~w_aNH?=H[Ī Up[^=0鸞'tOyoK"my\MK\gt.ӛkWw5y_wKycUo=ƻު~U~wGV<6Vw}IK㙧SfS8bU??_pO~Xsnoy_U2z˻[Ӱ-ꖯ߻T|W5;hW.}eMK 냷1֝Oއlܧ=sM|\8b}̲ݸϗ4 ?kSOԯW7җ߬C{ku-V{/WXUn5uߺڤ/;xwu5y߻ڿ[u-8s5ć[㩓QyyR۪v筮x7)l?lw>d({YN+EbJ*='ܲ^'oz>x)W>6{︽Ӟr_{_vڏTn~:#O(0_ƛ*~>>忨 5ySշB4A wo->Lo\y^d:z!C=׼i܏{~v݋#Ͽ#{QjTp^8>b ¿=_n3ߘ^LwqS5-ꮷ.P9҇w_CϨ3_>m^c㏧?8)m K_sA.Pvkʿ[eo<$ؿpm[MCwp?}`cVu[GnQ M}Q >[(~ŽnQwfjJG}W\,;Yョ!{"]=Mph|yY/Uڨ 7bsEnUo+k%?ʱ7u^ wlѫK~ً5pm|I</yEe/ayxmWGy=&UG& #g= ׿W<e_5wނs׋VFflf}t' Uު̚rDH|+UGRdvcnvO(¿4_1ɺ!ޠ=urK=XXy=&ߧwRlƳz:7?z:~tGX^(7 ]\K}? }sCߛf#폽+}8Aԟׄˇ?tZ̘k3R:XSkGUG/}&=R#5H\K_*zQh7}j^~>0a1d%kz}H/0 AoC,2}VW*Xi] /B 5Vu{EmMxZ~_d%?pH\~ضgnFug7.Ǒnl,t.V_5۩Oߚ?맩?¹?vyaN\OHTSf`'Xc7k,\tSW{jOֱ/C~1Edj]c|3s>w!)|_W?*OU:ֶs]>2<?x>.0f\?^{mhg^쏇{9/qq>gwWoۿ&zLV '6O;OW?o`x&O~=9vv_#?YZ= mndFey=+Wgulߤnpֲ?σ{0o=vO5d绋Nfs& M۫ߌ: ?!<:}??wf(63;,7q7 `>VbW8x"lLd/n_ȀޟP ~}sxng 돘pGst{OVqט,?7U1݃[7e>+~ +X\Eⰼ`e.OLW̐$Y1?1q7?D'_C藞ɯ;8/*#\?nBNy-|ߜi~ɪ-2[QEl??&*\7l$OUdS~xa:h۬ֆﳔڰ>f -֬/ޚk< '}[Q}'Σ_@-op`*Qg7Տ.VՉ}1gV5W~&T 'PjUB paqhzć7n~cVŖ$Cs}'p/~|%u*;Y ;ڻ?SNOx7/V4!pSC` acw-WπkC,P<]|aķ񎧛$?w7U-GG'&yrWc[UIv>!ϪZN~ŏq}|_ЃvU5`FںΪg?>ֿ|1*Ƞ'U=7O8XU>; k>H|`U[E1Yx>:o>ϋ:zZz//!jWUd{7ViXUKHڀьQE^X/U9~TVf ۧ\>C#ҧVJGjʊ⟪XؼB~{^Q _crwբ>OKoї߇xW(_ab{LJԟ&yYA~_Q}4o@H/Kp$KE3c?_XY>[gyZ|\M?CY,o>^?gͱhϨ濔=5dz^|~{g<#-">OXU}sȟ[QX3fߛG폽~ fnowُ~ƫ?2=|ewc;jn}}{O1?OoؘٟiZ<>6vh_2}wiTz o>_m"pRXqb ML}۲>Q:"'_CϿ.t*w(F&&^5]uL*Sk>ۃ.}ŌO/p/g~4\^V;|&2pF)l`{1?E7ޝa+zꏽ '7 (ϑ~X ks}Gp|A{=Mvq|i=ۙl|{ Qbp>iOc/Wߟz7}O`ͷ{q`& a|o8o.t}<`6M0|_>gq|Lvga~37-;vޟWߌ-}`>!;pfĠwx^;=~oAfhԤPn{`}廥|Px^8~EiJJ;?isErWQ_g~2zKf2^Jyև >m?4)0q(l~aEد ~<~ٗφ}~qxYlݞOɞߕ;eǶv#r3/EW~/~/WmN,{w1? ?/_zsZWNƁ.~e~=`7_g}Y5Չ7_N]DCx_~i?ӛ3]-=?ä~ȿzTFtYE{G 'O$~~y ոWM<ߺyc}[~^/NW|GEz z/駔S?Vɯ;[K:{|ߋN}IZk?_m 7[+b}};Gi~&h ܅S7/a]][:o m_y_A}P!&(E<}d|ҟ~XwB&h'>z~6?pWpZox]Z㎟=SOHsϻjmھ̰~'{>uɺJ#ߏG_Q,ԏTZoCѦ=w>g Ƿ2pis<ǼwC# o%;/>pWɟ6%Cx׏A/|YU%>ng[o'W) cGwZ~ߍ)wO{XdpO^]ӕ ClW<mPBž\_}>?-?i}ؕ0Q~><6o{림x=R>}y##=H~Zo^(NqxGy7?2oa̯C}M1]zX.xx=쯣fy~ܬo߼7GJLWocIfygCx}wޒWm{4`0a܁?S>Mڟ )o7ˣF4Xo|dr Gv_M_V~,`PTw {=_9|d}ɡ~5/Kܽ^_1(jJbzG{kwG|-$[H9̏Ҝo˓ GY۽znPx1χ>/8qKag}tv?{oAcz2w{~W?џ\6RWxe|g?|Ul`|S0g'ϩo*Uzw#?ٝ>懨~`{}6so3QXe~qǟj}9}-qG\ZhդF!|w{7u{Ldzx߻ĪWx}~JM~POk~qHgď(+Nz]/қ~ FzS kzB`K ;1^OBk?X? }1UO%5~n$%/䏒WFj~4q~PE!~Z(}dJsOeD,D2>?/=g>!C<웉oO/qdd*{Nx; %߿ +~Ǜzh+7 R4P3ޣt(r=K|W>`>O`GO辞/;cH=X4GK1Eg>R,u*w{c{9}6?e|+p~ewxfy39{>o{9G&rcx}oMxAKzaY9p~N,^bҀ>,=gDz!"J}:pq4'벿ـJ,eGX1cy=ʼn,Ϲ"^27K\Oe~g#&?1.R1sևlp\x?:v/4I˜t(>qߋόxO:$n?Ml2ӭsaacr{o֐ip_>p{Yٔ>1C9ɘo5šxH0Gt" [E붓^{,AJA~^d exH?s?Lv;sՔt;Be}9LJp&\z:v i>n;5֘3#slm\:AS2dhsjpfKXo|5B5)tCYּd2_dMN/9OMU5Hb Q'mi,9T$3l*Gx_xjaYO%#zQx竹fsa͝.0~f/1U cݮ2Yv}gjFa hH p׬ Jd!eZ;2RC\p+@jf0HYz մk2g]xn_U3;Vjaִy\/kk!~朌5o AOkb<-X9K[kFG؂5n [_k|k6TN)$[c;%I:k"J ք%p#4㾱f]U55c3רhfX x{wjƚbp@^紣3CbH4އϓ`gجQjֳ6ӄkήY#WgF=kUcxy?ọc?5ϐLm3sz?w}_5/&ק5m3~Ι)眭b(A䱸5G5H`\͚ kJ+f A:ۋf;ϣ̖Z|K'̉ 9>Hl5loafb~Y{0ߚj`Wg+ q\b}zj95܆qʫUS ƚj̹A_I_7Kc|cJjW+kR>߮iR7kb g*;гsat026nl]kf>6k0@o?w[> GT]GYY6Jo2ց,Ļoƺt"~ZS9"!ysqʘrȥ`!N5ZLgé_jRߢ%F<>gp>=SPM~۹_?QWx-[㚒I?QJqA_<=v>߹SY<_55~{՜OI*7 .aZ&0l1Y0)Kjbg6<^|zs>V0X'6*"zOaK ћYӲfߗ|Kzp?珱~(#{L?r?VbǠG;볼X<|`z`}t y4ޟ7טU8㯞Oޏ|=ϚQ>Ag/3);C׵~r&{nj.MԷq~'OqWQ1k:$>zB3L}[^M)Bx}HM6ě/}X=؝=hNQ~k _A*-_%~1n/P͟˾r-N?lw:_ۤ|K=ËK}Mȉϓ>SqMr5y!&5&5fS:hq~5e{fyi(kBL)z05fjD7WY7Wk)vWtq|ho7"f!%, #9B/`6~o0(iPC*]A 2go,6NJT -tUwY!E@6̃6~׌ 0tך~Cpy5 qNuV ( K<wB=]yɳJ~soCە6<\ r֣px J5ppR<#q`bU JrS TeM)녡PDDbZMX~\!NaGw})4+OHJ=S$Ep[ԅՔh`+5zUz٪$2y- O)ZCz+ҢjY[UVrW=n#z-#qgMJm+gUdGը3HJ*]LERQ}*OJqԪJ͕s / GR w<]lP{yYx՛@ʶg5}cwc_Ċ)DA Jz_Q?y"=eemi(1}Z!c5]WEj,v-ir"JJ?wg=B=ezfb+?؍n(7^.& \ϙ 8Zi|ߒ~ R^Nl{`|'Jj҃P'>hD/tF}(Asf>An !P]')sD_ uK(wQط^wa./G @!ZOh}CuO_S3G{n{`TPbf^5=C(_3 ؍?ḱJTx,*B( 93r _XO3|lS+Cũ'L, {No3 \n3S?3UeA2Sլ SLxpfe~T9_( 3Ǟ}ܼ(oCyPJP5Q%e]=f+Ϸs8,f}ffι'f1_|dx3/YWffe=:s ~2߷͙pe]Lȃt% x TAKq%EM+fr;kw\$3(zH&uUjfD:4P1?M&zPx?WhARFyr|@q$gՕiݨAJo4/#0k\i 8y?eMfd=/VTxMP^okYOyFݴ̜Ƀ8μ~~2PC~/ZVF\؃/G`F@5g ]B2Gey='T5ͨeQ1ڊ'dh5>y(; ]R4y52Kf~0nreLw~˻>Dc>t?ggD|8_(? 8z=^B W[XϗY9@*TT'>&P@=6?*n/"ax> ?Nք+ *[OWyb /W2}^kfi|r=,f&}J?]w;\u"M 'WlŌ}\\os^/bp_zx={f|d]^Ovž,JΟ/c?أŕm7(2?&M|r~=3^f ߠij2oUZ!w7畍VRaa}z(\d1kFN&Eɇ7]\O3*=vZ'ߛo3+|qeM<8~ߩ2OK&s7~^tٟc<_U !dTi'*JB3yY^8ۋ;ba?/f~>؏~W|>Te`?Ke\Wˏyr-}M s]LTFS<~]b-`"f~Lzw0;Wd?1_^~3;o2G2SI _u['c{P:{`bS_R疟C<}}M̟xۏϻS_ɩ^W2=wĚ_ft73Wؿ-w79ל~J'3y0޷$?&ɳ{ tiAJx|{F9}StC/g"+>`lyo4 'DMɓpNOKJt=*3{- u凵/*nf|}tTZJf~^GPvoZnj?[AG~$ïiʏoǕGu7xO%˜/߯V6zk8c^:_LWwE۾ 6}7?m}ޛ1*f{}ThWەw?Bޒﶯ_#SR웝Y~l}IiO=Rg(o̟q|0G]}ygy!ܹTӃ<@2d鏙xɶOmO/DdeF{wuW3';(<(߶+!Kn !}x%ܟC+~Nۉ_vdɱg+ˀ8$^Οh|+ i|9Sy7?WCactGy68O_ pNcYe=>;?Oѿ {lg3Gsc?>_mYjyT#c} Toʟ95ދ8 Lec{'t*U!OL_:W~)M'\ybWo=%9_>&=TX%CJ?X<+?lOp x*~G<ѨnWou>~vxVuP.{gʷ2uߠߵ~LごϷhvJ77+#QY:>1^c~ςeHUqG$V 2#O[ao?xq6w~x"w,?|>-gKǧGU{\Q=gW/{ֿ7?Kr>{.'ԓGyپf~lߴ߶ί,cxywƹ> ߫)/'о^W=$vwktuxJa-oXc~H`/ꗟ{~ j^f*bm/nm,.V^_4~;dtƟ/{`U>i{}!fY|w'Og؛bD?>^߫翋;B~tU%|X0?ɯH{yŠ!Q_=,f;\U~Zb=O b :$h=4o^]5[T zSL,ڒAOn|FJI5⫑{53.Vxdzzbǂj|Tځ sػm;.5hJY3?kT}pr6O43|eA>6?19o(6pE D5Ke<$pksiv/o~ek~?|-}OXŷd{_kSVE|?~*3G42XͯPW|? rSĹk++G>6|W9o֋>fQzoƛUh^:z=R=R/UUqϭڞ-czQUrÔ ̽1?u5n_*UW0/ƃwS%A| A#Czߒ,@XW8h=6ʧ]*%Jny빃'O8'qds}?'8a<e=6'?]E z+NJ?>p?W`SyU5k<߻/3o@@8n+YU}||q ćd~U~T'U*._0 á*UN}ԥ1 CpV'}>X|O 󩈿qk56QUur^g~||Fz?oTƇ $>OiY|G{G?jJ ngp|h|+?_cƢ/*kʢ]%6FnY~]uka2tՄ/,w=/*6?iU|Z|zr*ߵK~j_|&p?g?`8h}d8e0:9Gq PS0ץpy2uFODGb\|ъ$u:9yn:[`uY4uaOƁ[OnhʍcF0._w8A̪Dp+ =. t<g( X0ꉑAB\`Bd`w!PO={;ڷ\tPg܉bHbꮣ8mk v WhY\b[^xE<_^/WT:l0B*ɪK OF~w]@1XAɪϯ0FH=a84dTo#WH:%aq]٬uӬ0JƄqgh?b^błX/aG^beC|zƪc}KD cA**ƢBS*1szV5`L%䣺C^W{׏E| dtY:oJ\P~]MGKר }}4<OzUڿV^/%{6 ~Q i{{f^ &ҧuuq=ds^Arry˾:Ł=_Ds]daLz=\3ߟ8 *7bEۢ}">ѩ*#3>lWaQlPn4[p WTk_=Y Q'QnvBy[ 1cn h(3>1b \BGlQ/bΒ-9@ {9J_yB4pxZ ZC1ĎpOu_x;g"3GОT~֔LdQ}g=2ߖ3)\l.4VڎjU+?~#z_գq~ a5"d4TabEyrCA{d)VaN}0 Db#.jCZc*SXK~1T~Y$է8>qW|Uz3nj\מ6;B>\6O̡Wp?lL{#՗҂&!&'kS=N;sv0`M:k(1%s]ǹgi2-3L${*u)뽴bكUק~⶗en!r@_f^tF=ȕq}j>a望u8wRo̻sW=gd3T/;/{m*T ɪl-2 훜]ɇH+'uJqi-ߟ~'w]$OdW~B.YɪLAI;ӄ$n܉tSZ~&f'w?7xǹr*1멏J [?8H(?ƚۓ~jYȘOd\$wUꖱ!g'~q|b{]F~=]d/Yl$?]c᤟a4$*gU?HvU ݉uy"a㹿76&eوUC*5N?_]|k88oJmHo+E2~Up[LͷuއC$zEl9gDZ9C~~"O_6:LU:OHNM٫Գܾ7;WoNjCg'L0ݿIB=YLO@6u _3Z*njJLw!r.جޯwsп~g*"/Hm!Vj i?}vor}e$<-MEPB\r?plcNle:gȾO 'ϱsaZ7w,=_v6YTsC&:ptUzzJY\S>UqjLDC^_Zz 'OQڒ_MGZ="MU2ŷM{Flo#g cOk",eˢ SV;ǗYLg-1gsQQ|8cY-*dW>YmoZ,I{x_ rךi߆*i>y"lY|:1'f{FSxi>~?ZTʌi5[Jm1ŷ)$4o6-ȾLr7~>5DyBס OX$!9h''O5ŀ=Qr**w>z N"tC5ezGL3kEjG yMM?ӉGsu^hoTbtw|#QzFNdzُtN#8Ͽ%kNw]"31t|Ot=3 ;JHd> ٿ Y*'?5gmsm, M^*j?',H DffhiaDǡϷ<:#AFt˧ߜ@IϡX|`C9W>#?2ha 1׍x #9V+l󍜼qh3!x|NC@|yC,S>ee?M0<,BXjD܍=]y[>.,Q9?&NM)]'*ևmDiTyHx?l"Gq^FL!YFin֯8oÈӲmLjUizYIMRl\FpU햛>_g٣Nɻ0eEFd,lD7Ո Uv z~~if#c?g{Pp:k6G?g󌸍b! 0mgG^'w73=D2s>6"_sJ<ϗͶoN^DwNr@Xn\=p~336㝲ö֭Cq}Fh4<] =NMy~~O8cfmFW,,8_yX/7Ax?<\_'2u\ۂTPC#d/qs=|qˌCn'In3CDz BTղj:M,J~?/g!;h?4o(6lt -`l>ga"O6ɇ5)iNO!eyO`CV=v̟=l_g cs\tfMmyx=stiC9\mC'=[qՊ._kVIѾ._6h,=gt{'ߣhO><tVY]37alr]ߺlqdiN4T9cfQ^~訚Q=wqxD zp\oԷ(:(:g:)E13l~_w{y<><&f?ds?ta=t>/Вx}5qZό]8hbh|h.jm%('he~+kO eh KC/A|.F az|X2>m4zX8: m}gߴ-kx~^_~k"$1eo}Zw7A+S,FA/ZM4eM>Yg|b~n!/}|]>pgvEϟ/gݞ}y.|&(Nw{ΐ :YܟS(|V{Ϩ{?n?w}2!8i:a(n|"-U./lAڋϰ.>O=j!hkN򳏊|WD?=\?"$xiF- ,1Wyqv7Kn[޿η2?C-{?\'hPؾBV6|>/n2O?* |]Q#Yfgs7f(Y߽kX >VaAfe+Kww]h}_SxM/\ /6O{O{ҋx ߩ3k&[SOmJ\oWVxU3ҢǶo7}k?MP*ce+m0+"dsa[nĚx)"\Z$/O}^XKfnj<;CK1g1n+[J+kp{O'I59'r-O,,-QR5ﺮH^mj ,/"FC)YVj܏՛UȔ##/۳g(iލNj^f?5vu"T"<^`N ^\%N$LuN%:$.J{o2_r./6`D""^;pMs-Rv>3Vؐ7SBۊ[1)WifO=ˋESpu苳m2T.vcL؝3й.Y-6ފK9VH +/Did؄;0Qj祚@ϽXV^KY^1W* UyN"ʋjʓcT i㋽3ך]Wn%w~Z5?_EU[W~NUB,_j'#3daYߏ=zl/QTHi}648Wձ^~o~Q__;}iϓ 迨va}x$rU=(0646*|~DG쳚/ ~Nxka'CC@>|52r+S?ɡ{oF.w<i`ݜK_-+WZh/u>e.^\]Uhy8ל.ڻnFdEeE}<y(okok{/.>/qBECjvT2]MQ3q% xco)scry:^bߚ]kM#yOrp>EBj?UiRBz:KVJY:_E>/"3ϯaw9[ qL#U[C^].M!I Wnmx>U|?+y=z!cW2w&m' dx`g =}}ק۷mg_}U?Z ̯>"4sKYq>yOVvOƉWoC/;._9SXq Nk5Pwe\t94[WwY׀Gֶ i}}a3.-Zq|ug/׭mx>\ +qUe閕/I(fah4:,d~o~?,kK`8*v$"Q&P{_}֮q/s/d US٠8[pYns0kK'J p"Kqv wɛ.Y׷ #+ 8d_}zxg!wO8sfzRFƓ$c r9U߰2@ &nf¼mDrEoKJ:E̼J׶wXWZ#:(+pTp P>XްtG,+Du@=oì,:./lPΐjxSjOMT)'O[kJ!ߐV é9R[-ם.uZ:oU>y3gsV*h\8\@VZfф yW6_HU\A Rarj{ ~JFJVrħ'_ה|XC~;>pb*Upcq4ҁ?Y0* dC7 _z}"Y8pR Ery! %LHZ-dF8Y-73q ,Ϟ'r\@\K<9u9{IL;1mVٗ-z>ξ,ikYʺd,\ٗb+>}Z_ q?kZUN=_XQMfg|2ge[a]ۘwxgֶ:A!}:1+?1p-y==dr&9 ?B^̡c8lϑw?pOwpuπ+Ot# 'PE_,,7(XWM/;3[=~|:e֣cRϟ)ȉ{>sߜm_eC؟Vwl'1eF~}+hiv4Ŏ1%4fs[THFVJ?˖()d&`+z~hN!ןRx𝼞5ʇe*LikF;ܿr.q^+*wl*2ݶү׷ljyb5[MU‘#GTϱPGI$;Ju;sv5{U*JPو,XHz^'nԆ5<ɦtP# v?;T=Ȧdc_kfLmdooml3irC|^z6Qǯ w_ǓSnXb:Te~ŭNi?3gm٩6Q{qÑ n|QSWz,R|_sJSh_0\6:5Wǩ;5uʷc4Kq{Ofw,cda'N߱9;qEN&1ү_;ֳP5€Tsh3OȩN7̀ƇZ\Z #dr!Z@XQ6wq>Y3/{D [@,\_]wPɪip5c|2<պ,ukUРrړU"Ѿn!j]߾U`v8]N$q Y G~}c 1&Fr5S͆XlG6ZX+nyYu G1;٬1:ǑUs\uq쐗 Xdӎ-5`CTtiXlOe;ȿ8юѴ8EV6\s(l93-CJOٸi/4eتٶdXړٶDiOf߯:~wޕٷ to 8>HGon^yVmە/H8ۗlmKv>_vpGgW؞Ka^TAn~Wָpe rnaaz[a#3Z)Z/+h68wU9%a~音|*~_z?d6vM #Osܤ?/'"]|ʘ7sҏfWl{N-v~"[q lBx2)~yG~];2Oۨvr R3댬o^uuy9~rxvo#6{ 'd?;OW;!7S%e4;+c#W^J{Uq}㗘2Kyw=yx\$;qaO9{y;yY٫9{k4PvЌ|d]uBB^ϋ+ڟ'x~Hnf+Wnۥ0[?jԡ;F+,r7 &lcЦ}ܞ,8huqg&1hcq1ζ4߄w~=>_.s-.ǂ]FiX_-_بE͍cg:D*Ixr1ufos%Omruϯ'u7BWA!oᕽhe>Fb+C@nc}Ǯ3 W=BV{K}YqW"z2|7BjO YF{'c<~M+F,k>6H+>pEɔج"oz&I,|?>_\e;kr.y{L '[шr>LC^E!.s}rGvk~3_>ĕOe_;m]e#>(WYO~J>iȫvy1~Ke+ēG>*n!Pzyz' ]*W|{>ʂ)= f>_{7-_Tzy;UP-TuEWB|6ܳ#f>yy}?i^XW'FOSwrdhG  qtb=vĩ5,ƓGN~-HSQ)D;׋*%GIG{gF,i|/tqDՓ##2#"bL Q!2!btZXiG b%#PɾvOaQ "escpBXAxJFTHVTUCU-NeH?@>nϷ1莺~8:FMwتɉ6=Aȭ**`]?w`8BqkN]rpyrO3ٳ[9@{/}{PUm ctyxĶ0:[N^21|l}ڃc?NKȜIJc iokDޣC}6*qOOOEjȓc>j믂zt+|8{9)mk8C̘O^`Sѡ6#!p*1ty3o<}8W81{Vg_&{kG&si={"O^#.9ǣևpFqb\ y'SGz*"xQ}YG/>{a*w~ڦk몲 wo>v<^W<{qFi|m2rܖoVb2&A6l+1 p<5s;+Vב<ſ nιuSL'c~0?ފQ%)?&OV%Z ` >#v43_&b*Ft3|FPH^FD NQJF< 8&_|rW}>X·jn~YܟW,-#HĒq/ɔnc&:]?QV L#ʖE_r͒!srA-EL>81AQ7WP{FU+%y]7 jHuZ)# ?q3#κئd>xeVe~hycW1i{WYzrn}""\^#vCna'+ti2%|rwUKWr".MrrweZG|R~6->o-DY~W}n x/HTޯwu>(럼'+O{lN{z&FlKϻ!Ct}ޛGT/b /~=[ z= mq/n9Aş}:_ {S %!F:Q8OeFοN'!~/,;#dc ꏼ g &\H'e#Vȱmh)B#rj* ? 1ls;wK$03_zy`>+l3 @(|+G QoKj|=f8S40~E-I!V_|! s)p>[ݟ~gzҾY?߯WrE~P̗3t# F;m}tܟ 끪9~%#Shqկ {T>yg4 ևwwG:OgĽϧfydF~&WBvAs|~όGQ3SGrf,4'<꭮D|F-Ψd]g 7 r蛯L;ڷ3L c}|ÿ>#73 G_#Rf5YIu_2yBϹammiVocgٟiJyy3 kKV~no~ekQueoTSKffāR;4uF^O^joGg,\x?į??x;}zm/u]lϓ}}|J|v_JLM__lއ}X4lɞv?}_oޮG=9^rY9i62H>0 {"S}K=T0oOWU{b> }{T%ްuiO 3oOf=7 ޯ{ WKWWL|<Ѿm,ϼ"q> Hq?xZW"cgaQaG!E%k6hr OΊu`H}Nؑhry^\wEGzXEYVJ@Zn1;a8kم⛂OTgȭUFtUQu _LmЃd!7#Ծ~?,,7UGmi,f{ ̓}o޷bw6?VͰzȲ.1_,xkk譴֌ 3֌Cft\XOΞ&i٦}Z_l=Ϛ9[ 6\UG.=X=ƨюэZvϜZ1sl[\>l]:6hV\Y-gLEo8hcM 0Sbo&3ed:d:^vXF;K\GB_%Z1aV|{o|_w_Z,x{\w#:+@ܱZFKbi 4CxV[ C@gLtYkxwvS-߷$QvXνux? ?7*&&']8:q!cE(6ƞ*'x= H{?[uZ+7w^ lrUG^]q-l߱QG o1s?m<|ȯq?s`1DD}:w;u8,? ܦq ar]^xXYt{Go3Λ;Ϗm`ypxwe< ڽYX=A 3~Q=-߸F/@ƶnGa Iu#% ]Z{P`xθ[@5;%- })ڿ2|o<.n)K-b}i%r>)OW|.ٱwnao)}J|Bw7}]_7I`v>y%. [ٚ>9jS 0MVZByzNC{ joZݟº'?}g>uwҾ}7D82nj =15bR2qwyN:h*2A\ ҼwqDAht}_uPַ6-Mbeotzւ) {‹k޷6մ"iƴ; X p&f)~YW;JK.H.Xk7ǫxjt33 R8{<[+ɞ~GⲴ XIR~KvRUtp8KrclB@e@%Fn|{4p]q4(KVzg/Y0klWe$LRʗW^|!K[${&܃%;0Xo :>',т $.c {A)6}1 ЩtӅ|qPk3B462{$=A}wYT*+Nc;$nk%@* d)dewC>4WpbFc[ ebO>1xX0QKG|8 OB/ĺ;sb0OLL~!pv<#VSȋ1e ylE[Џ0FP!:0Ǭ9dyd)%߫]8}vN\01sG%}HFeTA+5qzAxb 1]G>z1_FYox[p/1^D\CF[\C,+([rgNc-#%?VfSVqk%a|`a{_UP8d{#ɍ*.q8֯ U }@ZqCcG67*f>9׻tXV:G²*J^$ Ga{qe{G_@033L~ssi  mrbA<('f޼S]687asi"qaLD8X7@,63U/bTƣ덑V 4a?o"qbĤW&4)$չ$Z}$bH%LzFm]iSF5)uJ)IbԄ` P[9G~0vf[a7}d~M9喯c\y^DG!#lo!/9i`<&q?xAAƢ=^=f&O !}\94NW`^lw~"B1+0nٟCĥ)\b!𖏿tdcK}T!ťxOB- )p}6ri%zA܋xōW_ 31Ʌx Wz[#zsBL9yup~ܢ<14j'q M{Bx0p;Q^yyO<\Z1!Ae9g37'elN3p"IsZ]W87SB9VgHߣhLX"<,iӜ ~)D4׷~_տ\AĄī<jMpKgIyqp b~/mH8ؚ߳sW#bbJCj5 , f{685>q"Mw+pqr~ &\B ?_}Ҙ|/Z'Otbw)WQ/NZ 9ޖfBQErACAĠn0_xulqrFk=!AEⵞ~S_{@Vmճx#\X?e9~-~s>x)>!5>cUYʓgVUV̓xOBEhp䩱,*ӄ6@/Lovb9WGy4>8%yvDȠ>?9?xuxB}WU0ߏ88P>CY]8]f'ǷCQ5as>uh]"k~QyQ=?065&Npك#oOy{O:a+˷C(_ޕȒ<ѡG^x`mo(Pzv1ޢpX(_|w<}σy\_p4xmGk;L86GkqL# YsYJ',ɫ~>ky?kHYw,\MVН8(.Ofz}c3}`@A3}TA[qeE> leO7yisIۜ0v%kN7*?^`nX; YiƫpogGcB*JE-jos}qߗ72j4U?5ޗo6! ymׇn좃۟ax64Qfs{~vx{>`p0E3=S`]OZuqSh8O'<ЀgDӦr{ēZ G&5mrns~YۚǣY4^Ʃآ SKv=Wݞ ^zXc4l/X\_rm>ċZ:ߺCSp= Q^a'9VH|̴OC? M9>VM<_6x{Ⱥ|[Y?Uޜ?!v{1%#)\IY'ݚQ_bk=suPڳu<^A,8x4bvhBhOy^󳨽>NT#8h>~/r)Z/qJGr/ 1XyN_|!Jb2!uivd?.V~t\(>^7kw@ o>%goQ*n#+^ox?Oi7,9O6]Y&lwW<S}L˻uOI7 z\0ޖ/=g?LP 0C}?SJw~W߃uTk=st+yнxmgH\{{}Yk{loho*,˱}頢ezt}<#Kڙq L?қ$m+s|ʾx`֣j>IG ã=]:HW-ow=L/}Cڽ :5ߗF{;.Χ=]/w FdzGCǴcYx:W3s:늺Y~8jEG{oU? 9P3C_`yN:Hgp4\PZ,2]t-b"ݢ fz$1=^N݄8_&3Y߼?-'L<\ju^YğX(u^tS#׫cxn@O6b=0YC#]y>ӽWNnӎJXmPzz,3^]v\f:j{C{+fLJtՎp X~or}!ϿP ȯ+xCE J:frezVeI\O0 $^/~\X~Ҫ D ad OBRO_ϯg<}_ J/7~_x]n_oW^Su b;zwWשȞrdЃ]Y1/)ѽ2Z}i)oU 2)xps$3 xr9)/le:^Oo?|y~c=67nr7WǷvY(7X^S>l?f<Ϙx;0 ś!@E][oOzg7{+p!qK`NK@>Hi{g4j<{۟?F{=ow/"ϡS Eu׏K Vn_?2G˾O7z)}ex~)#@Hgl{}J~ ʿ}zbn@2 &KQi-&R:S?Zxt?dC?Q27Y @Ps ?Jo9,s 7$H@9Byk ]_߻4?/l$>׿0 &0Û@CP35+0>I6QHO;op2b+}z⡐nׄ^r^Q޷y|?.%fnLlMye(4qe:bo&ywF(_ fz _&l/#C!{V#=/H|WoflV黫pIֱm5$etdž/17fj>k` w2~2}Z # b鸝/PlIPи+RTMP8NJ7z^韛WzgFOW9kuC D{b17kb s,(4c?#p[!<~#]ytEzz (A}?N_H1.7L>Mx<\_bF`b`fAy͇oh3{:%m4+Wz ʯǠz.鿦 ҿ;}(L_n&i8䓮t&/pvߤ*;m#}ӋńțTӣ o1ħHL=^uc{$0MI=ӇL|O~ORCQjy^ftEwb_IO|*]/5a!fx}oSV:8.w'锛3"oS.(LdKvi]e)h>tEx3=2۳+o_Ѵ_/˝MG"/ݟoHfUOC'b\rB?NXFO{5]0'σ]pMa|CO:Fޟ8ux2=o}1=)';]6ۄڛ}Ӄr>mIStJMCt1(ptZCY%?91WAt T)Qy~jvtNA,~x7*MQ=MHٙC\(LI}'e"M9D N}? =:*'4H~¸!0/KBሙ׌Ga?u鶝Nq09>V{y P:EnRӈn2V:ȇG<&?=1!!$ !6ۯ:%51^34?l=.lb+ϸD׿oL_y6^]²O"uo:ަ1]OEg  <7?~e/8:bt ?G'/FW?Xno5Ensgkh5L#f+D{ga:\' nboag_vD8"&CԆUoLߨxZx|;^|?_關rHϛ}o?k~x`T|vC+g~f<1gNa3c3waR؟pc$4߅acn<_a[e= px|?5k|!}<7r/ȣo)N.Ҙ~M*ZA)5߇QoD.MƄ>Ie)yDHd3$a'#4_R mU?tɟK=+ W8=f/XUdR(ebp^I?o2WG!$b!<NLx~aNq h(oq nr0^C~k'۞hڎBE w~n~Gr+n܀GɖwoO^V%Cg.z q<ᇽ s4L*EA"dZp xft5N-oY^`J^3\E͂}an]ü*NE[rfYx 7j$tE2Mr8~$ays;(*|gY_oka3fByHm-CzHTD0y G3 s fϝ#* 4sjF3pmʜ{\ZaV 5eM Ϛjm@>O!le3K0N[s fHmiG)FrlSed!Yj.`Φ- j|J 5t.;EwlJ=f#S< &0Ey$$g#dw%=`"d 6?4[y mH[sKXm ȓ-ZaӖV'߲+w/ͼ57~G pS,w\n 5d G3KJ\ ϶%ǂtfrG(҃K1M24%9ƹd0ϥW[G`&[Ur!EME#|\JiL # Z>wXDfV-w?j,cJA i/迲RyÈ0ჵJ>_7Bza ,«;)m,Yb Ģ#t.mbhIpfuSrPË)m¥|4j vLqz^0Jo̧=$p,.|c+x,M"">=˷ʊߺm6LL%֖+ϋqwR7#CcG. `Ǟcc%FEY#llR3/u.?}p¹/+>7 $s XmY:`SiE:cB: NNVl1x 3ęq7oFywt| uJ&p`u*[a O͕f:z'IIxStǶnL *c_2UM;Rq323ݼ\Q,hLqf#dH2m z_:md5( 8ݶt8?_C:];zning6RN㤛*usƋiQ{))^)_xLjEyh`J߿w>) R#IIܙ$ȥ[)䞳SWdU~sYOf jEUH]t3rC?οvn懻'1 x⹹z9HS)*@uiAn` ;i!㟢6.]9, ِg'!tf?Oܴ*%7>4x+T39s*QmX1z+&w5ÅT [MFUa8?6YtnlmL(q^Y1eAu7$@!A|%{BT7(冲ixaj'dLy8o?NyzKի][n>|"8Psuo f20_ %D/-6j̧Y31}˫x[Ue)jnD9Tz&H$zp>8q>DЊOT)72GǾ"Ezr.N7cM8 0saCza  :|6%CZB|¾=grײnXzw{`V2~<*x>^o l.y,/j-&Mq}}Xcm rc}8F*ɝ47abm>eM1#>WFmOWݞ=}87iE6u}XX'*bȇ`EUADu-fA ܊/O-;kW**iQyeLpcP]fĒ5&-\8cm#} 1rkTwO9*pp^6܁V'MtĹܻ*%Ĝ)ܝ*VppsaAG×70K=(;Ԁn!- 큇c:Bn0q6G؋&N3SZ[Xƨtv'r;Ԟ)^|@}U!kB'?CVes)ٿ!7')9> 74:G8\8qΑ|c2_>;( ߗlEg=f{n ľ/?ؾ>q|P9#˝ ,Q`5HHL;+ |EFrbX'RNݘdaLd&A~kZdLJǦ=9^M8q+\=9sW)gCu;.+DvtxQ~)WDMy jL\Cѯ*q;JԔT\O\%PQ 05 yo;Tґ 5` mKtX '"%tu{U5n ,e*FI'6/բ\vշ ߈ML ֔ƀ;EiZ;ӾgE 7Fɰaj)`D_A{U[Pg|}R*nP;$ImM^=hj֮^%NM$ [Bc ں/X-Y ^[#(L!d=~b_HLFñS\hw=+Ï%q[<#zg-oET{oG{$FX.Wv'<¨Bȃfl:An {yU&i*m~V|)L& I|?_G MtH/i_|X->6_䠸e ?p㷽Bc?6({U'瑽R,ETDu5Py* ;M}idݯ;mtⷚ4.oTTލk3<нa (ӑn@B[Tep{'>A9t"Cϔ+߆~uƕ$_4t,iH?=ӹH 0,/ :['|kV>{&$NeϿ }'KJo-ʄq)#R;(_@=/[JK%zÖ\Ma)P#s:ZbחK^[ƄiŮDla3zhVx]9~?u좃gy;Hpy@phYUG5sv PٱEv@ -mC}:ӌu,*w0} _>یxeg%`ct3_zu8k|D]~Y ҉Jy<ЍsTY -@ gM [\*qJLUq{,* +z4>1u|/`A'2nR27 9n_q# ihaY Sqy4-16 dΚ_8Xqc}s GA76&i)32*Fۮ]獡+ 80 _Rݣ /xZpY`6&PFZsxݷPn<5}9{g—Q3ٞuX eW?l EsbW ߀ͻ>(T|xFpkt`~y+]++q%>6~= Q< QwҜV*qK}P,ۧ|ӑxp5o]⼡i*^6q6x>4+y;`CL4uhL[LSֲijC(%6u KjCСQOY MT^J7Z8)c2$+]_~=ל85k_ى5xq,]nC!,'.E8{5O:p%V}]|u10snx$E8Aݍv,ŭ s}i$r [Co#C_`8:LwX>B8V.ʲicm?5}'?`~`OϜ? qi%/9]%hHrB:llT~dH*/׾ߗ^ú18S9?|^bҗ1q|e74s6cܞogJEaQ,78CS_}1\F`g e?|ԥOs1J<ċZW.)_+/Ny[qezFGxQ\6نhqrw WwI~X~h=<[ZW3ݧ;}x?Ǘ{/\-M:5t\K&ɓ˒8{fG ayߪnn'&piKVWG4ˉiwUXQN@`|'?,Ϧ|<5?y|N]|y;*1^]x od|ram>дjyU:juk+" Yؾȟp \ss~8?V|H' U^)oƨ<6Y,)hZ>R_>/x8JMiǨ`|O?>6OY^[_o]'OFʛ]J )W:U3FuWԿ ǵyx/>#|Վ [^g'oOrɷtQvs ,)ң4FxM۞vMXOyzL9SnDzw+vqcuZ4tUŁ jT+k[0wu[ _U j Ӣ[$IDj1\\P@ iD!i㮼!^(ˁԠA›5/+wiCԘUB'q !gVќ@UސfqD0Re0,n/%*z'N iB̎1=MbZ^lmsx5 DL)g6HմWqL-4< f%)Ƙ#Y?-t7?Z8&zeSR1s'𻴷dABqdEn*h*R(| r7p8x3BL ^.9ՙ0vaRu( ƫ*S(ܔZELa(vTvnҞPoTϼʉBޥWNߖ$VQ0k| j"6<:'.9c^~~Ä5 7g[P1Џ4aHL7A0I=*9UF$'A \ӿ0|PYH?PQIj"k P "o:e,\g Qi䨘N`dQCa^AC&: PNy;'iܨN~=@uF)ǥ 0_/ͥ<'; f8A$}ŧh&1hạƗòC{6b&Oڢzb4#* _HYDҏeJAپn<Ծ* By"^q1{/SH1Tw "x)/B"'}x(#p)+<'3X_x"< 5F!oCzMD%{ ``Ĵ:1,N>WHOʤK-Cxw{)gjՈk6$>"܂Jy \ ܅1~rPn)PMBbT Bx,BG>U;S %h<bRx64M:Kwq+Q+sg sY!9Qwᡯ2-OBn1"cCH=]Ė;T~N5`76MēYٚdfRϟF\΅rLcot`J?S@^nw'uc^P8?ēa.}3]5%9Mż\dNOLO4(0xy?[DjEWyf6 M@kNz$ :79Y7~WN?xa5 嘂=6iFi.>Z߳eWuT#٥ 㔦LS M+w?r$n3hOF1J>Y{}[#&.4vqәk! ֺ3$?s kC-Ek̠1.c?@?E `\. ep:o@|ٷA2oM:xhSUwǠryx,C45E-K?L=4AԃNE}f~0s*t3oܞ9Oe9Su?IFJVp߆. ^Ex}g-߮$n.9O)7 9W8ʃv ˘lFz8Wai}?[t@'|t07)TIf' C8g091̱0:90wi[p0Ƕ+qؾ X/8]3ƹw&;bER묱$ya)CJLxlI[&S% uOȁ{`y9krpOe]Cֲi9nrP0S(g2JLJj.P9@ݪ7 >W||l Kk̓r,c`f;~>Nit_ϘX% kL>lJNm 'gt °SJɁ7O{7,J}J lpa(v:n)6ՙON`m̪^e@(4B.]?eklu@+.MՀaֳ>p( p1;Jg?R U|yNY8qRf;Vc87dz0'=g}粯WlZ64`8xJ ^ɍ.ߓ!Lm sC&wcGׂ0>F(Y[?H8 1=/:kkdg^tǃG6ʡ~b:*== Y]~ۃ(q[㍖[eѹ|t׉qO~cL;7N7${_^ ĩ=:yj~#YWfJeoB箋`Sp̴G eGE~} 9K6"6<ymPb_ZZX3Ԉ4WMp/ IYݞ~(QKs(j<&O}|5ٍ7<,5D8k(i0wFjv6r*{?ȜoI^ڂTZ|^޿g8Vk'Ӓe&VrJ][sʨ9ڿ<>~lʹ`Cd& gF/ibwjS#x[X4&܈sLW_?l $X܉_pڜë";016~7ϺÎ=2:EZs3z$$8`^h}J8kӽ&Ky?[4F܌E)wby:W,1o|2%؂_@"OYsRxٔxw_M d4Gg8pg8??-2qC^u4 vP{_ Ĕʉ9SY~X?ςyQQǰ - Ηܻ'| PdgN<\d`HVc$ί0z\KxǙuHr~9 ->\*5@{q@T'n~FT'nZ}KM:^]oshV3&|\ނ>rP+ \ ĭ.Ὁ/Vi r)|~_l;A-e?e6=#'%JSBbwN\%,w5_6$#0x=2O{|q<2[!gU2IƃcRqt|"#TGȤ.\*r9fsfud{{\ٿ&LޚX# RjFY}P, ϝb}2/b}[ xM_p?֮hqq{sS c^׹J\$:,k"hx?_u%WbbO#4e̕h{?cIU9M]~j\M~3=8:1ͻVĹw{fU[*y\3 Z"|=5^P@"VjIoŗ+lIuSl{\Vu#&[KFmꍺkԾw[0'zkfm-?M>nK/f{U^8YCeNTj"ۃeYno6|_+l :}Ƌ_kro~tdK\v>kCN3}~P39~ #yoחߧZ7͍=-^Ӊש#XVtD$WX>e)8661Qϭ@jAᒘ IJoAaX6ښ~AUmCߨISQ|SE9׮}xҵDXvejjyS8d[֡n۝qBY|ưʏ%q$wΗi;w:V1{<Uyў3<y^w5=Z(q\n/)_n(<̓1/dz?'G\qWܾ\oxد3O,157*hpTq_gh{~yxd2HL |nϠO]E7a #:CwywL >x{ضGjwG> O>&}iwRzGBB. L<8_tο\,О[s$Y?,r~1·s9%j&>fri=Z}d֛"KyVDwER~5Y k?$D{~7N)<ޡu(FyYiܔ op@]\]z;]n(|'yJJ_|OSyy++<ݯzJO r@=ۻ+χ'jGF'ƍ~;ΩJ /3q1q_#ϣߧ:nQ/\yܘ_yΧ4>/TY?J=\j4pw}q|[nO߿r.?ac@1_ۢO;3KD4*tN()\ϗ>/{8S>_UXW碼ǫ~W)to5W~|zٯz=)_l>?o!^ߢ<~΋3}XWCv/7I$q|y FY*+UX>$,aIaǗI3^Z ^Rؿp&wp'#_ ߞZ'!jQCYE}6:pkd#O{N4z\|Hą)rM-sۿ=/.W@4'+t#M|C{lg{Y}I7Ns<^`x}J(2퍒ʽ?R?]dzןXX?{OEn˾[.w~}zozoJ/uw%~Ekϓrd,󞟼_?S)Uo|3l_}ob{>/x}-o<8gQsK/by~>܏c#]y/ Q|i0 '~1br2.G^k(cq_s׌=W?dƘ}!?7ˏ*key:OhzO'^*#[g{p#Uձ)cF3 W'_u,e,a;(޷q|8ޫY~_+8۳aQQɔ; 7Js"?g=].GC2Wery&ތzxƋ}T$e}ͿGH\+T2 S[?BƤm{^09꾬0G#v /.gRWi<7 j~Lot1i5%߶+:sFx14J~iC8.f!H~\F19o/mɈUBjDؙcT#/u DT=ǞH.T2|V8pe2TڟdG^e{byVi~_OFWhL:ͻ䪝,Ɖ5^:\g2e[@C2[xw Ϻ;h˕z>T:/x]&`w0Ȅߍ,PdXv7YԍS1|#!|]凩gnCFj oV0UKClQQb=+u_''O_sJ^$_~Ҟdht%{]ƹ bX`q< &[p>W9:C$_uq UJ1dr39 zRnϳLw19b3cvWtG+R+Ss)#0Tƅ8y6BuP2ӻ1uPΣxLvjc(Y <m?0/5X߾뭳}?B;3٬4PNƵm<Ĩ]^?GE^+g|&A/攃Vpg*pye*c>dêOk쿫T_/]_<ɆQS4?/v5_[MGqrqoyg2MGd_ēL ;f.L\L;ӑ =g-b>[RX_BGD;Sc6p= v,JFܾ`u1˷|_nNY?yn{;9=q%.ܿdof*&:df20.J3>>? y[[JU7?&X'L؟d/uޑ:y;LJEp*.7h!s$,P},ũsEB' 3t`xVL=TQsd֍ 'Ygt_nJ8叄쯸8$[&.d"[cj2P UU? 3GV1.dƒk7P>UpȰ7(3 YNgO䏆&0(멸֛\ʖ'E㫑.H?jΞ C^=0v!v[acTˉ93WII A*=*i"9qv;r<]/j?|6g]ܘKXMr[q-Sj˹6<_Ġ3Y`p:y 7O*gaj=0܁Px>C39t굅>`j>ݨ6[V_ߝW~2^u`zlsm_!lf>Re?R Ysy}­8aN 89]rrz?*. 8xuHO%pqj?@qOs}|4$?U'Ic1¡M+~!01۾?<:O|Z߼~r5ojE`λ;> v}F2;w?(^f7m #THJ*W!<_Rj\ԣ|~+0\KI}?Vg/T"m|_JW,x(jvyWt,YS%_zy&\q_7yq$]TG~SN˟;oXԾKZ!/śU'o=0gxOzGQ$ػJOKVũ<+SVjtu8Ǔ?;_yMW|KNE\k {dC u̩!{b3fX}"㛺yW&V}?UFyyy\ݿ[>x,+g*7{O'H\_g{Ӑ}>ޗ?C\iϫ?NJ=HUofW%_Mbaf?`~u-8>'~`Rwwlt{Id^G_U [_ YƏ@`?}$߻fa͐ł 텋I{O78/t'F(@|ݳTz?8鑟zJs9`Owa3oھKA}006~۫7C385GE3!aNŽ_.R_ofE֬Ƕ:{/C+ 3pGZn}M\?=,Ki΃:\L񿩼CԀ/࿞^1wk-%ҨFF浝"-Û̔@eǜo5  x$9xNHTKq/؀&w)Dq5ː4S*cqppd:8|'*k704s^o| nWPR #[,Ŷ-pk`K\.8;} o&<×^z$^,ҟM-:KUVolhf|2`!W" :z>ݒ=>[+|xSv11q '-HyOZ(Jm^f^ux>sɈY}+'6]l$ԿO\M2n9?Z5g(3qSD]~Ԉi,mWY7G= u˿GYσ riqbbpiDm?Ğ-Q~Ù|?~"&aO7pؚ\ޱ˗[Ƕ3'XXaIOӜ )H*_ꗼ{}W~ogSe|Wg,w؂ݿ |SKpRΞVޒԟ3< xfWL}f~ <8ؐY-c_f0}?2Y8{Vs_-/(׻O4G{ʲ$\1\ÖEx񻽟kyӗa¥Wsm~<|sXX4gpá\A N$^?|JCbͻ z2gb>]SySx^)SufH;E~p&l(pÈ|y0ݯ2zw[|y? \ȟs=}Yɫ8p7Y/w Vš=h}bR-|Nlp2/W<|Ä੿_xtWIz>ګ߉qj6uy? ʾ$lї7q/nO}_ mϗ9}MW'ݟ}黿sߚG+ɺSqܻ=.}˙_˭$>Q!z^9?_>Nz"K C|1r'-__>wqO{w0cVS]Y?Y!j/ ÙwWs{b~Q/G_R!;<0wUb:0vkje8Xԟ.]͒6Cg}`j 1cFՀ8( c%L..ݥF7:`z,sU0S L|99xl3.xK jEP5gX[Χ+yR㭨q hJ_t|+^z`w@ÂCVȈ)tvq`l+vc6@" 1WԾ qsZavPWZE5X/;9VP[V_BĊZl?0Da'ƎJ1W_|90l) my.tVYq># /浂')ޜξz)]ruafT)9_5Gă"JTrǦ*]7S B+L쳲G!.lo[@^F+$w:(0q&KNArSO֏ 5@5#-4P1+I…=jp-bB5-=5̉l1<J\!c)]|)מT5\00Ybkr4;HDaSx1HN9TEx7fGѼ:h iœr\>?cPݞ{7ekx/w(hbӘX;E7ɳPCoN`̬X "qTiQu}!O t*uff~1*P3#9Vcp:, {fdqbKGNly-|58>H2OCw3*}p}y~'Mx{3BhA^[mHI60i6~oٻdN^X*dBfݬdҞ&ë,:x?74XO$<9ԑLߑEtvtO\>)oܞMo>ip'|O^Q{vD+K'<"hۑh٠;tyn?0[Ыf1i`Hl"=;Qk\Y9wÊ؝Jj-X;ے v(jN Zij`L#)~zu? ̍8Et6unl!Ri71Gtc^Z'. Z=k~85\\1Y4bE8_|+>iH(xΚǑV5," 0_z'S;03,2}r]H_\o}󖦲wYzإ3mΝliF}&WJWa6Vm;hZ܆ҏ_Gv,lIs5HNN$IJ;?eM.ޖ.WE,ڮ_집$2qȄtZ)7n?j2- w?ҭ YxB߯rITG;oੱ_,Q5{]ho{g}_a_&KA*SJ*y{i✉ޖ*A'e81g,}EB=\{,,ϐjϝR+2;rrBj~'Vt}ۏTB~IYgy|&)!;R֌4-~L us&gi3iLIr]V#UEN|v*-I<^Dž״a5 s0z4WMss_v1>8^a J҃G֭:)u3iPj8~> Lx~>tpoLz߂NiA$ >j|V_~_;g(ܰ@{mg_NH\dR*]>]|p\m`ζ[̸_sYɋC=wfgϚB~|k}Wa+`[Q{Ѩ8ңnjV2k_]Č9I if<*ZkyZϷZǤ++t"LqR :h0qWfxF{Wcg W߰μ1YjV1XkgF~^7\+2%Ы"xy -)k\ 8|1 4quk kWP6NY 9i\Os:yͩ~GypN}7\DmKծAs:/y/9oβUۀobU]8ͷG)_ObƦ'{Vst/cu)9C1k~` !yk?8VxOPchD$3O"H;+kK_~@#ɬׯR~X_o{HۮW'[U8_˿=[|;_ࣥj|=e)XSKƘsphŲ6fg"92S?j*j֖ 8՘sMw\T#G>c֤'%)fO(I[v ѫ5d,{Qszś=@9 g[]yڇZݾq{vpH˧} =h`癓2=O3k5Ss{5oyqgdV ϥ" aEr==aS z,GtIºL&oM{^tQ yp^O.9"\Xm9VWnn2#mw|>_˕b2gpwA{2cv}t?ë,opuOgn$Lhր,㝱[emd Y!VsqGWr1xH<3b|އ{gS=_/庎:7_lj#O:O3jKG]ϙ?2=33q=~O84-{Oq2?N.8\>htx>!Oƙ1[>A/6ܿ^Mq+\q[޹'#S /VX'V4!.ΖM|D $%Vv𕺚-`M?KYHɭZJ3IR=} 1?$c֠8,OPׯCڔ%Y?L6V!Ko!aXJP-u/V?mԧ^)w~v$>U{xcW{l,QUD;3L= B5PU9Zq{|Y{kcjr4O`}!/pSROE#[$&O2ZsYfD–e${¦{/ &lBMJ[{F>Q6|7?,f={lwī[M;(?36G-'P3>|3,2ǃ܈;,;Qfǃ-z>x)BMU0pt#I/UDq9"da7E:p׍(wJ}5{ F1#3Qlo(B3@ߗ7?2,Ļ5cB96GSbŶY ((y6 'we<%vp xQaa_,}?~/;7+Xgzd:cߔxxoQOQp'Qθ k>~X`XQb}`!|fYXǢp𠿪XȰ %?RŦxH&[XfLX8-BҴ\$9Zt[tS3"(~{B˶]?u>eB]Ri!'[B)lT+>$-ׯ"u\ O:t$.Kuotg_ZĤ]{#YY}&[.= ӕt|dgT1m]dKj➹7W\uݭYwIHkϖPA ժzB3H,yv~4e涑rD5OU(F8KGb) QU(lf(w'e\FSQvE'^]?vŸg@n5J}5m}ԲI_AeYN&Vfyk^y_e99Y/$v9[3Y15ځ5=Wߌ,27amMiܫoΓ{+kGkf:΂M֭[c5= |Rk,}+dqtk=ڭybDx~cqZՍу͠.>*%t 6Gn4&XghfdMhn1iKy1,[Z?ߍnp | u0Ks߁ԍЏԮ G'gr|?jD;+{5ڻ]-ʋ.0Fu9Xdz`?DH+bPt6H O MpP5LZjD9MP!pDt9l<8Ajsv \l`P5UMǩ)"fCo(\2^ j`?gvO0#ě*y/A8ƔS܏x6Oyxrfg柄Tu_'*.f?a:0IDPiseSZ^9 +0:OI*Q8 !&" '][G4>d5:ФRבP)_;p zP&:lWPYO'.'Ѫ9ɝ{ V+cDVe;frV` T0GbeO>W~PV 0|Vw%If.Lrӎ˝Ld7tpFI}{O i%W'p%\s.դ]\ ;!]rM(ے ?}p(0 *!W[%Hڂ>B\ړ/fe[iwx Rjx/@ @p]8ŀ. *H+ (9/ttW@;(!P¬a%iOڶ~r҈8\#[qă{~TG)e?_Ұ{~թ\.__ꌏӦCb'wQxKuiWA~+hf Z x䠭):;*0e>Z Rh^`Y.F Lp<*2 [R{]AY8}Ftjin 0XѢaba$/S?K;rXbf B%↎)l&>U j< 5:fqlƉp-kk!1se9|Pvp; Ey{tOK64TJ9>(׬VqnvesQwnZS{TYfISlZ2"\\AӺE8/N*n[A >Yno]>;>̐2#Mq9XFb sV=?gpO%IlӉ. Eqw:w?!GJhDeeKk>EBJ7';a$vי>:~ wݛvC:zor 5nek:ad~^Fvv|&#! 7$DQhm6ķZx+e!eRv/%E&;k9Lϴ?kChd4>0DPUґ(oڧ=/5kvŨymyz}\}aߗs ɑrjjshwvCjFOi؏oh<R?ȹ k6ovnS_r,7fwC&-7a3}HzC*!SCmؙTm2Mb?|l7ΒUx._zn!bkbȊop]ƃ5a<㝟k>Q[<_RӒ~)jwɫwWΏNkniHc o$Gd~?1o9 9=dKry8;{+W,3Ÿaslc"= WMrr>|o,я be"DvjXC.܈23+qצuq6]}y 4xy}ύ6 -X7D7m3( iY=?7kSCuΊ N>~ߧt ~cd>Og2&S4 %<57@8ŵyٺY3o|FUހd(SYq?R].ѐDߗlHh@eՂY6F_."Wa6JupGc8IuO}6xq 'Oi#9Tq*H0DyeV;U}?Ix ˪<;\Siq0Y'\;ܳˊ 6?`V}zaq2>HypyIU6=U}OF~@*ЮgVsJ'V{EZ][<g[}ˊQ0u8`AxHGH3?g>r>oCV"o|(k}_>0!83_Fysލbm:NpCtM]moqۯ>7F0C~6E}z|5~khWxkX8}Z#}w֟?ޗ1($ow?r}c~cwpw05gy_u}U|&~_|~^|T}lX'BZFq.ޗܟrurJ|~Zq|Յu(\-69W'Qevg''>`|~_n˓ɸws¿+n7,Ҟ|.r3[~|1/Bgы* o| 8>[_t(yG%{?rCvUa;K2oWD=GJܧ,OT vgnt~Y۽O')xDŽ5{~ss~Vk_刚%#\+ݸIu,%Η eЕת8S- kz/<^8WRL F}ȓT ,?U&ܐ;$Ϲ=[L~zʾBOS!8/}7HGAXf ^9.<+]o'^|a}޿t?)tSMWR_yTAP};H ^HHCi[ANXF~c ݠ.yAFIXA;]$E># wcjGtL)ԓ W߫#\G>9t9K@Kf@9+DZ\9сd堪Rn}`5Ҝ4t!a&].y>fQK3G lBRL=Ge4}Q}?T%϶/"#u/]K=t-{ ZjW!XǾQ&<ܾꐬ|鞰WvG>od|^Ec:ϗK$ OEף0a뒱\dM$ړ?ϯ/0_2r dU.\>~0!?J7=R݈C9oIP}Jݙ駲hUγGtNJWEq" T33X/GA0wʥ3?gL=T$'xF537|Ω3iH:H#6ٝw\(060r(8ugsӶ ec. $!@%r;N41tAiyTŵ6vׅnאv~əqw~*}-wL%?}2k9V3)/0Y.{M" pZXK˔M{.8דtR[1VQ7ۗ;NgśNʗE$'՝7KҰ1nV T⼰Ezy㬀K >Eg%Q:5Ul_ɿڙ\Zݕ}ƅ "qÏY$ n%E1?]7szlSSQ{K=Dafv萰0g[-k>~H6o\I+Wzɭ+2~gn||\$^nǀŽҮ>Sׯm)9d|~*x, Mhu zxmZo}h`(`U>!9N ]: /CBݯ1"Gs'ڸڀb钲\B]\KU]WE*v+e2Jᥔ[Zr}tn̙ݐzCSŨK2I49]B=ߕ'TJlB_h3jn,61*[S\ARZe}Y.I2X-;"ESU$PZA`/Ŗo#j.mKP)=\Wi83 {hsrn[eڞ{MȻ-&vơds٬5U*^QLF76!ӹHEu&m(}!@s117 kLZ6O9S5wF(իdjzjUȓ 2 8߲4п|EVIƔ-ݖ|Q͔u΢tJV99H2&al/{f׶;ՙ(&-$uFp+o; gly-{rV i@SيHgi- 7pсuVE·yȦW5lpEܕt:wOl_읐h/Jmͫb6$akxnyLlX7W[rm/l(eڢ"S&qVd!Ru +Ep6o?nq,D-!~EB#ni )?% 5 MҴnc7fpD-i+9KBk:٣c}Enɓݯ-hRJ5 v ^`~`n/:-Z{2.ehzm{^\k8y8Sjs}[zG!ѴVp8[R( āӪ*O\rOے8$AK2Apȍ> ȍ/ ve\=oI(*ݔN}_oG%ϰ,OfH0kYA3Fe+Rbp7##zcK b,+n-+ )E9Je<4|HD,W֖UtO[;W)oֆ(S:D_u6/Nu{rql:ըL0e>s$ #HB9Њ2"a4؁&ov o+ݶO_)$Hدv YD 2Ó6KMŎ i6Ŗr𮁋u z!|4>k<w+"ThSQ_{r 3c3sS\}!Lfx~̨@ !3u`C:G8"ֹ?{ryv+'G]Mw[Tq9~,9҃#RّlU\G}d?DZ|7  |۱"Auफ़J6vSB74$؎9P>}?< }s8ooˬKpۛUΕ v[&&(lS?C/;X؟'vt^|(@ʷS.⍈xlb69(M2@RX&v )`emv0nDLl"814*[&ic?:čgDqF1O}qh93iFE~pC3a&.&Z =q"rXw6"fǂ &[G[[nt:e%|*Nt<)2ط! Sol7S}>Xaxbz"]U~ &|7*2C\aQmO/Z9)>_<~LvL"% D\CV)SgkC=X222i'1lN)}c|ɖ9?d~m![\UvggC#\xhAZ7!E[[p}&*FǟWy"yޝf(5(:_EQvuzrfI8=e<_*?Kr>j el*%uA;9ؠmr^eĭYnpb^J rI֍5LAupwRl9urKӠFwc9$8sbC6;1'6釜m~/q#]`{"]O|8N!I@}s0#wT`ߨ:$tc b?I@:9Ч*'iHrHmE}ahG5VnTmU,!q/KmC|)[ѷإf,D}fHO{q)Kmj;슒:ݲeI0YQg׌tJZƛ]QZoYB.-^F)hJOv!3{|/=1`_ "fW`o/{>qe:W O^wKY޳Q4[/4ا~!?R HN5xs|=қaFmk r0<+wҡMN.n.bK*38w/>>![ )W ֐ړ_os?Un 4['N6_|CBv%}XZϟ6g3ۏ-'M哾/9J6~7 𔚦I~eLϸySNϷ8u~!6WߒV#CzοiwG xw^k&~yboH?s.ϸ-54|q~SM:5~g(&+[%EA-t0ΤkVx旝CAÞڃ2}vB/v[{`}>yCE \|9?{}a|y|3SM6N>7}rj4|_rsS[5:B[)W\6_?>dSO8wSxϫ?X*ӏ3QS%62qS|my|Пrtڣ6?oۊJQzbj~2Az7=j*p+1ee8s_WVMD s5w.?{Mڸ{(ZCJ:4ߟjelS>KQ,s~}׸!zj oh̴'>wupf=߃s^yek%/? "+llB+h$K 8'154#d>`Ŋ@";Xhy='C$衫!Y$خ:ɴ]YgFJroC+T3Y`" GoXFS>N, e74a[򍌘&M1޴/Nmnr=8曂`i|a W|ܤ1Y?qb=$xܠY` $ci14<٥CP tGpWCި{~E"'2,o?&k}Hq1{N5=ʥXjb/??U}q™%cI,8aU`! ܤ+RαP|D>\:zYW>'O:ny~t1-׳Ԓ[|-I-;7WyC{lj7~W%8^Ƽf^z R  Yu*Eaָ`w[S0pd[ })p)W}m2LT?pgLg,3,uv-vP j@NhQ%|4I+[&iI*2֟uJQb]D Y-0>-ux-xX_+S,Œ{)pMLc'q>i3gؓ>YkX\޵epoh,tmҮe2ڈuh[{um+֭n8EYۿCcr*vm*6ݑVE6` TRep3' Ʋߏ[N_m0Oaһ꽛Įw<{n[+L^ ]_(_xqȧ68qn^dVwݷlTog'̊mϜƾ̃e˫."'Ne_#s:cVhS.x i#!m`zK|e_ ē?zo=m\ӧ6}ne7I0UŘt1ļcv-=ySdy=٫rkJVHaR< tOY?2SxKM9f/Nģ>țl\HVpk7*;Sh1pEq^%l{ewXWskYŧ1vU)N{ ?r=TnoIOD=5ذli;ʚ_P?BZez6Ǜ\ڲ7]'d,A 77~"-\%x$yO(ϯ~N[aفdW |nOWl0gV\$ Tdw?׾ wnÞmx#V4$iT?v ? ٗD<|γ%4"%߫`DHw.dK!iVnK-~!,ًލ(%GpywϮtR~I`I1u9ܥɵrΏ2-;ݘgw>y}s>qҽSu'^/[u1 ooqDxL:I˒g\DyIhh40?[A~y䩂~y3N쐈>vIKmGVѩ nE_Oz7ϯ|+p&//ŠtpnM?no \Ve:xxD殷kM$r$fM_O&rh\L$έO}o~bz/ήODX%UDx b)|)h+4n+y~cpT m%/="HȰ#ړ}^a.eD$S|YD~}|f􃋾:D`׊?_Njd»Ze DC}w*IϛYW< ~W[`-A,ődj"q;=iOz<8lo+,=?3FT4Bq_džQ`\Xdhϐ|Z0]~:`н!O@{pvyLgvgk•;,毬/,~xXW}r|}t*z]} AOzXf )?, Z_~Tsw_>| XJz3X;[|)뎗Xc5ؿUf>g}n:<^<U$VG|8qpǣot{l柩_f}C 8񭜗WX>_) U?};t~v!e)AQ'e[Wz__>ĩQ?p"_mp<&CIۭOa//"RrW?)[E}"ӿIKK'2'ȉS 3~| 3rY$&˒E'yd!Wy_?Lngݿgs)Y蘿,f?Ex;{M'/}Wjk_8qgfan?%?_?~>myNy?imBo%յ_`?x"?__Rhi K.bKy˓<\-Kh= ]Od|-Or?nEEuxvHI0؂v_dA½>Y{so'y/?E8W_ +}ƿv[cʶ$k:ɗuIdS~Cbo);wߵwmѡ_Oz:S-<">mM/FC{yW Ԡ^k lbW ^N~lS=<)~<_lN?/։>l!3V}!]_d9:ib=ʇ?#'σ괂PmKԥ5lMH \{lh!O|ThC1kr 3(pvq.`yƔN-^<>| _/ SyN7{qWƈ9:}? 5gR҈1gr vrPMfm(oI&N Y@p<؛? ޑeQ 30H塑9Xpr0y94@Yk{;0 945Kbj:E |ޖC"I pDtBfe{PE pcd grU3:1MՌ8Ilv딝%֯3ˆkة.)M;lx-gJf !/*t?>P>$L;%B$aJDQ;^ѿ>W}g1Ho|KaFdU/ױ-Y+-<Dy@@JXC9^d!wfƼmٽc>0tVP;߫|恱棰PU ~;ϿgeE};cAx47<6+|^oTd *ѭr+Zb6vd*:a \se+dr0 ʽo9 eγz(h@z|\OH\?fGj`T~ϕ)]G|`5w{OK\?l: {l霩X'j1o_}ҡ/j_TDC7|qIs W7T-~CtE W+*jtu k=NI\ֽ"b{BY (qz=b/<A^bQiK8$yS6w.JB1u\eq>TOX_܁ʇ '|}g&$s'&<3y?O\_PUXdaiMK C۾~>/Xdcob_dWEp '@v`4Z{`D*1CEخhk~n8O_w~cV7׫ʑޗߜU wʁ]Q݁oJZnqړlqn6?Yu%.+/p&-&  cPs L_¸^~K,8qp,uְ.~]+}0קj/g8&GXbփb |;y WO^_?_j}>1aw2 o8O$6Bopp ^ѝr ~e7 ^k^ebcC6z26`ɧ|469"# ߯W8qcWnO|vlmC}`S}{=ܕ<[~_֏Wv1nf>eA9+b\"~,axHH鎔PߋG/L ڃ^/Ll#*^gyo}_%#<]v4r/֙{t?߃Vr^g4?c3ڀs`Cy \_Nb79wE[6-a`oyV.89G>\uHﳑmH/fi'o|E%054V/8gSM)M_&SدsFf+N{1CLwRHsX@MC(x{=G8if\a h1b=n؉ӽ6Ӂ~2T Oq 6~d8v/fp. 2Nq0c1Yܹkqdw$ SճҪtE/tE^b.m w@Cl'ʎI3؃7(_V|;G Mz)/~c)pG`=t75znKF/Hs+^^ޗ}`@_ui.8)֔ٗ3\~R|kϛ].oط<Ǻr.d75Xj<.ymo|npF3LroU hOgs/OЪOi3+s.^xZ۬ɚN6-Uaaey}FOJoxbbSOC2lu*˳&yN:ξ;a[^oԑU5>0ӈ73Xb qe] sPj3wCeY!-vwNO0>Zy;_|>Bd@G$1Hv/b}awa}3t"gooY~5{vkԈ5k]LJmI5PO:2p/IԨ\}x˒i71kX:8͏;Px2zϏ7b*os)''$H6;.Cx#F8]amB~M4۹d L+q.MDUfh K rovQXg]:(d5kҫ:K| 뉩8@{(  L{PVnތ8) 怛pI,]c2>N- RSO[g[>s+ݻ~Qm[e򋺟AA›:Q!BY4ԝö}R:?pDg3o*O wpO.{t힐 ,~{vi̞qettӞqOH2e|'u8hG˞],1e{tv`eYǼRrNK=rhV;߼7Ywu~SqLmri fd )~+a{mԘ߰~3;8א `\F9=g9\5x݌P=W`-0W]A}01{ʦB[oqΙL}U~ɵLWpe6OAU?󝫱J9B?ENc1`W`JL|LǺ=1Ye { >Vɏ%ա䊪('-^xz8lE] ٷ<qJ_];g{ L,鹲jGtq)T#{ܽ,e߶#P/,^ eb͸p<׋}̧3+T8rk5dzEYq{  H \/,b|:/z13Ⱥ05BߜOzLrRh)I17m[lV`^9:G9*kz9/yjX3/WT=N[$<y<*^ߧ~f[:mZ_w-+l{Iۗ^^<,U ݆~s>u͗8<%Wp*ww5VpU>?䄟~>P)#롒 +1_?601G`Zb0{o3g`/Nb `WbIǓԨxF7X_/vE |\Fsb c ň"OA0G#1+FOOŨrQ1Nۤ+N㊘#ȢM@匙=I+#miBfmͻ0I8oasuI,#Y3yAmB`W&b`dB2^m7* -؍9uy "6sJLve˜4X"YHLOme!2R 0†JKc9uv$vef0F环G!;39%*߶~`:^Œ)ۊSk] c`_06yJia]՘#PokK.M봓#4!~. :y1mi s1X_ơInszܧpN)%&M@Ea`%gI5P#* *8#ȩؗd`W"bWc1562{'~4ɨ'8pX,'en:Ecob@~ӛ;\AaSɞ}/G5|)8WM$Vc prsDsKt`#_oY':KZ/2jtQBú!L/Q<鄪HF!ň9 x <sc"7R=(\{A~Ҏ4εΓn-wO7'ǘ#&}wH{F B:-9x措Hh嬇#-l,֣5` ")FU`%IzJ1Ge}m ᐕQ[)/Lt_ {t~4Fb`>x:$>q;@"rs+},c&De3>I0y2}RؾKJb͂!,^JN Yy|0 o锂6&j`O}}?]:۱.Ķ^b1\AƧC 3,؈m%a-ZkY/kJw Gئ!NH5⹘*qW'[D4)4_…0GŹoZƣx%:^e :h& a't^JDžׅ>0+1eEON8' J¡ o7\ :BF,i߂|!eIl2޶hG%ւ!=-٫GīCI@:b*Zh G-R s%Ca<Į&O1uOJ +B|^XnS*NK.Fݠml TWTi'!qlj>?b1uL*Gl} 5d@Dž~j& J篴~K}<)0e5Nٰ֍Y3v壿a;x6BT2)?2Eo9qpw-A/2rkMtcyMe.<)6D x Ȋw@}>bލm[l-/}CVlNw95 0G O7驩lz]Gq0Dh u+ s&C.ssӴANxDG] ƒEd5KQ/8NXN{ gyĉ-:# }J(]Src =MgLdf J1x Fߌghʘ aLg~jc8.H`dzaY䮷?s=*փ"6-4‰SZOĭӒk${–q1k 9 !:?Jڋg\z#OO)y}^o˸g# E2ݹ]3(vV9Nee/kSn` cTx6àa!g2 V1GPC+2;zy(8`mWF2iY=h]#P_ƷXĄ(9 =Yl9=h7JN-!UQ~s_uhRmvH40eftv~n`{\c"[0$:6nԯ[<`¨2+H ZA3ZGPZ3~-`MctRYgw21(k3sW#2p&WH)pL&b8L\t&ޞuőH5h-CޥT+bp% nLdJm߅y wžb'`C$0r/MηH^xT9Im{gL_UЫ"D`zB7̌|Dl=pE.p&vv@s۽PJ]pyD[[rl: 6 jIA%ߜ6ںy|Eה.!/k; [;M}ı9c= 6'n]i<3Mr&p[&L &!&Sf-(aI)_K:Z%rG57sMD S2井 v uXzZHJ^DK(Q߅q,HicvƿlRiGϺ~F<-W&ALa๴dWrLnRkKSMZ&@7))@xJQ<Ŕ-#K<suJ[g#1G0!]h cawA롒- ʽR/< 0ͺ02e^Xw:yr:xIFJ,Tֳ3-pMnDS>Oú\?);0I\]AI8/8\C }EK]}?|Y>a*t9_e fYd]( I-C n4)Ƴٛ(!Nfdm\Kt \^m)>Ld#Ƃ.{1Pߓbol` 8a@W38iBVGrҲPGr1Sm6weJnfo6ylW#*9b(El P8eBs]KpӂƒoDR}e;e+Nza$1iIlA݁FЭ!8ƔsLZb3j3=_jTc%U+8 [\ Ea._Kt#61|@4kjdC":lBLTq6| $H,En䭇Utu„X3zt#g]G6 mxr3c}.Ef4|BROۥx3J͘(?Ƶ_zS+cb=\.M¥i^rEvLCE-ƳgZc"w6+CMCa,HUhgKEƻD*ؕ\JbES'5c,|dCԳ'\`,WӨY)J zAO|\}W΂41G,fpJԢe#kuNXEesph߈v8&zg(ƮX {˨AZPy^F 2Jә=#FDzo]8Jʟ0%超9>ݟx0 6JXtck3X4蒷AGRHlyY_+ Q$_%0G\,"Ư0fRhп1hbړ.-t mTx9i `sj$ |T͊"1G8r GtZD#zyA@^ĂIy5,E _SJitFc*|tE2ٗmiNoGM-k/8##|Jium4cX$qxf&@+P0αl9s0N0)¡K< Gu,QYdoam)z&p2"hҗI/.E[R6I^Czz cDmXBLK,p +#.#4HrP3,gldrįVU/ bJ&=)LJvLU%jZ~KJdt2ޤNwP&OQB=3)SٜB_2V.$%_4cr 4/>)b,3iDʎEjt촞.v3e;[.A.ǀI4e*FfǮU-_Eu%JF VnvJ ]"t˲+Oy:3 S/D2ĺlc4bM_.bxVs7c9d/فlc '~UNb֬kẋ,ЪVթzVfviRaBK,ԮQt%]Xz3j\qZĊvNbc Q'tOG+eI})`i= W6+24;d'9W2-T}/J4עYp;w$t{`W[׸rOj{˰ܷC [L{GC]dNoWս"h6O)zu>:d_g3P"d:v۸+;鈭B-Nkt>-rqe9Caɞ7ͧ]c=wtJf­>6ˡgANZoVݧpb}s3.q;W}"d}UF>Yy\ [jRs͞>fteK\X*K>^ TWN:#tz;%;|s;| 3݃XbFpCx[A )on$bs櫗ɥˉbw5󺍊Ǫ2hR^՞F[m;~^ Ͷ-ʒrC@! TƜV9CDSMl]-ѣlOau_/3ke#lw;9jf y8 9Jǿ =[UG"؂$mFmi2Z28۩-ʨίŗF"n$ƫᨗ$RjWPK+7 yK6+P;$Ub#->O]=t^j!Je$PP,/jc꒥6.&v[gNτnFmH"!^?Ϗ݆ș&Mar>q/K|y섦 >V> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 319 0 obj << /Length 2416 /Filter /FlateDecode >> stream xZoFBR@rCM4Iip(`(Y"Ҳ7].r@.wvvX:̂wg/ξy3`f׳0 |Y2g٥\y0|E:_¯l࿯hcNoyުKgIBz*B@Ĝ-VE Q|/+R{z~ .;hDQhSpn @8f=}`ZtOan) &KcF(ov/K-PڀA%ET,76IkſZf 0#3%p~/9SŤ|kUb#g)vM93 Vw) d]@)xHq6.U7&E”\V)Eh_8޷F) ~rqd V+hDo+1eZ9 I3ʸ2.`onXA0m%.U,Cv{B (y0 4Ւ;\_p(z YhO6mh.;> r⤈k(WNrkَi``c "L`{ԡ N;aS9jrp|WGTdxf%AJ:|=j9zEw*ɗ]!mnN&5|gbxj/[2kH#(2Ѫ=T2 hr>jDO{kG]^yro8vrN$!jsC[Ǜ_7<9`b=o ͂|Qeq :VC1YL ҇;ǵ|dFU:=ωϫ=I$쥳 ?#YwgswS^%eB.@ 8tgn}0 eʆL/HLWmA1)~NlyBH")р_Q{tSe=t9nEħCA7ϡNx/:-k¡iGVyJǑ0' x#n:_MoPz|'Lɶz.UOVXv-/תTJ±|9!eTNf|5|'QfH?L C?KY.ZDAklQN*6=ʥJW.5$#V pYM[k`$uvw\(B p 6a,,ϔė?l: ]s/;N U8nen.7Gtj>#~+I?Ml@'DGX*Q $Gq( "i&^Nҥ)}-z+9] Ge`< l˘fXvgU=e.fB.3M3bBd2 KA<X .gN*y0ɶ=t|ϨTv{Q7{g:n1\Ҵ5̱ȍ6Br>/yݘ Z)m&1[^ً[aRm9u0=0Pn`\xQ!-ᘭ~Cx0x/DO~X=(~M0#^q$z5Q[r'>N3?9 5`W{%z+D0BzH:P.b0_D;E\q>k`Fh#7ϗgA endstream endobj 325 0 obj << /Length 1766 /Filter /FlateDecode >> stream xڕXێ6}Wy Qlh lnHy( Zۍe9֯\%JV\r8s¡Co/W&Ldaf南o,,N{;b240qLh7G7'[hI:r:ȿAO&Ȧߟ3I`1O=;A^QM>OE&NH/f1M=YYz)]4S3@AŞa9pooRؿyKvP1{1(W?b26W5oJM@'<[3}{4T FmXcG~i`?LgIĢ$~w'ÊT-Q.㚏.-\.?hI`hڠZ`$yB\yWYAZއR_CG,|Sb-}j:vYg&sI0S]ҩ;,c͌AdSŠ3f;Vl$ xZAG +%r+yc$]|È4̐m.oC1LCasHS.6¡O^r,fZ!JpvgOn&pVժ HG nIQ6 ]APEL)DFg=aӷ8jY%~AdUd+'vuN'pw(DDRqpU#*{AEEA*7355E}P(J=\{Urd!1C2 4'u\kyVA4BI*\ UdQ=ɍS;7V*z<)+lhi𡷦@Z"^Ш(OK8ep k'Π@ Y 3d({ڶ0܋ecÕ蟡 _awaגi9 TZphJeCGQ;9r$6dEʩ}NX\(H8Kr򠊡9Pq2tNv)E.ASxR> /ExtGState << >>/ColorSpace << /sRGB 331 0 R >>>> /Length 114923 /Filter /FlateDecode >> stream x56}*2 n@C#4=kc] #e}d`0ԟ/o?g_?_#~?|?V~R~?]??[~oǯ57u:31ٿq_?ms3ќu}/YiCO{k;O{?gtpDϿ/5_Ļ[Pg~}~\ŵ ;~;?mQg/zF=ڨijF3FOYQG_u/9cн_/uU"Yۿg/_Q>̴~fC ׾aX=O{q_3>m_gv=t.js5|s/o㜰vUxįƝ^WYqQǯ]_ο8h-8n !q?o0ܐ>{t_w/=ϐ FQ${\)U~S?_?zHş|1adkm%:*o45Fru*q|$ >?ğX8&/`H?~zNSoxAB>7p OG|X}?DØ^o{ƛ_>|sG#6xs-cNU*Ұ{%&XsN>x kmӄ?UF80g*8|A;^G{R<'x<&gWyx<Ĥ|?Ʈ/x;=3]X?#>l?_;0/?i?cs Φ[d*.JOoz(i\79☗q͉7Nr(oL^RS0p{α/Gܪ!q^{rfv%Fk&un01ghy(eڅ#]x&O~̿^Wh69 xwⶍ7 wΆ 1i,<#^|˜C+\’hYh*` V⾅+n-µyp>>xT|?`P'kCƙ6g=|RjՁ7?n/~r<1tK~bs<>)|}/r_Ktn$Wfz 0*z!xVFl>ԉSBx(-|p \bpr;g]+n4t^0ΒM5I/@}]pNl{G4{*ϲL]b(ߟ_\t+o]xg3f7Nq%1%\F0KdNER{?pX)}~|>1g//Z_hP:&$MU"<*.yr~|>"q6h0訇7pLj1gxDy0MJ ܌B'W!>֠?hILb}kبH_mZ5p0&M4x#ə4&)-D{?>0~?rKr?'WaPx|qs\cI< ' =W4T2u ցOIݎ8k+qM8W W`ߗGo L_ tʴCxI)$TFԨYKg1_5o%4śnMEu@E&wK/{+"MR7EqmL.{q[HIs:G&-O$XsN! $^7]5>IddH51=Bj$CqXI >r9-5o{.'#Rմ<98ۿsX1g$֏0(o~ Mˇ4|Y/ kWv:-QWXz I'=é"R,b7mg4+NcխqHgM]XnI]7aon՜K@)_,[u S%kC~G~0uzSZolp }!'su#M1@֞Ƴ>\$ 9o|/8{IF n}fy7|Rt (]э&ߨ7 w㓴άIcqEn,C7񊂭k!I{|d j$PcP,(NV|2NjʨxY0}zRW7ӎGWz O4o<}xxr߇5qԍv[ u 5yԌuݙ$2YXB:!\I_*|NS'/zOoޗ)Y߼% Cޔ5:ۡt"]e;gs+n Sx\+/'ߒjץag?e։}>"| O'''/"LU?y'1iz% O2~z.T.ct;Ҏzi۞A"{Amhn驠vRL_> lrj w~O{F@)\-[WrOD}gRLk),+s'ok_zIXg6"ylgkF|tpb}QŗPwmkw?rfn0?3ؖ2ƒpM|}"֊9+ߴw&éS }G5 |yHA|O7W*IlNo 71xnV9 7X\χ$`G{ NǚpÅOH1q? -6$5PpL},Ӛ#KG?{Ldbiq|GVc)"fR.q~ǑxA5iz~n=CJ^IGX0USp$n' gf><ZVun c)e&4HR5˛n p~k};߿>_qM,zOg(ܦ 8<&ZHJL~MX~pn!p/ x nUОzw[p/W zHOJj:n gd@߄=&1e򉨁ĭCAoݘP! `4<|;7>qGI;&0qPǶ|>wp|Kz{ھuxL|mAy"ĘO߉>2H=q|$# 5ܘ |1?|A_}G  {>| D1#/_}ǠwԨ }oJqz0OT6pěxq~'8_ߛ;uG7gGA~w<:ABm O/ò^7J(k?#oǫ<O}pE0bn{~#,9Dux}&oX k4=^O Ll%ۚ鯭|M=S7~i|q|}p%=|h O Ō0? ѿs%&EuIAćxx309CR'_tbK Kђ_iA|ot~)o±6`[:s= Hտo NQ|45 |4*b"v{ xR5{r|$J<*]3󹲿eUUOM'ZZ) p7^-||5/~YS@Jk# _L/e'")?_ަW=~%w#~pKey!=7f{{zߴp-nKu:g~yzXW{V@ί|3k'x5hz^n?ڒ?Y{߷uCͱɉ_>\%1;g8S Kel~; #g8?=3ݞeob'Oy/ǣ@9*E Gpww>L}t>ap>K4Ga=&wP~*K0 ٌ98Xnχ>rT߀SEH׫oizy? 5{Gƞ7}Aa~/ļf\;Uo&`+==7? t'=WXpRJS7ǣAw UyK>Wz<ק31%݉uEDJ*z_+ 7dN%G&.cWs}C7Sx7a,Ouzwq?m1Ica'?i S& '+,}<=߱^2Ѿ_zx-/{b>R^ y@^G}3z(KH=\Q../'$=p6ϰ| #oY&n\ {ֲr. Lx3ꇟWg,1ڟa7Sst5QB};P7? a79w۝qT]~y]m\~_TΡZQs*a]"֋3Vk}ڊZNa+apUD_deGWOKVp4v1:j盭 gڊ_z|߶+oyp>K0&)գg9ZN߱9.jQo(OV`pVbF2?#Fsˎ6wX_P^:b+\c/i{~[e,T|QH^WRn:{ii {u)N+OAHykr?.{x׶Glye0 1ްWj[`Se/F^xOIr?Nvwcuv88$.퍙۱$/n{I^:/U±7sL{]VMgP`>v[ffKOgvw˛t{6 { z+^N8p=򢮾MX`5|׋x&d/oG [&7{W偳Weؕ-C^7ߜ_o5P ;陪cy w^>{a8ېgl;PvR~6rlyfvgmhgW"75{._2+ʖby*`/чW#R6|5ң2fk>fS2G+[N>4>tX}0n1?d~u )^Ct~+A}"U‡M~uBkQ)zš_ƽpq&/ͥ]ƒ8m7#=BެVvkvXǦpc[+ }5p:VE1CbnjE>U=yZʖi߿ؿ (k `u6?0N#~zs]x7 E/#Bw8-Sȸcs^As\?=7h}xqf5\'^ ,bܨX_ۧkxZuZ{* b!n|kztGZ{6L=ިO.҇aX3Oe~1:jz^Џu;+|_x?+y*_=]:sd{LI~;Mw6R010[qVjAy!7+Pp6g~kp$_S5҆1La,yIpv!|TMϼ?i o4l =Q̫\I ܹƭmRg"YM;^.DI~ZA{iQcTSE!oȟlɭ^Ǽ6M}_?r=l\ZU)ryt'<]CʆӃHQsV}?[fCp-l~~k=VWU_eu%Z޸>gdߺJi>yǗ/_̏]evx}pO'/{waGL_>u92LR.ڙ\\}+tb}^(ГSv~җ)ūbIUuDŸϗ*yTaUUjyVޟ;7ˋj|{Ozx+:&-߆U[/M9-d>mއ=W)EG|,c{,nͻ}ªLaW+<Ga^4}٣H{p> 8z~ak^gYN_yٟ FUmzbQ_|Qm mq9yN^=GKxSp{vkڼ8%:n/?;+]}aR?Y6R.l#eq^Mﺩ*WK!{UxS^b){J{q^nw<<*L"%WԼ[~A`=0;3;o7z=moݿ؟_ӟx(KwoO__y=T͡y_v `Q8~MOQWΧ}Wc|__?B?@󠩚ϲg7o r5n_!~ Ep?4Cwzph+П-sڃwNQ{,[^ Q]}hB_ǓO|^}+T1~|K ]y44|>?9|_|8wQ^j˃a},@;_ߺCr6M+f],?,I\|ke=us2Qϳs1ă=\| }z?'oo'Sm^4 H_&WzzkX~ԗy | W0lwG-MNg͉@GīkNg}cXcK}lR>i w&35!ĝN(z~w_aNH?=H[Ī Up[^=0鸞'tOyoK"my\MK\gt.ӛkWw5y_wKycUo=ƻު~U~wGV<6Vw}IK㙧SfS8bU??_pO~Xsnoy_U2z˻[Ӱ-ꖯ߻T|W5;hW.}eMK 냷1֝Oއlܧ=sM|\8b}̲ݸϗ4 ?kSOԯW7җ߬C{ku-V{/WXUn5uߺڤ/;xwu5y߻ڿ[u-8s5ć[㩓QyyR۪v筮x7)l?lw>d({YN+EbJ*='ܲ^'oz>x)W>6{︽Ӟr_{_vڏTn~:#O(0_ƛ*~>>忨 5ySշB4A wo->Lo\y^d:z!C=׼i܏{~v݋#Ͽ#{QjTp^8>b ¿=_n3ߘ^LwqS5-ꮷ.P9҇w_CϨ3_>m^c㏧?8)m K_sA.Pvkʿ[eo<$ؿpm[MCwp?}`cVu[GnQ M}Q >[(~ŽnQwfjJG}W\,;Yョ!{"]=Mph|yY/Uڨ 7bsEnUo+k%?ʱ7u^ wlѫK~ً5pm|I</yEe/ayxmWGy=&UG& #g= ׿W<e_5wނs׋VFflf}t' Uު̚rDH|+UGRdvcnvO(¿4_1ɺ!ޠ=urK=XXy=&ߧwRlƳz:7?z:~tGX^(7 ]\K}? }sCߛf#폽+}8Aԟׄˇ?tZ̘k3R:XSkGUG/}&=R#5H\K_*zQh7}j^~>0a1d%kz}H/0 AoC,2}VW*Xi] /B 5Vu{EmMxZ~_d%?pH\~ضgnFug7.Ǒnl,t.V_5۩Oߚ?맩?¹?vyaN\OHTSf`'Xc7k,\tSW{jOֱ/C~1Edj]c|3s>w!)|_W?*OU:ֶs]>2<?x>.0f\?^{mhg^쏇{9/qq>gwWoۿ&zLV '6O;OW?o`x&O~=9vv_#?YZ= mndFey=+Wgulߤnpֲ?σ{0o=vO5d绋Nfs& M۫ߌ: ?!<:}??wf(63;,7q7 `>VbW8x"lLd/n_ȀޟP ~}sxng 돘pGst{OVqט,?7U1݃[7e>+~ +X\Eⰼ`e.OLW̐$Y1?1q7?D'_C藞ɯ;8/*#\?nBNy-|ߜi~ɪ-2[QEl??&*\7l$OUdS~xa:h۬ֆﳔڰ>f -֬/ޚk< '}[Q}'Σ_@-op`*Qg7Տ.VՉ}1gV5W~&T 'PjUB paqhzć7n~cVŖ$Cs}'p/~|%u*;Y ;ڻ?SNOx7/V4!pSC` acw-WπkC,P<]|aķ񎧛$?w7U-GG'&yrWc[UIv>!ϪZN~ŏq}|_ЃvU5`FںΪg?>ֿ|1*Ƞ'U=7O8XU>; k>H|`U[E1Yx>:o>ϋ:zZz//!jWUd{7ViXUKHڀьQE^X/U9~TVf ۧ\>C#ҧVJGjʊ⟪XؼB~{^Q _crwբ>OKoї߇xW(_ab{LJԟ&yYA~_Q}4o@H/Kp$KE3c?_XY>[gyZ|\M?CY,o>^?gͱhϨ濔=5dz^|~{g<#-">OXU}sȟ[QX3fߛG폽~ fnowُ~ƫ?2=|ewc;jn}}{O1?OoؘٟiZ<>6vh_2}wiTz o>_m"pRXqb ML}۲>Q:"'_CϿ.t*w(F&&^5]uL*Sk>ۃ.}ŌO/p/g~4\^V;|&2pF)l`{1?E7ޝa+zꏽ '7 (ϑ~X ks}Gp|A{=Mvq|i=ۙl|{ Qbp>iOc/Wߟz7}O`ͷ{q`& a|o8o.t}<`6M0|_>gq|Lvga~37-;vޟWߌ-}`>!;pfĠwx^;=~oAfhԤPn{`}廥|Px^8~EiJJ;?isErWQ_g~2zKf2^Jyև >m?4)0q(l~aEد ~<~ٗφ}~qxYlݞOɞߕ;eǶv#r3/EW~/~/WmN,{w1? ?/_zsZWNƁ.~e~=`7_g}Y5Չ7_N]DCx_~i?ӛ3]-=?ä~ȿzTFtYE{G 'O$~~y ոWM<ߺyc}[~^/NW|GEz z/駔S?Vɯ;[K:{|ߋN}IZk?_m 7[+b}};Gi~&h ܅S7/a]][:o m_y_A}P!&(E<}d|ҟ~XwB&h'>z~6?pWpZox]Z㎟=SOHsϻjmھ̰~'{>uɺJ#ߏG_Q,ԏTZoCѦ=w>g Ƿ2pis<ǼwC# o%;/>pWɟ6%Cx׏A/|YU%>ng[o'W) cGwZ~ߍ)wO{XdpO^]ӕ ClW<mPBž\_}>?-?i}ؕ0Q~><6o{림x=R>}y##=H~Zo^(NqxGy7?2oa̯C}M1]zX.xx=쯣fy~ܬo߼7GJLWocIfygCx}wޒWm{4`0a܁?S>Mڟ )o7ˣF4Xo|dr Gv_M_V~,`PTw {=_9|d}ɡ~5/Kܽ^_1(jJbzG{kwG|-$[H9̏Ҝo˓ GY۽znPx1χ>/8qKag}tv?{oAcz2w{~W?џ\6RWxe|g?|Ul`|S0g'ϩo*Uzw#?ٝ>懨~`{}6so3QXe~qǟj}9}-qG\ZhդF!|w{7u{Ldzx߻ĪWx}~JM~POk~qHgď(+Nz]/қ~ FzS kzB`K ;1^OBk?X? }1UO%5~n$%/䏒WFj~4q~PE!~Z(}dJsOeD,D2>?/=g>!C<웉oO/qdd*{Nx; %߿ +~Ǜzh+7 R4P3ޣt(r=K|W>`>O`GO辞/;cH=X4GK1Eg>R,u*w{c{9}6?e|+p~ewxfy39{>o{9G&rcx}oMxAKzaY9p~N,^bҀ>,=gDz!"J}:pq4'벿ـJ,eGX1cy=ʼn,Ϲ"^27K\Oe~g#&?1.R1sևlp\x?:v/4I˜t(>qߋόxO:$n?Ml2ӭsaacr{o֐ip_>p{Yٔ>1C9ɘo5šxH0Gt" [E붓^{,AJA~^d exH?s?Lv;sՔt;Be}9LJp&\z:v i>n;5֘3#slm\:AS2dhsjpfKXo|5B5)tCYּd2_dMN/9OMU5Hb Q'mi,9T$3l*Gx_xjaYO%#zQx竹fsa͝.0~f/1U cݮ2Yv}gjFa hH p׬ Jd!eZ;2RC\p+@jf0HYz մk2g]xn_U3;Vjaִy\/kk!~朌5o AOkb<-X9K[kFG؂5n [_k|k6TN)$[c;%I:k"J ք%p#4㾱f]U55c3רhfX x{wjƚbp@^紣3CbH4އϓ`gجQjֳ6ӄkήY#WgF=kUcxy?ọc?5ϐLm3sz?w}_5/&ק5m3~Ι)眭b(A䱸5G5H`\͚ kJ+f A:ۋf;ϣ̖Z|K'̉ 9>Hl5loafb~Y{0ߚj`Wg+ q\b}zj95܆qʫUS ƚj̹A_I_7Kc|cJjW+kR>߮iR7kb g*;гsat026nl]kf>6k0@o?w[> GT]GYY6Jo2ց,Ļoƺt"~ZS9"!ysqʘrȥ`!N5ZLgé_jRߢ%F<>gp>=SPM~۹_?QWx-[㚒I?QJqA_<=v>߹SY<_55~{՜OI*7 .aZ&0l1Y0)Kjbg6<^|zs>V0X'6*"zOaK ћYӲfߗ|Kzp?珱~(#{L?r?VbǠG;볼X<|`z`}t y4ޟ7טU8㯞Oޏ|=ϚQ>Ag/3);C׵~r&{nj.MԷq~'OqWQ1k:$>zB3L}[^M)Bx}HM6ě/}X=؝=hNQ~k _A*-_%~1n/P͟˾r-N?lw:_ۤ|K=ËK}Mȉϓ>SqMr5y!&5&5fS:hq~5e{fyi(kBL)z05fjD7WY7Wk)vWtq|ho7"f!%, #9B/`6~o0(iPC*]A 2go,6NJT -tUwY!E@6̃6~׌ 0tך~Cpy5 qNuV ( K<wB=]yɳJ~soCە6<\ r֣px J5ppR<#q`bU JrS TeM)녡PDDbZMX~\!NaGw})4+OHJ=S$Ep[ԅՔh`+5zUz٪$2y- O)ZCz+ҢjY[UVrW=n#z-#qgMJm+gUdGը3HJ*]LERQ}*OJqԪJ͕s / GR w<]lP{yYx՛@ʶg5}cwc_Ċ)DA Jz_Q?y"=eemi(1}Z!c5]WEj,v-ir"JJ?wg=B=ezfb+?؍n(7^.& \ϙ 8Zi|ߒ~ R^Nl{`|'Jj҃P'>hD/tF}(Asf>An !P]')sD_ uK(wQط^wa./G @!ZOh}CuO_S3G{n{`TPbf^5=C(_3 ؍?ḱJTx,*B( 93r _XO3|lS+Cũ'L, {No3 \n3S?3UeA2Sլ SLxpfe~T9_( 3Ǟ}ܼ(oCyPJP5Q%e]=f+Ϸs8,f}ffι'f1_|dx3/YWffe=:s ~2߷͙pe]Lȃt% x TAKq%EM+fr;kw\$3(zH&uUjfD:4P1?M&zPx?WhARFyr|@q$gՕiݨAJo4/#0k\i 8y?eMfd=/VTxMP^okYOyFݴ̜Ƀ8μ~~2PC~/ZVF\؃/G`F@5g ]B2Gey='T5ͨeQ1ڊ'dh5>y(; ]R4y52Kf~0nreLw~˻>Dc>t?ggD|8_(? 8z=^B W[XϗY9@*TT'>&P@=6?*n/"ax> ?Nք+ *[OWyb /W2}^kfi|r=,f&}J?]w;\u"M 'WlŌ}\\os^/bp_zx={f|d]^Ovž,JΟ/c?أŕm7(2?&M|r~=3^f ߠij2oUZ!w7畍VRaa}z(\d1kFN&Eɇ7]\O3*=vZ'ߛo3+|qeM<8~ߩ2OK&s7~^tٟc<_U !dTi'*JB3yY^8ۋ;ba?/f~>؏~W|>Te`?Ke\Wˏyr-}M s]LTFS<~]b-`"f~Lzw0;Wd?1_^~3;o2G2SI _u['c{P:{`bS_R疟C<}}M̟xۏϻS_ɩ^W2=wĚ_ft73Wؿ-w79ל~J'3y0޷$?&ɳ{ tiAJx|{F9}StC/g"+>`lyo4 'DMɓpNOKJt=*3{- u凵/*nf|}tTZJf~^GPvoZnj?[AG~$ïiʏoǕGu7xO%˜/߯V6zk8c^:_LWwE۾ 6}7?m}ޛ1*f{}ThWەw?Bޒﶯ_#SR웝Y~l}IiO=Rg(o̟q|0G]}ygy!ܹTӃ<@2d鏙xɶOmO/DdeF{wuW3';(<(߶+!Kn !}x%ܟC+~Nۉ_vdɱg+ˀ8$^Οh|+ i|9Sy7?WCactGy68O_ pNcYe=>;?Oѿ {lg3Gsc?>_mYjyT#c} Toʟ95ދ8 Lec{'t*U!OL_:W~)M'\ybWo=%9_>&=TX%CJ?X<+?lOp x*~G<ѨnWou>~vxVuP.{gʷ2uߠߵ~LごϷhvJ77+#QY:>1^c~ςeHUqG$V 2#O[ao?xq6w~x"w,?|>-gKǧGU{\Q=gW/{ֿ7?Kr>{.'ԓGyپf~lߴ߶ί,cxywƹ> ߫)/'о^W=$vwktuxJa-oXc~H`/ꗟ{~ j^f*bm/nm,.V^_4~;dtƟ/{`U>i{}!fY|w'Og؛bD?>^߫翋;B~tU%|X0?ɯH{yŠ!Q_=,f;\U~Zb=O b :$h=4o^]5[T zSL,ڒAOn|FJI5⫑{53.Vxdzzbǂj|Tځ sػm;.5hJY3?kT}pr6O43|eA>6?19o(6pE D5Ke<$pksiv/o~ek~?|-}OXŷd{_kSVE|?~*3G42XͯPW|? rSĹk++G>6|W9o֋>fQzoƛUh^:z=R=R/UUqϭڞ-czQUrÔ ̽1?u5n_*UW0/ƃwS%A| A#Czߒ,@XW8h=6ʧ]*%Jny빃'O8'qds}?'8a<e=6'?]E z+NJ?>p?W`SyU5k<߻/3o@@8n+YU}||q ćd~U~T'U*._0 á*UN}ԥ1 CpV'}>X|O 󩈿qk56QUur^g~||Fz?oTƇ $>OiY|G{G?jJ ngp|h|+?_cƢ/*kʢ]%6FnY~]uka2tՄ/,w=/*6?iU|Z|zr*ߵK~j_|&p?g?`8h}d8e0:9Gq PS0ץpy2uFODGb\|ъ$u:9yn:[`uY4uaOƁ[OnhʍcF0._w8A̪Dp+ =. t<g( X0ꉑAB\`Bd`w!PO={;ڷ\tPg܉bHbꮣ8mk v WhY\b[^xE<_^/WT:l0B*ɪK OF~w]@1XAɪϯ0FH=a84dTo#WH:%aq]٬uӬ0JƄqgh?b^błX/aG^beC|zƪc}KD cA**ƢBS*1szV5`L%䣺C^W{׏E| dtY:oJ\P~]MGKר }}4<OzUڿV^/%{6 ~Q i{{f^ &ҧuuq=ds^Arry˾:Ł=_Ds]daLz=\3ߟ8 *7bEۢ}">ѩ*#3>lWaQlPn4[p WTk_=Y Q'QnvBy[ 1cn h(3>1b \BGlQ/bΒ-9@ {9J_yB4pxZ ZC1ĎpOu_x;g"3GОT~֔LdQ}g=2ߖ3)\l.4VڎjU+?~#z_գq~ a5"d4TabEyrCA{d)VaN}0 Db#.jCZc*SXK~1T~Y$է8>qW|Uz3nj\מ6;B>\6O̡Wp?lL{#՗҂&!&'kS=N;sv0`M:k(1%s]ǹgi2-3L${*u)뽴bكUק~⶗en!r@_f^tF=ȕq}j>a望u8wRo̻sW=gd3T/;/{m*T ɪl-2 훜]ɇH+'uJqi-ߟ~'w]$OdW~B.YɪLAI;ӄ$n܉tSZ~&f'w?7xǹr*1멏J [?8H(?ƚۓ~jYȘOd\$wUꖱ!g'~q|b{]F~=]d/Yl$?]c᤟a4$*gU?HvU ݉uy"a㹿76&eوUC*5N?_]|k88oJmHo+E2~Up[LͷuއC$zEl9gDZ9C~~"O_6:LU:OHNM٫Գܾ7;WoNjCg'L0ݿIB=YLO@6u _3Z*njJLw!r.جޯwsп~g*"/Hm!Vj i?}vor}e$<-MEPB\r?plcNle:gȾO 'ϱsaZ7w,=_v6YTsC&:ptUzzJY\S>UqjLDC^_Zz 'OQڒ_MGZ="MU2ŷM{Flo#g cOk",eˢ SV;ǗYLg-1gsQQ|8cY-*dW>YmoZ,I{x_ rךi߆*i>y"lY|:1'f{FSxi>~?ZTʌi5[Jm1ŷ)$4o6-ȾLr7~>5DyBס OX$!9h''O5ŀ=Qr**w>z N"tC5ezGL3kEjG yMM?ӉGsu^hoTbtw|#QzFNdzُtN#8Ͽ%kNw]"31t|Ot=3 ;JHd> ٿ Y*'?5gmsm, M^*j?',H DffhiaDǡϷ<:#AFt˧ߜ@IϡX|`C9W>#?2ha 1׍x #9V+l󍜼qh3!x|NC@|yC,S>ee?M0<,BXjD܍=]y[>.,Q9?&NM)]'*ևmDiTyHx?l"Gq^FL!YFin֯8oÈӲmLjUizYIMRl\FpU햛>_g٣Nɻ0eEFd,lD7Ո Uv z~~if#c?g{Pp:k6G?g󌸍b! 0mgG^'w73=D2s>6"_sJ<ϗͶoN^DwNr@Xn\=p~336㝲ö֭Cq}Fh4<] =NMy~~O8cfmFW,,8_yX/7Ax?<\_'2u\ۂTPC#d/qs=|qˌCn'In3CDz BTղj:M,J~?/g!;h?4o(6lt -`l>ga"O6ɇ5)iNO!eyO`CV=v̟=l_g cs\tfMmyx=stiC9\mC'=[qՊ._kVIѾ._6h,=gt{'ߣhO><tVY]37alr]ߺlqdiN4T9cfQ^~訚Q=wqxD zp\oԷ(:(:g:)E13l~_w{y<><&f?ds?ta=t>/Вx}5qZό]8hbh|h.jm%('he~+kO eh KC/A|.F az|X2>m4zX8: m}gߴ-kx~^_~k"$1eo}Zw7A+S,FA/ZM4eM>Yg|b~n!/}|]>pgvEϟ/gݞ}y.|&(Nw{ΐ :YܟS(|V{Ϩ{?n?w}2!8i:a(n|"-U./lAڋϰ.>O=j!hkN򳏊|WD?=\?"$xiF- ,1Wyqv7Kn[޿η2?C-{?\'hPؾBV6|>/n2O?* |]Q#Yfgs7f(Y߽kX >VaAfe+Kww]h}_SxM/\ /6O{O{ҋx ߩ3k&[SOmJ\oWVxU3ҢǶo7}k?MP*ce+m0+"dsa[nĚx)"\Z$/O}^XKfnj<;CK1g1n+[J+kp{O'I59'r-O,,-QR5ﺮH^mj ,/"FC)YVj܏՛UȔ##/۳g(iލNj^f?5vu"T"<^`N ^\%N$LuN%:$.J{o2_r./6`D""^;pMs-Rv>3Vؐ7SBۊ[1)WifO=ˋESpu苳m2T.vcL؝3й.Y-6ފK9VH +/Did؄;0Qj祚@ϽXV^KY^1W* UyN"ʋjʓcT i㋽3ך]Wn%w~Z5?_EU[W~NUB,_j'#3daYߏ=zl/QTHi}648Wձ^~o~Q__;}iϓ 迨va}x$rU=(0646*|~DG쳚/ ~Nxka'CC@>|52r+S?ɡ{oF.w<i`ݜK_-+WZh/u>e.^\]Uhy8ל.ڻnFdEeE}<y(okok{/.>/qBECjvT2]MQ3q% xco)scry:^bߚ]kM#yOrp>EBj?UiRBz:KVJY:_E>/"3ϯaw9[ qL#U[C^].M!I Wnmx>U|?+y=z!cW2w&m' dx`g =}}ק۷mg_}U?Z ̯>"4sKYq>yOVvOƉWoC/;._9SXq Nk5Pwe\t94[WwY׀Gֶ i}}a3.-Zq|ug/׭mx>\ +qUe閕/I(fah4:,d~o~?,kK`8*v$"Q&P{_}֮q/s/d US٠8[pYns0kK'J p"Kqv wɛ.Y׷ #+ 8d_}zxg!wO8sfzRFƓ$c r9U߰2@ &nf¼mDrEoKJ:E̼J׶wXWZ#:(+pTp P>XްtG,+Du@=oì,:./lPΐjxSjOMT)'O[kJ!ߐV é9R[-ם.uZ:oU>y3gsV*h\8\@VZfф yW6_HU\A Rarj{ ~JFJVrħ'_ה|XC~;>pb*Upcq4ҁ?Y0* dC7 _z}"Y8pR Ery! %LHZ-dF8Y-73q ,Ϟ'r\@\K<9u9{IL;1mVٗ-z>ξ,ikYʺd,\ٗb+>}Z_ q?kZUN=_XQMfg|2ge[a]ۘwxgֶ:A!}:1+?1p-y==dr&9 ?B^̡c8lϑw?pOwpuπ+Ot# 'PE_,,7(XWM/;3[=~|:e֣cRϟ)ȉ{>sߜm_eC؟Vwl'1eF~}+hiv4Ŏ1%4fs[THFVJ?˖()d&`+z~hN!ןRx𝼞5ʇe*LikF;ܿr.q^+*wl*2ݶү׷ljyb5[MU‘#GTϱPGI$;Ju;sv5{U*JPو,XHz^'nԆ5<ɦtP# v?;T=Ȧdc_kfLmdooml3irC|^z6Qǯ w_ǓSnXb:Te~ŭNi?3gm٩6Q{qÑ n|QSWz,R|_sJSh_0\6:5Wǩ;5uʷc4Kq{Ofw,cda'N߱9;qEN&1ү_;ֳP5€Tsh3OȩN7̀ƇZ\Z #dr!Z@XQ6wq>Y3/{D [@,\_]wPɪip5c|2<պ,ukUРrړU"Ѿn!j]߾U`v8]N$q Y G~}c 1&Fr5S͆XlG6ZX+nyYu G1;٬1:ǑUs\uq쐗 Xdӎ-5`CTtiXlOe;ȿ8юѴ8EV6\s(l93-CJOٸi/4eتٶdXړٶDiOf߯:~wޕٷ to 8>HGon^yVmە/H8ۗlmKv>_vpGgW؞Ka^TAn~Wָpe rnaaz[a#3Z)Z/+h68wU9%a~音|*~_z?d6vM #Osܤ?/'"]|ʘ7sҏfWl{N-v~"[q lBx2)~yG~];2Oۨvr R3댬o^uuy9~rxvo#6{ 'd?;OW;!7S%e4;+c#W^J{Uq}㗘2Kyw=yx\$;qaO9{y;yY٫9{k4PvЌ|d]uBB^ϋ+ڟ'x~Hnf+Wnۥ0[?jԡ;F+,r7 &lcЦ}ܞ,8huqg&1hcq1ζ4߄w~=>_.s-.ǂ]FiX_-_بE͍cg:D*Ixr1ufos%Omruϯ'u7BWA!oᕽhe>Fb+C@nc}Ǯ3 W=BV{K}YqW"z2|7BjO YF{'c<~M+F,k>6H+>pEɔج"oz&I,|?>_\e;kr.y{L '[шr>LC^E!.s}rGvk~3_>ĕOe_;m]e#>(WYO~J>iȫvy1~Ke+ēG>*n!Pzyz' ]*W|{>ʂ)= f>_{7-_Tzy;UP-TuEWB|6ܳ#f>yy}?i^XW'FOSwrdhG  qtb=vĩ5,ƓGN~-HSQ)D;׋*%GIG{gF,i|/tqDՓ##2#"bL Q!2!btZXiG b%#PɾvOaQ "escpBXAxJFTHVTUCU-NeH?@>nϷ1莺~8:FMwتɉ6=Aȭ**`]?w`8BqkN]rpyrO3ٳ[9@{/}{PUm ctyxĶ0:[N^21|l}ڃc?NKȜIJc iokDޣC}6*qOOOEjȓc>j믂zt+|8{9)mk8C̘O^`Sѡ6#!p*1ty3o<}8W81{Vg_&{kG&si={"O^#.9ǣևpFqb\ y'SGz*"xQ}YG/>{a*w~ڦk몲 wo>v<^W<{qFi|m2rܖoVb2&A6l+1 p<5s;+Vב<ſ nιuSL'c~0?ފQ%)?&OV%Z ` >#v43_&b*Ft3|FPH^FD NQJF< 8&_|rW}>X·jn~YܟW,-#HĒq/ɔnc&:]?QV L#ʖE_r͒!srA-EL>81AQ7WP{FU+%y]7 jHuZ)# ?q3#κئd>xeVe~hycW1i{WYzrn}""\^#vCna'+ti2%|rwUKWr".MrrweZG|R~6->o-DY~W}n x/HTޯwu>(럼'+O{lN{z&FlKϻ!Ct}ޛGT/b /~=[ z= mq/n9Aş}:_ {S %!F:Q8OeFοN'!~/,;#dc ꏼ g &\H'e#Vȱmh)B#rj* ? 1ls;wK$03_zy`>+l3 @(|+G QoKj|=f8S40~E-I!V_|! s)p>[ݟ~gzҾY?߯WrE~P̗3t# F;m}tܟ 끪9~%#Shqկ {T>yg4 ևwwG:OgĽϧfydF~&WBvAs|~όGQ3SGrf,4'<꭮D|F-Ψd]g 7 r蛯L;ڷ3L c}|ÿ>#73 G_#Rf5YIu_2yBϹammiVocgٟiJyy3 kKV~no~ekQueoTSKffāR;4uF^O^joGg,\x?į??x;}zm/u]lϓ}}|J|v_JLM__lއ}X4lɞv?}_oޮG=9^rY9i62H>0 {"S}K=T0oOWU{b> }{T%ްuiO 3oOf=7 ޯ{ WKWWL|<Ѿm,ϼ"q> Hq?xZW"cgaQaG!E%k6hr OΊu`H}Nؑhry^\wEGzXEYVJ@Zn1;a8kم⛂OTgȭUFtUQu _LmЃd!7#Ծ~?,,7UGmi,f{ ̓}o޷bw6?VͰzȲ.1_,xkk譴֌ 3֌Cft\XOΞ&i٦}Z_l=Ϛ9[ 6\UG.=X=ƨюэZvϜZ1sl[\>l]:6hV\Y-gLEo8hcM 0Sbo&3ed:d:^vXF;K\GB_%Z1aV|{o|_w_Z,x{\w#:+@ܱZFKbi 4CxV[ C@gLtYkxwvS-߷$QvXνux? ?7*&&']8:q!cE(6ƞ*'x= H{?[uZ+7w^ lrUG^]q-l߱QG o1s?m<|ȯq?s`1DD}:w;u8,? ܦq ar]^xXYt{Go3Λ;Ϗm`ypxwe< ڽYX=A 3~Q=-߸F/@ƶnGa Iu#% ]Z{P`xθ[@5;%- })ڿ2|o<.n)K-b}i%r>)OW|.ٱwnao)}J|Bw7}]_7I`v>y%. [ٚ>9jS 0MVZByzNC{ joZݟº'?}g>uwҾ}7D82nj =15bR2qwyN:h*2A\ ҼwqDAht}_uPַ6-Mbeotzւ) {‹k޷6մ"iƴ; X p&f)~YW;JK.H.Xk7ǫxjt33 R8{<[+ɞ~GⲴ XIR~KvRUtp8KrclB@e@%Fn|{4p]q4(KVzg/Y0klWe$LRʗW^|!K[${&܃%;0Xo :>',т $.c {A)6}1 ЩtӅ|qPk3B462{$=A}wYT*+Nc;$nk%@* d)dewC>4WpbFc[ ebO>1xX0QKG|8 OB/ĺ;sb0OLL~!pv<#VSȋ1e ylE[Џ0FP!:0Ǭ9dyd)%߫]8}vN\01sG%}HFeTA+5qzAxb 1]G>z1_FYox[p/1^D\CF[\C,+([rgNc-#%?VfSVqk%a|`a{_UP8d{#ɍ*.q8֯ U }@ZqCcG67*f>9׻tXV:G²*J^$ Ga{qe{G_@033L~ssi  mrbA<('f޼S]687asi"qaLD8X7@,63U/bTƣ덑V 4a?o"qbĤW&4)$չ$Z}$bH%LzFm]iSF5)uJ)IbԄ` P[9G~0vf[a7}d~M9喯c\y^DG!#lo!/9i`<&q?xAAƢ=^=f&O !}\94NW`^lw~"B1+0nٟCĥ)\b!𖏿tdcK}T!ťxOB- )p}6ri%zA܋xōW_ 31Ʌx Wz[#zsBL9yup~ܢ<14j'q M{Bx0p;Q^yyO<\Z1!Ae9g37'elN3p"IsZ]W87SB9VgHߣhLX"<,iӜ ~)D4׷~_տ\AĄī<jMpKgIyqp b~/mH8ؚ߳sW#bbJCj5 , f{685>q"Mw+pqr~ &\B ?_}Ҙ|/Z'Otbw)WQ/NZ 9ޖfBQErACAĠn0_xulqrFk=!AEⵞ~S_{@Vmճx#\X?e9~-~s>x)>!5>cUYʓgVUV̓xOBEhp䩱,*ӄ6@/Lovb9WGy4>8%yvDȠ>?9?xuxB}WU0ߏ88P>CY]8]f'ǷCQ5as>uh]"k~QyQ=?065&Npك#oOy{O:a+˷C(_ޕȒ<ѡG^x`mo(Pzv1ޢpX(_|w<}σy\_p4xmGk;L86GkqL# YsYJ',ɫ~>ky?kHYw,\MVН8(.Ofz}c3}`@A3}TA[qeE> leO7yisIۜ0v%kN7*?^`nX; YiƫpogGcB*JE-jos}qߗ72j4U?5ޗo6! ymׇn좃۟ax64Qfs{~vx{>`p0E3=S`]OZuqSh8O'<ЀgDӦr{ēZ G&5mrns~YۚǣY4^Ʃآ SKv=Wݞ ^zXc4l/X\_rm>ċZ:ߺCSp= Q^a'9VH|̴OC? M9>VM<_6x{Ⱥ|[Y?Uޜ?!v{1%#)\IY'ݚQ_bk=suPڳu<^A,8x4bvhBhOy^󳨽>NT#8h>~/r)Z/qJGr/ 1XyN_|!Jb2!uivd?.V~t\(>^7kw@ o>%goQ*n#+^ox?Oi7,9O6]Y&lwW<S}L˻uOI7 z\0ޖ/=g?LP 0C}?SJw~W߃uTk=st+yнxmgH\{{}Yk{loho*,˱}頢ezt}<#Kڙq L?қ$m+s|ʾx`֣j>IG ã=]:HW-ow=L/}Cڽ :5ߗF{;.Χ=]/w FdzGCǴcYx:W3s:늺Y~8jEG{oU? 9P3C_`yN:Hgp4\PZ,2]t-b"ݢ fz$1=^N݄8_&3Y߼?-'L<\ju^YğX(u^tS#׫cxn@O6b=0YC#]y>ӽWNnӎJXmPzz,3^]v\f:j{C{+fLJtՎp X~or}!ϿP ȯ+xCE J:frezVeI\O0 $^/~\X~Ҫ D ad OBRO_ϯg<}_ J/7~_x]n_oW^Su b;zwWשȞrdЃ]Y1/)ѽ2Z}i)oU 2)xps$3 xr9)/le:^Oo?|y~c=67nr7WǷvY(7X^S>l?f<Ϙx;0 ś!@E][oOzg7{+p!qK`NK@>Hi{g4j<{۟?F{=ow/"ϡS Eu׏K Vn_?2G˾O7z)}ex~)#@Hgl{}J~ ʿ}zbn@2 &KQi-&R:S?Zxt?dC?Q27Y @Ps ?Jo9,s 7$H@9Byk ]_߻4?/l$>׿0 &0Û@CP35+0>I6QHO;op2b+}z⡐nׄ^r^Q޷y|?.%fnLlMye(4qe:bo&ywF(_ fz _&l/#C!{V#=/H|WoflV黫pIֱm5$etdž/17fj>k` w2~2}Z # b鸝/PlIPи+RTMP8NJ7z^韛WzgFOW9kuC D{b17kb s,(4c?#p[!<~#]ytEzz (A}?N_H1.7L>Mx<\_bF`b`fAy͇oh3{:%m4+Wz ʯǠz.鿦 ҿ;}(L_n&i8䓮t&/pvߤ*;m#}ӋńțTӣ o1ħHL=^uc{$0MI=ӇL|O~ORCQjy^ftEwb_IO|*]/5a!fx}oSV:8.w'锛3"oS.(LdKvi]e)h>tEx3=2۳+o_Ѵ_/˝MG"/ݟoHfUOC'b\rB?NXFO{5]0'σ]pMa|CO:Fޟ8ux2=o}1=)';]6ۄڛ}Ӄr>mIStJMCt1(ptZCY%?91WAt T)Qy~jvtNA,~x7*MQ=MHٙC\(LI}'e"M9D N}? =:*'4H~¸!0/KBሙ׌Ga?u鶝Nq09>V{y P:EnRӈn2V:ȇG<&?=1!!$ !6ۯ:%51^34?l=.lb+ϸD׿oL_y6^]²O"uo:ަ1]OEg  <7?~e/8:bt ?G'/FW?Xno5Ensgkh5L#f+D{ga:\' nboag_vD8"&CԆUoLߨxZx|;^|?_關rHϛ}o?k~x`T|vC+g~f<1gNa3c3waR؟pc$4߅acn<_a[e= px|?5k|!}<7r/ȣo)N.Ҙ~M*ZA)5߇QoD.MƄ>Ie)yDHd3$a'#4_R mU?tɟK=+ W8=f/XUdR(ebp^I?o2WG!$b!<NLx~aNq h(oq nr0^C~k'۞hڎBE w~n~Gr+n܀GɖwoO^V%Cg.z q<ᇽ s4L*EA"dZp xft5N-oY^`J^3\E͂}an]ü*NE[rfYx 7j$tE2Mr8~$ays;(*|gY_oka3fByHm-CzHTD0y G3 s fϝ#* 4sjF3pmʜ{\ZaV 5eM Ϛjm@>O!le3K0N[s fHmiG)FrlSed!Yj.`Φ- j|J 5t.;EwlJ=f#S< &0Ey$$g#dw%=`"d 6?4[y mH[sKXm ȓ-ZaӖV'߲+w/ͼ57~G pS,w\n 5d G3KJ\ ϶%ǂtfrG(҃K1M24%9ƹd0ϥW[G`&[Ur!EME#|\JiL # Z>wXDfV-w?j,cJA i/迲RyÈ0ჵJ>_7Bza ,«;)m,Yb Ģ#t.mbhIpfuSrPË)m¥|4j vLqz^0Jo̧=$p,.|c+x,M"">=˷ʊߺm6LL%֖+ϋqwR7#CcG. `Ǟcc%FEY#llR3/u.?}p¹/+>7 $s XmY:`SiE:cB: NNVl1x 3ęq7oFywt| uJ&p`u*[a O͕f:z'IIxStǶnL *c_2UM;Rq323ݼ\Q,hLqf#dH2m z_:md5( 8ݶt8?_C:];zning6RN㤛*usƋiQ{))^)_xLjEyh`J߿w>) R#IIܙ$ȥ[)䞳SWdU~sYOf jEUH]t3rC?οvn懻'1 x⹹z9HS)*@uiAn` ;i!㟢6.]9, ِg'!tf?Oܴ*%7>4x+T39s*QmX1z+&w5ÅT [MFUa8?6YtnlmL(q^Y1eAu7$@!A|%{BT7(冲ixaj'dLy8o?NyzKի][n>|"8Psuo f20_ %D/-6j̧Y31}˫x[Ue)jnD9Tz&H$zp>8q>DЊOT)72GǾ"Ezr.N7cM8 0saCza  :|6%CZB|¾=grײnXzw{`V2~<*x>^o l.y,/j-&Mq}}Xcm rc}8F*ɝ47abm>eM1#>WFmOWݞ=}87iE6u}XX'*bȇ`EUADu-fA ܊/O-;kW**iQyeLpcP]fĒ5&-\8cm#} 1rkTwO9*pp^6܁V'MtĹܻ*%Ĝ)ܝ*VppsaAG×70K=(;Ԁn!- 큇c:Bn0q6G؋&N3SZ[Xƨtv'r;Ԟ)^|@}U!kB'?CVes)ٿ!7')9> 74:G8\8qΑ|c2_>;( ߗlEg=f{n ľ/?ؾ>q|P9#˝ ,Q`5HHL;+ |EFrbX'RNݘdaLd&A~kZdLJǦ=9^M8q+\=9sW)gCu;.+DvtxQ~)WDMy jL\Cѯ*q;JԔT\O\%PQ 05 yo;Tґ 5` mKtX '"%tu{U5n ,e*FI'6/բ\vշ ߈ML ֔ƀ;EiZ;ӾgE 7Fɰaj)`D_A{U[Pg|}R*nP;$ImM^=hj֮^%NM$ [Bc ں/X-Y ^[#(L!d=~b_HLFñS\hw=+Ï%q[<#zg-oET{oG{$FX.Wv'<¨Bȃfl:An {yU&i*m~V|)L& I|?_G MtH/i_|X->6_䠸e ?p㷽Bc?6({U'瑽R,ETDu5Py* ;M}idݯ;mtⷚ4.oTTލk3<нa (ӑn@B[Tep{'>A9t"Cϔ+߆~uƕ$_4t,iH?=ӹH 0,/ :['|kV>{&$NeϿ }'KJo-ʄq)#R;(_@=/[JK%zÖ\Ma)P#s:ZbחK^[ƄiŮDla3zhVx]9~?u좃gy;Hpy@phYUG5sv PٱEv@ -mC}:ӌu,*w0} _>یxeg%`ct3_zu8k|D]~Y ҉Jy<ЍsTY -@ gM [\*qJLUq{,* +z4>1u|/`A'2nR27 9n_q# ihaY Sqy4-16 dΚ_8Xqc}s GA76&i)32*Fۮ]獡+ 80 _Rݣ /xZpY`6&PFZsxݷPn<5}9{g—Q3ٞuX eW?l EsbW ߀ͻ>(T|xFpkt`~y+]++q%>6~= Q< QwҜV*qK}P,ۧ|ӑxp5o]⼡i*^6q6x>4+y;`CL4uhL[LSֲijC(%6u KjCСQOY MT^J7Z8)c2$+]_~=ל85k_ى5xq,]nC!,'.E8{5O:p%V}]|u10snx$E8Aݍv,ŭ s}i$r [Co#C_`8:LwX>B8V.ʲicm?5}'?`~`OϜ? qi%/9]%hHrB:llT~dH*/׾ߗ^ú18S9?|^bҗ1q|e74s6cܞogJEaQ,78CS_}1\F`g e?|ԥOs1J<ċZW.)_+/Ny[qezFGxQ\6نhqrw WwI~X~h=<[ZW3ݧ;}x?Ǘ{/\-M:5t\K&ɓ˒8{fG ayߪnn'&piKVWG4ˉiwUXQN@`|'?,Ϧ|<5?y|N]|y;*1^]x od|ram>дjyU:juk+" Yؾȟp \ss~8?V|H' U^)oƨ<6Y,)hZ>R_>/x8JMiǨ`|O?>6OY^[_o]'OFʛ]J )W:U3FuWԿ ǵyx/>#|Վ [^g'oOrɷtQvs ,)ң4FxM۞vMXOyzL9SnDzw+vqcuZ4tUŁ jT+k[0wu[ _U j Ӣ[$IDj1\\P@ iD!i㮼!^(ˁԠA›5/+wiCԘUB'q !gVќ@UސfqD0Re0,n/%*z'N iB̎1=MbZ^lmsx5 DL)g6HմWqL-4< f%)Ƙ#Y?-t7?Z8&zeSR1s'𻴷dABqdEn*h*R(| r7p8x3BL ^.9ՙ0vaRu( ƫ*S(ܔZELa(vTvnҞPoTϼʉBޥWNߖ$VQ0k| j"6<:'.9c^~~Ä5 7g[P1Џ4aHL7A0I=*9UF$'A \ӿ0|PYH?PQIj"k P "o:e,\g Qi䨘N`dQCa^AC&: PNy;'iܨN~=@uF)ǥ 0_/ͥ<'; f8A$}ŧh&1hạƗòC{6b&Oڢzb4#* _HYDҏeJAپn<Ծ* By"^q1{/SH1Tw "x)/B"'}x(#p)+<'3X_x"< 5F!oCzMD%{ ``Ĵ:1,N>WHOʤK-Cxw{)gjՈk6$>"܂Jy \ ܅1~rPn)PMBbT Bx,BG>U;S %h<bRx64M:Kwq+Q+sg sY!9Qwᡯ2-OBn1"cCH=]Ė;T~N5`76MēYٚdfRϟF\΅rLcot`J?S@^nw'uc^P8?ēa.}3]5%9Mż\dNOLO4(0xy?[DjEWyf6 M@kNz$ :79Y7~WN?xa5 嘂=6iFi.>Z߳eWuT#٥ 㔦LS M+w?r$n3hOF1J>Y{}[#&.4vqәk! ֺ3$?s kC-Ek̠1.c?@?E `\. ep:o@|ٷA2oM:xhSUwǠryx,C45E-K?L=4AԃNE}f~0s*t3oܞ9Oe9Su?IFJVp߆. ^Ex}g-߮$n.9O)7 9W8ʃv ˘lFz8Wai}?[t@'|t07)TIf' C8g091̱0:90wi[p0Ƕ+qؾ X/8]3ƹw&;bER묱$ya)CJLxlI[&S% uOȁ{`y9krpOe]Cֲi9nrP0S(g2JLJj.P9@ݪ7 >W||l Kk̓r,c`f;~>Nit_ϘX% kL>lJNm 'gt °SJɁ7O{7,J}J lpa(v:n)6ՙON`m̪^e@(4B.]?eklu@+.MՀaֳ>p( p1;Jg?R U|yNY8qRf;Vc87dz0'=g}粯WlZ64`8xJ ^ɍ.ߓ!Lm sC&wcGׂ0>F(Y[?H8 1=/:kkdg^tǃG6ʡ~b:*== Y]~ۃ(q[㍖[eѹ|t׉qO~cL;7N7${_^ ĩ=:yj~#YWfJeoB箋`Sp̴G eGE~} 9K6"6<ymPb_ZZX3Ԉ4WMp/ IYݞ~(QKs(j<&O}|5ٍ7<,5D8k(i0wFjv6r*{?ȜoI^ڂTZ|^޿g8Vk'Ӓe&VrJ][sʨ9ڿ<>~lʹ`Cd& gF/ibwjS#x[X4&܈sLW_?l $X܉_pڜë";016~7ϺÎ=2:EZs3z$$8`^h}J8kӽ&Ky?[4F܌E)wby:W,1o|2%؂_@"OYsRxٔxw_M d4Gg8pg8??-2qC^u4 vP{_ Ĕʉ9SY~X?ςyQQǰ - Ηܻ'| PdgN<\d`HVc$ί0z\KxǙuHr~9 ->\*5@{q@T'n~FT'nZ}KM:^]oshV3&|\ނ>rP+ \ ĭ.Ὁ/Vi r)|~_l;A-e?e6=#'%JSBbwN\%,w5_6$#0x=2O{|q<2[!gU2IƃcRqt|"#TGȤ.\*r9fsfud{{\ٿ&LޚX# RjFY}P, ϝb}2/b}[ xM_p?֮hqq{sS c^׹J\$:,k"hx?_u%WbbO#4e̕h{?cIU9M]~j\M~3=8:1ͻVĹw{fU[*y\3 Z"|=5^P@"VjIoŗ+lIuSl{\Vu#&[KFmꍺkԾw[0'zkfm-?M>nK/f{U^8YCeNTj"ۃeYno6|_+l :}Ƌ_kro~tdK\v>kCN3}~P39~ #yoחߧZ7͍=-^Ӊש#XVtD$WX>e)8661Qϭ@jAᒘ IJoAaX6ښ~AUmCߨISQ|SE9׮}xҵDXvejjyS8d[֡n۝qBY|ưʏ%q$wΗi;w:V1{<Uyў3<y^w5=Z(q\n/)_n(<̓1/dz?'G\qWܾ\oxد3O,157*hpTq_gh{~yxd2HL |nϠO]E7a #:CwywL >x{ضGjwG> O>&}iwRzGBB. L<8_tο\,О[s$Y?,r~1·s9%j&>fri=Z}d֛"KyVDwER~5Y k?$D{~7N)<ޡu(FyYiܔ op@]\]z;]n(|'yJJ_|OSyy++<ݯzJO r@=ۻ+χ'jGF'ƍ~;ΩJ /3q1q_#ϣߧ:nQ/\yܘ_yΧ4>/TY?J=\j4pw}q|[nO߿r.?ac@1_ۢO;3KD4*tN()\ϗ>/{8S>_UXW碼ǫ~W)to5W~|zٯz=)_l>?o!^ߢ<~΋3}XWCv/7I$q|y FY*+UX>$,aIaǗI3^Z ^Rؿp&wp'#_ ߞZ'!jQCYE}6:pkd#O{N4z\|Hą)rM-sۿ=/.W@4'+t#M|C{lg{Y}I7Ns<^`x}J(2퍒ʽ?R?]dzןXX?{OEn˾[.w~}zozoJ/uw%~Ekϓrd,󞟼_?S)Uo|3l_}ob{>/x}-o<8gQsK/by~>܏c#]y/ Q|i0 '~1br2.G^k(cq_s׌=W?dƘ}!?7ˏ*key:OhzO'^*#[g{p#Uձ)cF3 W'_u,e,a;(޷q|8ޫY~_+8۳aQQɔ; 7Js"?g=].GC2Wery&ތzxƋ}T$e}ͿGH\+T2 S[?BƤm{^09꾬0G#v /.gRWi<7 j~Lot1i5%߶+:sFx14J~iC8.f!H~\F19o/mɈUBjDؙcT#/u DT=ǞH.T2|V8pe2TڟdG^e{byVi~_OFWhL:ͻ䪝,Ɖ5^:\g2e[@C2[xw Ϻ;h˕z>T:/x]&`w0Ȅߍ,PdXv7YԍS1|#!|]凩gnCFj oV0UKClQQb=+u_''O_sJ^$_~Ҟdht%{]ƹ bX`q< &[p>W9:C$_uq UJ1dr39 zRnϳLw19b3cvWtG+R+Ss)#0Tƅ8y6BuP2ӻ1uPΣxLvjc(Y <m?0/5X߾뭳}?B;3٬4PNƵm<Ĩ]^?GE^+g|&A/攃Vpg*pye*c>dêOk쿫T_/]_<ɆQS4?/v5_[MGqrqoyg2MGd_ēL ;f.L\L;ӑ =g-b>[RX_BGD;Sc6p= v,JFܾ`u1˷|_nNY?yn{;9=q%.ܿdof*&:df20.J3>>? y[[JU7?&X'L؟d/uޑ:y;LJEp*.7h!s$,P},ũsEB' 3t`xVL=TQsd֍ 'Ygt_nJ8叄쯸8$[&.d"[cj2P UU? 3GV1.dƒk7P>UpȰ7(3 YNgO䏆&0(멸֛\ʖ'E㫑.H?jΞ C^=0v!v[acTˉ93WII A*=*i"9qv;r<]/j?|6g]ܘKXMr[q-Sj˹6<_Ġ3Y`p:y 7O*gaj=0܁Px>C39t굅>`j>ݨ6[V_ߝW~2^u`zlsm_!lf>Re?R Ysy}­8aN 89]rrz?*. 8xuHO%pqj?@qOs}|4$?U'Ic1¡M+~!01۾?<:O|Z߼~r5ojE`λ;> v}F2;w?(^f7m #THJ*W!<_Rj\ԣ|~+0\KI}?Vg/T"m|_JW,x(jvyWt,YS%_zy&\q_7yq$]TG~SN˟;oXԾKZ!/śU'o=0gxOzGQ$ػJOKVũ<+SVjtu8Ǔ?;_yMW|KNE\k {dC u̩!{b3fX}"㛺yW&V}?UFyyy\ݿ[>x,+g*7{O'H\_g{Ӑ}>ޗ?C\iϫ?NJ=HUofW%_Mbaf?`~u-8>'~`Rwwlt{Id^G_U [_ YƏ@`?}$߻fa͐ł 텋I{O78/t'F(@|ݳTz?8鑟zJs9`Owa3oھKA}006~۫7C385GE3!aNŽ_.R_ofE֬Ƕ:{/C+ 3pGZn}M\?=,Ki΃:\L񿩼CԀ/࿞^1wk-%ҨFF浝"-Û̔@eǜo5  x$9xNHTKq/؀&w)Dq5ː4S*cqppd:8|'*k704s^o| nWPR #[,Ŷ-pk`K\.8;} o&<×^z$^,ҟM-:KUVolhf|2`!W" :z>ݒ=>[+|xSv11q '-HyOZ(Jm^f^ux>sɈY}+'6]l$ԿO\M2n9?Z5g(3qSD]~Ԉi,mWY7G= u˿GYσ riqbbpiDm?Ğ-Q~Ù|?~"&aO7pؚ\ޱ˗[Ƕ3'XXaIOӜ )H*_ꗼ{}W~ogSe|Wg,w؂ݿ |SKpRΞVޒԟ3< xfWL}f~ <8ؐY-c_f0}?2Y8{Vs_-/(׻O4G{ʲ$\1\ÖEx񻽟kyӗa¥Wsm~<|sXX4gpá\A N$^?|JCbͻ z2gb>]SySx^)SufH;E~p&l(pÈ|y0ݯ2zw[|y? \ȟs=}Yɫ8p7Y/w Vš=h}bR-|Nlp2/W<|Ä੿_xtWIz>ګ߉qj6uy? ʾ$lї7q/nO}_ mϗ9}MW'ݟ}黿sߚG+ɺSqܻ=.}˙_˭$>Q!z^9?_>Nz"K C|1r'-__>wqO{w0cVS]Y?Y!j/ ÙwWs{b~Q/G_R!;<0wUb:0vkje8Xԟ.]͒6Cg}`j 1cFՀ8( c%L..ݥF7:`z,sU0S L|99xl3.xK jEP5gX[Χ+yR㭨q hJ_t|+^z`w@ÂCVȈ)tvq`l+vc6@" 1WԾ qsZavPWZE5X/;9VP[V_BĊZl?0Da'ƎJ1W_|90l) my.tVYq># /浂')ޜξz)]ruafT)9_5Gă"JTrǦ*]7S B+L쳲G!.lo[@^F+$w:(0q&KNArSO֏ 5@5#-4P1+I…=jp-bB5-=5̉l1<J\!c)]|)מT5\00Ybkr4;HDaSx1HN9TEx7fGѼ:h iœr\>?cPݞ{7ekx/w(hbӘX;E7ɳPCoN`̬X "qTiQu}!O t*uff~1*P3#9Vcp:, {fdqbKGNly-|58>H2OCw3*}p}y~'Mx{3BhA^[mHI60i6~oٻdN^X*dBfݬdҞ&ë,:x?74XO$<9ԑLߑEtvtO\>)oܞMo>ip'|O^Q{vD+K'<"hۑh٠;tyn?0[Ыf1i`Hl"=;Qk\Y9wÊ؝Jj-X;ے v(jN Zij`L#)~zu? ̍8Et6unl!Ri71Gtc^Z'. Z=k~85\\1Y4bE8_|+>iH(xΚǑV5," 0_z'S;03,2}r]H_\o}󖦲wYzإ3mΝliF}&WJWa6Vm;hZ܆ҏ_Gv,lIs5HNN$IJ;?eM.ޖ.WE,ڮ_집$2qȄtZ)7n?j2- w?ҭ YxB߯rITG;oੱ_,Q5{]ho{g}_a_&KA*SJ*y{i✉ޖ*A'e81g,}EB=\{,,ϐjϝR+2;rrBj~'Vt}ۏTB~IYgy|&)!;R֌4-~L us&gi3iLIr]V#UEN|v*-I<^Dž״a5 s0z4WMss_v1>8^a J҃G֭:)u3iPj8~> Lx~>tpoLz߂NiA$ >j|V_~_;g(ܰ@{mg_NH\dR*]>]|p\m`ζ[̸_sYɋC=wfgϚB~|k}Wa+`[Q{Ѩ8ңnjV2k_]Č9I if<*ZkyZϷZǤ++t"LqR :h0qWfxF{Wcg W߰μ1YjV1XkgF~^7\+2%Ы"xy -)k\ 8|1 4quk kWP6NY 9i\Os:yͩ~GypN}7\DmKծAs:/y/9oβUۀobU]8ͷG)_ObƦ'{Vst/cu)9C1k~` !yk?8VxOPchD$3O"H;+kK_~@#ɬׯR~X_o{HۮW'[U8_˿=[|;_ࣥj|=e)XSKƘsphŲ6fg"92S?j*j֖ 8՘sMw\T#G>c֤'%)fO(I[v ѫ5d,{Qszś=@9 g[]yڇZݾq{vpH˧} =h`癓2=O3k5Ss{5oyqgdV ϥ" aEr==aS z,GtIºL&oM{^tQ yp^O.9"\Xm9VWnn2#mw|>_˕b2gpwA{2cv}t?ë,opuOgn$Lhր,㝱[emd Y!VsqGWr1xH<3b|އ{gS=_/庎:7_lj#O:O3jKG]ϙ?2=33q=~O84-{Oq2?N.8\>htx>!Oƙ1[>A/6ܿ^Mq+\q[޹'#S /VX'V4!.ΖM|D $%Vv𕺚-`M?KYHɭZJ3IR=} 1?$c֠8,OPׯCڔ%Y?L6V!Ko!aXJP-u/V?mԧ^)w~v$>U{xcW{l,QUD;3L= B5PU9Zq{|Y{kcjr4O`}!/pSROE#[$&O2ZsYfD–e${¦{/ &lBMJ[{F>Q6|7?,f={lwī[M;(?36G-'P3>|3,2ǃ܈;,;Qfǃ-z>x)BMU0pt#I/UDq9"da7E:p׍(wJ}5{ F1#3Qlo(B3@ߗ7?2,Ļ5cB96GSbŶY ((y6 'we<%vp xQaa_,}?~/;7+Xgzd:cߔxxoQOQp'Qθ k>~X`XQb}`!|fYXǢp𠿪XȰ %?RŦxH&[XfLX8-BҴ\$9Zt[tS3"(~{B˶]?u>eB]Ri!'[B)lT+>$-ׯ"u\ O:t$.Kuotg_ZĤ]{#YY}&[.= ӕt|dgT1m]dKj➹7W\uݭYwIHkϖPA ժzB3H,yv~4e涑rD5OU(F8KGb) QU(lf(w'e\FSQvE'^]?vŸg@n5J}5m}ԲI_AeYN&Vfyk^y_e99Y/$v9[3Y15ځ5=Wߌ,27amMiܫoΓ{+kGkf:΂M֭[c5= |Rk,}+dqtk=ڭybDx~cqZՍу͠.>*%t 6Gn4&XghfdMhn1iKy1,[Z?ߍnp | u0Ks߁ԍЏԮ G'gr|?jD;+{5ڻ]-ʋ.0Fu9Xdz`?DH+bPt6H O MpP5LZjD9MP!pDt9l<8Ajsv \l`P5UMǩ)"fCo(\2^ j`?gvO0#ě*y/A8ƔS܏x6Oyxrfg柄Tu_'*.f?a:0IDPiseSZ^9 +0:OI*Q8 !&" '][G4>d5:ФRבP)_;p zP&:lWPYO'.'Ѫ9ɝ{ V+cDVe;frV` T0GbeO>W~PV 0|Vw%If.Lrӎ˝Ld7tpFI}{O i%W'p%\s.դ]\ ;!]rM(ے ?}p(0 *!W[%Hڂ>B\ړ/fe[iwx Rjx/@ @p]8ŀ. *H+ (9/ttW@;(!P¬a%iOڶ~r҈8\#[qă{~TG)e?_Ұ{~թ\.__ꌏӦCb'wQxKuiWA~+hf Z x䠭):;*0e>Z Rh^`Y.F Lp<*2 [R{]AY8}Ftjin 0XѢaba$/S?K;rXbf B%↎)l&>U j< 5:fqlƉp-kk!1se9|Pvp; Ey{tOK64TJ9>(׬VqnvesQwnZS{TYfISlZ2"\\AӺE8/N*n[A >Yno]>;>̐2#Mq9XFb sV=?gpO%IlӉ. Eqw:w?!GJhDeeKk>EBJ7';a$vי>:~ wݛvC:zor 5nek:ad~^Fvv|&#! 7$DQhm6ķZx+e!eRv/%E&;k9Lϴ?kChd4>0DPUґ(oڧ=/5kvŨymyz}\}aߗs ɑrjjshwvCjFOi؏oh<R?ȹ k6ovnS_r,7fwC&-7a3}HzC*!SCmؙTm2Mb?|l7ΒUx._zn!bkbȊop]ƃ5a<㝟k>Q[<_RӒ~)jwɫwWΏNkniHc o$Gd~?1o9 9=dKry8;{+W,3Ÿaslc"= WMrr>|o,я be"DvjXC.܈23+qצuq6]}y 4xy}ύ6 -X7D7m3( iY=?7kSCuΊ N>~ߧt ~cd>Og2&S4 %<57@8ŵyٺY3o|FUހd(SYq?R].ѐDߗlHh@eՂY6F_."Wa6JupGc8IuO}6xq 'Oi#9Tq*H0DyeV;U}?Ix ˪<;\Siq0Y'\;ܳˊ 6?`V}zaq2>HypyIU6=U}OF~@*ЮgVsJ'V{EZ][<g[}ˊQ0u8`AxHGH3?g>r>oCV"o|(k}_>0!83_Fysލbm:NpCtM]moqۯ>7F0C~6E}z|5~khWxkX8}Z#}w֟?ޗ1($ow?r}c~cwpw05gy_u}U|&~_|~^|T}lX'BZFq.ޗܟrurJ|~Zq|Յu(\-69W'Qevg''>`|~_n˓ɸws¿+n7,Ҟ|.r3[~|1/Bgы* o| 8>[_t(yG%{?rCvUa;K2oWD=GJܧ,OT vgnt~Y۽O')xDŽ5{~ss~Vk_刚%#\+ݸIu,%Η eЕת8S- kz/<^8WRL F}ȓT ,?U&ܐ;$Ϲ=[L~zʾBOS!8/}7HGAXf ^9.<+]o'^|a}޿t?)tSMWR_yTAP};H ^HHCi[ANXF~c ݠ.yAFIXA;]$E># wcjGtL)ԓ W߫#\G>9t9K@Kf@9+DZ\9сd堪Rn}`5Ҝ4t!a&].y>fQK3G lBRL=Ge4}Q}?T%϶/"#u/]K=t-{ ZjW!XǾQ&<ܾꐬ|鞰WvG>od|^Ec:ϗK$ OEף0a뒱\dM$ړ?ϯ/0_2r dU.\>~0!?J7=R݈C9oIP}Jݙ駲hUγGtNJWEq" T33X/GA0wʥ3?gL=T$'xF537|Ω3iH:H#6ٝw\(060r(8ugsӶ ec. $!@%r;N41tAiyTŵ6vׅnאv~əqw~*}-wL%?}2k9V3)/0Y.{M" pZXK˔M{.8דtR[1VQ7ۗ;NgśNʗE$'՝7KҰ1nV T⼰Ezy㬀K >Eg%Q:5Ul_ɿڙ\Zݕ}ƅ "qÏY$ n%E1?]7szlSSQ{K=Dafv萰0g[-k>~H6o\I+Wzɭ+2~gn||\$^nǀŽҮ>Sׯm)9d|~*x, Mhu zxmZo}h`(`U>!9N ]: /CBݯ1"Gs'ڸڀb钲\B]\KU]WE*v+e2Jᥔ[Zr}tn̙ݐzCSŨK2I49]B=ߕ'TJlB_h3jn,61*[S\ARZe}Y.I2X-;"ESU$PZA`/Ŗo#j.mKP)=\Wi83 {hsrn[eڞ{MȻ-&vơds٬5U*^QLF76!ӹHEu&m(}!@s117 kLZ6O9S5wF(իdjzjUȓ 2 8߲4п|EVIƔ-ݖ|Q͔u΢tJV99H2&al/{f׶;ՙ(&-$uFp+o; gly-{rV i@SيHgi- 7pсuVE·yȦW5lpEܕt:wOl_읐h/Jmͫb6$akxnyLlX7W[rm/l(eڢ"S&qVd!Ru +Ep6o?nq,D-!~EB#ni )?% 5 MҴnc7fpD-i+9KBk:٣c}Enɓݯ-hRJ5 v ^`~`n/:-Z{2.ehzm{^\k8y8Sjs}[zG!ѴVp8[R( āӪ*O\rOے8$AK2Apȍ> ȍ/ ve\=oI(*ݔN}_oG%ϰ,OfH0kYA3Fe+Rbp7##zcK b,+n-+ )E9Je<4|HD,W֖UtO[;W)oֆ(S:D_u6/Nu{rql:ըL0e>s$ #HB9Њ2"a4؁&ov o+ݶO_)$Hدv YD 2Ó6KMŎ i6Ŗr𮁋u z!|4>k<w+"ThSQ_{r 3c3sS\}!Lfx~̨@ !3u`C:G8"ֹ?{ryv+'G]Mw[Tq9~,9҃#RّlU\G}d?DZ|7  |۱"Auफ़J6vSB74$؎9P>}?< }s8ooˬKpۛUΕ v[&&(lS?C/;X؟'vt^|(@ʷS.⍈xlb69(M2@RX&v )`emv0nDLl"814*[&ic?:čgDqF1O}qh93iFE~pC3a&.&Z =q"rXw6"fǂ &[G[[nt:e%|*Nt<)2ط! Sol7S}>Xaxbz"]U~ &|7*2C\aQmO/Z9)>_<~LvL"% D\CV)SgkC=X222i'1lN)}c|ɖ9?d~m![\UvggC#\xhAZ7!E[[p}&*FǟWy"yޝf(5(:_EQvuzrfI8=e<_*?Kr>j el*%uA;9ؠmr^eĭYnpb^J rI֍5LAupwRl9urKӠFwc9$8sbC6;1'6釜m~/q#]`{"]O|8N!I@}s0#wT`ߨ:$tc b?I@:9Ч*'iHrHmE}ahG5VnTmU,!q/KmC|)[ѷإf,D}fHO{q)Kmj;슒:ݲeI0YQg׌tJZƛ]QZoYB.-^F)hJOv!3{|/=1`_ "fW`o/{>qe:W O^wKY޳Q4[/4ا~!?R HN5xs|=қaFmk r0<+wҡMN.n.bK*38w/>>![ )W ֐ړ_os?Un 4['N6_|CBv%}XZϟ6g3ۏ-'M哾/9J6~7 𔚦I~eLϸySNϷ8u~!6WߒV#CzοiwG xw^k&~yboH?s.ϸ-54|q~SM:5~g(&+[%EA-t0ΤkVx旝CAÞڃ2}vB/v[{`}>yCE \|9?{}a|y|3SM6N>7}rj4|_rsS[5:B[)W\6_?>dSO8wSxϫ?X*ӏ3QS%62qS|my|Пrtڣ6?oۊJQzbj~2Az7=j*p+1ee8s_WVMD s5w.?{Mڸ{(ZCJ:4ߟjelS>KQ,s~}׸!zj oh̴'>wupf=߃s^yek%/? "+llB+h$K 8'154#d>`Ŋ@";Xhy='C$衫!Y$خ:ɴ]YgFJroC+T3Y`" GoXFS>N, e74a[򍌘&M1޴/Nmnr=8曂`i|a W|ܤ1Y?qb=$xܠY` $ci14<٥CP tGpWCި{~E"'2,o?&k}Hq1{N5=ʥXjb/??U}q™%cI,8aU`! ܤ+RαP|D>\:zYW>'O:ny~t1-׳Ԓ[|-I-;7WyC{lj7~W%8^Ƽf^z R  Yu*Eaָ`w[S0pd[ })p)W}m2LT?pgLg,3,uv-vP j@NhQ%|4I+[&iI*2֟uJQb]D Y-0>-ux-xX_+S,Œ{)pMLc'q>i3gؓ>YkX\޵epoh,tmҮe2ڈuh[{um+֭n8EYۿCcr*vm*6ݑVE6` TRep3' Ʋߏ[N_m0Oaһ꽛Įw<{n[+L^ ]_(_xqȧ68qn^dVwݷlTog'̊mϜƾ̃e˫."'Ne_#s:cVhS.x i#!m`zK|e_ ē?zo=m\ӧ6}ne7I0UŘt1ļcv-=ySdy=٫rkJVHaR< tOY?2SxKM9f/Nģ>țl\HVpk7*;Sh1pEq^%l{ewXWskYŧ1vU)N{ ?r=TnoIOD=5ذli;ʚ_P?BZez6Ǜ\ڲ7]'d,A 77~"-\%x$yO(ϯ~N[aفdW |nOWl0gV\$ Tdw?׾ wnÞmx#V4$iT?v ? ٗD<|γ%4"%߫`DHw.dK!iVnK-~!,ًލ(%GpywϮtR~I`I1u9ܥɵrΏ2-;ݘgw>y}s>qҽSu'^/[u1 ooqDxL:I˒g\DyIhh40?[A~y䩂~y3N쐈>vIKmGVѩ nE_Oz7ϯ|+p&//ŠtpnM?no \Ve:xxD殷kM$r$fM_O&rh\L$έO}o~bz/ήODX%UDx b)|)h+4n+y~cpT m%/="HȰ#ړ}^a.eD$S|YD~}|f􃋾:D`׊?_Njd»Ze DC}w*IϛYW< ~W[`-A,ődj"q;=iOz<8lo+,=?3FT4Bq_džQ`\Xdhϐ|Z0]~:`н!O@{pvyLgvgk•;,毬/,~xXW}r|}t*z]} AOzXf )?, Z_~Tsw_>| XJz3X;[|)뎗Xc5ؿUf>g}n:<^<U$VG|8qpǣot{l柩_f}C 8񭜗WX>_) U?};t~v!e)AQ'e[Wz__>ĩQ?p"_mp<&CIۭOa//"RrW?)[E}"ӿIKK'2'ȉS 3~| 3rY$&˒E'yd!Wy_?Lngݿgs)Y蘿,f?Ex;{M'/}Wjk_8qgfan?%?_?~>myNy?imBo%յ_`?x"?__Rhi K.bKy˓<\-Kh= ]Od|-Or?nEEuxvHI0؂v_dA½>Y{so'y/?E8W_ +}ƿv[cʶ$k:ɗuIdS~Cbo);wߵwmѡ_Oz:S-<">mM/FC{yW Ԡ^k lbW ^N~lS=<)~<_lN?/։>l!3V}!]_d9:ib=ʇ?#'σ괂PmKԥ5lMH \{lh!O|ThC1kr 3(pvq.`yƔN-^<>| _/ SyN7{qWƈ9:}? 5gR҈1gr vrPMfm(oI&N Y@p<؛? ޑeQ 30H塑9Xpr0y94@Yk{;0 945Kbj:E |ޖC"I pDtBfe{PE pcd grU3:1MՌ8Ilv딝%֯3ˆkة.)M;lx-gJf !/*t?>P>$L;%B$aJDQ;^ѿ>W}g1Ho|KaFdU/ױ-Y+-<Dy@@JXC9^d!wfƼmٽc>0tVP;߫|恱棰PU ~;ϿgeE};cAx47<6+|^oTd *ѭr+Zb6vd*:a \se+dr0 ʽo9 eγz(h@z|\OH\?fGj`T~ϕ)]G|`5w{OK\?l: {l霩X'j1o_}ҡ/j_TDC7|qIs W7T-~CtE W+*jtu k=NI\ֽ"b{BY (qz=b/<A^bQiK8$yS6w.JB1u\eq>TOX_܁ʇ '|}g&$s'&<3y?O\_PUXdaiMK C۾~>/Xdcob_dWEp '@v`4Z{`D*1CEخhk~n8O_w~cV7׫ʑޗߜU wʁ]Q݁oJZnqړlqn6?Yu%.+/p&-&  cPs L_¸^~K,8qp,uְ.~]+}0קj/g8&GXbփb |;y WO^_?_j}>1aw2 o8O$6Bopp ^ѝr ~e7 ^k^ebcC6z26`ɧ|469"# ߯W8qcWnO|vlmC}`S}{=ܕ<[~_֏Wv1nf>eA9+b\"~,axHH鎔PߋG/L ڃ^/Ll#*^gyo}_%#<]v4r/֙{t?߃Vr^g4?c3ڀs`Cy \_Nb79wE[6-a`oyV.89G>\uHﳑmH/fi'o|E%054V/8gSM)M_&SدsFf+N{1CLwRHsX@MC(x{=G8if\a h1b=n؉ӽ6Ӂ~2T Oq 6~d8v/fp. 2Nq0c1Yܹkqdw$ SճҪtE/tE^b.m w@Cl'ʎI3؃7(_V|;G Mz)/~c)pG`=t75znKF/Hs+^^ޗ}`@_ui.8)֔ٗ3\~R|kϛ].oط<Ǻr.d75Xj<.ymo|npF3LroU hOgs/OЪOi3+s.^xZ۬ɚN6-Uaaey}FOJoxbbSOC2lu*˳&yN:ξ;a[^oԑU5>0ӈ73Xb qe] sPj3wCeY!-vwNO0>Zy;_|>Bd@G$1Hv/b}awa}3t"gooY~5{vkԈ5k]LJmI5PO:2p/IԨ\}x˒i71kX:8͏;Px2zϏ7b*os)''$H6;.Cx#F8]amB~M4۹d L+q.MDUfh K rovQXg]:(d5kҫ:K| 뉩8@{(  L{PVnތ8) 怛pI,]c2>N- RSO[g[>s+ݻ~Qm[e򋺟AA›:Q!BY4ԝö}R:?pDg3o*O wpO.{t힐 ,~{vi̞qettӞqOH2e|'u8hG˞],1e{tv`eYǼRrNK=rhV;߼7Ywu~SqLmri fd )~+a{mԘ߰~3;8א `\F9=g9\5x݌P=W`-0W]A}01{ʦB[oqΙL}U~ɵLWpe6OAU?󝫱J9B?ENc1`W`JL|LǺ=1Ye { >Vɏ%ա䊪('-^xz8lE] ٷ<qJ_];g{ L,鹲jGtq)T#{ܽ,e߶#P/,^ eb͸p<׋}̧3+T8rk5dzEYq{  H \/,b|:/z13Ⱥ05BߜOzLrRh)I17m[lV`^9:G9*kz9/yjX3/WT=N[$<y<*^ߧ~f[:mZ_w-+l{Iۗ^^<,U ݆~s>u͗8<%Wp*ww5VpU>?䄟~>P)#롒 +1_?601G`Zb0{o3g`/Nb `WbIǓԨxF7X_/vE |\Fsb c ň"OA0G#1+FOOŨrQ1Nۤ+N㊘#ȢM@匙=I+#miBfmͻ0I8oasuI,#Y3yAmB`W&b`dB2^m7* -؍9uy "6sJLve˜4X"YHLOme!2R 0†JKc9uv$vef0F环G!;39%*߶~`:^Œ)ۊSk] c`_06yJia]՘#PokK.M봓#4!~. :y1mi s1X_ơInszܧpN)%&M@Ea`%gI5P#* *8#ȩؗd`W"bWc1562{'~4ɨ'8pX,'en:Ecob@~ӛ;\AaSɞ}/G5|)8WM$Vc prsDsKt`#_oY':KZ/2jtQBú!L/Q<鄪HF!ň9 x <sc"7R=(\{A~Ҏ4εΓn-wO7'ǘ#&}wH{F B:-9x措Hh嬇#-l,֣5` ")FU`%IzJ1Ge}m ᐕQ[)/Lt_ {t~4Fb`>x:$>q;@"rs+},c&De3>I0y2}RؾKJb͂!,^JN Yy|0 o锂6&j`O}}?]:۱.Ķ^b1\AƧC 3,؈m%a-ZkY/kJw Gئ!NH5⹘*qW'[D4)4_…0GŹoZƣx%:^e :h& a't^JDžׅ>0+1eEON8' J¡ o7\ :BF,i߂|!eIl2޶hG%ւ!=-٫GīCI@:b*Zh G-R s%Ca<Į&O1uOJ +B|^XnS*NK.Fݠml TWTi'!qlj>?b1uL*Gl} 5d@Dž~j& J篴~K}<)0e5Nٰ֍Y3v壿a;x6BT2)?2Eo9qpw-A/2rkMtcyMe.<)6D x Ȋw@}>bލm[l-/}CVlNw95 0G O7驩lz]Gq0Dh u+ s&C.ssӴANxDG] ƒEd5KQ/8NXN{ gyĉ-:# }J(]Src =MgLdf J1x Fߌghʘ aLg~jc8.H`dzaY䮷?s=*փ"6-4‰SZOĭӒk${–q1k 9 !:?Jڋg\z#OO)y}^o˸g# E2ݹ]3(vV9Nee/kSn` cTx6àa!g2 V1GPC+2;zy(8`mWF2iY=h]#P_ƷXĄ(9 =Yl9=h7JN-!UQ~s_uhRmvH40eftv~n`{\c"[0$:6nԯ[<`¨2+H ZA3ZGPZ3~-`MctRYgw21(k3sW#2p&WH)pL&b8L\t&ޞuőH5h-CޥT+bp% nLdJm߅y wžb'`C$0r/MηH^xT9Im{gL_UЫ"D`zB7̌|Dl=pE.p&vv@s۽PJ]pyD[[rl: 6 jIA%ߜ6ںy|Eה.!/k; [;M}ı9c= 6'n]i<3Mr&p[&L &!&Sf-(aI)_K:Z%rG57sMD S2井 v uXzZHJ^DK(Q߅q,HicvƿlRiGϺ~F<-W&ALa๴dWrLnRkKSMZ&@7))@xJQ<Ŕ-#K<suJ[g#1G0!]h cawA롒- ʽR/< 0ͺ02e^Xw:yr:xIFJ,Tֳ3-pMnDS>Oú\?);0I\]AI8/8\C }EK]}?|Y>a*t9_e fYd]( I-C n4)Ƴٛ(!Nfdm\Kt \^m)>Ld#Ƃ.{1Pߓbol` 8a@W38iBVGrҲPGr1Sm6weJnfo6ylW#*9b(El P8eBs]KpӂƒoDR}e;e+Nza$1iIlA݁FЭ!8ƔsLZb3j3=_jTc%U+8 [\ Ea._Kt#61|@4kjdC":lBLTq6| $H,En䭇Utu„X3zt#g]G6 mxr3c}.Ef4|BROۥx3J͘(?Ƶ_zS+cb=\.M¥i^rEvLCE-ƳgZc"w6+CMCa,HUhgKEƻD*ؕ\JbES'5c,|dCԳ'\`,WӨY)J zAO|\}W΂41G,fpJԢe#kuNXEesph߈v8&zg(ƮX {˨AZPy^F 2Jә=#FDzo]8Jʟ0%超9>ݟx0 6JXtck3X4蒷AGRHlyY_+ Q$_%0G\,"Ư0fRhп1hbړ.-t mTx9i `sj$ |T͊"1G8r GtZD#zyA@^ĂIy5,E _SJitFc*|tE2ٗmiNoGM-k/8##|Jium4cX$qxf&@+P0αl9s0N0)¡K< Gu,QYdoam)z&p2"hҗI/.E[R6I^Czz cDmXBLK,p +#.#4HrP3,gldrįVU/ bJ&=)LJv.̎yn,P+WS ZWP{QG$?&6ͬsX}&C"myD:jFFJ=nPmե&uX4n3dȚ[)Nж42݅};K-,sc'-u葉/ZиݨD9&wNcHktz=T~?Qc&uʍLKF]r`$3k/5&pߋ2q#wLjƑn633wp?^nc)ůlSZ/6㦑rwq:ij|pcC}4d v-*yy }]i<*;z}}n<6'?*v&O >f?$F>_ÝT;BNWv?`[Z7^t*evU>0rx|˩rnQ;X}6QV}02R} ԼNO]w_Q31`,%ݲڱKsq S);Stqbge'k?y]! kz^oO3w}0t}O3GZKJ3[3 0i ~ibL{'Cjt࿰d_ W^X?ٖܷ1A]ʟ4^N(3tjʊ綔%>:)Jr2Oq}=9\|za i*Ә~8 :RkU0]t?Fc4֯=&_K@<r)d^8Y}(3-WK1nyǛl*rwULƄu a^z2#YKPw]2Kw;S;pkcV9 UՅ.M}H)K]"niɴG.ǂ%W5)gꔚR3&UKx q5_HnY&™`ahHyKsP'Z>1"xOa7]ϥbGɥ- WLYeYz3+ףܧLUgW|/“)RJzSUMcSd`%sSK̰T3q-xIړP뇊c7;iLnswY%;S-bߌlO;C:_dNwwGZ5S9&#}UvG!''fw6uj1=ownTY:mOC;U>fv@}β ryٝ]aW 73_EWНFUSz<©-[llz-JB c^w'YgHGm>/_=˟վ/P &Ϙ?;@ endstream endobj 333 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 346 0 obj << /Length 2038 /Filter /FlateDecode >> stream xks~G_ NMGM:cqZM26j< (Cv_} Dъ' ޾woo潨Wi3QEMnz8 MRYl{Y2WKxa,` ?EW[ܮmj+cT3G#`@g$ bK0Wb'A<i#8 9=3FצK ~EZ&2MC;*9<wi"$5lEg"f2`ӢvZVn/ )eCdL)pi'i eޠʵX)˦qK(a1 Ka=q[vyP V_d):hfک(jƗ-(΄3yqSE Z(eooH`f\JP•ů7υxd g Kp6'7 A s-VOe D8 N'{p١d@0,)܇ {$ !#B*̧6"=꒠X 2ͮ8e 5so/F%j  >&ҚC:L' ?jrז稷=6K SՁx/^ q妢bgƜƽn|wp. Zqў>y#r9(D*v_ᦥ[}>|F%8=TN2ck믒UTG輓]z&\% 2RЭO>;v-)W nTG s22Z1 GXAP? p=r`Lf"|=C)\tp~? c sS$$YvQ.Ժ&'VhZ@_x9ChDϫ17^-DwΑZY`82cgTn*kOI'Ru`)̡U/n#dͅqGw; 6 |M#M,i;.\$(N R-!7RbH&zq]OU)l:5n3/$6wͰxSSNx\ c\xv1/d4yApnNP׵7λ[M;!kn^oߝR?x[ 5=+ڎsğ\>`hD&gdm*p15ƌ -Z^,t9l3 L@% "PUiG˸޶D[΅izkƸ! wk@}; {uPd|FT0dC,OhRÐm0xAۨQ6H@XMgus[p\zd^Ɇ94/-y۳%mhyrZ:=x~i*8EtY saYx-|Xi$,uwW+RZtʾqw0SA#W@gc;O,y uM^~ےPAC .sEH,5B.ܜ_C {g o)\ 2VBox1'LPn="v((4LaְQ-3PcR1S2ݥ/ Xѻ|R0Ukƚ`X^xW;ͭrH95L!р?;xvFMօ,Z 6B_ 66b`gEˇߐ+W H&KV XJ \Rxwł5dxj$ZU)UF<@'Yײt`QQ5o - OX-@~"9Nz_NSFсYDai\`uQwC[1av˭i!J endstream endobj 357 0 obj << /Length 1929 /Filter /FlateDecode >> stream xڕێF}m00`J%m(JDkX]c\ٿr3*lgΜm;\zDOs,̝ijߞ\,X&N<@^gƽ'k|WGYl{Wռ | ~|M^^XqLz8qll0HUyg[ҖyH>9WiX{Y Sz7f66t_Y(;Զˁlϛ@wQB4̏/Br$p$C3D%,2zV,2ٯyg+ s̸h9 Z TO#xMiB/)uհ_-7p%9x&*[W%*.WHԈEP^2F`]!?#X৹f}IdVh! Ķ Njzs3OuDϢeʞjJ\؆[?/pߏG'AڑPݔO4s<)LT?'@P v~쥐!, TuatJS̩un!5B"8 KH9 B#z]آ"Ef'4X}dףiÐAxI-~KND/S UM A_x:j `¹1IܒyȮC)8;:qk~g N2H))A`yب#f+J ?OJp9ud*Ņ ;֬)R/Nb%r{5zI \A%[{F`-5Z4(W)9%Cgj=D˂v[0mq*c :h6E+9Hu[_7{GӉeŐ.dC# 28Th7)+ŧ6ej녔$ 97- V%&>"~mV+4!(/(X B0ݴ#X:<u׌:@ # 1xB)(4.3dMgm2~h#ǵ5 6Հ:Kp/{LaEgiKJ*`c/L`y!kSTQ[[*" l}@fnRٌo  \40 Lc?輘+Mѓ"td?~[kdF"Ѵ 6<}F~ox8}k٩^g"]g6|QPˉ3v[(ȋTlwZ]q5WUWb89g7jg$ 7YJU1¥Y4{cGokK9@-Qe+'@K~2^~[el7DhVZpnA 7{5ݝ."ǾQ2vzMU!hH::̀ |f9Ī5z8wr1_ 2za yb''|/9IM!Ѫnf~y+{glSCZ˓}opMԫDRZwt endstream endobj 335 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpPmvMA2/Rbuild570a1ed057bf/TSP/vignettes/TSP-map3.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 359 0 R /BBox [0 0 576 576] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 360 0 R/F2 361 0 R/F6 362 0 R>> /ExtGState << >>/ColorSpace << /sRGB 363 0 R >>>> /Length 114916 /Filter /FlateDecode >> stream x56}*2 n@C#4=kc] #e}d`0ԟ/o?g_?_#~?|?V~R~?]??[~oǯ57u:31ٿq_?ms3ќu}/YiCO{k;O{?gtpDϿ/5_Ļ[Pg~}~\ŵ ;~;?mQg/zF=ڨijF3FOYQG_u/9cн_/uU"Yۿg/_Q>̴~fC ׾aX=O{q_3>m_gv=t.js5|s/o㜰vUxįƝ^WYqQǯ]_ο8h-8n !q?o0ܐ>{t_w/=ϐ FQ${\)U~S?_?zHş|1adkm%:*o45Fru*q|$ >?ğX8&/`H?~zNSoxAB>7p OG|X}?DØ^o{ƛ_>|sG#6xs-cNU*Ұ{%&XsN>x kmӄ?UF80g*8|A;^G{R<'x<&gWyx<Ĥ|?Ʈ/x;=3]X?#>l?_;0/?i?cs Φ[d*.JOoz(i\79☗q͉7Nr(oL^RS0p{α/Gܪ!q^{rfv%Fk&un01ghy(eڅ#]x&O~̿^Wh69 xwⶍ7 wΆ 1i,<#^|˜C+\’hYh*` V⾅+n-µyp>>xT|?`P'kCƙ6g=|RjՁ7?n/~r<1tK~bs<>)|}/r_Ktn$Wfz 0*z!xVFl>ԉSBx(-|p \bpr;g]+n4t^0ΒM5I/@}]pNl{G4{*ϲL]b(ߟ_\t+o]xg3f7Nq%1%\F0KdNER{?pX)}~|>1g//Z_hP:&$MU"<*.yr~|>"q6h0訇7pLj1gxDy0MJ ܌B'W!>֠?hILb}kبH_mZ5p0&M4x#ə4&)-D{?>0~?rKr?'WaPx|qs\cI< ' =W4T2u ցOIݎ8k+qM8W W`ߗGo L_ tʴCxI)$TFԨYKg1_5o%4śnMEu@E&wK/{+"MR7EqmL.{q[HIs:G&-O$XsN! $^7]5>IddH51=Bj$CqXI >r9-5o{.'#Rմ<98ۿsX1g$֏0(o~ Mˇ4|Y/ kWv:-QWXz I'=é"R,b7mg4+NcխqHgM]XnI]7aon՜K@)_,[u S%kC~G~0uzSZolp }!'su#M1@֞Ƴ>\$ 9o|/8{IF n}fy7|Rt (]э&ߨ7 w㓴άIcqEn,C7񊂭k!I{|d j$PcP,(NV|2NjʨxY0}zRW7ӎGWz O4o<}xxr߇5qԍv[ u 5yԌuݙ$2YXB:!\I_*|NS'/zOoޗ)Y߼% Cޔ5:ۡt"]e;gs+n Sx\+/'ߒjץag?e։}>"| O'''/"LU?y'1iz% O2~z.T.ct;Ҏzi۞A"{Amhn驠vRL_> lrj w~O{F@)\-[WrOD}gRLk),+s'ok_zIXg6"ylgkF|tpb}QŗPwmkw?rfn0?3ؖ2ƒpM|}"֊9+ߴw&éS }G5 |yHA|O7W*IlNo 71xnV9 7X\χ$`G{ NǚpÅOH1q? -6$5PpL},Ӛ#KG?{Ldbiq|GVc)"fR.q~ǑxA5iz~n=CJ^IGX0USp$n' gf><ZVun c)e&4HR5˛n p~k};߿>_qM,zOg(ܦ 8<&ZHJL~MX~pn!p/ x nUОzw[p/W zHOJj:n gd@߄=&1e򉨁ĭCAoݘP! `4<|;7>qGI;&0qPǶ|>wp|Kz{ھuxL|mAy"ĘO߉>2H=q|$# 5ܘ |1?|A_}G  {>| D1#/_}ǠwԨ }oJqz0OT6pěxq~'8_ߛ;uG7gGA~w<:ABm O/ò^7J(k?#oǫ<O}pE0bn{~#,9Dux}&oX k4=^O Ll%ۚ鯭|M=S7~i|q|}p%=|h O Ō0? ѿs%&EuIAćxx309CR'_tbK Kђ_iA|ot~)o±6`[:s= Hտo NQ|45 |4*b"v{ xR5{r|$J<*]3󹲿eUUOM'ZZ) p7^-||5/~YS@Jk# _L/e'")?_ަW=~%w#~pKey!=7f{{zߴp-nKu:g~yzXW{V@ί|3k'x5hz^n?ڒ?Y{߷uCͱɉ_>\%1;g8S Kel~; #g8?=3ݞeob'Oy/ǣ@9*E Gpww>L}t>ap>K4Ga=&wP~*K0 ٌ98Xnχ>rT߀SEH׫oizy? 5{Gƞ7}Aa~/ļf\;Uo&`+==7? t'=WXpRJS7ǣAw UyK>Wz<ק31%݉uEDJ*z_+ 7dN%G&.cWs}C7Sx7a,Ouzwq?m1Ica'?i S& '+,}<=߱^2Ѿ_zx-/{b>R^ y@^G}3z(KH=\Q../'$=p6ϰ| #oY&n\ {ֲr. Lx3ꇟWg,1ڟa7Sst5QB};P7? a79w۝qT]~y]m\~_TΡZQs*a]"֋3Vk}ڊZNa+apUD_deGWOKVp4v1:j盭 gڊ_z|߶+oyp>K0&)գg9ZN߱9.jQo(OV`pVbF2?#Fsˎ6wX_P^:b+\c/i{~[e,T|QH^WRn:{ii {u)N+OAHykr?.{x׶Glye0 1ްWj[`Se/F^xOIr?Nvwcuv88$.퍙۱$/n{I^:/U±7sL{]VMgP`>v[ffKOgvw˛t{6 { z+^N8p=򢮾MX`5|׋x&d/oG [&7{W偳Weؕ-C^7ߜ_o5P ;陪cy w^>{a8ېgl;PvR~6rlyfvgmhgW"75{._2+ʖby*`/чW#R6|5ң2fk>fS2G+[N>4>tX}0n1?d~u )^Ct~+A}"U‡M~uBkQ)zš_ƽpq&/ͥ]ƒ8m7#=BެVvkvXǦpc[+ }5p:VE1CbnjE>U=yZʖi߿ؿ (k `u6?0N#~zs]x7 E/#Bw8-Sȸcs^As\?=7h}xqf5\'^ ,bܨX_ۧkxZuZ{* b!n|kztGZ{6L=ިO.҇aX3Oe~1:jz^Џu;+|_x?+y*_=]:sd{LI~;Mw6R010[qVjAy!7+Pp6g~kp$_S5҆1La,yIpv!|TMϼ?i o4l =Q̫\I ܹƭmRg"YM;^.DI~ZA{iQcTSE!oȟlɭ^Ǽ6M}_?r=l\ZU)ryt'<]CʆӃHQsV}?[fCp-l~~k=VWU_eu%Z޸>gdߺJi>yǗ/_̏]evx}pO'/{waGL_>u92LR.ڙ\\}+tb}^(ГSv~җ)ūbIUuDŸϗ*yTaUUjyVޟ;7ˋj|{Ozx+:&-߆U[/M9-d>mއ=W)EG|,c{,nͻ}ªLaW+<Ga^4}٣H{p> 8z~ak^gYN_yٟ FUmzbQ_|Qm mq9yN^=GKxSp{vkڼ8%:n/?;+]}aR?Y6R.l#eq^Mﺩ*WK!{UxS^b){J{q^nw<<*L"%WԼ[~A`=0;3;o7z=moݿ؟_ӟx(KwoO__y=T͡y_v `Q8~MOQWΧ}Wc|__?B?@󠩚ϲg7o r5n_!~ Ep?4Cwzph+П-sڃwNQ{,[^ Q]}hB_ǓO|^}+T1~|K ]y44|>?9|_|8wQ^j˃a},@;_ߺCr6M+f],?,I\|ke=us2Qϳs1ă=\| }z?'oo'Sm^4 H_&WzzkX~ԗy | W0lwG-MNg͉@GīkNg}cXcK}lR>i w&35!ĝN(z~w_aNH?=H[Ī Up[^=0鸞'tOyoK"my\MK\gt.ӛkWw5y_wKycUo=ƻު~U~wGV<6Vw}IK㙧SfS8bU??_pO~Xsnoy_U2z˻[Ӱ-ꖯ߻T|W5;hW.}eMK 냷1֝Oއlܧ=sM|\8b}̲ݸϗ4 ?kSOԯW7җ߬C{ku-V{/WXUn5uߺڤ/;xwu5y߻ڿ[u-8s5ć[㩓QyyR۪v筮x7)l?lw>d({YN+EbJ*='ܲ^'oz>x)W>6{︽Ӟr_{_vڏTn~:#O(0_ƛ*~>>忨 5ySշB4A wo->Lo\y^d:z!C=׼i܏{~v݋#Ͽ#{QjTp^8>b ¿=_n3ߘ^LwqS5-ꮷ.P9҇w_CϨ3_>m^c㏧?8)m K_sA.Pvkʿ[eo<$ؿpm[MCwp?}`cVu[GnQ M}Q >[(~ŽnQwfjJG}W\,;Yョ!{"]=Mph|yY/Uڨ 7bsEnUo+k%?ʱ7u^ wlѫK~ً5pm|I</yEe/ayxmWGy=&UG& #g= ׿W<e_5wނs׋VFflf}t' Uު̚rDH|+UGRdvcnvO(¿4_1ɺ!ޠ=urK=XXy=&ߧwRlƳz:7?z:~tGX^(7 ]\K}? }sCߛf#폽+}8Aԟׄˇ?tZ̘k3R:XSkGUG/}&=R#5H\K_*zQh7}j^~>0a1d%kz}H/0 AoC,2}VW*Xi] /B 5Vu{EmMxZ~_d%?pH\~ضgnFug7.Ǒnl,t.V_5۩Oߚ?맩?¹?vyaN\OHTSf`'Xc7k,\tSW{jOֱ/C~1Edj]c|3s>w!)|_W?*OU:ֶs]>2<?x>.0f\?^{mhg^쏇{9/qq>gwWoۿ&zLV '6O;OW?o`x&O~=9vv_#?YZ= mndFey=+Wgulߤnpֲ?σ{0o=vO5d绋Nfs& M۫ߌ: ?!<:}??wf(63;,7q7 `>VbW8x"lLd/n_ȀޟP ~}sxng 돘pGst{OVqט,?7U1݃[7e>+~ +X\Eⰼ`e.OLW̐$Y1?1q7?D'_C藞ɯ;8/*#\?nBNy-|ߜi~ɪ-2[QEl??&*\7l$OUdS~xa:h۬ֆﳔڰ>f -֬/ޚk< '}[Q}'Σ_@-op`*Qg7Տ.VՉ}1gV5W~&T 'PjUB paqhzć7n~cVŖ$Cs}'p/~|%u*;Y ;ڻ?SNOx7/V4!pSC` acw-WπkC,P<]|aķ񎧛$?w7U-GG'&yrWc[UIv>!ϪZN~ŏq}|_ЃvU5`FںΪg?>ֿ|1*Ƞ'U=7O8XU>; k>H|`U[E1Yx>:o>ϋ:zZz//!jWUd{7ViXUKHڀьQE^X/U9~TVf ۧ\>C#ҧVJGjʊ⟪XؼB~{^Q _crwբ>OKoї߇xW(_ab{LJԟ&yYA~_Q}4o@H/Kp$KE3c?_XY>[gyZ|\M?CY,o>^?gͱhϨ濔=5dz^|~{g<#-">OXU}sȟ[QX3fߛG폽~ fnowُ~ƫ?2=|ewc;jn}}{O1?OoؘٟiZ<>6vh_2}wiTz o>_m"pRXqb ML}۲>Q:"'_CϿ.t*w(F&&^5]uL*Sk>ۃ.}ŌO/p/g~4\^V;|&2pF)l`{1?E7ޝa+zꏽ '7 (ϑ~X ks}Gp|A{=Mvq|i=ۙl|{ Qbp>iOc/Wߟz7}O`ͷ{q`& a|o8o.t}<`6M0|_>gq|Lvga~37-;vޟWߌ-}`>!;pfĠwx^;=~oAfhԤPn{`}廥|Px^8~EiJJ;?isErWQ_g~2zKf2^Jyև >m?4)0q(l~aEد ~<~ٗφ}~qxYlݞOɞߕ;eǶv#r3/EW~/~/WmN,{w1? ?/_zsZWNƁ.~e~=`7_g}Y5Չ7_N]DCx_~i?ӛ3]-=?ä~ȿzTFtYE{G 'O$~~y ոWM<ߺyc}[~^/NW|GEz z/駔S?Vɯ;[K:{|ߋN}IZk?_m 7[+b}};Gi~&h ܅S7/a]][:o m_y_A}P!&(E<}d|ҟ~XwB&h'>z~6?pWpZox]Z㎟=SOHsϻjmھ̰~'{>uɺJ#ߏG_Q,ԏTZoCѦ=w>g Ƿ2pis<ǼwC# o%;/>pWɟ6%Cx׏A/|YU%>ng[o'W) cGwZ~ߍ)wO{XdpO^]ӕ ClW<mPBž\_}>?-?i}ؕ0Q~><6o{림x=R>}y##=H~Zo^(NqxGy7?2oa̯C}M1]zX.xx=쯣fy~ܬo߼7GJLWocIfygCx}wޒWm{4`0a܁?S>Mڟ )o7ˣF4Xo|dr Gv_M_V~,`PTw {=_9|d}ɡ~5/Kܽ^_1(jJbzG{kwG|-$[H9̏Ҝo˓ GY۽znPx1χ>/8qKag}tv?{oAcz2w{~W?џ\6RWxe|g?|Ul`|S0g'ϩo*Uzw#?ٝ>懨~`{}6so3QXe~qǟj}9}-qG\ZhդF!|w{7u{Ldzx߻ĪWx}~JM~POk~qHgď(+Nz]/қ~ FzS kzB`K ;1^OBk?X? }1UO%5~n$%/䏒WFj~4q~PE!~Z(}dJsOeD,D2>?/=g>!C<웉oO/qdd*{Nx; %߿ +~Ǜzh+7 R4P3ޣt(r=K|W>`>O`GO辞/;cH=X4GK1Eg>R,u*w{c{9}6?e|+p~ewxfy39{>o{9G&rcx}oMxAKzaY9p~N,^bҀ>,=gDz!"J}:pq4'벿ـJ,eGX1cy=ʼn,Ϲ"^27K\Oe~g#&?1.R1sևlp\x?:v/4I˜t(>qߋόxO:$n?Ml2ӭsaacr{o֐ip_>p{Yٔ>1C9ɘo5šxH0Gt" [E붓^{,AJA~^d exH?s?Lv;sՔt;Be}9LJp&\z:v i>n;5֘3#slm\:AS2dhsjpfKXo|5B5)tCYּd2_dMN/9OMU5Hb Q'mi,9T$3l*Gx_xjaYO%#zQx竹fsa͝.0~f/1U cݮ2Yv}gjFa hH p׬ Jd!eZ;2RC\p+@jf0HYz մk2g]xn_U3;Vjaִy\/kk!~朌5o AOkb<-X9K[kFG؂5n [_k|k6TN)$[c;%I:k"J ք%p#4㾱f]U55c3רhfX x{wjƚbp@^紣3CbH4އϓ`gجQjֳ6ӄkήY#WgF=kUcxy?ọc?5ϐLm3sz?w}_5/&ק5m3~Ι)眭b(A䱸5G5H`\͚ kJ+f A:ۋf;ϣ̖Z|K'̉ 9>Hl5loafb~Y{0ߚj`Wg+ q\b}zj95܆qʫUS ƚj̹A_I_7Kc|cJjW+kR>߮iR7kb g*;гsat026nl]kf>6k0@o?w[> GT]GYY6Jo2ց,Ļoƺt"~ZS9"!ysqʘrȥ`!N5ZLgé_jRߢ%F<>gp>=SPM~۹_?QWx-[㚒I?QJqA_<=v>߹SY<_55~{՜OI*7 .aZ&0l1Y0)Kjbg6<^|zs>V0X'6*"zOaK ћYӲfߗ|Kzp?珱~(#{L?r?VbǠG;볼X<|`z`}t y4ޟ7טU8㯞Oޏ|=ϚQ>Ag/3);C׵~r&{nj.MԷq~'OqWQ1k:$>zB3L}[^M)Bx}HM6ě/}X=؝=hNQ~k _A*-_%~1n/P͟˾r-N?lw:_ۤ|K=ËK}Mȉϓ>SqMr5y!&5&5fS:hq~5e{fyi(kBL)z05fjD7WY7Wk)vWtq|ho7"f!%, #9B/`6~o0(iPC*]A 2go,6NJT -tUwY!E@6̃6~׌ 0tך~Cpy5 qNuV ( K<wB=]yɳJ~soCە6<\ r֣px J5ppR<#q`bU JrS TeM)녡PDDbZMX~\!NaGw})4+OHJ=S$Ep[ԅՔh`+5zUz٪$2y- O)ZCz+ҢjY[UVrW=n#z-#qgMJm+gUdGը3HJ*]LERQ}*OJqԪJ͕s / GR w<]lP{yYx՛@ʶg5}cwc_Ċ)DA Jz_Q?y"=eemi(1}Z!c5]WEj,v-ir"JJ?wg=B=ezfb+?؍n(7^.& \ϙ 8Zi|ߒ~ R^Nl{`|'Jj҃P'>hD/tF}(Asf>An !P]')sD_ uK(wQط^wa./G @!ZOh}CuO_S3G{n{`TPbf^5=C(_3 ؍?ḱJTx,*B( 93r _XO3|lS+Cũ'L, {No3 \n3S?3UeA2Sլ SLxpfe~T9_( 3Ǟ}ܼ(oCyPJP5Q%e]=f+Ϸs8,f}ffι'f1_|dx3/YWffe=:s ~2߷͙pe]Lȃt% x TAKq%EM+fr;kw\$3(zH&uUjfD:4P1?M&zPx?WhARFyr|@q$gՕiݨAJo4/#0k\i 8y?eMfd=/VTxMP^okYOyFݴ̜Ƀ8μ~~2PC~/ZVF\؃/G`F@5g ]B2Gey='T5ͨeQ1ڊ'dh5>y(; ]R4y52Kf~0nreLw~˻>Dc>t?ggD|8_(? 8z=^B W[XϗY9@*TT'>&P@=6?*n/"ax> ?Nք+ *[OWyb /W2}^kfi|r=,f&}J?]w;\u"M 'WlŌ}\\os^/bp_zx={f|d]^Ovž,JΟ/c?أŕm7(2?&M|r~=3^f ߠij2oUZ!w7畍VRaa}z(\d1kFN&Eɇ7]\O3*=vZ'ߛo3+|qeM<8~ߩ2OK&s7~^tٟc<_U !dTi'*JB3yY^8ۋ;ba?/f~>؏~W|>Te`?Ke\Wˏyr-}M s]LTFS<~]b-`"f~Lzw0;Wd?1_^~3;o2G2SI _u['c{P:{`bS_R疟C<}}M̟xۏϻS_ɩ^W2=wĚ_ft73Wؿ-w79ל~J'3y0޷$?&ɳ{ tiAJx|{F9}StC/g"+>`lyo4 'DMɓpNOKJt=*3{- u凵/*nf|}tTZJf~^GPvoZnj?[AG~$ïiʏoǕGu7xO%˜/߯V6zk8c^:_LWwE۾ 6}7?m}ޛ1*f{}ThWەw?Bޒﶯ_#SR웝Y~l}IiO=Rg(o̟q|0G]}ygy!ܹTӃ<@2d鏙xɶOmO/DdeF{wuW3';(<(߶+!Kn !}x%ܟC+~Nۉ_vdɱg+ˀ8$^Οh|+ i|9Sy7?WCactGy68O_ pNcYe=>;?Oѿ {lg3Gsc?>_mYjyT#c} Toʟ95ދ8 Lec{'t*U!OL_:W~)M'\ybWo=%9_>&=TX%CJ?X<+?lOp x*~G<ѨnWou>~vxVuP.{gʷ2uߠߵ~LごϷhvJ77+#QY:>1^c~ςeHUqG$V 2#O[ao?xq6w~x"w,?|>-gKǧGU{\Q=gW/{ֿ7?Kr>{.'ԓGyپf~lߴ߶ί,cxywƹ> ߫)/'о^W=$vwktuxJa-oXc~H`/ꗟ{~ j^f*bm/nm,.V^_4~;dtƟ/{`U>i{}!fY|w'Og؛bD?>^߫翋;B~tU%|X0?ɯH{yŠ!Q_=,f;\U~Zb=O b :$h=4o^]5[T zSL,ڒAOn|FJI5⫑{53.Vxdzzbǂj|Tځ sػm;.5hJY3?kT}pr6O43|eA>6?19o(6pE D5Ke<$pksiv/o~ek~?|-}OXŷd{_kSVE|?~*3G42XͯPW|? rSĹk++G>6|W9o֋>fQzoƛUh^:z=R=R/UUqϭڞ-czQUrÔ ̽1?u5n_*UW0/ƃwS%A| A#Czߒ,@XW8h=6ʧ]*%Jny빃'O8'qds}?'8a<e=6'?]E z+NJ?>p?W`SyU5k<߻/3o@@8n+YU}||q ćd~U~T'U*._0 á*UN}ԥ1 CpV'}>X|O 󩈿qk56QUur^g~||Fz?oTƇ $>OiY|G{G?jJ ngp|h|+?_cƢ/*kʢ]%6FnY~]uka2tՄ/,w=/*6?iU|Z|zr*ߵK~j_|&p?g?`8h}d8e0:9Gq PS0ץpy2uFODGb\|ъ$u:9yn:[`uY4uaOƁ[OnhʍcF0._w8A̪Dp+ =. t<g( X0ꉑAB\`Bd`w!PO={;ڷ\tPg܉bHbꮣ8mk v WhY\b[^xE<_^/WT:l0B*ɪK OF~w]@1XAɪϯ0FH=a84dTo#WH:%aq]٬uӬ0JƄqgh?b^błX/aG^beC|zƪc}KD cA**ƢBS*1szV5`L%䣺C^W{׏E| dtY:oJ\P~]MGKר }}4<OzUڿV^/%{6 ~Q i{{f^ &ҧuuq=ds^Arry˾:Ł=_Ds]daLz=\3ߟ8 *7bEۢ}">ѩ*#3>lWaQlPn4[p WTk_=Y Q'QnvBy[ 1cn h(3>1b \BGlQ/bΒ-9@ {9J_yB4pxZ ZC1ĎpOu_x;g"3GОT~֔LdQ}g=2ߖ3)\l.4VڎjU+?~#z_գq~ a5"d4TabEyrCA{d)VaN}0 Db#.jCZc*SXK~1T~Y$է8>qW|Uz3nj\מ6;B>\6O̡Wp?lL{#՗҂&!&'kS=N;sv0`M:k(1%s]ǹgi2-3L${*u)뽴bكUק~⶗en!r@_f^tF=ȕq}j>a望u8wRo̻sW=gd3T/;/{m*T ɪl-2 훜]ɇH+'uJqi-ߟ~'w]$OdW~B.YɪLAI;ӄ$n܉tSZ~&f'w?7xǹr*1멏J [?8H(?ƚۓ~jYȘOd\$wUꖱ!g'~q|b{]F~=]d/Yl$?]c᤟a4$*gU?HvU ݉uy"a㹿76&eوUC*5N?_]|k88oJmHo+E2~Up[LͷuއC$zEl9gDZ9C~~"O_6:LU:OHNM٫Գܾ7;WoNjCg'L0ݿIB=YLO@6u _3Z*njJLw!r.جޯwsп~g*"/Hm!Vj i?}vor}e$<-MEPB\r?plcNle:gȾO 'ϱsaZ7w,=_v6YTsC&:ptUzzJY\S>UqjLDC^_Zz 'OQڒ_MGZ="MU2ŷM{Flo#g cOk",eˢ SV;ǗYLg-1gsQQ|8cY-*dW>YmoZ,I{x_ rךi߆*i>y"lY|:1'f{FSxi>~?ZTʌi5[Jm1ŷ)$4o6-ȾLr7~>5DyBס OX$!9h''O5ŀ=Qr**w>z N"tC5ezGL3kEjG yMM?ӉGsu^hoTbtw|#QzFNdzُtN#8Ͽ%kNw]"31t|Ot=3 ;JHd> ٿ Y*'?5gmsm, M^*j?',H DffhiaDǡϷ<:#AFt˧ߜ@IϡX|`C9W>#?2ha 1׍x #9V+l󍜼qh3!x|NC@|yC,S>ee?M0<,BXjD܍=]y[>.,Q9?&NM)]'*ևmDiTyHx?l"Gq^FL!YFin֯8oÈӲmLjUizYIMRl\FpU햛>_g٣Nɻ0eEFd,lD7Ո Uv z~~if#c?g{Pp:k6G?g󌸍b! 0mgG^'w73=D2s>6"_sJ<ϗͶoN^DwNr@Xn\=p~336㝲ö֭Cq}Fh4<] =NMy~~O8cfmFW,,8_yX/7Ax?<\_'2u\ۂTPC#d/qs=|qˌCn'In3CDz BTղj:M,J~?/g!;h?4o(6lt -`l>ga"O6ɇ5)iNO!eyO`CV=v̟=l_g cs\tfMmyx=stiC9\mC'=[qՊ._kVIѾ._6h,=gt{'ߣhO><tVY]37alr]ߺlqdiN4T9cfQ^~訚Q=wqxD zp\oԷ(:(:g:)E13l~_w{y<><&f?ds?ta=t>/Вx}5qZό]8hbh|h.jm%('he~+kO eh KC/A|.F az|X2>m4zX8: m}gߴ-kx~^_~k"$1eo}Zw7A+S,FA/ZM4eM>Yg|b~n!/}|]>pgvEϟ/gݞ}y.|&(Nw{ΐ :YܟS(|V{Ϩ{?n?w}2!8i:a(n|"-U./lAڋϰ.>O=j!hkN򳏊|WD?=\?"$xiF- ,1Wyqv7Kn[޿η2?C-{?\'hPؾBV6|>/n2O?* |]Q#Yfgs7f(Y߽kX >VaAfe+Kww]h}_SxM/\ /6O{O{ҋx ߩ3k&[SOmJ\oWVxU3ҢǶo7}k?MP*ce+m0+"dsa[nĚx)"\Z$/O}^XKfnj<;CK1g1n+[J+kp{O'I59'r-O,,-QR5ﺮH^mj ,/"FC)YVj܏՛UȔ##/۳g(iލNj^f?5vu"T"<^`N ^\%N$LuN%:$.J{o2_r./6`D""^;pMs-Rv>3Vؐ7SBۊ[1)WifO=ˋESpu苳m2T.vcL؝3й.Y-6ފK9VH +/Did؄;0Qj祚@ϽXV^KY^1W* UyN"ʋjʓcT i㋽3ך]Wn%w~Z5?_EU[W~NUB,_j'#3daYߏ=zl/QTHi}648Wձ^~o~Q__;}iϓ 迨va}x$rU=(0646*|~DG쳚/ ~Nxka'CC@>|52r+S?ɡ{oF.w<i`ݜK_-+WZh/u>e.^\]Uhy8ל.ڻnFdEeE}<y(okok{/.>/qBECjvT2]MQ3q% xco)scry:^bߚ]kM#yOrp>EBj?UiRBz:KVJY:_E>/"3ϯaw9[ qL#U[C^].M!I Wnmx>U|?+y=z!cW2w&m' dx`g =}}ק۷mg_}U?Z ̯>"4sKYq>yOVvOƉWoC/;._9SXq Nk5Pwe\t94[WwY׀Gֶ i}}a3.-Zq|ug/׭mx>\ +qUe閕/I(fah4:,d~o~?,kK`8*v$"Q&P{_}֮q/s/d US٠8[pYns0kK'J p"Kqv wɛ.Y׷ #+ 8d_}zxg!wO8sfzRFƓ$c r9U߰2@ &nf¼mDrEoKJ:E̼J׶wXWZ#:(+pTp P>XްtG,+Du@=oì,:./lPΐjxSjOMT)'O[kJ!ߐV é9R[-ם.uZ:oU>y3gsV*h\8\@VZfф yW6_HU\A Rarj{ ~JFJVrħ'_ה|XC~;>pb*Upcq4ҁ?Y0* dC7 _z}"Y8pR Ery! %LHZ-dF8Y-73q ,Ϟ'r\@\K<9u9{IL;1mVٗ-z>ξ,ikYʺd,\ٗb+>}Z_ q?kZUN=_XQMfg|2ge[a]ۘwxgֶ:A!}:1+?1p-y==dr&9 ?B^̡c8lϑw?pOwpuπ+Ot# 'PE_,,7(XWM/;3[=~|:e֣cRϟ)ȉ{>sߜm_eC؟Vwl'1eF~}+hiv4Ŏ1%4fs[THFVJ?˖()d&`+z~hN!ןRx𝼞5ʇe*LikF;ܿr.q^+*wl*2ݶү׷ljyb5[MU‘#GTϱPGI$;Ju;sv5{U*JPو,XHz^'nԆ5<ɦtP# v?;T=Ȧdc_kfLmdooml3irC|^z6Qǯ w_ǓSnXb:Te~ŭNi?3gm٩6Q{qÑ n|QSWz,R|_sJSh_0\6:5Wǩ;5uʷc4Kq{Ofw,cda'N߱9;qEN&1ү_;ֳP5€Tsh3OȩN7̀ƇZ\Z #dr!Z@XQ6wq>Y3/{D [@,\_]wPɪip5c|2<պ,ukUРrړU"Ѿn!j]߾U`v8]N$q Y G~}c 1&Fr5S͆XlG6ZX+nyYu G1;٬1:ǑUs\uq쐗 Xdӎ-5`CTtiXlOe;ȿ8юѴ8EV6\s(l93-CJOٸi/4eتٶdXړٶDiOf߯:~wޕٷ to 8>HGon^yVmە/H8ۗlmKv>_vpGgW؞Ka^TAn~Wָpe rnaaz[a#3Z)Z/+h68wU9%a~音|*~_z?d6vM #Osܤ?/'"]|ʘ7sҏfWl{N-v~"[q lBx2)~yG~];2Oۨvr R3댬o^uuy9~rxvo#6{ 'd?;OW;!7S%e4;+c#W^J{Uq}㗘2Kyw=yx\$;qaO9{y;yY٫9{k4PvЌ|d]uBB^ϋ+ڟ'x~Hnf+Wnۥ0[?jԡ;F+,r7 &lcЦ}ܞ,8huqg&1hcq1ζ4߄w~=>_.s-.ǂ]FiX_-_بE͍cg:D*Ixr1ufos%Omruϯ'u7BWA!oᕽhe>Fb+C@nc}Ǯ3 W=BV{K}YqW"z2|7BjO YF{'c<~M+F,k>6H+>pEɔج"oz&I,|?>_\e;kr.y{L '[шr>LC^E!.s}rGvk~3_>ĕOe_;m]e#>(WYO~J>iȫvy1~Ke+ēG>*n!Pzyz' ]*W|{>ʂ)= f>_{7-_Tzy;UP-TuEWB|6ܳ#f>yy}?i^XW'FOSwrdhG  qtb=vĩ5,ƓGN~-HSQ)D;׋*%GIG{gF,i|/tqDՓ##2#"bL Q!2!btZXiG b%#PɾvOaQ "escpBXAxJFTHVTUCU-NeH?@>nϷ1莺~8:FMwتɉ6=Aȭ**`]?w`8BqkN]rpyrO3ٳ[9@{/}{PUm ctyxĶ0:[N^21|l}ڃc?NKȜIJc iokDޣC}6*qOOOEjȓc>j믂zt+|8{9)mk8C̘O^`Sѡ6#!p*1ty3o<}8W81{Vg_&{kG&si={"O^#.9ǣևpFqb\ y'SGz*"xQ}YG/>{a*w~ڦk몲 wo>v<^W<{qFi|m2rܖoVb2&A6l+1 p<5s;+Vב<ſ nιuSL'c~0?ފQ%)?&OV%Z ` >#v43_&b*Ft3|FPH^FD NQJF< 8&_|rW}>X·jn~YܟW,-#HĒq/ɔnc&:]?QV L#ʖE_r͒!srA-EL>81AQ7WP{FU+%y]7 jHuZ)# ?q3#κئd>xeVe~hycW1i{WYzrn}""\^#vCna'+ti2%|rwUKWr".MrrweZG|R~6->o-DY~W}n x/HTޯwu>(럼'+O{lN{z&FlKϻ!Ct}ޛGT/b /~=[ z= mq/n9Aş}:_ {S %!F:Q8OeFοN'!~/,;#dc ꏼ g &\H'e#Vȱmh)B#rj* ? 1ls;wK$03_zy`>+l3 @(|+G QoKj|=f8S40~E-I!V_|! s)p>[ݟ~gzҾY?߯WrE~P̗3t# F;m}tܟ 끪9~%#Shqկ {T>yg4 ևwwG:OgĽϧfydF~&WBvAs|~όGQ3SGrf,4'<꭮D|F-Ψd]g 7 r蛯L;ڷ3L c}|ÿ>#73 G_#Rf5YIu_2yBϹammiVocgٟiJyy3 kKV~no~ekQueoTSKffāR;4uF^O^joGg,\x?į??x;}zm/u]lϓ}}|J|v_JLM__lއ}X4lɞv?}_oޮG=9^rY9i62H>0 {"S}K=T0oOWU{b> }{T%ްuiO 3oOf=7 ޯ{ WKWWL|<Ѿm,ϼ"q> Hq?xZW"cgaQaG!E%k6hr OΊu`H}Nؑhry^\wEGzXEYVJ@Zn1;a8kم⛂OTgȭUFtUQu _LmЃd!7#Ծ~?,,7UGmi,f{ ̓}o޷bw6?VͰzȲ.1_,xkk譴֌ 3֌Cft\XOΞ&i٦}Z_l=Ϛ9[ 6\UG.=X=ƨюэZvϜZ1sl[\>l]:6hV\Y-gLEo8hcM 0Sbo&3ed:d:^vXF;K\GB_%Z1aV|{o|_w_Z,x{\w#:+@ܱZFKbi 4CxV[ C@gLtYkxwvS-߷$QvXνux? ?7*&&']8:q!cE(6ƞ*'x= H{?[uZ+7w^ lrUG^]q-l߱QG o1s?m<|ȯq?s`1DD}:w;u8,? ܦq ar]^xXYt{Go3Λ;Ϗm`ypxwe< ڽYX=A 3~Q=-߸F/@ƶnGa Iu#% ]Z{P`xθ[@5;%- })ڿ2|o<.n)K-b}i%r>)OW|.ٱwnao)}J|Bw7}]_7I`v>y%. [ٚ>9jS 0MVZByzNC{ joZݟº'?}g>uwҾ}7D82nj =15bR2qwyN:h*2A\ ҼwqDAht}_uPַ6-Mbeotzւ) {‹k޷6մ"iƴ; X p&f)~YW;JK.H.Xk7ǫxjt33 R8{<[+ɞ~GⲴ XIR~KvRUtp8KrclB@e@%Fn|{4p]q4(KVzg/Y0klWe$LRʗW^|!K[${&܃%;0Xo :>',т $.c {A)6}1 ЩtӅ|qPk3B462{$=A}wYT*+Nc;$nk%@* d)dewC>4WpbFc[ ebO>1xX0QKG|8 OB/ĺ;sb0OLL~!pv<#VSȋ1e ylE[Џ0FP!:0Ǭ9dyd)%߫]8}vN\01sG%}HFeTA+5qzAxb 1]G>z1_FYox[p/1^D\CF[\C,+([rgNc-#%?VfSVqk%a|`a{_UP8d{#ɍ*.q8֯ U }@ZqCcG67*f>9׻tXV:G²*J^$ Ga{qe{G_@033L~ssi  mrbA<('f޼S]687asi"qaLD8X7@,63U/bTƣ덑V 4a?o"qbĤW&4)$չ$Z}$bH%LzFm]iSF5)uJ)IbԄ` P[9G~0vf[a7}d~M9喯c\y^DG!#lo!/9i`<&q?xAAƢ=^=f&O !}\94NW`^lw~"B1+0nٟCĥ)\b!𖏿tdcK}T!ťxOB- )p}6ri%zA܋xōW_ 31Ʌx Wz[#zsBL9yup~ܢ<14j'q M{Bx0p;Q^yyO<\Z1!Ae9g37'elN3p"IsZ]W87SB9VgHߣhLX"<,iӜ ~)D4׷~_տ\AĄī<jMpKgIyqp b~/mH8ؚ߳sW#bbJCj5 , f{685>q"Mw+pqr~ &\B ?_}Ҙ|/Z'Otbw)WQ/NZ 9ޖfBQErACAĠn0_xulqrFk=!AEⵞ~S_{@Vmճx#\X?e9~-~s>x)>!5>cUYʓgVUV̓xOBEhp䩱,*ӄ6@/Lovb9WGy4>8%yvDȠ>?9?xuxB}WU0ߏ88P>CY]8]f'ǷCQ5as>uh]"k~QyQ=?065&Npك#oOy{O:a+˷C(_ޕȒ<ѡG^x`mo(Pzv1ޢpX(_|w<}σy\_p4xmGk;L86GkqL# YsYJ',ɫ~>ky?kHYw,\MVН8(.Ofz}c3}`@A3}TA[qeE> leO7yisIۜ0v%kN7*?^`nX; YiƫpogGcB*JE-jos}qߗ72j4U?5ޗo6! ymׇn좃۟ax64Qfs{~vx{>`p0E3=S`]OZuqSh8O'<ЀgDӦr{ēZ G&5mrns~YۚǣY4^Ʃآ SKv=Wݞ ^zXc4l/X\_rm>ċZ:ߺCSp= Q^a'9VH|̴OC? M9>VM<_6x{Ⱥ|[Y?Uޜ?!v{1%#)\IY'ݚQ_bk=suPڳu<^A,8x4bvhBhOy^󳨽>NT#8h>~/r)Z/qJGr/ 1XyN_|!Jb2!uivd?.V~t\(>^7kw@ o>%goQ*n#+^ox?Oi7,9O6]Y&lwW<S}L˻uOI7 z\0ޖ/=g?LP 0C}?SJw~W߃uTk=st+yнxmgH\{{}Yk{loho*,˱}頢ezt}<#Kڙq L?қ$m+s|ʾx`֣j>IG ã=]:HW-ow=L/}Cڽ :5ߗF{;.Χ=]/w FdzGCǴcYx:W3s:늺Y~8jEG{oU? 9P3C_`yN:Hgp4\PZ,2]t-b"ݢ fz$1=^N݄8_&3Y߼?-'L<\ju^YğX(u^tS#׫cxn@O6b=0YC#]y>ӽWNnӎJXmPzz,3^]v\f:j{C{+fLJtՎp X~or}!ϿP ȯ+xCE J:frezVeI\O0 $^/~\X~Ҫ D ad OBRO_ϯg<}_ J/7~_x]n_oW^Su b;zwWשȞrdЃ]Y1/)ѽ2Z}i)oU 2)xps$3 xr9)/le:^Oo?|y~c=67nr7WǷvY(7X^S>l?f<Ϙx;0 ś!@E][oOzg7{+p!qK`NK@>Hi{g4j<{۟?F{=ow/"ϡS Eu׏K Vn_?2G˾O7z)}ex~)#@Hgl{}J~ ʿ}zbn@2 &KQi-&R:S?Zxt?dC?Q27Y @Ps ?Jo9,s 7$H@9Byk ]_߻4?/l$>׿0 &0Û@CP35+0>I6QHO;op2b+}z⡐nׄ^r^Q޷y|?.%fnLlMye(4qe:bo&ywF(_ fz _&l/#C!{V#=/H|WoflV黫pIֱm5$etdž/17fj>k` w2~2}Z # b鸝/PlIPи+RTMP8NJ7z^韛WzgFOW9kuC D{b17kb s,(4c?#p[!<~#]ytEzz (A}?N_H1.7L>Mx<\_bF`b`fAy͇oh3{:%m4+Wz ʯǠz.鿦 ҿ;}(L_n&i8䓮t&/pvߤ*;m#}ӋńțTӣ o1ħHL=^uc{$0MI=ӇL|O~ORCQjy^ftEwb_IO|*]/5a!fx}oSV:8.w'锛3"oS.(LdKvi]e)h>tEx3=2۳+o_Ѵ_/˝MG"/ݟoHfUOC'b\rB?NXFO{5]0'σ]pMa|CO:Fޟ8ux2=o}1=)';]6ۄڛ}Ӄr>mIStJMCt1(ptZCY%?91WAt T)Qy~jvtNA,~x7*MQ=MHٙC\(LI}'e"M9D N}? =:*'4H~¸!0/KBሙ׌Ga?u鶝Nq09>V{y P:EnRӈn2V:ȇG<&?=1!!$ !6ۯ:%51^34?l=.lb+ϸD׿oL_y6^]²O"uo:ަ1]OEg  <7?~e/8:bt ?G'/FW?Xno5Ensgkh5L#f+D{ga:\' nboag_vD8"&CԆUoLߨxZx|;^|?_關rHϛ}o?k~x`T|vC+g~f<1gNa3c3waR؟pc$4߅acn<_a[e= px|?5k|!}<7r/ȣo)N.Ҙ~M*ZA)5߇QoD.MƄ>Ie)yDHd3$a'#4_R mU?tɟK=+ W8=f/XUdR(ebp^I?o2WG!$b!<NLx~aNq h(oq nr0^C~k'۞hڎBE w~n~Gr+n܀GɖwoO^V%Cg.z q<ᇽ s4L*EA"dZp xft5N-oY^`J^3\E͂}an]ü*NE[rfYx 7j$tE2Mr8~$ays;(*|gY_oka3fByHm-CzHTD0y G3 s fϝ#* 4sjF3pmʜ{\ZaV 5eM Ϛjm@>O!le3K0N[s fHmiG)FrlSed!Yj.`Φ- j|J 5t.;EwlJ=f#S< &0Ey$$g#dw%=`"d 6?4[y mH[sKXm ȓ-ZaӖV'߲+w/ͼ57~G pS,w\n 5d G3KJ\ ϶%ǂtfrG(҃K1M24%9ƹd0ϥW[G`&[Ur!EME#|\JiL # Z>wXDfV-w?j,cJA i/迲RyÈ0ჵJ>_7Bza ,«;)m,Yb Ģ#t.mbhIpfuSrPË)m¥|4j vLqz^0Jo̧=$p,.|c+x,M"">=˷ʊߺm6LL%֖+ϋqwR7#CcG. `Ǟcc%FEY#llR3/u.?}p¹/+>7 $s XmY:`SiE:cB: NNVl1x 3ęq7oFywt| uJ&p`u*[a O͕f:z'IIxStǶnL *c_2UM;Rq323ݼ\Q,hLqf#dH2m z_:md5( 8ݶt8?_C:];zning6RN㤛*usƋiQ{))^)_xLjEyh`J߿w>) R#IIܙ$ȥ[)䞳SWdU~sYOf jEUH]t3rC?οvn懻'1 x⹹z9HS)*@uiAn` ;i!㟢6.]9, ِg'!tf?Oܴ*%7>4x+T39s*QmX1z+&w5ÅT [MFUa8?6YtnlmL(q^Y1eAu7$@!A|%{BT7(冲ixaj'dLy8o?NyzKի][n>|"8Psuo f20_ %D/-6j̧Y31}˫x[Ue)jnD9Tz&H$zp>8q>DЊOT)72GǾ"Ezr.N7cM8 0saCza  :|6%CZB|¾=grײnXzw{`V2~<*x>^o l.y,/j-&Mq}}Xcm rc}8F*ɝ47abm>eM1#>WFmOWݞ=}87iE6u}XX'*bȇ`EUADu-fA ܊/O-;kW**iQyeLpcP]fĒ5&-\8cm#} 1rkTwO9*pp^6܁V'MtĹܻ*%Ĝ)ܝ*VppsaAG×70K=(;Ԁn!- 큇c:Bn0q6G؋&N3SZ[Xƨtv'r;Ԟ)^|@}U!kB'?CVes)ٿ!7')9> 74:G8\8qΑ|c2_>;( ߗlEg=f{n ľ/?ؾ>q|P9#˝ ,Q`5HHL;+ |EFrbX'RNݘdaLd&A~kZdLJǦ=9^M8q+\=9sW)gCu;.+DvtxQ~)WDMy jL\Cѯ*q;JԔT\O\%PQ 05 yo;Tґ 5` mKtX '"%tu{U5n ,e*FI'6/բ\vշ ߈ML ֔ƀ;EiZ;ӾgE 7Fɰaj)`D_A{U[Pg|}R*nP;$ImM^=hj֮^%NM$ [Bc ں/X-Y ^[#(L!d=~b_HLFñS\hw=+Ï%q[<#zg-oET{oG{$FX.Wv'<¨Bȃfl:An {yU&i*m~V|)L& I|?_G MtH/i_|X->6_䠸e ?p㷽Bc?6({U'瑽R,ETDu5Py* ;M}idݯ;mtⷚ4.oTTލk3<нa (ӑn@B[Tep{'>A9t"Cϔ+߆~uƕ$_4t,iH?=ӹH 0,/ :['|kV>{&$NeϿ }'KJo-ʄq)#R;(_@=/[JK%zÖ\Ma)P#s:ZbחK^[ƄiŮDla3zhVx]9~?u좃gy;Hpy@phYUG5sv PٱEv@ -mC}:ӌu,*w0} _>یxeg%`ct3_zu8k|D]~Y ҉Jy<ЍsTY -@ gM [\*qJLUq{,* +z4>1u|/`A'2nR27 9n_q# ihaY Sqy4-16 dΚ_8Xqc}s GA76&i)32*Fۮ]獡+ 80 _Rݣ /xZpY`6&PFZsxݷPn<5}9{g—Q3ٞuX eW?l EsbW ߀ͻ>(T|xFpkt`~y+]++q%>6~= Q< QwҜV*qK}P,ۧ|ӑxp5o]⼡i*^6q6x>4+y;`CL4uhL[LSֲijC(%6u KjCСQOY MT^J7Z8)c2$+]_~=ל85k_ى5xq,]nC!,'.E8{5O:p%V}]|u10snx$E8Aݍv,ŭ s}i$r [Co#C_`8:LwX>B8V.ʲicm?5}'?`~`OϜ? qi%/9]%hHrB:llT~dH*/׾ߗ^ú18S9?|^bҗ1q|e74s6cܞogJEaQ,78CS_}1\F`g e?|ԥOs1J<ċZW.)_+/Ny[qezFGxQ\6نhqrw WwI~X~h=<[ZW3ݧ;}x?Ǘ{/\-M:5t\K&ɓ˒8{fG ayߪnn'&piKVWG4ˉiwUXQN@`|'?,Ϧ|<5?y|N]|y;*1^]x od|ram>дjyU:juk+" Yؾȟp \ss~8?V|H' U^)oƨ<6Y,)hZ>R_>/x8JMiǨ`|O?>6OY^[_o]'OFʛ]J )W:U3FuWԿ ǵyx/>#|Վ [^g'oOrɷtQvs ,)ң4FxM۞vMXOyzL9SnDzw+vqcuZ4tUŁ jT+k[0wu[ _U j Ӣ[$IDj1\\P@ iD!i㮼!^(ˁԠA›5/+wiCԘUB'q !gVќ@UސfqD0Re0,n/%*z'N iB̎1=MbZ^lmsx5 DL)g6HմWqL-4< f%)Ƙ#Y?-t7?Z8&zeSR1s'𻴷dABqdEn*h*R(| r7p8x3BL ^.9ՙ0vaRu( ƫ*S(ܔZELa(vTvnҞPoTϼʉBޥWNߖ$VQ0k| j"6<:'.9c^~~Ä5 7g[P1Џ4aHL7A0I=*9UF$'A \ӿ0|PYH?PQIj"k P "o:e,\g Qi䨘N`dQCa^AC&: PNy;'iܨN~=@uF)ǥ 0_/ͥ<'; f8A$}ŧh&1hạƗòC{6b&Oڢzb4#* _HYDҏeJAپn<Ծ* By"^q1{/SH1Tw "x)/B"'}x(#p)+<'3X_x"< 5F!oCzMD%{ ``Ĵ:1,N>WHOʤK-Cxw{)gjՈk6$>"܂Jy \ ܅1~rPn)PMBbT Bx,BG>U;S %h<bRx64M:Kwq+Q+sg sY!9Qwᡯ2-OBn1"cCH=]Ė;T~N5`76MēYٚdfRϟF\΅rLcot`J?S@^nw'uc^P8?ēa.}3]5%9Mż\dNOLO4(0xy?[DjEWyf6 M@kNz$ :79Y7~WN?xa5 嘂=6iFi.>Z߳eWuT#٥ 㔦LS M+w?r$n3hOF1J>Y{}[#&.4vqәk! ֺ3$?s kC-Ek̠1.c?@?E `\. ep:o@|ٷA2oM:xhSUwǠryx,C45E-K?L=4AԃNE}f~0s*t3oܞ9Oe9Su?IFJVp߆. ^Ex}g-߮$n.9O)7 9W8ʃv ˘lFz8Wai}?[t@'|t07)TIf' C8g091̱0:90wi[p0Ƕ+qؾ X/8]3ƹw&;bER묱$ya)CJLxlI[&S% uOȁ{`y9krpOe]Cֲi9nrP0S(g2JLJj.P9@ݪ7 >W||l Kk̓r,c`f;~>Nit_ϘX% kL>lJNm 'gt °SJɁ7O{7,J}J lpa(v:n)6ՙON`m̪^e@(4B.]?eklu@+.MՀaֳ>p( p1;Jg?R U|yNY8qRf;Vc87dz0'=g}粯WlZ64`8xJ ^ɍ.ߓ!Lm sC&wcGׂ0>F(Y[?H8 1=/:kkdg^tǃG6ʡ~b:*== Y]~ۃ(q[㍖[eѹ|t׉qO~cL;7N7${_^ ĩ=:yj~#YWfJeoB箋`Sp̴G eGE~} 9K6"6<ymPb_ZZX3Ԉ4WMp/ IYݞ~(QKs(j<&O}|5ٍ7<,5D8k(i0wFjv6r*{?ȜoI^ڂTZ|^޿g8Vk'Ӓe&VrJ][sʨ9ڿ<>~lʹ`Cd& gF/ibwjS#x[X4&܈sLW_?l $X܉_pڜë";016~7ϺÎ=2:EZs3z$$8`^h}J8kӽ&Ky?[4F܌E)wby:W,1o|2%؂_@"OYsRxٔxw_M d4Gg8pg8??-2qC^u4 vP{_ Ĕʉ9SY~X?ςyQQǰ - Ηܻ'| PdgN<\d`HVc$ί0z\KxǙuHr~9 ->\*5@{q@T'n~FT'nZ}KM:^]oshV3&|\ނ>rP+ \ ĭ.Ὁ/Vi r)|~_l;A-e?e6=#'%JSBbwN\%,w5_6$#0x=2O{|q<2[!gU2IƃcRqt|"#TGȤ.\*r9fsfud{{\ٿ&LޚX# RjFY}P, ϝb}2/b}[ xM_p?֮hqq{sS c^׹J\$:,k"hx?_u%WbbO#4e̕h{?cIU9M]~j\M~3=8:1ͻVĹw{fU[*y\3 Z"|=5^P@"VjIoŗ+lIuSl{\Vu#&[KFmꍺkԾw[0'zkfm-?M>nK/f{U^8YCeNTj"ۃeYno6|_+l :}Ƌ_kro~tdK\v>kCN3}~P39~ #yoחߧZ7͍=-^Ӊש#XVtD$WX>e)8661Qϭ@jAᒘ IJoAaX6ښ~AUmCߨISQ|SE9׮}xҵDXvejjyS8d[֡n۝qBY|ưʏ%q$wΗi;w:V1{<Uyў3<y^w5=Z(q\n/)_n(<̓1/dz?'G\qWܾ\oxد3O,157*hpTq_gh{~yxd2HL |nϠO]E7a #:CwywL >x{ضGjwG> O>&}iwRzGBB. L<8_tο\,О[s$Y?,r~1·s9%j&>fri=Z}d֛"KyVDwER~5Y k?$D{~7N)<ޡu(FyYiܔ op@]\]z;]n(|'yJJ_|OSyy++<ݯzJO r@=ۻ+χ'jGF'ƍ~;ΩJ /3q1q_#ϣߧ:nQ/\yܘ_yΧ4>/TY?J=\j4pw}q|[nO߿r.?ac@1_ۢO;3KD4*tN()\ϗ>/{8S>_UXW碼ǫ~W)to5W~|zٯz=)_l>?o!^ߢ<~΋3}XWCv/7I$q|y FY*+UX>$,aIaǗI3^Z ^Rؿp&wp'#_ ߞZ'!jQCYE}6:pkd#O{N4z\|Hą)rM-sۿ=/.W@4'+t#M|C{lg{Y}I7Ns<^`x}J(2퍒ʽ?R?]dzןXX?{OEn˾[.w~}zozoJ/uw%~Ekϓrd,󞟼_?S)Uo|3l_}ob{>/x}-o<8gQsK/by~>܏c#]y/ Q|i0 '~1br2.G^k(cq_s׌=W?dƘ}!?7ˏ*key:OhzO'^*#[g{p#Uձ)cF3 W'_u,e,a;(޷q|8ޫY~_+8۳aQQɔ; 7Js"?g=].GC2Wery&ތzxƋ}T$e}ͿGH\+T2 S[?BƤm{^09꾬0G#v /.gRWi<7 j~Lot1i5%߶+:sFx14J~iC8.f!H~\F19o/mɈUBjDؙcT#/u DT=ǞH.T2|V8pe2TڟdG^e{byVi~_OFWhL:ͻ䪝,Ɖ5^:\g2e[@C2[xw Ϻ;h˕z>T:/x]&`w0Ȅߍ,PdXv7YԍS1|#!|]凩gnCFj oV0UKClQQb=+u_''O_sJ^$_~Ҟdht%{]ƹ bX`q< &[p>W9:C$_uq UJ1dr39 zRnϳLw19b3cvWtG+R+Ss)#0Tƅ8y6BuP2ӻ1uPΣxLvjc(Y <m?0/5X߾뭳}?B;3٬4PNƵm<Ĩ]^?GE^+g|&A/攃Vpg*pye*c>dêOk쿫T_/]_<ɆQS4?/v5_[MGqrqoyg2MGd_ēL ;f.L\L;ӑ =g-b>[RX_BGD;Sc6p= v,JFܾ`u1˷|_nNY?yn{;9=q%.ܿdof*&:df20.J3>>? y[[JU7?&X'L؟d/uޑ:y;LJEp*.7h!s$,P},ũsEB' 3t`xVL=TQsd֍ 'Ygt_nJ8叄쯸8$[&.d"[cj2P UU? 3GV1.dƒk7P>UpȰ7(3 YNgO䏆&0(멸֛\ʖ'E㫑.H?jΞ C^=0v!v[acTˉ93WII A*=*i"9qv;r<]/j?|6g]ܘKXMr[q-Sj˹6<_Ġ3Y`p:y 7O*gaj=0܁Px>C39t굅>`j>ݨ6[V_ߝW~2^u`zlsm_!lf>Re?R Ysy}­8aN 89]rrz?*. 8xuHO%pqj?@qOs}|4$?U'Ic1¡M+~!01۾?<:O|Z߼~r5ojE`λ;> v}F2;w?(^f7m #THJ*W!<_Rj\ԣ|~+0\KI}?Vg/T"m|_JW,x(jvyWt,YS%_zy&\q_7yq$]TG~SN˟;oXԾKZ!/śU'o=0gxOzGQ$ػJOKVũ<+SVjtu8Ǔ?;_yMW|KNE\k {dC u̩!{b3fX}"㛺yW&V}?UFyyy\ݿ[>x,+g*7{O'H\_g{Ӑ}>ޗ?C\iϫ?NJ=HUofW%_Mbaf?`~u-8>'~`Rwwlt{Id^G_U [_ YƏ@`?}$߻fa͐ł 텋I{O78/t'F(@|ݳTz?8鑟zJs9`Owa3oھKA}006~۫7C385GE3!aNŽ_.R_ofE֬Ƕ:{/C+ 3pGZn}M\?=,Ki΃:\L񿩼CԀ/࿞^1wk-%ҨFF浝"-Û̔@eǜo5  x$9xNHTKq/؀&w)Dq5ː4S*cqppd:8|'*k704s^o| nWPR #[,Ŷ-pk`K\.8;} o&<×^z$^,ҟM-:KUVolhf|2`!W" :z>ݒ=>[+|xSv11q '-HyOZ(Jm^f^ux>sɈY}+'6]l$ԿO\M2n9?Z5g(3qSD]~Ԉi,mWY7G= u˿GYσ riqbbpiDm?Ğ-Q~Ù|?~"&aO7pؚ\ޱ˗[Ƕ3'XXaIOӜ )H*_ꗼ{}W~ogSe|Wg,w؂ݿ |SKpRΞVޒԟ3< xfWL}f~ <8ؐY-c_f0}?2Y8{Vs_-/(׻O4G{ʲ$\1\ÖEx񻽟kyӗa¥Wsm~<|sXX4gpá\A N$^?|JCbͻ z2gb>]SySx^)SufH;E~p&l(pÈ|y0ݯ2zw[|y? \ȟs=}Yɫ8p7Y/w Vš=h}bR-|Nlp2/W<|Ä੿_xtWIz>ګ߉qj6uy? ʾ$lї7q/nO}_ mϗ9}MW'ݟ}黿sߚG+ɺSqܻ=.}˙_˭$>Q!z^9?_>Nz"K C|1r'-__>wqO{w0cVS]Y?Y!j/ ÙwWs{b~Q/G_R!;<0wUb:0vkje8Xԟ.]͒6Cg}`j 1cFՀ8( c%L..ݥF7:`z,sU0S L|99xl3.xK jEP5gX[Χ+yR㭨q hJ_t|+^z`w@ÂCVȈ)tvq`l+vc6@" 1WԾ qsZavPWZE5X/;9VP[V_BĊZl?0Da'ƎJ1W_|90l) my.tVYq># /浂')ޜξz)]ruafT)9_5Gă"JTrǦ*]7S B+L쳲G!.lo[@^F+$w:(0q&KNArSO֏ 5@5#-4P1+I…=jp-bB5-=5̉l1<J\!c)]|)מT5\00Ybkr4;HDaSx1HN9TEx7fGѼ:h iœr\>?cPݞ{7ekx/w(hbӘX;E7ɳPCoN`̬X "qTiQu}!O t*uff~1*P3#9Vcp:, {fdqbKGNly-|58>H2OCw3*}p}y~'Mx{3BhA^[mHI60i6~oٻdN^X*dBfݬdҞ&ë,:x?74XO$<9ԑLߑEtvtO\>)oܞMo>ip'|O^Q{vD+K'<"hۑh٠;tyn?0[Ыf1i`Hl"=;Qk\Y9wÊ؝Jj-X;ے v(jN Zij`L#)~zu? ̍8Et6unl!Ri71Gtc^Z'. Z=k~85\\1Y4bE8_|+>iH(xΚǑV5," 0_z'S;03,2}r]H_\o}󖦲wYzإ3mΝliF}&WJWa6Vm;hZ܆ҏ_Gv,lIs5HNN$IJ;?eM.ޖ.WE,ڮ_집$2qȄtZ)7n?j2- w?ҭ YxB߯rITG;oੱ_,Q5{]ho{g}_a_&KA*SJ*y{i✉ޖ*A'e81g,}EB=\{,,ϐjϝR+2;rrBj~'Vt}ۏTB~IYgy|&)!;R֌4-~L us&gi3iLIr]V#UEN|v*-I<^Dž״a5 s0z4WMss_v1>8^a J҃G֭:)u3iPj8~> Lx~>tpoLz߂NiA$ >j|V_~_;g(ܰ@{mg_NH\dR*]>]|p\m`ζ[̸_sYɋC=wfgϚB~|k}Wa+`[Q{Ѩ8ңnjV2k_]Č9I if<*ZkyZϷZǤ++t"LqR :h0qWfxF{Wcg W߰μ1YjV1XkgF~^7\+2%Ы"xy -)k\ 8|1 4quk kWP6NY 9i\Os:yͩ~GypN}7\DmKծAs:/y/9oβUۀobU]8ͷG)_ObƦ'{Vst/cu)9C1k~` !yk?8VxOPchD$3O"H;+kK_~@#ɬׯR~X_o{HۮW'[U8_˿=[|;_ࣥj|=e)XSKƘsphŲ6fg"92S?j*j֖ 8՘sMw\T#G>c֤'%)fO(I[v ѫ5d,{Qszś=@9 g[]yڇZݾq{vpH˧} =h`癓2=O3k5Ss{5oyqgdV ϥ" aEr==aS z,GtIºL&oM{^tQ yp^O.9"\Xm9VWnn2#mw|>_˕b2gpwA{2cv}t?ë,opuOgn$Lhր,㝱[emd Y!VsqGWr1xH<3b|އ{gS=_/庎:7_lj#O:O3jKG]ϙ?2=33q=~O84-{Oq2?N.8\>htx>!Oƙ1[>A/6ܿ^Mq+\q[޹'#S /VX'V4!.ΖM|D $%Vv𕺚-`M?KYHɭZJ3IR=} 1?$c֠8,OPׯCڔ%Y?L6V!Ko!aXJP-u/V?mԧ^)w~v$>U{xcW{l,QUD;3L= B5PU9Zq{|Y{kcjr4O`}!/pSROE#[$&O2ZsYfD–e${¦{/ &lBMJ[{F>Q6|7?,f={lwī[M;(?36G-'P3>|3,2ǃ܈;,;Qfǃ-z>x)BMU0pt#I/UDq9"da7E:p׍(wJ}5{ F1#3Qlo(B3@ߗ7?2,Ļ5cB96GSbŶY ((y6 'we<%vp xQaa_,}?~/;7+Xgzd:cߔxxoQOQp'Qθ k>~X`XQb}`!|fYXǢp𠿪XȰ %?RŦxH&[XfLX8-BҴ\$9Zt[tS3"(~{B˶]?u>eB]Ri!'[B)lT+>$-ׯ"u\ O:t$.Kuotg_ZĤ]{#YY}&[.= ӕt|dgT1m]dKj➹7W\uݭYwIHkϖPA ժzB3H,yv~4e涑rD5OU(F8KGb) QU(lf(w'e\FSQvE'^]?vŸg@n5J}5m}ԲI_AeYN&Vfyk^y_e99Y/$v9[3Y15ځ5=Wߌ,27amMiܫoΓ{+kGkf:΂M֭[c5= |Rk,}+dqtk=ڭybDx~cqZՍу͠.>*%t 6Gn4&XghfdMhn1iKy1,[Z?ߍnp | u0Ks߁ԍЏԮ G'gr|?jD;+{5ڻ]-ʋ.0Fu9Xdz`?DH+bPt6H O MpP5LZjD9MP!pDt9l<8Ajsv \l`P5UMǩ)"fCo(\2^ j`?gvO0#ě*y/A8ƔS܏x6Oyxrfg柄Tu_'*.f?a:0IDPiseSZ^9 +0:OI*Q8 !&" '][G4>d5:ФRבP)_;p zP&:lWPYO'.'Ѫ9ɝ{ V+cDVe;frV` T0GbeO>W~PV 0|Vw%If.Lrӎ˝Ld7tpFI}{O i%W'p%\s.դ]\ ;!]rM(ے ?}p(0 *!W[%Hڂ>B\ړ/fe[iwx Rjx/@ @p]8ŀ. *H+ (9/ttW@;(!P¬a%iOڶ~r҈8\#[qă{~TG)e?_Ұ{~թ\.__ꌏӦCb'wQxKuiWA~+hf Z x䠭):;*0e>Z Rh^`Y.F Lp<*2 [R{]AY8}Ftjin 0XѢaba$/S?K;rXbf B%↎)l&>U j< 5:fqlƉp-kk!1se9|Pvp; Ey{tOK64TJ9>(׬VqnvesQwnZS{TYfISlZ2"\\AӺE8/N*n[A >Yno]>;>̐2#Mq9XFb sV=?gpO%IlӉ. Eqw:w?!GJhDeeKk>EBJ7';a$vי>:~ wݛvC:zor 5nek:ad~^Fvv|&#! 7$DQhm6ķZx+e!eRv/%E&;k9Lϴ?kChd4>0DPUґ(oڧ=/5kvŨymyz}\}aߗs ɑrjjshwvCjFOi؏oh<R?ȹ k6ovnS_r,7fwC&-7a3}HzC*!SCmؙTm2Mb?|l7ΒUx._zn!bkbȊop]ƃ5a<㝟k>Q[<_RӒ~)jwɫwWΏNkniHc o$Gd~?1o9 9=dKry8;{+W,3Ÿaslc"= WMrr>|o,я be"DvjXC.܈23+qצuq6]}y 4xy}ύ6 -X7D7m3( iY=?7kSCuΊ N>~ߧt ~cd>Og2&S4 %<57@8ŵyٺY3o|FUހd(SYq?R].ѐDߗlHh@eՂY6F_."Wa6JupGc8IuO}6xq 'Oi#9Tq*H0DyeV;U}?Ix ˪<;\Siq0Y'\;ܳˊ 6?`V}zaq2>HypyIU6=U}OF~@*ЮgVsJ'V{EZ][<g[}ˊQ0u8`AxHGH3?g>r>oCV"o|(k}_>0!83_Fysލbm:NpCtM]moqۯ>7F0C~6E}z|5~khWxkX8}Z#}w֟?ޗ1($ow?r}c~cwpw05gy_u}U|&~_|~^|T}lX'BZFq.ޗܟrurJ|~Zq|Յu(\-69W'Qevg''>`|~_n˓ɸws¿+n7,Ҟ|.r3[~|1/Bgы* o| 8>[_t(yG%{?rCvUa;K2oWD=GJܧ,OT vgnt~Y۽O')xDŽ5{~ss~Vk_刚%#\+ݸIu,%Η eЕת8S- kz/<^8WRL F}ȓT ,?U&ܐ;$Ϲ=[L~zʾBOS!8/}7HGAXf ^9.<+]o'^|a}޿t?)tSMWR_yTAP};H ^HHCi[ANXF~c ݠ.yAFIXA;]$E># wcjGtL)ԓ W߫#\G>9t9K@Kf@9+DZ\9сd堪Rn}`5Ҝ4t!a&].y>fQK3G lBRL=Ge4}Q}?T%϶/"#u/]K=t-{ ZjW!XǾQ&<ܾꐬ|鞰WvG>od|^Ec:ϗK$ OEף0a뒱\dM$ړ?ϯ/0_2r dU.\>~0!?J7=R݈C9oIP}Jݙ駲hUγGtNJWEq" T33X/GA0wʥ3?gL=T$'xF537|Ω3iH:H#6ٝw\(060r(8ugsӶ ec. $!@%r;N41tAiyTŵ6vׅnאv~əqw~*}-wL%?}2k9V3)/0Y.{M" pZXK˔M{.8דtR[1VQ7ۗ;NgśNʗE$'՝7KҰ1nV T⼰Ezy㬀K >Eg%Q:5Ul_ɿڙ\Zݕ}ƅ "qÏY$ n%E1?]7szlSSQ{K=Dafv萰0g[-k>~H6o\I+Wzɭ+2~gn||\$^nǀŽҮ>Sׯm)9d|~*x, Mhu zxmZo}h`(`U>!9N ]: /CBݯ1"Gs'ڸڀb钲\B]\KU]WE*v+e2Jᥔ[Zr}tn̙ݐzCSŨK2I49]B=ߕ'TJlB_h3jn,61*[S\ARZe}Y.I2X-;"ESU$PZA`/Ŗo#j.mKP)=\Wi83 {hsrn[eڞ{MȻ-&vơds٬5U*^QLF76!ӹHEu&m(}!@s117 kLZ6O9S5wF(իdjzjUȓ 2 8߲4п|EVIƔ-ݖ|Q͔u΢tJV99H2&al/{f׶;ՙ(&-$uFp+o; gly-{rV i@SيHgi- 7pсuVE·yȦW5lpEܕt:wOl_읐h/Jmͫb6$akxnyLlX7W[rm/l(eڢ"S&qVd!Ru +Ep6o?nq,D-!~EB#ni )?% 5 MҴnc7fpD-i+9KBk:٣c}Enɓݯ-hRJ5 v ^`~`n/:-Z{2.ehzm{^\k8y8Sjs}[zG!ѴVp8[R( āӪ*O\rOے8$AK2Apȍ> ȍ/ ve\=oI(*ݔN}_oG%ϰ,OfH0kYA3Fe+Rbp7##zcK b,+n-+ )E9Je<4|HD,W֖UtO[;W)oֆ(S:D_u6/Nu{rql:ըL0e>s$ #HB9Њ2"a4؁&ov o+ݶO_)$Hدv YD 2Ó6KMŎ i6Ŗr𮁋u z!|4>k<w+"ThSQ_{r 3c3sS\}!Lfx~̨@ !3u`C:G8"ֹ?{ryv+'G]Mw[Tq9~,9҃#RّlU\G}d?DZ|7  |۱"Auफ़J6vSB74$؎9P>}?< }s8ooˬKpۛUΕ v[&&(lS?C/;X؟'vt^|(@ʷS.⍈xlb69(M2@RX&v )`emv0nDLl"814*[&ic?:čgDqF1O}qh93iFE~pC3a&.&Z =q"rXw6"fǂ &[G[[nt:e%|*Nt<)2ط! Sol7S}>Xaxbz"]U~ &|7*2C\aQmO/Z9)>_<~LvL"% D\CV)SgkC=X222i'1lN)}c|ɖ9?d~m![\UvggC#\xhAZ7!E[[p}&*FǟWy"yޝf(5(:_EQvuzrfI8=e<_*?Kr>j el*%uA;9ؠmr^eĭYnpb^J rI֍5LAupwRl9urKӠFwc9$8sbC6;1'6釜m~/q#]`{"]O|8N!I@}s0#wT`ߨ:$tc b?I@:9Ч*'iHrHmE}ahG5VnTmU,!q/KmC|)[ѷإf,D}fHO{q)Kmj;슒:ݲeI0YQg׌tJZƛ]QZoYB.-^F)hJOv!3{|/=1`_ "fW`o/{>qe:W O^wKY޳Q4[/4ا~!?R HN5xs|=қaFmk r0<+wҡMN.n.bK*38w/>>![ )W ֐ړ_os?Un 4['N6_|CBv%}XZϟ6g3ۏ-'M哾/9J6~7 𔚦I~eLϸySNϷ8u~!6WߒV#CzοiwG xw^k&~yboH?s.ϸ-54|q~SM:5~g(&+[%EA-t0ΤkVx旝CAÞڃ2}vB/v[{`}>yCE \|9?{}a|y|3SM6N>7}rj4|_rsS[5:B[)W\6_?>dSO8wSxϫ?X*ӏ3QS%62qS|my|Пrtڣ6?oۊJQzbj~2Az7=j*p+1ee8s_WVMD s5w.?{Mڸ{(ZCJ:4ߟjelS>KQ,s~}׸!zj oh̴'>wupf=߃s^yek%/? "+llB+h$K 8'154#d>`Ŋ@";Xhy='C$衫!Y$خ:ɴ]YgFJroC+T3Y`" GoXFS>N, e74a[򍌘&M1޴/Nmnr=8曂`i|a W|ܤ1Y?qb=$xܠY` $ci14<٥CP tGpWCި{~E"'2,o?&k}Hq1{N5=ʥXjb/??U}q™%cI,8aU`! ܤ+RαP|D>\:zYW>'O:ny~t1-׳Ԓ[|-I-;7WyC{lj7~W%8^Ƽf^z R  Yu*Eaָ`w[S0pd[ })p)W}m2LT?pgLg,3,uv-vP j@NhQ%|4I+[&iI*2֟uJQb]D Y-0>-ux-xX_+S,Œ{)pMLc'q>i3gؓ>YkX\޵epoh,tmҮe2ڈuh[{um+֭n8EYۿCcr*vm*6ݑVE6` TRep3' Ʋߏ[N_m0Oaһ꽛Įw<{n[+L^ ]_(_xqȧ68qn^dVwݷlTog'̊mϜƾ̃e˫."'Ne_#s:cVhS.x i#!m`zK|e_ ē?zo=m\ӧ6}ne7I0UŘt1ļcv-=ySdy=٫rkJVHaR< tOY?2SxKM9f/Nģ>țl\HVpk7*;Sh1pEq^%l{ewXWskYŧ1vU)N{ ?r=TnoIOD=5ذli;ʚ_P?BZez6Ǜ\ڲ7]'d,A 77~"-\%x$yO(ϯ~N[aفdW |nOWl0gV\$ Tdw?׾ wnÞmx#V4$iT?v ? ٗD<|γ%4"%߫`DHw.dK!iVnK-~!,ًލ(%GpywϮtR~I`I1u9ܥɵrΏ2-;ݘgw>y}s>qҽSu'^/[u1 ooqDxL:I˒g\DyIhh40?[A~y䩂~y3N쐈>vIKmGVѩ nE_Oz7ϯ|+p&//ŠtpnM?no \Ve:xxD殷kM$r$fM_O&rh\L$έO}o~bz/ήODX%UDx b)|)h+4n+y~cpT m%/="HȰ#ړ}^a.eD$S|YD~}|f􃋾:D`׊?_Njd»Ze DC}w*IϛYW< ~W[`-A,ődj"q;=iOz<8lo+,=?3FT4Bq_džQ`\Xdhϐ|Z0]~:`н!O@{pvyLgvgk•;,毬/,~xXW}r|}t*z]} AOzXf )?, Z_~Tsw_>| XJz3X;[|)뎗Xc5ؿUf>g}n:<^<U$VG|8qpǣot{l柩_f}C 8񭜗WX>_) U?};t~v!e)AQ'e[Wz__>ĩQ?p"_mp<&CIۭOa//"RrW?)[E}"ӿIKK'2'ȉS 3~| 3rY$&˒E'yd!Wy_?Lngݿgs)Y蘿,f?Ex;{M'/}Wjk_8qgfan?%?_?~>myNy?imBo%յ_`?x"?__Rhi K.bKy˓<\-Kh= ]Od|-Or?nEEuxvHI0؂v_dA½>Y{so'y/?E8W_ +}ƿv[cʶ$k:ɗuIdS~Cbo);wߵwmѡ_Oz:S-<">mM/FC{yW Ԡ^k lbW ^N~lS=<)~<_lN?/։>l!3V}!]_d9:ib=ʇ?#'σ괂PmKԥ5lMH \{lh!O|ThC1kr 3(pvq.`yƔN-^<>| _/ SyN7{qWƈ9:}? 5gR҈1gr vrPMfm(oI&N Y@p<؛? ޑeQ 30H塑9Xpr0y94@Yk{;0 945Kbj:E |ޖC"I pDtBfe{PE pcd grU3:1MՌ8Ilv딝%֯3ˆkة.)M;lx-gJf !/*t?>P>$L;%B$aJDQ;^ѿ>W}g1Ho|KaFdU/ױ-Y+-<Dy@@JXC9^d!wfd+ؖ;Clgj> Uww{fQV<BӼ<ڬ{}A.ATy6Gr,W;x3ﶱ#SY ;WR+[AV 93w /p}3J/z{';z|gژUG;vO u ]3׸kINX\M1Ϸ9NdAm@FUU'5MkXCk2ϥ|΍K{<OVZVUY^ sU4oxs97;o\w4pșO\ue܀gz] o^DF͓}C&u%mMИ]$'燘XV;5|z"l }1%|J6UbuO Ξ RL~(Wt%Ek*~(uzE8z%9SQ %j1o_}C_Ժ!zn::9\k.\AT0Su(" ~UHWT ?B>…{'qa[ 9 ]f-\z\_<A^bQiK8N*LS6w.b ܹ^}|&џ^￸xO,|}2~ 9V!K c;牛+J|>;-Vi \a2x~k2Ul X YdhNqZc/hC%F{hsսGeA9+b\"~,axHH鎔PߋG/L ڃ^/Ll#*^gyo}_%#<]v4r/L=a̴ܺLx;(齾9 8W bk w |(5usG{iH \aCF2bD\bJAcsV֞{34홸q.u3(&zjnjA :6c^J2&j ]،Dy=җTwN&DwW&\T8q c|x(*s@tU]ܯO'AX{]~h(k?s;}`*7u<)`(~/ j^X}χ'&]oGHX >b79wElZxZxSV.8~:6O4 ғ7" pHE(pE~)X9#qLwRHsX@MC(x{=G8if\a h1b=n؉ӽ6Ӂ~2T Oq 6~HUoygg y1K:L`Sf~prvQ7 F +;w-w_?wsNdazv_XZeݫP-Ϸ*>!DrG0gUu3f.7cRg̶M3L{A/bk.U^nU8P7i -wb뱞d6X,e>`&V!OxͿo|}T/oyl[@8۰dX1sb{PϗUg#-QB^BXz y= i޺Ò7%~K7Ҝ~ǰ冠L}Ck.MsbM7rzϗ]6z ymw@/vgXW9܅즶 S=Qrݗ'Ų^pn?Dۺ9Qi,ܛqUo…3SEƋӟ0id s#U_ؒ}ԓer48:[ Y!'wIZw'UM$;cZ[9ְt pvs [kwx-eoFYUd7~k ;< {{w^e 5Mlm>30pX69Ui).35J~/F]`mw頬 ,k<DWuS)p?Q@xY{3 B.n3Xݻdj50~}H-Jo?m/mYk|>|Zn]O9Vw7磎۶u?7uXAC84\qGg|{RwRII*~Dg~\U6x;zX9H1#\h #=!5X~9$Ҙ=輿5=㞐dD eO)k1ph=Д=ɓ3Y1F!8ۙ:敺stZ .vFSbϸqͺK"ݏcmsMc6#6f Oa]P ۳ovW!1Tx+"08$Q={ $fL o ꛀ!y6Wx[Np șL}S*?Z&ǫ~8pc j3-'TG9ch>iL< ̓mg߻9-/qLV*ǯlcmIu(*Jd>'|7Idޟo&;rE*~QW1?(Cq-OF`H+kglsBE=;=WVW.3ζ;*{d/eFٷmH& pWya>|%p3.| s\*sk5d9DX?yn=bga} '~?G^/:%3iw߃߿ * S^\~& S}U\$'I3|_MJ~Qx/.uw?\ga*փ!w<[v{#E"A\xAyW}p'~_"Hʹ~{zXzɋa<4L?.?p;G,C^)s<~kq]Y:f4-Ac]es Խ1 zPd>UB?֗5Vv+}Xe^#܉wPG_߽Q3#ƽ_~ЉHN CwXAm(o~qop͐u)֙װt0jW5s{oAΊ'=rRh)I;cnڶجr9H>Kx 7wxu͗8<%Wp*ww5Vp|o ?/P\_}S_?MGC%WbzCf})~lȯ!aba?0fψ^AVh'eQxF7X_/vE |\Fsb c ň"OA0G#1+FOOŨ|H~͘=Ep#jGn50bo_G0 &2ߥ;1G`O ZA^q a*uX1u1_׈TQ+k&Y/fbp%y0L1_h\e &u Xƴ~pTOs7D .W_QMm"$89,_Θ1L_Ѓ"` _1Bz6.F.o6KѼ #Ks|(0GQĂ1B5S_&ve"VI&/E.v2ގ{.܂ݘ#O^..m b)m#a ;`dW*HUH.b﹘Yx]2+# c@.lh߁4v_S$1G(3{~Foύ_,Bv29%*߶~`:^Œ)ۊSk] c`_06yJia]՘#PokK.M봓اGhN1B\pt y1mi s1X_ơe(q{%GFP']<̜|ĮT&=F $-~]3+FkxR4AY8cv0-4 C#A!szܧpN)%&M3!c%ϨQL3>b9ҙ=ؕ#@՘AL =?ΨwFq@X,'en:Ecob@~ӛ;\A-91ē=</G5|ڔJ~+vTgWcm1sd\Nld=K |1W'wA~͑'E ]#s$1`KG7JHC6sMAx[v6^oUHddWkLxgMI2'mQ_$^Ⱦ,3^)Ȏ8F/msQ£9m4ti+H & I.#OJUNaWKA7XxKR n4VLwmV?}87wio0z FZ Sq'aybK8 )&JzoO5ζ͠>A[غC^uXsN/\9؅U>Q:jwJyӂǤZA(}qqg5γaaq&fGwzϡmbnS]8t4|jƽ_)鷤r%w5=;6}O1pNaGVfb`5M+nlb8mxƟlпx]l%aJ/ p9Ѻ|$0M`<s×H`aw:q+O~+pB^Aa-i9ߗ;Qz'8pfWYzg8-]+&8[{7b'?_JhBkEH#{~` %>ssWJiiM/2LƗ¶Cpxz1xT0{XS+4x ._&5+<ńo˨:&P| [ʒ%[x-6=j]~tkEsa@oeIkA[%ψ 1B)6T#칃=1G#ZW"VBe pt;s-b'$φoE\!֍kǩOBQt 絾*b]YMHk,\: sTW>t{koi2d}YY˚ETĴpu*Ô #ہGs;"DK۳.2T2]jJUo/ g^baD3gR (0۸W'f*TXHbR!x2lMs.\j   DŨ+\3U&|Y90+iV?2`M_s¾FEqQ]`9J%a˱`&9S_K O53L@EۇLs'Sx bpha@k7*N4hᝮpڡ|)k@$%-4M,̘NzYBGo 4oAGUO;WOk):&îqg9onPkI3i9B5aL $>*tj!ӾG; Ӿ|l50G@4) Yv!/A_rV馑.q,Ces*7qB4Qϧ>'St띓8s-)؆kklY-m߅y wžt1N= i{Rm:їsڨKuCEה.!/k; [;M}ı9c2{K)l0'%nt4&98-&s SRN~[${<_Ηt|M99N+K4jnt}^7-OXt&V&@Wcۥrz3"|}E*Te#tIKZ&@KēV'e U[|0Ә#focNu0#o]ҤL-F5o\rnK)gZ&1wًꖶl}~g[$`l sEtę-N\ >BE*?B"}lkG+Ur0{+pưc2P(E) e hߝ,>1G0e8-h,ȵT,uNCJ(5EC^IL!-m`0(;ȗ5Nu819&-5G/UZ*JA 1תl-a._"0ï%@I L>\@GW5V5!6q&B&E/\ZV%gjQ$>`:Tb~Ym+e +BSϞpggO׋AfB:{+,᝭^]VYDx>1` Kx&><)+ZJ@υɨ .PgI¬) tң)%bf K/.rKKRu,E#:Ke_\{$ NAўVMk["3q90|yLi_8ڢ82{nR#Rhezdc3n@tt1ɤ=i3X.KdD4jv^.߼-a߼U`3M'f)f)k,6R;hdsDZj|],벌9so4oDʁǷY k+ge cREot&'vF9ı[ΤҦ=Lmaj5^% bB$ث0ƵHe,tAD) $yY_+ Q$_Q⒎O#.}CnW@IZyhп1hbKIJORx}6*|95R"eHi,?HHi_aCnQrQb4 [YgsbqGxh9I<ƴK,ឥ" В"cx5{{aH)fܨ:>8erQ9#sƈ^^P&`RqʠF8չ.9=-kg~ Y."mYGiDz%ˡž h?ːrfeǒ0Fir"`8$m0S6QI%MYG%ՉOօzs?ڍYkO{i[3=z&fc3=ژ.H-jhIpO@6Ps/0˾ x4\l'`C󳜱:rF[VQJ>(L-+Q0))e0;Gի Lu҈DnkqA$֗҇,f6idN0Q}QE&]in*pf܉%vh Ѭv^[xγ#/jshݝ3I7Qrj'ˎ mEl9*:VD+ր/΢FKřklG)9jtUcT#2;&@z ?рf ,m` 5N*Y7p΂GҚ1 Ը(ċ3ګeSʘ J|@)D]Y_n)*l:!y< ,E{wEn:174_6V|j>\{*TtSՍ+kv|Q? vWlfWgPo+%&6rWY-FQߔdIX L=_wG}KzyJ<:-h{}Wm'Q˫M9 xjύSԗ)DąYwBAV}2EYN2-mwo7UowPzzJ<-MFJV?^/eWL|3|>c"39>?rZ}2s&#S| r]t:&<4SJ]B/Fc핝aX.˪CǹCݮ_t}3|M inHO/ g쾭3zp$ 9y]\]>y;nXfV9&~8\t]m\}}LcNNnϙ]Vͼf lx65j_1f2ufW/Zsg|K21>Vl,u,dy;K[uvMvt#mӤMuzte4]%:G4Yť6RY?[<,y;2HM2sUrD/[Kȓ~8S1j/yS?x\zޱ2-3EȬ+e 5ycғ'qܲ?'_灿_/?ߟ7'y@ endstream endobj 365 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 371 0 obj << /Length 1409 /Filter /FlateDecode >> stream xXYF~_Hai%έ8ޑG ,310t -ZQ]WUxViyWϷql MDX[˗+d`a&2Zdk?jڑҷNW)Z;1{&kښyY'RnH)D D+/+%,K^dR sjA 7/q[g9>.]s/OOo:cEn+I`\(oGN NPO;-8m. :h GΊ%PHĵY"98kޙPһh19E655NۂT%Hj91WH7 F hji`Nٴ2!ĔFYAJyI(wy/n: }bD(! =VUo yϙiw^ON=̐ddr^b"A"L?Uç4u瞖*vS;Z7Ma.#f`dD&׾~?$ҷB\8rόV3ƌƇDq"O6`y-߄Z-#:=P:Z;*c/W7KAGF0K#?gĮ RkTwQgt M+^` ؆1I\}aPj ~K endstream endobj 368 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpPmvMA2/Rbuild570a1ed057bf/TSP/vignettes/TSP-clustering.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 373 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 374 0 R>> /ExtGState << >>/ColorSpace << /sRGB 375 0 R >>>> /Length 102434 /Filter /FlateDecode >> stream xM%͖f5"0 ;D~NH-UAn'س=\k_ĠNO4ܖoͿo_>wo߾?>||۷Oϯ_?>???_>?_Ͽ??Ǐ]/_osq_:_zg~G[GG?^|;/nvˏ}}˷O_~>/c]!v ^x|C{~=˯+~]}{vaO~oϿ-N|_/ߗvo_3v߯vή=is}۷/?w39_qzu?/~}z}Mk??}˷O˧q+^<>}|ۊjW?^oϿO>~w6dzC3߾olϯf~?+lΗ_>~~~}o~~?lx|nΰk?ֶ_< |Hů#w{iּ\_|%m|o^糯W:Ư8+{ۺϏį_?_o!א/_axϏU"__g{zL_|ÿw򯽼׾|_H .sxGuTb3/?g.'s4.uˏk~_G%4Imm/uLDrLk dy:Qay|YDN>*(8YJ>dIQڸǟc>jQKtG%CſbCL|o(B|R@)KmjR qR qR(,----UT{͖j>jQJV!!G֠{uR(,--d&oBjjT,RMvR Aj2TzR%+|>j>j>j>*Dᣆ3Pt^| aQhQK&#jnZCܕj2T^Aw5]y\]M&ʷܕitWK^GzF:@aPXܯ l2}2Zr~UuWRAVmŸg!ğ !HJVC){F5eKhʒaW2zfRL>T+D_viFBsÝ<{B0e!گ) Q~(L!SLdaD1Vy%+!~%+B+DQZ!+zdX +쮒*DB*E*֏_o#:Q5:@PzF:@Wy]pWOy7 Q d *YBuW! wu](U](UM5Vh@0Z!׼v5Vݻs Q Qh(!0Z!h%ʭdNƕ[ɊUC*DaB QTn(*B[!rdMVG7Q! +N֘y Qy U[!ʭX QTnY_0D`<(S<L_pL!E!EV<@ SFy Qy Qh(j5Z1 ; IhB oQ2F'kQJV](B7 Q](BuW! t*DQwmR*DQw$Xw Q:]%{PU1(BuWຫdM QؤM QؤM:DcBMJ6)TXe!1%+S1(S1S2Y3{lVK裒>죒>*DB>*DaV/o*YD @Dfྥ pRoŪ:U"qWht*+o_V\ca_5}dW⾻BՏ{Hܯ jjT<B' A*YQw5n' ! wCܯB̴0ws#CZ w5]%Cw5 !]i7w{)0w{Cܯ~+ wBX!]lU2sWP0+01C9!]-m:YS55!]MfQv]%3KG,aO3X*xb+@K5ك-~$K)Z*E}f|7d&#K5f9 !ji,nQ5h&J(Y%_;uW:Pwmh%ұ,h%#MS 5{W⹼ \:k꣆?]&wQM}룆 h1V~j3ZvVњS7ZCܯ~T4Z7ZC_IpFk+ !FKgh hM&FKgn,s qs qs qs@5}5}5y{~M&ˏ1zh%CwyGK%']Hm]=#tWRU:` Ku"QWM]HYQO@}*DBUT>* 0O`~y Qy:TMFC"|dy AIa>B<{ܘy !Cy QhyJdlymjS<(!B҆'u !.yؘy QQ! Q! }ԙ<1{^}X|TG@uG(|TQ QCz}Vf oB*DaBtT~!]-=nU](UqWK wuvW wpW! wpWhU](UrWb{BZ0ϥ'\ZzFk]qW!]QR0Z0wj6hM*YᮞDBzwFk](!]%{蔧+VT*+zخ Q qFkh1Z!X+\sMFF+jRKRT]y]MVXhh&CL|-R}{;mDNTR}3bu"Q<E}<=#6O'*DEw)DB_o 5O'+dEuS1(!(S<(S<1O!Jh_o1O4~j< TC:[dE}TR:DcBQ!E}TT'kB*DaB*GQ!7䣶6ETTUj[ώ|!]PRW QkjwM Q55DQau*DQa *+0Q!C4*DB_p*D*7P q TC*DQjopW!*] >*YQa}Tk@5YQ5[J(!ZE-U4OduDžz A>j24O 0O`졓UT<(US :C)DB_0DtSS2tL1S1(S*D8蘒):dc:;d蘒)DBc:GGX}5Qk ER=#T')헹+헹+@#?lm?y.h\'bυ_sѯJswyhB Z JƵT^1E)/z$/3+<s^!*D^! BVb_KbȗxϿwG;!j_4q}E'Xɰ+zJvVCY|/Z EC;ϵJ<@uVC9+i !f:C:y.i !P\dBZgּj1Zھda5]x[&KE6!Rs !!RQ-SU !jB[V-dK5(t5!G%yRK7 6Oy滋'VyJvTCy[A*VB%#t2vLIucJv]SCcJ6)C'!&ۼUjo !uL>kQ9tNJ΢cc:DB)9}l>+h&+|TQ5⣖sWK)'4O{G̷*X*FT~ T~s}spX:ZgdƹD:X*NKE'`J[h,R}KuR=R(,UR(,URBj-d QX:hy殾ϏDB5Z!C45Z!C" QTn {w!]MVXEVFj`n$X Zڐʭ 4Z'c0Z!r CF+Dab6rGҽFd !F#Cтbh&8ѢY Q ![FBZ@ϕ\!rˎ|eBH喞 a[`BusbB<;V#Q8;VnAW”-Q ,Wnw !{? QV*!؟%+YŸ0fϒ5,DaB,/cm]_0'JVϒ\ϕ0e! SlL* ,dRZ}ʭd,=ƕk a\v%{KVs( \빒-63泇t޴rm@6YaB`V2J&}cTy(Zª(!ت%]-g}JU;Wy%CƟ(!Пvq/YgϠȟ6^~oUKtz? @,}jhϖ6؟wvgȔMvߔ !9H7e! S6}S6}S6}S6}SMd빆 '6}5ٯdEϿu'1!ۯ!h qF+DQ5!~Mvs A+z{!Wn qs qs(<+﹆﹆ ϵQد!s qk\C۵`5DQ5}'6}'6}'695kU^CWs qs qs qk_!گ!칼WE==W\dd&Bjjj_CwW!]Mv] q] qk_! 5}5}5]%+j_5}w5Ed&Bj_CdNƖj_C쾏|T24O=`jr_C7OC7O!j>*Dᣆ 5}4}4}dd&oBydS[uΘ|up >ʻ>b卛G%z.: u"4O1O1mj?` ybh|>dȕxkbhBD!< !<=s6Ox_S21OKbj(cDV*8&x{옖Ȏ)8&?@ǔ S2qL7sLzSg9&~sL]5vL1@>c_TsLiiiC 1):cұ;&IlR2I&8OmޓM"7B꣖^c.uLzߧ VS2tL1=3qL1^ǔL7qL'cǔA)8&=153☒)!jqL:e-);昼옒cA4 ٤dd&od{d&#C4dt~X Q22D uuA~ 9xn Z?YDwQw@~'Tis;ψΉ$CW!~k@MC#CWC|+;{ ~kxB!#t,A !ևL!ʢCpeQ(7E qMQC9 {d}&Cw!w,yCXe; 3dbr9dbrh# !5D!S19~sL]69'j!ߏfrGWMjC0Cs!!&ACY@s&螯LNJV8V(LN!uӆC&%Dara5DE!N; QCZy~<¬@L#pA0sAKt o  JV&룿ZY QXb}Ȟ@ B*|k-m J&. ]Zr8!(R}w6$CLֿӾw7vAwz4] J . wMN! C OjN=!L\g JV(B J.Z{̆( Ah21D:*(dRCobt6X*7Z۷z#FsL~41-;_osLtj,::czFhkp҂'Uly:'ID?(V{f|T)'2!*t=:dXǔL̓yJ&'R3O~l2RAFk2qWo]M&JL ltJ] rWL,M-MWj2TzR%C5&'QK:_a>D5}5(TM}TQ7OCyӗ>RjjTKWM@K5YWM qjjUS!l >od|+ A*X*ϛ_TJD>*_I}H}7>w g>*'1Oxܯ:' AiQCH}9d|xByL꣠viqLxBH}TT5 3O.y L!<9188&IDcRK2D^!wo$BǴ> Chh$dRьuT'cKL,oY* !ʷ,cT4T!RyR\XT'3KJ-GfU0Ks!R!RAEbhn6Zdb|:(G%}G+=ƕ QX:DcBB&hfq2Cf 'yd<f'hVo2;M3uhn2|<ξ g&yhFm2;KFsgx,͒MFaW2Js\ld8o NF3T'd45>1&gOsFz sFd4g|ьd4S3LF/x%γ$gJ2QIs',I2%C&d<Ǒ 8d8f3E2HF d8q2{6~]gcpd\<f<#[Os'.Ĭn9χ<#Yw{9Z;?Gh'&\BLM2~O9βgc6M>'fNŞ'C7H&O꽕>1w|ĬyH&O.='f}]Fw E2~6ϑ쁓KĬ_<1B C?IV<1jĬ|:iO`iN2;d *hoo?m^R]zO>]BnÞ]z*J&o5-'qϞ+7g'qi9TO;>{M@sC@uMys=#\t  Nos s QxV_Kzy~9>Ӝ iNFG[/f7s21ZzTF+ia}P!h{BѢjBz1B"B<s\4 ? ry!s:D^ C/8Db6dDz24Z'cxA!h^Еah6+ÄQ X&f[ Bo5QX/z1!`s!UdBȻjmĖ6Љ%e2ztum=jTSF 2Z%2Z\N|UYE[qbM[E!lf)#k2z1B)z1~sUGbe2KaN, cc ub[NL/Չyļ sb:RP'Fs!Љ%C'v2sb:R'X&V$+V9[Gz1!~ !o@XzU"s !7 @' qo@xBJ&7 YY!N,كjaO2\:GPB+DaB+DaBY]_ֵ",j֖ P؉91udX5LpJu9[+ )$مܷd" ^Bz!|NUEO6ub*BbWH u]}5ڮ+be&Ӫ.OZlY]eCMm] v$&Dvî|BK^ކn!jCNJAJl(Cԓ@Q6Yq!%vF= SbŅ4J,(1? "J AL-bJlkE8\eAD-ڇ| > >;+lDYar6B RT]eT,R }ADtAD%_u!ϮD;!*+_u!˿._A Rɯ K.~ ؅4J,+VJ, _u!k.~ Eׅ4,H#ʂ/_Aү iZj  J _u!k.jAW{ "R-vׅ4R-H#Ղ/E_rBH]!KKZjWxB}g}~ׅ>FiDA*QeAQD_AH~]a^кF]iUF]iA*u2UE]A jF~_5ȯ懲 c 5^ "rWFGʯ$&ħد )&^X1mbzfN& \t^:ꙉ:(BtʥCbStQކ(|"H4 itTQ'Du$PӲΛbAki ҈ ""Z,Z "xB%Y0'" 9R-e7ADG?,p -pHADGdADG%i&,pu%UBT'IP$i- "j^T8stT<D$ K")&gj9<& "p66Kꢅ4UD$kŢ ,z**pZ<K"(:.ZGI% "(H*T " K"*C-$~|D$sB/-ZH^ V_SWq֥ ɞ^-\1עT]%I$֪+J( WTäʇV*VLR-yb%ZxqR#s_rзז\Z%1m> " [TkDRJ*SIr&JȒjo-9%UBң-9xT뉢 nJ(B'ThL -VZ/wϿ ,YNZ>ͩB ALh ".JBk[v'별ϖgl9< 'A}M""l3,D2Ax)åUm-VPMȪm9D>1Y, "~kp)Ͽ "a7ٴAX~?#m88rvAL-GrM܄"਺ppKM-p[z-n技ۮ7(kj9|dS-bZniŴޫh Q%4-%r!je{M-#7h9R'C_8hcNL"[Dr U܄CDr[[A-7h9hP-3 A -7h9z7 |մ2ժZgU43k 5lBrixrs`K$.d2in%'-tA(POCo=v,{>&박0YkҒ[ǚqMZ2Vm'cv2Qm;gufDRgCTC w36TIFiZjhȂTCt$LZaՖPTU RԤ "m9ږj[Zڂ5i "^ajjjAJA(yS6H5b5itDޕDZ¢&m&mj YPZBj8III Ԥ RԤ R-aQ6K65i[tlj)jav¦&m&m&mIkNXդ RԤ ¢,aQ6֤%4%GIIII "J,~M EM EM EMZ&m&m&mVb A MM 5iCI 5i5i5iXMU5iAAAAX~%du¦&m_ AA MM EM EM EM EMZ&m&m_ Y~%d AX~%dII "k9QAX~%,6HQI_AD~[03ZS*OZaWB_.L~%P 5iJM RægggYm_ M`KAD-+V?d e!R % %6˯gfg5N& 2z+QvevzNCHM>pFgOI {L "ONiAP]5 VgW(l_xceQƗ ( "  R5,2rkAw " GAD862-D ?sDސiDYFiDAD%4QF9ADm]`QE E%lDY{+QlaYR e QD~L-T,3 " EOg'T}F3AD-YIC kҖVTjZaՖPTQIc;wpze+؛+H# lhFi\rT urqѷW-GB*kбyU7C\BrK"iARͯ*Љ`'낈[ZQYT.:-KȲ&|le.:޹5Y"HFYB%l:kSY7*aYe]BuPeoɺ,#3Dd(*DQY².a#낈y#=uAJ MZR-H#Rɺ 䄲u Ywu Ye]BICuYPr3 Ⱥ ;Ⱥ ²n;&mdC[ڐ Vx/oZ[ڗZk!X{N /CȲކ*<$AD|SxtD^BVxpkX쭭AL<8ػBQx~>w Yq!\Fid]FuA(dސaY7ADuuhG".a#4.ɺ +ۻP M\.HSw{8 b/a#4b bbϏ@%4b/=6>H4/Hp\B{ ( V5tA M ].)<~1>.6.H#4 ij肐365tj肰Kij肈[.*UUi*4.HSYw.H#4uAX%$Y:^BQx[H]!ɺ  h rA-\Br&ׂ{]e]u I֭^ U]GQozwb/HSwJi^{>bϧTėe2%mUxk+|&u:WKcVX &5Sֺ\LHj I^!/A2Gboօ)VDa)W[ID o7(')OUx'cd ʓqX˝d3v2RmTd$ʒB_WH NM(*![BH/B2CW(!9+$3xu B2d!+$rdO<ɄbDBrW%I gPJBrWH6 ;L %\![d W;!+9++y+R,|zBY<~4~\ůgO3WHsWHWHWH3ʺn 8f景f'Ĺ+Y++2<Ǜx'+yۄ4o{4C{4;\WfRLfG'y+++Ȳ\rpBBLH3Ws y8y4x4x4x4W8! ^!]!%39+ٻ}BBޮMH|B9B#gî潮&&ɦ+2N 4)4<&ztҔ̈́2Mi4MBIH4ʓ i  鄼 eE_yN0BI28I''gq8N$do=}㩗d3=OBr4M2ya37xy~}g^% eO./g=yrykE\v2?gAm[e|bIZ=ڞ\^[ e_ mByFQgdgAe\d~F "(cT5?OO.^CkyL癷 ϋO3o癷K<ϼ]yrk3oGy 癗_N{yk''.ȓ(Q=ϼ"3o5;SPP Ä$ra>/83>8?O>>#A>Ҟ}ǼA#2! шОr^hœLdB~yٹQնlo~?x3n'ZgƋ%7z,NfRMI>J SmxѨCj;6xj Ҩ .63NmNu.H# &p[]ܲFi\rbZnic)CDM"opʗuADh ;H4 /Hpe]Bu'4Y^CkFi\FrA-D֊hm[  "JiA*pA\B\석j Ҩ j Ҩ NX j " kjCiQmQ/5th4.8ADaA]Fi\Fc^\Ja-rA-r-rA-ki{>:Vɺ Bބ||Zn78곀 NhZoPTˡh }#ZAL,AUKZ.!iuAHVQxAwJy /H4 /HR) "  o3TOQ'"Yn /=i*<]tAL-K H&D˲[NjMN[ /a4/.bP;Нkq{LD$־BE-+!Xmm;=y*2H# ,J ]BVxˁ39Ux~ (m[L%/HcDּ m*Ka&ldA*Y]+%(<v EAL0': "nkEp +Dpv}^F{A{ADVL-ͯt_}/>C>eM-? ; A AHTj0AZa0H4j0HbjK=d[龥}bo{JCU Rn[6_jp}/ϙϏ>PXpGi#iA 愢ږ^jC=56 `N(RǦ*|R n9.ʺ E-kl낈 .;϶zLm>Pg>Q}gK+&ʺ Y4 ,М oZ}t>AH]!RY&YAPMȢlcQ/> }6! Y-5tI&P"&, ,ն}K(lo SPD*Q؄DjeAQ6ֺMX(AL])׬&4%ZSb؄|L_)AP%Z7=BDxKޠC"X=3ex9(~(TBDɊZE[ev;3[A}Dލ}KϖVLT}uLr\L->[6_YF} p}g<B E "l7&ʖVL[ CJQ7AX%dQwQPDNFQADm(; "(}Ql"ʶml阉c"ʶVD-([ZAQvĖJ^[!*e[LDnVb Y=CUb89ĔkSb˾v%ڔ MT5\AI o1%/%u\<& -Ze˶(CDD4M%Qce>p5QPDrYkgw@YBgKMm]`}][P 0,ʖ.LtAVD"R gT[Z17(*.jVDm"ol;dD ^So ,M2l 8P秚 $PT۲~m  "|c.aQ687\Bp:`0:1 8&.! 8,}neCEP\Bp E_yp'oc*Tm<WL*pcAnmr)uuK"YmrF(CpY$*id]u8Dd/Y2!/W98?*}mn&VL-;N\F "n &pT\Bp蹂4jAD-pA(jAD-G\BpxW~p ECp<D ۺ .8|:eDm6npk+,VXZbjq1-}rPNa3TӻAD^u;j;6j{ |㪍YVmb V6 " \Qm3=[qR[ 8Q~/$?N(n 8f<-DܲVD-W!^qBp˅ "Y "\BpknX2&P-"k ~-6j>Y1I &P淑*Ֆ ƾ &>CzEٲI&;RgI϶VDIO*{rkUj Um'ZFiZj j:rSWm:2ն:U[BVmkPZBj&Ֆ{&mH,T[.&նT;UۯTDBͤaR !RmjކI5oä~s!R ϽCT;H5*PwiZj4D/[6*VLin帘[Z1l  ; +dՖPTjû &4Uy۾ M[FaՖPT>zyO4aADmBVm'Dvmjy ڶ]dmEږmT[Qm[+ڶmնbmiET۶pb36VAXRmAD-6ՆAX%d UDnQmWUxu[mkE1-G7ADF ;H< -rA-r\r~M͔%8 bZ{-Znfie[T-[X[. h ;h h hKZ.a4Z.T-{Ⱥ Ⱥ MALVmWD*ඎVX ">|}۶ƪ\޲U AP]a#o{^B{W( χX7ȩZ*| bO7*VD%4tA޲oDP^B{[grIeo9PL(oUn]` xB{VY{,OƋX|f&p'<)D󾙬6*YwuxeDɓpYGAYDdNUY*NXi "Zn9TZ Z.a傈 ;h7Yid]FaYwBuhނ<:< Ⱥ ,6 Tid]㩔 NhrKZ.(< oqUAP],Lt iR)6Z.H”vRɺ Ⱥ ,[M4 /H4 /НuA M ].,WN (d]Fid]FuA M ].%ljRij45tA M AlirV) ( ;*7H1{>p[ "ʂ>BR݇*+zVvAD*f R-bY2H 5X>K({-md6Ux1-秚ie¦. mD%l\pH|p _;T%s B <::QնtAT[BQm[D@T Q후 E-T;H%ՂTKH "ն^T{mvTC풡jK&v B; 8@ \2poppD(D!BTKVHCTpRmj "նmAP"ϖg&V}blqo ".mjt#ڄ"dj4ʲ4 bRm/+9؉>[@L̃R-/69aQ6+,EYBu؄%F7op ҼmB "lkEඵR (Eل(e,+, ؄XvJ~ RȯA 5.9!j\5i5iHM\s85Z Bk7&? -0M "քEYl|+ۄʶZ +KuSWϟ>%օl|+ۄ|+:jBQ))AIT¢lQ[ HuBOkE<4!xZzmUbk+ 5_`]ү!Z;W*SWwTղTv\5H!A5!VM(gZQDOkE+hc&͵4rXs%4͵lՙ-n Rgl)T3%JlBQb>ѬJl(צo^NFJn5iX=3SbhIJdN&J̷I3%v2QbxB.ކ2&x#H#ʂ(3{ "l^*rI[Z1'I5|&zjm>J+}Ja}wAHM(oeI ^=3J4aƃ܃TdaQ}6p>ʼAD RmI5 "5iᱚvBQm Y%Ն(, tUۄ\g6, |]L-̶VD-' +dQEٶM-DrQEaQƳAH*eK+&ՖmQSGZBj'4?&$KeīR bR o~5}2e}v"ʶ(;!+,aQm/+lADm%J,( i)._N!QvX5!ɯ Ms-k/,Aj.JʻZz] "|:e+h.rS媹VDsj.ЄZ Eh-3kZ'%'ul\5HDwM:*g:jeVs["7\u2!=i޾ yOOߓ!k^zqiÖ^6L 2%!X-[JO?4J,(+_Vb˹ec'_~Zik7&}#+!˯mT+/µc<pKȯ ȯ :ȯB_|D "3D?RyKh \;PrDhPVByOr{ VdaeKLm4J,)+|OD~%dPr D~e_x#_ E~-G_AJ,!WZ?ZKTh^%Hrb  ";D>D_1 ї%iXFRbA%D ĖsLXBRbV+,|mL-ǔ1QbKL-W Sbk) ׺Sb%m1Ql,([uTg>1}=Pg̖T[vUmHٶ-&4ڤYpmT6RXYBg?3`R-!KVR-ȣjAڱ T R턼ᄍ> lz,(9YpBRbWhK'cU~ɯ.JH Es-;W4 n˧]~ZeCE-ӥZ",!fl,(1vJX~L+i.o?WhLMֲLhy"6Dh9}Z| ֆ-?V*sADv/m[XhЄ&Bֲ;Mh-ƄֲoDh%Jh+ADhdADh%sAXh@Z8R "B G%yoPs]K B;DrRY5r?he[k_[+,N(oG\Û V.(QbK+ ( Ėm%Qb,,eL-;Eل[v)zmD=CeޅNiDYJJl)1oAD)1^.(1HAHMh SV~%ͅ2-ke APs]pZ -2AXh%duBZ&ھ'&`Bk BkۖJhiVZW(j邽k7WUB~făZ -rl+h.1͵4ײ;Ms-SjJ\yckkkJ(BUb?\W(Bˏ.g.g\'< DrD~-C[8qE2%QbADԖV lm2h,!W-sn&Ֆ)dj. ڶjKuf[EmG Em$nR}PTrRjۺ -%m5פmVG pxD@\"1 \2\"16C|/j6v$uQmE !ct !͏6f RA 6m[~r˶4nB RA 7H!pnB " nBp$) pAldT ) "Ȧ1"VlB -6 DTkRAD-jmSmKLmjNhVmjvSmyȪmBVm&j[I 7p[6dVX]8q&  E-]iAD 8\HMU-Y& e "붎:^A& r˜Q( Q%m)<ϩ[)e/:f o ˭*<OrQibo{#1TX1mwB>J QM o/8aQ6HQ6ʺ E-]0Y|M-g0˺ QM('nB\qB Rh VL-{YqrWg eIWpXMι+TTjPT۲I| Y|YUOmj[:ƪmBYq鵪6?<Rmj?jT[N^qBg>[K϶>]ԯ}JDLn!X3kB>;볓j!JC4j!D>;Q$:QeADxv RԤ " }AL-([vߟ>~Q1eK+(= QE> >2t:"p+2¢AX V7Aص"RmkE"I+,F_DrB[G9K5R턕T (gAXdIg5}wAXm˶ 5}x$.>Be5i QGIDvP]!.8!V4WB\ed 2{Y j.)ADsX42Pͅ6)ȃ5* ֎ADsoj.ZN\ #mM\ Ys45MBk^Z^5ڄr0?&Nhtֲ̄":&k#˚kJhiVZ Yh%lA͵|ALs-B4W¢&-iakXJ(3z]TTDd#k[+ ㄍ;HĂ< %DK(5i>Gy( "T̞EMZe AAApDŽM gg;(ĖmsDrz[Ҋ賄|>> m^*.d(;({f(; =h!H%CQ6Y(C;YĞDL  ԎiXRbFsi4`ALsy+'+aX=Mi"+aSD40 R?1ͅA(ZADh?WDcA*D4: icNh4.Fjx"ȯ堙Z6TֱJ~ijǂHزM-JlB_ WF~auB_x[_AX~%z0G JKT~i*pW¦ SbAD/+1 K/&j< MW_>jRxij45^A $NXД5ʯV ( ҈T,2*ȶVD-olV챪+m[7i\6PB/;Ku|өHX¦v,I+d}gitXqg E-'iU;Dڱ \;k6cAD7BET-ktXqbI | > 6 6,Hς4,Hc,I}[ j ªBj g %HYBg iYFĪϰoHӒpڷJUɸ&dT;DS$DxOZ=i!Xx#!\QRFiς4-HS}v,H4Z.H4Z "7n4.H#XMͫex!wMMZ&-HSvJyY ֎[ #HSvTxW(oC#DdYwBupMZBrDoTm4R-KT[ZT H T "RX]aς>ۺ lhA7 Rmg˩Ѽ'm=iAP]іSCDSiI[Zj҂45iAX%$}jIPդij҂T;4jAJ'Ui*ՂK5i jL^eg>[lRUiY=iIxO "|2ФZBjK*>[& \I ҈ ,N(5i "ʖ;MA 6gA}لRg%v2Vb'k!%$*%vVb'c%vFQbOB%vF%$:%QbA%QbA%vJiXFiXFRbA%QbA%QbXVb %QbA%vJyuFiXFiAD%lXFiXVb'XVb %QbA%vJa%QbAX%d%vBQb Y%lXFa%vJiXVb %ؙgXFiXVb %vQb %QbA% +%Q(  ( ;( (  ( Z)  (  (K(  ( ;HĂ4J,HĂ4J,H"J,aĂ4J,HĂ4J  ( 6J,HR)  (  (')  J,!+;(Tb %QbA%vJiXFiXF](K(  J,aR) 6J,HĂ;( ( 6J  J,aĂ4J,+6o.xа(KV,dL 2Qb!P%C%Pb! %vVb %Pb!P%+!*%6H) dL 2NXhA 5H)4WFs 2NXALhX1 -sքł 2R,ZC6CAD=_g}##]_*h6ljFnj@NZBj mRmT[["Rm eg;ʩ!rw}b ǫ(OZGJq6άZHr$ʍZnHT+R]$2XHKT[$Ə0J+J+j3;O(.Ƞڌ Ƞڌ 퐬wwDTCPm|N =BF{AE328#3tt86!Y9TAxeF#FgdpFSAo42f$i9yFQ9TAM!4j T[<GdvԤqHqQx6Hq}.-wol_Z-UGd-wh9r~-drB@E'\;T +J+Q!Ⱥ2$ؐ+ef-prB@9!L!y4OZh9!hCHw!uE",NȺ#K!$K\}V[%E ¨d]NNHuoåHp 2#Y9Lڄ3 T+0jTkj &I՛&Մ,RM"Մd0I5"ʄ(M ɢBez Ȣ,QVz ,-ZBHu[ni#lPOŴE mēVxƈBFVsȴDaD#Ih[T\o8,hH,_ZABܢ^pұI~ <WI~KWԦj.!I~9ͥ4W_\oBXZ*_-ZHh B%Xܠ]PU[ɵX,({Be O,e02 AQ=2 Z(+E<(㧓M Qh\_U$(+]QDY2*aTD% JuO*fͥ4W$@s)U. \ PIآj]ȕTN e#к, '-<" ˠ:=-exDz2 ?UGduu+^0]Bu%UY---T,Z(dYPâBE -2edQB {s 0/Zp؅Ȱ a.!T<T%dTGBQqfFao.#Ku,.75S@IhV@hUV9 B}U9= ReAh)\-xBe/# J@hQ_E$J6%dZBЪW\*] d+B@sEa$$i.R_1g_B%WdR1Ps3j hrBօXNE J&%VA¬-۱n5 A]&uUƚU9P*7V*cBK!k*hvВ(prZD,x ,.($x)\\e!B!BB Y3UBPm ˢBv\? K(Ew.Z.6Q)eʲj+#UeY)/-BDTmʷx>{gdPmFh!rBx}`X9\[ :F@Y"B IaVmjs8,DhdXȰe0#n TpfLAF%$Q)}igF>>K.rC}Z"ՌDpjB`vQQX9iY9-4UeB#âF1#?X8p V$Ċ2Q)$ƿ=U[g22T!e0#?5Ȱk5,8@#îaBjs8T!:LR aC`XI=K5òF@R%&$K5PVncT32H5#Q)$Vn$JAmj$׃)ό 3~ځ*1Y9QVG`eHD\ECtECe吲(jBDAQƗ%GQZD$0+{J<&%fOKy9sWN+yv8/DbB\o!j'" ~\;4WBsHK$rՕCPW<oS?IRE1L怤,K|%eYR=H9"K˲ $H'IuH~:̯_Z"IJ+%eYRGMR I'B˒*ߚUbsXI* ! J+y,=SȢ$Bt¬sBOB@GŇC}<8u,7\ēaqA#IG9$Dx;Bxzìft!)2~ZI1VbʯQB -!}SkeȰ/X_Յx*ēBOS3B@G*wQe8eIoF(Y|RV=[}JȰca)C#Y~ER,TBE  X242,eh$+1KՕ*_ڱ|mH!Q:RhǮrZ=4Bgv Bg >+bAՅPu0+1W %Əu7Wke3!I!udQ02 '%QDEߴ<(#+2 ZRuuTu%dQbB@)V]%)1K!Q^S-V5hĽ’^F(S B`!8$$2J{C_C_Pbeh8I$dHe>+_UT+jc$m"0W~=&ʄ,L"ʄ@=*>+LLȢτ, Y',OxayB!TH5! բ!;*>%g" Z+THC&&$/epYPȢτ>+&g|}Z;,.*J,  Jr@)^G- AiI;\iepBaRI2 8!kXڣV%dYTpY"QR&$ɺ7\ׄ| kB.ZI Ye1D!bBS;.@e1D! x*+x.NxoK$ -W\kv+' ܅BU[9I ɲN!:'FYWCu Y'd]Ud]jgv6:eQ)#Y@::ld]"HqY"dyu@֥[uK+"ɺ)<GTx|&g#7^XTx sH ^*3B G^i%/0ɺ7RHr I˥)#Q9׌ kF5!ˮaF?Zv 32ԺZdduBYg*KPxHD*{elgd{FSHbjXKr#\tEtX^8AW.ݬFw!)ršQEǣn I-\KeXF6#BrBZ.<#ʱK"P&$k9Y˕gh9~,!-W;Z\7#k9Y˵^/;vBZoʍ\B-׎%j932h9#32, i$V)"K-g$j9C]¼(CPmejs{ !V>$ jnF>Cg3պP&Y֠>k ?agOL3de}So>+]!329gQ0 v,Z+ILag>kD/~ݐT)ojJjA.T+]V3JzCgtB{(S(lgG,E#}, YژT;bjG,RljB&djB8#d9Pm &dQmB&dQmgT-WE Y$ȱݟ$&GVBj9#CZNR-gíؤCpB#$.6T[|- !q4TZHjo%g@}:2 ϢtHE'DY.ͤτ@]\&?E d0K?TޤE 8%%J+$NuqFe%,NHp'&cPmB&dQmBv6F&dQmB&dQm,pFjS8T* pB 8#CaI#I^j+cCM &dؕMHusRh 6 KN8C,fpjTڌ UmF6#WwdE I ڌ nB?~E ZNar5#8!EJ⩪Pfdj3_S8 8!q5CE ɪ¨J:\TXpTTRM"Մ jFTs5ii5i嚴ˠ&-T}#mTGT+mT+Ǒ2> DYEYG EM Q}~C@ A)%VXZ (2 J+S(1! PbqPb AE&dTT Y**Մ<E Y\_!Q_Å$f%pQbBp3E YS%ec(\ (efI,=! ʁ(+rHY! Z+K,fQ[eܿM g sمSL",KR}v)1~4`%O'J@#% ?`MZ9$ʢ EYyfAQ:DI ʗiI2!NkB&Q&deB&QAV}vȤτ,jB>S3!>;E vp3T }V.g A {RMRvT&djRRkݞBg'jk5iX뭐 \tlB@˕C-LJB*LZNHryJJid-\HZ.o!\~h>\! 88!;dpBE!d-00 4!y6Q˽!օ,ڵ@. . WBp"mpN: 8!zT[9=j6!IK+IV5!KE ZNarNZNȢ,ZNȢ,ZI ͦ,ZI Yh9!5fw$,N",N",ڽ*.? Vpj+E!k@FBKEc-3iJrZ++g j7N!rs#Wn$Z+ Z+ Z+Pƭd-W[ɲ {, ~dM I>Gp rGW1p \rk4peHQve;\;(06jwZpiM"ՄTkT+=I IrT+ORRRZ1Rm.IpTS\6(+/$/0JHVH)̪MaVm ABMGVm[:6~:$/$TTR'oQI5 x6BjHE /SڅJ@)}VG  RXjeH^CBg&}VL!3RF}ֺDY߿}>=eQ DYVE(.#QLO|}Reʢ(SGD2nDYΉQQ)QLjO$ʌdQ}> }}~C@(KIJeA=_(kcCBMeQfD?˯o|~>ErM\]e_Q(KϛBH5#dQ0~bDYz7,q QߞdQэDQ0֤9JL!)yRbȠČ$% JH~kWH~&/ W0áȯrgK" gF@b>#/42(1#3XmX9_$D_iHM!i4g#k4d4WiF*C\|?% -*W;-X.j\|3BUz5&Uv/7ɋ7sG\TQV.*_CtW*O(ʱ*#UWkWkWi%W9̚As5C\4ʡ*?Ys9z [2-X[{V(+ 2q\( Q XF}fOw>>gA13!>K3u}YBgA>+'"3!r$ʉ͢!r!(+]Ȣ!2RFQֺE(~a.{)={ţzI{>T+m,RE=q5egx,X RO&Մ,RMHֱӚ¼ӚCXұ ܤτ,LȢX豵H5! ~ =! TNHjPI,RI ypk%6{򫈐EB-YTfզ0 '&dQmB&$6j;T[&&T[آڄE!I#WZE!ԭE Y.E *Ռ jF\0 7'vSmBv6Y.LMȢڄdvڄ| MȢڄ,MȢզp3T.RMHjvajo3!>!QXieRmBe,MȢڄĊ2TH5! Z+TCg YkYkYiE 2:̢L"DE 2V@VhnLHsz07v_B%W4YBH~&,K",KH_ A~.DUYq'%&dQbBpRbBS*'ׅT;VR"dp_]fͥp\BHsreJ, J2yD,W=ɯ81~D,W]BGBZAs[\%v->FZ|6%O7VXa* ɯ2 ȯ ȯ6bP;p\B@sت+C@s)\aF#YsG!S!Qs(LlEh YEh2 -! ֿ^ǒׅ$̂, ZK/%:FJ,N4 %'V+OJ>T]H\j$M+N I 源4W _*D{V`AFnjİ(2npֱaF!Lci*ʱ>/τ2qJjcQ!3%F}w5g夁>SiXֺRj$sYVQ\v!}VyEʨNLHgNL}V~P<ԤV&&djB&$I7(,؆ZSM?f/W~H hӄJ5I!ԤqPq&kZ+PZY ::Q֕9 ue&tTZ'c6-'Er I4դ)W\B@7 I.S5iDjBMZ9^r?\ $MjPx +بZHph: \vTEtDVxOF /~ 2T>i8nQ)@֥\EKȲ2u<ҼcYda3# ڱ L!8]Ό v9rf$ 82rf\|:BpPȰ˙a3#.gB]Ό<ce a-o#B@IC{C,N I AevTQ&d(RjqPRgvȴLȲ$0 1!yF(j>YAgHBȢτ*'DQ 2-(E_$ʷEY9eXh?3mҿ.:3eqJ\:EY~>DBeR#QV.eR{9%V@J()"%:;Qv!rT}VtgB@V`r,TԤ Yz嚴 I^>+g`Hg tv.+J%irzRM!Yv.32\f$2Y)gO8Ff$W)g *' (㫈4WO;ŧpڹԤʹE~ sn(xj+˯iv9bRb A.{ %3Yjec {>3EمgFra3#~M˙_Sa?3# Z@~!"Z|)/gPDRbΒR7$~qKY_@~ y&`AϕEϕ؋Ђ_v9+KJaTboJ *u/B 2(V{$E@~_WeFzC_}?ڹ'^WxL|_aɯ"D S$K3Iz$Er8ȯz_,* o/>ɯrPEY9ϴbieE({ß/"bXcE( ,^YEEG}pE@EiZ+?33BBPg"53´|d}uˋ>+&}f^4޷}^Hϫ^$6>i/ =Ir$ʁ =G Z~.^ZNj;@RtZrRE`r,j{I T{$E~^E>{CgGYщ ({CX/3,7L >{Ce|&({Ï\*1>O\ 2E~^JE~^$)7U*CvEhAFIFSɋz$~fPbE%0*7ڱrHJv\7#NcXi%7}ֺuYΡv] g>8"˲>{vDgvkLd}d.y혉׎}V}#O٦τ@E[("?({c>B?Vj{E :26T;.gE YENapo6!jC&&C8PPm av  /h\%8!cZ.Nm ZBrqBHro8! rk$jC&&tlB@E&\ie_{$T[fB@+Z' MCǗƲ#ڋ|G4#˰Oڋ|aE ?ޛ;dpB@L=^\fA]H|m{E V T[? {HVm j]VƆT[BH1RmPmUCj Qag a2DCI ɪdyIv*ՌLMHVm ahӄ$Y=ڄdզ06Y)\T!CMڋ| NI{E Y!(pdpB@t/ 8!%gF@)yًE~^}"I9TZPg"I3n% 7\TOggY)\WHg({^#QvDeeQd(;"˒(s(#`4'ۘ>;"3gKCdQ(1!KE\Qv!T)\*ʄ,KRQ&d_@E\QpZB@h^Vt`DELH\ %d\BuȤ<{V3!L"τ,K",KH_NKԤ$%ZL5iLJL(R&deBQv$ʄ4KMp_LgB~ً,JL(跄M YPb;*~ L"ʄ(ٍ,N5iB%&dQbB4!Y)\!.JLȢĄ,JLHVbNJLHVb %&d3.:3KE~ K"0/Ԏ Yjڱtc%% jHqQѐuf j|ɠ2e}^|}֎:313ӲI5!?߹E@AY"Bufpe]^络w932r"Y)\r"Œ@,ϛB@E%\|>\|c!(ԙ)~f/^dYI YTE I TpZQH(S TQ&Y"gt>k2Y?!YQZʢτ@EYXjv\j>}"OPqH͢ %vȤĄ,JLȲLeF!JB_sQ~V%&Z*g߾I~)\d,(>_mF!Y)QVneB*CHO@XkejBvrjkjkj+ I.j+g`RmB@V@c!V:FufJhIG #ڋ|GI_Z׎% ڱeOZNaTS8! "ǻȲT"Y]8"BQD 8$ Q]ZOMg-($O\+]E! կIYw!: !>i?Z\!iFhQ = Z@.Оj<Ӟj>EMpG,pG3G6j#@FEqIJWKeKeCLuG,\CwٲClM Y$NRY'$W]u :! T WZe%S1,.bORo'd;Ğ,Re]_B@b(DUFgQs)U&&ed\FČ$Ug&%$/22/#2E~):L e$ -Yh9AhAh Y(B BKbV0/,. U7\q~2ZcZIh))*Io#G(e:Jٰ(x6$$B \"1C@G)U@:*6!xlHGVHG!ZYtQ<"@%O +JaT IR~XTQ" D!;ER 9̋!C&I%d2H*!%Յ%ER Ċ**: -!Xآ$;FZPb Ař[!DbHT,hX9=K-0/*7H4Z\i5!DbReP~y*! GWEjaB@~ +/')1Y!m DYsݖìZj.#C5pbCO33!ʈM쐥PedjB`D~$v!-X`F&J+!26!!Hs@R_PEC&$V9}Egg 3qCaߢ:DE *jd}v!34gq]3*1 x=,&}Z!} CX'Yqv ֎V@ጪ_7QV{Cp q2pvU[6xRU[r"vϗjAXJ\%d>;"˒>s#G*I_FqT~6@񑳀 8!.~9ʯ A)\TE }~CvHTmo"t3!>C@)L ʄ,RM"Մ,R퐩K[+8!Kأ,L,phdrBB\\I YdE2:! Z+ ʱLNHIjfpX ȰG,.׺@ 9QZW\p {a72# M7'\9p|lN",w\9I Y!QڄdզpQmBrERMa\ !賏dv,LH(p(+.JLRQ&dQbLJLH(SLa\BEB(GMs Y4EsKᢹ*wo(kI~2/!E~ Y׃lKH_ R.\ ?%d\B%$k '%d\B@s覹@mS4WFBJ灩JB\ P%0W)uU.*1P%V$dIpTDIYG)\tQQWlTyDTAUR?"ˠ򋏆Vqz2 $U5+.˕_xQ $dz Wx⩷uf]Oel@S,"DD},3e>;x8'fcfoHja,j,TKYFHRRdžZkejFH=}f}j3R?O  !<j[+Q9ՖކjK/F@w!˴PmiHRmoF}YY0á4WdYE}Z!rJHV>s,MK,N~{YY!^bFČ {3TBjAT+ZkeL jTmI]2z 8#328#I9ZT(V.jRό;>k]E}ƷPg}־֤וYkY>+wgN\%0?e,(*1 ==Ct,Y! փhi$0V[֎%J T{ä_>_>Z+Ys-1#Q)#j3B pQ&6xnUT[5 Ԏ%eOb+c!ZWN% r^HVsu! 8Yop QK+p\hrz@nrG-GSGdYȲe>w8"i?_Yֵ6+#.-whx^bi#+r"넀{׾>! @YL |}+SYȺߟuuelHֵVY'$˺?WoHuFYoo*_ 8 L.*A! RQuiJ#nk+Ye%($d]|=d]|e]땐fw!)*$/F^~^8{mHc׎Y˺>ֱ,fʄ؋Bb]BRxqSHVxmHV@Y.EHaVxY /O /O /!Yᕧ RxcY ?+ɺvݐ+T ^t8#2rf$ŵV@cX{kt_;ez}YBaG ?ػĞB{$^9${\uqc; lR@\XB0J`$V9r2GH{OHrxZa{$fW.{B!{"b H]HbR6'$ru Y'd__u~7r9x?!~N -WZ!-ohʢ儀FHrGHr PHr Z+Zg>!nd-W[-ʺ $˺>uȺ2#$˺$$˺b&$/bY;ޅ@,Z@ֵQYZY_҅dY:v,˺JM!h9Y)-d-'6d-waro.NE .O '$W@t,\0BPmy\HVmEȰ0C\tU˕C? WZY4Z.Z!Z+ڱd-W;+..sp u jHHVmU}>>EHg YiP\H9L>b QajZu\VR!쏄>wgAv Y>{>!g.$0'D}>##}_(ؤÏ,(+$BeYg }sTD(SDYؤì.$%V7WFRW u%U)B@]3wCάuf AhśZ UZB A]+!jTkA E!fuU|ZB*=- rHTWo> ڱr $U|k.:Qڱ8!dQB%$ '%$(B:*UtTՎ3J:ut>ԎV` +tE] B(B%dZB%$Ve\B%$/ Y;+*!Y~]& b݌ZN O'1-!KEZeHhEot r,$jB-!օ-!}zEhcfc$⿿t!j7BuRB&Ph.RB+)! yօ$JHhE;%?nj!$fu% - B!# rBB PhVHhV&%OWO\\ As.H B ',Z!%V¤ _R%_Q~UCJQV@)%ֺgVbel@]?_Տpxꎀػ#@!="VژLc<1GPAR G9J5lcjG@XAUb6>rRm &ĒN6!j;dRmBjS6!jCv "{^>!vB{6ve?O -`Bѱ -/-O/[B@WN!P%_DžВqDh8a#tld-ł.$-Wz8B`kZ豌 :>I YdBXұ(T]. 3!Y)gpbFHpNK: Yt.n W*ʞU565U)%yI]RMaj &dYQHjAgyG/!Y彬$}Y Qֺ0&dYQHeoJu^Zz1:!b(:Nԃ>3->+$SEBeՃO$-peB(SNXy %?Ρ+ 'VH(Wec ʢ9ENaW5B>S+fQ(xI)QGEٿtY>SY-op" ‰(㩉M Y*(yHRHJJL!(?JI)1z '%H,UbE ɢBe Q&deBQ&A22!Y)\De DbeTK jaDT6EEĚ4e""@].[S,ND3e‰"J$ʌ )Qdv(+dQDY2BE,DQ3J,dф4ĒE32(1#I!ȯT&$/p_Fe$V94\a.h4wb4WiڱDͥ5W~0+k\<6KMeD#D"Rf~_ I~%f$/ _iVH_ eWE5+I ΌG5/5/CEY,h$2 ʒ0,#Q)$Q,EY3ufi-#I9$Qܚa2# ʒ4e匒>+ 3MufF>{CeBY:3!KHgATg&SYgIs3Q)\*ʌD}?&>%}VZY̌ ufF:3#CLRgfÁ>sè.̌D}P.>KUHg?~^}fcO;>Sԙgk] }V 'ر"0,.xɯ8)D_% 4U(6H~/P%/#@6@CE~ 珿>! R񔑸¼CK/\K,9+!YsQĸ,.BKȰ?Zi]F! ЊNMȰka0#kX|~=4?Q8,hdXdxŗJ! !ҋF K/I 源4W|5j.>V5 8S!Vk%m9v2Յ‰F# 8'V,BкSC-f )BK!8{$lZkZ AhC5^R*!NlJQF>ЊvJ-~N4օQhaVWuUNOr%UBT\ IU$ܓHRVR8e$Б*?$$T pHT }$IqCˎ]F@?Q( mg (YYC:*Ag@uT,.A'Rr|"hrH fA kZدBm* \[PۤTP&UPHUЅT' TB *c[!AT[;kAEc1Bx%0B6R#,$gdx(C&m$#+~[cY'\F Uʱbj\%Z~[ ie7wYFHo!((!T@ФBToB@1.PTiv_/O'$C{sVh!JTUybz,B0QsE'4WԘB@s6\J+7!Ys)̚KazBZч U A]>^ARBJGTxIR.DȳW*#2ed>^81Bt BZ$~{< ų̸Wi4W\ uW9 .$UN/ J@~)s$*#s(Z+P_UN)xgUs)\(RJP%%VZ%V>QEY%$+\HJv X)hф70Rb SQHVb Aa5WBeEY=JHE#(Pׅ$xbeB@52DQƳ(J@)QVzMR5,1U~]HJtv*G ' ayBk]}ֺ 'VVɒ>K}Vڈ*^J, Pbi^)1ncPb"`C1ZXX0݀DT+mP9K5K{F@wW#Q9gi64bYkegF>SH,I A #(322!(3uus8(1#Q)$%쫑KSF%f$*132(1#Ē91CPb< xA9JPf$/p=~H_s8(1#Z@V5#ydь JȰPbo !%OcCZ\(ԯ3#W9/Qό>.wI YڌD0I~$z UmפTCPm@aTm Is 6j3NtRIQ$ՌT "H1jA!Aj^RajTZ`FTsƊ2PQƗT932(1#xBRbȠČ OùEX!ȯ҅,RWp.FJ gqA~)D] UWiW,fW9$_J!Ut3k.44Wi{+5Wk#We=rD+m+m7#kmd%֎#V]+_i"vLhm*i.!Qh.^v,ڱJs+ް*cCBM_ʢĄd%0X\@(1PQ-)B@ !!Q˂V>˯B@E $3!򼍐ԭj+ڱd}v!2T}g_TMB@9-! J+$T+r@K#1pyVHލu\ Z.Q IZB.!Yֵo9ɺr,0eBu<6$fYd*ԯ)$-kxIEY_u#Y׎ʱ+7i2#bBHE&d?ZnN",NHuSHnFI nk_u+4,6پ6$؀ Ⱥ : ʗd,.YN7: ad¸˙Br|HZ.D!Z+Y\+/oY˽ap$d-0rVGtd,fYB!Y#N##Y (x:,+L OHVxeږ^72oJbu Ğ,ZA糟 6&w!6 yGYCޅf׎^ԯˑO}kSbu!څ,pRZ?^PVk'8Ⱥ8ԯ6@Q)B />Y ypkeX@ȰuH|! k؋/Bػ^tBr]BPxeIQ!ʁ+#:r\-w!UY;!ZN!h8(\T.儀+Fp$$cٴf-prB\9^r<pF:!K !JH˕ç^,5tB-wi(̄$- Y\BpY& BS\!ʥ M!rLMHStoJHV@)}f}v!պS39¬.$}fϢP>j\RHg >bSHg sU(%QΓ>SHBBL3>^g.Be<52! ⼸uyHuSJgI)Z?RbeH/) I.@[8eu+ Be ACZ?Z=2` 2 Zu*pFQϳϤĎXY]ؓMJE(#%vĢbRbG,JJE(%lLT*deB’ aI2 (1!;dRbB %ע+ʪC@~)T'd_B%WtL D!^&V|B+c g!ZqVHR&$ IhJ8!4WT&d\LKȢ* BB>rB\⬻\iVH\NufB@s̄,ufBr]$ Yh.R5WvB4WVB@sΚ }Ҍ$pRWB>LȢhe'uuHTWo%¥JLH*~LDIZɒBkCꪝRWJ!y!uU0U BK",BIh BK"d0 '%$ -%K+Q~!h,KȢJZIs Idx¤Hɵc \;0/ !cԎ YjDŽdu$,K/䗐,._ %d_B%$˯ '%d_B%d_BE~ Y䗐УEs2i.!Ys)\4Es Y4!c<=rh#,k'4Is9#yA'"HYQTpQLB$S+kO $S;BH<ؠxVH` Y!pbz",J",IR Y$e9E!IRaQBr},ZApDSD3Rb8 2_z~Z>i-|~Y>%`2>(lL\dQiB⢅ s\;FXy!%J+K7V!Z+BJ,Y*!Ͽ_z?E@)cAgS!ĢyBJ,=4J,] ypk%+ ()$+1!Pb_4%m $,.$QGdQpeBv  r}Y9Шz@)RM!H8)$K<*$.Op3 kgy[Hgw?*o!ԃyv!TڅQag d}VΤ.$}wg ̭g|y>\DY&Q&D6Q&$.O?}N5^F/#؀k++_vRbIJkQVH/'(dJh@]JuBPb|MJv=,@tD{(+7ue AEer䆄dQ02 ʢEb=/ԃ9Q#QD_(@Qݚ,ʫ52~'Qv!2De8,!(҅\Wɯ(@=C=B_ Q~a\oB QZzCXʰ_RWW&U&QhV@h)BvV2y|ʯ@R%eYR=TuDTeIuRuDTO2TrHx8"m]m=V%dQBn+!Bu[Iu[RH*!HC&I%dTBI%dTBIuH*Po+!Y]CP]!n$u Ʒ!Y]CH]i !-YG]:utBQȠnK"!'!xj$D3QB%dQT 3B@Rib!YR]e$UTq6VHToun:JHQ  ! B<䨮ĢRW߈M] YԕPW|CuUԕBPWQ ]ʥejIBBBnQhE .ꐨ~m Y궄,u[,Y궄,u[B-!YR]8m ɋ30+!C&u%dQWBRa)rǟ!wʂGHZ hv,yұM~ Kaa\ uȤ|dZUFu\Bp\B%dԃ ɚK!i.h.KKh._&uT%$k.PU7/!PUƚJ+Q!(օ\ͥp_LKH_ 7%$/>^yuٰ,.ɖ}Dduٰa/Y=(ˆ}D߼#lRblJLȰ痑a/#Þ_Bp)Cna/#Þ_F=,{~2(1!Þ_F@%0m)62edKȲ痑VR+N @V|W82o$B@~y!Y~)Ka_NXBR+N/ 22%X9WXذZ+J+BV4,($+ IKmZP,{ged%0+'}xTq/28e,ʲ8HB}&Y9I IoH5J1jcYՎTo.ȿCj2. jVn(J+‰B@5VE'dQm@X1pVJ\?X2+O(J+ ڍ\k\, ܅Q!VGoұTS+N`(; ,Gz0`Fr=NJL?$ rL) ST }^bBČ,RMH53a/1! {32%f$K ^bČ {32%&Zia/1#Y)sa/1#^bF>= rG d}, v K5Fe["`װdEa|Q6p97_ riqDQ)R~rF@˥[TNTNt 'QF@{~s \֤Vg\*03.Ր ap3#CLR}fípb|M32%f\z_62,(dah4ch$j9Q9ZNRf$j9ĦXjpqvȰáP}&$/0J5cFfdaLȢڌj+WØa1#Q];9g3# ոBgi4}od>3oP}DY5EL(K^FQfdeB@V&>323#>3STH|({CPb BJQja!pbRfX+W'դsI35igFRC_x:3# Z+q0Ys9U`Fr8Ԏ Yjnj cF1#C협.D%ƿAávL/Ft3WyUGůSEA~S‰Fr8,(+^S42,hdXN0X}VZ!}VYkjTF%0)7E˵@uf< ɚ+? !_<B+!ҋF߇,K/^45B,N B_qQH_H} {!P'Є(+(+O>-XNv,J+FTS80fdjBbI Yg״X}YmeZTV'$ 7҅~Hܣ!6P( IY@!Y.jdTmJ-OztR- ! %7jR¥Hj T{Cgх }OJ+˾cF% K:tBV}njcj_3څ˾cF`IkPmXұUۅj+J,A)/P sEKVmOH)#զT_ 7U_tjXQ!I5J٤j)GgBHgoQ.ek]%VN,( A)=YKHkπ>+>SuY2IiesYqFeq&QvDeeQv"ʎȢ@]#QvDe-!6Q&ceBQ&deBQv2(2!YD!T%VƆYkegB@E&$3 fQ0l(KsYBQv$ʄ<JJuX|+J,> v#BJ,T%'jd%0W~)B_Qɕ_ Asil!K"Z|jUƆVifupw;duu!r9*+J( Xe!$W)̒zڣQVZ{9̒J!H*>ݛ)ƙCH]Y0!CPWùU YĄ*2 7\[2QV SXNkڱ,)Yj!ŏ(JH~'U.@_+! Z+ ʱB(So\B@sV(kC4/!q9EYs)U!ʏN\oNt/' Rw s!o7J*>͛1H*!H*!YR]LclJ",JHT IuH* J&I%jx=T=tu[H*!YR]J",JH\!(fA< T7/pS$2PL<"+ˠBF)^@Gdty)C>QYG=@GcKKQG92O< Y<ᢘbB(&P1ů!Xk%STƆSiSRLE1 Ŕ֎6Z|O xR)> gՄxxOB?{~9̊)? Ɋ) I!ɤ8%dRdi!Y1)̊I1 ɊIᲸ\Igӄx*Jt S,90+<($+PL b7'!II*~AIœ$.$IS*{|! x&$BT<ۋ^*&uu U 'tVZZ>^ >^XP!hօ?R'tB_SYE}VG VK"Մ>M Yj$}ywtagB}&o>StY=B@VHd1V~l1U~]83!yyB$H#QVe+cCu,3pY3xYrzHK퟿$3ePQN$՜E}vt">S3eKoWF>SH,z}iT[9=Y) a)4cd؛Ȱ7XʰtT[HIE E(2aF5iƞnR+9eA$0qDY]'ZDm/Iw:`R?JL *"Y*Ւ1 ",Ւ[$K뵘T ݅8/V}7U+EDwOVmo*혂a%L^KVWO^ kFR4 $K ER6 T _"I5?QYfX$aPj`8 Vu\[*| &c5׆ē,"OqeZ1_U5"V͕~RTs-RTs4m)j)jPc &O5<[M<3t|O=@ED<#cbQYG3Viji$ER鲬J*_ɔ MG+IF)j)jjB)"ꊰZ$ >^Z:'P$7"XZ-:^ 鯯(rj| ip/!d/"kɤϸ"˯'5YS5DL4}?׬K_i.Fs4UW MH\"l@+ Ī|\S D45J@5ׄRMH"l4H@5h.?USH#@J,? bJ,>6 Ď/J|-YM(J:iE5oQbJ>pQgg ϮQ>{C:.*gώgxI{Nd}F(̿nPD1(S(1Qb~)1F R)1FEoUOEdeĤnДZX{j._ĮQ/,s3s MHg>#4}箪DagIaS"M g,^b?k)4!rדGg,&3s3MדLWUCd5Y_5!Ls6 D4W( ;$k EsN5Wp u" ssAF]y@j.a\i."*>N "O߼iZOg c#TsŧA}}S8WAjDaVWE`8 # RE({bwE"̒|5 Hn9HشɒjB1ZgH՞iO ]=h.Ճz0¦= U{BϐNhdu7t ȧZ @5H%@-,"BMh/ԪĮQDhgĎYU RU4Ub M{B$ްQWDu"G%LR]IuR5"i4A:L]Mhꘂk5JӞD11kOx| "0+¬PՕ&"$UZuPx-U#B\ݣ1TsT $kl8@+5T~]6u"+:+\E4Es溦 8qXc1,E~/Bkp2_wQv"8"[;(#eɢ(LDY|sADQF!e%v&JL؟_ǯvKOBĎ1>;ΩuJ-"R- DFچY]GZZDZ2dT;FڱaԎ]n,"QFնnHRmoZKRm?}q`j H!)H"qE"^T;^~j&Վcc{S0v\ڎc#-.)HXiKKGdwN, c;EF-R4Y\[DqXSHjZimԙ-&apj8wZQa~ѼTsHpفDڢ7[DT}7DT[zjKm ڎ3 4DŶEj07R횟I5p))""Վ7{"E"E"QmچYmXص3©j}74ώQ>{,ʮdܲ(g-EZD>^31T},6lä,&T"6CƩT;f6d}vq>;2L_g>%\gǪ >6̢욟7DD/KDBSb0H0˯/\aίhk~Ysm(:kC\溎BnHX ?DhM!К, 'Ih"׃]c4k$#9F%ʆhD(e!uf6J Qb IJd QݣD}(iDH#DH#@Q",dQ6UEw`R-.HZuFj jiTH@@*T-R;HjZ㌚T;.f7EDQ_;kxQjqعlbEj0^PqT;NH"UmώPgǥ(;'TQ'e YJE֋&,(: "Ke (DDe (QvJ R2F4 $2,E%(FQvkxEZv(FelBkH8q&mjR?&m&m&mP߹T`5i~RX#@D3v\T#LRɕj&vOUOTk S_i|~m~m_"p~ 8F4p M㱼iAD6Zr ZnJˁ$-w8_FiHVx#lH@#l  Qx )JUbϯ'{5bo,&b*7DT,WMȺ!rړIdnF !&8F䚴 &IiTH@6H@b Td6I:"RBUZiFj &=H$ "R-.̀4k4M!$ R4\h HVmZqMZ@DŇKF b8ϕjv\RF(F(8pUH"~ng6 mFdiHpnJ4p ">_pI ""Zr MHH@-` u idH#@Y7H%@Y:FցHISPwRŁ‹ D^q Sx .ɲPdqzɺ4Yw\&c]U RUdYG(x#YSYS0YGŁ4uq "Y;&f:ZUY+] "뎇Nց4u Zr#LZ EtpoUۄjpg YM(Ӓ=n3>;Vㆹ5J4p n(>?|=LXDy3F>$",> ",?4¦#H#@(=m{چiH@%(1>;v>P(c~Ďc]tiZ:"JSm\}Fشi 6 0i$l4RiiH#@3l'-G1ȯT5i " &z}=+,E~`q#H_ kH#@ "+U TH{"IsmhB&혂iX";VB >iZ:4g M B0t$ꊰ3{N]duEب+F]4jJ]|:3F]4uf M UH@}}|+_5uE(eKҊi@lG4]e65j.UN+ʎQ~d%vNQbJET/ɔ1?QbME s/__]ήIqD}"Jl6Kf>DRb60QvlF !Jq({2(\CHEY|!#˯㈩S/F~4 =&35zY%oHNqkGTd84LFjFHTXb-چE="E="E=Hjo(?3>;Lz-"ծY=!X=9c[Si{8R"JЪĒZ$ 5mwF;iJlCQmb؆"|~*| YgTU5JTmfvnSm׬MSTu`W QmmB-RQHQQbΗ+Hs"eDGشS\عlpǬ֋DGش^\$^ܰhH3۰h6Rmâ"e{:*Όh[/֋5!bEYh4Ys=h5DHkFh=D'@"B+εH#@v,yAv_ ~f-RggH۰\ i4 l,Eh[TZDV|D,L v$IYGMX(zCO+4S~JC.QEU\QvE45JSQHQQHQQHQQ5X/F~HkĞ>[hHe֋f%6adql"cjfE>alF;-R00H#@QD.@E>#}v&m& I[I[Kl$P1gu5i~co:}A*}"Um~/R-2jLUmi5Sm*Ҩ6F4mSmUm7k֍{N4p Y6nJ|;fmοP{F 0H@Ҩ6Xնa#m7lHQHQHg2xUնHܣlC_YW $ sچRvJ i7H56F4 QmXZi@3FˁM #8,2 pDg\ ?Fɲu gHK6{-a{MEH{Ve IStHSgAP^\wM!פ暴 M^UԤ45i MM "2Hrr\FV-"ΏܰInJ-b5iI'4pT5i & p MMHS6 (FA8\FXrH#!h H#@7H%@i@6F Ri9Fˁ-"];i+a_#lT@DcSmǁTH@j. $W6Um 0I5Bg땦6 $2F E~ %"Jo&?(۰>i(1_G3%vi52_/6QF(BUgԙ: :32Qblj%6(1BSbzM3%v\ U ĎQD6J D5QbT%Nϯ7(D dY=)xtJl63G(ʯ(D%vaD#ʆQ 資H@D*gkz-Ҧe " ؘ(;FQve((Q@(2E{SgqEi8n}k@*QD=M#HS-ڄUHc &ՎKj TDanHŁ4uq YMXI5FT;]%@6I "RFajOR͏j'@͏Uf6aj MGj~W5zĤZ4d ,ծQDEZ. &բh*@%W6M!BdFH5F4Rmi I3PD(;>ui6AJ5R TDԤ6Q7H]G&me4X%@Q҈ALW2\}FϮ$gKR}棘>#BgZ0}FˤL34}6c >}˴|A*Q6iԥbg(|X>1gώU $ !;iH3ܐPDqy(; 0cXE5$64%.ETb%%\.%d22Cv.KWRQv!RxIE}伄k%(LUb~%"Ywڋ&؆Q~ȯJ/uD~]DIs֋ k/ֆ&‚$uO4W|\aEDsGEz?}keE؋F*k_{_(&,E5J_F{hkZEe(Ia_.M!)g4%v\TĎ,JJlC_a E>zCiҋ$%vNAEke(OIKE>QgE>K_/"oT ^53U}ދd}"Q<( :ED"RvMLY0x>;Qㅚ>;ϮOPe}{OY>of}wώ;kx"RET{Cg~cشt|g}vg(Ϯ#:k&ծY'FJF?ݪe}vEyFUۋjmx1pq緋*L׮QDbro( 8_ /;`jkrZnèPڎdZ_ro(Z|{$P3wO*ՎCdZ.]hɲL\<C󹙖a636w8 '7B\| !jSi9TicbYM(ZPqLEb5i~LXMZËdYG:uq$˺ {äްp Ix:6?}DT5]J4np(w\M&r,HIRhrդ׬h9¤0 8BUm~T&'ODVmoy:"-j SmjP &YU[\5dv"x-Z$TE5V/JHpoTT;gR?TQ"ET OJHGh^D1h9W^_D k/~E#Lnè0I7}ϬB%݋>nhgY}F~E_}9JjoiH}vbӬi"߯T{gg V+qtP53_[6}Fhk>gk~㚥چώ)>ag(ώ#lBgώd옟3BgEUm~ʼnT#4vLڎ)T;\jߟ_+&FivC$Ygd(\W0}c4lk G̚BES%j,WMfLXgo؈2F|dQ62Be~//捋_$2F|?ɢlBj Y~.g/]Fj UH#@ً4RmJ4R j "Վ"RmBjf}@DqD]gvD;NjE6lJ4 g >i Qa#@(## ;}3Pj,YMڄ&ʢ$iD[:[:[:.Rt|Ϸ[:[:[:[:.Rt|eSt|,(#lD (giHH@#ڋd%v|7;-"J{>{PW-: PWt Y~f5/B(;·)@DmWQ6HѐE#J0)7xט:&oPv. ˟'L~]6uLߙ:>U~mʯcbEiH#@6k\ h.45ic W4o|kS4ׄEs/I7Ds6k#BPwB $ ,_WB+-Bk,̄VHBk6IG$LtT|(B*3Ru!ʏV~w7H#@!c|Oк&ք"EhN2<4d<6dQLhNv#;Gi4hh 5ׄ!4o<`+7 Y~GAlc#(kް_ MA "QzC\$k M#aZ"c& &k2'V2J=5kZLh:΀̈́V\S 'ʯ " 3 -[ɚ%k'4ukm6E(ϝi MsZ\эH=\~oUs]X$ "8bUADs3\XC$9A!q"uE(8 &):>L~Q&&\umA6DuvA; MA MF02BiHEEK",Gg(Z+ʎQDJC(9A RgXF,T{æv Djrj@>YLW;"%>;^~@D\goE2_6QF(WU2_Y6Q6c QaRbo(8D"&ˎShJxĎY#%v\VuLAD2QQvM! M e%Q4NW8fǰzx ,֋" " Y( g g B ώl,>tH51j(YM(RPZ/3@D/TqzLovSm(Yj;c ڎQLgTqM\&4ױAD6ArE,՞POZ zO6?֦&4HVmǽ6gQADE56eSv"x-PU?jbUmdvɺㅚKnn &""d5n(0VmXT-RT-Rh9F-RhE5Ⱥku(&QEDgd]Z]$:Buix.nB-e݆QMWɺEb܆#l"V"[D\jH@L=k`-wr3-ArZn\WpZr>iə/b_ɺkuǧPuo(Z l"{O1Jna!)"[p Ym(UmI-RhEbۆ)$a)T"j[Pm T[fjgJ-UۆE 6L| bUx(&R=FUx4boJ4b{ E"YM(b[[} } Uxƽ6L oænnFց4Dveh+ۆid4j aSRHg@j{FdFHA 8eF4pdםQpdED#r5rQEFV6ZnZrEDrd?_-7D)"E"E"bZ[Dd]ZYDdq#dqL]nu{(0a)"r>B#I ..=,RŁ4uquququqDG,-RhE -hkBˁ4Znr()䆅[$ 8F-RT-RT-RT-aS불c&[$ u[pZ ZEj#4gRmj^UmwKjUm~'u[DT?jUmi]dmڢdZ$ MSHmCj{ K MLokjɐ6,"E"E"Y]dH5VU"EHޫmqâl(6̢xj)D"EM"EM"(iD"([DB^lgɅ E H!} jkݎ)O5pe."[u[u[u[uijYwLunؘj[$j EEbUaj۰j[DqdB1wL!׺m(x5m؂P_"&UmdRR_CTm`!;c;^G,Wjo!6DVmjY5\Qm jiTH*7vLj Ti TiH#@ڄ֮2>uq4p "} "cp GX4\pT$ 7L T{ì&4}vJd}v]ޕ>}v\(>iT]vڄ&ՎYI5FT V2ALcF4 $6¬ڞSm XkNd7a%@D"E8F R 8O!@Dp p iHpZ㚭HriH-Gqs!Um6p#lH#@ADfG`0$ThN@Ҩ6F R6qX}h@>#FN%vbM!Q*QRT-R4\$VVJ Qb >IvZ0ag6B D߱b>;Ns$uJ~:Nȯ u>۰_ Y~6kqì"뚟THן_Wȯɤ,n\Q6Y({2\ +&kB| 31*5ȯ~"˯.s7H#@"z-qW6ª $6zܰ\ i4 I -$s#̵cY]Ei-Ƃ;XKxKjbk-[:n(B+6c MH\YsM4n(B+.j4B hӸHS6HZoX4d\hȸHSRRU4B Z MHiH@"LyZ MHѼq$0 64c EE6XFS4.~E1M"EFްT ECE;mX4di2.R숶HѦqM"EFM"MHZEE6 Qh UEDsEռqy#h.¬:3暰ih.©Z/.R^\\T D*(iH# &c E**k~"a#"ԐqC\~U ii>[_ z09zkF "e (iDH#DH#@Q҈2,&DHe(ɢeTUb Ҧj Ti Q(?3j2D>,ɲj{2SmCo&'WĞL&Q]C(E]"C>+ ,>4 $?7D_5&*1B kgi;EL(ώ'g Y_gIvgRYA,5T M= &Q*1\%F+}F3gb\RmBjTiHS%چEgg >ɕ_V e (i*@ʯA/Ϯg Yʯ'̢ %(1b?E(GH@}3F RU~|/ g M UH#@H5,6H%@ԃ4R jH=3,6ǷW'@D*1BgL̀3P}v"lFdFڄTR_jo(o4M]S0}vЪ!#H#QO*| &̧U>󅋮lJ|T#lHS;5I5tR DLT{ɯVQDI5BjLRogUJ5Wv"M E]S}vg>;^3BgD>;.G3#ufĎ)k~ĎCdJ,4SȤ,%!#Jl2UbBD%FY ̏ՙ>(D3#+D*ʒYe(׳ȯ!&ʎ"M7&UT I5,բZ\D1J5zPmjKċdAj0Vm(R-5."Mӽ"Y'1jyv{-RT-UۆImچ↢ώaxeYZT;`R--,"RE*ՎÙUۆڎ)j E*ՎQLK ^dwgp' \|K뇋dBn(&JXZTm+MEEDED% 6;W7۪^U[z^DTZL% HVmQOjKlQm&A'-"-yEjŽMdqCjL]Sv|XhvDPZ/SJBU!W )2.R4dɪmCQmǬMcRDնaTmڒ{Y_[$ H?eR}vF-RHAt?3EU[2Z$I3_P}v2Gu2T;F1XT[jRmB-"R͗EmhRͧHE Hܣ16}vX>#{mDzM쾶Lդdն}gBܹ07oqjg12ٹ,!djCd6Yj5RmF=D%ՆhT"KTiH#@HA*H5jA6v1j(&Վ#fRj "!H\0H5,E%jFDZDZ~y7oAD/ߤEf6\v$Qmڎ=nڄ&mCg5}v,g(YAD6 $s ώ+M^%@Q҈2ґДX\%v̺Rb I(1J@DP}_iZ_&&HT%I$o@HA*)H#@bk~T{F4 g >5vDT R|v}J EͅSasHI۰عlF-)Z:(#Q7+~fdQFD)A*}F-`qR DaglCe!;M)1ئqC3#,*@L*rlް_N~4 _ i ""oT~mV=i@#lH@PaPqڱ 5H@5J#@ׄUEvEMT +&eOVɯ!,˯5D#_C4kF~ dzN~4 hH#@bEzqFh4Ub MHS%6HU%"BZ MHS%6-ܐB@"+޸Ri.v+ #&0k MsZ4aѐq $˯ 2F4J (i*%F(J86UEHSQR}btM'DY\Qv|J(i޸HѼqix|WHa{B_>?_qDW4O v0k MsYj@DsEi"oTs{զq4.Ri\D4?TTmADs 1͕@!1hh@Ds׬iamwnUQ"H24E( ̻m2+2",3[l!"ECF(QL]HF_J+ 捋d%F(JxIĎ5Zkb"(#QvժAMY*1¬EEe7)@>Y**1c#l CSb iH@%6(1F4J Qb Rb Y6J Qb YM(Ji@*1F R3\%F؈2FHCp>毯{{g>/s&ɢ>,24C$}vۤ7j>I5äZ| !R-^eC.gǬD0?_4 3iTHSg6HUgh9Zr r I˽a#@";ADʎh$ 7lTHRmTOW ? 6H㨊T" I(#qzD]}Үд51rq$k +-6-A{ø#aj :KڎdX>Pu9F#Z\b}A>Y\:w5H3^H'4vLAZ\4ӤajFYj$g~3l츽lCe~#oT",.? "0l7Ad粴"YdQv]jNqBSbQv.;F%v"J?Leǘ\vM!׃;S>E]Qv|(;Gɢ:R%FuJkTݓՎ](;nM(Eu8M(;^2ܐ:=ώS3{B3;^^<`g36¬ڎ'SmDeoU۱ QDucxHpǍ cq98]4G(%Ucpo(U6BQmDGATۄ&I1զO/Ym303BgU'/uf(rɤbzfg>TM&Qv-26ۆeeMh.QDsaeJE+DT]ZuL]G!7̒T YRETnqT")HXHVWr Y]Mh{_<<"`$׃fIu9Q $ E"ԃ\tT^`QzcbRF(B%@I%Մɕ_Ej*. X\7DqSBx-&`EqlThUh]4B DZ$ƅu&ڱ㌪T_~+ $׎5ALG9OTbyY$+뵘 2 q^L2qUQv",EM(zgHD¬Į;ĎO!QbĎB#*(x@DׁU%_o.JŔ5(1Ɖ" ?ؾcå*kĮcSՎ "JxJ5%F(J, ({e>1ݣ'ֵiI_F}`go)DHeoرcJ:pVv̺Rb R7?YT/g1E(oT~=VŎ H1(1BQbDF؄Ď$JP1?Sb'JlBQbY;.ĎɋДX$??EE%F&J,yQb>7Sb>ՙB̎1D#ɲ>#,>@d} >#}GSY)";mgk0 EE8pώ`*g Q նHIm,6)"Iano;ALSztHD4Rm(6@ʯEDEED]majfv^jijj5֕@x7Zk0KpZc ڎiHնdm1զ&j[DT[Z(]DTfj0VMXIE H!)"Q6RmB-RHELCH@RmB-bR-tB4RmlB-RHET{ܐu#RmCjKvNj YmXHEGTc6X2ͅ6diӸalӸaVbo-RTd%'5P2\Ub|cJQbgm_*ʮQD7 ED\ao?%>;G}vE]lCg.gJlè6}vL]K>D"YXdҐ1N`ؐ,6dgCĊ2XQFqe5le?De(#݉2F4 DDZ(PD2 Tŏ eqDD1 %"J,ތd%6(1¢lQb$+1XQFX/~q$ɯ7,[DuF~ +6@@Dse\Qvׄ"E~3)*$:w"y)!.ȯp`qL~Y[$o\ǬMsMH$3QTkQ%vqLŔ؄BߺKUS{cuf IJd%v"Jx-RǞEDE5)(@:EDVboȯ4uD~:^ɯk Y~]Q~QϦ"%v"J>[DZ/]OVbo(+A옂/¢lixZ̎Q&(leĤTE36l^f̎gٹlìɢOE_!* ֋~hEALUE:3jf6 $VmD6JlQbI/}Q_*HP41k\ǭi UsKˮYf-_G5Qbԕ1ĮY˟3;Mdl,&nddYsM5dIsmkLdI]m$fYGMtYOo&3M(097L ydp6=7V0Y72eB)IaCj,H 0 7|Yz&񆹊0 EY&eINa!aBq ZxøK҆q$jnä0/7}6Lo0/O0-aZ<\ BA3.}aZ~ôqǟ yǟ be7L o!o o0-aZ0aZ}ô4y0/^q *aZX}ôitC L o[jm0-_n( i ӒG´aeüH0n0n~¸qw ż7Lv7Kqi) Ӣ_?-4r¸/ɆiqlC8Y҆i rՆqa aZzüDbӆDTccôTa\züC0-a^ҙ0o;a2aZyü C " aZdyô,_6.rm5F^dy21,L[sg0Dq$!7 "/Lz~aH c B@:aޚ=NlY]"̿0Ϊ$8 $8_g>EZ]w wy$z2H\@_((0r}>AϏߐ9JZ%.(i~{/g>d0r| ~||ڦǝr/_.z ,>X"i anAr#cy~5|!̍t5]-pm*0j8"}ѿKO@b"L\5D>Wmos~Wz+¤)ȯ$_Jo?럙J"",joɢ"%&uWUl"+2QW~L]%Yn_.oXEDuaVWMՕU?PU[DUZDUL1uub*,REL]zE uHtH!)$"QR6j~k(6̒*f/RHEDRaTi9dTi(6Iu:J*,6Iu^TajT!2IunT)r,$51Tak(MR$qQJ.cTat(MR%EDR%EP$q1WWRuuEVZ:_$V)J @UR$z~ u߿DL]%'cb_CL]="8Ȧ [Dqk865::J?%UG]duQDG)YGm(:ʿmJURJ*S EG%/HQFE(:3aQF$@LGGt?ḎMQ: Q?ksN,9Gu壨QgT]&0 ??n*u+_B6v-RErÛcYR55hkW\g\]2͵h@LsW Eh59g5ױ0,kè6U :E]m6IuyTǑ6b*1QWY !#m]cddV"&+ !+~b>ȯɲ:^M%HCa5^ljD.ɢPDY|#k65^$ ",5,' &ʎQLJEQEY$[DDY* x",>>Kd>FlJ<&g >)j@*}3c[ (02[{iH@E}6H@}3Fd}6pV g >lJ5^)iH#fj T`6 D"H#@DEyH5j j j7j "բ vlCgyHgY>;W3F4 g >Da@}"̿@2j6g yk@(jɪ0NqZv8PTvt``}(N Ri9JlX%a۰[[$VmXT-Uۄ?QUbj;yS%6lH5_ jvML1Jj"m@w8G*#wMA5pl0Nq,8[9,ESYGeȺ,;Βɺ }(_ou]$dl,L1o3,7N<^Sɂ,d1HDO!DQ0vԙ=6N_W T ykv"PT[$?@jvDT[<$oHXH5j $K3Bg$G.,&4QoyAh{"#4C Ygeqbm/@D]dQF(ufq$ ΌК!m!."8D"ʮ4C\D!^)!.EلM3ED6Cl,j$ b,炈> DY\)'.'NX5N\hHe"Zل"Qϝ*( @:3QbQV4uf4-|E"EE-A-]dQFEaSg6Hp"EEL+(#Q2j!.R4Ci!.:3\g6=;,Λ)Ub(&PqD~G_Ѯ3B\񗕃F\(YsJ?c)QΌ0k.B\~bm'/,/PT~>"lH_ /_*@D~E*溦w0׎fuuњ+BQWkꜵuE(꘵TfIE(꘼H*,HIu]QR__ȵcyCdI5YTOf*!L$[$dRMdQWCf}&tH@[xnK<5C<`:*%QQe\ Dt?Q it Vo@DR[?^ QW Y]Mh*>#< E" Ҩ+F] R+F]duEب+&uEب+F]4 QWT kF]4 ${Jh4B Z ɕ_V QW iHVWO*4 $+bϯE=@=A'@A*)H#@A*-FhdEaH%@-bE5-bEDha'@rׄ)ZZ Yhf5a%@r5cRuNZ_z/i.FsdEhA*h.s5aZY]Th3+F]4jQWuҨ+F] "ꊰQW iHRWoHADRuc:zM]6j0urSWlj@u5+0K*,ERI*¼c8qz\L]oi{x֓UBk1,b=YZܪ=uWQ5D_O/F~4 $78$lH#@b4XHkB Qb m"lH#@= RUs<{ Y6\ %WRQ%VR@D]d%F(J,.d%6(1BSbz MC UC!Hi{"Jj"JTfijb &bYH"iҴHɢl+f "| &/kA i4Ci!4!|@f c cT;4;4-A(#̢jҴHiZ$4-ADQ\UD g M= վc Nhv YJDS7ei83UDE"Hg)P?k>F03¬Ϟk{+>#z\Ud3>,=106T }&ղRi{8={UmDZ1vES8_4D1JpuWQeau+*YG+2 $i п2pQM8BABv#hg>F>#+v#(v#HZn(&nB-REEban{aRmoX48\jR $WmY,j[g>K{-"eɸHEٟ?^ů!""ᆢ"ϒ1}$"?Y[3tcUNjEDNjE,>>KXE1Jg]60 EDYZVZj`XXZ1QVڱQ1Qvde(&ʎQLED%ڹH#ڱ\ڱz(ڱc&T%4)PUb~U%EڱEDED%(OH Z;d%vL̔XRlQbo-bc;΋֎G֎%HTbF%ՎL;Fڱ(4cX ڱ E~׎-/u壈:ٵLoE~m(T~ȯ _ՙ]S:3DqlLÑĒZD?>Sg(QmنQM(gJ%g>!FQv^x6}׾3_h0}>;a*}3_lS}+6,HI۰I[DDqL]HB&>F)Z/.R^\D1J_0k YmEن(+f}a)"QV쏯gC !bCF b,<; lCeDYQCQ7@D]dQF(ufqI$ Ef}vJ>;鳸1t 3gq- $ >;F}v/5g7} Hg> Ϣ1}AD]d}>}S0}F3ka%@L%Ib,9F( P &>ɭ|D%b,-",*,,bM2?/&ʎ DY4 YfQF؈ALE "8 &ʎ`X#ڱ#g >g~m0 U魹2BeUSQvb0;QD D?uJ D5JRb2Fv>#}OE3}63M6 DBgɅ bWs:}3FȎN "R0I7,}vJ b׽d}v6le(ɢ02F EJ`DQJlJ= Qm&+n,&s*ʆh*ʆhYM&c>Ɋ (c~ +ʞLEY3 (i*@(;Ό EfQF(̏㨚(;2B(e "RED"ADfQ@raVb٢KmSb6|JQb J,q bJ,.X4J $)k,&잂ؘ>kY Yk >1}kbώن(Qv\j(iDHeV DD1keq=$7JlVMSb YKK RQ'VEY\Q槻e (i* ?iHS;(A*%(1Fd%F(c~iH@D\SbԎJ?iH#@5HU;Ԏ4 $/,&H_7LkJhЊRD*i4HQͥOI*saVWOJ "uP')Ɖ~"u+=oH@D]򒪫h@D]+_74uEjEe:N@D]}o+_6uEՆ"ndfEuaQ$:0WhfD(鸦DF)v[alb1jAn"T[jDFHE H"cD7 8?.tYV-gT'3Z0TH!)0|_-RhE -i@LrKkD-h1-n"[wlb߱E -k67"~UZnBˁ4ZnB-RhE;ou7cSx~& oCSx>\ga!@YȺbYT""뮉d?dV-6ZnB RiE=nB-R:,6k%)d"&t٥ڣlB-RT-R(E H@rچs3Wjf-.U4k;. u˷ˮ;F oCix(e I(EIc\CaPqr )8g *"V֑:,Lddq72&McZ7"SCjlNq2jiFiHQ"0{ 'p#lH#@D=ؿAr ֋Ī ֋A֋<& HѐqF{4{-R4d\hȸHѐq&-GX^\j[j[hҴ^\j[j[j[ع u[عl!"ECE33HӦqM"~f-e(ZnZnX-aQ-HQ-T-RT-RT-R4o\uj ?ҼѧPi9y"EHS-i9?M"Yrr IZ EE " ELW['@7HӼqy"uqƺ8¦.n,捋;-R\4z\[[[Qm4uq$Y{-"W\$Vmaq#H5/V)?.RT4;-H5jΩR--R\$Kc?;&&XQ6_cͪ EEq"R*HAD6R $Vm6lD Y k*ɢlª_ & B*1T{2jI~kLs8Ld;D-?` 8Ce]4 ɲ8\*zQY:\Gq;NhE-gu "m H#@DE". "hAť .nBu |tY@..=ȃ VVsbuq(.0f78B;^ buq~0L'qF./ӁH]qs[IBi-ZQmѲj ZA._ buq(I6 D5Jp"&ʎ)(#lDT]S3_VvLLajΌ3lª׽JUg6D3LD1~eO&l\}6Y>,˯2D_O&k,""B䗏U4 i/qB\RKAD~ŏ&_Q09I#*H@ MSA MSH)$HD y72@%(1F4JlJ4J $+1¬Pa@%(12 iH@%؄iH@%(A*%(1F]6ufOi.FsdE(OЄV\ALh=LߐFh4BkZBh4B Z Z iHZIh:t<(TB Z"u|{Nh4BkJhoNhdEքBZ Yh6BkZiH#@5H%@aZIhfuɒT D$.;IH*FR RI*FRdI>~~ I}"ʗ9k"aST~dIEHA $+¦ DqFuu:^h%@r=aRW";]юDŽ5JZFǏgɨRWC4_CƉeud&/~Bk,LdZC4BkFh=D'@"B j3h.\ETs4B Z"lH#@AnQW iHT4 D$U|"i3$J7ltHnxNA)^du5+f3F]4 RW iH@r;kj3FhJ ɻMX+f3F]4\ M5׼%*h.j.k i@ȯAD~~ "Y7v9Kb_T _ 򋰩iH"l@ȯAD~6\ M5/ i@\VJٹ D,GeXh@}3F>gn?3f?35JA*1z06f?3F " YasHs e TiH#@HAD/Fd}FA*}3}",ALcbϮe}F(_D/F4 $ >+YD"2),V~EQFV2$kȒ>۬eIm_kb߱ED~U/a_JWz-R;HpwE^elb7E@+E=,.b,Elp b,=,=l,> v{-RQن"kX͵aTbYmX(E %)1?Q%JIJ E~3ʯ ͵uQ\isJDWX]_J&kXaۚPkL'BkBh-uH)"7Zv ;wdu')"Zv zJk / ,IE0mmXH*Tu[Qh"ZDɒՆZvӯj'El'0EՕ~Vj LTE]mMR%CHTjX( E<%L"^ ^xg7Oxf&j +EbڰPLbk!+Z_FʯkBR-RH*f'E IH!)$""R"N` N`H=5JѴp(6,H#uֆIha$uu\퍺Z$ XW뺢|&)Q0`CÙ#CWg v/}]}PW Y]mՆZPWDuE(ꇏ J] !ͯ!QIsdYhMdYh"GCКA抂aE16ݽiH1pQb` clâH[胁>؆i4H[胁4)Zb-E"EK i-<dEX)Zb AQݱE"XNjd%6aTb(*-EYt-Ey,"YM̟H1peqW$>"(E>"Yf%UkHVb(EeH1pb"Ek"JmEQ )\ Mk͵HZ$+1¬Q Mokb"(E%R@D )F.R2\hs4mEQmE#Jl¦HVb(E#,Z ."EkH1eH1p( zBW+ ",F.R@L~YWu{H1pb!H3pF~zϯF~ E5H%@~(H#@"l )\$; +:^$Qa3 qޡȯ "Pױ>_Y~:(a\S5YmM֓К, ɲКih GN&jF] 4 rC:(FG4: QDu#uEUhi(uҨ+QWn"*zA( q &qI/0AtT<ŝitHqgE5H@DGŭex,T YRM(-FG4: Dt#U:jJG4: $(BQ~mhq*I"*4 T YRMh*4 D$U1¸ |⫺UU"lHVWV QW iuEuKH@D]E5HTWP$qFURBHTft@"l W{9a#@LR%{" H@uҨA*uҨ+F]duEՄIl "&8"ԫN~4 _ _ 0/,_ Y~fE/_~ e/t/dZ~;5H%@Ҵ@-Fh R -Fh4B $ -Fh R -\|{W;^ -,a#B~_QD~ǚ_²ДX| "+ɲ,+'%6YVbe%6(4DVbO&Jl2QbvQbi;/!4 g >i "m.¦S%?`%F(J!iH6W@҈2F4 D\Zwg@yi> @D/ Y/ F F賸"Z(YMhc *QH517a@D]GϘ㼨jj;b-nwj n/HVmj{ ڎUj DT[ܣɪ UUMjsgmBSm~Le"-$QmQZjKjlQmDSm?}_!ҸGSm\b- γ X_-1|ϯ,@Vmx#46 Ӌ pKLT0*_&khpr'02-w-_xܹ0rQLrѱ$iw(οᩀ6 D/5GapO^pYNϯ 8—oݽ6lT61vt DT[c6'w1;(I,EIc+Xu,Em'Rf}F CP&2}v,AZb(-1¤SG$c_RbQE%FdQDٹȊFDqϯ!T#> QH5jI QIE H!)"TRm(6,"T[j Ym(R8T[H!@rlB-RE }H@"igl}H>ڰ-na_;a[-Rt)4it1u,h-R4@͵H([h-R4%)"El8 qè&eEڰh-4y"Elgȯd1zf Y~m"Z_=3gi-Rk3۰虁4=Eڰ\=EHa([h-RE E 4VֆQFبE0 IHaiZb:jQ/Ď-1%H[$J aת:P5;%H\sB~-bK_M"6|%a>[PbJ i-R(E %H)"i"[$ώ-,~(>EdⵄB-R36lB-אָ褁T;޹M'mB-Uۆj(J !w# " ɲ{I#kTYM֨!&kTHGQmj{N4 DT?jiT E4ZHq2rEmFˁ]E-7h9Fˁ4Zr r 幩H@-hAD6Z$k9¬Pa>[r i iH@-hA*-h9Fˁ4ZrTZr Z0k$H@#lHHI[r i _)?.R\rTZr Z0k9F Ri9-h9F "Zr )=.hA*-R z\r YJ̯:Yea#@#ld idH#@YȺA*Y:,Y{ff-{f6 Qm]w9h9Fˁ4ZnJˁ4Z H@-hA{IFNچT-Ҩ6F4 DTG6G8_0 6}v)-|> BY\YMٓY->uCTFdY7"!DMH!TLYaC>,ryo=qb:}ALGaqEQR' $(3gх>g>#}x ",~} b,~y(ύmDY "C!賸i2 & " &C!d78Bpdz`.j b"& ElqxO A$նIkF:."R-T q#S@DnF:.agOX o\޸Hg,FBeYrQH1qbx"Feo޸?BD=R oi7.R o\޸HeYژF6cI~LB3qbx#3BgLJiLDS}:};,2.EaMhJ/Mf%v-^aRb+6_+E/n˿ѩot&8 zBm+7̚P4B\~ QFmBQWBVu'_ՕoMd@uUP |QՕo:ƴQ{c(;,n(ݱk DcBZu%@PZbYRbmI1u5+BQWL]nd4BkGYؠ15D8YZed,ޣ,KDRweLtT|{!WHCCU&T I xH_du/SWٗHxQH*TϷ/~ 7'IEhtY$;l\ Mk<A;-t@Hq2e4/"/,&D4@H7@_ M i~4/5Hi_ "!Hi_T/4@ndQ:ҵ@H\MK i R@ MK DW4Y "F$/+Hic Mwl;t@HVbv?@F U $7Q櫮e Mlv=3g@DomeQj*bk R@j#̪Z6¦}6H>ig M $޹læg6H3izf Y6=3,zfM $ 8¦gG׮;t@ ]ixpwT֣ cQu,sPToZZ 8FupQF #lHʘc-;wMMS/ʕ" ɒ%ܓU=!,˺DWY=Ⱥɲ˟C*eu|F=D'@Y u ImXu@rwp "}i jxuh9f"H3zq4$:Fց4nJց<UWADŋzFˁ4Q-v5@D]GZPZbq$˺ E6wOidȺ)d &ȺEeZ:;6i4-w*-h9\w\1{BjQ3F(R-nTRϝJh@L%H5F "2—d@}"XYDgyV}HgYe"X= =(T1gjǧEE"u g>_2g I>PqedJPرxQbb/+w(+j_ќdN@%6H@%anfݽ@r0/B_~;5/W询N4J ĔX[TA%(1QbJ7TΣ*1\!Y~fEȯAgFh.Fs4 \"̚\ Ys:"\'C4h.@O?/>O/z.U?>?ǯߧӳ7?>#Ͽ^g||?|?<_my_?;篿y?;> endstream endobj 377 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 382 0 obj << /Length 2495 /Filter /FlateDecode >> stream xڵn_!V,.kHlڼpa44EJ@Jsvv[ -ə3gxųoyd3GU\zVYQej~n߼}W>п 3__=|;ï9K.&u n<;x7t m@Xl;zfQ|uX8-2z_< y腥%:sbt.ʑ 2 xGh!pϘyV?,J;o 123hL!eO o(l:sRvJBΦKm8s.ѓ3 ; =ҞZO;^&ِN E6:Ճ:-(5UPdH n/=WWj_q(}5_9| ?v/2R 2ϯ }5dԜQ.b<̺|ϧ;iV)qk<="%rA>lP\V"df'q "/"XkJQ_9q$#bx ܷ#mx3sxR@&N_q.$-DRq>q]HH)%E,)l1nߒfgs/ƉF j}1Y6%ш>c|Y.H@ou)6ZIR:E)}$-J/]+V1Cx_}54$ OH?rG@6+Jwxz pU+i8H{X;lt+RHJ8}vsɣϿrk&ʠ)bJ9 _3 Sf3)]ܯi_g㉆eG-dDb)gl^V?GrlJ?w~jo 5BB+|5I˷}iGŹ!O``ZO#yKM;/9K^օC:w :L2àaJ&1QHaw[yr72YY~f`LQAP0$^ЎTLl^#'gF [I[| F YÈc(ﭟ/A*H2 e ENB~O)W،DZF; $Ix* \j!ROS.t 5.fpQN$h Nj<2V܅*L X" }݉TŜiR*pz%^u.{^ Ж σ'a}hԜ 틕܄mU[M+ ,.^, Z,=\6-޾+EdJ&BܪS.2NSȢΔ[!85ZE;vc66J ǯݤr ດ<~\ӣ3cvOb|ĤMEy $Q 6cg☜;0t}w΋8scdoag ]Z^m_E"— |f<,KI] D0Wn>α/9N(ܓ3i VmPɥ¶Voi+AId4,G1K&_i/aT ՚ ЩEnvBdt"haD4 8L6C C%1%pШ{RQ1Á!b+(NQ{8K֞"FD>)@y)ȣb4!.lKU"酨0;/lxI*ʀ.do`4?m]IT`oXn1 ̂B$D VGK!/)bIzZ$ IwM,YW_x3=N}µDUi2UdLW 7&9/L8 dj6LVEb>!e M> stream xmSˮ0H#`jӗĮ. B?H"}|p.y]'DpVJHřPGs*%_T&!0%͔90-/Ake I们`eQ(OTJxǷu" DWL%Q\3iwŠpF% Ytc=fi0@c;Ӯ+Kc^= #@;[Wxi&!_PjYPⱭŽ dY93>h,?UI endstream endobj 378 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/RtmpPmvMA2/Rbuild570a1ed057bf/TSP/vignettes/TSP-clustering2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 390 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 391 0 R/F2 392 0 R>> /ExtGState << >>/ColorSpace << /sRGB 393 0 R >>>> /Length 4156 /Filter /FlateDecode >> stream x[;&GͿ_1!H J@`EsNL_X;@{otTUo<~yWwGg(Gg)G.Hs5??=±8W<~i}E0z닟G܇?~aA|~i-LJG||֞~xxR1>ωYo#L`Ov;}1F|BLY{t{}[N=0bow$bPѲ⓸G냏-+0=zF>XIF&8|{[>owj4 ܴO&N?y1gޒ|ip \꣤`Fxiax0dY=4=Bw=7z H-,w9`|I]3~ǯ==¤6tf(ߌF\!Ƒ^΁USX3`xͫrkڮ0jtw~"\([%iRM9;~YDJT 9RY]4Ndb hjdC%g5Rn+H+;MKF7,B7/,#Z}/I/ʊcsz 񜩘͝%Ijd.IF|di+@rK+PCA7_6IP 2bd 7_{0goƳU YP]e3dʉ,olzmb52I.N<; rA7tQhHw~do"̛E;kC ƈba obw~ɡBGG)xNJ7zW!*LaZMsvz)Qiӂl2 _ޝA̐:`ۃ!ӂw~Yܴ7-9YcPYw~a\Uy Tt9KD˻3ڊ)u-،N$e=sxNbXe7E,0݁oz6+߆kN<]̂ #5%vmCfM_șV튴յ;H]q2 0+οpT~V)E欛l,E -PMk<>Vۏqw~B*ø8%k!*W|YdFhD;m(h7/VHćz|ko~ǯ Vm 0aŽ☶A;/L;wz$_I2'%JwuYC[]!vYk/~ǏV3 _ޕO6Av6S^`FWc. >C Ld:yX_/E,FѓpJՀ+^8*kRC'K|ȈzG<}'ZmGoǢkֈI6m&Wx88,vCB/Ǣ8 jXĉՔeM`tS̗+\ir A2]tg\W sFTZX},P ui4\bQp;MmES%. ,mǠhqL`GN5˲AMvZ IҢa҂*D9;vhqLU.E[4ɾStUM(ciqTFj[S*: X a`V;M_qzop%QѰ\cCԧbhqLI&qk.ιUCVK Gً1+:#UђFZP`K搒â~"C9ELPQ_c2/T@-@-NWֳ,Gl oI, [-̅{5EGqZ瘄GXpSn 6>3X Jޕ}j1YG%,9r44_ђX&):m2_ H]j.Z^&JiVn "ԙq1W,Ӧ,4+QD5NlMq"9MmuɱҤx,ӢW,cz,5]U=u,Z6J'f;k1A&U FZ8@'F|;;lJ@XhWdAэ E ̵#y ͛aϘng( ӑ'E(:KMb[ 'E>ÐL?-@_Β}`_j1Ҝ b\k ich}c0Gg_8 L4`N &_%wy}qP4NgD5ʢ`a`Ɂlk6pf85* PˣM7yjY}9fep ̓N1HωHWᕖ/?ku2icnq/ƍzdm@WwݵAI9 پ,\4i4 zn\M\R@r^h?En^cG~'7y}@h! dLQ|7X>Ƭrw-1[~ﲫvqΓݲսјPHDG/yO'ݫޯ"GHs'~.~ZϷgM "irYe~a/xO~בݫN~4*-xO.f:`u|I'gC~g7_^$s (rEsGXa;%kԋI\hJ{hj͘dbkBV]2`@ {(|ruG"{"vŚ%\̠} nB5U9h>+)Ck>Z}5sUs0~?ҫU{Gsc9l>ɍWШ {?cU޵r$WgBW_;mWUUywe/>aT=[QƸBw MT==uCȍ~:wJ2..Ujxu̺KYޫ ]Zf]8[Vjb]-o\-5F"e  mFպ} q_U洮g|֘Ѭ2ȝUR@|N+߮uIů=E]Z@ ]b>b\ùcp3^Yo_d8y5ʋ.uDU6y}+>>>^.u%uV=|蹳ehq_*Nו*wZpC(0ಝ3hbqsmNѢ6o` ЪN[U [^Y84N#bRi{]#Ǫ 􎡧 RkT67%KS9Z,|;FP# w X] %]*W.dHEWZ$)ՌQn!"2<.g׈?!HdU v-9{`3ot/JxuwyȈqќS2W, endstream endobj 395 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 407 0 obj << /Length 3120 /Filter /FlateDecode >> stream xڭZ[s~ϯΓ 梑o'6svσbd po3>i{HA2xًW*$.B ׃\ 4 oN{*ڽce4LBn*W7s¶u6,C&N|oz^Jaa66izQI9~︺9u檂Ǯ3G3Ww#8sf+r˳`HgQ%/wP~K\fg/{&P"6Ze,n'_ҔY(7_;[jVCkbyTny }b5` ]bW_bcTY8T߉6 fj.CqUve)lVKwu{˼=>,Fz(ΤT *FL}f^KZkm#0b:^՜.xR%n|E5ɕ|JFf& %e̳/\+Id#q´sqdxNAC 3\s)4L.&i`yD?bTH2؂8Ә6!AS F6Qqzho/?[Xd<,wr% i5OđVqĈLQ`D.mA9YPE>\ #s|][_R iPlJFi/%I \ȢrlG O`vMZ+cKT\sUk .%|͸<`u'ɨ[ O4kD(d&;},c9CH#Et]4ŕoGM=|$$(ni&51nۃߖE~yI'F;)DO1.a<yTi0E]lJVk&0@lj˺&7;$<[cTĐQG$V?r˸CeԽI aG cUet\f-U*J 'AE]xF~iZp?0 FhĈEf<@Sz)q9N &uTy*E"nr%ڭQlD!1f>j2*Q6lJIϦafI1|tžsA!hJ})Y'"moyhEsJxzλ(SkB}\zUZg 爛67z~#h12 $6f؁us:^.=eBY,o>@B5G &(\`v@<TAxh *MUBu܉nQ;IlhIZlڭ~4fc[4!fraSOp0F`g9htLH%$ ?hEb'}:.SqB#kB}E7ۣGvxG"zoC?i88qᣇuKvFP!VFK@} xGFY6ѰQch:GET:309ɺH}4m'FSh*IeSYPbEBYJCt0od^{_PBMqNޫ ݃ ., ՠJ]FKbk/4h$Pw]q!gm,ذia [gmBB,;Fc|8p=!tѦy1VmT\h7׮H/\kQjD,>W8*JPdB7GHthnP@y<QwH?nK©<]UL%Á0˄4A[t܎GJ8Odky9V֠?OXqm"uWqi΃ yrzӮ DYS8䒤}C|^ d HGQ} G5R?+ Q Wn&6RucNX$>()Z ^`)NfmN&wRu>I2G8 sԽV $1ʜ{Ԛ0FLI)NfL3oD9.r Aj\(_tD5k̺A!FNf)C6ޅ[C,NIj$˙a![>ا\_x@cS}!J1Ӣql]5ܡ7h1ӣf6$=Dp"6yOD8O@% Da||]{O: 螼;b 3ك{Y|-/ԕQZKr+WAk[9XWʠܿ`K ;3VYn3Η p٦\ 7mtv$P D0Zmp8 G z1<NvBيz-3XjEllqw?8J$EPo$9-, )UJ PE{@]wȶR(B,֔^r#ИVBM;D|mƱk5W7{%2ڮz6Valu&5P1pm9:l#ӮE{ҒyxGkcgC2K'έA_3Ywt'zp~ t+zUǸQc?vɨ̽>yj] endstream endobj 298 0 obj << /Type /ObjStm /N 100 /First 885 /Length 2200 /Filter /FlateDecode >> stream xZmo7_1 30 8Mѻ׫kimUֺU{f-z&@Β )d# Q8t(ghz|\UF Fx #B[zU 7r_C`e gn".``LEY1@0,<'DfB7~!l1ЏGAZ9,%1$eHD}ѳ uVcf7B/1L`cNyP4w!9ƘFbU qZ<o ~"1f@" ^p%h.;8|  @6iƈ vwϫRy9P-'mFV@M=˦[]?QU?-x4#Snh+bdRœnm[|7@Nj@rߩ c,Ics7 `=+ԑP?ǵPŰjKy|l.^U 2c4R3alP_`3 &ִ1]|D^CHFhoAݾܼ=dNQay^ u\~lWtūv^ܻW1/y,ڪm)^r1,4ztoqՎQs(~WհګYӍw4S2HڙUs Å4P*.ҫ)QWgh'a/jX ?&z溍-տɰџ>Qob6;7yMSM&MuW}PC9겚АcV\/1~K}C6l%ً(v؂[lNo7[n-'q3ʶא8~3͟yNۤxgLkH՝#4dd zⷘ/$ ^YrZGeFG?]4eCZ|!4.IίoL'ߏ_Ӗr`%pI_K@T#3GT_Lzw[y.cC!_0goLYbaw/Q+Za)w&{!;3gk|f?µw.ߗMld6|0,م ᩽quYNa{"\A-JL`Vc|Itm\Q!PVև^ F&usic)>J5_5UgS^ 7#Z$3^bQߨAκYs[ ⊘zGo-Vc4|UaM:zz^SE"ol!Gieʽ)0?@fh["#dDI,Δ/59kd)*tX[z]̊X! H3cJw(sHYv=Bߋzԇd\s,,G35vmG5Y mA:'C驉 ENE$Or# 8rJ9m%S2XVc|^Hz$<2&g6גu &y`T|ڃЖԼDrF+)~&hUfs!uX|gKτԱ.qMtJR?]8fu5@ c?* endstream endobj 421 0 obj << /Length 3152 /Filter /FlateDecode >> stream xZ[S~_ʓ\۾3 ĐR;ybeR~_Ϲ.F°٪ԔG9_ `p8OT n2vpp;] 7dco,ޗlVߏ2fz)c6g*?"=O+l!i_#k`dBC=.`gHǩw59 /߃0z >T}k|?ߊznrxM#t+K]KlCgZiv\sf9o|{sMR_xn_b'燃5cүoS~0Rm?S)%5lFE^{6r+vS m$Jj.ҝV~><0> B.3:2-6S-\cxNm1Mop6ڥdp[IĨ^d戡U'H0wIºA^&x J / ;8&\G Aj(lU8['4¶#JJAPNt ^b? ՟ QbC(Bp& Cǎl-߸!nMD^?2|.,M 2#G :#[3"Ѐ")jXi@-'@ŲF )x !_yV C.qO©[9vBɖSu)u.aMjLWZQ"_Gmt*ϴvqxtBè,IT`dTab ᪏iIA-_j>1 ёrgYJ gE$ Wskaq.=ܭx%B^ ) S. C?Е!ݪdNKUK`T =5TQv"h?MAJ!Lc0"S酕R/autwrW-An%5tT2!-$Ţ$ʥjƒXYO(2Ѧ|G'^k7PΕa-*䯩Fr'b Zt$k~'D@_ո:LFK:aP=4ޅwI+Z!ctiErի|vc2 g 1Py 9[PjMGor5Mh 7Nidt+ W2LE+&sz-0SQYa_Ӻiذ 05m|+o<'9z>GbdeӓIB #ǵvO sbTpnh~)S܁7ԁpΨ?YI}c,^iI^{U<RYPBg1] |`fò`_i3CƗQ?l-&m8/[G I31F?X~gC8 4g.a}&*m*&؝SU&&0V-9zq}ۛ^T Xꀣ^ ~RTl:%CVǞ%q %P"y港l뫉7W~ ȯ!* Ǫ d ow(qj V@oP4!(c)+G評 y>z/>Xxщ9y YK+R:#gj c̃s8a")8V;Po8zچq0F(bMIA0F6;>Zt#qC@jR+!ie7l;ŤE/b=.>XW\W{C=WN ޽*R6q9e|p.++̗N:3Bg rDcNq_՘z؂{Fxۗƹ6P>?ki0;ýJQua瓆 ݙ]̒FZiJZҨJ9OQ,.[iiCmŀQ[d_*Lk}dV _If g3' m+5Z|U#%npj'~ȕ4[X6(2v)_10yn)B#>(9wjo_D`wx& [TS狕I[or}+W#YlM75]㡋YoeMBnK|4T ǦE0Tՠ EЌϻud endstream endobj 431 0 obj << /Length 933 /Filter /FlateDecode >> stream xڵVKo6W=ɀŐǞ&ݤ $^@kˉXZʦnw^wz<$ttS"U+WQi./_4:??>-Kel NH鬙xuF E'¶$֦ݲо7 _a#-}hrHSes&b>O3IKDY)6Ơ]ZXS$#~M1<[4l(@4 I&565l9k<ܣE0OQ؂.m5IR ^ d*5Ғ/q>!Nu(cD17}%Y)x}#T^R%WUn@q<>GTRU"n> xIR%T: 䇼*{: Z)SOW̍Kj,JV2VPys( Udl{/o׏{#ylO+B umTx^/=.]n)3 =m(|dT$gC]CZ쎸}#$Pā7ĥRp-VC+KZw܏cLY~F-;/ Mj.t#MJs3YpɗldbgBh #Rkڌ9vo"/=~Do#\٘0-SN4m-]%aPoiɞIc}@+yX?z5rfד)O$N vQ&zrepxho5x5P% #~]ifw)T >Z%ke/ {D䵐[O(r8.*(҆>D>/t2?jC endstream endobj 433 0 obj << /Length 97 /Filter /FlateDecode >> stream x31ӳP0P0T06P0P05WH1* ̡2ɹ\N\ \@a.}O_T.}gC.}hCX.OȠl\=% endstream endobj 438 0 obj << /Length 155 /Filter /FlateDecode >> stream x313R0P0U0S01CB.cI$r9yr\`W4K)YKE!P E ?0? J!DH" @ l%r38 H.WO@.E endstream endobj 460 0 obj << /Length1 1553 /Length2 8092 /Length3 0 /Length 9108 /Filter /FlateDecode >> stream xڍT6 HI7C#%Rҝ00C %HwHJ Ht#""]{ϽYk}v>]L%k+a.>n^q/WYc3] p? ]@ăLxӀPOXOD+/C8@hpT06<bgxH# '&& v0avzBpl8'7ɍj' Atn`W wÀ@'_qc3!nuO+ B@`ۃ; xHUQh:ae {6>nw 3;9a4Թ^Nfu?=(O@6\!7n7w< VQA]`/=z??}ۇ&[ @}okb_]!^Sx}2 QW5^_.a~/!h!_- WcWx X/Cr3^!^31w %w(:A<5!CmW>,!Bܔ ^`-dW1(ւA~?*.>^=,p{ ao;" `B+am^( .pW) - xt q|!?0X@>_#{AspгPwmT\#O|\ݯ0R^q=M&X\Sd;iLjzwk3ފ=;FexGg,j.=~w.~A(-.xZD~0>7\1fAeS9_\4섇^Sg瓄yt%&㮾,UuR0QӠmƬHD͇~Jf@R5K2+P3 5ҽ c.WMa/̡\1&!pwvwp_)Ɏ4Nv),J^/Qވ!>BGi*8X}iVQ{b%U:u:TwCPDހ~k`A]GY "eRB{dRDbfDjɢ y?OX6JxkI/tcy)dұdKWGk%K6(FstewC^+U4hi{zjIb/>*DxCi/IENٕ@t7 8Kk*Ψo63AA ˕.$ Gy_ #(nTCM8iLO~B0Y\63O=s-896p!kuef8ÑFNB2p׈7x_0iD y7L9ʈAVp҄}ZX~0E` ~*nOژ3̎w@'(\sؕ4Uy'2jE{'P &[V#*?.sVU}vߓh&LۀSoШ9@aK2"g;9 UxDSHȘ h:njż{姾']KqdFƨת ;-HА1kfm.$ȇP<+p"&u7n/$_ mgt5TX>t!ǟw=Z(62z9I|ιsIhuur̯GvЭL8_*PݙG\-A3Nf/WfdrE|@5 zg`1ɮD~hnҷW3.<rQxh;j̏ݏ㦙QX=+6-fe'帾$K77BeyM+8R󚡼t>Ý%e \ɷF ‰WbcUŠ}#|:h^=Qv_/(dv;63GjK%lA_ 2i!f3ӹ{o>Ѧz*afWY(Qusmx 0[cV7WG$sfZ*ʹ WZ=$^|0n a}OmE+EjKFhЅC͗O*8%ހ|jH22B"bB|#eCBRX$0B#i7Jl!r%%ΒgzprDFbIB>6zD[ѣ/}_ ~P.&M뤐T$܎0:V~N(Cʎ[kLSCX 8+ _©0A0pblʕh,;ER8̹"9*bxOe*nܾ@;\abOe:olhJ-` e)[j1ӯ:oji6*6]|$+jǒIcN"o+͏WxT_C[5ݕJE$r=^qK+yW$_pZk*uL)b 켻]F}XR!=bL`nb>VL{&WܥR47S X} :iA?ޮXDlWrCӵɩ^:nG(|+ bڨ>w+aڗHKG78KIP:AZ )nސ BO|lxZåd+Bs2Jq r}~ruGCYwzFP/>d; 7qeq']H]0[ĞJ1Bz~qv̓f&<'DG}϶+B<cJ'B XNb_BN5n"TZ%.-܍~. PG*-3bw-,qK&|@%ꅩ.伲5 z4G6|;Y·{; X<==U,W{`qKtÈ ]1}ӵL:'Rs[jb%Uh -K.[f^g~#d"݌zyIyQ_d O{zε{J=™w'@*L]H YXN tCY'v IᮁՁ_Co6>z(m}.c7~_Y^K0Co/G/ĻOצZ 5U͏/:Z(8l-v4>zI/մ5gvy)dۮxKeP:dKY715#MZH|sB`P>A(2yXa˴xуʵe+SHEq9c4tGl f$/ʋX9H RDx3.w2kw[2A h8R>R$k Zrҧl*"Ҋ~;$ҏo'P+'9x/6Kcl(Fmך4AxS N;&U7ʪFŅRǹs6ұ!O(8|Oj^E.^9v]h6a^_tp=#')jՠz`eu]A#_pe݊&@f_4HQ/%tJݓpCic;@$|[Imz2[G:hKLClc?d`pԸÏVTkb,IJ5M>>0, c"Q9)ySNI|@/1fj AgÿpqF'WQI剋|a1 /Xr oKdn8=c/P)j(#'x;bk֤?d6_Ù_*X#Z7u\ Fr z{kp !7ͮT)]!{t)&9f;߅k- r`3iz!-2QN3_Ca^mM]$AuM ߒ|YVEJm gԪ"׼G:.$A 3dg6T$|>;Z@"8'hR5ěQA'g>07vΗc`2#MDAh<,,1w^g2dMRu~TqG٦7~Eis?}w/iznL&+aFӒ]0N[]H!F˱1S>Za V94G|>"JǏGa NPG[Y^v5xG{xq{_zJiR y,-b_Lǂ# 0d2 (8 / ~0ೢ )\z[7U>)O`F2~P)XcUS:p$_0UC.{ "٦N]_RHƮ%v־Ȳ;O0 Qj$6$5|_lp;րm벞!aiE6M znbqx}CsڙrÓ`yGg&\7߹CYMiz֚ Kq|nSw wrߣ:6qZ3Vcft7bd1cNM'.B s7V#92a dLOA25*o|<RvIޕ=UA!htlB8HYG_E엪gX9'M]h.!C8q>]1M$"U ϟh|91"T9sJ^S;ٚȴUG4u"J^,2 =zuMp=NEd7aVGM^ƂcW2OYA!ol =ܡ8=Ej7]%QYc\:EʞQWɻO@n~sltC`d#>fdG 555#QPZ>, V Z&JuAιU'0}1s~)y͋CJ0ڄ20{#A yg2Rjr}hіMM RgIwl;&X EӟKLh4lQc5[ѴUZרZ؞V\Hm/+`w\z AA M/ef%J}BnFr[n +4[{;0M Lro[Z7L*}+-HF.H$Xf$w篦DFCh t2on6:b Ѹu`»k!j7Ds7ikny>YcYor$KQ5#IUn8^$] &ϸyGha|loP4OFa3{cC+_5*|* =Pgl&p-0ajw) RTA` i#Xh/Q!|J8x:$[ǒ&e4aGpŘ>=zS?7&a}iz }_!Q:KE6GUݟ/7V/8}X Hdpɑ5n3AeN3QnQ185 *uEf#+x`xk,%5$xRO=۩{ `r7-|Y[B_n ntv@6҃V-~fXK&}80Gf:v**("0^iuĎ1KcW\ (kw=%k9m%^]ˆoh)2dܟ`~ ϐ $P"$T_ƻ7hÔ̳i% LZ,B`.ҲnY~S|&*S Jm[{?ap`@yn񮲾Hk)ټpLzjz :o#ԐRVj>%v ePS!1,Aij@6բ]7wJCB!λ=@ixThĹz%t! )y)N4x(>FN`Tàb%)X/0q;鏏&K ]37BHhAvO5X@2Qx3*OE(c##o3b7UӠ5,Ɨ^x~JҏM=H L_~O{O}i$ooorޖf±yo6# TC ^7d9l]mTƦ_ Jgt>Uoes TN|eyɖ{EȶS'z۞j~O۷xEw[UXs,Qe]XUOiNK3O)Q& "rd&s9՘?h~ᕊ֓w}f( yE}s 7zuQF-LY/׽lEm/H{L>OɧnLlEVCH_;uମ$%)ril|֔KD\\PAlm䷂{TDJcØ}`-WHx9 ;$iYdBJ~+<&+s:"6*f2﫻yF&r{<ЅF}xl0ѽ[MH s(oP@@c01EA20I{ ;OA8VHԝ7zu.EsYZyh!~!u>tծ5g1 C"Ǿ`v. Z0ۺю{()ڭH®S݅Ljke܁`Yx;W*<#kt 9>zvhhHaƞKWLr4aDNJdDNҚiBZgC:*9}mQ8p jxiO8? q|tw6}+cl[Sj`IOۆ&Z~|$tlo%)@ +X F)zp*5fϑL &i9_E40a,pn#Zi)✶32픲girܫr_]OPSBayJnޕJfiq />-Ui[>∛_$;+O,\w+y̤Ḹ=1u5>O؀!׏$Lߝr͡ᚕÏ/.Wt$Vθtq1w j kfqug;̫%5@29xWd]nK.rO P>5ŃG0Iյ( endstream endobj 462 0 obj << /Length1 1997 /Length2 15422 /Length3 0 /Length 16650 /Filter /FlateDecode >> stream xڍP^۲ #!؇>-;ww >ܳ_^Qkt5g\) l"ršLFFzFFfX22U gkaԁNv`8 ?mΟD9;[5`fd#7@ G:{8Z;T&..lƆ9Cgs *v@g͍ٞƉьflP:]&JS=,@;Sg7CG `ma u q5:>P(mM7?%WPwvwښE4v7t564$K!@\H `Ys2vwvwF|YDh>Q Gg=sVvn^L-lML*ŞA(%Χ o : @/'_|e},L` ]gG?21L,F@3 [ؿƟhf?&_?}0;[k:ba )%QI_;@`bbgp|><X)[S;׿~$g( TKsrʿ]qW)+_E.S7sr]?@sl/U6>)g]5o--܁&Z4k [_W >p_)fklgז1!"6:5z[;gq>S;GؿN ߈ 70q0F,g;AoSoSo`P/iq}>}F8``~G_˧vS P? v.HI1d0~Vkaoy7Y~ʵk7\O~^ vg~~2TgϽGL!SIw^|q6w?zy6.̟dgxsaWy-;kp5ҨV\j7v(y5B'*ux+w.`O 5 ѩ x9xXH9p"*= J7 N.+԰ŨE"7^&tÇFrGu0;A(OsKk9isR٩G ubK(Ekɫ8zo)#ub_El2:L4\7LGkuiy9aWYib5X~6 J& MWAمZwwln)>l_'H Y YdS s*>bcN1E^C,-ümt69^/~ęi7բc ws83$6s\J1c #WdsJm2.8ᩁi(=h οew *]$ct#g&8/r펹[Ծ&jiۤ16ͯ-B7Y߱&,`;jdTr*B9o+gLaZVR\:9(Ԍ/z[ d%3yIԿdn:@JB[7:sY) @^)9'H -|=y2ߠ ?m Q$j9J/YѣU`ɓ#_ CC|=\&){Q"0,e̍zv?ܚ N\AXc)D} פn4'f\{ZW`;m ;0Z%8eN&@T Vj#U_†[EQȁ!c' IS:^Mta8 P(3^e,QH~ٸm0wtt&UE=JJԝ,1xfHvCk[V|d>1[kt5́ ,15 &a?7;tBqq3 F\QRINQj[cP}nchjyuM{7R4jb$ír g۲5;:ۂ,%3W̩k=d4wVآ `Vc ߭Ґk ðwt$|O?Lh|ǀ~A3&ED' +䄈6v0嵛Z=4"HD7`xHA.G^ш҆⬵Eϛ-Y! omThltm쭩%MRxwWOЇܱlbw?$.ڂ}V`LŨah=C}me0 Vb}߬ j}Lp #"qP~|e2M5RakޏVGٝ+g hѧFm.šu K6l}!c ya^cfO:٘R/)C:`k3yfǻtQ-~q\सl0lBqmimȕ[Q)r FA,Jc%g2X#_I >1^m/@DjN|gpmO$ c{,'y ،g'2Q+QƿlƖk).~ F6rh%4ːܺǎgqU2˳Upu!s:j-,/`_./!{#䥾*pyv|D. @rRfl鎬@}^NQ/?mP(0Faz@0VUꬁyԗ Y ⿲F_z1{%,J3teع$Fp\T+5$>؁N/XHulR1hَ-DV?UF9¤UG UNRVk8I=]>ϧ#yCděH?|+WFGja5DޔEi еTM~t=P۸ST = 7qϴj",˕v5FW.ZnEQ8^3f/}π3ћgoMk?U}UmթtGo\7de vԚeh uoʒQPƫYͤ~(Cq`MK1ⱻB%<y-,8zZZ ఒ|ɪ8;3+یg[;U5VZEԨo@z;eh`&vJrd3YP9Xn[#igA_F-8[7qdgӵh߆]FRVcF:k8 >BBbyxxK{bZL]Ct\8.-o!vL-OE F&(Y"徣|Kxf 1')mKp0\Qaʸ\,OB<h|aD~$('tYѬVX (aEdK[| 6R@A# mor;^w}i&Ţg=IwXx i4qB}r)H)_E.22KأV쳢#5ܑ0{yK >w`UTk8 2+J}>[2sWA5⨢䲁 cy '[*<jdV<໲VE>0bHM:Ó'ȵakӗ.J(V=PEyǨ2SٜץI~,h/( ^W(}}o5,*0 q@݂J*NdiV...'y6`K|ó$+hb'Ȅm8f1sT2/BĒFxz:PbOKe/Zp[To֠#:9#IrrMI g]&'^F~n9}>V֬Wh,)q 7“[.U!_ m7l3 :)K"q^6(W k ӈ C)kilƶk rl3RH х6UkI>ۺ9|P?R2 OUsh*7h4 S\ ̏JBFz]K"XAިwOE_Toի{|ݠu5 "cT*C-n^?O0yvWCAe9{GH㪿9nxV/w{"4|E lwMȞ?y6z]M~ˢYK*%MjG%T#R,gD:IǍHS4mL?]BcIN4V(A341vvi"2pJ 1][_43##e{6qbi⠕EZꘚ;Hg݀F\c"kHik"4V(<6 11Ǝ?DeP0hgW1G΅q}8RAVSg%4n)XgZ(~C6,SlY~kl+ח\hٶϜH !?uE o#; +#ⴡ' `D9MJ%J/0ՙ]cʪ\~;6FB 5B尽xF{@f1U9pF E3|$L}?"cB2O4j۠9Tͯb2z&d7*Q2Can o8˙9[6s:R~[k =gEႆ,TypG _~m3q/4zR`o>Obؑ9) abyakjʩM>N69*3%Y^a<_m,`Oؖ{]J8&_NT~%ЙKgO֔5rOLZoJXc#Q l]o"hM>(m"2ޒC$a.r*iial]X]obK{ODCWh7A %Au\5?QI~d8^%.}L VXMpU [*ҟ}T?}iS$za:\> 914u`Q] SڋC`o<h*wMa0)(އ5mRi1HJ@ꑽaQ']Ԛ,~FK wǟiKͼhG>L35 BZ~;t6I\$,mrJ;!<L6B/;B+4xJ*.(IӚ96+,Kw2D1UN.Q3 &Q +|"u֝A~&lHq GVkp**2m{1TK_#[pk߽@O * A ⫿ms 9Nq.am"AjK =dw=I RωL5]$̐1H/ziJ۴$k- t  oxI*@EMl*껝r)1PL .C"w*ߋ*WfMy!'t G4 b񫛆Yfq%60 MrЮ we*PLv.WxV%2 U=V>Z m|2 굘g½ fSlM(7VNXOqlMPFT朔Y F SB^ [d1ˡɐ^&v _$:"4nih;}. eo(?&~9øѢ omP~g\Yգ#`-t>H[a[W(=|qdr/ġa֢_pyIJeʉ"@8M"9Ȁ6]ת sxҌ$ƒ+*Z¸UP>C1ZFD!*$)hd]ЪJEOvDC XU{pie.#TÂ꺼VtEato'Ψ}S7Be-6ӛ o6IlֱZ/Jt#SI}Hdg~Sïgj,8|z~"o{sXĶР"Ҝooc^w=(LA#0cm ɨ^=UGRCP FaK%z÷ [ڃqXrs)9s =ԵHqs_ Gj>\ 6TҮB)#&_τ#dFDYW*q~ Ǵ*Ǜ7 "fibvQ2ݤo%!0 gDX?l`!t= ,glmR24Ѫnk>{B")qן|$MNR\$ dCS ?.?5OȤ뛰@ZCH~cbI>J֑}VƜAky˅{iG]"EАUm?!TbJaӷ^T=>J4nBo0Ⱦd"$莈 eDO17ÙS ̈`a%G>0W1fꯟ]7 j߫=%ՓQ58&P㌞sn%A}iޔ#_?UYR:.d?_#z`Qe\.KH _)qGyOUsYB'$NrӿRPUW dnR1,G]WdHcq ̍.hAחg7NYܱ$Ig>k.af>.,ߩqoͦ0!$m@0AEb{:ӂs,둪w4"$=.Չ4u1!H"3ݖE #O6ӧ^FH 5un2IgGggM{kKqc6,(/lGnj# dpRD~C9`h??woyH/ƭFNǖ\M׌9TKl~Դ$!|%Icbˎ,U/ASb) 4RA 2nsjɏ.nKUZA=`pCx)L*J kQs^y5π0xB̵5mo(՝VR`E{6&K#uYXŸǸcT6ȠE0jk:fGL::1ںAyQ3k6}60o忇E?[;Y lvk%~]]~(vaXu$@`EƵIwEhlP>c낋}5fnփ n99^q .yN@W~ٞ.c1b18UE|+< *P* 5̾'>|iNԭzN}KfsXyݳ$zԽ5 r(3Bʈ詎I#&DI)"E${.'\þ[sOZH:;Mv.r g(2z  vder )k䂨PWt?)*BQ%}V= py^ˍHYx1xbF ;[D !gķ^-hbWB~eY߱_G[)faRXvusVEm0NJ+HM; fei^Vs JK&R'_Gzq"Xy=@P"MwoM޽HʍMQ;4f&?kLmCh_>^r]>Zb\ Z\bfZƲԀ{d0 an$s+ox;Avbc:ɿ֐B|0,,:G5[6Pdcn,-$hݶdc'%_cF0sDAK'6dt7D01Nx‘ŀTÐUy.V7 l:&em4P q[@=t >Fw(U[\v4m0Iwzi3E\xI< SN @XapHЛ,;9j)RB0twqe1UԺqSAK `dS|(+ jHR&h{4PL#nRjyԣ!G+9#Wj1w?W DHP W0Q7Bgټ?CNDl`CUںTTNyn-M/Bl} .=]FPnሱA+ՆsT-I,7) &_ ͽ~[rd : I酕.iQڙp'<zz0EL'IqhC\DFcm=+Ӕ}fף7\9"R,{Oi~1X YXI";pO,`6S !8¬zb-Zwj5Ħ;p߮'H>v _ŀUEJ wJ"kͣJaQ.kճQ9Na6kN8>9팅ЬW(:0W”.F-Qݛ;ORkdsA^kJ8Dj^>h1f⯈ъr,դ6Ɖt|ވ֜ d~4 RE{ԚB%@8x뫠(wլ4uaAR@:+u'cjylÁ}cΛ F-k0Fv"asBK=Y๵ $= ީU9wlȒV:J#cv1v&4!{nw?& BS1}wƄv+ISn,~)syG;%E"<4O[[Y2raPOʕ8ː^|@0I/dUݠr.ݕ?Ogu~}D۲@tjgH 0 H SNQh.vN8Z¶[v-tl`b;;2!K>u,Y{ 4 ^ |$l#gtʃsl\kwJHlOۗW$t"^Ԗj;8nhH&CFs'LJ[gFJbht;qJk|7'ȳ\[ҳ(1F}/׬Sv&oZ6i*,/Ĝ Qyq9{+^ ! )#f3AA&$"}p'ѺK芣j`,Atf ch)ڄGsm1B'Q˻Z+C^E)x+^] ˦ZQ{r*mDVfH*ecQtGce(Q uNQ|t 3`H<# c)koۤo!;%b L#o_>х$@܄Ks|>R`+Yi!f>@ tN ϐX؂ݘ$z_%^=y{+!iKo UTJjmDlXN;;Vcpq@_ S8PFo0_w1!AC ;]T}춙Ei3 i"3cXN<mMڃq ;P2Zy+[|4FIBP+(tIw?R]A kYP. n Ŝ(]H`F't2yuڦhuOnᬁG1s!qU9剿o"EdlgLw{; 2gԅ^@ }d]~z)/z}s$Tnu48c@'w-p* C5?l.ؑT<~G -C5l'X'GJP;kGԡsJンw,T^2/dKS$?9YCSCcۉo)Aנi-GE\w:ir|vUjV o7]oO'63 2VZ{RT.g>cWi +$P O4dp_ K+=DZ @{c/dh#3? Jx3㣕vSj l29uHg>%_W:捿O\rv W'wfy/|FP gHZ0'?U=$Sm޹h.*Ƈ1NY K-~.rv%+ۀe:f\+ґs׹`0yqm`%}/)#Ċd>U2R/@A2c6Sͣ9E}>mT[bp.YL&[NDznLd`Gx.{?-14z8.ɉͺoJ1|GPz2eav/3xJ֯mŦ "Z#[Fҹ~Z z'8 sGsgvЙئ ܳyÓJ渋tYJXēqP1je}:x4ycD]c˷Xk ?P.LPؼ ]!k% Uw'y<ԄV܈^ޛEEJV#R~k4^G;t&!fPS˝I - Dsy/8e09Gsߠ$NQҾlmcG WauPS)ѬHeώ+ቓs.6ϓH7Qpma@{E6lFplfw̋DYsz5^Peت 6gTY%闽 8(#ɕ"Q;DMǩq猒l/ .W>q8~D`=嘕Fq(Hs@ ZMlI4:IZnENso]KG@8*?sFfz$BMYF񘡙W{#0l(d&qeEjj\a\_~kǽojgxfxJ! $ADޡ/< (n#T ¶=œciuΓ5ψt*X^%%D#b}]AK;jr^{R8}L8>D+FVi`JvgYG}S Ov]B#ne ZwӦ&;3'VX2^Y endstream endobj 464 0 obj << /Length1 2065 /Length2 14616 /Length3 0 /Length 15861 /Filter /FlateDecode >> stream xڍP נ}CBw.!w+${kffwP[,e VvA'Fbo;3 #B&e]\^A>Avv';N)S7@ Y:#H=6.u@oc; `47L]l,^+@Kqqqdcswwg5upf;Y00܁.65KgK'7K _ʦJcEhq\M,{%5daxPSsO3pr쿈M O `Qdupa, 4w曺M^n # 0}U>gs'33/lѼ4B` rqF?){{v ;? K#&RNߘWo W``anW OG˿_5z;V2,}V?HΦn'WK_?88@s5li~'@u8}u, {_1ӿ딐{Yx,<.;yTL;Wd9ega/2ur-݀obۑ~@{#^'u ږ\L_wAdmc:=,-T.6?vͿT;zX8u^ί3uy4lזqLL=_GO1vyMXQ^_M7IF6">vo `{q~ k"WE7zeQl++oڵoڵϫlzul@o뙛:ڦo` W|%+kjRWvWAW /~}}5~'Ks|p󵘋_qqڟ7|::9~`o KKKs9ꐖJqbw1imEV{4D/AN≃]˛WbKOU|&&ƿ"h< nlzʏ}#Q[c$ln[uWx%J3 `&,c΅}z+s\> 0+[o3ngs!5)$^QqT'fHa*AC* MM%}`}YpB*8V;Y4EgIзFK-N82Js;YG&.YxgHR4)DB Kq&lS4v^ 1h>Wm"=RnuOlk+JkM(dv}D=7p,R Si)FnR,\k7[6p%uVTvucPv) [nT0*%hN1R88tzm;~׶ |39(k$GS1^Ar1}Z'ޅ43i5L^ N+ps $Pf`綳_ Q饓:C>T8)CRP Qҝ``[!,=N/@~B?DCiUȖg,DXO&tA n\)] i:-]_SMLZ2;\\Äv6ưGp͸ UӴk~ԙvTL 9\Sb̅`.VͷQg,y%µpl +c _oEe" ;)؉)-^PLGwv(B"oʍJ 5E*0V`d3YpCg>%s޶:w28 /{EJGVDǣG7T b,T.' ?6% HwyƆ)ߦ [ p6`SĜHUJ_G5`,d4%Ֆ?.3~!%c!qNPۿ_үVE*ǷQA{53N?RoT6)7-Q5~@~ 9{3)DX8[6٥/z* ܕVsLu?xcl$WSZUımq}CnpoIC{ش~ 6;[Zӵ|P1'JsCzJ[Y|ѝz%Od[0U6Ttx |kB?X ="I1="GE9+1lD.2QYDKoN I x (Q&RS=^woqts!r7tɼU)O>ɇV }LeeQ꠻o~TQƘa_ w/CS 5֬wh@Y-^wHuj07! /=Ub#]v}i?]ߵ ?G| 9˃E@r.=uU4IRZ(n6 }|| S> 䟉F.lX =UG!BZ,DDKz鎋DKt1ϊ/f1>T Qh*:ë^fhzaS7/G 4 V8ngj5c+Xj-_Z3#]QJ=#5D֪ML$0ܵ?V!u2Z\mqUd!VCN_m1t'RT;\6B Rxrhua%3V 116ZFݐw1 2hO-]IPcKuvwt_7 >/?pbCmx_ס2J8=?_T!:k2>OM܋4nY|%뛧IK0ʚbI,sN#BY>eX3!Ucᒳ\0\yu*ݿF"x&5H%I@;/쿺l:pd*35PcshSNWCc/mډn^b^l;v 3QibeB^>n 5 [:o@Df ҽ $ח]@E LS߷SQZ"Lcڑ"YXd'Df#cբK \S+7, <|Ձmq~Rr"Zؗ=̘U|ܣ8d"`JBaK:"n1$qj y0q5?,;[l{2ʍA,pèh,[>э@P:[Bc`5h@~SMZ'`JIEIKaSpP>.Q8)0UIyږ)tT.W'ՓE TIЪ_]!})g7IeЬM̹bՂ}Φ;{mMSZ/1[F LYD ߰\SܬQ\N1*=!dSBVk9p{|Wj%$EqK2ɹwǝeLKyndw@JP=Vߺv(Ԗ/Kywg#;{Oegr P̗wl8Je83~z[ȁr9ŽŻI LHHn$-C@iwW- Fs(y;,}J 6VPx0olNrI7GjmܮU.PE>g!x7o4+vD, +ATc:P<-@[tEQ9{i n8 hWf2cNA;5fm0:x2>?b[;|$ y9l֧9[|•?tEjS6 ^?=Il$&#!cҘPЃǽWa Wؠ[q0zDmchóK,l<dP]D1DZl&[:N6g7ia+bϗoQ.2;5Wg'Lz?Ը.|b^UI[ɡ8 ɒVh”Uw*d(`|$6&AQ܋, dn^ڮ[He+Yt,g\60lBy-|YX#c?m]{Q% 2d:iYIo;J҉an>,I}Pv'+=or#~z=QcSk TfX=홒,s뜈!匰kf91q^ql|37^"k+e' M6.ySpHQ.-fH7.$j48JR'3uåjoM l4P0,2FGQQLɮ%1!9,Mі)K}ahRw8 ܡ̈́F$}n!wx/3^@¦c ? {^/G2p\pZq ɧhJY. B[@4/jv/.~侭#g6;'UD J<ۻʼ;3?<˙4 3.4 P5'E{raA?&㝔65*-qOR+ms?.Ͷ+R*Jt'?Uf\LZ#@iڌ~]x׶{q6=YeDp %[q*gM<=yZP.A?P[Q3r#N+])c' @E|F"QX 瓗7^aP{u:} Os/9!7l:5:pNZ _z+.-f1|4ǵat[-_8 WpTМļg1࢝rT1бH$!;1fU[) KY^AJO4v7 u3FIYAO:5.3R."ߠb7 /!X:54I8n)vEeLS\=ߨ<d>KE-{[@LP$Vf2k5fkEzAj~q(>>C jAVZHp4U:S5Q'u5=kw*Y>XՆOԹ I5Fk&7qHkA֢JLaq-9m؉G-~=g 6|Lk GCr770MH{n-6r_:wl徰 n.;FZ{4',,ʡ8s'݆YOGy&F|tdnl8קOi|(tL +W,"t=\|ӂ2\ &ɢIR 3`K#\XJj'G`?D$W+7zyVA%'oCWc0 Y}R \\?#Ӄ2 X~*Z;sOvZ*~&@zP|$d$%S6K}CDŗt7-"XNu2}J| yӾqKggnv82 2y\8EYT0wֻPrW=>{=x,TwƁ\sI6$E!q;9n,͇oyEQ̢*gK :PFk8Kwٔ|WGޠ 9Vl/LSفc|Dj0J4GJ)>uJ8}[rṞ>z mHYNQ 93&6~dKXS!ʺ)s۵L%hƳ%]0[C̱m:fA2y&|~&td1cϥiu̇{|s3&HYS._ J5hu #6lÞR0G~UrC}kG;0CدuT[T,L*%&S.o8VF"hd4: C(/`EvIYǐ:$=27V j"MWkC3cB)wU/W"`lcn&h#+{>omM }Tq‰#ntInF _HgH\]hݷ oI%[js! 㤡.ϰ]>rɏ*p%**-B-l`MMDRfjR-Pdu55~б滸L/I٢ "-hU%"wWg:&w ^?\|("Jn.K3\3N BBկϺӐ2heExqءbjKaxƨ<:cx?jL@eOI}#-o9xoa4J>b|/xps{=~LJ5?`%;(bnA7] S]"buU]x(>Po]L~I1wVLH䭈kъNJs^r\/>ע@ixSUzOhz9:!%Qa E}!1EVC&ȗ,{ vTpۗPmdB mŽȑcVziȢA9J!GW5F&]{oҏ_0Jʼ}"d)bBc [Hh ;, PH#JSށXkS$, Fy%[_V ?x>nb1u>wh9/m#~Ph ­TEg8X< n~s>$οshdƜb(}NGZOӮxt%4YK2jZȀH=- _@{y~dUs;;6yI?ZK/tywiXGw]+ù=ӎ}n4&n+Q8yi(A5VBo2f%q8 i^͊(ˆgO^ꍕ PD(FR>1d}p,jQhZr; XlndGdbP5 LkYIqmH=0e3uY%xd|єzz,0(^ g.@+!,(RPk]B9Q#:nR1@niQϷ/U]j~A>qJ3|EѴ1fı@pa{{`G]CŎe>zfB#E99 C*XvWZJ~9m]76࠮o2,p{-OƯb  Hb{t]>>(O`DWU|}&wm8{t1 Ϊ7qAfH,G/""q>|=o PRoZ1D_x[,#!gqe^/b !N0TKzcȟ<7J^RBҞ`o*Aژp _kxb ?mD?`E/͚ᇞpZiSDmdž\e|m450{t5z-54.'?Ko <.PmN1 B+TJ&k9{ϥLa\!9c1jmiv7̙!N@ 8ZYWdL ԝyF7eMf&eCKci܍nf|' J ؐpMCf ii7`s;\,1LnqyuA^Ɋ]&3|z"/ XxIV; 3.rG&Hr1dc<[hy1s0" 0PPDŚc5yێ{8쐢[ҾЬ+j|z *3ŋq"u3j>t'I*Km 7<¬]L>uxPw\i9Q^.^N?iNs+HȈL'jG?mD ,~?R/+p(H4^*ba+wPo&Щl RH|SY q ~ۉX2{~Yˇi~kh )$QH bvm q :L;i͊U%=s*9>uHԂx]ԑ IӹP6r0Ģ -Q3* >n  >-CJ֑p 4?pg*1Ei}ܝ|jWQZ@{c5<6 Ԉv sX0Y44J );ɏ͏,vͽ%$,l𸕵8d82[QZ)ɈYCpͽg廠g5{ oO !:RSdwOG~Ս ^gülxl~]3r2uWÿR`#u1\)%(~3gyL%{'I]+J"ޗJsgy81J[fҼ52ju&FZ]5`g@33]=X۰XD¸;\yq_ӹ¾o9ղ:z-'XHE f0B`33Ku~w/'M?Jo>ٴ ZVVa*&qﯿto9 (T6l~aW{f!4_+H=)S)s!Y1 LT̢sX8ʘ 3wJ{ïnQ^5(\٣ I67P"kkM"(-% PvW$`b"RAQQTER~:o<_-~ma̹9+e} c`eƎK3<+,AȭqF1)pyWojA[ݍʘ5Q{\&dφ*'uhW ζYQM{8$7B'4 JyݟiԴN1|?s5EzVw@kSo̧Ah;Yޮ6-=a\zrV7{q[DQz%/bwj>d"HљE5F6!HUޔ-B+sv3 5ktG2\T,jUC>nU*1XYe"- Yפ[r)#xlfxKhKv+>_hH^J2B9.[1*ynvd!Ω!Yx}ߕN-Ӭ"N$uiB `U6?ױϣu/Mza5GM&ޡ/e? DyXf@Ʃ_U)׸G !$*iq{@8I K&jX׵.kaFF I-9&b Uw[L` tH#s.bz5nQRŗ}6 HkÊSg=9F_F iLF}2.Eh^< qʮai %lVG@3IεnT?Xj=V$Ow*#/6[ |DCp"LkTo$sS^CQo/'jl~xbq5fQF8L"?C6 7o^}.45VOw. A+0l2*)@ko+ŃZ,t~/kߑG>%8s܄ӍW|#i̓f"B"XA[ծ;3˘DE/̙Z>7W,.tKL1f&E\|E~}`gʎcB7ӜU1kB(& CR,@X嵣L Kwx'D-+xKBt͚w\6#RCvhoq72^`L)]?k8mVdիv8HoeY; M(䠃.e?]'-P_rO0D)#]]2k&bG _@zoOˆ'Avy .].Y>y|=54Z?9uWg#-ɺMO-5E w~s>ݙjx*9D:'y,TIGY?|Ks] u! %W?}ׁ0UEAgi wjXcE]#@*C f̥0n̉%3W;eyU aiͮ'Ic`VË JS!InΤO׭i\u$g øi}7ĤΪAͣ͝.} Mk^g H=lmT)?gu)9oS"$gfU:W{ 'cyl2BsĂFŁ;ܟ):ZLH,`Zà.n@&|Sw4C ߞsY_ k19ߟ-LR/ .᮹ʲOC%rocPCߔ=&]trs-F%h^(JcMeL|<("xкTt쫖\WKI`;x٠g΢bL'_w!!* 51{=rN.7E Q_%\NVh&(^HDשi>!9kB~%z-!#%Pv@N+ 7nОOUm`7a]@{# v1qJ.aEi(skq_){.Ϲ(&ʒҥkYeR _}Ktj'|1~Ur-w 5$dz_l|n\uR^*4H <ƹN̎1Ųm` ;ò?h#Utz[K~f!wMqOP<]i,H+1H޸2;k .gsmbt+Vs֪L8v Z ?AX2WESThbKb ʹdL8tFQnCEl*0% X> {aEUX){Ho:-X=~ٙt_kOɮӨ@ݵWIQ7A -Q lF.P]K_80Z(8y"0^kAhJR;#d35Eide.64tm1N [S7u:^w^p@ʳ;@:)!T0NS}-׼:oI8-lŭM,rJu4 hjphUv1z16k? e(B#֓b \qLА>+Hݪ?<+l8rto/Gwhy V W_/l>Fa8a_)Y@ʳZmH\[(RKiғIac8*g/-pg¶ЅYa#vj}>)"yϤd'$}8Xq )M'[5ıQ[,^nzQUg7LfO.Z0af]# /6ԯ 8eu}Ű{d%zal^#9.NGMrC*eI*NDz>JAгMޒEq?2 ~tH(;!vVO ۝i`)N_ 6A)K$7q02>nDA$"TB?ڏcf?^.wJ~65ú4 + 9 r$<]6³sQ%J#b􁹟H+d=V]h4ώb:5gsI8U/? +쇼wq.@;'= /@4Dg(liUGLYtln3q>%0)DPVzc׷<Z p_,L7\$5'N\JgZV l'҅djA=N6XurdKo0蒰ժi'Y^JvdbJkeB>sWE{88k$e_vk _&Tڎ!̙y]ƺ!A>R0 L3*V<|a eNС" 6B]%CSgbk_%8hy/YHd*k#9] g'i"1GpA)ȩ'{z0C E 1@P/*#8S4l suJzG&[AyS{%!*F{ob,>ͧjڽqR[FU~k;70oCX~#Z!:رxNq6ҷh|&e. +Ո [E UdBm-2Sԋ̢LW)vzNieO(%aw5g4ڄ_Dnrڌ1pfO`ۊ%F3j~tQ̎C)rFvfph"tG{8pn.9 #LI{@kݛЈ:yH*8͔i91nNNޘN՘* ])-~# r?V endstream endobj 466 0 obj << /Length1 1611 /Length2 7206 /Length3 0 /Length 8237 /Filter /FlateDecode >> stream xڍtTZ6)! %t 1  1C 9t7 ҩ !%}]y{?fᐲ[A0[ &gpsrrs22Bq\F}BBb ĭPvwy@77[oC@q0. jk_3drB @ 8f:p0Wf1;Yӓ w}"7e: 5N\F/BnB# ݺì!%U3_9 g (3 ;9`P-hȫr"! ~AAVJ䥴v:#8ݠ?{vr0kpY,7u=aȿO6P6ݝ`Pwo[s   .؎g]og/ wܶ@npn CI ` b uWV~@*ssi)n?4 p p||AA߿i Y fUo ߱҅Q)7?7 /F_ɻ;:2xŭtk]@]55Y%v`$Mք"v)/\9BaMrsw``V(; h<+oO$v#!^ .6pWܟw p9߾0G BjEAX!t7'p¿2_.#mr7w'_ϴ5yD"6*oGxA3ph}Mh*W p g\[ RX*3\OR; g嘏%?^!"i5]^Z<]m!X%UCCš+{ހڦ̘.DOó[ˇUJ%cqzAEyVYwج^ƏO>|U~ʆ[4^?+qkxDaLN~La1Rz=Up8]󍂄ɉn=LO>dY!/- NW z3gq zcS#]$GS?`B[0IOaX`,oOcw<3e݂kNf⯑h(J\,2h`,4tLƏ- ax2LrM@gqafzoB3K%kd"*M|QVJbΪ͹2_#Y^(Go3˾a&mz{}ߺRBAsR6tq'ޗ͎'54;;.3 ^30%)&s4JB7$ INyq۠yKwDR)XmFcXj%9feY;"mr4>) UH}ŚZ0${+!iıj:uRM&GsP&BKGq ܽE5Z{'w&|N^Wy?J䊉Wp~H7ғ'k-OG3=8>xrRII/ U/V^SONO Z+o o;Ml}[Y ,h$A< ~dI׽U9!q=kUJ =ciS5ô^εK>Xb&З-oBw0jkT'ò]͛UGN-u ^(-l_d!6#sC#B`.ƘcԀ:ngEWfs5ff |ygPǦ0{eTSg7~iտp Y K唘gL-Zmn=@u%h3:),))G;Yzp1+ݵՕ1i -0(Fʫ2g꾿> əzCXTW.i|fQbKEfo>xdWL:aeT^{}, 2ۼδ*@_`P`B2F5Y΃הCK[L풑KH}5@ nМn@q4r zrIjʓ 'a2%S أ:t EWo%JPa  $tNO3!c/5Y?Igͨu/&dxH!⒟a94rDAlMÍ,w/¼HtҺ'qyPeg{shCp ]&؀7vۺ!;dZ@ZaUQ^~,{ɑ,vxA$("u֋"vI+ @P\7hWegqq/k5 Z7+"à᪋R(sQ(.Ep+&]{YLana%3U32=d0'>;Uйӭh,aDhͷUXm@E28aEғY`4JL#U'caQ"6J :f 򂙉wb׏l%+l#tkԎ䢌 8ĐJ WGglL1#]{\w ]ft}9fA#7;Zo.jI!l1ʦTr)ײkJ5f!]8QHDnL][A˚j*=CP}vJٞ} Gˌ3OFǾȴ}Kwt^#ɪ7?)"2Kw."7BT `H H76}!#Udo'~qyD+'%^P=,21c77Y~e>Gam&ON32(hj 񭴤(AJ8_vaZXFG!x, 0kdA}vD٣|/fr DXI4RkY̯b+ӎ5œ3oQ"-[d۸Q?zN|}^7N^v0.m#G@Fn +Z 8o};kvszfu{޵`?q%YCPdDC QA];I]զ&AE%(^jv3yU;HbtҤ|N}(") FGWjQ}vP(:@78DןX4eOTTzb}EAfJHͅ1{2 71[KP^-T?qWEְ `nJDÕru‰dZ4~\#Vx96BYBuLE,:VUzڛgl]~c-ln$ecY$ٵ3ECٷjHmާYkseMs dD0q nZ{N~X;MkNӌ<(jkAQ=OT(֭g)fߠ$_-W խ?K MLlrw#k&xտo|vV=Fl=D͙$<9$͔۶rOe@4gS㟪;:o fOh] f?آ.Z ӴQ6iZ2xCK70AN$v?ȰLOI{= e!>)NI$l`:o| >gC@ҳE0FӃ/қg[mhiJ킳\߄ߣ{zڜdz3mZ /ũGN/ѳkfiQM@%Ij1|<%*DQ8au@8a_x,rjQGsoI:-`WCy9p*a^yN=NM(H)i|ʃ戫Qh,o$4@tPWك!F1+I"D~/Eԉy o?Q}ٛ'5-DC"Tw4@(b['x]Jk݆fcJ3>W^YR7 ek?Uh1I:7O-C-itSly;F!*%AYloK) }gMw\mGl,D~CS>S<͹qp~8B79&~ʩ̖'Lx~XN՚-{r`aV^ Mڰ˦R o(qw!MzR0 ;[ӗP%YX%W9s4OI>vTi}! =0^ijrugZpv RZa=q |7Thދ\(Vj!qƐKư2hIժ& rˬt*JoA*hsm/ƟE&Ʒ| \/b_Mcxf=Dذp=;2z"Ő**;Xz.~/:5G(kt蛿p]L&n&;<Kj-6L#9x^+?fNZTF :W_gЙU{DEQMloM^K{(8Ib|,ctru56Fb;ۤ+=0GL:Q5Z Џ< a7Tel3ʾ/e]Zn2粬"B>_w3 (v'v9YQ~lN;@BmйjGs~l!'zVmfrnX]xkh|\TWPpuH׹'gU }f 9?KCԌZ e v5/<9Zl^ȋ̴]HJ4VS򧮰8m|)N>HAsƄF0I"pM^g bD~VSP;-ZUfyPM3nۼh1!oŽ1u4-޴.3JQX%{.QFju/'o d͆}g=tU"(CWޝfZHzjKim  L)sT}/ȶ!&Tb7 L2Ap&մ^1$(s 8J` Kk+|T颂OM;qDxh̲lm HwۯI0 ${bף/nhN\!Jlzm{j;rD ^,JM+AZԋka1"&T?!ڢ!_lj|JMFMd6|:)j{aCyjFax2Űgi>l1}⍧T63 g潞Ll*Yu_Z9i1TEᏱx(Pū\"! mM}oWၗ{/w>h']ZoDdM;poupǩ66R,Fu-]׆T̶B*紵 ~iaͪ-mðvQ-ꃹ* xx@Fw5:Q#޳}}OE1?DQTf=#I72v[zM{phʞ0u7S(U\E;*~ ʵT*%\>A .M:mv%@gf.2䠸5o^ҜAUX"ʛ >:eޡnPdMc@F $_P0hgW,d[啗~j% ̿=7|ʤG(J h_@H`TaGdf 5'2jRmACfEwSi(4e"29ư6 C5?U3YqgmWwJR:NniqP*>Vl?Diržcv勭o8'5 ՜,Oès?r~[+ n:Bg6h+Qa(jB;]A_&/[?kCKp1tNS%q>r E)vEc>֭*E\IŶ:S頶zXLkxkuAOG/3_|T63w`F?޹gva̳WTR:)brV:`,T|'P,,|81[$ҢQ#׋΀5Ն~cm7!2rXiڗc)IdR` 9ѕ}8_X&j&TDυsTFÝxd9S0|t -N:i>CmD<]qpWԵq9(J҅ѾTI#vLR ~+Ƒ 4 ;& endstream endobj 468 0 obj << /Length1 1810 /Length2 11540 /Length3 0 /Length 12693 /Filter /FlateDecode >> stream xڍT."hpw-.])Pܡx) )V(\:3gf]Y+~QbX N06.vN!"'N sGN rqCe!žd2@ؓ* psr!E t[TJ'+:4=#ђ IG PlAO--%"0TݝqcbaM+ d2@ 5vt:-Ot`K'+ );@KQ9i+ps/߁N8--!P'` vTa0V!tOIjO՟  sew;wcu8:`,ݓ;AܝNVֿ۰zq;)e$BGf8x gҖwmO(%oSP`l z@v07 _+sq0O'1O4~\߯LfqrsjʪʰJ)) <=w@_uWwO"_`j'0ݘw+"74聎`Ͽ,ep_S=П q_" N6OfeSv{^aOs;^C\'/N=m5?U@ק1T]%q..@O?!>7ӚZ<`7 {r< 4?CO^#.?7p8Aݿp%Z`R?a7_)SO9 >n; >S+~J '7S@Wx/__s|D?\ }nb)bW~U-Iζ9.|~6^d 4[KɞW.3Rr]=ި`۱HyN$i{*E!T2<Mf@LJ{;=ARhZgwuY +݃aM3b1Ƒij"UC#Ëx=сJnAǴa00^ժnP1&w ؚ'[px]A ] r)Ē.]u2 +*{OM޽QNS42Ȫ(Pq@fP!Bʹk\0H됳x:m$nۮ-V*5@ ^Ѱ=ۋളS~޹*)yjݢOfѻ#.O51^k>Uk&*Cbߏ^|xq1!eXbH  Vpejn>Bxcn2jz/ׄº]6CbsZx%95ygZ ;Y Z7[ .cˆD1.z֒4UC:}^&v )i(6Q#ČXLhf0hY5KƜU.PU-SHrݑI{Z)scԅ)5\v6e(]\-J@NR w#K#zNZ}8+ttۗZMϡl{3鎓jY,H'mSPFTV܊+ϗx|VcT h(>#y)xZ($[6C$b؈BݍE]p- 3wApK1Z{@{hH l[P]3'ĺ~F@cϼ8#~Ls/,{"1&WM˸2.}8˷{-"vwqStfg&7_UFIӵOB-WnBc%aGH}nW#%7?V7C~jgN SdZ9N"[wz nC!&a oGK]ŗՈf.WPr0nK0pQKFB)s\wHwBV(7>_W%/x LDܾ?tb-qwFrK%F >8sO\`[=7`C6:˂^FC&\7kWܟc uJ⣝$sdFyM-cɶh`e4b糄U4+.c4z]uu8q \az{Ye3IkuTeyeo9.s$VWc~,n-mE@װW?h͘}m@-@JBgջ:iYpmaϬ~k$bv$rDŽPeEVIB,MK!Є"9dڒΫh5A ut7 )IUw5v?< k:=^)5Fa&y-YaD;JFĉ~3XS?xauS8hOŊ,/q:#9=֖OxZD d[mSgzbpv[@ jTc^\)Y;]dS`]I>O=ecFس";)P]J9n%-Άo!]Qj%_5Q*чփ[2AcN3 /c\cܰ,V#RgCo:8 . H݌wD[-*PAJj":,ȓNs4q5DO=AZ]^@LWVe['Dy?Ӣ| >G)̧e3Qx9Kp`qzJҗdge^|1/hF-9G.J[emw C)9!*I@4MWW sϥpfhMRFUS]wr؇egOfRY _}&f"8 DdJT&q 1+Uv_-M W]~}먗AuMr7!7fϵY,ɵ!-w].+G=QCe[cys `Qf-ɰ~sf42Gs2WN!RaЎZqZKp/Ϩ@ {l0$Co-DRo96WPv'!Y!"T M8ZjQ'rDJmېAwRxDgW-j#}\>pIzgpIRqHF{yOB8Rhϟ'bn{~3lsNF `/M_G+Zh,WG;ckwmSi2cA<{rͅv onXw^o|Z4*JjժGPpiDI @;baJp#4oo=[t4W~4D~Ӯz:_cqkybۭ#O Ɯ7+N&f$Lf?̖KNWZڈ,Wv}j鰖QR=2u -t\fA9 |Wi~C%FTc79 q_FDήfeNqەqV&L>鳚P ]suoqRk;K. 'M2@9;ɜu⥓P_'x)EeIXN# ]ihfc8;A$k#)OT|7TiS>rnbm j˽9a"bb!g$a[O9aǼw~}>'VЦϴ9\K($-ڇ o7*83~I2xNei~i:M^P,%Jh(a0=)#&Oˈ0eLi;N+u' )SvGQb3.SCܧ&OԜd- \~\"bqGB!,$%+?,P T M}A@3R M?A S L2שNuW.P(Q[:=lk@1 %jRf;c5OSVQ:m+QCC7ebޒŝy$u=s+1I>3)|>A6vm(5ϰD!я PTE 赳 )׵wh#owu׮ w;QI3ox X)/jP GP~%qB"ݒTeiM yHLS@X?zS:z"C|9G|3A/i9>tc4&Q qChlڻt'lb7he|;G>|oz5^^1z1Ըx78δ4x9$@u A'l.YSN k/ۘzz~ o Ǫrs#tfgzF> #Tz 7-GW=Ys?RG]K\bwr}KB-E4QT2BepxptLYICf*i7dVϙog8M<Zyۙؑs]G-DLT48SfY$@l闕/qR 8 Nd!u냤gۄ>x^|ĸRUS/|fvc-WKMFp/_ UKhX9$ T DEyr}lW'LHk5>xAI$GQU/3jV~]%f<\)ȯ}&qC;A/3>{X.:[U+AG _xcrl0UN_EplM"I3չ2TbJ r@y=VB/lRUV0LP#S||dÅ'%[#A1-v( WkU1@LW Fq'A"nmrWՁ8ء@؟h4mYv ejU>íȯҩf(| Z֭T!hZt-mgQ^mPO);'fo/Sƣ#N2<_yݢX۾05Mp52V,jN>:MUv-:͟P\њOʵɡ KgDzY ?78{^Ә!LZv(ց2Jqt}Pvں+Usfٍ"g:vbOkʺJ- sDpc i@?X#Ї:]'Ecj?.ŵM Co&־|]&*Zs1+"7Y#10i+W.S! s6S~ya3DLɸ>)G]xV.#BQmѣG/oo泱` >\CHhWDTҀ!XykAX91-r'_v:fiC*A<&*7ͅn3:s_ެ|YX]q /@!Oia9{5-5ȝdQ϶-T-SҫU2 A/jC>ta蟧J}l\F*f>QxڣMO#c\Y<]JKA6ͺ>:-#Hm Y)wvcxm5̗J&ؘWώUQTP"  *{ai($%>Gc3 1.4;+'b]"ɫ ZD"D"]`vDv\[|V"0O!IZ39+IT1Bt!"Sqa$c s/ųO>;jq6a4+Ze!܎})]9bP5DrS ~#pcCаRި  E_;bz@CI;shzkSE+{sh`&&u"]GMq KA>16qr;͜-w=ށP}L fՕ=2b2c2.Np*\܈Y%:.,%69EOͺ ]<@_OܥoɗRJ=G5ߧ<5Ythyn_aݥ-J"-Q+98g5ijKVH0^+xY5>:pҶi]F+>7zwq ק={;Q}HHdf2G1l:`AOeCeXո˲po?;4g%]W/pjxPyx:$ˮ9uN]R Aa ~מyg&r V|౽U Xk@SӉ_:١ [dwWSfP y g}hZOe`*I{\AK>R3XBHz~0a䣷Lc֦5k<;dX {)_KjGb-`1K>-qˋ4CđپH(j%"1F̋з+m)#T$ ,:奩y}΄zߥMZuI&UcH +)=G9zʔ$L7QL#P yjMcu9a48`&"4oPO:+^N+!drȡ8F[{f1;7ۡD>[NYM>ۇ-+J2ǿhKYnM(X4ybAR$e/Y׎I.^lƮt9~_Qdŭ`$ j߯&\M 3%ϧÚF,ʁur7+?'dߪz$/Ba#IwemY^X- Χ io굺#Ů J)w#^-هTFҸiP~rWF@$by'hAe>Ws`wm#mnzwֹHl nFw?8|yNorym؂ i!l$aH.{ȮB,Dh8ҡmWpLzќUsKĕ%Ց6 ^&-R2{U|Cp0c{ es9$%[L$`֏(qϵ_#cO(o޺ xch1 I-QVBQw ?D4;!DeODcBJixVC]jn힆y5n n7R2%B[V{yw32/ .B$LN5?[ɑ{@8L&"Me{~ԢXwtM 9w[WUN@xաx-徽+g$ (\&l8h= 9w,$gGkHj73ZW#[4r9uE )VWmWL.3 -O5X~4;m~ۅƚ%dD݆R}Fzsq<;nA5 }2Y{Xx6V!c-R'}Ԃ6j763GwnxWE"3\lĚCXCv_u[EXÏ]7 Wʁ!y)ECIh{vԯ޴ N"i0uXs2%c ŮqJ$#J-JP/V{lbO܎HF8)2~e?Ƈ8Lf4ھ-4h57+kϤ~kn7YYZ(2ylM c="]LBHk됲_3%q'N@6xs_CdBclZ#K-*'S ( ;«6%V ^)X}QAAc.#uDg:UoM1ߢ"_]@uI&#=۱̉a9n~cVR/ @pm>RTwPM :nT)bmkf!Fl3t(8l+J78_`yN/!gܯ"+D}n endstream endobj 470 0 obj << /Length1 1400 /Length2 6327 /Length3 0 /Length 7282 /Filter /FlateDecode >> stream xڍt4oRZ{5jQԦh$Kk޻4FVmU(5Z[)G<9{r7>KHXQH0H( PՒ"@9/1 &5(rPE!N 颐mgHI1 P_(,@ ≀tE($ܝWF;`euC ie8 _ q8)0WYQQ/// m B`pw8qL`p7Ba h8pF@Hw|GFZ:{pg?BwoD`rq }H{xc$#xB[!xP4.p54[VGTQ..p$ƝWj4v?uB~;fk RWGg$op7 ++?+`!p߆J bp{?j|4` c/ el 3m**(o$fч vOtu!g2=p@nB7+ 0C\> ߮f?Յ.m@DPF, J#o8L:/9#p};ۂˆ ~qqǓ {d8NC E~NLR A!>%I<# *Da!;ךA"bQ?@=h|с_op( *X|RKxiHvڑЋdn18TбMO(~_k8k}$9qnLP7<7KQ-BwG^{sEfmKs2&]1XZ;Y,6ECLm_Kl(Tw[*\bo Zs]]MMt&YnF*s.C&>m&3nRsǬpD &I걸dG7GgOZ?>c<4ՙH#"*"fy ]4@F PwNݴPY>\g#!}eK7nɿ >'m!LOŘ6=n `ϙx6p8q+1ʕZO|B6Ka9JeIxѢ&\h`w v[M\) M t,eAVo VyP{c*Z2"\Gp_eSϵF^IU)s˦XMG%W|[bGWd?adY*ZlԪFoR.C~<*<wب $4 f\v /Ǿ-,\@Statf/v>'}僱l) }(:7L^uq,P-%w%3%ɬJ,ӄ⻶λ^7z_ggބT]onsKy}*)jF)ǯ^T5!B7f5-Vq rr.) /꫔ڒITfT#]l|B=[ɾضڝ锄r#| 1r oxi}d6].]Δ|.6byUD{wjS@P-]9}xj?Ctg c1IHpBuԡ^Rݲ&&:]DHGv&.#v)N^]k.gARAÍ۲QGmtr\ϯ`FL_ҿU^#wygOн"A“$nbG{#PG B} sE(F=m +^hn8x v"ݬjW"ᔷZC)?I'@TCmck{}=K,uCtz'ìg=NeW_yĔ.BI`j;4 i̥'ca7ayӶoКܗJ]_&?ka=4}7z>#z(3lriߞ5&4:ӁtU˜Uy) E;R;N a6(/yTwWUuF]: ۹*ЅWIqgq6,bP`[&k2߁Ԛw%z_s25RG'j9"y9W:fsKxpX"ŏ ? \jeA,<mH!31X>;-MoE6UYS̸ /.Fo}"0\!Kkҥv.IO>;kdg;_!ieMxDNm[p}:νmUh&qcH{h-D.*)уO@=t÷$K?h3@ jt49uHߘ[ֺU$Ko&2ÿ])GZ6|hbXTg=H<Hh{0ryrƎȉXMJƗ9£f]^2;lC 1{SDRካ1ĭC̗f'H^}r|h3:$S@A*)ryggN#A'<7ԙ"j;l3+T]#i9>DɷÝ؜VC%kg+Uo ].h>5 UF^s ]NV}"(Z\L}9'ƌ":l_7aڈrFL~C"nb4Aiշs 1nM믻 +ƿ'3r9#6`BDԋz+ ׯEdfQ enNoFJS V('ϢH 롇*$m}MRRڛt}uk|$~CV0 .7:NIͧJCdՓapHz*l!MՏ̮d`H>M }p Dud1Қ*Kw\;ᔍt0e1J-7 %xUxK/l+2~ hg?iG>uYY{v!m_$J fVK0}oҡq{q&U'@3?4X3O=>O-D_p. mXَ,ސ^|TYW1S:=vh@KIi[32qHE "svF])aإv&lbS$喩[݉AWNp梄BSÃ]1ŏJv3?4:Ƀ4K>138I uJ,W16E Je| Cg-Q뻎|lLK 0ʰ/٣܆gZBG?|`9R;v1Ջ>rQZ} јix$AkL2s;K=4|$Ʒ월JԷft]5$~\*C 42n CXH 3_ACWqe ::|DPyɄix!<}p<)rwh?z9ˀlGZکA"ew&2(}";nz(U=/YR;Kϧ5o.a ;o65<%Npbhmy:p"P*4S=XƴKٽ[uXN"۱|PS>!|6ak:jnJXJUbet>tA&󴐒!d⻰m`JY}YhGqB9/ MbS,VWc}9Fydw.j@3ч3-1 rmS߲!D 4i$k rNxׄE7r 8Ln [VtNH 6KPz^ Х4R]@y0uשT?BPA$?$pfXxO̟őG"#}F!ҼXӺg[8NS%Xz .K>JU?ۑr<ҽkq#n^;?Tz6[,y3 C켺C[>hghoh yEW.&ܛ_WT_)I4^ˑ9hȑד *Ѽ 6D\.$ K/o3ťUЙn`dG5cpf!M;ŗri!bqȾrt>PWM[ݳty] R>6K<ۘj4 (,Z)ō eJo==RhK|YMbz;Mv -lApVi gM%w.t.f/ 0b`S\A7΅TAy7vZoq79>*=e8> stream xڍT6LJI+Cw ݍ03tw4R )  _֬su= 4Z6P+rrdՕܼ< zpgfL; Yw0hԡ3 E< @6uN a2B]}l IHA:nvy< ЅZ;>UYw8v,/=@ {mh\MƉгweׅ½@` =fx@ljMW0`ٿ 9@$. ` h*q½w }yAV:f q!6P0ݟ;q>\ݬ:@llaʥqp+hfyx`7ڞwy=W'q?W+qp-t76pOG3/xSGܿ~3 ORWPSP2dkdd?>?7r_6UB}ӿZ4a7??)]mH88Zԡ:o!/ժm<\׫ =*Abf '7_v7Fnmg֚9F;z&L WʳtZ 0GsGOgp2΁{#1z7tˆj$tBO+R]osaVGwɼ? i/P+g5ZR-hy:BrB•Ej9 g6Z[]Lɍ. wg?].b-N ,甁* oXz\<%/Q(vd_J0HXo~ ,ނۊv9,@>]&ʴ]8e+_O,E깎wP-|²mD~#ʷ/{0/WSR?j4ZI!!0]o-َ5Uӂ7iXNH3TDrzPޔҷwpKM5SG[[կfukMG}Z{tCplC"3|t#:l>jxT+/\ }9ɋhQ <3(n}> n }ݙHΎ{[e/s)X'_!K8ՑgWLdmwHsX5 (o^ (鿞ijGT7kf= lZ(A=njŅ*ǡSQY^:JW 2(aLүKOrvz>=G>~)1P1괟~jkRNGe$Ţ*`y ~dľS9q [%]l.Z'#}[8h>ç+hAŠVs [lKtZUaRBLaQݏbKD8Nx~0B7ei780(?RY;kci(J9}d.KꛈuIzJLb,|E\6/G.o;L_|7+5X?epfic>g@yI3IMD>-Ajqa7NԽ>>)i߷uk=-mOm(I^^U4',GOf\4#*nQE Zkϙ,8+ёz')PR/P3TY< vF&v+aqYmX&vlEh.]lXaRo[5u=k@ ؀lɇ!Yy/5L/N%R.RtV;= Ns%|\gsW{7??KCMΥSt04)kw03wIhrbxo~#Ccܢ]4b!Y 1?44J='*yLGn*>cЋyCZQnV!'pņ[bZ!cdEj*~U$S\4㩊3$K@ٓiO(X$x9bO] /fCsնLԇ"إyGt""~\?mѢisNr)tKRZvTzՑ&׶wڼN&XY+9|DcT>Ѱ!gL^u$)o'v)$%9Y1nR|3("|:N7!ny%f{xlsa7 iƝH #%fyr`R* ۻDEOB3q.}ڶT. .Wp[ف6dhн^/r[E)bߊ)yz c77Q!Xǭ X'ev2uHʯiZ.T^{9$vs7n~xOy^9^l!%6rTuA[~(/'%ѣ2uPݣM`i1,=SεdNZҷ- ޘN&?߭30 Z(iW"pZ Y=`Z#IgfQv_&"z;,˿OsDT{ܕhɯ= _hJ mH|)x~0`Ɯ,TAH0Nnyy ;Snq%2Y|7FR3Nh(KI6Ǣޏ* б9.mY/E?>>K|tPiPA=F1 5v>@.7>~բ=Gșq{!W?KLpŏM gԢ"-c݆HrfhzЋSQ;yĊ:xDdXnp~"BuA{5,S7~"?Q)'͞?aX}9|v?&)7J, *n3DTb*X! ބ8aY@Mڻ47k륟aArtm'\ CS&EYLtV7_r~xϧwK 7&3 Z1jPz'Thԑ;/{05qEܲC2n,V'4vQvi(\IjoIR 5)֭(6jJ;fk\ʳ?ޕfX7Tz3# 81(b*8JOuQn#4:Z:n**\^Cǩwyg XX_M7qoC bXFvj aF| C Î%= 0 Ա/+}-]N0 }_(蠙1dTgC r,ji1t| )X1 #M2{YhV7''p T 'uߍ>eCaO1*M/z(هQ)mL )@4 ogr^%g,~=6 ?=j['ڷt PcqkBuZ9E_ ]|:LLfi*E ƾa߂n_T|x-6$lfi)N#]i$xF9c}=0]r$Y3>'tM~ZNԐuYM|ǡDϝ.rO0|ݘXvEQ5tt/lV',IY!AC7YǤ.{؇_ÔX řخض|$! rR,Q޼k_:*\ T\Yxu^H M9vR䠷LI %Vo ϭ/Xқ]CQ&rd6Rx*4(f yTuЁ0w~ _h J kg.~0nMO! s'1Z\oɬ|#mɞ 39U<}2)aNXX0%.E7KG}hhqj ,#a{jaٰۿɳ ԦeDJ-g9)ewOC%̥],&^89-T) ~}2a, 'zb(f7sy9 C/rsi*!GVvm^SNN_K_ha?m̋.ft)=]$.RnI7Fcm׬; Zc+,؝$-0~Z.?K-7UvPwS.+?D[wdm 2ty2}:Kb}f~ER4t5${/T. XӅF^,X_%ODȳT?@j:)X?&ϙocb Q*[s[3؍{߄ NaBf$~N+5Z3 X@a*%v&Z~"L(ٗhLR$n\|͋ 0,[sY~4꽅 [tT0&7 ˜+kdH^u3#_aSU?S~)CB@Hm ?UWK"QQ x\+)¡?+n; !a1ߠBu*pώmQ,K,cT{W&J^G<:JĜB׈7t]lxę7` bwg >$R(Қu]w M~&0%!yd^*_!> @;Ivv]s$x_X }Ffe>_WZܻ2w̾dٜ3ݨcc4(q;7uuKA_-Lb;~\y/f #eƤRWt֓X)mZ$rgfq7ҺZ3u{mc<[ .nj&TT~[/[=J1w`hO8*:W^IvF?GuҗY)yp0ij$E q)-, Iҽˈ2!2 ZޭSq҉>fj^)(arH`;:jaLz^KZ}S7qq9Vwε7ygGA4\3o.趁 # fyNh3Et}1gS*'~g< IlȮ{ฦb zʔج`3Glm+n;η4TRu^#G8+|elKkK >?fQYZ,PR))b #X凉_\.iY f$B0SQf7)R#HNqmXSvs gJ)LEeNA]Dt(nЖzƪ%)'Opp㨵 /rO!"4cTEYilq o=p(!JoqxC['LxmAMSn 9A>[2vK6sy <( 8yvG*EBhT?1fҷugwX&SXc֤=8$ v# =Ubr ԌI-.!-3zj:ew48PYs40" xd 7,kKy3^+L]2wuClܒ5%2rf &C7Hm:yi{Rk丷|5>Ҿ cCSh*͙&:%^wJO'gBKW)Z`d5dҼ&D͏~KZd+@PC7bcV!c[ɏC6G}Ua%̪NOcRnĉ.T‰;JЮsNqK"Y7[ brՓŅ{ m/z (njqiY^> stream xڌT  - )C7CwI !t#Htwtqnuba㺟gTԙD-̀RN &6fV~+JdGHtuqr@h $LA`;E'G= `ge+?@ sr!R;9{XYi@kN`a t17u(u's ?!hA g~OOOfS7f'W+a:F tz-(: am\i 6@G7NPU(;6VۀlllW ǿM͝Mm6@3 0uehj7075U)@JT` n]mAnn6Zd@׿Sm 诗*zflokD =vFv|\;QUg^F_ޒY$}=lihMVm{{4NRiC+<#~EĤ!lE*ŝUֳWګlin5%1~oIrW`i. c2:>{fZcSOB'v{@ a?vrmi+2vuq &Hi)~6ho0k}ee[?۴ۡo[_?{CdF/iğI[b3.z}5  9'`,de&:;lkul5/l &ɛ C$8izv$SY(7g.*_ώi{)XLVm:li ^sGy|7~3D[ebscuЩg PeF;~É.#*|B7MH*X $ OK'u)TMum '%X^dwPHhҩ) pa~\ɶޅDK:(!""Wm믽gPfρ~NHƘSiگמ:P_j:nLA9"l,R)9I(2ƥV*^Z}b^aؗݕw WaňalOW?a4uI @ud3w(LyhETͫFPyͻC~c|Hh|ߜsk`KpTM4 YS16+g#/èNPd0sz+R6*Rg_KK`>}$r JY9g݆|$mUкԭFCzRVp=UEʸԙOwl5rMOEwnFvn񙎨>I_+?)ƿ>+sE.*( PQᣔUyN"p{ SPΡHr(7Ɂ{;s 4 ڋ;]g|,6l&_t#r@"z3j\We#;1s~Tg7La0J OxDu+H}d$ <^҈F+\U#D-ҍ7gA$M'l&˼ '[ g>C TNmky^Ѓn!g1٤NVIq^ZW' )|>9{M6)zU/۱YWRTf!BqS 1n1#_7%t}=-|Et1FsE1J5h[}aen]| (&ZCTتɣREN*C);'88oT" iL*IP\RݦRHE,CW©9=1J}v)ٵO1+b~0\a)6.U}9bPlFkM&QROUdMvaDq%5K1z1@fzɴF9kZ{h9|$Tĺ+}זΌ2V(T4DX2-̇l}MՙS&o,8i/9vS]V\Gu3p+7t J LjA/0h~- C,G|K&MMo d!DeS_`ߝ=!x1B j8.L+Eɼ۷ϧr>z)>FmXsf~/".M}]Gc6?MxԬg4=Ge;2@&y,04Oj|9F`?ng`Ҧ\G>j]2"|` 0u'5_E+_}0hb 4~{` ٠H3Œܸ =qI+}Sz-NcՔJ#ߔ8SQg}#yCe;h즓-{J^weJן+-]zz=dvj2VBvvme~u*.V:]p+{#7{}Bs3e 4= HP}ֿyS)il6«9\%i#fkNFd91r,ɮY0Ƀ&hfD}[mx'YjVs;t&m[%vy=nx q31ABaײ̊ϚPTdhEZZs f[TR4dM{EPvώӣI ]WbkE x"@(5!SY"#fiYP'=<>wa{5KMu(=?+oBy ~􆑥M}iERT&egME#9֝٦T?z;Vؗg}pV{v9rC"7 KăY>F J~h4ddnOG$>6?Lp1m <| B= HZmF"7=cRg& Ч&nԂ/CneoZ=d`uETy||S8]EcbTkI([5AvГbNqЃ;ˏYЛ/cO :GRlu-v-T#Þ.SO.!3F~iiCXJUߡS'}EW9dM&M],#vsKsKC5ulZݝIOD)H!3w_q^DؖNPd[=Re`%`~%!7ڪ?I5z_cPtp *hv)$&T{=dhbh$W]~?!(2/}O4٪f^efArI,_N]V kZڅ6Os6gAs9uK 3*Q`ڔF*~)3=r9NFXd^wO ^] k`],\peDu|:I#RR$8e .R,ѧ{}zYVFrylSE!m,K+oth!EYtUgV߱]-l)Z#]ݜPZD!CK$lWG@~UiPnj.,qh-q0{+4_o4(e\CRIh/;Ӗm?St9kXΣQφZY鏙a ˫_u`Bޘ3\S׾:Vj[S{{2,g7j_}eȬTn WqOnDZ٣S$X5M@BVЄ%2c'St<'H<܊vJHh4Mh/N=n) Wjcm!:! IŤ9bQT-F$[G5(|-='ˆ!lm~:!&h:|V7R1: jj8)Qv*|V.cߨ$!ۛK5"ݓGZo-φ34kEo"ۍʈQM"H!I ė f(MJcw]n[8YI{C7p:n m3ZSܗ a|* }@[o+N6COX.,V, TȨ"@j"KT?|[R5vE2dt1\eEr` Tې)O({it(T-*EyXg&GUƺFt97kFRfx#{FNvJ3,F_|%Q ).͕>"zC;fdk<;jmMO7) ]Ln٧H?'S}~.r%aQٿǿ5!hÿ o>PjdOy)r(C^1#«O)W^gqA!Mnu-,Ő{UFQك]*Cc0)XJ:Z3b;frtjSJiTu>?7) E!D}7Y_vf\S 9+ €7հF;:^s6 Lxү{n PK_1E\:0Zj;uw#vEs"?֐ 3鎸keU|qj te|9&\TRNut`pZn5OrnhR)|;4/SQRԲTŘ҉sId\ꉟX{UĭQ | yJ)xV*#'o*̆.~j6X5m9n>MF( Ӷ[P 3qlcֹCr->ru>&TU.eWv?ĉ_ ANB`-0rD/G\rSRi?QHc9fƝhg'[9 ȝVd+H(zQ/ᨣG!]nLWMX'!cN%cՎXѦw>̋ sDBR1,g(@ D!p8rg84ׁ'pA #Cjf$[x'fMXWan#lKqԨ [9,jZ{y3)}g̰/{-A tHf_, ZKp9Bĕ[B~xGL&-Lq'lm3aG')}g{-^A>Wn{ϐYno5^U$ y Oᔖ9h&;;(>,I*mjpjrFF|3-7S5,'ć mv[WLyT+ ~߄8بKVÉnrsP8ڿ4ͽ2MHk ;TtG?>--컛"דkh h%t/֙/>&BUsu&)XyXekQV$jࣈF M-3o,y.7:ݾ lk-ЂjƊןOݤoTTb <܌?+/FS-Bx _ׂ(`ҔQQ, \A?ϚtQL3DaŒ*nPXRL; 8t\v( K=AL2)i&@d@䄀4hץ]ȟ&FVg(^W)P@~>I49mԪ_<:ä=NN,~d[@V$FMELX!hz5?@V,X(Nk+l1*NuY+3zht/i: -Wߙ\NPn&ob(=$F@ (TzV~Gs+?oYbd#i>F@\r,:ltkWnJ% q69hpw?"b]Em[W3Vw?]Jv$ yB$(ܽXs |eXƼC(M.sSy\5cs Î( ۩^r [ύ6킃UWu'ry߰[s+}FLucHNjcZ#/CEҌĽ+9ے߃hm e>VNH-qKf 2,%q&)/uv0g'BF~ qS{`}F:ZZ/Ljᢈ Be(D0;-Ok(}aD[@#RJ4 Ơu-k5]/ UDw-yChSJn3 "cfoBKhf/qGE{ظ1NrUvb"SyS(./98=Xsr$2NzmWU~eO%( dn@aͯ?$J0δ ODe^d8he Wi=ZǶi@A >g=asTcJ_Zyl\0saJDl2#e\K1IAՈZQYW75z_gu!K"!bxKͅ/;fa@dYrt8^ѕZ5Y~R,LǖJN1ќԶ;w"'ׇ<4'*ç0nX'KΧLhgOc?Jt4b!9 spqXJ_UrI(ӽU3HVA xl ] Is/\\ܟq7ޅA`T "BFe3XyƲΆ},_WIL ;,)>,ʖ/KD29v|՗D4]̢V]3ONYDj <&CKwd*C[^ 0SquozIT]ȱU繌["͖ɻ; gCoR7ǡ^Tt_X4'rOhtt%kJ0zOh9M~NpNXuUFJi_=|>~B^k8h3ZNS韷7%ptf׍7ҩ IfJU^1s<ȿxPln_mo'>Ktj9KIP΀i}WYrXj#y(t('Bup 7OQ9JwE%,Phzw4{yCڵ!Hq;;"JT: + 7ọFinF_ =o 궥>+GJ&+p೏@pLJ i84ާSZݷӿ10/֐"]§>k-.~Za;zzJʪd۔Bݷ!&{0,^6`0T- (DcmH'9EK7jt†)4Q5#lS ś֖hf+5pٲH4}LvJ~T)a|E[Ė^f*ޣϤ>wG-s ݋h@=9SxZ;q<{ p|\>F5̠$CA $v Jof pi%M'Q6iJe W*8=T }nu=ݥQ?:)0)#?D _PB{ݾZWz2oDAye O% /q} wK'(Cc;#ts%IOWOxbn~lPbpW{ !5H.оtq#.%46ڣ.ѐh.ؗ*|\0`@ jRMv3%#+VoֹgMo&Γ26jźP^4z·K \ք>B\~5aqA&Sn D5V66ƌdRV*2ur~ys/aFslV z }ֺ++ A" 8[(CVEG 5SQHL5\DȜ/MhQ`g| 7l\dZGb8lgy}Z_>߾\X*G4EV(Bw녆)w iBӷg5RS(ou:ҳ!A. ɵQܳ"2pl. _]('!$gGKYk(BSg'B ;~lwG4s"4 o:-`WJl[ln Eb\zVɪ*^j "_(t.c6' dxNzbg3_ ǨaRC~+͸d_e'cdZT&;\1ǙX[j'9][~c *-;dy{ :f| t''1s\ aQ'MU5ҳ]B:N>_"Σm:Bqڃk*gdk%WGTiaþm/8vh[:-:B ѿj [!tȅk2x8p -Cz^W^JkmN&#X;] @N[8Fz$П..sgتս=%-i/놏 :!!MAu%eOۮUhWK"C{!wt)pC99`?i>b\O ei_n^;2"MRy.]zl_=b.oFAaGGpжAic)PlkeL"sTM DT0cTaysp/6>Űa[ ٛJCy2)=1Bش8ؗ%6vIG+0}4vhc) xC?{>3 {[\ mu/;˩_$W$};]k~YT ubU*בz evץC.1Q= Ì=texYw-F5W״%H-|ɗlk\Yx>% ݕ6 P>(cAf7:Ri.2n'AIhIAL\x>V g&8eshHH5#D ,d<< vAл3=||TVU.M2aI9lA|]$ -L!q$x}N5 'c;LF5Էn\їsEɞHw⧡ KXXb"vOcTɯ4 &R!`=2KQH%n]ې83nEOڜb}z;5K: nL<"X=I\{վ J#.(AKvx%eۖR/˸'%6SԹŖqӨ48G^dL}2}iD^CX mICC{[Kڟkm4M:%tᱴ?_K:5 D3Ž`/j N2Idb3٢4+)>qg$B*LjZS^uT*F 04A^mpXd=yTKC*Sk[*Mm>e#>/ApA?{u YInDptߣ:h A+,`1",Ť-42> -gD۾y4 (BT+nb` .Ni+Y-j*rEc[Y.:oMfGizUY!i2ȼ$ԤQvpiɬjoN9F~2z9j #ZiwM|uSZpiF| ?p Od%|Ts`6蕿_LƄ ՊEǒ(k_!XR8[r^$lƆbm&npeJB::U14=gF}4M_,Sɯ۴‡G:lUևȄxz_`l1E.2ՏᣤYW=GnV#5WGPІT#jN}kÄlM*2yNRM`Z&%"ϜqrI'I1e=;4P=7yJۓ!%=bDͷJ»oC9 Naahh$Ĵ9齽YzQB6qiǛ' W t%K4@Wkɛ;1^9=5\Amr1[`^T|E@TBO AX{Y֠=y  *B-?RD@PZ31lm11*K!u"/&&km6+7dU6>%mˁ.z/^ dуogl8p_DcWuYUG&L]tTq/ݓL B9aTίH)mx ޝcCq|ŮMKWwE=LulVRǸڈɝ`,C('ynR쏖yDJM҆ad>m ZE} {X!T RE6/M˯S 5IbkJ';ɘ$fGUID|u+YiyoD)d"|Htvoϳ=uo&@^K%k>PX XX!QgZC붪DAT[ئǕ| niQu/}Ču Ѓy̶EH4#{GI2BT#sga{|4Ii%_](@zT,ᶻ!@6NZkU@nA[}\ҭAlܥ`w<׳ k~$\)N_ ]ĀOf7ƵjX}rǽ8&ƴ &7=@6̻a/΋7fĸ^ z;#g yI=tbO[cGtWBe.LF/ġؑ(k5}HU%{obk [7r3l*bw5vrbJ$e-*BPICzvi,DC\ɿƣޔ:f-Sd#pFmKdAC\7AZT,'X^?&}1n!tis[Z…i@S;xA0Qn8:?D_:?(^[c_sj?]K=42fxh.˗^/z<㯃6 kˇறZVmTUHxߚ}۷@AS0= * 訞`r( ioM-lt\P8Q2ysQδ^, a׃$$ b~%ޱ[0N5Pc *೬apҡ3EW{P9|v:E84JYN(W\-NLΈg)߹j8wVU 12 d[plGTWlXE-T3c]`(hp6 Ҥn#d qNKAv Qo6;ḽ=ڡ0꾅;͢X.O<^8]D "txvOt蠴)H7τg$y-Z j6hHpgnz4/g%pNTedXܛ o w[5T:9JSNp{mXNY7ɭAݟciÔsbDƨI5\ Ғ(/e&ͫx_~=b2s P/;|Yj !֨@@PLy] !fbC]vG%v5+Y_ *SdYt *A{uBd!>Y6Qd_8b4{3tT4wD7Tm V$EY]c<5,;4rWM^+^VX>ð @8H:ޭhp#Tm`!nԳ)kYJ'xKTJ$z7 ?ݸ~R3ޮ>lXϑ,Gq+tN(g(}pԚG~;E \yOGZe_3(vr%?0_(uῄDJ΂&6ѣA=5+gaqKdٿFS|cz/hF3 f, &afPJ,Ƹa<&L,X= DY{e $*Li'TRsWNPRJs4lIζݟ#r`qw1L[!V"XѦ#Dqϧ[1 ueڃY+K6-;pY"1vVc?]a%QT -AqaK=y +\FNa']'+,+C)qE^5`@'^eyyy][ K)GmmI_rD1ΝVz0's3x}xd70 E8oMF@+YKD@_|3Mx]y$BW" 򋪰ʋ=h$Gc&Slimsr0Cdt5HL'~'Yŵdc[WŦ o>ϷS@ ?~x1Kzat`x$Id/p/R]OW}Ji \h:ďIh4pQ_&L]s:)6G# nM;x1wp։ٛ m~fEК-FȣN GU{Rnз+UnJONӞqogm+Q,UmqG -@Mi0U.!:"iʥ qGQ2UuNCSXЖؿ{&{ шBl tnf)uY8lԶ1m{9NѕO+7S#`JH1!G1FlTgw6+ƌ N偍=9E(cC6ybN#ZRa=#mu]E/E&E݌Pi(heŵyCn8/GzI1%v__s-4U«t(9Yn}|tU=#]KrXUϩ/a4>u$}>ݦ+в6e(Leuo}9|.>])q@2U QPۖpN\l}2TD0l:-{olJj!o~0JԈ*9U74XcٛE%C%, 3-N/Z`$w^ 5?>*2}ej9 /{Y,p/(|W TF m;2 jVW^-|fn_ g_OVЬ sy x_8 EQ` 'dJtpC#8B.hQ-BJ@#Gqv*W[׶5zSc%2V4_|YdKod|0h!9>xqf[<*&7z<4-E:^&bՀH&_Ļwp@vHO;;:o Y*UqVH *̒ICYX4[*>r1J%io8g'"q_Ij* T)Lbuch@aZ&MzO8t\bT Ada!u!x^@'\̆˒"X&-*Om/mK3p)y]صT:e/Kk6[Jrp 4ʬOP*%s;ʖ$@W `kRyϸVLlkWr_k-bn1Z/cF+F`5)QC\Y;8NAZ`b .'6qRR~?~ F.;~/mXH|a}[|ɜ^ ߪnhRXJ-Qv= _)hJ<*QjlHkT"! -Ha` 'dQuw}+2[IU|v~#D[Z\eg $_E%h-:!Wd)ݲ嗛u￀TUZP#rgؒ^L$HRr\n4ۯ.[QbPɷZkҨf]zk@SګVZdpфv#2U01{h7c]ZsNGiYU+S`&*&v ;B7z 7)ү mQH9cUI)=hwZ{&jqʍ+{aVeǀ;,1j$"EE`7N8iro-s ap':7gFK0ϝ M9"I䯐YJvq _1fף-67@tCDհO)Y5IJFQKd:d>$,>rWL%dpo]* bHx dW"=MD%(Ɠή6)bc~l aY}Cjd <p ?L5!2L~##}!s#xp/8iIY#=6bTab_A١' x|7p Qfi]' g}GԪSZS\{QKKy0&.#um3Zs%%`j7O\q[j/p%$*@pI*L'JY0*I+e2 (QMtJ6s<)싉=l3/m Z%5fB>5 򐁧B$x Y(1tt8$҈jXZ4~QWC&#Unm}APQkK;Yy:zB@^Gk?1f[5⃆__7nnknhH[;O6cc0 6z!Ĩp^MƟP>];"wbi;rL~SpLh'?i%T?UxihsϥUq̤q9܁]V>4wuXA G ʬi:h <[{![iL*=Zi7b3)TcQv ZS\r G\6z,:4[|,DXBD&RtC j.r ڬ )է CJ[5%t*~zJ&M[CX#vHi0âVNHf壇>F`[pTgLR:jw?ӠKr|Lґվ:1ᙧldO%~4r#1:<Eq^qޙ 6|+`0N=h.`t~mj29 v2/XE@e}*rG#By~9OtH}gPccT)Ǜj[[f&SO1ů_ZV0SQp*:^rʄ\I1W>{`KtG ,{K{\:ٸMõuB`͚TJtrsz,QV145L6߇'"2먀YL' چs<@D#?NwnRTdvh^6Gn6$@k6"Qta ~H(-JcA+i bW^n<&H[Y;n! Ymw5q$Jǫ]nwמJ=%="R8lP[ DFY;tX<]ίd;ɺ|ӄRKPqK&RD5I!-Knq>&38qN#sq7Yhqns}%rpU{.~1"A(#۲tUôSXj3Gx-%E) Mv_QE" t,3kdd6zȑcݯ@LtnH\@m,IbSυy6zTYHG.dԂ7T>AhFz"YzJr?GG]YI]NIueԴ?1Cyo1|>rU}*=G>^y>+8ٻ cIU8П+. T\'nRec:"13OWYHɰ{bK90R@3%3:h4(wW~Gk4XaUg: TXȌI.>yۣM/ sJzd6};(,7[r&>̐aje1嶚7##ZykSE,*hp]t.)LVkem.kBIk+#*g-ibv`wFc@`1J}?GgR|1~:Ԋ&#L@x7[8qk+B<%W}{\v>|SeHrc?,PM fL:%#v 5~~D&> wX1IGdq lô:gϝoi~Jgϰe?ofW495qWVӧi)qSLOUF. } 0gDD%&߮cZn"Y fGgT|d܈TOufL5142^.!q k)e$?C{rkFBcr| b\qY;nyo)1}7[HDuƧ]--L-Y l - >`3&ԥaJ\e1pCA} _O]>siKOw(3:l)2, y!| Pwingc \h`N0gz+y#eN@!؂~Ytp^ JrFTO۶ abH:K_9[W(aAYW@IP֞jfm+WR9ToC/Ex|quW37Q ׷o$ b.` }1Z釞Sցxsk뱊JAXE~t`DK-_-Nh endstream endobj 476 0 obj << /Length1 1374 /Length2 6053 /Length3 0 /Length 6996 /Filter /FlateDecode >> stream xڍWTlPa] R&--]tAH7H  Hܩ=޳sw~9(;"8J@X$P3@ )h CAHIP' ozU$(r%d%e@ $/CR98ԓ a.(l$ow; =0LGn9CFHG)@:+|`(1:~ C7&H K!7/߂dx!XF EC!slZ[>UL9dqOMN2rZkJX.Znd?9jV#Cv^>.ogR: ,pȝb`#B ܹ{cM9y}FvivhՊHbg#c~*7g/#3ۇ> s 7p32j-Mv/eM&_^Fk}lq7H]ITN9ޥ60,@!Z$[u;yCrRl`FUф@t[Ǖy'q,c.,#:`pt=-QdzQ?\ٜiI|XIKRNmf+U@nM-F3XEjvd>ԙm#7ETkgBWy L?'ܮW_ NZ\yE6LxrJL},ksrL7̌ѕnuN8֏֚En y͠;5ׅqd9AFk{KabW e/̢aW`L%c>9ȼrd5ʥ 5,ghLHg8QU̧Qת' ?N_;q=P %Z }%HZ]xV3NUp}ZAOAYQG99+PxѦ8˜ہjPۈohNAy5kZx K~hzDvPi.o4S[7s*Z>!;B N0ppL%nˍL/؂;=TO0QC tըjca xb'K ƉΓꃠTHxuF!> 1u8QSer4g15|^豦VJ%*p Oޖp*>p7%w /Pl)e k?| Jc.,sZU%FL/zYGR菻?ِ_{a,ʞeIuNݤ폸$@x4IVc>)z+{ m Ɋ `cZ5Ae̍> %[tҤsR 9%͙nCfЕF& qٍJnFbmGb).|uҮ{W$ļxt{k7j#<;㏉6_l=Հco9:z!1tr'[ d5 U 9?h;X&~T06ʼ>wɷ›h&SòLiv#||.9Zo.CYT\9QkKky { t3mi#]}^Nwk=XтG]l&=fqe`>qTmBnp<%ښ1Y4eE"&OqjK?T~w~ .d>]5&BTxӽ~}* й|~ooIbyv/sUduľ݊{4.ct-6U*J,F@CyUMf%ǹ:¦~ea#Peha{ߪ8s+B^^/Yl/6oc8}j *l)J_ 5O4l\-=qPMͬJ{~zyE7\{m:焈iƌb.$& eX["R 'MzIt1.5]۴wh"nK44"]tl$ִ_k:ߙK$Hų_6;řz꺜q{In.Hi=lFN$o[I#{[m{c7!W a1~$%Z?\HLnap@^T)/2d9޿{Ϲo]p9I4( )/%uܹx\355I"UJ8CΘm: ^% c i]{l"*ÒiZ㩚ÅOutHH|waXgUM&R/L|gO6TI(!B`#Ӥ׬l:3PST;Yyܲ*+uv4⍥Y˜6/?%鿪x w"oheؚk=_1eJ&Z$!J~hC4bh{%4 lug"~,T<>lyK)JyhU%Ėn/jw5=h[v׫rxGu ޘmtViT5Pq&ydQٛFJuGh=eJ~y:Km(REQEY]ܿsZp }Dqpn)l(6F^r4r}nӪe~^߳[i WH-~T}hUtnjwk:ЂaeY7i߻(&E^ `)(lY۾+KpOc 5&ذ|ЖS11]yDpǿD%˟e5+cZ&NoP̈́V\I\-t *umTZ4LK~ o<_e`z .V2n54%' k:m _6B'owVIÏP{e*өY^Mq$LYҒ<ފ93Մ%dVaU -Cɲ~tG7kSc>;Ik, uN4(ΚK+8]"&@F`ˋm}NT{Km=m«d+8qFJQ+5;ԾBEgˢE+蒊xh>yUST@9ݑCX=ֵw2M'?ї'Moix&Na->Z(Υ?ϓ@ v8A-w E&m5P)gY_um4\#[V>Kˑ3BE;,?Df3UҪFnЌ[ջG U Z^s6znl݇ĩ/i [ihʢ̣{_׏KlQF(u׹>p^v뭍[ՠn oA\'u\W\w7U`b`M9%M0fe: ZyjrSToM]sz[4?{+d4e\V3tij?<鏊> :k&MwQ$Cw ~ TQH1З`"WkߛBfU'~&ld/G/8gKAŗیPK~moEٌ rӭ C%, M%^goa*(eb^wUOѷ^_s' rOx֞ɮ /M=%5.mϬI~bjv0?&,2`bLpT+^t?#,~k.t1o#T>+qё^+q،yy{}ے™gҟP HgҴq>_)" cU3oK BD|6$ 4|aU[Ʒjeڜ3uBܔΜ\9N+ӥvd@3ϪX0֙BF$76;jW#kJ~zgBebMd6gáPXcE#}*|xF2#=_EFɶgU6<<+hΕi g#aR$pD/!4s x%U.fV1f u@{;:>hQu5K;cߪ~?̀lG .:U"j I [6"sXTsr0kGSK]R@Z?$Ux@QVй j-g)̑JA/J]nk)|^ɲ,H~eQ]l, Y'BzqMBKuFB}!uUx9$MEilh*f;8MZBG5ӗRLjdnBfwu3{ J9SZV?Ƙ\͒nh_hj / GM!^d'igL1*kDFBINT U ℄܋Շw W.'y(R.MulW`~B}JĄb |zK›_<<>$lWaCii{qm;Gb>˻>T v S~ə]⒑^cߒ酆|՝Sg-;ҥNfiN|hu@PXw险9QTw:oOJGaQ.AHQ; ~Wt{v r[j|$WK.tKL4Ci>7}2N s]Qi(ڭ`ATr(䕍J[hq2`b_,"irp` K`#0=7w=:4gxퟡݑr (:xdJpL95xUM*TH.^ݰefseeSZv"`aF&^O-WV0ͺ)\[1@MyB7g? [jwlmv+ջ:&b>Z4fecئn W󅻗=O{A +%[tUWwrX3Ӳ.J9ru;қ17YUQ4i4tmۓG.)si tRt{YBPhqOYYw}ɽx<#Hyl{j}N҇Gډىgn^ĥwUIr&s/F{[c(ZІzش/+%~0 "X7ޙ L>{̠_kɛgrۻ}(lhjf: ZkFM(aȝ}g endstream endobj 478 0 obj << /Length1 1471 /Length2 6724 /Length3 0 /Length 7718 /Filter /FlateDecode >> stream xڍtTk/%tR=tJ400C "% HIJK(ߨ=;kݻf<ٿ5u`8 Ȫi?s21BPID^ B 19iT\ ?($ , Aj8 $ wt"`dED9K B؂7Z%WVq[Qݝ wy p l` \:0n\&-F$Xa.HW p14 7py vYZA0O`  'e 7 @NPU3W#ìd`W~rg%=y~wy9[C`VֿJruуA\rY !00 +,`K[_u=adގpG5/vgWV[VKl ;C<ƼH~Lܲàn.V=\B.>A^W <;&W*ì?"_? }ֿ Xp$cn+ki_Q|\Z_C r@=#@r_ >W5῵ra6п[iB5`P wZ(. /Sei\.H>VC+ap_'(9;7N>M*L9NO5Hݻ=j{Bf66ݿ.֋2 ,bʵȜ`Dp`zLNgѩsEz\L{-VtP2RQР3{lVy8]R<2M:nzmk;4cfeA'UZnVJp(O}"$Q3% 3AQ١m'ė}zTL5gG&Uҝj*Ͼhse%~)T>do+ONT~b`ӵ/5%"@{M3ÅCi9RG[O2ZBԣ?=a8V$6JHZ31V66AI.9 KA lPQ_ڻ*u{x4jn%Lm=9'Zy^1#2Dq*+\o^ (7;(~>WՋW%uAFJC\Kٜ NzY5oڝCBX\sݮ[;tK2&—eD>7a)<AUmvwq%55v< ΦVUa#DlhuoᡒqIM6ЦQEQ{r*D(?K{-纹º?H("`r,SSYy K\;WlcOh"w^{u‹ g+K[l,@+n}F ǹI[oӿ8έ!~{`UcG!@f\sa6e /5B[ޣXyv#9 6tV u=ts(P&Z =F J/#|3p%09#u©Kю.BN\XHnr{b}G.uS0һ3Ή73?cb<;ʳ1=m2{Uʛmz[!6@v}mUKB1q&p s82 ڥS֟j:EđvwcE-{0ya =^HX=:t&T ,- ~#lr'*Wav"uD~yyR|Au +C֋9-yWk&۬ ب2Y- (]QMGʕhlQ( s*EߩiIYLO&eC6_' (Q>ƠC_WlOc+%{[ƶlìx@WLJ05ȹҷ`cJ 46޿˾0` )ԱVO"Iv2ƩbA[8Aiou t c  ؂@;ͅKx -HPJ;Mh'0s1O*;T:$e:>[!/tz΢}) 6P@5 8 #ISC#n!RgN"< |+3+)͸=z3uOlMWǮ4 l/t9U x^p:B7uV\()jOGËqFk{r2N,${~Ϛeե@=U7O1ԴA'iEYðbm 7b#&q_NrzHܠ?+-#H)JRc(.EtqrO1sg3lr߲RANWi%V:Ei[F[ InЦ'곐JO5 }9/ܙ/T,ΖGP^i1ϔ4wL64kSX3O̩<p;2ao3bJA"<+RD2=3[?5:e9.;l{EK I&QYu)躖V;NY 涀3И::n}dfˌ=ʇC):e0CG^{TIoel S~v0ږks%i 0ٙ*V-qWT^[6l>)N8fg`G ɬ >ffxqP+JU%Oьuѕer- ? WϢfzJ8%r<{:|4<>2#Қu8 ݋U5k =A+懲 Oe#Ri%ęqؤ+P;4˔NmgIced)aZ]2`oTz ߢ }wt1kf+T~ GZ_5 ۃyA {̼?F)> ͫ5~6u!-41'QXw{'hn4zX2>h @m&Mj탷*Øfz/cҸu[Bɧw!2yw| ,=˨Tgq(~?oђsږ3[[eUAdϫvm1)G:.1cXveL3W]N*ՙq5/ :?Qn`) |H'DF/l|:c-L$HoE>!thyBF䁐j3`;بR_20Fg8 7 ؊tw)DlxD T'=Z SXKGLrG1d!Mabv/KwY/Dj]['ƾ1Fa)qzqnŒ_z0 'gi.ayprjZ~A{m*п(" k/m[BhXe?So*AlZb ETZD ajqP,xW4B՝]eI JW{!^fPR(9IpKMVuKVdxW::`0:g.]sdnT}\J;afmLR*_\FX=SΡZ xY(V@d Wŷzw:UA"Y,i QFW[;1.lKOeCY(4'Zޕ:UY Q#GƲ50H"_ y>Nya7n`Xs&TnҢ0 Ѫ'% Xg7 wU[S$k(Γt  D(h`Eg!ɶV;C̀_ɤ))EDg%Ԇ _Z rkc3/%+< ~B5P_ԥ_qϭ+Qwaid5Pe+;MLѢl ys?n5uuXݩdB}0&Cp "*,xLRvZQgu>9ٻc2˵6\VZ>u]`Zޗ$w?Lr&^]L]!2Hɻ|30H>6xLU}8MlRcJ|\ }]2c"<;/}SB혋cPpåKIyV{;Ȱq̒ R.5א=qY}PC"V Ф7Qݳ6 Cm^6sqGsSw\^2$cy(?H`yR ,l”THGܞgTh4)]YsyPp i4V8Og١z;V'ZhfQ nvu;RVs4 ZaDDIu\IڗOlv贱P+gjofJﲵ h^UL+Ώ=^}G;.:PyZ.Z9jڸR"*$L8!4cC $&63p L{M*y4QZrj}@1 VN?n@b? ޚĿAB .+L'%.qh:+> stream xڍP Sk ww-R(EZn)ŭ圽37Ik׵yBC"!6,IEuv;;+;;'  9 &jB 2rx7rx1T\^A>Avv'; !PA{#'0 ؀Qh$!PK<M|ĭAP @d 1\' 3=+j& p;@ e5XQh`Sg#("l_\m (%;@]Vl X/f߇`obmkd 1@eiVf C#+{ȋҍ ug[#a^Y( 8أQ{0drlld і $o?23O\LHj SOw[- 'no8@AV/B&c/b_eP 3 8|0 ?G&#AZAYx9,<N.˃Q1]ǿ|emL!}97^R0<&/_?"iG+?荬V[0e !/`M@"vZYm1{a4+7_b4T;EX7+ HbpˎX\"/SzYM+eck<#(e/@˟\@^\/-zL!P?B?D!.?&)TA/~ n?Hf_br]Xx:_> /,lV`|I| |l/ `s|I'a8B/ӟK2?oAd0 1 h̲5ɍw֦Ӷ9Wnؼx5}΢KmvKU0AS_8"w ?r 8_M12۝nͤ~^~]f~DW;Dυ*Z.Q%>5&Km&6vG*{;ɳѷX foV"}O4yDp0E%EtMwKol?J(CvsL(Cy"*V VNfY[YkS7F2_ZpGpeAݐs8A㦞w>WpiO269&XVN6FX1#\6Xh.rVQ>wZ*cFד䑢*'csRK]2RtC5>f]kXVa&tk)C\qz &;+>pqeӫj]{E@ZL:^]Wj f.7GK Å5A٦[]%m |_RT|TK&ly|l󁾂VuނPcYᛨ82T,u QإKpBR<5.Ejv(vBf~mkȝq88m2"#r[>,{&{ָWLI?Bߥ_ \c0ׅoG?^fbIBMcJډ|T3n+V|5t9t>:66.xe^ɉp$ڴF>ș .Qd7sKڋ(MUY! N|wKIX8z>Q+q\F>zoAFX8Jm8V Kx4y?ֱ=w=RzQJ} l%gQoQ6m*$.5 2^OAhnB(CS ,JB3@g423 )G*py!E?l3NGtlF[y I!jh5_-,PA:eBSǠf+so89cTUPkO>F$8Mdb1o{czr#Ckzתu8RIC$pXEnrnAJ!Gn[)%`_=L;ÝaB`B[bIsNv>|Ww1~mAO4!=ߤ!WR5ŃW2WK BFO^l{^y皘{{']!HVM5;je>=2qi6k詪Ƭ:x l n'h=MxWǹ [rOOsRha<:oC_\W~2FSޚў}:\0TL:v^H7?-g1Lc8r:4(b9S;pn\v;rZXh]F\*!P߯ u]!\ccmmK$ߕ1̧x3܈\,aU9xdQ/\T6q>LU41y=+>){qP͈6^r|FͪplS&IZ?KW>Y>2J&ooXJMp[hO!Se;=(,J#aZzճncQBfv8/_KV%RѸVyrF^RHȹǯQv'Ef+,jQMX&qm9:K)6^Ed94YoKU~y5 yC8r2"Sƣ´7;⸌g a~3Њ7ΒW0=5ˡVa`;,уX4*8LHm(-(|+msFgadx6Wq(ti>+/QE#Qɸ vI{sDGX˫ ͆s"6VyTBq)JC}Ct@Zx½a!o7Kb:jYu G;Y\_T"K"g f;Hʌ6$3%gn9Bn{Ә:YIV`4aROB9%V,ߞI\~\o$h)>Ks5W7cœ9W_h?/lx02d_M؂KƳ|bhNd7UNZ]l_-lR{&@yOá^# ,#sHj$ʴkaKivm))cQ/{}YMw9Xp|C4}hhtgKx/?#isIzT}m+s.Ǹ!7 o|)mwFFUh.OFÕ D剭Uzn[)\1'D)exnD:A_HͲ7mԸĚFo\)csLH `2$$6&´ u\CU ?cHGgMbJiP3ߢZ۹Ȇ1r rK\ٺN?e,7ލJOnniN5RQX獉ҥy]x]'7tp eJvni} %ـ.Fl2acZ?b02y8[oI3 h-\JRVxa)ةpz0Κ01mam&xn'ʕQ7jGmzn\E&;\yQĕ&B#a0 )knS}s g_R1 n}caT3 Q^Bk_w.– ^-q-i9svlM\&KhB_[!̌q)Ce&Tqg q 2f?ȷXL*#d]@SF9._ cx ;3-%*neMJɆca0ԌSQ$[Q”Q?3Qg^=eFhtO͸Z,KT:eTE ;w//dW՗B5Xx,nDvX6xSE`(#0vBgIMZܞJOW4ayfP t@ޙz+xƇz.b j=wذ)>"f;[]͇x ?*fv^;) H$B҅=4>~Y96u"뇣x0A6q!Yn<ǎRx%vNEϊ'@RRV{=-ʄDȴNghmqȯ9͚k~#U7Q>a1Ip_{RrfK*g3p+'8ZɌl'fXO-GHt s!4b!7hsGWȐiå:?V%Jc!n|w\S6e!Fݭؕs7J`HP^K^U˪{{)"0hΠɦx]t&`bEc52{F-IFyz\[Kp >NAPH":]%pDzD=$ .YZM\V-l?m*;e"{+q|=?\2"'e9wbϋP犎xO)B߅,9Ano~Oj'=q!6vb_6&V4f5.cw'm&Q|5m_Az҆D;Z\X4Ao&Q^Z9x>V7mal۴,TCצUY53tGns, F xޡߍ$|2~/IYHq:o+EMW*}==7{bS@#burega+RHrӖ@=Yd {HGOɌGu|Aè.Cϟj߷{"cs1|,'t:Ty~G-mcgNes>#0b_1nxd1P KCl-ЊG+Yg!;5bqY#(֭.,-ܤ[AgB+D,ao*o/|6VSB1S^|=,A+_ρ]xojwcLM$32NhE7Q_w\G's"sZm,`Ž4q8E*iܯ+Ÿ̬";iP1"2%[مc+‚zc~NEp7̫~[}|6`SrTonʅ@2 'I#7e:!Մ.2X+ɠ6k$=v. ݎP 9.^ &:}ZL6x+'ԽYEaf<7=5ii@S: >yDtn*N \Nu. v<^/tK$zP70Ss^^:&>#Rn\gMtcPόis`_wy,roqoht/ ٝ t[^:pPIU2i8cuܽӌ2Y~9\s|eޑ]O2X:y~잂 33#T/ɺҡDkia˜qtX&ʢW;mPVf`yG%Æ]Fc,dD`+<֡3s :AwW) ck$)P/rrS*ǝ~QElB#Ԙ4˓ꚣ"&B^=bt`dIDȏ` aN(e6iH-vKK .βrçX`N> ZcEP+y|#_U1ߋy #7Qt&w0t9,z;cζãW|t=\&|6hZYDrQ(#OvhAZN t~W\CV[b@ p2pka0>{7\dA?mOfuC";7t]ڎa_8so/)xh&fdoρ`pP/vwϚ2{咔-] H>n_xbxRY?O:/\*~P?V(Խ"pjiraNW!B=bN:7nFly`J X$c^1&mIKe$9dlBYՌ- -F3 M,s"-.VVIXt ;~H 4]J6udB6-7ov'K- FA:׭c<]wSʀ4u|6z}ƘC4wrwԼ{ ^; \Vۊ= =(>GWkNͲF]jaU*@n쎹," ]ZHM0UQ|Y׿cX&*tFED<'s mYs,u M=c:C@‰j:Z^̀al,++y9(%ݜqƓ踍sgEC !FoT[H<*ARbxTzkc>=|ΌtoVO+Y jȈ*-Lz3C+:wNTh#%m p,!'67ZR8*݈6yeyfdܱWf9?ʠ5ٵUKAmYp1IT붾E5åK=pB? IY:M*낑{w>scN:7[;nHT߆fť !g著۞sB$xvӸԷj=ևM[uxL WE` ׃Xp1+Y+ZoN W#e#BL_Eٹ@5ÃF\t.ҟԅ58DUky][yu+3PtN l8<6L^]DtQW4qp q<~;;PJ1qݹɆ |]բCB8ʶ| #4@Apvwa#݃˃S{ZI> 9!pE0Sxu_\#%2309y+Flqڤ1;m>ۇP X*Quz0B1qح.\ؐ~6[d?,#-OL@\vJ~ydyOj#@/,xׯ1 Dm(M%rE"[[Eے1>$6;xzP9Vs#//ǼKtz<~HEmO|4ʺ"-)ҢvKd|OjI07NhL$䔲8FT/],ߚ.#h{,7ǭᶥ\cnI<wq95PG| 2BBr=V)S\Y%Ўhj ;X, "imX5usّBf$?]=MP[ĤP&Yd Vz%PF[).pQ SeuSosR3>,[߲khOﵜP-[0jT$Z@!ՐK%8C=bamJtUOj}45࣊0@.SiC_UZZ*qKer̍^%#uN܊ FץfEN8>x`鏕R~v)iN2/_py7OkRh%1ږ_+OtJ7[M`/1.F||E"j"\A endstream endobj 482 0 obj << /Length1 2590 /Length2 16894 /Length3 0 /Length 18398 /Filter /FlateDecode >> stream xڌeT\;w)!@pw+ ]' ;^NoU5P3LR {fv6;ZGDtr F hIMA9W[;'GW _C@ ANV.L 32:Y],vƶuBнtqq`euwwg1sf9Y3ܭ\,j@g mXVA.N@X`ke w;ڛuYoc p/gcSSPR`qpaۛ64u݌lMo U{OΦNV.,VdZno߈*X% ~? *X N&c*1U qX5 p?A89Y,5s8m.sG7qf[lt{~\?d &%\\%vv?rk5v ` $wto5rWjsM,D-~? 6n,=,ˬZ O_ ͗ _Ў8 mi:&yߑQi.ie 黿V  ZY{HXćq.cd_~cWRJC#ivpNoPWwngh;c?R N@J6*tQ=҇9z`7r4t^ 3ȏ-zet0UȦH"0f?iiL V#uR't,aD/;PƟ,>˟@@EkdߝBƺ'qG1՞.'0Q&^X<ڕͯ[s`is$[ٮ~syV*KJ$nڥyj83_lyP*3 北|>8sg˕‚A0A3ȩo'  U?Y@OVAP\-.+F93*?y ΦY^^M Ga㬒-V{sI_&{WWF$T4#d@+[h\LY-dt6~[ A(Pñ2P&(.t_cy/EʬOV\38|:^u3*9]=lIɗKv,/eQΔiNBvМfV~? Ǻo`gb8 !#S1v8J]*@ra3?H?Q ,&5~c9߳P#́H?d=ӽڮlPR}JQso&&f?]âj!hyAz`"otɚ,P؛0zIh W Jo) ވEI:V;/t _6ҔK<ҳ FtoXD簡LucU04c&XH4vʢeU U,DK7W,夸`?^cd+5 dx "}yl{W+p|)vn}lK"@*6%3=l^gR"Ŭj4>5 |(ُvϼ$;Tj̡n8eIcl5'ȓy扃&T!%>IG}2$Z4TFs3O؝A/owƩ1waÆ5IM_:3mU$|fEyQaseNy"*rE1G#$W O#ݕH]8r%lU wu!'r:c.)d$8k2-Hot)é'_Ojj^wA*϶Ę,Tx(M>FiAJD=TVBH6O&> Sh|4&C|u 2op, PDpoa ~5"lI7`տ8+Fl{ ~jxrB6P}sNm\XO[fuiEY916Twa2\[vˤ&ga1|f1G{K.䳠}W:&3b8bэ'<.8|I7[qe=i"wq4qSY?ز N{ae}KVCG>>dξF j>DcL5V=XdO4!iIGZRZVⶇ&0Ql|Q<.nfD"Y̏[`eŷ-WX0c肜-oAɋf3Wrzwa6#$<]+"if'@ Dk x8%_Y+Ui6ݙzM5N֔&oJ rXB]/X4,C/&7%.$-(}uA!qeR T|2ɠi\+JJ& D*ϙ~ukh4[ e@051E>"_NO-8+3(V.CxD ;y)X ڲiC>;w颷*îY;:g=#"Q}["cp#f2Фd#.Z?Qd" ۺܰl"DKݪ *Y1ɋD̷'4izbBUI&YPN,&-!WhM*'wd_ı3D}IvjYԞ1*0[҉2ZPQ^\<}HANK_w]{(2G#-}L=A64_‹ wtD3T$2(+@jݛNj}ͭ@&-8Q,`HНKo w::M9^ޣǣ’Ju(-sajT!vdWtkEa9sz׏pG9J V'D-t Mlؽ**ZHa/(B_maE"xe'~Q$SP'U=]@-*E3l1)H=]c㩲BӎK0fYHGLTg]1#<-t1 nPNv4dZ?ejBnlۜ1V. .i@wVKMؼks<_!w89İ} Ec8<+ͫI PQ,Wf3%i\HpKAOj^x\_>l旇e<g֔bX>JQ MxÛm}/ t9vi -rNԫik,>t8"[ZDzK^&YjcMr-YxP3亾E'T3.at2W"]*a^l|s9=L8XOel΄ao_ Nzn9|h牌D7Pnwv"ek 夵NtB90.?ectKm`*`v(W>\ V3JcXZQJפY ?4o}kEo#5nA o}&Ύ)V2,z5)%nU+ak8VKGLwa0`*ݽq 2`K \oHJ::˴8B"aԻȎ[J!vv q+t<5 0{%ӯ_J"ٟ24D{娔J;} Ԗ~,5]*P@!mKeHgDtJ@^/T[[YbAJ3` rA Y5{tdq6M4T ~@bbN8-C+Wۗ۬@<(8ȕEQ] xh-wj8rN^րݥ0~o>˱+("65GsoAcBT!תaGw6z?SrᒊP|('pYe0Z&f#&HQUCu> 'K *JU=\̏ZQ_ 6ȟ1>.VJ2U#wLΕ{``sy8St8S8$N]uz;+7c8ﯱq+lu;Ctt\ϿΩU8꛲|W{^Gk09FI%4mCKZZk<Q{ = P8kptΔzWxo'Yhe%\mΒ{ SvV;2C lm#^^O/̸1VQ~*~q,"Q{aR B;3tn G 2kk! ۥQ?\0ưl?#_#|FD*B|z#$<0EbbZĮwc[eb'C;1͇3ӈQq\GIKvT1A(AuG츂jڥY5]ky-z'eUCe^Lh\?VO6aO80\ J3q + 컼jvmߝxl=:3"=lTW6MkxMi KԒzQ313[k<ҥWb8q->%tϒQm+l737W<߲u 7Dz>iETS/)MЩ>EOUHN/-%t7Bfi3܌h̙WG:6rume<2%OM!3 f,U}c17f[BX]1a-HHRVsBy4-m~Kg֌ Nv/ƼYJd#!rx{yPEsҥTioy  =.*WiwIYG1'fv6`0 zATpucZ%7`L̷Z7o?˱)+)!KS%ݗ{cj{dwdRhlQR] HU}gIG)9ػ#tf"*^^ Q%_/7L&fXo g: ^^Uۄm/?1DfBn&mCכxpJJfs8l9tTJ`Ẍ>aa 1xw*`Wڣ7C)g*[ Ԉ"y5YtSXwƪG8ZB(-Jh/CUқh( >!F#L#2a u?ǀ2Fͥ}O{ $kCu|حyQD0CS~DfG!j~X|utvvQ7-ŋq NYD샜߆u <6T^25, 2%^F$(aM` k|k@`8 R"t@{h+ =%>BdŮeHEؖd$ BG*EyW@pfkum#QgJ%1 31tz=}u?r5ɃVl3[WYB5ܢU~{/!gYNqUu !Jcҡ:{SL21e6C_.o|\l6Ȗx#ih$bllFVnZY=Hx M0DLïp8qE> ,Y"55}B6zDMaRxS] ;fQ6K ppicj-_[T[Қ%6X!NwƃZ_O"7P9 *[õml!-!ͮptR8|oiJ{5w;BoA?!v!ul3ҏE^Qnll]zg㪪ݢ+\+qtȪUh!>ԩIx'KnzYSlC硄*$"⺦A׸F£s6*N4 κWQH&H 7qV."?Y*#Ol̨upӸ(Y@JތBZXn0 +C׮t&u~WU8kjw(ojx|$T]u;3r3`{cK%j:{Im}#WtrmY+#T+J(vOHa{$٥'j.&0u4ά^;<0  ]U?fV'Z6k{J&״ Q|Z|A^CU=1sdM7V&Dc2\Ǻrv=rP%$ w>XN 2BKFzRzc6w/3אvIM0*eK xҧn$x'82m4౺_)6_{Q8F53x kZ!DcV~&9!`}K\p%i{Fɝ_Atda F\d&~(EϣWB$2 +zkdrתM6l}+RcZS }fc_Md@]`ˑ_Eqiq'Z")3W}}x&K|!L" RJG9\6_BxO"ytaa޸,,JX$z &v>[)K5I! egGG|7?&()wCmF9 CUӜFNh<;f _K:Evm5lN 3MzeBN|7FlT /r[lՈ !eA ?.kKk; /.ʗWe6[Ϧ w!7+Vs$\s`V^ d?brTSIcSٛolo+~%tY[wP$EEaG5X@*v ^ }88?я#jp{&g.Eo!^µEܽ$9uto¬nрyKEX\͋\ޞJІbs)RrOpkCX4hata2ېpwKCgzã6b8>F/Ujh$Ȓ0c;yB $08nD% u"~%8NdtC}¤"W醲gfqFX8Gb4;v?RHJNy_O90Ka.'T >jXCƫ$3xr6Xྎ)R6"(,#H)޿-cV7I Gɑ󇁇aagյ]*DkO8&m.p'{۪ M!z G ڽX𮹫Qʈȼy0zSؿK%j 1(S1H u+Vy;Y& 5*ݦRA|hۆ06+@=*8` O R6._Ubdcn"d$U 1sPTjכLhNZy,XawV/Da7vLZ.rtT" u+wD#4/Rb$.;JR [~ zF2dczR2zMO'Bv4i k2QQ('.{Ȩ=EC{kB{kx%.K>@/dFcys;O~zj7B4;d\lfm5 $eٙ)[(5QGiYֽ]?z,|0ĮH1|&3/mJG'Z&p eKTm" ]ĦCYiӏ4AnxUcNþ Ŗg|4}<S)ss8yxi7qܗ έ4Lu$2[7oJ;NzhquՋH.s«5wq@?M ^wFyR}_ :mry"8C-by7+Q%:ʭCk${<'r4(M΂`2{^PmJPZ`^6Ygi?ҔB"6dn}ì^u/1Xz#R~6oxL=MLmJfS,,*5rb-Ţ*#NЩ{,>` _sZ̟"DžzMI޽)d8"l)l9ջګ\O{XilntZy-(jYH @qS]'x?aTbα':N"o mƕa# ^ȱ,k֫[%_A-}doew4b~vgß!|2`4Q\hY7m`fM*[ў!aϥEjzo]$}7?ڪ-FYۆ*~C\k5NY j}̇Vnaɔ_$QW r=RԺȡ!o:Q#H $e:2  b ""F! 3ˀSnj>Rs JP~Y;!2#|,4))&Z#vHB]ZaE#Tc/e!LwƼť~C Δu2 @DY`8u,4{B[(rlkedPiznMw(]InAr|k12<2 8-cVsU˷_. z}[Uxo'V;Gĕ@x8lz(3BŰm}+cB13 d/hT3Kj6٫*9[Й\asf촥+Yۈƴخt#=#-$ +:]#[BM3ywN6gWi\˜hO% !q8t9},P=֮-Jx$U  IkIRdSZ5.30_Qfj[G Q NH%F H}ȅ}5Fhp?Z)a!W.꙼I0ZW =TBF=Ґ r fc' >#-xZ't+ѥO|k𐡴V5t vaZF:uoƎ 564٘ק<7'R4V(Gau#?uܝ 9%q:pc?nʢL-qq=Z >1sS zQMhs5!AɭQɴ8:pagwtGԢm2AB+~‰GlY[ixjd9TτW Ҧ1w.+2#θy)X2{|Na`9ͦ~2NfbLϥߪa5_ql ;i)̍aBxvXl|9( %}&ri|+k$PZrh0-g*K PݪO"E 3bn~c]'ΆiP]k ^flQ![*a>~˯HT-뎓i=ƵDŽ<_nLjJicd)EtwG Z2z%Aݘ!@Raqgu-:d/:Bio. AF~䓯zŎNr$~p[-9ԜLպmcR>oי;?B^N;ؕ/Iz.ʚtMZ mjFĨd}0ψ>aw7L Cq|~ {;|^j  S;A<ãs,a\I)zux9ٙ{=FKHC)Ǻ^/+L+Ye&ņE5A~mJ$Q7}t݃zZB>eW$t l ĞH- +oэڄӜAGy M @WG| GϞvF:л/ D6AJ:ؓ;]5ΫJw505uY[3j5rv{t2l/hKigj9˂K8< C&?Sѷx3-=i~0sztL2L/ _hmC4 uwԺ"* ʶs'LmEFU&sU."hH+R()30M$*rۀJ r|˙{oզ;as51_; }R*udn)sWP`GVR+/P|%ê֋-Ng.+_ur5_B=˨v5j~kA[-vBSGa}*(6:c#p^Dś gjk 2+JWbFO"`yy.|{wl^ NJB "Y4\g g-9'~K̄x^fa{(S0HFxlCdϕ.ӣdC'yb/q} ˮ piMܩ;`6'0 d!o#br»IqBl=i)/vڴ9)f a>ўZvɅ@7wXtzu(d)$*SaT3gȆxQݷCoÙY&AK%T o`#!.oi#RT` 11qUHSKAh9t{[76/s(>4f">r]OiשI;Z۱#FFx6"·Tf_̕!3D WH]Y20Ms |áEά<`uWfI۔+*ћH1 D|]lq`9 #!7H8zi8q`]8 Κ70[,id55JY:+AGn Flbdf,E]aHK㚲 # $(՚Om^ m*97-m\`韾sWgD7w+҅- }^#jݩ,f,|IL{@Zhڈ$2AaI(EI^@^.@czzt*d3~k?Fy7r@>P^<,+qWLk! rAs0|O$7/P2kg'Bfn)'nM>v5Ԩ,WԊd\ߒ[jA(BPm4ěBCHbKĎXW2?ppN7{kJ}Pl } :\:~k~?#B8Y2 6'@YXs/j:x~;w+AlAQ7 cEcmvW׀͡gn~4Qq3 hd ܧń*qVg)~U;Pi \CaLådk 9 eIVQEBi`I$xʒ=4+·p@>?56e^^a>w΢ ܗ$e.B3DHcw;UlĢ9GӘEo#9Giljt D.V|U* '#ME[-P?_S4tGTD¯ㆄP@htq;@@y۽R9Yf7$^ q~iӗy*!#%kRi/}z\Ү8EjK'0:mП9-0էz\)ISU_B3jP^$ B]jJ5 ޗj弧煰v͇*'^2S9M&ƧIi2vױY`LRm L3*1ֵvout8ʒ}煥&3Wxա*[õNe ]㰖^syٜqxJV&("1`-LLד[FG+q]]5}j&w)PS|Y}52^$Cy•G5E  7[%8G: BYs cL%P ?A^< ~W-jsܰRvm(\KNI%\)^I1X0kaSΰDg9qh\ 92€*}cW>MRRpƥ+Q<_U$:rvn.c-$=o/n qhJpU+`p2?!bʢFAЮ{ +( Xi8)(+A!! %%`&P ƚa ct_9 Ӷf)3CI (D$6 %7ί3EM?]GŞg)V>lF8/KrB%]vj7"f ^NDbppkdt]CB-3vq?6p5ۑ4BxeApe1'S*ρ "* uyiLL2 ^!qȓ$גNws4hŠpڣ 20,D7:[ج7~EQ_SR(V9vq!s!T~'^dZ.eTNVLd> stream xڍwT6R%K7,t7,.] -HHKKJ H+-)!/9{f~3>g5uel`V`Eȩ@ȏ̬ A8c1T?rn`&B`PO','"@07q<bP`8 bg?G5;OLLw8@Aj =Dk@f #Mp9y`nvR\O <6_-A?[bC8t`OpopXw p:@GYAVs8>+;dm svA!P;- PTAx! /" y N {AE-?[A\p8W܏Yj#svCp_Csr0O_Ն VsofF@(Pvyeo`A`#,>> AXd7mdv0+U6PUUQ忝0//0_FUbT{?*Sl;߹aѹ)Ph}Ve_u);9A g{#@ v \5 2@$hBޯMs@08׻~{QvG*@a6֌_Hrsyc/$Goxy0}=- ם xe~~#1HxA^ WtSo+^^? xڴvwsR_ [cN%BjB_TPyr/E%F !Xs}U~UҦ|0Us4||ʏcb˴33h1E)л*{ȝ7LkIZ%vͶդIvвX8_DS4F'O GXb#=p2C+hw Jta|ZʐُrX6 >*Dȉ2]k=c7  v c sۇ}gEi45p7EK&N(;X~]iZ.|^R&g^* <Ᏺ"b$.t1xl …3n`vTNc]ưC`άy jw[Sa2i?]g8j;-?I[nx#Xl6;^KkcBU;.^5mcJIݦ[B qAGzl@A̢KL*hq]0ǧ,[F4}>ҧ]'yTݤР[.Z2B]E΄rl)3rT wN_JaH$US:(VtZkOPHRő!lH?$?WD 8:r<~Y!jghxLN>A]c B9;|>̪ [M_gj~IH`w(+X!Yy"5tqVK~'3!U]g9[ΕJ贌_W/),Z2F碓!~RdM j}9>ᆊ3C-*[DFhw\:%(b'` t ]p(CxDE54^KsE7EzD z4ZR$l^mi)Km(h_}t[,[BrTض&#pJd+ґҷ2S8)0a\A X]_fLcʼЍܝo2&"w6DY%?KQE F8!o^Cr[f}p]:!.rm~T'z'WAc2o4q g;Xk!R}˲#'Ɇ-Uü転9˹GбRԍ3Iy~ $Elw`G$ sv|niPҞ=>_ e,ozLi<.̞GdB>Zg&6A':L#5Pݻ rG!^& _8[IR =?.G4?sIc'7Nh> |l̡dcJ^a,8[ܺ/2[L5 gp;E9W/ؓ,7?/k:($gn/0TY?QܭۙX2ki3J^TVeŜSm}k8n5*uCLX{HtT fNLJiXw*WT!|U{zL=`s+k7`?2eCG~(U.g.v _ԇ㲈s d_X Z5YIȷ Q#NvxJX MaNU2d# B-Zw,@њ3jwk˦j4_ҪӜSDB3>NbtBW:XWh/q 6B>+DWfVR̾e c!jk^hq?f-<ȹg1>gZ3HBZsߛ nKy; ,D8J.]~$RK)ҋ8#Z\ʡVv=>w*rJf߷ /MuzS|tL vuc>-v R0tT$^%mkhXЃ.`/¢[uR1O,[?^~SܩH1Un;9nMW2}GÛmiǘVؔ%Hid2U2q ,T$yH6٧IJXp4}P]E4-qZ(m?/@-b/E{=9r+{`8SĀrWmXtqiNYjVi~j 7M3]· б3}79W6b0B!V*`tt)BtG!0YJbvMbԝP>Z.rj(hQ:ݾ$ G(@krjmAQu,.RcA%k8t(f&0o^*SֳYBL"3Ǯ@\8—ܠ(g0#Dml6 %+?i&=#̿jWjGw)m@B?vO.Z5/YzVu}#5NX޷Z/!GdL2K,mI𶾈C\h~v$!@`cxE~ Fy*;q $)c"X)Qhm> h)#Dg`'qbWEVL,eW1A[: cu5f/3eb[ @Gcœ. ,w6]#o?8+ sTr?@jEc> i<9ʻ}ڙ7x&ȌLK DoxZPh6޸֋E(E3%c( `ٓ9$̆t51/ Bt߹a@2W u2;4^P ;vIx\DhO6Y|m<2s*}D}mg:^4"ڥ,KsQKsaAd ~'yRI~DW[Jn*Y=$&n]}b%sPWp|d/֣ݹ-E_k\9"~ry'yEkNF,up<Lu{{$T fI^/I>k,HNέD1ߝl֪3ie~z>yuyiTU[ _J1]p |/&vwV;I%VUgXF '@6#xkckzЋ t9VoFUyZ}#.1F,jEhVGXĢra=h*n}pgHGbek@fo #5rFzҕ Iӡ1Jgpmbi>U_m|&鯋bM?l.^o]U :>n&PnxV$&]}И~Y_50舜Yy+)QnT} 7qc;yĔޥezUƈGY3k.IdORaњa&׵fPZ&31o)3}sd-Xg;T(P=+)rB}FoOU`aJA(7R[Sv7m?l4IvN^>215V+ 'Y#0Md4lctU3'kMoZ)d}fn\Rr~[O3JCp\㤦ȿe븁hE. ^:?O6/&'d}N;HZcv<ԛo]PdD;oHi[ oO,N Ӭ|5ȸ$ ÜJ8FpP\OFYlZwվKp]3S+7q/3g7srT7*NEfu4Y3/?4 Ǥv:C-ҞۛfuyN?#*굠9lչ56ټ4Tf{U@`+ѱI #-@uaBFxnHO5qTM/]p-!3l#1j9bצiN&9KElaf)]tpЩ}FDEk?t $]Gd[QO>V?.d݁3. wE>5xNRmڼi7ϝ9ahA0 $%N Wjי蘲-|w%1jHsÓMn5bSx4&/ȫm^9D)Iے6{/LM>\FAg1 oG8Kv@wD)|YhE 'Ii?bGƒixA| :cŲ^oeyS+ظnM2!Gx>\n(J#wQ'a7| ޅyR?Ò/_{. ֽ$H(<;Z~4 uM,APv ]30K 5)_TjtM&`qgZeT>]}ӀY(yN0aД֭ĭ.{K1dcJl%hRR7|ݝmGtm+v5s4OWTe<1LÊy~/Sf);SƵCPI~ڧ/(j&iĈσq -#T>EkJ]", Ɍ<3sGoDe|{)"8|+/à/`n )Y4( ~h6a"16=EH/ط@1yxQeE $̹Y&@{i&9N*rp x4CCK0⭹6 2JG.ʉ2F] n$flV~ePYp<3j/> o կ;ͻ]:dQx i(ƕ%& 4c`q9; 7;bZ+쒵NIzpo/$K,Xݺ`Xg)QL릑.ҿyjE?vL.[ G;(&s!7.ԁ[9\{1%ѱD-CeoD^ch!'cwAUB1z=`9##\k> 3o欛l⹦*rHA\3IJN*]&P["rq\qPbbyC endstream endobj 486 0 obj << /Length1 1619 /Length2 7754 /Length3 0 /Length 8835 /Filter /FlateDecode >> stream xڍxTSk.I5t= {E@z** MHWs޵]Y+3;33{VJuX@ (Ba E D/$Bc* aaQ4&"* #@WCD/ ߗn0@XJJ;@]  P_!ﻠPBB w Y E HdWiDc( ho# @S!!j@XP+#=@p(Aj:(??wE?Єߩj¿C(  UЯ068 I+?_G^9ANp2C=!*q?3JIH  E0@ ]$A"A>P0 q‰!Nh >{eV#ML*JJ?@@@JHJ+Մ;!RE}_w,=Z?B/ovW;#5o췝ܡ0hzS@f? qzUBO"ha1ATA (M~  _w_6w$ZM {_U8kD% //?+q@0z*!~ #Ph`‹=^B_G mFKNvC@H`/?4CX(z_OR!(=PJEDCOoFѠ;N ': B[6}@ `yX&iTE"վ48qG.:3J t 51A~/—s4JPCJߏ_8C ΓLdV8V\fWђ[O>_!,v3rFTbq.V+*jš<嶗U5V"4\7UJҫ\ѣ2FJz-z"$rMv}{ 2lpOwr--y;v߅H:3]rٕ81Ea%84?ugU:XۓC"Em?O]' d|z$acw2{u?@Ai=~_Μ%~wl D=f`Nz[ S^U T;DOjqlQI1AO[(Y1;c-<=B hŰYrRJ'%^?; 0ub5yw\4C![>K*=.-X}7j[b&Pr~D$Ԏ:ĺ)2t\%?n53;yϧ>hqsH0.=UkOV^7tx vj?N,lu.#aݦwqY멤MƵ-%ޠ)CgBrz6 h-Bd.N~OSkŞؙ@Clew!9vEڽKя%^+"Cvl<U"t,Vc:),R^\ۉtjAhd Spz H.~0fUwb\rfX~XP`?aV+vV0 #QTV|&4s+ci >.DZ7؆u  ҮIaռtݩōjL&o(ULD7ժa}pgPf k2-MnHǨ"M-|fdd5ˎ^fޞ]@;mcPSdBDO:`_/R'J.;u8Kv5"c2o_6JzJ҇ad:YB^hvf=aeld>OT+I=Pr i4a:q ǔN_cl)T\>( _Sߙ|x)ĥ|쿼d7d ^f3Aғ+3vܕ,M¼ #L m>/$'{V?:&g=;86l(S7:]QQ/ly X7_HVZViŸ=`+IξxO(~/$K!x!?y-zF@hp`Bl_()u 4:i.D&a1ݪ^9Mf~PMɶ?1ޑB.S?g [l=VCsi]^/d*Z,s7|܈)Rh42=dTF߭2]l ԕ8" K9o$+ ?wtI|gY݅ G~FvW"BCo)I iǣ-^ޛ|~ ?nDP-b'hTxr^̓wY?{MOEI!&k{|mSkF橳ԃr2GfsjJHnzfmo+|qk0b~nVdxu=#i ,=1kf7uCTCʠ>,BK_fS>]}'pDZƾҀ,(~bS&J_Rl&\H<)/h{tJzu=L2Bۉь*`٫nOR-Vl<\PO7s@ }1`Fg2*+^yXL*Puϣ=cőzW Y]/`}ץV~ 2hxGHMjSeX: aIT([A;i&nTv|ֽᡠ 9ǟm#sW=^;+ѧ,<. 4S^z NʋB0J% {Mi&"\M(\K \97?F@`,!{ &mޝps\ǯ&ofQ }ЙX!=8bfTSĻ"GQ0h-Cܝ9 ^`; _*ezyԺ:bMOͩ t֒}Jz䳺,HwvYT]jrwi3z* h<\5(% *sTAUMV8$W3' 73['yecxBlIKa\CWǘ' %wt±v#K 29%Q(23omg2J`P~>yQ8NԉyPSmKZ~D;MVEqZ75 _HPm >x1s ]BӃGjc@|n"fRrN95򩋗'ݥ1AlUOJFFgu\JR,nS, %ݨWn2rkdXcM ~{մ)7bpT겔p_vy `fy;{B|Lz㣯V:B_|`#wn*^,?5f9F :-&{3~'X覎ܛS _O mAGF^`Jr2oCw*c޲?1dV9);N%Wֹ\I)&&]l}x kRpv4LzjȖY؁o~ѺSe~mf}|N 6NV;!Ij߿0ے)4i!& iܹcDpӪ02c"\mN^[i{=ɢOjҟ!BnT=Jj{%pWy*}uOq!ۻZXYLWs;;^n x D`c_r0l y\,/>ei&Sd_\lBVYq1P5wU}r3|prvu FCA!H`GUu~NϿ1եEPP kGL?K0,Lwʍ ǽ{Foh(Rt:]W?[y ΪZ0IuGvWv]~ū~EqZBPURUOFyEZ#Z] ar"}@K8pӫSVFX:n ^u~ѶCh$s.i{_1eN*v?4.bҏoshh[YҖw$VK G:r,˫E%d:v;Dluy)] }bx-1TtQ_1™)Q| ޘd/ ٺLziY m[^5A/x>j}sqݜu7uI^VM B_-ؼo]jT}eXgK̩H!LH1цwl?H 3ϑ{@Hʺ]Cn4-}ʠNO]4Fioq{GSr1 n8=do}土^>S!90Tx e/AX䆛 OKUd-\g0:Aۄ9C=|ŦqV}nyWș6A!BfZwO3$ZQB{3Kz}"ȱN륣yWC\wT>W۰v~&n:=ֻܵ!Q6aY/;Ȥ/(2`1#k#"}8atUkc׷I;s{"<cZq=6N7PV&+g'νEa3=9kB.SÝ!zs 3M6KlYJ= &ZS9W Gj2txιQ.P-=zؑ ~Z@-AUzXylgLpR6k՛xRrɰE3#T(q+8uY< 6\I$|&jT}'p;Fwy '~ am ‰ gttƴ"[| + d  M,Dɽ`lqLnVLu(`YY⒯VN;8s,ҏ0Ydzۑ8s܉*o|tv/۲7GS8i\G,m2g;i%arf'򶈀kc'9 ~,.᬴Hs!w榟Jط<~ȦGD~ u'c\9S")U垴pw6̑nm _65qqAB=[yW~q7R*C!e'=M() ?S9 ./7w&r4t endstream endobj 488 0 obj << /Length1 1503 /Length2 6827 /Length3 0 /Length 7848 /Filter /FlateDecode >> stream xڍ8o6nӔԨĞ)AI#!MU[m5RU{hZ{x8$"d*cc5o}K{{^5S"t]\X1kpC"o^37VƁVmb q;/5BJ[y/vY݊uzW4տ5Vqj4O 6)|Fڧ>@T:HQ7u$8"rB"zк@*6U>5{XX׉E]QBhV M]A;eD k=Uu7E["}DCȢ0,,uEx4/;ȟf#w $) 2]xm<^H vaZ|]ӫZlgheͣ f V@VM`$/7!SZEMZcKTOQsdFp}m5FzÉHDAn_Y[~u x, z-HA˴GعZ;$9&%U y8A>FL檥f C `&/wL*Afˀ8-Y-Yj=/ ID_cizq8ԓ:D@9Mފ?{JtF(Lp-D:ܒ=#;W3Mv9ChJAK)zܾ7i-1}/H,fњgS)!]C^FL0o],5:/ɘOLtxiK.0{W2 GPsh,h]8fg1<7F-KT.F39~>ZXO3:YQe'.HR< פ9/4NAӣU?puMΔ`PhthyC,۱j)?x)=(γؾQ6¥S֤E'?i~-B{4 gx^y-4.2yèyXï)C$ism\E׷*TY\'/KHjTVJc f&-u7 $_\aoBug{ -)O2o'™x ;YyM={6Kl` ƺ؎QHöAo%֒(5Yy؋4cK*WZ``x;j&!a|,,1r!uh0Kj "s㟮 7tsxg${O0N&d@7?c:vjuC=~Ȭ|%) Sݰ_cs U982`їݜ,"ب=n*}aChƞEfRֶfJ4:7o(+oG}K%[|ՕBd<ɫhNZ^g6̅c;y-`goYr6FTDh# u=,)~i]˳m"V~AJ00~ovdG<Up߈Nj~H ?P~x]V g?M*(m@ gy,sƣaVtus 푽;&}|˄oDI3DDziÜl.[Gjk Xu:Xs1dҧ` ;Zҳgeg&'lKII ѵx32 QCC/`Ś'm1IUKLBHSʊe q#K55fe >^c6g`^Zjm,j=4YξbSdBUa`nM<gCZI`d0ɓzB7D3e0"c*' UzN~8p|boW㊴RSi"U4mZ`-Ud03#v(t$ErG4m6ϴ1<4HF]3%kϝ&RE< %\a0(W/K@`P)䎷-ȗrdtL"||ȷ$)~s yI[yo)AlisHiU Hj#0'- GtYstC&) )r|zt#_1}f9|=]iqzKrz] _1P${?0]9tw߀6]y#k2qc,_:;KL\7A(辎I9mZç&#UvwWTZZ_ Y ˷vHyz/8AЍMǡJSGdFKc 8"ڐ$ڔ L _$.O%rcUiL&!*lPަ} +W[& ICZs &79xt:ˇ,\dx,oh7C4Db G>72oQSB0g_G6 o.q텲%T 셮,険v3 W|* sɗu}!.' * ޶ʭN KM E9r CiUH>W=ht(O[BYd'{s*8})iiWXF.5fБ31709';7)g_K(˕JCy/&S 6mTZݕ +Ŗ ߙUN%*wH5L ;JP޺Uy2w3?i,7@X lꔧVZ w o0+/B1c}-, NV?eWv&&Eo,c[4|~r;ZQ11+vUwgriI!{/ƚf8aW}RCէn'jei Ι*?08O҆UYej jFP t&h;n!t<6[wGuN }fxi4p)}){(DX+ yL^ӝ^3nԯSM%H@Zd E{}"Ҕ>$Gv1NS] bJ)f{x}B"F="(QSEY'¤ G/D:lE*\k)Qڹ=gO'Uc2MwRU8(}g}t뫷陋S]R!_AF? p}N;8IclV#ArS+Lз\-Ăǻ+`_"OqwhI#z*H/}GNE10.pPx\({e [~dPL>E.5s&oa=N׆M1^K O <柆]&M;_F*X={-|&/[fJ깨6{E;BBcebCUYb_۰ i$/ZJ^{&`u͞vs<XyocXlx[7dgzwiZtiZ7,a T_R[ga)~EBAF@!`,,~YmX 7MaPeo0f:R cɘ uk,9fv"EV7>؍l&)N 6FM:n?TN]iݔfKn!y?4o'Ln^O!.4YXt8ᒺjМ~)QԦA[@'pр^f|ӯҩo{i4*29}5 1LlV}vvEܑ? )۪I=0dq~Daoo abJ9[$g327bԈjПt2y~?3L66~Ձh 1苈<{`져DXR2Ї-#MГ0f5!;s.w% #Ki!Cw.DV] Ƹa1ǏvOBy>0!+n9 I!'RXVZއEs^jmn 4$w'fy[M9B;*ܓň!L&v -@Bq(O:qʠ?u5G9JBml 6n ,, V\{,@AҷW|XyzV9 'oKZ{q_;&%ɵ&Q^Щ:m(z##BxԼŨDeCZ]:t}=2`N =fYky.0[[tّr,,nGxpTU$ZӪN 9eƜLсx.1tW"4Sլw@T_p7](wKmkTPA? endstream endobj 490 0 obj << /Length1 2219 /Length2 18598 /Length3 0 /Length 19919 /Filter /FlateDecode >> stream xڌP]k #6NpMpwwwظݝ3gfr{kW֧~9!PƉ $,`ddgdd%'W6wGK tp4C&la(ckt0p2}dd032rց lbn HaɅlM͜>@e_k @ h dkdtrTfNNv ֎iNfE#h d5ߥÒV(ٚ88+s#㇋1$! m,-037ܿ dn/g##[k;wsS '*MD 01_  ]#_52"6B@'Gؿ ;>õu2116 cg;s{gm>Dd@'###;3;h1@/%_=l&eM.@3ELLcs#'!O1oqn-Əc0DŽX13J *mt,l:f6F3+NjƑ707Jؘ8ѧPv P{A>7T]yo:տT ͭm1N[ c 6T ͝VclL?&oX[׾Yma>cɌ,?nǏ CWecf0pp0p8dJcۿ@oc`b~a0%}0A_ B;A0}e? 1  `>HA\.2?胋?胋E}pQ>q|d7>Aٍ>tFV +_k?3?G?I?Ci5~$3fvf@X|Q?}ڬA?BEݟv+)ӿtNGW> 9~<y&|A Nfz]?zw;gC>uU6n@#إy[# ڠjc_eqS4U>T]@Q<fgg jhm s?K$=7̶ݿ\F jw|`'uq $`|[9*5ȟqT+SbwZz7ZBѴI|`/\h3rF ͐r[CWRr eYwy( \"iP-}6tTcrLZ!H:Oy)#@sZ6_@h(+ $q8rbg|/b ̓ ' 58=O9L7j#zbaY5.$vJO)t%y?C[=q(K'5f2%`VQMf^wGBuރ°=^jNS2/R߃ TjFM#ʽ'ruh${Ս|T-s#K5#!Nwv r]Kshȸ7jO~m+6aN~ ]^O O !`o  |I,Q>SvY@"M[R!gWQlhNZ-1DےM% n!}Wi60O(4~-;d>?gsfEN)tZHw?ɃC!7# Yr PኽMexx{ _ ,ݪi$4dTls^I1bZn2?bۓCS,%O|FHȗd ?Ᏻ̉&ڼ6f+2`(~'HP Dgsܠ^7Η)0Qnu*I~Ltfx}T0'wWZـpHzd(&@RC~?J2ev+jiN2)^DD'i!PB_,y+2F)ibU fS6:nuX}dw{:K'Ut*k^RG%s)~/80rL i&-"(k@vwpȁ {e*2\MΧ6>%?dR;`a!Q']o<:*X>[耕GP?.̎f.7fLȃ hSﳺVWApOTODSdqфVxvQ:5r=YƄquIJʪVAB*Y g_ U 5xʯHP)&o!;6o鈲,Hc~CL逮]J b.T&>Ak|w$̓,t|d+E7齄 crderO$: 0]c('#U300ﵔ3 Ck Hz5'1:gbL*5F1hCQ~fC.;Ԯ0CHrk#Nnvp9e4zUnL|#axSVJͬdqCGCb1cp_z܋DH[p?𨒱%Uy@k-ЬK-HV]gA-{66y4qrb x-5ۮfR >~h:t#W% qv  ķ8K.gEa5%Ҝ/P D #" tBDc)R ?xY0y5VcN8Zdj!ǓT*A׺iV0~PJ\]Ke Q7zh {Q QT,KԘ(,hTJMO:~5Эq\zv|;JOءB!yQ=}J@F'dN}率ayc Ӆ*p+T2_Ō[#gv:* 9*:@3Jn^ Ɯ* yFc8q}"'mOgB]r "\k{4MUyذG[=nR|ev&W=5obIǥ]z>;h`HZ"\Ok̀p'ldԲV~wA()6 F4MZKl|M4M V 1\[ $pkl4a#p+~(|GAMj`}]ߨ=0Nxk񎠐)%f 配$QSmCFS~uSsܵ辅ƅߢg}SO:?̵Gv 2[tX 9~85r`bLQO C9! Fz:z B@Lr>'XCti[J8jhyI%a?#Ιq>Sў0iM^߃ۉkM(Mz\[24瞝( rhIA^?ok|#r#j8d gu] @сdc_( N7ֻ.cQH䘔\`3FÅ#WdB,U"UVDOJ ope<)%v<} aϮdcDx Z2)͍wdw_4bʳi1KsςLb_^Au]r9xOmF s\"Sr6ZvU-y\ 'A؇j{=/Kx)(<%02՞T۔U/Ti@f[^3<&^Hϛȑ"eG. x_/LPZh[r=r J~tq =)3/5Q(+sý=dWy obN{,x<. vaܳA>\-\ V@ru& {N}ȏNXXPE]lOzgrOm GWH f^ڨ #j|@)e/9jy/5? `NGSy넊O[ŝ^5تg< wer[-Í/}#[MnlH1oȚ"Oic|adP'Jǫw*r09b|S? 䭫Q~B^кvc9sɦ7dbJ0>Bǀ;;R|Y} C-<\Fm_A{]q1{EtWI`X#%L8yA_:WIj 6:4l:.hm\*$߈n7dqV!P/YC&֨ {x<53OUHV?(Z\Q:KhEŬ 2 :W7q_N &MTbP BTVTWH`';]7Z ȎIo4jiLI]jF)#GXi1SF r*3>+2fƞ$"LEE2[ !_@ď`V[m9ɒˇhapΐvB7fPlOO E0GAu"G0rJ\>FEFF8ڍ SF:P"i.\*KxgDcpv<(VFڌ/yiy"֩768vBeA }Gij^R\5PSJ^pgy1p2cwi\Uވ;,y +a?뢕~7/MY`P[PM`W7MղZ1t+LzIy暍ËjЦ{V b ΁Pj6 &USAeʇD d]|^F^URu3 )ð|88wIyөOND*Y a4h:HYӔY_kuzzA.{=/oW[Z73eAgM; bvLsBX<=őˤp;Ʒt%t}0q+rY~ m<a_ LJ9K{aU-0\|.AdO ɹh8?IycAri֌3~#zFe7bNa̾4WؗT.rD>WD#6D.X8 AՉDw$F `^$Y8c/k9i(jDX̝ہ\U9#L#[An~! wuMNi.e8/rUID#Ʃ-Q]غA1KǴV]"\FL/ɦ -ZD&Մ߸_'p6X VuzOudٺq#TcL H S!" Y$|GCs]|$:579t&̸+ڧ >^5?aNUi%9:` *npI;:A$zˑ;S& _C;7u8&vÜaE H9!{Pb@E>#AׯEn\]wP E帯̷].APjB"KA'SsŴuYtQ|vԳ"D_؃nC q\Aͯ )8euQk\Sma񽳱Bn/?tBDNUH9gOз?;ra,|VvPU*'+8^m}n+TʋYq㪺IEa^*Njy_*[lgK)'vob:K$fE\m-rл2}E3T7eR.#n#E$[qL*W($apdЌM%Z-87_M'\f&Vs=+_W;8mlC/M!ON_B{@%0JhV}E~XvkeF,bȐ _]5k?2Uv`_v{E͂4cq s}zCXk:N{V2p IDk%lg:slڋA@B[69"շ+Rz:̑EV3ʇœGrtrA *VZ Y+ >OG c"N>ۅ.|9EwlȅuFȄ,䝟ci%.oBwbD(ZBazQX!k}z@I* `yk=(!Vr֠5^ѱ*@фn3k J~ <(G"1Ijs6@r_5׏m~A5Z^\- 7Z7ez /-4FOj]+ܞIRF@F19S 8ڊ3`N mH0K>DDb>^t 5M]^ӌ\UIAj q>?* xVt}F`% G.>=k/ siLIIcb#FuӪ`*kfK2_WX{o6)Z%W#6sS_cb|Drcjps 9naMt=r06X8 J UOTMEm+F.mgU#<~W+3& S B7٧,\M ߵ`D*6!'Q;~~e0r3}I0r H06<,gԔR 2y׏z%5&m2z}?=P(Ua?wM:R}9%_9x巧I۞l+ggc] ^!sPI׍12_&Z@I]'Z퀍l:OsdJ4^$mqO,;v&c`ܮ9vS @d $)PAR˜] 轚.1فhY n~6`|c3#p?}S/Y~!41'ZݙKIH2Ӭ~q?/"gR]:5(ޟ$ZpmT:Z0 ڐj>G3= }:o$J))FAsp "]ԨBZen|^ k6hfIf4zځɥ0oҵ3$ȼOa Ⱦڥ.%huNr Sey \Lc;ol !IJyQބGf$ NّQU/J+,-4Լs[fM?^y#c֩ 7:a7b@Pk79K<t:IO'4 h+䶗7 d9 <(+$bڰz҂TcA*|4eu /'+52{nX(ͻx)[KuiV uixG(HZE3)17<1əL& xe D Xڏ0bnn$¾۸4~ô';h'rvo$VjhKfJtT΄?ySHB.l UɅݠXcͻ<" <6Qz0:ۘk Qܺ |;DosM;S*V.|kY/p [8cOw+ɧ%zdp\}[cGO +ȆnfU> ț=zZS Xӿ;+GRȧ<3pNKWi ߹P?-TlUs+ܯ19tE hȚY3Mɕn&3<,2u ~K%ӇTj:}zk,Zo yLQ";GOYjeXƛ9c9Hj4{Fo<4p[hn?u-yUƨʔ o[>KT9#1d ~-:";&HA?sȚȤxP_B`ą\E %h5<i ",FK@D ࣩAǍfoWpRRy'd2J1TYb4\ !t2NOT2VʧĶuQ*ĕ `|Ri(O+h|BIteffoH5/z `@|m_ڰBVJ=Z44UmDb'd1I[ts`GD2={_] 5=r8q~-whV;ͷ=={gϐuneA">н>CS%_{cğh#* %_G'lvBU۪:#fP 2I@⠉?YGC.o:\m7輀}e>vAe]{sQ+Gеu<3JtF[Ffg`$ѷ@0⧃k&ݙlUU pOt#=b@-3l椪Ne#2<\YDŽjEpĺ0f%$ *7-: Ae6rMC_%/ϧfmJ@2l\ݺivU5!X;O,4x7=4[?-R˲S5ֵ_BlA7~D ~}-ĭk++ -hLȥm2؟&^h%R7> \ uc ZA|YjK%*ȻF2‘O}S^pd=$ 6hġJTé,DEwS]-=0YL2T$3"Mԁ6R?ԄE+U2:`19}ljo1#L$r呟(aN\z DvX><9Ӛd2 qZAp&&?;V)u*,MWoS#oH)s7I.ՆO BeiLkpRI[(,~-3Wd;z5v N؛|"tFBBI/!Cڏ!/bݧ]x'- #8 j#VyQjW,6Z|[(][ys[ҲfO6%]ĤRӉR!85(s-_|OyG˘N Jt}<{u,iz\PF e[}r㲕6@Z.rD 0ox[[{30$Dy :>B]KkV0`,**Ճb(Ez+a^x̿b7%Gni I˅k"Kp!ȃ=:t{ # 2Dwmk꼐&Ejl>3}o8 h[g7ڈˆ@Zw w)H\Bq0r?;/ "lx׍487k^3Wcy?hVbvӖ,̜ j:W2Sohk\IkwM1! ?NvoJa{q!{|~SyـpX 1^Xĕ0!o'\yX'k97;vuF" &J2 #dX&7`kDǙءj\W H|gd)*"B@c@VZB<ȫX\yj{2s1Wʲ1TQ=@fw߱!H f ^|'vב0|W2$J*Vcw%Xx˲m7ySuZs)WHYF?O*9P!=m x Sr(|7 ӿn: 9t½yiFtI)-67.E^R@,5kOlp8]b'SCuuBJ ~C:A8N}#8h ׽F\ ~yE[?V.7ܽx؟ǭ+>B 1\=GzY5iMj= ߆h2 ĺi,27\>D3"h!R<ϓ9y=^*~Ѥ7Ykz|0Hk+St"*S)|QHiF^Zy?xuưG._F<^>ڔN5s4wx#kBG K(+&|4+:r`8)|bXhr A|X=~N;<]ެ'n dv('vDT9!o CLvL pX&f`䪶6 -nJ߸Ncn՚˵< mp3pM^b1 B7`B{kUV Pd^lU1e^u>޹򿹢l#+.JKb)&@\jo|=Kb9bp0͢饥qĊ2;`WOδ [9ilRc +ZFA`V償,w[ ֌_ȝ7? c>BGdv6YCx!5 j._lOnVW8/3) A^V|`klB.<`/}ځuAfoaŘ! -6mn`^8}fci|͐c a8y`HN(;.7:J$K"jò snriص q ƽIGTde߮T~)j ?fR[t^KQ]h~^鬢DmKyg/EC%4_w-7V'&ڲW _9Kkggk*|Y0bhkK/8=06!\ 39I1ƶr$ӭgkCv{ERUq9Ǝl03i,. *sRu;͑jz_b{OP?MYN#D= q.~;^ՉX*.M]6rl[k/q'A/qcGOmn/qtZJ<|/W~=BAQ_j3IMSC-YHSFH?['%Je ֬ZIk&q[k= +J*c{Fz|=Vuf5"ϋdP]d4uKBJ KbIb٤"~g !QwPzM pE$M߆txBu[}]m$8t [8jw߱ÂmD9A-l{aS\XaW+ZiY27 s:‘ui rJ<X7{㶸)-0I|vJzi#WXI<@S].l"Juo[F4θ RK1@k/\At G|#S+a3冄"90n+.hڵW9"~ѩ7D(RyU3-հSZxZj=%bAaL#pDD`# ޖpGt;wȟ(hTL0,ڄGHb[\G 'F ~6AE9HIK[v-sq N?,)q3Lcrh }ә/ +!y*Gp(&Rd3`۵퉜lz/6A>I!Н yeew]6jh؇&&5[XQ|fF!?C>, 9f6' {mh2gRޅ9`tvg"$T$ef!hO)ѬaG9]Z P-"!B4[ \m;䓢u 槔+7]6#_4PG-v3l =8 [E@Z󉁁h&jKs)ZDMQZ,a|4uBxd7wi=G?mrAhoH4IK)G6c![090}-~0}*P/鉿zT,R(ߵQ3/x3Y뤯.NI/423pU?Ty@d|:>=ַKFX<Z1qGypb&7ݦk9C E3|V;3*Sqw"5755OڗT\eOK+434FIZbrxmxV`@}_v|t;u9#8vQ4L6'q/x}k9(2Hm'Y * 3;rΡ=*3 q{:t-LΐpxeY{-%fdrgufYNJyZN$Jkέ1';5Ϫ(θ8Ym@)-Sv3Kuy/xVN*)\5 +Ȭ@ y s_-8xkSmddCT~a~?G50t֞\m}jҀY~S^Zq3‡>s`UЩ1R 5 F^ȯu5-BLKE gfe%+y[)s/ܿfV`Bw@Bi?ɇ5ߦbYe&Vh+.`E_ B|2kh2B" Zm^o|2сB?Dw/z֜ ӧ0Ma`}7"b$pc&MJTN87|kGG0.<&Δm@е(kpMd};^尳\X]YzV1wxz徟2/@7d8BPGT.^/ZR|dɚ+QzeguiF#})~ Il -vJиt}Uׁ/؀U偯+-ݚge s9F>3$h%@U?gn3T#/batKRsۜӹOQio".P]?#6{L$Ył)`xqf?W㡍D <_٠kD>6#E#bj2(1;Tt)Tu<_k`D;Q.$_h酳4ÉAnיS FIgpt3ҕ <*efKRIgL 4Z! nScWl6cg1lBjďx, ٶ .#A!`ǣoKH&6 Ю?BXr?1+x?ɝԐqmYDzQa+x.zL>bN䬝Ga2>l*ںR\ء vkZ$_Лy:$Cւ”&L,Y;>;9nΙ䫠Yk6(`H D:In_h@e*3Ɣ4%Xq>/K5j@:Q2AlS%hĒuiYlΔѩ-4r$HiYRg>7V)QRpz⭿'C!PsWԱoPP`R;|Z)^ˍ1DGrΨ&ꗥ] 瓟/V/115(ҔOlbmN>v0;}6 1:'mB{%$7robhW9"p> stream xڍT\-{p x Hڸ 4 4Np !`  n-w}${Ͻc޳jVffᐶY`P7nN@VMy9@,&&]#_v,`W8Clhp{$ewG7/[@[P"\Erk'@ñdaޮ[;u xf dvB,5 7;V_)ٹ9pqyzzrZ89aO@ z[[8n kЁٸyZG  qZ]t@ g0/_vߛw'@[XY--h(ry,ֿpct ÿ[Bp~yfy, ucO zwo @6۰vw҃B\ 9&ln~ (# ^Vv\vqr6? s<؀_Xp 0O#,nn5 ` @ ?+ ` |7¬aPG1 Eeio +psy@Ѵ]? W=߹aG&@~w"wG?g?~ 'ߌG庻=NqK5j`kzAn }T47'/;[kBܬR_v5ap1 Y9<"GiqgוZ (~~/TZ ={\~KpYq? ȵpAc.?c*? 1?cf?P(kc]]o? ~ܵ?WšYW6]VJSzrl =>:_' :͋n،Z&SP`@ t0*=Zt r(O;ϦJkK^-^Sd.G;b_/Y8qcџ 6Kg4TIh1%S+\w vϕ#BV)ww8fJmwP|gZz,)4%|PG싶v~]99C 4/294O,m lvt=7E6M"K4^f7fӟF>߸uT IAjM*&ii4bZ[1 ~.LY F?FX,HD4k87j-vX*RH+'j>4tn[_W韫gWB܂q?b`6tr¼pV:zuOJ}àőL"~;ezKw"ASHbA$Ы5bGEļ4'xZTw " mPG(obR ?)UG(JZ:ЮLnw6`U L|Eї,54rl-n.s&yC礁a!r[cm!kj&@8C]2߹j>2r(0щy4: GyèE@;$EO;*uha4Ɂy~XMS h/wsC0kq7FJu|N%|Zyd?R' Aty wcP?lZgOHi=;/ *@p8nuOT=S4ܚzgssͫ 7e_Uϋ+#nqpA>EFr?w'aY qeԝC 2-$XiLT'W!$>CS+ Yz5?rVs@wL{;|4=6[‹VGf%)R/mojܚM^S:EUeߒr~\w(\_̾> !ib&9Ib@Sg쓕>ENP U22Wjn6Vo˚CdJ$1d>13@;fG;_%ʗCS`M { Q1Y AHVJPBR.;bseDg,R0R LJ>ܯ|6.]y2χjF#^-2PVl!N*T?t0mO%.1;9p.A?82 /WIƽޯѓjP繗%j ̛#!28LW[UpVA,BGlzezk`I'd6ebrG1O$RpaiDw⼄"KASc. 5zW&gho^ŮߤMrv2r#-(usV{ e?"T%Hgĵ/aІV=agEl#U`_|ʠiB$~wz"͟(A8F7dfNC\pPpxv'>o'yᦷ!s]'#X&Qvhl/vysgnڰ]ʿ /IXwm"hۊ)Uc%o)nf䣶_ejsOh4+/KHE^^p@-]3ljQ:JjQAtDsSRex߅.󱸵F֪] ool&E)@˃u 3Vp"p"G;kY]w_UA~CX!")/LzͰ*g>u?"s{ruJ`vqpLQ?Bs,+7՞j,{'5 ja^fau Hq3 4)(Uka{2 ua|xf-dX 0Ld{xDN˹X7n_%WKF u묧̄_cZY K 'U!fS|أ,J;YJ}HL$ΑۡxŒ9<Ȓk_D n o3lkj)_tN<[gY)'ė͓IH;e@r&-ޯ=p.0xKPRl#U*@R@q<7[bMxg.>#:By+ߏ+HЃTS_֨((GT UEOp?藶T/;8xƱtfSQ~Ƽe=_?Reoi#:3u[TLn\BtYm~;3y`k,MΛRVS/sre(n5mGI]V}zNsA,iBYeoO?Fegba(!a굳(; 55EIK [h7 6-$iat0 a>j~Ewb<-&5߉<}636C%*NM$XA99x ΢"a >;m>Ȭ𴊐'L`փ!g6bsVn-8fѽAcT#Į6k6(ӝo~ y]_VawUinR>H+ᶬY{+\lFVU ڭ ꉑ*v;ҡJW8PicG#su} <7/}ʿt?JY'3<ڽܟ)e?>w(WwCECr;~:`ܳD-m_ -qOc;dYS@W3%"2 *Quċ7?j{_/p樯Y?a9 @P#XbEQeh6o/G[-̭3oJ.:=F=svoOu~`|R}ɢfP߻MW9|B4Z^vbk/(PY7q6Q P'*"jOҙM9e.z2̞'|Y˃|t?=rt$B unzXRFXʓKd&=uh(Oỉ3Jx˙WԫǶ.o opl8UU(LFKPOȕ;,F NR6Q/&Èw> HgϷImnIpu;$@K|pv{LGGSYS?_ĒH]ТGuhMVPx~?ȧH1oqa@) 9U!Ril_ePZ^R |5ٽ7."R9KBC(' BS:6?"i4?;lMr~&qdlV4r%|NJF$0PyBG<Ź!U?hZڥE[;2NŪ8+|mu}ܞ )ny{u F\p!w\'[xk:x& =+Ӽ(;h1k|% Fi˂Nڄ:ܬsҧ^z!ZHOSS"q[m>J=k~y'W ^/%R۱eHQyw,N DiQPk࿪h'6V5ΜW;Z#tIoZE#^2W}gһV*F2?E4SU4>8{gFf=XD,q\5{c*6 Ə/?!MkaҁP&D@x:;3A&!m>P+c]L6iaσ_tn8 m-?՟/m^90mTV%eD.'*L k -ڿG4hI칥H1iQh(6g1{WҽQUkl Jʌ6J,RP; 4wwm?~$R3uQOl[%d) 5_úDw?jdl*Hj/ũ-MKZ=ѪBUėĩp15[UL>f[OCsk.THIBUhEwrXaDl R؆`"j?ZuCacߵ! OepݕǠcD\.I>Nֺ=\d^?ΈX&Xv y$%'fUM!'c{_f5x~+=ʙ&xgp1o҈?C55cB&OK9m+HIW@E3ځ{ p3bsATƩ}1U]LgsqbJy=djA DW3$e؈VӽË [a\O⸆d.O\/0;AssH1l?4&j )%#eKn=`a 5hi)>eth=_lO*Jc\g ~T,puڠ>5omƺ9YL*9~1 g<ĸC)T+\"gʝ^!f/Ÿs@VVTw*At2yXj(9+H=;(1 lC2گd\(_$]5U&0BFg(2<=;B)ϱ-ܿ9`d!msTOJvPϼGEd螠o:fa]oJ6VP?o!zorlAE+[Lj>tW.ݗ9c,3h5RRPs\$s&.rHɆZIY6ŋi9d&6h݀\(O^>d9odi5 xg_5,{9G9{V! _Yn*++ 5Y_P'U`u5nvjS0F0YFAn`[ SFP1r[yH8A>[X6TdZ8ddtte'ըiQWE;'S0k_"_H/VZL͈)0bY5-^ Vyg6|^kзml7jXձh Kn˛œ6uF;12kyKGs JR=S;_W5bp~ FZ7j cwƭ̨U@ܢ2GnoSxpZP)aR`YHHʓ1h0gH7*X#@w MgaҒZ8wV:d{fYf3S i YPʐS )? x.Vub .Pg)%YK6"S6U!fK<0ή<Ʉ1 kȺQ(m I%+ ޮYW;L^0t'scN8_OI6Ud~5C\v+v6qp)s*}NWOh&zҠ;S{hӍljzͽ+mHR󰝑*`P] eƀ<ݿCpRi9ي93&{`,'Tʶ"Mg|m 1=POEž-[o;Z,?NxyNbvA[#Y$#t2.^֗u?KEWlx]plsrhqMutؔ!$oRmnVXu5{>pJZx(]+_`U džުQ|S[o+ JS+Իg-%Nǝv%&F4B1yvr>0P2]3uw':~?ϟn endstream endobj 494 0 obj << /Length1 2505 /Length2 17776 /Length3 0 /Length 19228 /Filter /FlateDecode >> stream xڌP $8A='; Np}s=$*ն{w=+ l"rLFFzFFf22U gkd@G' ;[?,D 3P b `b0s3qp32kh 5t0lNd"vf ~PS8hv- mr@5@?!(y͝ mhnehd NQؙ:: 1 bkt*R{ec@ 9&zW ۿ l m=,l@,3-/CCk'; BJCPdhaDdaW YDhW~@cP=9\+[;7["S [ӿ0qgPppJc!l,nl=o%_bP >^vSP@ S +S `ba 0Y"MAha?&G *)"$FO*^t:f Q -O)[S;u 3cہ=A?.f(c3w[O?uq퀜hl?+4pZ)gC.ٚYH 'q w߳_{fma Tsf112h@h$VAbv&-3;4Ill/&6b3`jב#o ߈ /`0F߈ #ob@|O_ S J]7F vĮ#P]_b@"&fPC'c ЙZ l To* zLbW=W_ flg JXYhL فF? \@ X.L-\A77aYAYYA3;PKl~C;2OANl?jP1ՠ`N +(k{f,\윁&Fd-&PN3 ] & ߉n[gsGGP Sw2sNArcAA V? sE:'nj]At]rs݁ˋv>@=E|ʭ#+h%1NVهb`O]gM\"O_oo8.̑D5VkosFFnJsTt a sIxM%Czۻ2֫r~}]c\k*{od#q7謟ૹڌ?P|XWApz;)a8U$fDdiwYA]8R&S}QPIL \]~Y G3cyPM7lZ +ۼu Xxb:c9QRzYn$[6Tfa ?^U )ʔO)4wTݔm%,|Mמ^uRZ;A.7wNָۺC…7cxhI22&IԸfwt?32'4GnӼU1D︋^ko(.X}ɣ{Pi=5M_,sFf&Vo\c;rmȋ)Fw ! oe!u%V\W +CKChUIA9'z-(EfmO]}ƞ倖wr|6RE*{(VFcp $7LvّѤ/ שF~&`pn$9Tѥj3烥_LaE ϛ$UgMjL̒B-k }Lؘ*شCa]l STlZ L6Ӈ:q=e$̯WEXAzO_ sYrY˷>px0H«4fn ٭UeON)v96U<5ٽCx'^'Pb7wؓ|] xkle2׌xJxfưZF0MQϵtc,P=UdlEWrܚ힣8;e2B(jB4CǤCTGuŔ{`eUsC.`iYA ZeB쓿{]eͮS>0ufˁk>/ YC b;$O= \v2]*Ruh % @]9;ԗ/FOř/l@!%j+w -a; cB0$d6|ox@xIw Rܳi_wrb}^P/ݥuUuQ:k^!hk+V`O誎fI +2Q) 6?E]l,eׯ_[ iI3o&szvUvpƘ9lڝHs#X{s%i=G¾ ,fA*]@ϴlX`tݜ*QҒ1.D!ӥ V(>r½xpc>> Ż}~T8$&#k0]-ҳ`ʛ~Xg]_Qu+NKUZ_[eI&Sr#lgH&+w*\wN?a똾nWr;Y2AuUe;ϴÖ.)Gsp#i R M u$2c٣SV񷶴6 ߉KY@s$I9>xĶ'E0PCY*?+ D:4ced&8gfm3s-?J#\۬Is?f^{Ws?6?y`5_<s~Zp &j,ۂF*Vk丕:˞ėų>_w[8>O1xAyzЙ8N#v=qH,^}kP,ݦrlX8glh;[w_4ቷ-5WI\F:G[HPrs VpO.S:,vqšOaQeB \բr+nm\m᯶'2--:n2pA^ըQu7 U%B=CL!I VAt&22R]trFyf6CѴ,^$B_hFdaՇJ,n'l2XWBj9q[\RS٢P>%D<cV)Rpb<UVc͇P3aBC2F?S|e=/x ɝ4SL"QKtLLX0d硸)n+r@ᝢ-c;va,[4@ol{.EW Dm8s0.yg\m.{N;~nz0IEuf-"/͒܁=mtx yojj.KHogRaet*]`f+ U diz,TIEA$jBP|28yvaKI WVs#ӂ2 j[7cr?} |cP24,5Ki(W6t$Dޜo Ja%qLsJTڃE|ҙ%+b"aM)*E(uj1M#Cs=3^;弼'wX㞋ס&.a~4d8KM!8.[U?j$.m3Bf|&R,oҠ&LP:R?f?[0n \nU ezG7?LדN,%R4"=P[Q!Rm 6F{L6ۺ]!l/.-Z%C0 zI#S|rڅIت3%tLO1JݛȥpRߎ b,(Qƒs<t|iGP3 R֮U&_t!Q[=gvxf 5U8Oм22*Y0Z.(Hiҝ^B8m#e5ƕ摶e9*nCFBf {/BR-7ź_}ckXFHQՅяǫ8): pl:,%0Є119&̻^Q*Å/V]k],_%Jzԍ KRM.M?یHy5e1$Fh^`՗Ev5"5/ûB/EtCX"LGIn3pEs.t9i9x\kH°EɜTs"K^?TW՝Kz:9*v̵j4,v~XdKB$~o?҆%ԎBCsوb{}bD߉'80Q3ql裼gy+W)P0 ةnm'ñnQc$KePqm^Q.?x60!©rFlmrK+mf!;ӒЅ̙ IX9h +yw#̧tL'z_א#2%=T7{@ZZ*Vy7u(Y7o q {p&yWTsHHK\7t-h|d:7KסYktɭ4M/&C d-NƵ%ӦިFAy3k)XQ\ 9ٴIQM'4Wёz9$7z]53k:!‚o)*\P_sI6*0F-U[xUpi=iَΪ-;#1$˶!q ҋ#,scŋK{lV2:_WSeVc7䨌sЮn3`)vFJeB >MiPNgjWW֬Aҁ{/ɺjoKE!uSK:I`*v>6.fф{.| KLni. Fuv䦞*kox^vըBK?~G`̭m}_X\ma#v0Ђ|'$W渄A:LWQzeokM>K!<d)GU"؅r`fGX+G%7Tq&]`d4TMO }VFQU^Ϧe] +Ai[Z݋+) r{za\}VS;:ZY4}J# Ub$[qw\޳8 PywLvujGOscYBEv䇅#H~J8Y`>*G ,\)b$cUth {OD]K \y=VS,l| FgpXRy K[gcd?E)y4vgUɃ]u0v1h&|}O,S`M4:-BOaLgl+(zT4g#SQ̬_)}UXxh%D˭-LnK]p;͒@4"/51.fD;O;>kvףAo0aA}ng|snQzO,fS:ep4܁5czBS= ."87ǯȣ+C%B}qL?F{T&{J>9b󫅑 O f-ogFc9fF~gB^:$*o(zŭ7dc XG`:ݮ#Bƻ4,4/fvhӭ+YsErPngWfiA)`4t !܃dO?F%ȱvDWI:rTuo|/0tpM,yI c$(=ܱrz4 }^1XA8 3,Y<" 3]dzYӝ+dHß:f@Ln{m>#i!(P` V K\lO5ӅDOH8CeGϮE6 m ty]?uY~L'$?iFߝ_L0ງm$"3 sZ:F(z|Re(Viuf_2jY!qw~p#P맴; SL+~0 6DYHۗ;]#]z7w *aZELB>| 2AҞmh$;SHNҁi}ހسjQe^Z߷B?!'fkԆ=⯡_ڵS #BF#$R gO|CK[}ڊX Vm,Ktzސ;fš1b>H֥RƅqR4®rrE\@UG2:ə%"@Ȝ7?yR#{~Lzätor#ևa1fڻ玙guK̹+r˺fDZr;&0>ǥ\FX|e m>)wPICY&5xw9HۙUMV {P9btO1, ߡ4;pN,52)u3, nk~0e&՜;&(fHar3b^oPϿ[ǩ2}2 &$2d697w+Ԭo#ɴ`'-6[S+q8mN0:;t޶H6L)з Fzk`I&VAZІ 0>l?(NrrH˞1RJ!Q1(oR4A~GWٹ:(noҤ};Jז yJRJ Ya}oHd+"x<+aCn͌"k:\[ҩ}D/}KtW#`<>k !?7,l4Oor] 2Z9 UuC`prmvpOT~ʑ K[QOw:+k0 \U_#bIPւYjm4 u2+ENvqӍ&%|ttH[tWE8g<ѥ'#wz.UqT0J4HwoR~H֖;z 2e)PlAi}Cs E7nPtL=Lj5>I酩A$W3exNM" j%7 > ! zLF7֧/ UEF OG yh~D8 4PVﳘM>CWM~ՌDmyx En(jÜ4ڛ3u"eN@cuEb.I_m6GG_2ՖNpL1aaǯI-L0?uL |6bU +0fmk-%y}?tܒ,,lfgk"xmWcּ_^.JM qq:zKސ԰R1$X,q1Μ> X$Bg7[VB(1^TR(Ƈbd[7ETd%H1u %h*RRle p¸(ܰ9!jR ! s9: JzӤ%(~ ^XApQP1MF7mh9ue:trn({1iO~sUI~~zv!Ȼd  /vJS:*}ƌlѤ@ApJݠo=sm}\j|Bt`j6o|uFv~U R8XS+'㐮sk2٫-ԗZw쨎w>_C0I==,UHLOPUM0%ʞbbs0  eZ N_UK`p!li@y:%gC|'8S@!S𔶁#,'mX -{lxy7LMj /\54 `A;;{x@[H~yޅl,A7z!k]4+9J%IJ@EN>&7c9]eUAo?0Ws/0?w15**#s^&9hԀVւcv本.(Š_jwffo܉i6 ^?]W4ukyN082\/ x&)9 m-!:4VAjLN9rW'FYj+ EM%ڬur>7fݷ-Y>4'%ڼk]hx?x]At[ؑU"{J f7ggLm?n.}ͻNߋsw=8#`i vKf5U/v)IዱA49u$gO-tvlb&|Q dQ4'7BbW!wa~&j+#*c!q3iƄ#+5͹ M(߳4LPS"UX{q$Feke\@ضp:vt9 X,&Ԑ+mVX xtT{/$Y]58 3 D'\yYXlkvn>'gKlYl`Mʠ-py:ٟ/#j=>_f+>&9H-4f}|^И|DM#B5l ` Mo|Bjߺc?Wv3;[򄅡Cz_oޤ2u&~HCu"8gl@5wDsM- iUŞ[E?Q{ z~8*ɭ2M%O6nHQd*7"["bM\-T>w&Hz83zyAams 1YFwy5}A|kH-} iEE6Ն;8:77WlB{eWsEA0D y?8oKF a/]18fؘ(IX6kdG+` ( EG{gRQB /ej=Fo|/<(6[p:>xj09#5k1~@b Ew)ԊzZ6B"* !ܙj̡Uy'V:ȖnK ӉMCKhZI\S{]ëD 観#!Y5EZHpӎyҔzCJHe1u)7t 8.VK9:l7jyj,Qj1cztaxoB&tc azL`RrPS%@uEF) O{U q‡af>ʹ* uNé.o+"iTn)jn͇S;IxhWK%x:o7í l,ţpWrak8gG!&`?b^'BCKIb,$bwzdލ{%FJC#3AtO 1>PXe/|QƳ -Ϧ>Ĉ"@AE?x^/rO#.w!^%JnںdI2_"1E(ayvo-?8w_&t(i)~~ʭ^F){#LٺMVzBҽn:6y(rpK9[a E?H;j[RD10Tp4C%gฃU/Oމ_(lqGi֔羪Ss#1H6ǂ-K/u\\Oi0<39E( p,PJ% $݁ RXh#kn+jdBJz(% 9%pj0Z(1-etO,݋Y21hH~dx/ >>NPb!=."|"* V1/S E%=m`w&yzI)"ey޶r 6AbA2jŸknA`A1迈B^?QT;#5ca$1۾rt"즑r(zKq϶@lIpUZ$lS;f/'ɾl:V?!.i~ݯ02buALf 贅niԽT Hįju}Oց?5b1₿X-MZXuyIE֏^_QT7#4!W"[rǟVe(k5D%q3J^ȔM=Ϩ`3#0$I(<ı^cVգyf%ɕ/BOyCz̒^Dsc~|q#4c1#\+"C&'Om`^bb,"/xgN_Gp;NFhdж}3vuƚ9q42]6+G?Ie_ܻ]_ętI`k6]85Ig|Iv0&)WGUW䯰"gW {}nڕ?P¢Pݡ]dfm%gax 6ձJ.hC I,\5 FeZN3?BVNgOǻDwΚm -]_=19^m)Q29ѱEb c\kqd{q"gvޅͫA.~P#<DCP˘Jt F$ߓY (뺽0޷%<3_=9[Ѳ9)1kâ%rG=wACn<~|S4EꑵnLs*b@@ŬG'۟x|pD< J~Qo[sdu { p{&us(?G Ƈ*ir٦WS{J)ܧF݌\Lbxkx(=h7kχ.anH'[+;o3Fa,l-}WcPMѳ!F.r>]s{pgޖPh>C%H̶# ,[%+ =3i`h]RZBpwb~G iD2¨?,1K8-~Im Rd{LDv#N p>8 ZR{ vmMM8c#|_7x\hCRugj˹G%+'7`:lLG}Krb*x+źe+Tt3l&Zwd~\Gs is'՛r$ sFI0)Q~c9:hLqL/vnU #/xdf0J3;pUoF;ֹ 4U@o52YY'\FWInA ~Z}'[4s+рQNfd==M>9:q7s~bY_#D`?O;! +~sڑme~ WJqb^|C^kFt@5P5_|8 N9Nz)f%:S /-vu0,e@2NWŸuW ŲyJr{/S)䊋 kS\ >26 xu]>9 _l<`?@^%j5EI3'aV^Nh֗睊jI~1r3,ZeB:?@nvZSm]XŅ:&])ҍGLNɺhFɬEzPWyMGƋ:0) V77^GΒ9j:YV݇d1RNA<*bK;5tX_Y$:D\7^ FNTs1 )69=34?ɘYɥI_GV+,8)u&O5FCvJ!{҆#>!D\S> stream xڍS 8Tޱ]EOQ-O2AR*Yk̬1&Q;]RNH؅JEI]ӖP.]8g h9Y]O1l ōidpqQ St' OvX"E0+pfJ gfjA[eA:j I,8c(,%bb p |8DB(pp,"^BBqWL a`%q"ɐHJ$ֆF@$e`-$'K#N8<0>.$0 B R"Cy'WN ` liMt qH  |DulW2)P|(B?OlzN'J1.%KF2 f{gD0KI %L7hاAy|e<"2nCH_l0T܌`r 1<)D abL Dp8‡?R .a_;H4!\J0;1  6S U|B(B)[re)o3b˄qo~H{| ' !2ѷ^'"v?P\L0\{kBgH"$*:10O<8t\BF1 |LBR)4$b;'G>0 sIM1eL`~LK,qG D/a@QVCSOY7;9Vq5hi JۍvZ=F*w\ɏ+ܕi0o(/Ź.ީ-/!k$%i14TbJY饹6y2eҾ55o_ݹOgxvhҖݭ)vH>Tů4,g5Pi/Xgn5 7D7Պ:3ya AM5o|I_Ԑ'{wζbAOliEiGs 2_fj4rgz9Gf[Wk3}/J9h~?Uk|4R[ٜNTش@__vdݼcp"=Oy\ظ+t38cZs2.-ӱ('5u]팴^Hb+M:wUz.& [G6Z̸9!k&lĕԭR?:I=tm/#Xa RG"2dtOW'=nU$ǃ/:^-2YeINVyé<-GDUn+˝qcxitz8gdYBR%GMܸ}ŗʧns7xfkP*3SLP~PoT$\1 w7Wu}}flYSW-*Nyi/ }xzGxVQ³:3 yFœ9.^o2js> stream x\[w9~ϯ5R.b͚$tI&$;K-<T-i/*;ڢ* 1"B[]H SBzWU*j*{]8kPyhܖD@JEk*h1 i+`mg+t(H̖%ZBU:PJtB7[FBYYJ; @xN$Z4aKcvfFsRV[Jt)2bc $ 7X+^5C' %1b.mM2%iL/5Nf8ٌ|u5ϖ8}AiKg)>g @<8%L J8*xoUFHkYJͲ;.dT@?u?$%Ve7|eJ`ZxKEEZNJ<%TBP+pf쁃NSl.v5.A=D&24X ddB,+3(s*c))h %xhȆ 2ƕ̪e;vQpS*Jmi(r"&Gl?~i4st9^]ݣ_ʣGѿ|9_ѩ87 "PRU)qStPW4-.*)+pє[jdW%i0i\uֆ\ HA_"Xonn͸ .Y=X/ʳZ\G8]b2: '/DRNCPHmtPV5_C呪jH+5t5E[!k:gKׂnXJ*1)] V!Yw_@ փ^wY l-Xz,# n=iru`99[!T%!z}Cn3^0%U&(IoݧxZ^a;-{`1W4Fm\$WqИL{ӫ%$^/(5gL{6-fC[w[U ao: ˠ}H;lOVH ]#y~)>0{d{:n^Mlz9D6ȧYxQQ"(>CE’QV4ZjOn"EO9gztʦ|KǒχճP=mA[SjNg\VOSRO#[DYG;iSɹUпRI#g/W 3ff mImsIYnKT VPAKc(~u>$Yղwieh4mk-/t^|0uq!׹g LCmDnsΊ6A$<}풐vhKDQHX,S) oi7Vh` =\҉Q!)hZzLfňwk$XǴYCIwF:nCZn]`qnuu UޗVHH>s,xz[hR< PzgE>dN;/+ "vޛ<ܼv4ek'8|dL%ta/ftf+iTkfiixt1=8ZxN~[鶼&f3 L߭t+f[x,.|U؁ *X E:ͮ-O'C)r{Vl-.9RU ,mR |jNRH$nK"sՒ:D(lҹ$Rd)AWHn% ~wJ,S#!T$rOG%~cTÓl=0 1$֋⁔.T8O? ҈qhc g+].r!BiP*V27er\>0!6}mjaNi.LIU8N4[ Q\`Q!eЊ,])wPdIBymNw$I.W4m~=Ρ$$9z\&Yel&*pyjJr>.=M%E\q~J}C~.)n9?uS1|;ҫTMwj{?ex%ߩmxT1>7)/Hvf Z͔i=lWޮI3rKG8wjH`ؾB {SAHzH-2<3rLw\Ȋ/Xet@JKR̄"JN*yѤgH#1]9t0lrKYxxR:ukNűP)ڵYe7ȜU_lP`e;IO0`4QӂV' \RX>(KV󩪆3;M{7y7ϡtIito֦dvLЩBYa޻uڼb3{Z}|8A$P ]$hNdd CN-'{i P9r\w8py6ujheEtѥʎȋrQɿUБ/.H=jvTx6=70-?KJܒtR:Vˊ+O8UrG6gN\-[q-kRVmzsFh=%ґۿ'tܿM^zwvw$.&{!?R$&pgKK%hzHޠ=?Wu[< HO8''jq%b$XL^kQZ٭CΛ=yFDJ2TJm+=\KCU?Sqy8Yl,.ĥr}Y;l kGg̡I'&b*ӛY|ǣEMXӗ{;j 53u| E_aS0s*3t4 ;gɥ8ؾ3rf6zp-t&*6F(_&ח2Meca7w2𚾟5ϧ;ן:Ǵ|5S74]]kBgUMx'UseWTRߧȘ?Zm>k\_&~=VGPx1{z \Jwitm;a}~n{dy axJހbFp`&&c5eP+yƞ&fA"w/V鵩P;.ޣ;s_E'l^x VΦ5wh~='SKtE~/a#Wɥ]8]?ےG*Vǣ&57YwIw7 bݫu=>N%m _>:dƭ  r>>VބB˧x0U/rb_>Y]y0Yo~^/Tmѓrbssc]5)Uw&Uqzvf/ ӍJ?W'V(.4 g`D"'vcu5)Z]wӺէEmJUE)&?8EoImq_a)nCڍoONxp&&mtUGk[ tYR7Đ\ھ:W|{ Ug{K'eK{y{ES6/ endstream endobj 525 0 obj << /Author(Michael Hahsler, Kurt Hornik)/Title(TSP \205 Infrastructure for the Traveling Salesperson Problem)/Subject()/Creator(LaTeX with hyperref)/Producer(pdfTeX-1.40.20)/Keywords(combinatorial optimization, traveling salesman problem, R) /CreationDate (D:20200220133350-06'00') /ModDate (D:20200220133350-06'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) kpathsea version 6.3.1) >> endobj 498 0 obj << /Type /ObjStm /N 57 /First 480 /Length 2273 /Filter /FlateDecode >> stream xڭY]S:}_ǛMAߖSna!! ̓3peƞ=dv˲#}Acև1 0% W"RA4O$Q#0RxP0RKQ%Z|I0? KLS)x:D 3΀i_ $D'.REWTBLhE8Bu qFq)W88R(#Ić%UTcK"(T@TQaIp) DQHZaYS  e$BE4*0k@dfHBSR0WAF ?I$S\!y%o,;*f~n#vˬh!{GgG'_}heo"ҧn Ğe1>ۻo$n>}ӓ#@d4茅< Гǣ>>^\!'cp)p(go?bdO'4,N}`/b6AId _|௮&U'; nON^e( Ks<2|G߾ױSn7OYtO=?ʋñ[trC4LO|ۓpγ˵sáy0TߗUckIWMYYJsb%y_AB@fUwva 6eC *(0ܺXB n!i$IvE`}|ʯ=a),W[5,M\A.K9NpUp/L(eb\T 84ѤGN.EaᲸ̾Cwݡls6ndմSSYK+aDfص_d5hvydOʪȿk?QdC)@ԎmΞ̿BaL]fBz;e:ƢVѸM)M|$5ڭnrșwp=sp):>1vB[ e"[fbgX4܈Kc0k (BT{P9@tԀ+f`~3GG {.^t0MSqf J*ށw^Z:G1mmmpl=y~QVRM?vQD97+vE kUy7k}f > W\tdyyc7ٷ!@_t, endstream endobj 526 0 obj << /Type /XRef /Index [0 527] /Size 527 /W [1 3 1] /Root 524 0 R /Info 525 0 R /ID [<784447AB9EC0865F81F1E3CAF533209B> <784447AB9EC0865F81F1E3CAF533209B>] /Length 1319 /Filter /FlateDecode >> stream xKlUU{)*-h)gN8wHޑGNz=;,\߮ w2D]ǒ*%MFj#/-ɥl3uj]Q:Guz+ّ#t6CN~:BN o0˵S{9jvb7M:,\PT Ӳ*2{~y-|WW=ʜ*."tiI@v:#(@> 5ķ,89)p+pu}v] j9 +Ka|^Ffz>"Y"!"X*.lof"5V[x|ZB@"&V3XKKA=Xzy5=eׂF+|򢞪!jMVu{kBq=@6 w^X՛3`,&9,cDq贪gl[7豚kG0`57 賚g@)ZWÀK33hK3q˚ՃQbJC`xXޓ:O"ҋS&Hh"IRl}; &S2Ձ, M DNl-]5ԚF" N@Lf.]]}I!N=^{$el>@tMD7žHqN6q'Dؓn&™g:aSZevʪF5:eŎOe#YcV@ָ߹-kŠOn:cAYV{,묕ʚeY [^ K3VSY+zC+.뢕?ғ))KG$/9QNr* rS9IONzr.W'=9X~lxm endstream endobj startxref 785094 %%EOF TSP/inst/doc/TSP.R0000644000176200001440000001557113623557437013263 0ustar liggesusers### R code from vignette source 'TSP.Rnw' ################################################### ### code chunk number 1: TSP.Rnw:81-84 ################################################### options(width = 75, useFancyQuotes=FALSE, prompt="R> ") ### for sampling set.seed(1234) ################################################### ### code chunk number 2: TSP.Rnw:645-648 ################################################### library("TSP") data("USCA50") USCA50 ################################################### ### code chunk number 3: TSP.Rnw:661-662 ################################################### set.seed(1234) ################################################### ### code chunk number 4: dotchart_USCA50 ################################################### methods <- c("nearest_insertion", "farthest_insertion", "cheapest_insertion", "arbitrary_insertion", "nn", "repetitive_nn", "two_opt") tours <- sapply(methods, FUN = function(m) solve_TSP(USCA50, method = m), simplify = FALSE) ## tours$concorde <- solve_TSP(tsp, method = "concorde") tours[[1]] dotchart(sort(c(sapply(tours, tour_length), optimal = 14497)), xlab = "tour length", xlim = c(0, 20000)) ################################################### ### code chunk number 5: TSP.Rnw:703-704 ################################################### set.seed(1234) ################################################### ### code chunk number 6: TSP.Rnw:707-711 ################################################### library("TSP") data("USCA312") tsp <- insert_dummy(USCA312, label = "cut") tsp ################################################### ### code chunk number 7: TSP.Rnw:717-719 ################################################### tour <- solve_TSP(tsp, method="farthest_insertion") tour ################################################### ### code chunk number 8: TSP.Rnw:728-731 ################################################### path <- cut_tour(tour, "cut") head(labels(path)) tail(labels(path)) ################################################### ### code chunk number 9: map1 ################################################### if(require(sp) && require(maps) && require(maptools)) { library("sp") library("maps") library("maptools") data("USCA312_GPS") # create spatial coordinates and a basemap using WGS84 projection. USCA312_coords <- SpatialPointsDataFrame(cbind(USCA312_GPS$long, USCA312_GPS$lat), proj4string=CRS("+proj=longlat +datum=WGS84"), data = USCA312_GPS) USCA312_basemap <- map2SpatialLines(map("world", xlim=c(-166,-47), ylim=c(15,83), plot=FALSE), proj4string=CRS("+proj=longlat +datum=WGS84")) plot_path <- function(path){ plot(as(USCA312_coords, "Spatial"), axes = TRUE) plot(USCA312_basemap, add = TRUE, col = "gray") points(USCA312_coords, pch = 3, cex = 0.4, col = "red") path_line <- SpatialLines(list(Lines(list(Line(USCA312_coords[path,])), ID="1"))) plot(path_line, add=TRUE, col = "black") points(USCA312_coords[c(head(path,1), tail(path,1)),], pch = 19, col = "black") } plot_path(path) } else { plot(NA, xlim= c(0,1), ylim = c(0,1)); text(.5, .5, "Suggested packages not available") } ################################################### ### code chunk number 10: TSP.Rnw:808-809 ################################################### set.seed(1234) ################################################### ### code chunk number 11: TSP.Rnw:812-823 ################################################### atsp <- as.ATSP(USCA312) ny <- which(labels(USCA312) == "New York, NY") atsp[, ny] <- 0 initial_tour <- solve_TSP(atsp, method="nn") initial_tour tour <- solve_TSP(atsp, method ="two_opt", control = list(tour = initial_tour)) tour path <- cut_tour(tour, ny, exclude_cut = FALSE) head(labels(path)) tail(labels(path)) ################################################### ### code chunk number 12: map2 ################################################### plot_path(path) ################################################### ### code chunk number 13: TSP.Rnw:847-849 ################################################### tsp <- reformulate_ATSP_as_TSP(atsp) tsp ################################################### ### code chunk number 14: TSP.Rnw:861-863 (eval = FALSE) ################################################### ## tour <- solve_TSP(tsp, method = "concorde") ## tour <- as.TOUR(tour[tour <= n_of_cities(atsp)]) ################################################### ### code chunk number 15: TSP.Rnw:885-886 ################################################### set.seed(1234) ################################################### ### code chunk number 16: TSP.Rnw:889-899 ################################################### m <- as.matrix(USCA312) ny <- which(labels(USCA312) == "New York, NY") la <- which(labels(USCA312) == "Los Angeles, CA") atsp <- ATSP(m[-c(ny,la), -c(ny,la)]) atsp <- insert_dummy(atsp, label = "LA/NY") la_ny <- which(labels(atsp) == "LA/NY") atsp[la_ny, ] <- c(m[-c(ny,la), ny], 0) atsp[, la_ny] <- c(m[la, -c(ny,la)], 0) ################################################### ### code chunk number 17: TSP.Rnw:904-913 ################################################### tour <- solve_TSP(atsp, method ="nearest_insertion") tour path_labels <- c("New York, NY", labels(cut_tour(tour, la_ny)), "Los Angeles, CA") path_ids <- match(path_labels, labels(USCA312)) head(path_labels) tail(path_labels) ################################################### ### code chunk number 18: map3 ################################################### plot_path(path_ids) ################################################### ### code chunk number 19: TSP.Rnw:957-958 ################################################### set.seed(4444) ################################################### ### code chunk number 20: TSP.Rnw:960-964 ################################################### data("iris") tsp <- TSP(dist(iris[-5]), labels = iris[, "Species"]) tsp_dummy <- insert_dummy(tsp, n = 3, label = "boundary") tour <- solve_TSP(tsp_dummy) ################################################### ### code chunk number 21: clustering ################################################### ## plot the distance matrix image(tsp_dummy, tour, xlab = "objects", ylab ="objects") ## draw lines where the dummy cities are located abline(h = which(labels(tour)=="boundary"), col = "red") abline(v = which(labels(tour)=="boundary"), col = "red") ################################################### ### code chunk number 22: TSP.Rnw:1002-1006 ################################################### out <- rle(labels(tour)) data.frame(Species = out$values, Lenghts = out$lengths, Pos = cumsum(out$lengths)) ################################################### ### code chunk number 23: clustering2 ################################################### prc <- prcomp(iris[1:4]) plot(prc$x, pch = as.numeric(iris[,5]), col = as.numeric(iris[,5])) paths <- cut_tour(tour, cut = "boundary") for(p in paths) lines(prc$x[p, ]) TSP/inst/CITATION0000644000176200001440000000121713422436760013042 0ustar liggesusers citation(auto = meta) bibentry(bibtype = "article", title = paste("TSP -- {I}nfrastructure for the traveling", "salesperson problem"), author = { c(person("Michael", "Hahsler", email = "michael@hahsler.net"), person("Kurt", "Hornik", email = "Kurt.Hornik@R-project.org")) }, year = 2007, journal = "Journal of Statistical Software", volume = 23, number = 2, pages = "1--21", url = "http://www.jstatsoft.org/v23/i02/", month = "December", issn = "1548-7660" )