Epi/0000755000175100001440000000000012576452270011017 5ustar hornikusersEpi/inst/0000755000175100001440000000000012531361114011757 5ustar hornikusersEpi/inst/CITATION0000644000175100001440000000465512531361114013126 0ustar hornikuserscitHeader("To cite Epi in publications use:") ## R >= 2.8.0 passes package metadata to citation(). if(!exists("meta") || is.null(meta)) meta <- packageDescription("Epi") year <- sub("-.*", "", meta$Date) note <- sprintf("R package version %s", meta$Version) citEntry(entry = "Manual", title = "{Epi}: A Package for Statistical Analysis in Epidemiology", author = personList(as.person("Bendix Carstensen"), as.person("Martyn Plummer"), as.person("Esa Laara"), as.person("Michael Hills")), year = year, note = note, url = "http://CRAN.R-project.org/package=Epi", textVersion = paste("Bendix Carstensen, Martyn Plummer, Esa Laara, Michael Hills", sprintf("(%s).", year), "Epi: A Package for Statistical Analysis in Epidemiology.", paste(note, ".", sep = ""), "URL http://CRAN.R-project.org/package=Epi") ) citEntry(entry = "Article", title = "{Lexis}: An {R} Class for Epidemiological Studies with Long-Term Follow-Up", author = personList(as.person("Martyn Plummer"), as.person("Bendix Carstensen")), journal = "Journal of Statistical Software", year = "2011", volume = "38", number = "5", pages = "1--12", url = "http://www.jstatsoft.org/v38/i05/", textVersion = paste("Martyn Plummer, Bendix Carstensen (2011).", "Lexis: An R Class for Epidemiological Studies with Long-Term Follow-Up.", "Journal of Statistical Software, 38(5), 1-12.", "URL http://www.jstatsoft.org/v38/i05/."), header = "If you use Lexis objects/diagrams, please also cite:" ) citEntry(entry = "Article", title = "Using {Lexis} Objects for Multi-State Models in {R}", author = personList(as.person("Bendix Carstensen"), as.person("Martyn Plummer")), journal = "Journal of Statistical Software", year = "2011", volume = "38", number = "6", pages = "1--18", url = "http://www.jstatsoft.org/v38/i06/", textVersion = paste("Bendix Carstensen, Martyn Plummer (2011).", "Using Lexis Objects for Multi-State Models in R.", "Journal of Statistical Software, 38(6), 1-18.", "URL http://www.jstatsoft.org/v38/i06/."), header = "For use of Lexis objects in multi-state models, please also cite:" ) Epi/inst/doc/0000755000175100001440000000000012576333004012532 5ustar hornikusersEpi/inst/doc/Follow-up.pdf0000644000175100001440000065361612531361114015124 0ustar hornikusers%PDF-1.5 % 1 0 obj << /S /GoTo /D (section.1) >> endobj 4 0 obj (Follow-up data in the Epi package) endobj 5 0 obj << /S /GoTo /D (section.2) >> endobj 8 0 obj (Timescales) endobj 9 0 obj << /S /GoTo /D (section.3) >> endobj 12 0 obj (Splitting the follow-up time along a timescale) endobj 13 0 obj << /S /GoTo /D (section.4) >> endobj 16 0 obj (Splitting time at a specific date) endobj 17 0 obj << /S /GoTo /D (section.5) >> endobj 20 0 obj (Competing risks \204 multiple types of events) endobj 21 0 obj << /S /GoTo /D (section.6) >> endobj 24 0 obj (Multiple events of the same type \(recurrent events\)) endobj 25 0 obj << /S /GoTo /D [26 0 R /Fit] >> endobj 29 0 obj << /Length 679 /Filter /FlateDecode >> stream xmTKs0W3eJ pb88qH\\쮤6pdI+K춐i㘶7^iDlӥDOs=UP endstream endobj 26 0 obj << /Type /Page /Contents 29 0 R /Resources 28 0 R /MediaBox [0 0 595.276 841.89] /Parent 37 0 R /Annots [ 27 0 R ] >> endobj 27 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [248.048 94.248 397.519 110.686] /Subtype/Link/A<> >> endobj 30 0 obj << /D [26 0 R /XYZ 73.835 785.063 null] >> endobj 31 0 obj << /D [26 0 R /XYZ 74.835 747.213 null] >> endobj 28 0 obj << /Font << /F35 32 0 R /F40 33 0 R /F42 34 0 R /F15 35 0 R /F51 36 0 R >> /ProcSet [ /PDF /Text ] >> endobj 46 0 obj << /Length 468 /Filter /FlateDecode >> stream xڍSMO0 WZ|4Đ@oa*ݘXv $~> endobj 38 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [73.838 705.338 292.355 718.233] /A << /S /GoTo /D (section.1) >> >> endobj 39 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [73.838 681.842 156.76 692.084] /A << /S /GoTo /D (section.2) >> >> endobj 40 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [73.838 653.373 361.586 665.934] /A << /S /GoTo /D (section.3) >> >> endobj 41 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [73.838 627.223 278.929 639.784] /A << /S /GoTo /D (section.4) >> >> endobj 42 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [73.838 601.073 352.345 613.634] /A << /S /GoTo /D (section.5) >> >> endobj 43 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [73.838 574.254 397.906 588.202] /A << /S /GoTo /D (section.6) >> >> endobj 47 0 obj << /D [45 0 R /XYZ 73.835 785.063 null] >> endobj 48 0 obj << /D [45 0 R /XYZ 74.835 757.175 null] >> endobj 44 0 obj << /Font << /F35 32 0 R /F40 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 51 0 obj << /Length 2023 /Filter /FlateDecode >> stream xڵXn6}W}û$-q@/ٷ$jkw8RVv}.%ùg~9qyԙ6FfmVjV)ְ7٢y]B]\7BIݏk/o|xԪ%Ph%N+Jl-B(aaL\8+CqaX\s/R6[]ydz55Ldw:F1'6YmM UISz?, #rX:?B+GhuG,GԫK6pYœ%׀O1m! .Ao5\݇81a5\ޚTpYuW9HzKLI".G#$ooA8|8Ֆh8N3"\Cm8v|3W,ѻO1(.9 yfv^a؎f@2EF[Hgh zCJ'#Z|`]|.;Df]LNk aU*#CiB!Ma0'c*ԭ2YT2kb7ٖ]z(67~|h4 [&WTIӻwg Qu\6JmkIX ec n9Bh24+qe !y-0 je fdP@ުjdaZY994_R ou>ETNi/P 28VA]ȘQnwe5lV0x V~KTcY yPekVjnfJo١^PqA,΂t찟+25HY  J3QpzS(JV\ 0^-V0J+*9:߸Y˾#P*rAIݲŠg319|\HI[@QJb(/Bx>\L1fJ ͉W'4O!T1޵v7-Tݱf4څ_~ i:bV6l997UD.lZZ^#> endobj 2 0 obj << /D [50 0 R /XYZ 74.835 576.437 null] >> endobj 57 0 obj << /D [50 0 R /XYZ 263.655 359.566 null] >> endobj 6 0 obj << /D [50 0 R /XYZ 74.835 309.47 null] >> endobj 49 0 obj << /Font << /F74 52 0 R /F76 53 0 R /F35 32 0 R /F80 54 0 R /F40 33 0 R /F15 35 0 R /F75 55 0 R /F51 36 0 R /F5 56 0 R /F27 58 0 R >> /ProcSet [ /PDF /Text ] >> endobj 61 0 obj << /Length 1958 /Filter /FlateDecode >> stream xZ[o6~טEbm"(0}Pm%Y4/"[l0 (|<<E8e|rtxD94 dH9bѱHv,Pdrh3cՔė*E!oO^'Ml#f!4Z\NR{aD[2J8C []EU,R-mns ՚Ky4\7jL\ +3WIJ(y$A܆:m1+1Ll؁+K񒢜$ļYT 4VXV})vW{1">rzO7qԵQmneav-- Xb0755nVmW.{챔ƩOT;Esg% ڧ錳rQkg cy8E)[3cy&=Z%Q<흯M0E՟kx\vT:S9q.؏ew f}Vп0M톺ۨ4 xуחqȢ{K=M F"mGF|PY.I|VM&i NpC='|R(Oi*>TĈ23rʜpבMY{h k\W:𨀣 ~SZSSzj(ը3)ч4e0>-6A{0Ôl]Վ@>R;*+H=*E0$d ..)ǒi3qӴ'XZ-up^9 ڀݸ]6s';fTc0˵Xݠ$dciKhv r3SL\u Q\2 t>?hgޙS.u@ꈃ#YVAk_.ӧq9˓&e5Y^$+T.aq1VoA](e>fswV'~ͼ^n  $˧]6VUCmBaJx<58:YXy|JImRE9o-ՠW\L |LAØVC-U\'bTMh9{zmeAn9:JĽ[}.^"Ls;׻Z[gGq*J/GP偉u;j#<ּYi^haܧ+Oq3 .Xc@u*2 kD}!9#4B^ъl[%w-u˹qDi8- Ib0LLubnep®]1uE3 @42{$Tj1x8HC%ИL·زa퍲 xɐܚ&hon FWr͕vVv@:pFP! ܚRVUUy̞h!Ҥ!P̽m HÑz|.Z!4[ Dwxk?9O\2W#=Ӄv~ nd_|dHG? v$<ГYT|ԲZQ>jm9u[9MiSAft_ ^[>=l`;p۟1khlc3(>'/ɨï9D~m]INw;gLk_!:!z>H endstream endobj 60 0 obj << /Type /Page /Contents 61 0 R /Resources 59 0 R /MediaBox [0 0 595.276 841.89] /Parent 37 0 R >> endobj 59 0 obj << /Font << /F35 32 0 R /F74 52 0 R /F27 58 0 R /F15 35 0 R /F75 55 0 R /F40 33 0 R /F76 53 0 R /F80 54 0 R >> /ProcSet [ /PDF /Text ] >> endobj 67 0 obj << /Length 2564 /Filter /FlateDecode >> stream xZ[o~ׯ >H=;w@&,EAeG,v}rf 9`$g̹ EۊV?Lz9]-+H.oZF֊uu5}7knÅ;~v!^+so?g˦ͮxMk SnǷ,`n!D,Lw;et~kw!~/mkB k3y{9ңK3"w6c?VͻDIa'NhQ]\c E.ϿUTQ?q[' 2/SCy.I”H:t Y;5ō"// 1ٶ8 n1,wy /Ge~53Zs sIؖýSBC7 +풸+ )E 6em3U3^η\"!4Y&!a MOBpB-9"8YLs} )c \Y]/2LF fi!Y %A&d iKF 7Q8̑Q,m!`v/Kp<`bVs6F ENR& 2&xMaM t_Hl<dȠ 8%wA>[^Ǔa`Juu,IRՁ_6 j)֪<:T}|p(gOPDrNI^S*gFkU,;bi=% H&ji|zу0s$C}R:Ⱥ92dzak*MhR"^",id%2b4Vm!@WZ%.RoKΓ~o םOΧPf%Z^ &1 _eͳ=UF/Bw9eng7)Ҧh܉N`z͢Vw)\$_EJlݯhm|[.ʉHd= 2Xl7]{au|7n7`ořv[X McDWUEonϹMV]h睤~µ7g45fkl`c6gk#"ѦHf"kCyWrokCe_@-*1^qMyQt3 ` P?t0/n؃0oL¸r/U_C1#iN39h<H$q$N=;z4J՚DhZz9kZ-LTK c4[sC_U* {({ny t6p y !o==Py"eTc *o{Twy4p,K{ܔecErt?Ֆn\x4HYNckZ=d.fm0}py7sjDz#K1qC.謡4 yl(LYRBj|W2F+9Tx4H簪%uUhٴ!*1:AZ-Bߎ>z mz&N{2OC4^T_\ö0u1@g s#|Sؙ*o}̸>@o͉F-Ԧa4$2l+^Kq~?S/$UT)>K_ݜCwlYu,|YnBwT/[j(_ݘ/&}8^n}(m>ݦU{e$=dj=P[],4N ix .3>w%U*RzɩcsJi( |3ZC1 ҦA?Pv_l N>]O̤;s&QMAOфRu}!ǖ[^f=}LkXQ׆J&x7dsTq1Z+yŃ$E}):}y$ * CkLUD%0;#Uyu.ktFW.o(7+Ƙ{Z{tȒ<$\3?u-3B$,iw}]cNA[yud -8Cp9 D:TϒWB?oXϕ X6)ܢ)dOy?6}GlL_:) K*GxDxqҢP-BAm7xzL첊v;ӀKs,'6s4=e80all?[:ͯe ϐQn}C]X|Ws))1S[2zi]܍v'-e;(F_A68Vf݃Zno+Iu娸&{9/K0= endstream endobj 66 0 obj << /Type /Page /Contents 67 0 R /Resources 65 0 R /MediaBox [0 0 595.276 841.89] /Parent 37 0 R /Annots [ 62 0 R ] >> endobj 62 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [367.981 91.929 375.819 104.471] /A << /S /GoTo /D (section.2) >> >> endobj 68 0 obj << /D [66 0 R /XYZ 73.835 785.063 null] >> endobj 65 0 obj << /Font << /F74 52 0 R /F76 53 0 R /F35 32 0 R /F80 54 0 R /F15 35 0 R /F40 33 0 R /F75 55 0 R >> /ProcSet [ /PDF /Text ] >> endobj 71 0 obj << /Length 1742 /Filter /FlateDecode >> stream xXK6W@̐G_I &C$-Z$w83(I @-g>YF7~|H)Q&SQH:O7/_i(.@ $EM|5WZmmvC2vh YiY޶v:#j qQMM{YU .'f3FH*$Y}$5̽PEII7L2z":JRd*>D*Ԡ@)^~_[OB JͅV&KpLK'Y4m;xI0 ;^Xs).mk.xhQeOc`ԉ0expp9=5𬳪>yj` @ô}RL Bd1zȹv&XFwK#Cnx1I$[)܄n'Yfl )YT2ӂ*ѥ$zO۟V.zN+)gGEnYw{XJk,O1P1e20wܪFCtPe- 3Ēuẉn-VRO ^$U%_&-:P&HP2 ʑ70mL2k6j󾥡i5257 mE\h9\, *.&B )lldg:ίB" 㷆LpI.l,9l4qg:6Ts*f6?y澺d[f8n =Tϓ& 鋴n\5~̫}5ɳl[`Iu{?g߳yO߂f o]Q? ClX|Jr;2vF8Z 4CGZŁ?`]}dʶҡhhQ3?vsy?7hфDpI&dMB4$lohܗ,dv=4/_MO\#z8$,z0]OU9ӿ0>?0:~u|*-EO> endobj 63 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (C:/stat/R/BxC/library.sources/Epi/pkg/vignettes/Follow-up-nicL1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 76 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 77 0 R>> /ExtGState << >>/ColorSpace << /sRGB 78 0 R >>>> /Length 7109 /Filter /FlateDecode >> stream x\K,GR_KXГvF4H-@@AF0^s"3"ldU8qDd_뿿AO}oBxw(_oߏ".x÷;WR^_;?_i}?;{x}Z~|_ߟ~zO]_1~=˫wM^g o=o˿G7?owW<$?+.IVN?qr}J~}}?;{x}=>ۜ6U1^Q\L{ޚ_ul~ޙ_k sX1ˢeG폹ly/vgwW3+˻:?^1'q7ןZ~j[G10].=l]ۻ("r.`ea2,V ȂD1qߡw TY~{`7rߣ!2aV |w;DYw?@+3bCxQ;gRnLQfQǕȓ^;#D67,v.v J2t_X-wۖj+.#w=YKWV"&A#6[hbGd<k-u(6L찙BQ3 w`\LP dZI̢#uׄ;1$lޡʺ``R2f! %V|a.v`ѱebKcf34d2$ 6kw3d.b\k$ !_7C+k#A7#%g 6$ ar]n!\6'+FYA_( ذpN[픥V:D1Dً⋺$}Uႚp:I{g6)j#FMY!\~ȅ|4{&Xy7K}XAQ#fS4‰B(X~Uc ^A#1} NH=in’Ba t!acd́`ݠ(IV^џLnB VDʛ{R\US u$oJمl{zݲc%YS0382Fzm49JXmVXK̴ h\\(8dQq-ϓ1i.ʪ1HE˞ 0{% /d3ֆޜC!Wc'4b=@=a0+eN9!wE Bl klINؕ=M ˳ro '2|lg  %{I3#iUm\ 7'LdlLLK (ҬOJd >bV\C ɕ),*$V8 JmOuV8梅,`Ջ8n(*E!&ᙸWȑ D^e*ZI,CSqդCb7;_\iۉsx|cɱղ8~ 2= _ \S39*m.؈ʉ&[Vne b2Dtή6RpML 3|wR'F j*XKgg)hZ>A%u"S N!fv6ER#8)/-ɕ<`.#\Wg4{1XE ^&w}†Y #$,KUVϢГˠ% DѓzTKgY GQHU•Z$?@-\XҶ]i ]V|W}E#tM^'Bc)R; 43svWuZer1U ef %;fFzX$-/5W\:QA䫵^2_zqMhCukVnLtW ZWs{f"-I K{tn[Uq~uWΉmD.NVĬzІQS)7m^+>YFJܳEiG勶$U- :< ҸH3{(Z@!LWRlD Zk PS(M,- 弈Qz"R5vuѳL B;+栰X}#(J[( VAB_~:I5Z)Ő* dbZC!"[QK96_z `r6ǑLEarhZ(dP6y8mAЄ ͚Av<`%Ps H 6w XVIQ[`uڇb2f.9:F35G!hhUZTx1"p#Dc O&86hQԯuhie)A GC &F=w.\aޓ$" P'P,+7KNj5>|h1[+*xbR4kۡqJ*1 8)#TlX)v_{hcFc)yB,UU&dRІ<{:Q67j5:pbTsIg^lpǦTf)dن+KВJ=_tX}r i5y0VE a6>N[!;@sjuD}0qٲ'jsjhEnWPIP׊^WC2(G;: ШQmEO3 QI+danmvk 7ֶ&ɻFCT +8:",IpDF+^IqH|%Hy4'4KoQ^ c* =l}%;Q D ^Gdܤ11;j\͹jI I!UfT;H)+M6?"{^ N_QYIYvoBN >Ð {b[-gRԽmM9nw"n[pޓnwsGj0-۔Tvo;EՒ(T QaEo΢9i]%(\$iTv"{tD`4 8 /a,Jq]㤃Ew^͏+\j rR5AB L m ,Ӻc ^[,xb'TEOb.83zr |N%ͨE-bҼ4mx|g7A`,j/\Ra5k"dz ϱB7/Z$'*}`P]M3/nٛ5yOlZpԬTTZzK5IBjQzkC[E(G#ReE;95 En,1n װnVG)yřz&ۭbԂyQvS餌k)Xg]CfRSwxhw jsR>nQ[9]N7l̜ohాEv^e#eF2R4@F>v~VlP<,=}[Y|Ufe,B@G#f, TD Bz}7UEwZѶ5o(P` xX[.@4O*UKcU=?Xz {)yW-pg8&O-Z6%oz6&8b`%`[>A#sFLkD}ӌIY>剫lVr%:MNhܺs#',A$f݂#beQ JQx5@1g)ž;4} 6.icve9'Շa#ESxԆPf]Ť]_mOo!8{4m2wJ ;Tt❦..,>3Þ~iF4K^[cc֛}qm0˸CdVJ Rlu)*/Hh>V5Xdp;֚qH< z@j$ LzJ%[$>g'*Kۇ37GTѯv %T]_$)؇DѴ8j(h‚jxzVo{94yZf9pTl>Vf78U+՘4]PU1t!s;mN{5AXM5bQa)U WGqo؉T*{\lTrRn@$Z(QX*"~ q 5'_3\Ϯ^_pU$[2-skI7)pen$IIܞTԒmM+xO(m 8/1mDQk7dg1;MP /ƍ]+*6n: EЬ6WkR5o7zRyD 4+(|qz:Q߯؍Q;ǁR۪ݙfj_JXf%7Ai#j3 /"fҶKeeru766g>vc[g"'٧~ O%S JAVE:Mͧ:D1ԤD+JՃhSĖ(NVJD_oN6fۛ#7tqPXS35rGvd4lB æ>TsoX֪b| s<' j,gP'X4 }HP3ֹ]s0oۜt`FnШAc<6e3$DŴGk^ת*VfqvLk{8VWT,,'iy`u{ 'e_h|?S-Ips`-bA H٠vBbݪiU0w :-]L@Pa)J͍z~j#uFR9[7O9n岚yXuci;ݎ'۟h,~&(9UF-%9oSJѿ(hvh$P-f=P#QIHԳg*Q=jԽz'׮ u[Iw:8lׇ@N"TTL+wA}kX" ]pjd~eZlM7YQ91P vy\BPn+ću>ܛrsK*= qSR.e=<#x<-Ǡle;&uDm:Q `K2jQ-%Fտ:}dtDzn=?|_[i endstream endobj 76 0 obj << /CreationDate (D:20140519140350) /ModDate (D:20140519140350) /Title (R Graphics Output) /Producer (R 3.1.0) /Creator (R) >> endobj 77 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 79 0 R >> endobj 78 0 obj [/ICCBased 80 0 R] endobj 79 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus] >> endobj 80 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 64 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (C:/stat/R/BxC/library.sources/Epi/pkg/vignettes/Follow-up-nicL2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 81 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 82 0 R>> /ExtGState << >>/ColorSpace << /sRGB 83 0 R >>>> /Length 11534 /Filter /FlateDecode >> stream x}Ɏ%Krݾ"ԂI- I \\TK@/!}=<3nzR@QWnnco_^Ϗ՟{uνoך_?~^ۏ_{?/3_wwUk/|=Zrk[^v<靇ӿ돿/aos۫u语Zoݹ~˟x/􉏇_e|fo ۡ۞|MЗy?jK?r9_ˮr9_1Au\doG__`?kY_kj!̎cnXvaݖSCVRt]^WH! Ɨo=\h 4#+1㸵w4جyǔ_C;XauBnxHHb#_ (t;0rr:oh[rF@eFVwㆧЁjz =r~"|Tqc7-Z|䞃+xp:פ.MЋch'Kx&;;@ cT]2Ii Q䂇}@g;]v&gl(k/?З~|='vXDst0I;=븎9$hb؆xtF*8fnϙF Uhub)ΊxH^kvlLJ$X]t$=<+ֹVY@[8YgHG#S "έ :#"քn;1ne\GIμ.EX_ zXvݣҊ]i"IOz9gRQèᤌn' =prWȞ.d;3Jb&mѵ(y6X$uN8-8΍ˉdgk$GCOi5ٽ=((\H K4V{@zxiqFӉoo+09:͞d:rξ"fPۙ]$쫫cH73?ѥ{?[ې^5 ~P<МG9V E/j#4=|jt3s1BfcqcWoS>Bă#p",VzwUW9[r><[pGlsrŜ'5 !Moc jSli'xډ=HmH<<kmLۚ*9{1;8(ԨG1MF+JKpBuA݁`v<༹i~xtY;̓7:Ҵ|FV1fQ$?85\Fgآ?8%tMfu&XywүEF%qLyha87SO" 7-@ ;2 Dp8:JN4ΐYQۉIF#N\NGv9SȼV}fO9 <6,[D#psE%X7>8Ȁ x=>'-YQȐ؃] GBqz&O94K'n/|gY}J/9֙uU{g$+B;jY==* dyW'~dÑxRZ-gH=\8B&(z; 'Oڵy˝Y dKO놪|EaRJu'jaqX{w"c8W,p@`r#OY<*a/zmSW$J`"TĈtThVr~{ΗM!1.C7u$D02]ջjqOJ- W{ą|C \2! )9FWAA37'6j.ye,+̖G=P,mOhy%K<؉0])E Wzvʰz,]0$cƯg /Zqvzw⭖1Ԅ|E{b˕垳I̞['o{0UG5T_:TN(e\ѓ@olˎ1zֆCӷz"T6rFɐ)7}ì;LP8r}B.Ru9:k0xG4ۇ!SOK<4W 'șL%V,22+CdVPFf{Qrgu)tN+kcM-kęC-J!}D'(^G:T׹y^O봪SvOj}䃓e#?ҴW_=:ʅ8 Γ{NH)MB+цٲS3;leMdEF{"ӒȐ[z>J49 c4H? lI"ȵ|SMtTƢI H$H#|%TSVBl^iC A%t2.C36tۉ|`g;?|kF:љm >h09 #\۫ ;MnQX+Y\+LW#HqؙUjyiz_)@yNr2n>r&éJI`c{_/0,!' &o+0D^Q7ocHYGZW8 6;9pBQQOt}{l3rbQ(z=єuIl9( L+An Һ&9+92m?/AU&ĕ&g]EAg_A67>x0q\2{HЊ:0\ AI4J[գqh8i-v7Yac)p䘵Ι刖ܲg{L ~R;žܰr=6Pf#L;A}z?RJΥPG*B>x' Q`T8m?bȼ oFdk G7e.d_cQ{Jіl@{̫zCJ&{CqS?.";MdT3#| \EqV`Ù̉VxYS'%:0 ~xM,<7 4D] wE%jP-2QQKy}͊lPTH6i:$}ߒ!#<άdFeR y:wd?<;ѽAh;vv܎r@cqD!(Q>{+I^ObvDY?-+tq9ՙP367!o2mȪ=ivjTtY͵wJPV$I"Hm/Nުhpx>#ħ!IbdǸϚֵY@D"Y+'0kMJ\T-IHoVZs)pvf`_yS2[7KW#1${{j=JՊŇ~2@UgJߢ,5$#veu'ٞ[+Q d~3PkRyW66J9T2^H0~$9s|dK'*ʸJZnJ YH6Jz;hžr({eQ]r8g.]V5ݎ<&w'+Z؉O<+uss%qLڽ!MO˶p]=]E4ʲ?or1͏sEdkS6@pe*:g!pf׹aQ܃L#EN!u9rF:nIDAr98>Zzs ak=S$ Jltˇp/> ZaQu8G1:G,cK5HظaؤN7d Ѳm`JPpeii\>r ǛgBfbXP"E{G։.fCQ& o\ u>{JHF\geKQf ѯ{1nP,W403^!ZpZe9 wEwɄ-RJ`Kgd`}%s'V|.\QkYQ/JݮyׇqLM%"v{S%|*Y#-TFpli?kDTOl*IFM' #ԣoM\ϫZ3\s'6bPZ\sՐpdtgU~'=Nv\V&FTcHM<b.]Z Eإ]A[edN!ɝa~M2 kqK̈ʕu2!tI{UB]]c'.?X*3'Y)Y7.{Ĉ-yÄvCҴe D@0ktP>1(?"->֕U ?&0"/dk߮ cκn#*gC;+س.,.~/tviW HFݣQ#* ֻ\zR(YjQ_gf4r6,Q 4! 6ܲeKԂ4M0{o }>(gf >YIi,'Q%'J~ 1Hy&1ːy X6?óa2n%}+ؘuUýdJ-DtvG$ ﱜKucԚ?cl0[ 7R> ΁|z (sBTT|cfM+[\[fƳ➳Wk[>Pkcۑ&vD Ӻ3Y_zl KE=o=.%n']IqArAעVГ>s"r\IqY赻61;Bar,I~p)uq^ݵGbsΪ"-zYtq+llpWF(>] IH:=pX7-?%3G,YmU;{aM=k܋cяӨO%R# u+zx,/ MsUNx:S8OZ<ɚsu(pۓjb-L;yx[!٤9 Ǽ#Kj#,yVC2lj2crl{!R{GzO^;\BMgݝ gBujg' dΈ˴G<,lR:,Tz&z:dYQӵ7WAM Hgm~#!6 *;T >9a8UǣO(ӑuvzNB5xaL~690 ;n0*ūU nByC$d9cZs8tGi΃'.:t,-+zE&#D&zmsycU1Eo:QPNeUI,8 UּXԍdTu2~NIy.ŮsCS3p&b4"ipn]7#D'w} snLtiZnqBЫY$8VHDQi Ruҫ_v E'7i>;fhn$5tL'G"jfj 9Byps A''TNӜh]%ݲ0?um3üT}ujn 2kD:Eg|uN;EW!ڊk uΩN>u2S&VŨJ1Jfr:3Tfa_M1 2Qg82Ѱa@2ghf:*NLLrَ^Ru15g;ahjBIqV)ujݗl\pz9F#k? glW2 O&tœg5^}.DCf)\ Hc89s&-0 Na+ʕ`+w9[A%adVL3ƁgxQf0u2(jL BV: ԸcrMX5xr\rݭӁ|rb0yy.tYNdr|c!?4tư"Pajg )fxF]e2ygZQ!IX`'Cr"*kмQQ4(PmF32gx_Kx?P)3l0v(/MT^yjʜ1fNJ-0S7J^1WeiYPYayҝs¼MFx1|1/IS$~q.aW6hT̄'ø2 OGӖ8;Qjua0"h іq=Ȭ4.C՞p~"#]^zl甂T_ȵ< [7DNÓˌ4\=g.v3=-IP{mveTv>Dt^ Y'Tzv䈹jWoIo5}gl9suk}Q:br ={N 49Qڕj յAA{mcz4IYCfovt=*W(4 0k'lvfu_is4O)mZ'g9_Gf!zNlV+k$}lRWA]Q}vungKץae^I0wk_vj&N;7m:QrGz}킴Hu0B|J>a"Kx}M F8SBLRF4]: f(`*YK k./׳3PN{)kou :u3+h>w񩄭uo'Rq(`s{)Z:NrZFIԃΰMi'UԊ\ωZ>353γJ!Oyn Cs#Cu2!_י-n(4'th i_{HVXIZ4_/r<0kwEΈ'ӡ܃' ٓ] .ק] ٬XIsL/g{((f_Z+a'r^Q[g֚9A Et=]1X0݆l\O r5{w+⛓CsZmT(f ̕٨/ .0N̒+YΥK$f Rɬ+F㨐W̜7Q붷mƩqFH6TmN" ZPbs-{r/c#3dS $lrߢXiz\M.ʰZ^T+*C[%fXgLo<pV'+ͼ6׎Op&IP1INZQYH`6#>Eo"+LBR%)MIƟfft= <~鮛Pw?__pS7 T7 0VwWw{:Vuح{yם{s؍~湿 fvܿpiv#_V#Nd۝x.(}/Ţ1w#3_<&M0w7H;_>oŸ?ڻ;6}M ո|Ϣ0_/9xc;Ox'w?2˹`o kpw2MЋ6%.HǛ8w~ϣ"_XɯJwAyWyys`̻2sEfH~yF(ο endstream endobj 81 0 obj << /CreationDate (D:20140519140350) /ModDate (D:20140519140350) /Title (R Graphics Output) /Producer (R 3.1.0) /Creator (R) >> endobj 82 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 84 0 R >> endobj 83 0 obj [/ICCBased 85 0 R] endobj 84 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus] >> endobj 85 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 72 0 obj << /D [70 0 R /XYZ 73.835 785.063 null] >> endobj 73 0 obj << /D [70 0 R /XYZ 128.658 469.65 null] >> endobj 10 0 obj << /D [70 0 R /XYZ 74.835 404.465 null] >> endobj 69 0 obj << /Font << /F35 32 0 R /F74 52 0 R /F15 35 0 R /F75 55 0 R /F84 74 0 R /F24 75 0 R /F40 33 0 R /F76 53 0 R /F80 54 0 R >> /XObject << /Im1 63 0 R /Im2 64 0 R >> /ProcSet [ /PDF /Text ] >> endobj 88 0 obj << /Length 1770 /Filter /FlateDecode >> stream xZKoFW*Pɠ!E\$襈l=b5JJc;~ =\.wg盙~V}ʊeE)̴DYvJoF4_1ߎM당nFcd>3͋omo|>:7**ePZ܊oX/alCCƈhzVy$e~ɮBTO4) s3x;5Fpf 4u3!9*0}P`EVJ1e,4IFCfBh,w]4 wnfmIk Ji|v|nX*RT52U,biL"I1CLD@R##}$2uf Ȧ$hѠuGviο?[<2JciL:Ibr> QRB0N~e {'ZigFcZ7 +:z{/|6q5w}eU5OQN:sbmWʯPS(qǦ Me*6~3] u/&U_G݀ҥ?hJ+n> -]~qJ$r}}ZVVDWUN%WD1'p:?6^gSx;g#3n`2CfGZ +q[ -赂|s=t;1h,8'/y.@6Xկ\#!rem\/o`jP-U ua+|h>dƃo5rsO9F3˞嫞ɵgU! *Hy݇|޳|qlr3Em ԑD&RwGٳ|?XP>Fl&ܚ}7p;P\t1esȓGYMJwAe=X͞yi+HgH~Xy`n57%QmM6yyhd4un'vcG%5|{U`cmYGUq}&rr6asywum 櫤K0LݝAZxh{g@TL4ٻ0<yДbج&<8e v ЋsuH=j:RS2uW Ǒ/5)\GU|= [x w$"(wُZsGx! !mФc"?m?f( mhJʤkd>< 6ۓCaܗOBfo'WC endstream endobj 87 0 obj << /Type /Page /Contents 88 0 R /Resources 86 0 R /MediaBox [0 0 595.276 841.89] /Parent 90 0 R >> endobj 89 0 obj << /D [87 0 R /XYZ 73.835 785.063 null] >> endobj 86 0 obj << /Font << /F74 52 0 R /F76 53 0 R /F35 32 0 R /F80 54 0 R /F15 35 0 R /F40 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 93 0 obj << /Length 2227 /Filter /FlateDecode >> stream xZݏ4_!ZqŎ?YsR\jǫY,%/ϭ)#ZU2Ql2jÜ ߖ)iR7vꮛPKuGFFْ\)f~n+[f%e3mfs8֕bt٢a tL;Ŭ/4WB Dr~5,J@zݕ.3rKկU9ʼ<&v"y^8xQ\heǻn&|w'`& 7On?4tO\.Xm|>xwwzR /dqX6/,\I."T~;IUm!F ?g*~L7wE29O_ډq=:bIwPcy?)q$/ z>v_ Ex!C=5"T\<͟2}|`C*gJ3P}9L紷>W=n ! @lԤD8h5!,:d> LkJcT ˃m}& ,p j\' ؓW?Qe^/<`ݭxDw/M8}Fl‹ZgH? 4Z3C3"qȔ>(Su;7JΰU_P3 endstream endobj 92 0 obj << /Type /Page /Contents 93 0 R /Resources 91 0 R /MediaBox [0 0 595.276 841.89] /Parent 90 0 R >> endobj 94 0 obj << /D [92 0 R /XYZ 73.835 785.063 null] >> endobj 14 0 obj << /D [92 0 R /XYZ 74.835 442.99 null] >> endobj 91 0 obj << /Font << /F35 32 0 R /F74 52 0 R /F80 54 0 R /F15 35 0 R /F40 33 0 R /F75 55 0 R /F76 53 0 R >> /ProcSet [ /PDF /Text ] >> endobj 97 0 obj << /Length 1652 /Filter /FlateDecode >> stream xZo6_!+ c5T,}X(C0C;1cW}q(YkA1%xGRdWY2y<8zx@*!h6'%(a}K !s7*_tG|g+ǽgmޯݻkB>~ӫpU]Ԋ|c[)%?ޮPʬBTM%Z)Rs38yE } fcMt߻ Fg=~F"H%4kVe Br A#-C|Ñ,j(U\79v3|~g+ ;L3׀GIIQ9PF DEYBOŋK"J:bj8B?K `ixjo}0( + 7퐖٭Ϭ$ݔ3ݚ 7\ךS3v砹tBu v6wA{baL s^,3X~ilҳ!@,hQIښph kQqF9FKoY}z-DM:;V:Jws!/j?wbߝJ,z7zC{jzc_mNB vue7Aհ>% =lƉZ5eRB3jc_\I?UCX:=4!tDˊcZ%)97.,Zkhn[Ԝ!r6_}25$e7E :}1i6Y9|s#̻g֠I@e¾.wU^wpG;ЁIvCꅏ: (Fz@-\,Sخ:PM%v&+G`%BJel҉B2z"d7޸@$QdD9*Rtq2 2W}@&t8W 0B ddL2res($#3]x,.뭵ih\/ۑ)bd8CTC&l;"- *C$g'Gǽ4TɤAHSG>vTǣ4U)0tA"M`,U`<`◯{%}Yts}0X7S~ y]2QGoN6\ԧ SNlVJMoR1V"PqG%HCWzKS#ѣcp:0# *ྯU 5NvLu=zr*S,$n?*RIm4+&Qf_!)RPxJeGMR"X k̳,"ʯ}|mnW8)ǕX}oj2:eK ,Էؖ%=/H|@^42yfA wWn[sdN9 0:BN(*IdxKt=M!h{:|+ endstream endobj 96 0 obj << /Type /Page /Contents 97 0 R /Resources 95 0 R /MediaBox [0 0 595.276 841.89] /Parent 90 0 R >> endobj 98 0 obj << /D [96 0 R /XYZ 73.835 785.063 null] >> endobj 95 0 obj << /Font << /F74 52 0 R /F76 53 0 R /F35 32 0 R /F80 54 0 R /F15 35 0 R /F40 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 101 0 obj << /Length 2174 /Filter /FlateDecode >> stream xZ[o~ׯx)N qOh{ ,ɱPItD;3;KR> C({;C|ߗLjczZꬲ-ea6og_\ti,c %vlc9=kju?ofwyѸ[z΍y+ƶ\77dspay|k>QB)ULW_}?31q6*3Z&9WZO.dtQQT&D(W>_ൢWFwC$.ICK[GM݊.m]Ьԭ, a+AI1( O]S`ŅHbya\OʄpA@){-!>6;CNI9kD 5 DU6:Kx l#fֵ˅b8 1 A9W8얄&Ą{'zGc պ~K!IFι Bx;.Ͻw5B`O1RYfeQz:Em[ySc:3Rcdق| ǂ^ĵ,u$>+0 D4 eU-&5.[b*hЍ?䬣6ް0.fNVm$T_XGc@pR^# zƁ챠jưt҇!JXXwݐ nZ_sF!m=Z"[Ckh˾yt"Acpl K-wȚU#*LL)@?=[3'GYS&By$Y. .Hx|&J3 FK;dYSH좱c ZUYþ8zٹS[?Bp Uwr[UyWé#[41Uب7^/.ƴaSQ}\~!1ߖF?Dm2dBٹޝt-QPJ;>}ZH\m?WrvJYz\rk-JL/EYd;{4ü?*gס_Q(/ u{ 1Ԉ~Xd gE0[31xvE.Hzpkl4||M>_uCh7|x۱9]2ᴎ6='olQdxnӔN(87tSv>NUezL&&O`{,`e^xK؋xoY+QgL_`ʋŌ3BTAEAӲqO1NnB 1BY0Ǖ.d0mK`")T뾠EEKgH.gЊƇ50c^A*`~'Ŧ( ȊBHeu r!۫*a݆ .&|kiKا1q۠ezԉBl @Cz*L."W=d,'F)^<=2Tng?XA>qݣfEX掾K9S˷}%t^-s GMPtkQ1OR,Tm@kX;g_XaSBE?@23%GIF  3 쎬Hr> endobj 102 0 obj << /D [100 0 R /XYZ 73.835 785.063 null] >> endobj 18 0 obj << /D [100 0 R /XYZ 74.835 528.035 null] >> endobj 99 0 obj << /Font << /F35 32 0 R /F74 52 0 R /F80 54 0 R /F15 35 0 R /F40 33 0 R /F76 53 0 R >> /ProcSet [ /PDF /Text ] >> endobj 105 0 obj << /Length 2527 /Filter /FlateDecode >> stream xZ[o~kpx t&Hv<e e+Rw\fɡ}(}5~sx"[] Ucm-B.Ҫul?.ӥ^tWkrerܺy߱ߺSKy+u툂¶z \Dx~v(\XKJeϹx{} _Б})[7"Sz 5Ƶ_"E2/ui*|(<WD.R,_#.O0 kV7{\Yc_!@+\STR'M{n/!E|q?iH9o)~wDXw;hT@',pml+ =ƴk7eY-Kh9+ ~<b߫&e)'{IIJg9h,<zh7kࠋ\l 6_PE]+y34D8tMFA8oB r#kmq!:0KT5 Ce^={W)K.sr}\ȱ?m~lfv`s>6_Bc! ֳүQhoR(J8 i%rk FF9G SK8f}wX(0vB]wб ,:d>*`h!Ol[b#޴m@"D>R}} f3\Fe.K):IU5A 'ay99A{pv*ڻAGtr'tGvxRHp/=\O=KTЌ-fLG9$ǴDjjdXs [V1M72:!aɪ0vkx ?2 #5SV0/RTDD /'_M(ވ;;q G%`0SޤJQ18=߻2Nb6ONmH)4 Vc Xzdw=Kojn蜙@hcN<ŋhz}~,,Qy?|JVɂ P% ~*xހfUD@R 4\`Bl) 1)zXzO @),6M78wؽ&F=rN3 2}nCө8'E7?t~4KiS}^`ڵ2#(y62DA!w-y׸. uւ0DLLX<:WO$>n(p^ƙ$fpسyta>#sӼeC"h".lLp=NdI7-_*A^]H;H$mT48DML@:}̊f魘޳l|w m2#VYXJr3! OśŪPǶq{HCNC{/@F~\2XL6xÅ2E0;tш)~ػ|6V9=TE?bL)$l3h.C6XtuN*/( Ja6kE×ܻM# ֥gaF4΀W LC4Jpg&# #!& Y ȃd߆X܇1x]ذ(زVYC:RgDs´>kJIRYVA(ɶ` (>pW\C O;vJŔ(Z}`pxyMr tӊg)xC8x3|E4n4Rey( b=aUh=0e8Ve} H=t|JޫIlzd=5o#B!'K{., [+ÿVTJ endstream endobj 104 0 obj << /Type /Page /Contents 105 0 R /Resources 103 0 R /MediaBox [0 0 595.276 841.89] /Parent 90 0 R >> endobj 106 0 obj << /D [104 0 R /XYZ 73.835 785.063 null] >> endobj 107 0 obj << /D [104 0 R /XYZ 74.835 257.61 null] >> endobj 103 0 obj << /Font << /F74 52 0 R /F76 53 0 R /F35 32 0 R /F80 54 0 R /F15 35 0 R /F40 33 0 R /F75 55 0 R >> /ProcSet [ /PDF /Text ] >> endobj 110 0 obj << /Length 2032 /Filter /FlateDecode >> stream xYmo6_a(`5+R$%耮K6VZNwG$KIV A ŷ{{lInR5 -JSX# ױ#9Ɏ>^==)4+K),V0Mse&o{Yk?n'͑*'S޺6}EZ]2ʯ2], FP{wIh\-ly$EX&_Hvn8r| .ܵwGwoaǕܻVŤaZs_Ss==OF0v˶Xk_|TJgUQtbY|Ka}Ay,Yp8#*"Qq!٧$&9h|⻖|L3U3 [<=)3D*+nt"Evt{XO)gR@N 5Æ_FOUVxrNs>KLak=WԶ87 h>VZ% $ 4`@HAҔrsrDiޖtPV(č{rP0Æ8m2:Wȥ8UԌ s) \%pt 7X`ά^ $CV6Y Ϙ`efF0)&XÌMJz L ~jdC5j{(0aDےND"+"C>\%SaZVd $TBuEwJ@m"L`BrLasm+b:T$湇 昒5(a@v6@:t6HyP'=b5Ct"_蔣SWpRSf]34Rk6Pd4CfհByED R fR ق(=G׼]:LE L| P/op1+7ksֲGț%;U,{T1sBkcuGyERYB2 ( 4WL#]Ľ{u |X Pȕ- BQR| )+ zӌ<ud[M\/U J |Hs^J'o༫pGRG+GxGR /jlx//Ӻ_FW#y4]JdE]IQɒ $cjٺ2 PJ~>] N3UZ.}.8VMr+Q/?{h%Ln<:dN4H;*V?HRZ'`92nw'ܹ*d\obnE ,}5TBe2LBEt\.f߮\g-SNoxLGŞ2їteN'63+-E@۲M:-$B"Y]?Zz(\~5^?/]ҫ sɂW 鸃8 g#o'Z0@4cN ¥Z+6rupop endstream endobj 109 0 obj << /Type /Page /Contents 110 0 R /Resources 108 0 R /MediaBox [0 0 595.276 841.89] /Parent 90 0 R >> endobj 111 0 obj << /D [109 0 R /XYZ 73.835 785.063 null] >> endobj 22 0 obj << /D [109 0 R /XYZ 74.835 431.136 null] >> endobj 108 0 obj << /Font << /F35 32 0 R /F74 52 0 R /F76 53 0 R /F80 54 0 R /F15 35 0 R /F40 33 0 R >> /ProcSet [ /PDF /Text ] >> endobj 112 0 obj [761.6] endobj 113 0 obj [525 525 525 525 525 525 525 525 525 525 525 525] endobj 114 0 obj [500] endobj 115 0 obj [600 700 800 900 1000 1100 1200 1300 1400 1500 0 100 200 300 400 500 600] endobj 116 0 obj [300 350 300 500 500 500 500 500 500 500 500 500 500 500 300 300 300 750 500 500 750 726.9 688.4 700 738.4 663.4 638.4 756.7 726.9 376.9 513.4 751.9 613.4 876.9 726.9 750 663.4 750 713.4 550 700 726.9 726.9 976.9 726.9 726.9 600 300 500 300 500 300 300 500 450 450 500 450 300 450 500 300 300 450 250 800 550 500 500 450 412.5 400 325 525 450 650 450 475] endobj 117 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 118 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 119 0 obj [544 544 816 816 272 299.2 489.6 489.6 489.6 489.6 489.6 792.7 435.2 489.6 707.2 761.6 489.6 883.8 992.6 761.6 272 272 489.6 816 489.6 816 761.6 272 380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8 435.2 489.6 979.2] endobj 120 0 obj [777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8] endobj 121 0 obj [571.2 544 544 816 816 272 299.2 489.6 489.6 489.6 489.6 489.6 734 435.2 489.6 707.2 761.6 489.6 883.8 992.6 761.6 272 272 489.6 816 489.6 816 761.6 272 380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8 435.2 489.6 979.2] endobj 122 0 obj [249.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 249.6 249.6 249.6 719.8 432.5 432.5 719.8 693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1] endobj 123 0 obj [514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6] endobj 124 0 obj [625 625 937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.2 531.2 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.7 312.5 937.5 625 562.5 625 593.7 459.5 443.8 437.5 625 593.7 812.5 593.7 593.7 500 562.5 1125] endobj 125 0 obj << /Length1 2086 /Length2 13937 /Length3 0 /Length 15193 /Filter /FlateDecode >> stream xڍP n!nA0C-K.!;<ιszY-ݽ E!;c3 #3@DNX̊@Ajl BdagGM=P b `app03Xh5r01lAN"vfu@ pss9ZlrF @#k?|'_yo Z8}`ZڹzZؚ%ŞI$%w 9@@s z؃ve~eog0}0@r2r]@>^t/B`aX 3 [?f;ZtǏ?Oǟ𿯘IXVKCHߒsx1pX9X,,l.fQUߧc(ekjG'kC v P]ff7Kwu]S+odcayvq~ 9 -I9oh$n2Qpks  E;' 3Qqz]ߒb@;v`h>`/%5=&F[;8#_7`7b0A>O&? TO&"w?gqEg2d0 1 `}/ 11r2G1M,p]A!f%s#{OĻ]?^w6 ˻?T勇{TO_y[k&cy,*/rLpOu{_l&gsG?:~g7$s|o?6\{?{ rl]k rV퀼u5Bn {(4RhV;]Q`i37oGvĨoW_Z`ڟ g  T_ [)r\>(}wp,1_)\6E-Z7x"8sƙuv={X: [&k UV\r\mBJ/_IK^%EҡQEF$+|ecS[c8"e;3@m Ck.z|',Ϩ !+EְD70]~%-q. rR5|}_f5u2rG>຿𙚒ҹV:W#%3bN cx12Tf_eBrvC_>$Ϸ 䠺lRIy$cUɫv4)l.0^!h\U]bdTGfv]|H30S:xhR-l{Fl4DR-\| D&*zƒYΦ8>}-͈ŹT5Oȗ+7zLC[!8D߬m{k7HVv@?!(RH>{&Oz^HͩT.T +TţdkxD! }ЭH\"gҘɕܶ^(bb螞y]IO5ډDl;nA{J< ([f0meX8exi||i2?&6't~AI@?Z}E㧗/WKō$̀aL75zgf0XXz|=ȯ]~:.03i[QW HTz&$ ?wgsM!PXjnlEuM2v$H"05bDҷ1]hz8mID U+ִ-uN'vE̍$,|uP m=1 !urؽ> {*3i<0HA7&ؘ'L/:Ztқ3E];)~ 1ұד϶|& j@tET;C2Hw~F4&˿6=/5Kw?)[߉u,l_Q(4ʞr=wS*{.Mk0IL ĉ c̢M7)<PtW˜Ky'}ULpn6Ih)Tf$KqC/?zY$Rl2ΜpZp uN7fp-rPW>4Om%|}مfi$?hF]d:&?M> (FTEt*n8q5L[/"ʒC<;h CuyWjHC(J@(C >@W4ө?S}sN-"OX [zD!+A[r\KBD.GX"Ί+NT ̮J>Amkj'|.#!䟉LS~8pW-J2^4+'B4D;L@WW,@_eߌc+nI9e+jmxekg|Nh(eeLXQVlo@o~ї.HѪVXmTu'sH3 h\jz\0Lnv[4LN8m<{ݔ]B+A\jHy/q  YzD>8d蔞5Rȹbf񵕢R 0p=2OgG[ՈlG ;V!|L;qTՍ||=aޣ kZԯd'Ȝ3^gpUM7j֧:f h'!"k_[YԝyQLS6i,g(0aȡzTb^i;t[HeӺ =$\[d;k'Eρů*<%WtИY"\R0@H ֨jr31ðԠ̹>O&ͳ3^ejzxC5}஽hLe ѣ<,!zuFYHI§{ҭc!I5${KLM{b]>} ) /ѳQ*>'a3N M[%^B`ʳ4Q<*Ҳ?=, %l" Uц|Td Vަ/\w# 8l)?h$\WJz{eU+@6Q2o[c^Ap\K 3+7%:Hy-t[g;6rbRH6%jP Z(՟CK2e"y I1#ozGșv( [$PA;i"Q] T34!SB )]oKIyLU`+8nHŖ/> 萆3c}yAL NtilIwٷ/x痌|Zg%m^wм[z)4šr Md-3rǰ%Q;0$;ZO\™@UCS_˴lWh;}Q%o3m!l 1$*=$95,&((ߟPIt~V@ssQ,[1J5YEPUA 'zjm#Vu[{-cfr#|>"vp1Ċ9G]TU:\u2umPO>֙:=7)kb;!q 2$·4qh7 W\013irn{|ޣ-n8dyǦ;8s%j /|b m/\+#tFдBS6 d{x Db}5 S$v"EMHi\6x^b;j͜Gd7Q\]iROs-+t\=nkLǁxJT<,sf'_^ z)nOe2{i%z~W+X'0ُ( \:9HhQఇ&TB%O7Lg"1$ >9;Pr2B<9]v>UJ4ŗ算Lg4iN݀ }̼͑ejdp;߶sQƗom=eHB iz2}-f 3ru∸no;ThlA>bvS dE,N]9JxpBNHG5HױloE ?ôCvzT8[~堾M/=3V=ų8d n{~=ʗYF7,3w%&;ʎh}ݤQY|j hwC8E0a4ԡ*GdLivK22c].P`#~U~r=<4gũUq2JH[(<\'j?Tp-|wX]f~kj3%jfZC1}^Q Iފkl2BSƗPÇo;,])>t%z e\[FhGQ}Iao|ZIOi;7.-,Y3Wyfdg/&{oTMJytE%ٶ Ҕ|ٙv_." a .bů&ױOUŬy|~TR$jȯh|[iAH?K?cg}.['rŇHB|(G]T(yfV>Z%vЕa! oO6!&z I^b:ӥXgDܠƉj9 ?=Tˉ;EVi,I "8QKRvJhm5o+ :BN&ToĄNF{^։uРP{X7vkInBK})9 ,']2 `'Ĭ9|e9͛ "~C\[v;O&9.YLh=XX?ϑW:ȰɈ=bzjÒarpSܘڱ~6mͣto~BO;qHMgTTؗlP(;Z~Ԁ(%Q_>, %*ϷJͻ04 ̪卯alO^x3wQ2F*uR U1$,~*X:qRg4*c`L&X\د(g[0LLvto;ޔ]vvF~e4Nnz1UpD+|H|xϊ 75Ex?n!'_F~c%-w|'g]VgazWhɜ\MqosF-^o΀7Q|d_  ҪiAжz"0˕dOq bv[<\F)|zQ{s }%c!Wpn RňcI~'p.'Rfmɟ!ˢ!.NF!AA`D(V?g3M;UeٛrjNMGVΘՐUXl,zfxJ3U~]I 3] u QR67.;U6kWHxsPS'd f}|T\DݥUQ?O |'L)2ڪ&-ݔd96G H ZYw ׆wB/~D|p9mt}[CyR0f[^P9%Zh1;n³qܪHC\b;$\HR'wuJk^eN ǺŔw^ Yz.Uj.wl0Fr!%Ÿg3J գB18pi;Ejgc TV+ͤӲZ9+f ЪFFR-H4֦*_X5^|h"sw14gW"Ը+ My 7SllgXeFL>׌B24%~ ;Gf7g@^"o tJTHZdgDxN&L~#F'b $&ǚ`<T!X,% yH$T!I'Ƹ:IN<ѓҭxI$=U; J)) Z™ &`.K"A H0ߋ>zJU _($5}Yr:4Ԃm6#mɰ-;(.ndd@}j*!"9H_eKs51=o T˺R N\"89ϱh%r;h?[UϭJ]z}l6*ώak̓ұKVwI Q*>N LCSi40 _qmCopgLL˘y}tGxYB.gq^ & G@F?ݎBũ$^ 9#:"&y#Dܛ(aKIeHsCIHԾ,ml=[FXąqJЫVZՕUOc0"C3'?AEubD"NI\(akEONpM`u]₸aBCzZE+%W_3BrP8:1EtIXw pz0$3l գ&#/\CYf6 y%Z QӤl~E$#&nr=QY弮d∾,ɍPahK[O0Pa_BXvXݞ3p\z'ގro1wWړ82I{/dژiweV\L,6C9R՝H6 v?`qˇbVLO H0ד{;Wy>hY^U#,A oݖ7AMJMI;[DPL|#p/Q\u`GMq:ip{˥+% 9rod(YbL~wtuafJp +bFzkXfwc?=жD:h./|Nƒ(*ao?*Ŧ%]N-@5lw҇x 8veD+Ru_1Yc€8证 3X+Ӓ=/!J49ټXU[޷973f7bupe|/ӉoE0xlBߠ!]=X\WI qXrt}%Xъ+bNTeg5U+n]b"Q2X3I`vcĨd_ǖ#"5 q[7薑m?b^%1!"n P`GM!Əq Lk0U*(H1`W!0Q,u)OoHx0Ǣ#daqã#/CT;CRUQ1 Zl!gcHW}C;̚9OM(2u1} Y@:+w=_"&HXn]uwX&$(g/IoANL1!W5^MOg%\~hd*Dsr1gR-ߎGRq1RT (.9i}0y @+(xԷ5 |B׳UeUyW@lx&8YN :H5'MbcPұT%*G|#5}p#͟DCts˦pn(̄0[)!COX{W6j|Y}* ~!¦yr_Byǥٓa=ptd+ְ4M`?m3ex[ T"YT<ݮt!I:kpYxڥQۼŔV(2)=(D7pFxtl Ȕq w~a==L˖]l9{(iϪ*o;;Q>4AbBtVL`UF;1 ?ӴT VF$ERulrR-fÙc'V@54q:ݽg+-g%gYpgZؙZAn'EEDj({ZMV,Js[cYy&[?7FBTb-^޾UEV[+fD"rdA?鵻Fcr߶AXϲYCm^idL[ Be]g7BHjhc']V3QzDzfmLu2mfBR'>Eq! endstream endobj 126 0 obj << /Type /FontDescriptor /FontName /BLYWAC+CMBX12 /Flags 4 /FontBBox [-53 -251 1139 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 109 /XHeight 444 /CharSet (/C/F/M/R/S/T/X/a/b/c/d/e/eight/emdash/f/fi/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/r/s/seven/six/t/three/two/u/v/w/x/y/zero) /FontFile 125 0 R >> endobj 127 0 obj << /Length1 1478 /Length2 2341 /Length3 0 /Length 3276 /Filter /FlateDecode >> stream xڍT 8T{H5hP\bYJ[(e̜3 3(7kJhFrJHYBER7-~|3s{;n H]"`XRm݉@zh 4fC\;% M \ bD}hdB46!=L+Z08 |4ƒƒX+I$1v>0Fs948Yb' fil>ɧ 6N(. YqaA>8>Ğ[?W9g2̰r8 ,泂x 9\!dB09#(@[B@`H I"/~{H8$ι-BY ӂA@ BhDȂ`d~ 0~_߼10;|ndŝF-," 骫#cי- ]=[H_v@oqjh.G #a4h~>!< Sos$J=\@Ɓ! ADT."QSAgV@Cdb p/~OD }癳xH 6\>4A hǶdẻPx4ᙞ!BD P4Oq$@V \zfI$Os[Dx;Cߙ;s g3By A<"y.!/ ttG;g+̕kvNm0@'{qՎJ[ӭEQQQc?ɢTNMa\6Gw4'Ԭ?u\) eH e[wmOSNRʪY˝ڵH uav1zRNJw4:UnivҥÓrO5 eQ56xWo*lN\FlNd*鰚7*rX1!C!j_nYЖw3:&~}TXhէxmθCd dIϘCv؝UHRr]+6Vn10-Sm*Iʋ~<Eٓy|Hd ELO7޾G1+okؤ^ZwUk+ӻYӗ%AGc~Wg<&YG.~֜-Z͞Ik˚-*48W8Rޝx{*g\w6-Sb߅r#I&`vrN ^^(0Ƨ:בHsҮ4,6{P{nsri&,ݭ][ir3Wu:O ס֏uDԤ%?̈́MԿ־pyED5Id%]/__0ҝa})ڌԈa V _"QX;ή>?x6Vv.5v&o~lGw5Jli5۔(9^R~04/0ER֫IY*w}8ЬZӯY,qMD9VGl\h'|1\4o $㢛Y>MwF{122.Wt~b/Sd;](1T>7n)VvYt^pXR@8>|3y}fSvpNY|M#Xǻ3I3DflК߻g3ήjU:WK8I޸Seu#e#uLAPJ`j y6( T0.Æs+֝lqF5[bG&{?[z'{q06%)pt.|gB߼\0`Ok?r'ùp!\{{uMw+ՅG.#Vyԫ<@Dmnz~%>˘S͙GJlW:x;Q:$-{n=;`[bG-jǬlOpViv07fXDU7>Hewj cح?95|hw<#MRMcʿzz!ϴ?;er0^uŒkʱxmoYivl/󦟜n`DGFcrp+7SDJ[V: %oBhb枖oӇݻnDiG-Tݞ~!M$^@nud{wMjZiҾ>3%{_ VtϜdOmOK|0Sj"~g{++{=kq5 f!Q를:d=Jrź;zL@,zfā01qUYdgTѸS|TiA u4;r_Gf 9Κy+VP,uMrG6K]5{5 k?:&lƪ'̻A=\N6fZYhpScu#^m`@Օ̖(.&LqiK|{3dWp,&Ъ$WX%xFEԩ8(4th2xle|56yV/E[g}<#Y]5u܊\48hH&d0)Ԋ*\;]/fN=yˌ/*QϽdNPg:e+T5KJmSke){)ű0GmCm9vLlG6U m:/K`04Mޕ:IzOzljyx'>}h'A©kN/ g"'|~6v5q5я/.pBآU+(>}?_'1/pYQkG:gVd = I#;mp)M{ɱ =soQ7'r5{r=w$(瘣½!A7/8]*2 +AO{#Л\nI> endobj 129 0 obj << /Length1 1421 /Length2 5943 /Length3 0 /Length 6900 /Filter /FlateDecode >> stream xڍuTl7SZaltwH c am4HHt#!%< !݈y;;g3۠a*($*ji $`g7D``ah _h)A8G- "`Q (BK Pa('4nr<04 A X;#"4@A0ǿRpHaNnnn|G  !v@}vBjCa؁voAÀ8 Cbp!.H4P85;4'ݟ蟉_(Az p-QúcyOGBkïC*z@|(a?1Lk2FCb1SBaP\= [E ml°qq7B"]`jJ|p*?:8  a@;ԎgC'/#  la b.0m6(h #02nh; 0_#715| (w + A"@QyӁBn'}#qC ?{ w m0 ?7 / g'F*.;Gh,n9PA1Fkl.mUBpK"  #0*w. M@tQχ {'o[DaU=PϝBhG $ @~>$ 0mQhA?_8\pC]h\_U[0; AA%쫂Wӹ.I]In"ۗgIPk6Q2biߢ=cfk鍇7^&U8o_⼎YFHe'*0J;t"Zdm.RUnnn(JӼK/ps^[gm$|H}?s1:pyxK @[9\WO{wKl!Xrenz%rH3 ]7^RxYR*5f֧t+P0O lP6\ɷC% %e~a ?󲑚Vk :>׳p#ۮhGyPS^>,e{ .7(q*8I=#o?9X18'WE;"zGo żZB+ 7Zs~&W"ڀO5oY+mGvpC}y}_KvKcevqŸfqvn*~l()bGaBuy4=ԙflBDφ)KAADEܓٿ9UxI+f'EAxy 0[^/1mܬ I'YV[%`hbI(༠(K0V|A]YyB Mp\4͘DcS6)2I 4{Th6 dUV%-R'mݮ'Lޯ*{`L:) *.#uXo:~~ړZtkB}i!#^QjxXDGeW eИSSUJ;.v:V;g Uܳ Ÿ7h|NK0g X&It]+P9ʠ!?B,@lk씌/ᷤ?v-bvbϷCFY)Z i¦-6Em}Η!U}qTJ[vJHvuB$$g>7iqfi]Eҟ*0?ojٽS}[sWՊO~Cc200 mFQ^EꁝV'p2]?mSLN"[`Ew[t5:qEݾ ZPe™<}I5|zCNTLtmd|1U/U_UHq O-(kO.|v)PPrl^[dn L.=(Y i\J~Xmg Gf]l3O=F ?!y TWrL;0<ވš. p-Zv{r,c v`zX@3S|Mغ #4sES]xVrO6Arrֆt)G^%ye;v9e- ̹VA,FQ7E.$pjٴOW^ X.)QzPi q}&i>Kfֈ; J_ao.Eq-'kS2p6\|6q}DO1~ru7]Fo|]wzM 4]EAB*ʏ(`4QFy~_R}1pY}9\fqDi}'96-e]ie71\'d 7A*$\e1̓VPt䆞;k|kEɤ?rgxBς"*Lѡ2S+1‘b66cNsD D`wtjF>uWۏT*Z`"8 =Lw[FPn.v:>?4[$b?EZp\6^bDM=2NވLQ{+Y.]_>O{ NY kc4͉,R$*kE޷5=~^`xB3c1KdTKFSxlB354v\HuyAŽ(aE#L*ָؘ_#5*6-a]TGkY|D_/[n3O+ Z]ocúY/j~,3^Ñ)؛hڧ}ȨVXTo4SLf"_?:񲺀F_&h `lQqUJ!?/P~mI셠K">Ώf~")o=*$%̟-q|{Պ ^]tS6@i^oW#`xNHHu!6(U7;veܟ`UB_!,[R؜W~x=BYǜk; u cHP#aҖ?f `倴R2$6dkW='2X~o" ³x{98\}KN]g`W pZ~FA9F/“{J<'@@ Bq&*ymU4{I!YdY 1=|] :aNJڼ>(fXaT-L*iHRq~6x-[߲,]S+\/T9u`͛]tq)LdONvA xLv[pg [JMzƸ1h+{EZAMy Q }Cn/wxN_ G䂟5I|۹q}9=^FIv/"άI<x4tU381 Jmȭ`eý"T>az:qsU&kF7~PGKfծ, )ۨ=LԽ?\(DiVkퟃ m\K!n{9 Xrk~i>p/޺Q-Q ^]*a%ɯC/!.+aǬA̶MdsxFN>&  p Naam9}L-!mkЊyt^9%;7EzV헱xaH\B/MN+^1ZUVG[>m S} brRzI+@!?nlGD {xy[-,UX9fsx@gc'!NOqWˆS~J559䳽lܢ;٢ҫBS^[f΀_IҼ2*xN`lr8bx3lUmП5L>M:4Hn"Q`Rsejn%4Ɨ$Rat%O /FbĂBmf%t;nYTR:wn2W%\~~L8%oA 6Ov-d+ ݒ:#]jZAy+W٩ZWY<.l\p{1saͺXr$lSrnln+٫Y^+9f9%ه}D?3Y%öLS0AEdxqPP/8R0ɚ|r+3k3>a^k'w^mjk$m &Lz^K:MOjgힾ$=ƿs L-;yLu-$QY/(Ng6[ [G؈MVVT_WiK Ql^rJt gƋ`9\ݒ88*@{;&%Sө{DiJQ):Aҏ_"i>:,TCdM9؋'gYw͟/{Ϝq|(˖.Mش&*keQ1Rsox-8 M\%gύm~ڹ_QS4!vJP*tStx/tMLf6t^2wdW$Z^[a,5KKXg3Mɮ,b1/1CkXppdvWr?Db޷w=.U1Xl %,&8!zVVV47>!RAe|+2> endobj 131 0 obj << /Length1 1748 /Length2 12856 /Length3 0 /Length 13967 /Filter /FlateDecode >> stream xڍp$ Ƕm۶t411'3mN&X7g}{=/wZUMA b` twe`ad)0Y((ԭ]m(4.2s~M\?n6 '/ /33?μqwks#@G!lmi?G Ow`jhfb Ps0z5#/ = t:$ P4#@/3!6ڻ|xٛj2%G_  `am (I3zL04uq7q7510&IGblbmGL|TY\hĭfeb<}$aȤaoC_%:fVLЫ{9T!`b:}}_06s-!Z?l c=Ne`o_?ˤ*!GWDE<> VfCq_ *X}1[8xxﱠ{ehAc>36BnMm6e7׏PpXkknvW+j"Ehljf @e?Gc>}<(.Sا )ao`rpLM>Z8>,jsL.|pt$/`/0xLJ nvIbb`1s?l>AloX>V / `d0Y ~[ ~\_#0 ~r///Q=T?z~Oܜ??w죽@' ny/Ħ6F߃aB`b_+gٹ ::3hN$iemWVx紥:gJopKSX"u _>k~o픥ƍ'Y_:rP)R6Xe5Z5ʾr$@^& #gR%V(tlGmw6)+<3u9DӀnzM#ݾZBB,Vzk)e`]Z@ $HP~+'<ff]n^1_?_V6\*vl͡.zs*v\^ZIgQfHt݈R61]nUb1zp,] H/V Gy<3ҬhʑBw0~8$sg~sW^.jyxY!:C5 E)MJ$ ~w֔\]ԝĮ)YK]iwŃLFpY_?xa/nM0֗ۦvjLX̃Up2&ͫ7δf_g97ct 1HtziY;/7?3" M?ؕI2e~\U`E1o_+>*0WŹpn$.?sIpgtpNi鱥F|L"tEV"zYg5S8em*pNQx0rccin~ }8ni8i[i{˧y:'J6hpF'/-s\+)Jwc'~?Cz'7Wk(XQ[.b$>v"7w8cd霄9['q~0szc{cwPe*$c5v+jK  f)tȋ>ke@(X#oϡvAYp:[S-Ps#0DG=&bT೧@Jew7Än("U8;nҚ)[3`^N}2N?ML`ͲmP`%Qg:/Ł^&-yeW3OMsI^*& $$Gu!OzHT_lvD=w΀? M\aXNs@$ټv͐u_*zOFKCٖ= V!4ED |5iB Z^n_a5cJ +g1CLx>@MhkFbV^~8BoԜu5$ژrH OzS}WcӨ&gc@lo0:Nn1 gl 6R HSo)m ΋Zgκ+[eY${G""NJ@|v4oQMgG pCj|( h%Y~8H }ݯeҧAKzi 8C̩.A ChZ,R6ovb<5nVPH ȼpRݯþ-0:|!Ǵocys-3&/>%W}/d.6P ~)Z&ok4e-(7i= ܥA*QL8T8j}S%aBAog5؟k;4[۽2"ϙn O8(n%#bbِ`b0E0B!z(%+Z7zz{>RQȸV/$:SWY؈D}|Iڲ5ku#CEQqpAzO9j:մ3=Œ!~s'oۏ%¨%ppyg7oїr]T *2[{ə]z%4\}/߭&~Pͭ4^Qi;m1'bP' ~JlP$l\4acun,_ojR s! =7K*?/$k{MpڴVK Sao^ 0$bbQ>f0ZgD[.ʩ wshȶ[2깏,&J܃jEFs~ ϵ@ܴ.jp%Xz,@:.W$'g0?5EJ&!o>*4ыxPdZ륞oUhEM7ö>lKDڹO +lM FKߥ*HzU; R.́Ī<Ov^U4 6=wZ%Q}&uFuxk9!6~b\DBǶV"7<3n/n':"*[Pn!,>Ds)lg\!^,wNF1}fء* h"iehj5cLT3u^"'q k^# 'xd۩- <+1뱡)Z wB gy]5OU'OT-(|_]mXx)pNf YYz`jl +#!IW 0D?*Lvr\Z4K&ɕ[-n1}K04$:Ig' $s20s:%9rGfgDc2jP,ٟVHcz*aVe: A~jo^&e)>"ilPaijZ}%PnRQ&ovlZ@} TLj8ecj̝'W$/=#g>yPթ&GKVJ~e:>jÐbe ']^h1Y4՝*`Ўj\mGul++AvAZʍH*aٕ)zm+flnJgqA_G(2K+r§~P G%Ù);>rV=g 6 MTk鋳4gcB;޸s"hBu@+*)CWz &e?v&yaqxqCPJM<,v< dlP8d|?[uAטѪCZ;qq7YПy` 5v{ QqFqT>`‰)k2h1Rz"xcL";̄!Z$fpX9?r߷B:m>%6ٞVH&*i-JؑA~r(BX`\_BcksإLh뀡x̅WESPնlRؘb 6qدnߧ{ѵ֛*h,مY zHe,^vO9j3S5o 㧸h nҤf,"=Sgbu}U_GFwE~i43rYq26IT/)R׊Q5 *"!̲ȑ,]ADgK+ mb>9{U*w_B TwgR tX.Ro[LͥNwVD!⥮l@#%aA~-+=żwmֹ生?}Ŝ#ԇD-p^R} #Igf&oB?{7K'K|  Bv|WJRa2$k%f!V-1E=_hv$8+Ys#ӠMf" 6áE0wJ^ ݺ4RJ̵).!us% Cwxh5u4V[Z P-MVqKu`4j DSbucT! =swlm3pKoo:qؒ~F1ٟC5P8eB_x5xhe}fI}0a.4V$3-ǖ Bo7KFh$Fp#hf>yT]ZGb:nېTaFXA; f8 2ɁKqV~V ;({^{| WC, (k+a[TgWg޴"VETIpevjԵÆez C-k wLֽ^3(u}dׯp/*!zkڼA+Bftw[?`[D8x@cʲI{2,ԏ MKaVkiPG4 $Ε:ޅa)|"2bLp 6PNoQkL9v<@9uB}*2)>'캩1 ֥)ienjs=aZa4 oC_vr@ X)UZv vjV}̋=CAO`x5|G}9 nvϱ4TU U# ^8+ISD Ě(\B[ 蚵LD?Eđi2*ojћ =XgYU^,`IcAf@\֬w5\piUϴN(EII [k<0ɼK3u 0iV~n:jy{ 8}u,WkMM]A_јFi.o=%Ww^"\2u-sJDSfxQR4%qMm/IS8(LBr[tL[A" y6 "%QC'׈{3ЖElb [X!DJ;Ar#G `}gUz;9Z~!ް$ *i݃@.)}HirײvsGްO=!$_q> kvȩ:ܫ~_T\P O=ᴆI˔G5R2Dm+ [Ϗw?1I_BkM@;JݲO [p<0U~$h9(%H+˫F=ïV`"'wݥAuMkepd++i1tb^:sop :tm()_( ,+ IIoR\bf^WP|ۼ"uМ*KքU%9ֹJʤ`skI[(r bz0")ݶ4~ҹ+Q[W@2/Qlt>|̱~׸ Vǫߗ(yvN|XŔ?ݔ5MJEK<xױѧN.ns0 9i(pa֩޽[mi{]z|{H376k ;wq?]/I:GHN"m Ku?P+Ǖǯt:FG"s4sW4 )94y;I Xrۊ'LV#Uz{U~Ԟ|C:Up͹wA*eW:̀!xT{_gqnhIK@.!Αb8P[,ۋסAXr}݃IĞ6՝o9 3TA$[69y7N=V}m1ݵnrNboLD⿑e~iAh_r|yۧ&Ãvz4qںY,Hg ?Y_/|K".gtYDƹlGB ~Uag~*ZuBdŒ ;m`)bQƤZث[ʊ]@ިQVeb~~5jt8/ KFdg_B,me 2|YTJfpj2rѢ欄+UGٗ/ylLui +kdQA.z$TpJzH_5 #Bm!$il@"&L:\>DNDoO.p}xM^ ǨPe2# Hy#ڣon牝p!EϯuRm|V%5Mov$]-yR|;OlOJmiO`za|N2H1!o~֧bu'6Æ#x46Yx.`_E'oGFsUלo6 QsҨ3gk<4aSSh [{D ꬐Ff~.=*PM82}Vb ZJg%ݚ)~F"AJ/n蒰&?*MsElu3 kvwoAJDNﰿt̵A'XTŨ%~}vrGN!0-̝FilU)^qz8‘OW/cTt$و@ijeڑfcM-mgbc349$PT1)Ԩɷg߸o9rGJ(C߆M6eHCt`Z^?jGn. 39PwuA U<펿[:>͠DZ.a.R5rft0C1s7iCwon0eF@¥՗eV^pI\ċ>4X y#G #T98F: )Û&W lBZq,kVGՑ|2ASݷU k$g\uicR#I71}D#K16z&z/c*I *?[wʂ[ߞyhZ/J6A_`:C~3ql$e0`(<2 єzLT8> #\ ' 6y)NIo!N})^/ڥAV_mP7ӃF/g#iAXѱg(>575^G~b-OwsJcR:[R+0ms{&o߶ܫKSJ2KC'c*9QRLpClgm v]Yv#sV>;!v5 BPcd$J~u]f}#ze栓l|X0][{ϙg% fC}iYTU)[l) hY=NuOFҁqW=uW'AӁ&L z96=({<݉N\xUhA9H<#k(ikC@%E9CeY YhG/FtDqۜE.LawU@=7,.;+,4JVL9Vz^ZQZ~0" `MJF<_1Ycȕ] %X x9ik;FBݱݽ m80h_԰A{z֭P_zhqL᠖}y;[Hc҂vH( I(3Mg(n.md`/3Z%k5K!o"WҠj v3S nH Cokp jԪf2g?<5H)SItM\'O E%跗#AâC. օE8-a=043siNq2ՀaLR4J>ou7!%>t+Fi$DugCmaÑ'MrBor`ӯzzjK|Lۛ:CzWyzq3fz@#üݞ}Jڧ7@] hSaQo4\Q\\"ftoyoo!кYGqc:l8٪q븭H!~nrǛ~؊)܂Nvy?/tA_|HA/l2}֌B,ʋ3nF~ŴJ5(gv FCrleNw1"kmM/>zd).&8B투 K2Jv B41iw"-._⊌I7r4(]*dOaGDXcS aѠ|M2my{/ 4 <>VM_Pcj HP7ф'Ƈ torN,V07?Z k;ib9҃B XF_iʺ pߢ|<P|"{$gF஼X .q]iB-^c-E"8"o_\< FG72OT%@;VI=>1xվMYC]4-6_G^="],vxџ*D&4Nf-v3CZm܏_eP*kemOadwIC A` sZ5`E9cDWd瀞%׭ D¸%gl}?])ma։M7$;7][1isw77ƽ*>bH/עrMڵ:FD6сx:I >EkD;kw<{-5WdRlOPBYfuBt^xY{m%&u\[$9Mi ԂH.yLgE7oq 2ȕꀿR׎Dxd!uh7SQ15NKBI(>bOA?]$_rvKE(IJ\{i^"A47OKaR+91 d2q2Y vэ${7bjk_. kIepsnGWT;D\Ԟ>aH8E0XѭmDT3HVzq_;" ;~)omar r!ٮFԮB]Cϗb7PEiJCZ>b]gĭsWЮ9r',yod;Zm^ƌ5T_`-辷dۦ C^lQxONO1|ʿ"W"wˋefA$X6>5 s7L0r#5M7{]rj@[SI*bs;*wb@}liYvWd10|}`L$x  LcGޞ#"7$DQǓJk \:dGv t,6 endstream endobj 132 0 obj << /Type /FontDescriptor /FontName /RFUZUK+CMR10 /Flags 4 /FontBBox [-40 -250 1009 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/B/C/D/O/T/U/a/ampersand/c/comma/e/f/g/h/i/m/n/o/p/r/s/t/v/w/y) /FontFile 131 0 R >> endobj 133 0 obj << /Length1 2423 /Length2 17778 /Length3 0 /Length 19187 /Filter /FlateDecode >> stream xڌPwEpw Np-[ hpwBp˖sWuoQst2!PƉ , `ddgdd%#S1wk%S:8p 4pz8L,&vn&nFF3##m".Yz LPQ8hNZ̍ lNf@FVe[#sPP99q30X;:Q\͝J@G `5ed3sʶ&N@hlc t(K6@ 7&zFFv66s+ @^L͉``cW{{'7 * +ɑ/ ѼwYXhDFmwgg66scD;1ژ;%E y7l\=fdo'_wޞvvw@osXOG , `45n߇`f|=&_?O}mm=_-Qi'$dca1189leh۪``Jژ޻pw+(1T g@hob{ 1g+ݔVo}67TM;[_1o݀ NFfNoenTu4112}3|Og ~_``^llO j t{ 6N)wy[ؿ&`b0F߈ qD8 bA7b0HF,轞o^O7z'_^A7zT9#VoΩ_ ~ ѻ""wXcaebm;y1u3kgYN66p4#]oNad C65:;Ab|']}fvf@?"md|Wa|oKVZ=SmwX߇yOw2wKY:OYOm17i;: IezoywZҰtl$o.B289p'W?|,{Ř]ݵw&?1rvx߁'?O=4]5dQq_#JwlO=sɡ::3`V0iyuGF`:-AY/Nizvq shX~NE`K[,ޙQ!u@ܭ~|e7$)3=QnXOn*}>lzj`\LB /1`[ΘS["먡[Ra1!W_&t yMѴcefbt_Kۨ!N`<ˡ~8O`X|)nuG'G8pܵFnZ v0jWj@ s\3 ,xXC`v=I~ 6eH9}0ԗ.t6#$.)Hjxނ3MoI=.##+G rP'~j{ӔC(6>[z0P/gl7v-J9w-hÌmhteuhINon[īDJ~ z@NT7~[G.UN3У p$`?6N&R MV3Dݶ.Ti+דH}-S\?OZf4Q8Zj5绕>c ü8KHzmաEF6܂h}޶PEKa{Py-GP0^㻄>А="B+o$9= -UN '+e<~=/)`H?{ƌ®rf-eB;?rE|E;%@KclN,5y+ݢö[0Rx.Ըr=@mF:+U6!kCr7ǒSR9ǰCBA3kҲv;[Y?=FZ1| p=pD@9e)mbh{^?T:'-k>98h D4;W'ER$vg1%{g\ղj5f 3uuþ*<I;rCt5k1c;D [n-<[a\N `6g6fc%B 1H>r|BG`)#b"''/v9]h{(/vX_j( 5]9@*@؋P>$'$"Ӥ?nZ]c\Q$O[R7QVd#)-iR~%(E Z0Z>" 7e`4U~AO6{ɧJފ/ߒdʕ׮m"e˩1 `X 1;`PYl C0#pC!zc qĨK[" QgܡSL2B5$Ru=W-vXXtR(qZ2" M%J,)F9($r@#!pBSxinnًx|۹<%!PrrvɬP:L@ d0* ? qL1= '^A$]7!c#ߣ qp/BTuـIӫ>q ;|)dv+n eRL-]^D[frZa^$0P7Xn]ڤ"*?g-7̽D\ =bGәM K7W& RZ/Wq}?nh_05K a mraMSB7 -g.;qb!{\Kƈ%ƧwWubC}mC[UAcV2)s`1d>$&4َ>lP$WTÛZ{C(G(idHIS7GcJXdqcoRk۩.^*iB%"Wۏiz>IƵ8Ǒ 悯6 >_GL;sM6﵏E9ncLa WD;aЎNWr`=Lya Y]Gc!JԑArq)j.hF/Ca!"s(?i9Ԩc;ݵ@>y?_;D\>V|x ]_Ys&b-&֋pm;ZϺ%'G=iAa b LBtH- ͮIa_i m r" Ѥe)M*i4RhxlMKxRܹ'6~\s$>Lq-sʍ8Ӕ;^ϐY=49 >o ꝳE^* ;j;&A}FU˺<)Jl.tU{H_CwLsq =w%HX(AsL}:`9c~wN Sz~TɄRM RZf7J~A i!K.}w|JR w1T3=u[$:zLF;y ڑF`ĥTsml-(KNK.JxIP9]ssSRLE=G]]B3Nu?/FZ}~[ˌrBH@c15W ގY'+\L'=KaPwΐX5a /@r7ze vrǻ?CvN_r WȔI 2ܢd(<X 㢰M&^MTgCEKI%v*|NV#w@dsdٕ::A)$'<,X}s2,3}|a#C?騶Hƪ=Y<֎#PCD+W1WmjeE*WPKAg1]Kyir鏜gh)JgQXՃHsU= 袚J9Q!˹i^;Ʃy[YpgH~2\y*=6GmV×}bߗ}78kZ]Rv,AY"rMhn6^װB"L-Jh, N \X0WZpl$Fqu$i~[23NBAR䨀9. )?n?4lEOAIׂX-$s'qR71S1 KoU+\_k 4QmwoSߧT!˴d#ԭ[;Q5A ?J7\Kp 5R0)ҝ%Fsg'EWKSUˠ\6+;AIJ(L#h|qDF&^)\N6FTL$=#, tH kRuȬ)ښD-70t(QIqqE%t^e7Jj0Ƥ(wU@ܜ'dN= #aه _lH6+@M?]uץl>Wygj{DK77^J>{I ?2ӡhFȑ:#>Ldo˭-a2ƛ|f> +* `}(}QsE7K`$}{{dE/UR 9r4@jF7Gkc .|#q}<ߜ>c6J4 |s|@x S5E RB2sxN5 b~! !6`FVY*9;\ZJh\۲i\q{͉ j'o~vZ-d;-%" *{#-<,!$@i:<եNvu|+`$ξ(L;ηQ%B>: nIoc챔: q*yRڿ ج`Apn3y\Ar*9h*wYm;mJ"-8$RW`EKktHZhˊeT=H)S &@)Cvz߸PM٨oUkJ6tFa:︍ܟ闏I_y>S - ND_Y9Q}/v_'hm g;<sj޾Ȳ&CŔ\>*|m)}dD.|yQm=lTP "v"򚜏!) ӒㄪXОp |  0*ØnhgyJW v5uOޯuZܬoac3k }פ]x.w<< WXA1FF4wFb3Hn woʽe<ɋ-!"xxgA @̣v uqW)P܃kܟQFzl#BDi]6Ƥ60Ģ |Aտ T褚`kل% G;]-}s\ V,c$4}N(ʮhp&4ǥ5\(m-үf+{JyngyE`91|:!j4WdXP6 (i%e 2.:-qfiRIh. /TZ/ËvRPs4ȗI/ygwuk3ӇlY)͗IAoM f j "l$͘=M I/Jbp#dY2+o~z憥O8&zyl>_&M}<aҞK մ\ N9\<0ZOq%M&ե"S i63efx"/a'뛗" jqQf0U.O_2Q3/$rz5##\1~efÕ)W!8k2%B |Ab/ZӟLWs֕ ޤ%47c{Xh<ԉj"d$p7,^~73N4_%Bh */,7z-ݬYyx]՞f67ĝ&0AކhE#&BJ=djݸ~P. h*!xܾT֘zWO= #`ίNW]K$ϦHJQNNʫO!oqȌb9N[mHP=~ Vq`bψ凼{s&N$A%+ }/79*W mBSjN Xi<1t}A5y@ j`yF.85*~іM 29P%+u+w'1##̱|ŒP謰k, ի%%!>IS*wcǏJͩSW:,ʏ-;lhCi+D-ߋy`FF1Ȥd=3_zA\;;Sa꨷~h9dxg`9 Ϩb`Ay]D]=䣗!k -W!~M+Ȃi%!mLeꋍ:jY tTtBu΋A8HHxnrDͷ >4;e:"'4Bqߚ"ң]{D'1B7CzXȚ%~L&x]_.KH2=)DAH:U|XF0myfbbY)7sWn m~ og|>~Fk5Q8S8&wxkNxcs*yzIеF$Q=3g4m}q½/%fOJ̱G=g=nSF V~+A` ;0RO?RV9APU>q{N!_.3wl啺g/:xxb+ Gb¹FbzHy qIqVлNG`? zEx a^ckTph4Qjq!gNe4QbV24׳7ICWuUU䀥Zz'c2&@nz@ ,ש'(y [;㕐7:oyw$Tw{̧ K# UOU&u nXS-qA!'\c4Mn7tO"κ?^V!7˔w͚bz UaalB#J4XV|[F"2.,~n?6A69_=.Zq4?iXBpsw#9?8o%Ll-m|vg5[> q}XJe#n!eGDD|[AY}&3 0p\ދAN!#,S6YL ָK&^^x1CQĕ[`|O؎ZVח 4ti" w+mSF憼HI]6iOe? {i}A,͗e7l2_>4}-ձ}X ^g{0e[3I-/lJlJ(#DVrs*£bOeJ>2GS>du妒Y~]|vO|I>k4g}8]y9 ^P)]dΦ.L1?r;ڭTa q =9jONE$ B([T@56v)Aơda(#xNjLuN]/W_< >Hcd]Bfц7'FPz}z&k5. !n-99G9K.d'jy鮥5)jύ ldf$ ~a}=^(1f8 Y-Wo9쌒EKˡ誮lbʬ*$-Uy]u>GJB?Dy=̀}NaϚa:YϿ.9)Иu}tRy{8ġaw}2"5Y8O,`mv)M! &VoVMeP^e,._rL}$fpN¨G/rjhЩza+c!nӽUB+ktR2"|nbvUOUu;̛:'V uRbx`h2Njxf%̹ m\P$1#5HH[_x~"ݸZ r Wt;tD'a}eQNFeV W!+k0!mo&xNq[#=3u͋l^Jp_WvkjQ.^K1IΩ%$xfc[#K$" jPQP40 c@-eqAiMvx]W%ۖUt0)HRڭ;0 z4oMn 3ľ\}e -Q# ĥ &8tQGv T=z|UQZ&x:YaTw> Bփ|Ơk' :ܦN<}gO;k b݈ڂ_{A?f Bbx+n97h}p7K啼 {\x-Ae}pp#T;[CړE5/IQ=Ӯ hlTQU-_snDSuj/nϪlPć9kޮiVc&i4]̏_f8u0:]6h;'&?6~WqÍ 6U^o9}I-DžH}.uR](u "ˇ>К.CF!_E Wo sw_>yb yNS8Ab^+sf k{YBH^tT-(mД'fvzKDUɨhϖr˚9tHڰ!4 su _Uz ,ydrY!mӴ0O0I}.5y)j!=i. px^?@.* =m7VdѠ,bt?yby*ԛ #EJ/ЌkwCxuIlH0%T.H;T!Ka\n tE2UݝV tjXJp_#]iԉno 0bӢT;x}(;Ki L<uSw%&lH`_]d܅FVJ4.lN0kIT74рiWZ~7D'Ma!/u9A- `E{ld=0f[9'1zTA&*FdͧFERlo(Z}>~':e+*|ր6c*M#zÇ_nGL1yZi7N=>ǩXp'⭿ӫv d5|+\ުcQ9}M կWQ(g ;Ԕp0§6*}Z"xK3iWVA1S/釕}ZgAtt:*24A͢{G2m /Mg=^ 1ƭg/wQ`Sf@1jIKRc)0YYLrAJvC +@{*L/ ʨ7Z.[j\w`waX'/R ȻTp8:\Hwaų!6F#W58&*Z۫G:n"Oі GTTKή$ ӗA,a~ %jOneq0 cWFqnTzr, V#%2?Α|-9" ZޚaUΙeJ #`{SIXiibnf6|1vx'SZ)BVJsn\}3SdI`4L?jQԇ;@k.RSQ0UevUh:xos BJ1IqB06e2KEGڀbCeWy/^?%KS7K|҅^\՜YP be V`VOZ!+EM#.,BwIN<ԨןZ?,L<$G)z`jySULa?Nh2ďuQ&m?6YAy"Kl~hR6X 8IJ՛Ik1eh_m]سJSmJ^DND_f.p;4%dSPn/xF_;CZb0bQ=Z^BU\ ouVaH{B˝-ZS44dѷsV|v4AgJиJ< S P lpAs]A!JS{;onchرոD{J\ 'gyMZ]" H:j0~l_o_wMt='t,լ6iH0 odLKJ ۆ]C@ _]ǿn u<{]g6b%Xrd(Ьuv6fO6{t 4V͸HI2짚SA7_P7@@fxSdLIv\[>6܄ ZquYjyBVOKuP3$bm/,Ck>3fkD7VHg+ sC)̞e(gzs&㣛a*a5з1!cJixBj,W¢P+k|8=N6!#1ƭg\i ܏~iFme0BŽ(ҿh#5X*z$[-7Vk}Wd6D/@dPiZPD׭O>2g 5b.߯M۳tT K\3dS?v0u(;Gl(˯ +dUӵAʔoGUz9IcF 8">c|=gه;>WCPd ulR-X6n9tYyI\\(-ǣ @Z齜W޲; ˛-XDLd :& h=V l'u&}qT&9Y!ćdRvYk \iԝFa@bkN4 pBx |OHxS,{;!8@4,UAT}9jxV@ƖPQMϥaIШ9G9c1EԼ}v&t_MMpl۠TV@Xo<-Ka4BG2$mQ``JuI{#xH#:fB n/l?Ix%FzD#} iVU:*`k>=w DiϠ3x s02n.Ro]=AkxUNdiW {>t% ȫIePcn\!q*zl1vU9!J\!bؠL;ɠP6O4 1)~F'hzs*ϤcFfݣ(2Tlڑ@Y=q>Y]"wdX@EO_\.^TE޼.ןND_n :;ص'a&<j{V؇Rd2Pa7y ?ȴ!~Ǝ e&ZϝǓg'f) NsYE{GQ/}J`3$uxoVH%7]g_8V{> z D5bWnGG1׀YzuA-Uu;NZ"6` 4 ޭYeFK&u,$>9'|ܘTW;' 4~iȕZlB> endobj 135 0 obj << /Length1 1528 /Length2 7731 /Length3 0 /Length 8748 /Filter /FlateDecode >> stream xڍvT]6҂t % C ҝ)9 00]t  Ht*ݍ|SZ߷\g_aQ`7GAdp'v. @RYpX P'O76 @bt2u)#g\_pA P@!X ;w2}.w:@ʦNV0 8 +'';ANNWWWS[G3dP8B\ _*?q`145NCps~qXϳpqp]_ɦ`0[,0ौn h sD盺Baf;7ȈL Isrp~QU[[sY8a["alǩ;CܻYB|@  n`+_5 \ =v{oh898C=3o `; P8??;@{q e/6IH <<vn> ]oqU57? g ?U0 ^?*{C2006+~*oIVCm;*dz?pKuAUN`?$Wàp*s7}x߫!8{Ii8akLLݱxr9p} 7<N_޴ 8|&# }~owa^?9"pz@p&~ 553 YW\T 10{8:_`$2Xt8O|2*t*6K}X|uc>ތ5{8[!؆׭ Jハ opTs .\?˺Uw|\W\dV+q Zt'vJL7ӳ1;jXV,<Kїe܎$(#<%')Oy|ϝ{i5@dzHCjl)$CE3rC'XO֭CVЋF~byWa0jxض!IP[?7t~GہetW'Z =<=E1DܷOоΧwl$Dc4± xq5)r=]P,L65/ۚ>Ѭ]N>e<&=, Q޽$L|3umje7R5q_܋,)=m.i_FSq ·iU*|cYҤxȦY=AmdO:IsMO vslKӡY=~̾cոdeH]n8-wFk6U7Pl-+?dtͺIkĤ&{[hTO㤯#4ufp#*Z:W+{j$EnذܤjUypl?(6.GǾƾ-9va} "r#ր ~j8h@HZ#+`Jqi7JG驴~hdD#I&avOwD&„U[ \j?78ҾK[gby ==0w}7m'v[~"9FLa|Is!GW9, QZ ]"IpCopj2Vx6O$PB3Jӵ`\ɦ eƊ3<☦hyRBF?FkU{ c;{x`Ld f 1~'z#Uϓ~($F6JɐЦCK,+߂&ΰ4MnI%KlcMFQ`Rl-H}ъTGd섬xnl^AosbkfBwߞ͑U+ 4WʝPgKom,t.E9aMZ7㱮VRqcĎ&D0K5d{bG'4ԼŞ}NyVj0P_l\0+PXY5y RV21t|ŵ%C/(3r a#qCҕP|L_"|$v}R2F,LtG-cù}#5H%14™PXb!f_POvk/u)[8_\խIe7(*Ҷp@z0]FZ/⅏fM#&oKi IPEk0pgL= ^wjF;R+Ԙݭ9dW4$aV~e=I3^Vyd2A6Ga-1?0l=4ZfsPM;|C›IyJk xX]Sm*(@wť:`?},WHcWͷZܲc=/OgL/pF`dύu){}bdo)APD8 ={Q&G;sK+KՌCw'XY~d-60(6C eHڱܺ/,兤u$$7͘.K;4Z.g?0Q+04;Mrx\np랋ihTtJ@"a_|w)`uP8{ʃl$X)hpV~qOlw'dyd K\X(3 T:va@;, z4hA1 ٢L5rҭlL?XәhRQLr ! yH(;9}hװRYAI!vߜ"'Z|Qvˆ4T(HUs,܀S2(=M:C;',X{%W&\ fB4@$w/:s qDMLp' ?L_;-B6g>&MJ)m3#UK{8Ei\!"cӠc@ul]apOܭ֗^F(1JKРnXԒEz/iwxdz Ŧ\FLޟ >4IwSnzڹqXma r8:HF^ύv̈!u+AtFۆWI+B J>e`Be[CdNrwqRNJғ|,,Fu%6ĭ"(!fr i"~Bah}y xd,i>=֘IfʦMP,w449džd/x[z(_.C;KyVU{Trϑ-KKի*aIdMԟOD'ƧƗ=T+?1lC=N 1hVE׏᠏u8t-u& ؈) ROD$jH.C[c[B{nmcHIY5|@}p/=#cRf|5vbN]*̇o+Q W%JIOkLč~K^$?p-~p,U@ș]+YD!R ~+4OT2F%EkT|3ISF֚˼xѭԫ_ӹL(ZxQ-bjGByYɷ`y jl0v Vj?1۔+B=yVՔ̧YeTܾ!ja j%#en3ikQn?8f;PR_|We1_t5m)=mqŭT㵭+n3_'V"5P%<'uŏpmŕ;VNwި?)%lGg׋)nګG'5<8]_D-d/rS}V^FnU}~h0%tZjc^R_=ou"4L>d?GG/w"[$3 |uP츄h YC3O<Ĵ49v,Z#gPzT],"3ə]z2] ݏHLyşɚӌ`,B$fcTTEq1=ҏGѯٲ̈́LOIIM,w?VlHNbnR?hlsy#q '5:x$Q>[V蓵WȂia+#מ)> ^R~6>9ڷIsM,FƆVI_Ǵm/_Qܶ{\*"ʲ!1QHnĕ/mBհBL0),mr`TH!((v3u5R]Vz#ϐ6Aef=b0'f;Ln](R!'W"о5&ςg%`'=}'{vCSyq=ԝ駒1pǬ9pU:qаgZiqO` 3roaR YF^K\JQ)'gh5!*e0^b5G|rsP߰9ayS'~B$F^J1iՔ)|5X2Ő&KBew|L{@`OrdS!F72S?CP5${۰ij؋:lyVmekE?5zm516pBݰЂFNlQa糏m~;\J;ʏPMO>V ;WLԙ{w4m%=| n"-^y~}ᅰ4Df|,iM+Her϶d#L*UW8b$SC$)>ߑM .ʲ) XMrb7ṃ\IB k݊sv(4׃?D+@ީ 7<ښ@iw`7I8dgTd/`3]5ohUL%8% l1Ht>:&!T]Md[DE5pُRb7%Em%@=f}[' ME%+Ս P&KOdQȱmd ts+FGO&PDD7Z϶&{_[Br}FZsrYϨ>YIBҋǷyٌCwe ]UlÒ]Eopx5ֵ){>M?j# G'c3 <|c~ş!j0gL@z%R;.`yˉu0jGd%\xyzF&:?kLoJ%jm+Ol_:pnAIxݱ)Mtǭx 4MߌL+ar&KkWa,XY;8IrԚ>,Ź>ҲNXĵ`h7]J_T>h]/-g_8se:+ CmZ9x#q#<^mX,zָPx>Y5zY-hĕ{4o* b:Xn2Xkvsw^ -yKQZ3播c(J3p!.?q$tb6 z_]p~"bԧ @TnΝ F.DU<FuZ1~Z~-I+[orB .FΞ/2)LT|hIti-ONX'O~̎):q5~I2G|],#ŸCvWxMx_zy%gЊIo/GO>-I<_v)[0t:GGrAl̄a,쉄 A%}B9 -$^2eD,NŕlGCTÑ/DvX#bj)r*|7T15]W_bw7<⪅G˼u4e~Q23򖭶,l2$s'DvY1+wq Ozg2q2{f,wsb}h:`T.ꐦ6ZZb;-!q1^~=EuXC؜(TIl yt!؄}{[Qħ=ٔ}Uq+v)([vrm΀A57>*z*glP4zl҈Y¥T@XXnx+\ o6 =i  <"P[+ufnBX|LZͦeP C@oI+Fv?>f  ;b9Xu5md8fBX{x?*msH{le1"'S7`XgC-۸knXfOs!W % endstream endobj 136 0 obj << /Type /FontDescriptor /FontName /WULYQV+CMR17 /Flags 4 /FontBBox [-33 -250 945 749] /Ascent 694 /CapHeight 683 /Descent -195 /ItalicAngle 0 /StemV 53 /XHeight 430 /CharSet (/S/g/i/n/nine/p/period/r/two/zero) /FontFile 135 0 R >> endobj 137 0 obj << /Length1 1968 /Length2 13162 /Length3 0 /Length 14381 /Filter /FlateDecode >> stream xڍP w% !hpw  w'h 4;<{꽢 fuwU5L@6~"ƎBM qǎB vv8! $AD%{-ryll|!:8$As @B- r}:3zpb(\v@ 3R Z:zxx\X-W+:6! -iqˡ`r^ 3k9Z!PqEVp@G" 33;G`TY\=] {? [x;b 2}%: -*[3ՅbF?Ҽ$!`sbrm<}, 0wsdղ8$漚PY]\lll<||ifGM/GNW ~>W`?  puvC\`K=?_`;C<lOf`o+fՒRRV`[f.n3;x~'ZUAc'/!OkC  3l\lfϐGIAlfγn(9nZh%9z\A;"fo:|,!.O*Q]؃U\ <;f nzce@9;P^nj |]Us`ewp} JX88q<V?L"6?է_`qX5^U@+lgrj/+rqI_dzE^V?W_UͿ /_U?*_^7_9jr_c{[?Vֿ6fW8R%ڷ?ty}Rqf' Z9urzWn_{Z^y g"ܜ_r_`' e~L غ6Z؃yk}<IgSZGAXȻUF]|6H~6x &IE7m&'MCLNg[3Y{24M7V' ,h0ёh0bY5b?;\EǏIݥs,|e;*\f p)L7{/ۂ?ҙj6Dz(&~0okj~B!:@bfەZշZe<7-Q̜Y_%h-M/J7QNsODǨ6t#󈺅" J/嬹N~ pk.h cN+!؎} աT$JIfQ0ù]pٜjfҩfS\>Fx 0k{( ؖ#.wG9"ysHхѦ2"vunjJ'YFKxpsK L4/3l^)nfMN[OKNAyUF>]QtlKyrp4S8<l0$+RwR -|ϕ[1`A-n ~W4K4 N1ɧTyCgK] ȼKJm4i-OXл?]St)?ãT>"3zb9zbSa NN)o/rn c9Sˈh RfҨ6 0QcI4]9Msl%>-~(cIk^I7r/+ϱF.G8vbl= Ip&؆Q7֒CBUsx'*OR. ?rgs/#W|4PwHzܥˆfeg)b.ٷ6 $@ON .*";pC/w*78C`Ϋ;,Â4Ajп ʋZƙz$LpwH҉ =c\w A 2\y냆K5:K$ɹ]8s4}+۟u' @,d=RVPL ZL{vI߃ҜiMҀ VܒR`k @&㩍m7"J5Nj˨^3^ݷz`~$wU2@C:ʯxq%'LIdָБ#+g7#-N#ox!; xK5.C`I 6Ê$߆2*Ϝ ç 1ZYw#(6 YO =~6E+VۋP~ѧa٭E7jzǣ=|I2qG [sv6jAtȳH~iXxrzdQV1[bz z8 grq"L[SG,=;q` H\5>#?.eXvމ,*_ 5ui8?WohV*fw=WgI]CnMG{U3<&wM!c/Q\."֊ CjrsC/ZCQCat7ꨮxay$N3S~ԧ&FBO);q8:zG>S7&S?7ᜟ0쇿ɛ{L}}3Fn6iɗ ҟtzsP*Hay,$:%mo=fs|!_4K2r|:QZ}73Y[B@9hksח_uӞ'p^^mM{E9;RbRuRCVRD4ӱV)hc׵Ց95f2y)*:(yܗ̕ Vsܱ*RM0>&kҰL',D) FjB$x-qB5 }(:ۑh{ԉ 61 dΩ H&F9(wxٴH? N slqeR݃ę# ~E2zs+&DÖf}`@A18Fn ؈|pm'`u"bwI9\NmQ!WvCC tZ#|[]ի8] ;$rےpw>fաIKlKFw &3:Jke/=J9o$wpT>"N`E`NR+xY> d.bYQò7>b+?rP[F b]%\;">{J؅Xc&`\C !~xa> EC+lSccpg~$6\\'&T ZwQI2dpik~7#b~ t&v:Y>\< Y9&N[cw&k"z4J98BFK͜JB^w +]"0V܃b+?uKb{Im9@WsUu趝kPahISn*_#?y9 .Oh.&÷[`SǺGs(q (#.d#"t!ag JJ;ߐ7H{s_["G`e?Zn*Z}Dij@u8~ \_uG~gmnOh7Ž >2fQ! p\8=8Tn.&mww,ٲO.1qX☁ڎ :rz);䴨 38ghkӃJ# "ΐV'R=Qlu7)nȂ0{(@ w[eСNQ·a&l@.;좷hXvMnRwM; Vrٳh &^)Mqlx|[}\~|̍Fd 5ub[cV?7YBjHzNmy_F͟8ȧ흺5Tx.8?'VEmP" 1M 7IУyQPlL%VzgVp5]fh2tp6p2="wC)g0XZVem 'z;dz+a2˻ C"TJpnuۺ)" '7yLP%+wFvd^>*RsE Lk뉀b\:1zli|8P MFBBԞ dtrF|fGZ75>_&.Ǟ6o:ANP #1uw$pl~π9&(M^x8ir9e>pyck="}?Q уcŨY0jgUl h 7]`f"xe6 upx {qnծ_a7?p&7 B>薂'm H~!їsb;E^RZ'+>pAFBc[!`I_ZW$}8yҜAjOj0g+9<8Ksh*%TuaIv`Ddx|akҚ`!}8#KB>7uJ 9y9Y I;nzmÊf ;;ZVclu,S8/'ztY sK<8fN[$ 4[ok}xOb:%R7MQt*;3J"Yfxap{߰/+}]O$ lS~ QT}2KC'#Ç h5bP^?k0VKN~T%:ȢfsDeptv?vF"*D10cvT&d"<]2`T/醙d!X|Yi^Vwxm.v 5{N#-ak*xo;Obd;;wHy]C;q]bp Tԏ`O?ԉʢlNl04`E?70?I-6˧Fg-ԯYmTRy3F`SSS 6#\NM))7VKjVhʏya*Yt*JKԝ'ӌ#S8W<-ZgK;c(>IR!u1Ъm_ޜQ̩M6HٷX9]eeFȉ)坖X|@ӲdWީUyziJY=L[vBѻ0m,wA/2>V/2nH<y4MjhVtJ1 #{wff*٬fwE‰` 7a+Kd!8;aSJ$u<&-~FMpzzC8cC?w<2rVP~\8~Jy7+iy!BVglR|=}&F]&IDB(CCV8:}O,D|uQ" Tt9ȱhz}.E ݇ ׈1q=M4jA"t)$=GtHs jrvI8?IQqYA&Ig(P3=RbZy\YV5$琦φ񫐹n wYB ec${Nf&U$9h{RAЫyw¯dwi֬O{"eMwmV] 3#h)D"$Y!҅aIkYK)OG7sM>$:B,diEQhwOr۱ėoI#C?}4 Z$YP3;$X r@cX0fyճtkw7jȗrW'a,@\xO,* .fZmȔS9;;M^lIM s11uAW |?EB [v u +rk+ˆ@[lӾQ[hbCqm%v  \aк/1wAXF n\.':ekF 9~D}[ 69ոlɨ1Fja!RhGJ-h,QB ӿ+@KumD[0z.vHnTĆ˞%Tލ72LmaDM:Pz9W@ww,ٳlŤ}6KjT{^]:.ev_,4u U 4O-013n2È?y\+W^GɎ o+΁8}4K ED&z/̴Zxk= dDKdFeǶLjz~ՐZfݫ05amDŽ4Id!x4WSZtjX U>`Ug#bꈀL-<5+[062ebk9ǭos Tp,YsO+++Ld/}<2kE([n??vtP48a,;˵ Ġ"=E X89,v H,e{2e J<*}/z}鱛-'zoWoP$TqGs&b-&[,MGf4YHr9J] &VO?$JY'G_@U\ye\ qnM{gxSCiS]'v(7X AqnLJIH[IZaKjϒ1sՊ3Ya!ki,X`4FDpf"9ӈc5b(AV6o[̢Ca/ !HH,Րv ;[j7$>M}2Cԍoit@@>6%ٙ{2Н1T~c,`b0 O 085zZz^sZ93p JDw8Z ݔo`D!58X٪@ϗ‡kYc6 !Yۍ*Wz+gtɮ|Ɵw&vI?Z'w7Kzx%Cvΰez0/#YJ;lE5|N[u>G{%vJHT?q{] R5<l`i>cచ#B2؈W)V ԣ><8`-kͱ݊9%s%rL,juakq}l'>KBQG? d= &1|zm7BL/e!PEQ Ic-!- 8tXd\> ؇+kheQth5IdD`FPQ!tl}T,_xq/R7x&/ +>ow\x7^.S\mnuK7Olyu [Do 'V6Jy1E eϚ ff-  F?P^+ŹdgCFʪ>;){.b/h'~8f -$aC}9Jb&NDCU#hG^xmB32&$[\mun9W̬\%+q("=I)r1e 6oJD=cKR QP;l"w<y?n j1b1Ea.BDۈ Yӣ90EKtKIJB6Ie泤"g6=nakDZC:&9g gyGr5+&z,lZ`eKi +@Ubddb4vdnSְr|*iI̢LKOSDEW2 qmA¿טE\XL0?W}>8LidDR ^$gEᔽNΙۿf=W0CHL #5P]igţ0?Ea|} <cŅ*dGcoS}x䞭<}e5ژ_#Gnk?Z{b6XE~s5_)lDE֠8w/8q11iaNϒP);e@ڳXeMcWӯ}Iձye0]6{YDVmrP8vl?,݃&|Ҏ2H >uXs>!V!xrg;Sk҈!l(N7+m)޷kTycor\I{4=(ԍ1@ ?'JWco_LȎt݆zvyl}v񈲵qpvVNEBeUvpP\ʧ;1b8!ؚRci1N4gu)DX#8 ~QP!7T'3]wjAU^~{v>WGC F?oyV'sX= Nq9v,(eɨh~R§-G{t=s/o0m,C\}+ǯ"3kENXo8 ,Rd[Ɉ>Uǎxm #y5D \EdTrϘ`U_ըWM+c?d4ҳx :1K n&ik݁ B\.:LN cR&LJANqsr⇾2@jH[?^ 2O4{ X0e,kD=:3Q utkt+<&6͇Up+Dۂa| TEf儹fl0c8h8#!i ~GUP'풋}F=*}i#x{"$6)T!OVBO w. 5YQJ}%%"xvi. [ 7{KKCix/TvNJLz6a;~3M#Oa)dw6L:N_]ԡʸ z ;_ }Zql{u u .`]ԾdR@;uxn9LH_3ܨĺPz6#*~^wRM2'9=kgǥi(#Nê|Xi>DKa@z-rSț|{KZ=!훝̓*Cz2/Aw*;u> l?*-G~zod"19aA|1SI15bkW"+!ƨeF g Eilˆ fQm!zi}շ `P?;vPc>ʧ {>?±tݧPՃ_Heڎwwo'NI=ϗ:4r vJ4Hc;}Y ,BF87n>?8|k0?M|*zeQ)+ `B7b~dp+& Vĺ{9X4hҽ"NE0PX- %6L(6).(W+1yOH) w2LǼzr"h@b ; [u v ,g+e%/;*l1e3g e:d3of^2[{)7ɤq;Oo5=lk[NG0~K%2*_,_4y̯ȰyF1ZM-}S6-~~ƥtuE2Z%+({d3/˛~Jī 廞f•1/f.xt?X?epOT{z^ƗQ*P>4aOoVɴgC+bJ+TirLQ8'#~]q*G+!}1^ ]+ǧTpW vٶwג3= {onR"SC̩#J.n$ghe$"JBn8ykZ~^h}>w6<߈ho &8sNИ՘jBO︴.%k2S^xnl3V-i|͟K4b">e Քxt0C>2Sk9d"˻iE@\NЁMYoEϯXA,e*qѳ D\n+UE*AH]]Hqٴ/Tzݧ_WSW(>ӛGMf̮'x™0qI!?ڨ:F&ViCѭFz!79#Dblx7}S vx_т!5ʟnȸSֱRR6?My9ݬnSl_KRq;T[⊞!V+ŝA'g݊9f;Ëj#yOpB+!XASNaPUUhm'eѧb"1h"D6 L ڌJo9dDhEƧV.ժD;[Ztڲ9I:[W03L·դsN*{rHAs1 _!4b4ͤkX:9)3O{>N}Kw}[N]S."{/ĬINt}z5RZ/V&dn^wTsp7spC' 7,1kYNYO7&%*wKgʣ %>8}$rJK2<f/m~!ecdHxB:[D=k_Ͳv̵zhh5{IA $X˱G7N>Km1Ty {g endstream endobj 138 0 obj << /Type /FontDescriptor /FontName /UEPENK+CMSL12 /Flags 4 /FontBBox [-56 -251 1102 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -9 /StemV 72 /XHeight 431 /CharSet (/C/F/M/S/T/a/c/d/e/emdash/f/fi/five/four/g/h/hyphen/i/k/l/m/n/o/p/parenleft/parenright/period/r/s/six/t/three/two/u/v/w/y) /FontFile 137 0 R >> endobj 139 0 obj << /Length1 2479 /Length2 15813 /Length3 0 /Length 17265 /Filter /FlateDecode >> stream xڌstZ.Vm1۞mIvƶ4l;yq׬gCI(bfosadebɫʩXXؙXX()լ\l8@'g+{;Ȉ9]@4qc@`ccaWމ nfeg(<,,]@@cJ `f:@dejl7vڂ<TM.cFŁݝ֙Bnb P:܀f(N fio"XAJvf@'?@UFܿ)osːݿMMm<,V6@ /Acg{ H_$EƠ3_Y2eTh ;31{[[3_[9MAdvv_:0Y9e#"!Y],,,<@SK濜y:d `Jke}!x;.N@_2!̬L]&@ +;?Ad1h <,!d>hl<̢"bҚ'7[T`dcgprxk7Q? ؙx|?A{X4@yY؂;&IWIW#alke`D*v&߻-4r2.Ơe <#/׿VΒV@3%+S `ceTw0)@hj :dAM Z*agjo&qr=X@ f_S`fw@j-'Y/ҿh n`x#n`2ȃ7A =?V@VFF ΠZ9[)A dlj .=3@8ALm@ '_[?QYf!;f66NEc$\]AGPVnA?@azj'pPY-=,vѬAյ%'".P6M>T bcd4ejk9c@'*(A6 tO39XCVBp:rfeaJ:ظ#1P]]f&+Zc/tG9AΠ[o؜m-aڟ@A*c v*.f@y?рTN?G.-@^@ayޔ?s]HC;{?ݻ+ B .Du)!Golq1K*]HyH8Bnwk^N&X P H3z>K8+~hc1wڔBbata *hyq~)J)̍t| OEn~Al:Ǭ0_E Bp4!.f{ ( Cd92N{/黸8[oE}w9EҿbrKOGfi.r1ff~C*| ˓[Ҍ8im>ÿ{ߗ70l~OrBAP(?D?2 B;A*}2- :;'!j쑴K\0g:0㦯s[qPV?)?J_u6O6ɮ$RN!&?~?Ot5+K &EAö:hWc==@m{/I%ThZ@/|8eJMeG`yc41ɢEX2~yDC ^$Y y7SȄ {0yCZSᡗ3h5§aeD`j }3ͅy+*+aTsL3njDX(sSmb@&neVݗ(XmPsmc`2iofٹa&|J LwyE VaG BFofZ0^/@b]!3C]ILV_U/>(tve 7r}v&Osd3iIw|l}gM]}KL/y( E`J>3qbrwnCmXl'~ڷ{uQ ʨI̤/7Gf2G:J"ʭ"BC1ś2bᨽMP:I(Rrd0w'zh@b.A|޷͇ ikY+pcL^"tXyq?L>*ahN2\l(_m(Y[Jr5h@9"*FVm\| &~{nyw4Kyݦ׿ѥ>+߸eqFcEכᅞ&6fYyq-NEW7Z/Ѡ)븡xJGeÆҨGeHY`aUЕ=*ݓ7ɘqtM:L̓b‰sse>@Lu4pJu9t˽V&r0W:2-Uw_5V -h@0g80QbA-@.]9LP#]ɔ, K.riϛrY:g8ju;h"[`˹X$ͬmO0Zi۔^]QBv>l"G.c ,薛ʆ6L]PTnml=D&c/Ɨ ֊-r# >I'?}2$^ZՔ ҧ f:(kL '~PP׻y<#W3`A5}eq@" v$cn+xLW蠿f rK^D(6xMXUunb:2<1cnФ={.w>6m45pUSx#{͋NZBorRK4("5Y>6Sx 쭌B-XR88t5핕8F2H3ޕ{#D)-.X}d«ΰ$HݣXre@Ļv1O;ԹMꛏ. } s`mvjzIq~zd=DV1Rp&W&AIL޹!n"4AO ( fRpfO(Al5ZwDWg]7d,${fjsҏ;k.~5gCG{. f]Kqknbqdn[99 U'h`}g+DC.zMRy\0@KHy#p05pRY0a#nBxbfKw'<"^ƜM1fF n;AO6/c\#0yki`HmR^؝*tN72. +ETWnR;4%$g9/j~]5}*}̒ b7Hx B6nvnMx43HYA tQȤ @A3%X2~A)D&|gE& )vc.ZuM.fnt3Y5߂=oTL#o&w.ZꂍC?mH%~-$q{tRVF/a''d>wW!h 00":8S؇ǂksCቧ_wBK|]7׼8K!98hs.{oup_m5Y퉇{bl@M K;}\bD󓺷laF(Z6(txSz>>ޚn{!L%(P6`Ab cqbVx 8}'^^WS@}2/5qB(Qet-Jz`V'^P{,wt |6Q$7U^N}$񈪸7P{'£ߨdvd6yQү^"gC$IJpDƿ8CD!gAZzH hi5Cxy=WBe?ְxoFփс芆}(\3G}L)yw+K\mRsw`ç*ϵB-x8WHυQ\+K2끪#d$)JWIi:K lP̺ZSJن5:|)z.Ũ;훖n K`3bAFĂ?c}M5~_P5"(dPf6?Zpk.Cl/ {DcUz&i}qJct1~\pClj2yT݌͞Y> |?H=F\@e[4 Ƶ޲4!pmt[Ψf}5S잶EˁbčsSwa_XeLTe<5 (L~8{*dL63* wmBH, @V9v(\>^id*tdeAfLiqr3Yx\;⺵Uܞ{c"f&a2pʫ`mM %qlw2^ fQhz`!'z !8|n,|Ep:FXtk#}uj:<4FYEPKPf-_>l G5wkGq< g6wN3FeAb(L)98sL~w182بR\|v`SRPVM mrJ Mʻ S},-ݼ]r8n6ׯ]l6ݤ%"?Du>w!ae%л%Lez"8X2\^)dӉR((t"9,4f!P'A)0d!%9{ Yp9FK9Nز-l`1ᗦ+i~՜5egd'm~C@ls}Z(߻~2N.c焷`X>%./͕Yܚ"aMf|(!y]Xcצ6WHꨫ"xͰ,l| u>NnPtК' 5DRvyB`W3=s)}\'yJ(IzՒW-my= Ejgϓ {A!y%:_NA)`"x+B Pk H2m-TZ 9lt!jܞ J8$Q"(gϏ=~OOxOEq=C>~Ti #;!IdSl>^h{YsxOJJNM&0!r,#, klDۨ%}ۯ9aMLH%|#j\bz;c/}82~?qy W8'cD?|~}SO\ l!: ;N7q@%v~smlq7Y'sĭ JG-^KحcZ{t"wi{_ \ٽp T +Dh~L~pG,!eKbL>X 4u5`$G3 G^gH w Ҝ~M;I}aqB 2e/ }E6+G)A_GQCIgWNǷ0Zp cITbz RqUoX}^rHaĖ*)s\BWpKuGtfǩg ?E+x^0RTi+G)fuZ3)M0i7S2*/Wv`ACO& fwv6w<(tvo`ۡ!VR~&]|^P_LO")1ՖIElȞ Z^0úA.AnK׉W7"08HlUI]/bݜOu6a\Kp5GZDIų'C ]_Cb5܋-5DH=e4 vstb_YZ(%֟~ K >RuڜC2 : {)ӥ@~6ldЗu`v{  (ƒHBEt\T?٠(t _Y{WJkkz,^H >:HK ]'* tf z\Y*Jy,vǢp~ca0aw-@~5ւnD[(shLf 4dmVa6͎g_u o(qAzh?8xʎ(4y߲>1aO 3Yom/-sAHak^E<,m=8>7%pMBT2?r ǜ hm4ȜEq"Kwd=6q($BEد= ?? E dԻŅMet<%$/nSJnGZ~I,9][4"'h!ףٍ7 4 @D_6#Zel 5:B|6.u0녧6L }w¦ E(f04-"xvK_#a8IhC #-{Ɛ,%wiGv()٣{Y}o.z%~#pe뷥舞m_)ǂjV7ĔC&k.b;kZ^\(plfyL$ogިn0 a yfwŚa|" m6H=dH801D^#f m3WsC\Z(0 N!,2$yYd]Į,t1M\% ~q5ڱa]|ٔRKe +{YN#A:,ƈiP!'R&`tBRJzJSw 6%c4 TAJh#50lh@GZ:C;i(n#w$//!Ii~׮|K] VnQ N]۴ g|O\}ȣU7F`ϒ0,`T~ۆ„Zjd3S/Gg)i&Y_KYKo*}Y&$PFrGf[+SͲK)ZW0[bgx\t.Fϐv&c < Wd:ϡ3q/&}I"O'r9}AMn8n%ZXyCg\S7 Zz\[f#-2 bW1<R~FUח,5(oL)(!\Yss#\~$F["Y||;~ h!_l˩\mgX| mŊKuN\h`7m Z|rңT`r5E/E'A^I's9; g1PiX0S29`=9RtŮbdeViW] vt0P(WrdD B>c->"ыdcXbж_w ; p++iP>;ȋ(S.PBr\B6?=Sټdi[Ʃp/ e]K6;.n]/y.u`ʧ^oLZq$U3s%ۨe-JW5荳%w?WYC]V.ktAXt̓2vxJY 8[`._pvHP)kl;D輔g6# #V tM/'#~b^Iʟ᧳*We#91! CXv&b%X궔.ˏ%v9@k՜q&&Z͏SOX  >8.24!6\'AzcH3I EuvM) Ys&6O[^cV:>l|P g-ۋCKe[^ngP_iϲlNAAR~/5w9,8JQaӏFA"**ʀV#Jq FӠ-H&L;4Ák)cnc;uq'sp߉K&8qʆ,.Hy| %<(6#9T"Ln}0\aFkMZ3H[9>}+4R(1xa]"ޜǧ#0^7Q%i˭$E=CW*sH+iDHDW洳U9NBɂXȳ^Y5[,w>}Se{vQd_3lΝa4.mUt当>`o 8t-4?E@e;m條\=;pQw[w{3v<9m~QW+ODaa>X)m|`M-R!?Li) 39~U\=̗RqC.1䗞g=MOŁFs 8_屝Y][>}|рPxY*=DܖkՕB.˫?Mi{iZ}9~DZ£4xQu]9fx~ ;hm-bxѐGIkԷT.}x-/C<葼#6mH'1 am:Z_-uJ>7LsdpcuRo3ԧ1):xUl[C665Y2BWѕÔ~r:cWqfۗo)*Fģ%IQK3-*֓d|fa3')2gblx" SPRUa~fs`aWVة& 6D3vwCSA蓵9\nL <6*NfyMe|ɪSẆᔣhrjG5+o'DbFn.S͊z8b]mRs%<8j"ԋ,i<#1xNCu6#^ 1]ʵ /)lAEg v>C*|`W~Ըqc.ԍkc(KF+S-+5Qk Lo[N+< K]"0$T׉K/P+鸇:P#ڗFZFZU,bkwe㦊"pfHI/Ti־!rhؙ5MosJ-}0[( i;٪Dxb "yըDvtm/ae yf|iB1 X~S.o]dvWpg+SE?1vCn; woж("EhGϨ,}x;pg.mW ۻYK^\aeG%0*J !B:W!!W$~WJp1u:0om脬/kZ^Ěs/J^m x˺5^;Du#e-_5$bV]'MMrӸߌҐYb^-TbzVcD}\UG2cƧ4]*ۚ[ƪ4I H4$D#KtTb@mU>tet>+?Y^?yN*Z%jD<94HgyѐmYz'o|LԹ~u'? ϊ- Zsa\^õB8_=E1ם,c9:o3 \'x(Zn9]s%J>nr#U gGP]/ T#O<I?Y."3Cv%܌\32a YdyJVuU& e.w'{ɢ*bM_sCݤ1Twq:͌*a 8]ѭ+)d}s3湐m%u$ry;|zmjӧx`%5P'*DfOhڧz,7F_{+EռҸ~於+P ܵs8 anMK}/w ^~Çt)Mb,ݗ8>CBKil؍J34CFE8%= uҾh9{7\r\{zi&PkdHriIk ָHj=GG I_H-(g|) -F!7ڮbuy`o-Aƞ#~NR\f][® Wޞ?s"1WNR/4@ҬwL|EK^>"=]ɺ1.l-!I>hs1GDwDw\7Ob~.# ӅMF2<03rJsJlcޙ* zB❄?F⭮ٵSJ(3݊f>Ly%iKT\y;i]pfwVYHQOLod4m-U,]e8!MO  ?b{@x)5uU=F +Ҟc/oՆH6ׅǛ)qnuKVș8vOڟ,]ij?&hV|Em!:9~M$LVы$% -o.Go7*gXkTupbӔmD$vb{]/G'򵈲2ν9;伖8ly]⎣$#C~= ݾnH[R7ҷ1$w |;OIunu𷅜  lž)pO6tjȋ&nxċۛtnK7-0,1n-5,0 m=~χUcʺ8tý"?yhE0;̫լƿ_5NDieyckŪh)9a7lZzԾu)g0\Xʟ~!{8w N"v'eeݵzЧC{~߈`H.[@̞MCcSsu!c+ZA&7Ք(V!*3\7G6 5\oƢX4ܯlϏLE9 -]vzH&mw: Nb/S<ksDChy,Whs&fH4Έ\y;q6(Wo5g$} _͙;%zxv^Z-.&`tuPB6kw)a$h E~U E;, k#x[^`T͘?}KVޭwτ[&ywΓ+k'x׌vʒ`:0:ajMz]o})rc~2jrbr#тj9'|DK&7Nhgʣe%-C;Q?4k\Ց&ܛYqzli٪Nwy9<Ȟ򇒆(ͩºBJǪRȊY}i^ ZE7ibr+)ޓ80v9޿bYA\)fu-xSIgXss󐏭;C>JW\%Q&^t`ؐ+B57ф׌Kl^`*+{cg l:g\H!0WV1-EMf'Kunhm8, oE k4]K߮넴F<~9G-<x-s"j,st}`$7/.1 Fʷ;cQ;\%`8^)W,j6G|fJIU i0k_t P0DOEDF^ٕi. Gx"Tӡ )vpE+gyfI85p6 Ӽ ]*31׏QgM&P<4ۿ|'<\bb l?]h7t5r뗼x$Nw*K[J1C Czj{56wo9}[n>'+Z8IoXڶ `ttD Yҩ>/ u(Ѧԣ|fwwbNhR_X< C3A:Y@V`[Fo!zE~0!D[(sqy5%t4^\]( -V >:Q)F:ELXїP'1 !X8a}⎯=9)EBxtEE-&?$mZst2ۛ5q ̓n|@ۙ061mt›[OPC(+7;\jYPk3Ssg|#WxVfՃ˚+!Ht>j|8_vZOUZ'L]{]zVeU璜=O+%ƠT^H)%BwU Y憰kkUK{=({s/~F[ږC'S;.'e T3Zpo۫TZq%=¿΄w+W*x/ f&9/>6>7fFf븳{kb%y2iҴʚٱMY3*Z.W+kӈط_> ]!$9)S4cL*33u? = >3rc~[Te̋I3)Q~P㨶N=#d]s#Gɜփ3@Cj4f My;'BmR5b7XKG?P"|ŪQxZм=^Lp~ɱ* SyKwW#P'~GH;Bor ^Y1ýfz%Ap |Վۤ+& T L4klv8BE_pn)K `JK$GLu_^~~:w5b=im?QsUZrtHuYa9~zdicRtEg-M-Wc[O{-Y(sR7x-fPXKqQ ]y,L?Bzoe; bQkl~٬2{$fΰ|PjlE@;ދ-S\-E /`)%{d]}+7QDYZ endstream endobj 140 0 obj << /Type /FontDescriptor /FontName /BJACHW+CMSLTT10 /Flags 4 /FontBBox [-20 -233 617 696] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle -9 /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/H/I/L/N/R/S/T/U/X/a/asterisk/b/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/f/five/g/greater/h/hyphen/i/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/quotedbl/r/s/seven/six/slash/t/three/two/u/v/w/x/y/zero) /FontFile 139 0 R >> endobj 141 0 obj << /Length1 1403 /Length2 6029 /Length3 0 /Length 6987 /Filter /FlateDecode >> stream xڍx4ֶ Zhчu{NDc0D{ !: G'JM=5k={_{p (!mHZ$(i PD&0пD&Pw ;ؔh P<@"H\ Re'-xD@QDJHWw#S[7Pp `@v`*Bp!}#*%$%vA "dy^0#{B(t.?8F0_C= ` p@aB<vPw:PC E Ht%!~!+C8ap(@WUKv`8 {ap-{`>a sEQ0/B`ڬSB@hѯ)ܡL}3{eCa*dy@5`0&h(PRLLG_|\~HW=4f|P@  B`gǘ1X1>(TL PSQ H H .. guoz`؟GF =  L&GƆ :HP\@!,{Gpo?_v} 0z@cfCCM 6^ 43# @P0o qKK!Q_L_>A1~g]ikE`wwF(U;oH4&G:X(@#1vxc0^u( !ABÜ^(0x l୬vF'E9g9jgM)ؽ37W11|Qwnrz>Ko]P`qI0&NqDfckb:s.#rPr(9%gMg@)ub?1ge_E?"naakhimn_Qfo؋J:*ytIPXJilt.86? ےD<to>~QY>b1.Dr99ڑ&]t(ZߋK \֞Bka/4?snLK ||(gv7]auZ/yҌ%qmPO! dpYG& &*bZYd5OB^TA~^[Cyɹq#Y#mLBsp)rRJ/L/= iI>^?@^~KMD[C!a+·6:\a'gZS=~o#IAB]CxtjdwL3_vpm{7\RI +D[-Z'=O,ΤmZ}j9pQᦨ M5.)B;S8$PmxC BѾh.@Sk9BqQ/ 8DU⇧ȇBfbo}]_n[1(hE[)=h(4O~Whru%n-rEK9R=͏D=IG5A߆$9?0aa2VI=*jI> gQyEmzɬgX_$DPRMi? Rpc.G}yahPeYAVY;8Ϫq+ԫwPFOJgu9!}r\?o"epc o*ItBYϋ5:$JCT&ȺEּdTZa륕*7eN4PJ+Wv$#%pMgkV8׳®Ϧ,Tu憜zHd 32Ө-Aч1n/N(h1ܬš[ rWËIlƥr'ur)3a➤2z TY|NաHZf}kG$2E' (>5ANF\tl_㇓~YYki;3P\J>k5/^[B%Rjn\t[74.91$}/!U,n9c%'pñX`;h4b5y|dI!OKhBpu %Ydm cV}[ 0d+NvaeM z%(CXX2Z'xP;>qVNi)7"5?(?1FzuE .O} ):p@}|j]) ج2Yg[|'?ES2Œu<{K >L4X껞v'2wK=Lտ9,LCOӠ*M<8HqKYV-)ɱqCX?զ }bjjx3rwSWUf@K#[a,!>.ع./jJ> 7!汫brԋ߷j~89n71Ii+ϹADi.F@x$wvmX6XDf'TkFKjYǴOu韝{W Ǭ8ȁ W{.amXd.ȩ{7[_k@ Oڏ:wA@B礱*w3"!,*d:G>GbMty/#xxH"OKa)5dEI"8tgX$s*8xĒjO&~1~i_<>>*[G,4qr%-B}S;f~seBЗB%*[tS.T3oԝZ̊ {D>7qFY-b U>$յZ[r灻(Bqb^2aL[@{Ȳ=Hud2'8Iɏ I3[ɻlكh;!حiTެEGaeW%RO?4 ~Z6J]$l~8fM/8r_:6GT_*[k)s|f /B S(`xηiꆌ9F@Be -tAjk ؑT/tc˃Hd|MZzdH>.Ef쇒*4N2DO,yݬ&9+V0Uwb֧=۫nXV^/Oka,Jzg=a1a_zMgEIKݞ6jўtz_3 zTFaSu$+RS"sE=+  A\.{YƟ%]Y;Kmp̔%+ydYq,b&Wn^y?HF;;sIQ._XtҎg"u;"rt a#n9hBix:ì{̚Q}zʷ(csR\S6~M}̀o׏<#rSI9HH ^͔m{*BUEK8'f-zB m)t\"(IXŢclsqayY5W/L%4d=K_,Jh!Q"䑲Yw迦O%Tku6b%,b]Z EJ6O]lGI;<'ҕskr;co$׎^t;(<"h["WH] iEt:Z=K&Ij}7śuР<ɚ{81%]Wv*wO{*j,rk,ו/NYL.i ~D"d>{mJ=s6O(oi<AG6V^8UDo|I!Ҋqǎ7M]3w^r#_= _w_Ub}#rȾc魖bw±\' LN }plHlプ:0B*\WtEo#̫zf9$^[ڕM=dV0Y ?4C!RL2 1Zt+%!.T ߳b, F<˃(v Z1SJ%^O!{ZN?㡏5+#;|ݺsj\b^GbfȻ5u#s,KL{,vƂTf"S"XflIL{iԼ|1 _{s"g,y ZtͰ3Pس Kc*u!{T#wbzAB/𾏢x9;|y4GX=#[lg\_YeE~h{۟[ML3%פR;s!LnPSO.K~xZU[^l:DxBFIC%2`Hjx^xYv56KߴYշ{?Z!NJs˕ssc {;2Sd՟=WE iƤ ]Z%u)r:Uzj턜7:83-nN|UNѓg\hԗ`;Hr0q/h,ӇZ=w^G9XpG+fvPh5b-hk ~jɗa˂ifAgќyK"'krTUGO(νʨPꥪ޷GKI:$g̬WxҒe` Y%WDS8pHG1R&v#SYSSĘG&5 _+,/w1r^+/_=}b+Ք6_:Q8U9dS'8vd`'=b7eTo F?liG:Vt?V^.}|>V6L+Vi> endobj 143 0 obj << /Length1 1809 /Length2 11154 /Length3 0 /Length 12292 /Filter /FlateDecode >> stream xڍP\-  \7. N5Np kɽWW]{s1צ QVc1%N ,̼1uV33#33+:Bf!4rz9*m6 '/ /33C/@d P`Ȃmb`;wk^&4.?"6@-@h6+5/+##\ r.@S-lƈ@P9P99k xP(m2ˀp,, @:mlA35$)D05ob62~5t# ÿs4q992:0c5mO4y;߇ke vlMhَId U`fff@7 ?T!~l0{m 2!x:N@oXX '1doW1/z 7WMa`[kQ\S;72'l| f㦋K9l$9ASaw2uNP3@rxa~ Un6-?}RS"giF{ bX3ՓF)[ܝ&j4Pgܝ>9suN}#OۋL 3 nM"m/f*'S6%d59b`mnt&{Ċ納0IBl0TUJow rw|d/z=),)z/I J=/”M9<aIԀ3@k̓ZСW < ؓQ"^,lT)P m\G&B37nv}•7p_ho5gsশE͖"U'>/ݏ@ <:D*6lY;lRQ"߷E9Z*fAnck#&Q Z4/UnW;$ۚ$ۂ_0|M^CHN|ޮ#ZNlqK~[ W |N{xAQ@Z/,?#`,X"s@kMcbp^Ѷa"6;RY MȤU׋MijPdS Ueʜ%FYP2}<5lnp>?(IǢ1Ҩ`13߅۲UG&GHOh%d >fK qD)XVA5ɌSE@Av jx,{1"oW ;̏pţ[2DAzu|ٺ"SWwelj<g>Y۟JA͑Ubɚ8(FC؛|~0omןՊ#J3֘V!;./7;0rI8#~Ó1ї:d[$AY bsw[!?.ţT,tYz+u b`G2\Cm-q%pG6ӛY! j)*)'5Xܻ/zh7)Z)*#IZN1 $B\솴KRB+g-^uq8'obHBl}cV )s?n GHszp0,*l;Jq>`Iv fϧ%5*L&TjM]d̈́ϊx4 '$gZKSG9H^_ b!3n%Y|}b7UX)ZN[|)!bAxi&[:r*Ih ~v?a(p͸l`B^lkE:EzԈ[xD. ~yms+><#C9VcAGow f'htV=CYPĎ7+l@ڎCZiBR?5|@ų&?w)ɝgOԐgBH$A5HkdaT0e}zˮ(myWoNZ4wK`5ף Yx!Kt\ U>NX: d; ' 2\ +עslт'׋@/uWi:cWcrOxz`SW8HA]q6µONo~q;65W5E<VNH\QLtXTƁ\3+de-hUg>V BX V_hHU уؕs0bU׬g)(Jؾ*sl G@"^r­#3FS["PK|Cp*Q֎G,b]O`!OYHBb#XoyV}E4/%R|.jg< !ҩ?XNIe>G$^4Q &y U4&)Yl/FB{wYT`iCz]+CF7梈68#Z@vc%]0 CUȃymth2_S2-zAw,$D_R4jBjNy!/c8֬\; )J _:ջY^MleH_7F%ʧǛ \M5]~A"R/{jgNj vk7 &hw l[ @PaL[Nhи'aw||P; m*lbBÕ}.g?ٱWA>s_iҒuwbi+aWk% uL %LH#3P)%Yf|r1/v9yİNkV|Ey@Ѵ.w6SBNh/ 5_^ߍG-K@y0t4~ d2l[Lo [klpfxHCO7蹯aOj[(FkN}|DgD xiSgxyn*YkN'^7F&p;V=OUs0{( Ƙ3 PEnϒ-+r4> ,DZ] Ì& s.xq,0h$[THc~@ ώZfFg$.8t!X ]؊3[ǻ`+ p9-ꏈ< Q ~9s~rz*lL8Sɤ${,o?YZe}ߐbR & s+$zjSF<HoH3|>"myEQJӞbQf]r&0UG&WƓIxף?s`8Nk GV4_LNȏaJGk":xXfI7Q3StF%b]?/+(kE_WXm5@g[HIӦ c>p_k$E&1\f ysD0Kv~ g9vrZZ#Ҩ_KV#gjXQy&$OeKQB̟N-l>RMD܆\":)|#8@Dѷj?sR)h7~Vds x~RaL+f})Ay\T3%#1*qX}/)%x& 6FW8ezk=Yߜ=GH/i!{i3:sa@O񴰪$@)o$C@鋌tuSr>s/5>s0E|nno1\Bd(/-R0XqXWvjj"qf~{0ܺ:"廐ZX|ONhqIkV'N*$X*?EQۆvx-W]odi9=K_v?jsټIQF>Ļ:DBWx( EfQn=g'r2IX lnNBwY>-ℬ) FqL ¨ /RN YyrJ UtWTm7/~R.BhnTb^HoӒX.!Rd,έp߫0ysX)TZ A-"{EQo||gQ a.ۢD`>c揻qRP3ˇc¯M<م)5JKX)T畩>8z6ԕ! ;V H4~S|iLrE Gd~PĠT2(5 .84̮IT0:H; :Za=1J/Ꮹ%%$ohUbҘ&l)0V(b h۸Ueh,bt^n#tXpb2U6KXcXQEհgғ85[Wh$9n,>#uO oV/b#Ks9~zAb۝'KJJ}?_h:3z_n}~C<5VU(ZrjU_Ε953RҬQo45j X )jԔpQ׆b2F1 rFl PlCIhx}aA`Cr-~dN٪Ī:־VpGG^mHo/W3xӝTϓ];Fy¬A:os5O:yJ-;؀Ĥհ?̳f< 9a2RҔv3b?60L@}Є~os1*Aa8a}2bƜc4] e~t.|:O:DGݍ=*:F5}{ŲɎao&q]3!Tvq9 aЛR;|_7o*:w8{Fҷ;Y3!t?%J[eTUiiCIU=Wc?^*_?$!5{4iMa7=gQ]TGɣQaZ@筁Qj0^Un iV\;No++I-)f& J{_J"EعYcQͩd|]rn&Ka䷇ ^Բ*"%ӮZ0tm(g#] EgcȿU@}G\ʠq"v9x{okӈP{41Xf6|H95{=%V*mCد˴cFU\.M..bp.b&WfiS!IA!6(uvڠ~IJҳP:v5-[Y-;ׅs=mQʦ1vd-{Y((HtW$*sxC:=gtuOcH`6Z*2Q@S5e&Ua&wbo,~ rt=vuuڄ0g~cU~TզH7|=H C뿤Ú=@ӐU{1Wa[/;mmkIӏЋB$3̎#i0hrhX9>mTkt?KL1Y;zըz Ye+d OmO7 ]oi#ɶ'yc6W0C^2dZDcqvZFQl=)!1SE jO預8F kZm೮dIX kR0C.r>y`j77\JJVY3xɄooLif z2/XȘ`^3Upf nO}xN5U!Og^KQ .Zv+j ,AF(+$`(3HQok\y蘡8h6OB,wJ"HUybd ϪAk glT"&+_ߨsKϦ< bx5O >*75;|IŌ_`9VVC~#3nm]!HQJǓ"LV9;hּ#~^ rhGi";_(ؙ̓8B:N;n}qFL |/m_q|# a4gZ{Mw ﶴ4pZ/t#PxekA'Yao[Vaft5S0mzq w)&+ U+]7F#6l5X:j,X"ܻ|^9lhxmX+/C8 pyqGoP^KH) 4( l4q(VD3^fnUiqM'o} :h+9T8/'iv{AGTë-@M>?A/q Wshev81@Ӷ#v&boتt!h5seQI`icu5נ ,#hgNTd&"[U?쇙̞L Py?R*:wCWkZ7Vupc'MxN sEk2,|>WJF]͔-qZz;RyQv*s M1D{'7KԶ׶;5} ^L&2d%}QO8 ~셦N|N!쌂fN%-5xj_KZUTGy@>ޟLn $Ey"ܱRzHn&vX>,|a*e \krZ6=R4}d/#4b=NJV^- ªW߰ɧm~Qɉ \T$. ~՝}xcǚ_>UA嘪{|OETC#AWˠQվ-!er8Ȁ 6ҧӈ#x:wY ;Ov9v^y3Wƭ7ȇD) 23[s|]A"4c(-1Alg]uM- ΍f$yrT*0wU?iCl]]şox*EÏUe-Fy>b5l/Z++.gdT%\Gwo吮%o)CrrB!(336-b es:( 1B#u+2 :|E) \:h!uTN\Tn&)!`_xD w/mr7:(31jC`R?o3uN( 1,^Dr8ɥ%њvS78B"l ps},ٽuY7{<ϱshS_dNnh=y3>KYuA?V)-Ppg,2`.jϴd6H_3ǜqݸƘP5Lp 9sU'K:d Raq$ϱyxNqr!O= v4v>yQl8ph"b7?KNv#Xnv!ZB\!+ I䛣+@uNO%7]M{Řt=J7 fɋdkҸJQn(=X0,*_'LS}jS?D~w.`LM;cl+h:OCwOPT(oIu/1 }F O'q9dPǜμdXW,m*}F kQAQC0+uz}[Y6?zŭo"A0*YwBɪ@8S,KDŽ|D4B%xjѳNJ-}69ӥ?xο|DGcn)jVs*J/[uȘ>}Ѷ9Y#9)SZ LbHe>ٓRDO|)xz,~"Ra:Fʸ/Ӕ\߫)ZT Ho{f(-9rML?']0EMHb}j7!-Z{Jq۳" aX3d,m M WԦݐ@,uDI*6H{ imӣh4eE1U8nI&EO۔@u m=DSFQn+hߗ2Bm ߭c3^$қ̟% y] ~(K~>{6ŗBؖ%ŽöO]'1q!n87oF H(SF0R|k5t㈾.F~5fK؞s*[OD 7UcVMDԤme(2j۾#h_~^ RR9scF辸v-Y'gNlQ5k V 3wamKє\"}fzQ"?>|JCx?tӤ倈ⱜ}.}¥f9YuGݛħ߭*C}P&EeOo3p彑EBBYʟ[u 恞Jq \Uvr}[B;Fw^å#DMԾy9ZG& \\mZELv;Jցb5l?b..HpEo# qVa泉)bt,<^vJ" +b$Xg 8hn՘&5f$"BQ$ aAұgEY5fJ t!> -[J"I̓f'.rP1$wW\0'~J7L᱙̬oezȗպE4yt\4*֟H"A]S2L?iHs>ȒGn _ `M-c $ޫ LQDz#|{4_5͆`1?zVqK暘8AM݆#V0OoM2 u@➣ ˨K궴T ¼h#u66_qᩰm´ŷRb{KHw熯ePeZAa4ק$uphhܣQMXd‹i:vG*c 82#Twv"F !U#qIfiU]SdNIl"W/&r~9eV> Uq0r&ߢ4Ql :1A$MC87[;DtVBe}.յ H=--,nrWWʄx'c~/|dڴK !+ w8PSр)4` endstream endobj 144 0 obj << /Type /FontDescriptor /FontName /MWVBXV+CMTI12 /Flags 4 /FontBBox [-36 -251 1103 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 63 /XHeight 431 /CharSet (/F/L/T/a/b/c/comma/d/e/f/g/h/hyphen/i/l/m/n/o/p/period/r/s/t/u/v/w/x/y) /FontFile 143 0 R >> endobj 145 0 obj << /Length1 2394 /Length2 16389 /Length3 0 /Length 17787 /Filter /FlateDecode >> stream xڌPwww 84];A݂C2r&3{UUkuAND/l 2lxL&&V&&xrresG+@{s Ͽ,Doo `ab!Ȟ EAnfoy@eD ` l 77282X@F@G3stadtqqa0v`ٛ P\@3e5oj e3sJ G{ M`enqxsq1޲$e@e23?#͟FF k[7sS /.H01ol`ne`fgq7s07ut`p0#a,fc, 8:QGs{[ N*6vN@ɏۼLv&&&.Vt52c#-O%7^ [ 3h`ln0&oo bz[?f?|y0co?G̨ Qo(ED@z6= ++oRkW.![Uf+#':ʿ/~@#yoE]a< ]Tjz%Gd$Lu[ᤑ^ԕm1e_ǭ !m ۟<w' 镅<yYBwI9q!+cܻK W!\>J%Rۯx<0k= #=; WٛW"8Zx(B 9 en\2\7c"R8 %E L `cDߺOyd$q엸%ȼ2wmilӚK˷ ݅:ʹym.AhHMjjloa4~b) Y`QJVg1yb;1X.v [QI>wS WnC5,r4oL3K*qH(T9-.3`~LTHqt l]^Yޓ1)m1q8ԬfVOKs~ f'v m>ͺpljeP7p)x=xuƭwM[0]qf/J~%fdFyպe{O*sLd~"ăc'P~acu}0H,uխ ڊ/Nas/kY )]xsi#ޒBʜ+O ѫFi̓ky1,4oʉ~aj+"h3/\ \i#Sۅ FG_rznW-ǩ#_"2ͮ[ 37_h | AAa<~$ѥ*烥Ǒ&80 QgSzs+22~k*8!?6zMF6eAeeJ.9Ql{jt/3nߗ:q]Ed";@XLHfS}<6Ƣܜ.-NGa i?"\5(ۆCō|m,:Y:`0b]X} s$uB2{ZxvLJW"v.JLLOȻl/ (=Jc!()3(>^~۪g"+DŝbBi /R&V#{Llf =Of(X .~0& yϪ Of"NNQ1LPJ7&1P|O1d؋ȀD".}r^p/Jed>DIecڴ>!XUR %u#4% @Z؆G"vΆ Ŝ.zql;>; '+%*btYZ=L).[)c_F'U~4Q#1siO=((0ӅETV,iGG_K]XPچ#SCk0ݖtMW0?B+ÓS{Ra=1r4@%k`NNN_ iyv^6p֘tMߑ։2Ĵ|VB;J>0 M/@Cn態~^}i9G\yQ"Xg%; EFމ9o8%ﳂE#PkQ[R/yC}_g:ӦLUU"c{TT BR38J-0AڝV a  lpr;6izF]3Al\|yZ]ORKŷ(35cT3a%s!IB՝9e&Y`XڢDWTFt̠&Xh4x;>uj5;Ujr ր4eP@pG=N+XYDզS>׮sѿ`u+9F)3ӄhB[iXDPE)( D S("ci)mг+Ȳ4_fnIWN8UN}`(!0ClZP&#_`K^UWKS`h_Q8"$P{_בJzI*GAzF/"{B͚DB_ɻx$XI#Ag8aE" VPKQ*ďIеluzGm'"{r'K.U |':e}!py#xn^oCxp GmuE&9iNو34)eQA"T>(W&4U&1$ޥS+v #蔰q@!^ QsQa1&'16^86 D@3w0qa5{=3[oqr"d4Kev'>ZyV/Pm+~gbH誎f^F0~Ž 9* 31xي|& IH2,wm(391Cb2{m\"&Kz+ f.3 &Zk.*#)a y]i`RP==8]7NyxiA.D>ݩ V0.bܵhpU:}>> z nr;?$f#%ckdgA7xñϺtu%-]/2,L ?%c:/gH!/*=tw[Ѝ7ұU57 U8~JP^5H睲z tki #zt7UQhnh"3D܍Ӌ%}{[#Yr|tmCwʮaI5ᆲ4 ؝+>bshl6c۴`LMz<||K$ѱ+Xʵ>kaxF&ǨV(Qc5a+kOhsgQKUگ\Jˊ:zNyU{ jsSs)e?{6`ˤ.5T/ep5t31&aĐm 0,܃jb<5cQgjuǮQ-=林{sl /Z>afkj-bRit'W^%UTCuz+'n$G.{W$1GtNmʜxdž3F j{%g*Z"f KNsD N(Razӆe\T2OR27̋B4[i:Qvײq4Ymx+m|kn~*{SB)_r>}[v x?cP6lDkNGc Wo8ͅicS<$!.j& e[H}0,KIwfǬ8jdb4Qm6W0xu(E>;emWZ_'gRBoMmH3f AC~Mw J>MC6`*P!|XpE NDC5 f [9O u"?4|+c4}BH19Zxc|(`&7]]c}+SC RL'bLY !}>_^;\o_RJAo `Y]QÏFf7 MLorP|J垷㴯C)@r%eķFUn*P]p+6ӳ[}K"I3'arZkA>s&rГ;[3~f4?vh [ >ۿha|GHӳLtXk<|xnspۭTCjWLbC.4y^E!J/$jsUgQ^,]>H9ªoDc:E*B(gرzz?°!ns unTg+#z% ؜?ODS56J#zm4#wnYK:G2q 72jW'*$FD$#fЗyDpVdw'Lv]A۟?֧9_g \C.bKƀwm媔X4pCyaU7LI2&D {">i>1հ$ɢI `%J1fKqQI@&LכhEiK*Vle&5  +Le-5AU&8ϋt9ۦ#:b\͂9r0([,,%=yEt 9oZ Fc߆}> /ח 4+‚]!3=0e7Rx8e/d5AːdxTBx[|52?4c4\SǗ|rҲ=>0v<D "j4#GJ~pLs18mm0JIw^af{2hpZ$Eb<[S5w`p$!|IE&m;n]!L/.zI!s섡sFk>\'ت馯Z&AX ݮ- ^ bPkyɎ桦u%#g!ܧ]vx N=4*,Z/(i3qRR[SDȨ}EږL7m ^7D*f Gv֟uF*$bq#eT&k+f?=l,,&vU7͡m'G7E֣[,asbkzUdۑoY^kW/ߞΤi'n1VP&Z͹ _kQu@M)$OC'nTڎ,X-('#G@e\@ aV儸uR,7HQw4 ]|F>]q3}/14oEȗ҉o2UJ*,L ¼pY e-JSpg^eJχ g> \)R}`[XΞjH?g ~_k{\_V]=̒XaXY~`Y:zQA/AYr~0O\O>p_ :U^O\bmHx Q +r4-歫R&|Ӛʟ!y#OQԫׂkY4̈P~X+Đ!ٰ&c_K {)>K0!s er02f k(S0ƤDy^̲q+J|t~' zX NÔX}P (fCl+>O'$PQJڂq4n[vLiGS9͡ڨ\ގw_ fՁvϤ 16f\c;LWc JmܸxەޕNR[ ԛr0i^bX7+\;~xmJp`8TtET4ޔQ~O5* ~iPa\L4pMl( ZJ5奓3(FtBX:*WL^ⲻt,N/D峎h`Hm{J/KV VCw_gVTvp5]<"`X \Lb hyxMx=&,[$1Ka"43ia>yl}vXYK xݳxsUc6a,ߔz|#%|%󑜖Ki0F-YjeĄ A'Oܜ9"0 v YN_l^J]9IrѩZ$!*4Sk"Kolgoo8bɢG4ecYw}*-c*OiCꌱۻY"~wHs6]Rp-aNvt+DeFWGi"Mm'9! 4Ҵ;,Bg !p$Dp KUN-a%(1k&%Oz!-[_Y#P WpyQo C&쏲8-4"Ɏ6fُTLnH~ICIn,WZ?TK=!`S0omDsh*/uSxkB# ۳ f18nn}/*{,De("~F[/j AA L?r0@4EQgjd u'{IۉP̀It .,/0؆G.#ܒIE+=/J4 i7c(rç,ݣ)`$J;zedStI{JPtĢ=74/NpQmWi8;U %7B5VJኊb1:"ѕQǦu0-ģ0itx:r}G~mD>2I"9 @ (ވG__-E-Gp!? cKߥ}J}/&ek9EWjČ1nOkc_HAwYRIeUof6;Ot#=\sɥҗ h%dmT"V͆mX{}CmVkEqM-3EL?=h/XR֜x>Me-y~ቧ{ݖX3O5 h*bk|.ĖSuwBQ'7ÍbPX #IK*2z4F}mL4~VH"k(u'M2;Me ?e#nXz'~ux1$L7ycR l)A ק%v.렂Ru [ơٸoOUw9OD7ZTzE3 IHI>(7=&8 Mզ5d/XjH嘾 gsWxCHRKhD fIq)2m3dĦp 5:V/3qĒW3(l 0̎˪IѶ^>3"01(  q )iJ3mg>] u>:ݐ EKVq}2mՃ}`bn Ž4G1*h/Q4HW"PlZGHsҫ0r"$;̸u\[䕵:hzk#n#}ˬP MUkݴbo^NN P>#9f׌;WӷVX\ؖOW6Fmup¾yFYU|zi8;|4a~6 2 2􋭣~^K qej:=m 4N+URV +SX:g~jNy3hg/.[g%(j~j a׊ 3G)0&ņ&Z3ϩ]\#UC(F$R ¼t\.~ xZ~Kɰ1F4RLX &EľGP&ѯx%a&lT/*TVIt18yzfRAHX;AP,QD$'I&̫֔'ާ 6P\n$\Rq$ CFDRwٿ/Sl+F*Ai+Q]j ڜY߉׳?o-"a+06~dn!m68]b2.hEq>+n:o d;oq2J9]#}a9iOW#RD¾H[[4gΪ$6}?TO[]ԈJ@F<+ԇ0k-Jcs̵a7k&twzbg;":Hf8b Y2e9{u ei2i>KNJWQOikh2KTg@ Y=>6!*W^Uu EDTGܜt^ 6nZ_h]Z%6G%cP[=wգO-->"AjQLLJa/_GPTqXc\>}ܫ/$abT _܉B7j˲v]{@Q+?*BVR^(mUab]UmvZ@FmuTSfUǢZ>ocّ{RؑUO!{x;byaC{Z&0''Y񜘕QBS\uϢzz S7!63h5B෡8kIJ KKg G>"bS()grd IoI5Fb%$qacN!~st2xOtV ux7AAg-5~f*62ݚ|hS ӛb""Zj#mKkby|2r;?tRΙqc֪]o8|DѹGؕHpN ;%ʐ!Srg]PRqGӏQ[OllgKin krZ9hSyjKL(|/b$Tep1gJF{c_?|eټ0<w\|Xc^WApcr;oRZb?bIFD MxֿM(s$ (0ٷ়39vhy6ޭY#7ϋ{7=.گi~97bTN '5zeg.PTr̾xKRpLb{BHau 7ycm4-,U];QG:Ŋ:vS{I| @͂f}2Zr~f4P -O4QCbKb bCq`>xc/="][ MwlYTFEx,#ˮgs"hʑ_Q: ,XxA2S}Sؽ!ZQخ!qrl,vKTQ?*mOϖ5tempr8Dx1 U;i$SM*`2rW1Eu:뻈z^}/CwwO\2C6odXʯpMB$CzEUC\*Rur"Q9OqI7o\7_<]gBWMsl,.#=t[AyI0uu#^792mQ:ƃe=B$#dLD&rgdVt `T&P87c8XRH( hC  !֟Rw ]YU{&; o]TUrUs;0ɍ;k48vJ#3縝Ė2}uOrd9V6: KZs#/RG&u4\0[ 1<}=Doeb ]l{ϹBbN՗Lɱ`r@:Ht$ڮA5NnX)5ԀQ dy A/sYY%)I_F;Lَ1Y6$I5%Ypp'Bקnnc,=g2 8FeoVZ Nwe>{ԛ9vN pe4,&` 2,̩ڷVقj4Do5Sab#{F Y\] wQRSlQէ#͊C[X#I5hfIYe4 ef~Յo^W+++TwgUowmBp pQ [\ Rcm0ds3V|7NSJ1C2C9PT=J%*˝aFgG*0YVsnr3J;l?X$U':d|(fEa%u"UEp_ĕT;N_y/n('Yj"ǒcz۱Ko$o8x侘>%=FN5Ʋ$~A۞81N?_(5/l3@D 7Zg8~ٹyUV1rP :O>eY+{Q")c)L^P}ruz}_ͷv&#(EXӏ2↲8gӬf :\qg{c 0ƴb~~4+wy7-S_4Z^ѭhrzFں$0xqȼ[h+V,ދfH;9M2*p^?$MRa`##+psiDV&ԜJF>j+;",S||cžѓ,B,,W_J/W4D)d7\h]EJ|PM^|`du1ad0)A>Ԙx%*ZR:uѷíX{:y6(5Ig.4S6Edtasc9C0ѭ)6l52*l5T4pmedѯ-C#:~'L>(8EaH&Zd7z2n0n <*Ɇ3vIfqG?L ƽִϼ>_]X`(働ΐujW ī~ b5 |%ɓ؀o  tìWNuݍl̹$X]7zMۢ+t4]ZnjWúS]1AʆnG0f9#ya32%`!XΚ!߁cG6[ʚty+3ҡ AȺ?e,eub:7E>cewhX[!Մ_P称?GmЧlOMNrwefO}7]<_I)~i>}<ޤ# "c1iT'ӖՓ\#jLu6̼mWeF:HJ2u6=0I1ǿ(ZSLQE(.n4 Տ!?Q}E| ѦRB&A3k/>Ƥȸ [L 1m/XDWI֝ݍQڜ$_t/'b?8h?l3H ~xI^ERI&ccXCRp[M=v\n|XVU&\7Ɲ*~1/+07-r٭m"Nhed 0O:Q :kb|Gt*8O*8{gj"RPTsyX4^.J_թc҂Gn#-D[N!c']ؚOm][uջW? rKu~#T:rk@r=4G&sp qdÔHv~/\uao:Ў|Yo> >%S` =q ^[}/>RYH3e7FkS+grīZO=}5~'?-_m8AT|5q./^"'ҧxh?f ~ƏO͞ƺqa"KWhhB )^;ѓoɓvo:uq8Vzui@_]򎉝mV%^k!''?Vd+LMR?p%3P)¥ƒY7ԉ5>Ч"[j !ZgNZ4At AK5}Qdd~%g!2v'}0, #0I, 7iՠ@ի"-YܒE6f 4zK<%Ʃ6uF5 aRɚ噺T8%)"{Jۖ=:__‡Q ʇڱb)XP-^;+VuXXAC&{}ܘ"uّ{Be D%sP8#BHYn ?N6j&*&<˯25Uup:.8'^YL {a @O h 2Y;N#0{*7aw'"%cUa+PƘOTT@"ٰ^$%M~+ I >m3w1upXV&Har,sxi2TESi5Sy)1=feC6>M@|%X]xfέy}88aejKgò B_!U8YXPI2ڼĻ :ӲYw(Z71Gnq'$wG/ "` }5_bK([3d,d ȎF~6d\&(Ҧ8Ǩ]m:CT"V @)V٥?>3nNNޙu=?>C%.)Rڋ7Nb2/0j@|F.%n]Z,iY*'UiH"Q]4(jLW"G{DzOR5##8-y77n( j891S?餌nݐɚM4@vεmShzq%dL) s&fU |=<1IoV.J &Xy4y>*j,8#u]h;=vȎ ti*D)д5$!h  Lۡ@b`O]8ЃIE+*,zX, f ." GJp&TWztG(_&i<$&ٮF{ulZ(2=?`GժP4B3bAb|5[p9s߼oIR[ģ@F+j:Tʮ80L 5d'ö +mE-vGAT.!-`IB;peW5} m7 CrnDdq@ωAk_oخ)M<;u1F鿣ky n_Km͠2HL9_~Ȭg顉E3mݏMW&3yPv 1U][3ߖXx%cbhުa Nhϟ]NZHh)8v;$w%1ulMuo&9c8~%cfD͊qw!-_âRwHZCS4Ͳ4j JTr܏H* v"VVjV4ZQ//PizC}ȭ$YxPnceg:"+u $jņL j 0wu~9\mJb_l^=>_#ּb~wNI@L;{ϋNkQ$PǕX;#u |z*rY4C,ۊT'ù?/+,O=ĴCryj}X @:l(.xwZ a瓑y I=#+@TwukM;N{ gd8s%O>+L[Sߍ>e_PH>:HO~hov 0FGA endstream endobj 146 0 obj << /Type /FontDescriptor /FontName /ZPJYDN+CMTT10 /Flags 4 /FontBBox [-4 -233 537 696] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/A/C/D/E/F/H/I/L/N/P/R/S/T/U/X/a/asterisk/b/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/f/five/four/g/h/hyphen/i/k/l/m/n/nine/o/one/p/parenleft/parenright/period/quotedbl/quoteright/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/zero) /FontFile 145 0 R >> endobj 147 0 obj << /Length1 2069 /Length2 7467 /Length3 0 /Length 8699 /Filter /FlateDecode >> stream xڍT7N*LQ J&NAJ@Z iIAZB:w>=3{hX!-aHi OƦG=9Hr0+H@c bb ,|U$"aC:;ml<|pB`Q~d`p(Ѐma،P=@ )aF;|FP0g'e&75>6-Biv8X= C.UQ`5DIx?6?% 2w* C#wO'Ns3Uk~Þ݃]9gCn m\ws` p7VIcN,ܩ]%#%+th]ۿ&j߭ߛ>C +҄e Mz;?5{1V_N1_nJ>'[>U T-wԩkO3* *BBm=dTa^=5z͖ 5|/nMmRb)ʱ2vIUX y/8:-ȉo;+J)ftȑP4L :GKҢ~#% lQc7 Nbh:?. Nާ-.`֔9B"EȚ%MԼ q7S|jMƛD^EZ 'S'ݎ] 9&d|SndfS*ZlMUXoeKAhm>Xg($p.ݞXޔRwNTiq Ym)*|wq*+l41[Z}%D 6.k-W^R?RB007AK~]ϑ~sBMJ]D(e^ LR#2[g8uO- Œ.fš"8pњωah84.*.V|_r@2;bud AhMcƋda-Pb=eV `T<ȯ=O^VrG)OnȆay~WtVCugD& gm`޷MviB%¤':gzPטLySpE[Iګ;] fѦDnWhkO1\Da ޺De+x=;OדFj)oU<}`u|k$[bҝ in3~gAA܆9Y}YvS "|UjIf7akMvl흧7(N~%=9 >+qBS$a9Β 'ϻq1TӻCSL F[0`f~hчҦ}> w=gS1KZZe;_޿"]GHp7lBE'=F[->c*LaNFiݠޑu!%Jr=a0\uK>:"6X8Ed&($w-IaC2nޚ4UUs!9XbVܴoT$KCY;%f؀׏Ch7ۮR MF9MĄȵؙd^[a!4.=9}O4n^\=}+Yq`fhH؃w(R_Pp3;ýMx2ҳ4NB=j8駫o(JemXGa㈚^ 8]*>d,aDVśx˴}/f%"`f|GaʡQ{{#VY:Z^%[x!17x=ԖTe=Ss~B|ݚfL0˭vXD#Y.ɜ?b> e# ϭLõ3zmS8Pg][s4,!<7'!Ī9S&T#u6$p|DjЍH:a?&ޡ8L3J9_[0Sm7Sf]%ճ㏛ZkMBM /f { h+uUJ,r\n˴}A30MFؗ y+ 4қgvDՌ,= YJ,*yW< 1Si.n{nS䳺9upnN4rg"%O>Ez9;?n4.8U} m:ʖ‘Q[%|A@[mn%5%My\ xO_JSqөsW:1/K}/C}9yg Tc*\9DL/U9<Bf h&뉷l$.'ЄU*zT|7} XoKħl$F>l+b`N-|-{.yUr&qkwiǷ;hR#/(tcKԃx;OcxDZ4`r 7qU{#׼wU1@)nR#Kr ǎ-L93@o%oHy 8"F:EzfSٟ{F/^L?uH3ZL}oPW O/-k0:a&1nߝS`m1B"kDg,͜ᶼ<ӊc,`)e'ʫMeqx_xo̯G|#xy$T]c01IMDQ2^܌]"wfؿwJ".VvSKD]sI)GS]HT1I}ԋCѥk}w43vޟ&j!b\xԆZ􉛞<9ecA z%(*roOL 0t_?!f(Zo(z7JNYч<ׅfGU(d`Gn0}}G,z3`T7FbtݦkKM׿q ,-Mi=6yד4΀D6ㅉױ1 cdM.\8\zɦӀ8y*Q8m.i3t#+^DkjvV݄<{>X VhOfo lߠo?,IAXiV7f;[ǥ#R"9UZ\/rw8,v=馔l{]|%’ZհIg&չ-`I,=$MydytvMeȗVń;?n 8f>Jc4!q $K5<5374NZڑ%J|eV$Ya2(8Wǜd苘ܭԌҫlFɶF#K&W&{{?Z&oNUGnpkr]C*Aadt^5דs+I=LcNu:c>4pg+j?RD.y.TDc1_>&`a'#67d Q(?ms$&PO{#jvhơ8fgHqΤ m@DiY1ɗ`d\ g |'L*RZ{ˋ('|ӧ덩19|9Z(2wjO."1]{:72X-2S:.o^h;үjP9b*쭲U94> QK14<Q)ɼtL7o22ϫ [!p }XDC"75Ĵ# f{F**Z|p,,iKe0ecmO =\Sfzkt~| ؾ;q_m7[HiAq$O 4&xLQ*Yc$m4^Aor]h$NH oHg\!s$M`cKz<ĬIf=XYFq{E";˙3tT`m:{3E]~ibꑕ8tC=Nk!q f19lgĄE])=H+&*BR ه>Jl^%0~ݛ琊Cbt)<8@ʝC)U9sޫ,_%?YF1U謕'E&ֈ2=T=Ԑp|)`,0UwITreStҷ?e*0teH:/ e&-Khy\>+{\[ņ{9o%H*:4!tj]4_Q4kWwYA=6$Ѕ;pFTKyVNB[k_qZ$2dk!?Rw le|!XݷCX6p& zYJp/T2f8h(?4ܷRX&*f 28Xo7,9#> ~z:K2\Zڰi}9m)1u ЕzsQX9sR(\ݹ,n4#7{D>14;(w] Ϣ^hx ̛6PLJ Ge#5܅>!̇3hkJ74ZZ4bb{okOj3ʥeRز +nDÌ_|MRÔD뵌xrꐿmŲcXQ𙑉kĺ $v!w]]PkHt?95oQx*`a++,BOp#ç¸;Hsg\[_uz|c!;6oT"EWq>p.)ab/շ.on{pޤ|)z[vю`4{xNŒJMj}RlOV,0&+҇j/s #)EkR;>:5}TOrn'vuWq+5ljHS@wKqB>c&y[]e<.{t)$כɷ%~̪5aq݆0S XYJ/A;ñ!EAtG7LuiJqYI3+Wͦ%D=?@pFoQm|LJ}NfY֚VX"Rdo5utw^KZJ,ۡ5>}eT2e= `-H ُPrc٘X84l\U3z#BJ F83ܓk7ֵHt@ig<4gv0bJ;޼Tٹ\qa1\DtuڷA4j^1@Eމk(ySc!sCΊnjyM&#1y7U^ #z=*+YyGzG"V5-5",c?b< 7[$p05Nqt۰D@-"29U_sO8pimnwbVqvk|\(yj@0[W/u8mBZ{7^qHi[-_-/wZ@Qq= 0F fkrSYԔV2GY^uQj=}C6w3)yDMe2HA9ݼRI轖Swz05>rY+ BQ]N7v2όþ>)!+&E54!'쓁6o9 7cNI2vv:јkkD>\RS%a4or0aA AP3YUDyYjy!/Ͱj!lц00hG%-1ZCk.Y2Փkztŗ> F%95bk mqnSqT/s"1T63Sn jfˤ~x|ɜpz endstream endobj 148 0 obj << /Type /FontDescriptor /FontName /PASZKR+CMTT12 /Flags 4 /FontBBox [-1 -234 524 695] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/B/C/E/H/L/R/S/T/U/X/a/asciitilde/at/b/c/d/e/equal/f/g/h/hyphen/i/k/l/m/n/o/one/p/parenleft/parenright/period/quotedbl/r/s/slash/t/two/u/v/w/x/y) /FontFile 147 0 R >> endobj 149 0 obj << /Length1 1384 /Length2 1126 /Length3 0 /Length 1972 /Filter /FlateDecode >> stream xڍSkTSWaPR* p\ 0򊀉 croH.!|U`P+*(jBD+2 JScE_VpnpGW:;gexLܹl\ 'A<..pJǟ1\Z+P QƂP&H(p^|H R b0K JSIrF?s\/)+PPJ+I TڄL_9ENjj*Ujؤ:on,Sr 5PR`VJ8NVqJRFjh@ca)]X**H iಹFpbTDN$ \ dS:PBj$ IǣZW4T> Uh`j\Ei\a1[LHIa/WC}gC#T"}<" (GDxr c K!\"OarUi*h:aZ>]E t R@}; 8FD4 e{zԸHz1F&% Eqpldh8٣RCx,F; &T#UJH5,[AڑIaX LaI81K!<6)OYݪ) #U⊴ y[ j\ixzz5".Rj_W+y7Bm$$sνwHuߴӇύBì :崮+-${mV)W{ jeN{i&[{u'\kv#`eٳۈv"3=njϺCT-B/oܔY"%-~==ɿus-(1˟a,oe]/t4֘˻/E 75ů% zc#u!梘.c#2- ϐYF%oMɥy?[_\[tә8XVo` ?-_@0o}xi[֗ٚg+]#\Z>knqI baPS!mݪ8ڕYziV-4u/wlߣ&{ѶBҤ"Uc!Ѳe6Y63 os9*r>&oÛcw񘹁\~x ̞|g;kFo{0zV#vCo1s\Y%Gk-zdm7HNHTnuȌ<V?3?3^u6aәñ`n8lցAw㖗*vG`LkUu0luJ犧z<#K ?]%X2앃dl}x^ՙ/k }-;e{ゖ i"uݧl@︵즅0 Gy[Vmq}*oI |OX>2>Xކd֌)k*_.Hrbfoc7wU/ٓ'{[6?؞ 7qX\:nOɯ5.5a^lvIVyz3g +s~b*H?9P# O=BNTYT" rc5S=9t%~{cȯ{<2% {/^e?l>)rͲ_eu?P {u9|S7 gCI';YͲv_rs9KGmMp8ޞfx֙]_ce$t-{²߹XxTqJS8* endstream endobj 150 0 obj << /Type /FontDescriptor /FontName /PEZREM+LCIRCLEW10 /Flags 4 /FontBBox [-2000 -2000 2080 2080] /Ascent 0 /CapHeight 0 /Descent 0 /ItalicAngle 0 /StemV 80 /XHeight 0 /CharSet (/a101/a117) /FontFile 149 0 R >> endobj 32 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BLYWAC+CMBX12 /FontDescriptor 126 0 R /FirstChar 12 /LastChar 124 /Widths 124 0 R >> endobj 74 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GTYSIE+CMITT10 /FontDescriptor 128 0 R /FirstChar 99 /LastChar 110 /Widths 113 0 R >> endobj 75 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TOZZLY+CMMI12 /FontDescriptor 130 0 R /FirstChar 62 /LastChar 62 /Widths 112 0 R >> endobj 36 0 obj << /Type /Font /Subtype /Type1 /BaseFont /RFUZUK+CMR10 /FontDescriptor 132 0 R /FirstChar 38 /LastChar 121 /Widths 120 0 R >> endobj 35 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZPPELK+CMR12 /FontDescriptor 134 0 R /FirstChar 11 /LastChar 124 /Widths 121 0 R >> endobj 34 0 obj << /Type /Font /Subtype /Type1 /BaseFont /WULYQV+CMR17 /FontDescriptor 136 0 R /FirstChar 46 /LastChar 114 /Widths 122 0 R >> endobj 52 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UEPENK+CMSL12 /FontDescriptor 138 0 R /FirstChar 12 /LastChar 124 /Widths 119 0 R >> endobj 53 0 obj << /Type /Font /Subtype /Type1 /BaseFont /BJACHW+CMSLTT10 /FontDescriptor 140 0 R /FirstChar 34 /LastChar 121 /Widths 118 0 R >> endobj 58 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GFAWRG+CMSY10 /FontDescriptor 142 0 R /FirstChar 15 /LastChar 15 /Widths 114 0 R >> endobj 55 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MWVBXV+CMTI12 /FontDescriptor 144 0 R /FirstChar 44 /LastChar 121 /Widths 116 0 R >> endobj 54 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZPJYDN+CMTT10 /FontDescriptor 146 0 R /FirstChar 34 /LastChar 120 /Widths 117 0 R >> endobj 33 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PASZKR+CMTT12 /FontDescriptor 148 0 R /FirstChar 34 /LastChar 126 /Widths 123 0 R >> endobj 56 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PEZREM+LCIRCLEW10 /FontDescriptor 150 0 R /FirstChar 101 /LastChar 117 /Widths 115 0 R >> endobj 37 0 obj << /Type /Pages /Count 6 /Parent 151 0 R /Kids [26 0 R 45 0 R 50 0 R 60 0 R 66 0 R 70 0 R] >> endobj 90 0 obj << /Type /Pages /Count 6 /Parent 151 0 R /Kids [87 0 R 92 0 R 96 0 R 100 0 R 104 0 R 109 0 R] >> endobj 151 0 obj << /Type /Pages /Count 12 /Kids [37 0 R 90 0 R] >> endobj 152 0 obj << /Type /Outlines /First 3 0 R /Last 23 0 R /Count 6 >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 152 0 R /Prev 19 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 152 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 152 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 152 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 152 0 R /Prev 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 152 0 R /Next 7 0 R >> endobj 153 0 obj << /Names [(Doc-Start) 31 0 R (figure.1) 57 0 R (figure.2) 73 0 R (page.1) 30 0 R (page.10) 111 0 R (page.2) 47 0 R] /Limits [(Doc-Start) (page.2)] >> endobj 154 0 obj << /Names [(page.3) 68 0 R (page.4) 72 0 R (page.5) 89 0 R (page.6) 94 0 R (page.7) 98 0 R (page.8) 102 0 R] /Limits [(page.3) (page.8)] >> endobj 155 0 obj << /Names [(page.9) 106 0 R (section*.1) 48 0 R (section*.2) 107 0 R (section.1) 2 0 R (section.2) 6 0 R (section.3) 10 0 R] /Limits [(page.9) (section.3)] >> endobj 156 0 obj << /Names [(section.4) 14 0 R (section.5) 18 0 R (section.6) 22 0 R] /Limits [(section.4) (section.6)] >> endobj 157 0 obj << /Kids [153 0 R 154 0 R 155 0 R 156 0 R] /Limits [(Doc-Start) (section.6)] >> endobj 158 0 obj << /Dests 157 0 R >> endobj 159 0 obj << /Type /Catalog /Pages 151 0 R /Outlines 152 0 R /Names 158 0 R /PageMode/UseOutlines/PageLabels<>2<>]>> /OpenAction 25 0 R >> endobj 160 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.13)/Keywords() /CreationDate (D:20140519140424+02'00') /ModDate (D:20140519140424+02'00') /Trapped /False /PTEX.Fullbanner (This is MiKTeX-pdfTeX 2.9.4535 (1.40.13)) >> endobj xref 0 161 0000000000 65535 f 0000000015 00000 n 0000006001 00000 n 0000214368 00000 n 0000000060 00000 n 0000000111 00000 n 0000006119 00000 n 0000214284 00000 n 0000000156 00000 n 0000000184 00000 n 0000039364 00000 n 0000214198 00000 n 0000000229 00000 n 0000000294 00000 n 0000044263 00000 n 0000214110 00000 n 0000000340 00000 n 0000000392 00000 n 0000048932 00000 n 0000214022 00000 n 0000000438 00000 n 0000000502 00000 n 0000054404 00000 n 0000213947 00000 n 0000000548 00000 n 0000000620 00000 n 0000001427 00000 n 0000001561 00000 n 0000001849 00000 n 0000000668 00000 n 0000001731 00000 n 0000001790 00000 n 0000211720 00000 n 0000213291 00000 n 0000212433 00000 n 0000212291 00000 n 0000212149 00000 n 0000213582 00000 n 0000002684 00000 n 0000002834 00000 n 0000002983 00000 n 0000003133 00000 n 0000003283 00000 n 0000003433 00000 n 0000003701 00000 n 0000002515 00000 n 0000001967 00000 n 0000003583 00000 n 0000003642 00000 n 0000006176 00000 n 0000005886 00000 n 0000003783 00000 n 0000212575 00000 n 0000212718 00000 n 0000213148 00000 n 0000213005 00000 n 0000213434 00000 n 0000006059 00000 n 0000212863 00000 n 0000008506 00000 n 0000008391 00000 n 0000006353 00000 n 0000011438 00000 n 0000013726 00000 n 0000024273 00000 n 0000011647 00000 n 0000011304 00000 n 0000008660 00000 n 0000011588 00000 n 0000039423 00000 n 0000013611 00000 n 0000011789 00000 n 0000039246 00000 n 0000039305 00000 n 0000211863 00000 n 0000212007 00000 n 0000021206 00000 n 0000021349 00000 n 0000021447 00000 n 0000021482 00000 n 0000021576 00000 n 0000036179 00000 n 0000036322 00000 n 0000036420 00000 n 0000036455 00000 n 0000036549 00000 n 0000041652 00000 n 0000041478 00000 n 0000039628 00000 n 0000041593 00000 n 0000213692 00000 n 0000044321 00000 n 0000044089 00000 n 0000041782 00000 n 0000044204 00000 n 0000046369 00000 n 0000046195 00000 n 0000044463 00000 n 0000046310 00000 n 0000048992 00000 n 0000048754 00000 n 0000046499 00000 n 0000048871 00000 n 0000051969 00000 n 0000051730 00000 n 0000049122 00000 n 0000051848 00000 n 0000051909 00000 n 0000054464 00000 n 0000054225 00000 n 0000052112 00000 n 0000054343 00000 n 0000054595 00000 n 0000054620 00000 n 0000054687 00000 n 0000054710 00000 n 0000054801 00000 n 0000055174 00000 n 0000055541 00000 n 0000055912 00000 n 0000056532 00000 n 0000057006 00000 n 0000057630 00000 n 0000058059 00000 n 0000058636 00000 n 0000059288 00000 n 0000074602 00000 n 0000074969 00000 n 0000078365 00000 n 0000078596 00000 n 0000085616 00000 n 0000085844 00000 n 0000099932 00000 n 0000100211 00000 n 0000119519 00000 n 0000119972 00000 n 0000128840 00000 n 0000129089 00000 n 0000143591 00000 n 0000143931 00000 n 0000161317 00000 n 0000161806 00000 n 0000168913 00000 n 0000169140 00000 n 0000181553 00000 n 0000181843 00000 n 0000199751 00000 n 0000200222 00000 n 0000209041 00000 n 0000209401 00000 n 0000211493 00000 n 0000213805 00000 n 0000213873 00000 n 0000214439 00000 n 0000214607 00000 n 0000214764 00000 n 0000214940 00000 n 0000215063 00000 n 0000215160 00000 n 0000215198 00000 n 0000215365 00000 n trailer << /Size 161 /Root 159 0 R /Info 160 0 R /ID [ ] >> startxref 215640 %%EOF Epi/inst/doc/index.html0000644000175100001440000000101012531361114014511 0ustar hornikusers Vignettes for the Epi package</a>

Vignettes for the Epi package

Here is the website for the Epi package. Epi/inst/doc/sim-Lexis.rnw0000644000175100001440000014272412576333004015146 0ustar hornikusers\SweaveOpts{results=verbatim,keep.source=TRUE,include=FALSE,eps=FALSE,prefix.string=sL} %\VignetteIndexEntry{Simulation of multistate models with multiple timescales: simLexis} \documentclass[a4paper,twoside,12pt]{report} %---------------------------------------------------------------------- % General information \newcommand{\Title}{Simulation of\\ multistate models with\\ multiple timescales:\\ \texttt{simLexis} in the \texttt{Epi} package} \newcommand{\Tit}{Multistate models with multiple timescales} \newcommand{\Version}{Version 2.2} \newcommand{\Dates}{\today} \newcommand{\Where}{SDC} \newcommand{\Homepage}{\url{http://BendixCarstensen.com/Epi}} \newcommand{\Faculty}{\begin{tabular}{rl} Bendix Carstensen & Steno Diabetes Center, Gentofte, Denmark\\ & {\small \& Department of Biostatistics, University of Copenhagen} \\ & \texttt{bxc@steno.dk}\\ & \url{http://BendixCarstensen.com} \\[1em] \end{tabular}} %---------------------------------------------------------------------- % Packages %\usepackage[inline]{showlabels} \usepackage[T1]{fontenc} \usepackage[latin1]{inputenc} \usepackage[english]{babel} \usepackage[font=it,labelfont=normalfont]{caption} \usepackage[colorlinks,urlcolor=blue,linkcolor=red]{hyperref} \usepackage[ae,hyper]{Rd} \usepackage[dvipsnames]{xcolor} \usepackage{makeidx,Sweave,floatflt,amsmath,amsfonts,amsbsy,enumitem,verbatim,dcolumn,needspace} \usepackage{booktabs,longtable,rotating,graphicx,verbatim,fancyhdr,datetime,afterpage} % \usepackage{times} \renewcommand{\textfraction}{0.0} \renewcommand{\topfraction}{1.0} \renewcommand{\bottomfraction}{1.0} \renewcommand{\floatpagefraction}{0.9} % \usepackage{mslapa} \definecolor{blaa}{RGB}{99,99,255} \DeclareGraphicsExtensions{.pdf,.jpg} %---------------------------------------------------------------------- % The usual usefuls % \input{c:/util/tex/useful.tex} \providecommand{\pmat}[1]{\text{\rm P}\left\{#1\right\}} \providecommand{\dif}{{\,\mathrm d}} % Simple insertion of figures \newcommand{\rwpre}{sL} \newcommand{\insfig}[3]{ \begin{figure}[h] \centering \includegraphics[width=#2\textwidth]{\rwpre-#1} \caption{#3} \label{fig:#1} \end{figure}} %---------------------------------------------------------------------- % Layout of pages \oddsidemargin 1mm \evensidemargin 1mm \topmargin -5mm \headheight 8mm \headsep 5mm \textheight 240mm \textwidth 165mm %\footheight 5mm \footskip 15mm \renewcommand{\topfraction}{0.9} \renewcommand{\bottomfraction}{0.9} \renewcommand{\textfraction}{0.1} \renewcommand{\floatpagefraction}{0.9} \renewcommand{\headrulewidth}{0.1pt} \setcounter{secnumdepth}{4} \setcounter{tocdepth}{4} %---------------------------------------------------------------------- % Here is the document starting with the titlepage \begin{document} %---------------------------------------------------------------------- % The title page \setcounter{page}{1} \pagenumbering{roman} \pagestyle{plain} \thispagestyle{empty} \vspace*{0.05\textheight} \flushright % The blank below here is necessary in order not to muck up the % linespacing in the title if it has more than 2 lines {\Huge \bfseries \Title }\ \\[-1.5ex] \noindent\textcolor{blaa}{\rule[-1ex]{\textwidth}{5pt}}\\[2.5ex] \large \Where \\ \Dates \\ \Homepage \\ \Version \\[1em] \normalsize Compiled \today,\ \currenttime\\ \normalsize \vfill \Faculty % End of titlepage % \newpage %---------------------------------------------------------------------- % Table of contents \tableofcontents %---------------------------------------------------------------------- % General text layout \raggedright \parindent 1em \parskip 0ex \cleardoublepage %---------------------------------------------------------------------- % General page style \pagenumbering{arabic} \setcounter{page}{1} \pagestyle{fancy} \renewcommand{\chaptermark}[1]{\markboth{\textsl{#1}}{}} \renewcommand{\sectionmark}[1]{\markright{\thesection\ \textsl{#1}}{}} \fancyhead[EL]{\bf \thepage \quad \rm \leftmark} \fancyhead[ER]{\sl \Tit} \fancyhead[OR]{\rm \rightmark \quad \bf \thepage} \fancyfoot{} %---------------------------------------------------------------------- % Here comes the substance \chapter{Using \texttt{simLexis}} \section{Introduction} This vignette explains the machinery behind simulation of life histories through multistate models implemented in \texttt{simLexis}. In \texttt{simLexis} transition rates are allowed to depend on multiple time scales, including timescales defined as time since entry to a particular state (duration). This therefore also covers the case where time \emph{at} entry into a state is an explanatory variable for the rates, since time at entry is merely time minus duration. Thus, the set-up here goes beyond Markov- and semi-Markov-models, and brings simulation based estimation of state-occupancy probabilities into the realm of realistic multistate models. The basic idea is to simulate a new \texttt{Lexis} object \cite{Plummer.2011,Carstensen.2011a} as defined in the \texttt{Epi} package for \R, based on 1) a multistate model defined by its states and the transition rates between them and 2) an initial population of individuals. Thus the output will be a \texttt{Lexis} object describing the transitions of a predefined set of persons through a multistate model. Therefore, if persons are defined to be identical at start, then calculation of the probability of being in a particular state at a given time boils down to a simple enumeration of the fraction of the persons in the particular state at the given time. Bar of course the (binomial) simulation error, but this can be brought down by simulation a sufficiently large number of persons. An observed \texttt{Lexis} object with follow-up of persons through a number of states will normally be the basis for estimation of transition rates between states, and thus will contain all information about covariates determining the occurrence rates, in particular the \emph{timescales} \cite{Iacobelli.2013}. Hence, the natural input to simulation from an estimated multistate model will typically be an object of the same structure as the originally observed. Since transitions and times are what is simulated, any values of \texttt{lex.Xst} and \texttt{lex.dur} in the input object will of course be ignored. This first chapter of this vignette shows by an example how to use the function \texttt{simLexis} and display the results. The subsequent chapter discusses in more detail how the simulation machinery is implemented and is not needed for the practical use of \texttt{simLexis}. \section{\texttt{simLexis} in practice} This section is largely a commented walk-trough of the example from the help-page of \texttt{simLexis}, with a larger number of simulated persons in order to minimize the pure simulation variation. When we want to simulate transition times through a multistate model where transition rates may depend on time since entry to the current or a previous state, it is essential that we have a machinery to keep track of the transition time on \emph{all} time scales, as well as a mechanism that can initiate a new time scale to 0 when a transition occurs to a state where we shall use time since entry as determinant of exit rates from that state. This is provided by \texttt{simLexis}. \subsection{Input for the simulation} Input for simulation of a single trajectory through a multistate model requires a representation of the \emph{current status} of a person; the starting conditions. The object that we supply to the simulation function must contain information about all covariates and all timescales upon which transitions depend, and in particular which one(s) of the timescales that are defined as time since entry into a particular state. Hence, starting conditions should be represented as a \texttt{Lexis} object (where \texttt{lex.dur} and \texttt{lex.Xst} are ignored, since there is no follow-up yet), where the time scale information is in the attributes \texttt{time.scale} and \texttt{time.since} respectively. Thus there are two main arguments to a function to simulate from a multistate model: \begin{enumerate} \item A \texttt{Lexis} object representing the initial states and covariates of the population to be simulated. This has to have the same structure as the original \texttt{Lexis} object representing the multistate model from which transition rates in the model were estimated. As noted above, the values for \texttt{lex.Xst} and \texttt{lex.dur} are not required (since these are the quantities that will be simulated). \item A transition object, representing the transition intensities between states, which should be a list of lists of intensity representations. As an intensity representation we mean a function that for given a \texttt{Lexis} object that can be used to produce estimates of the transition intensities at a set of supplied time points since the state represented in the \texttt{Lexis} object. The names of the elements of the transition object (which are lists) will be names of the \emph{transient} states, that is the states \emph{from} which a transition can occur. The names of the elements of each of these lists are the names of states \emph{to} which transitions can occur (which may be either transient or absorbing states). Hence, if the transition object is called \texttt{Tr} then \verb+TR$A$B+ (or \verb+Tr[["A"]][["B"]]+) will represent the transition intensity from state \texttt{A} to the state \texttt{B}. The entries in the transition object can be either \texttt{glm} objects, representing Poisson models for the transitions, \texttt{coxph} objects representing an intensity model along one time scale, or simply a function that takes a \texttt{Lexis} object as input returns an estimated intensity for each row. \end{enumerate} In addition to these two input items, there will be a couple of tuning parameters. The output of the function will simply be a \texttt{Lexis} object with simulated transitions between states. This will be the basis for deriving sensible statistics from the \texttt{Lexis} object --- see next section. \section{Setting up a \texttt{Lexis} object} As an example we will use the \texttt{DMlate} dataset from the \texttt{Epi} package; it is a dataset simulated to resemble a random sample of 10,000 patients from the Danish National Diabetes Register. We start by loading the \texttt{Epi} package: <>= options( width=90 ) library( Epi ) print( sessionInfo(), l=F ) @ % First we load the diabetes data and set up a simple illness-death model: <>= data(DMlate) dml <- Lexis( entry = list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit = list(Per=dox), exit.status = factor(!is.na(dodth),labels=c("DM","Dead")), data = DMlate ) @ % This is just data for a simple survival model with states ``DM'' and ``Dead''. Now we cut the follow-up at insulin start, which for the majority of patients (T2D) is a clinical indicator of deterioration of disease regulation. We therefore also introduce a new timescale, and split the non-precursor states, so that we can address the question of ever having been on insulin: <>= dmi <- cutLexis( dml, cut = dml$doins, pre = "DM", new.state = "Ins", new.scale = "t.Ins", split.states = TRUE ) summary( dmi ) str(dmi) @ % $ We can show how many person-years we have and show the number of transitions and transition rates (per 1000), using the \texttt{boxes.Lexis} function to display the states and the number of transitions between them: <>= boxes( dmi, boxpos = list(x=c(20,20,80,80), y=c(80,20,80,20)), scale.R = 1000, show.BE = TRUE ) @ % \insfig{boxes}{0.8}{Data overview for the \textrm{\tt dmi} dataset. Numbers in the boxes are person-years and the number of persons who begin, resp. end their follow-up in each state, and numbers on the arrows are no. of transitions and rates (transition intensities) per 1000 PY.} \section{Analysis of rates} In the \texttt{Lexis} object (which is just a data frame) each person is represented by one record for each transient state he occupies, thus in this case either 1 or 2 records; those who have a recorded time both without and with insulin have two records. In order to be able to fit Poisson models with occurrence rates varying by the different time-scales, we split the follow-up in 6-month intervals for modeling: <>= Si <- splitLexis( dmi, 0:30/2, "DMdur" ) dim( Si ) print( subset( Si, lex.id==97 )[,1:10], digits=6 ) @ % Note that when we split the follow-up each person's follow up now consists of many records, each with the \emph{current} values of the timescales at the start of the interval represented by the record. In the modelling we must necessarily assume that the rates are constant within each 6-month interval, but the \emph{size} of these rates we model as smooth functions of the time scales (that is the values at the beginning of each interval). The approach often used in epidemiology where one parameter is attached to each interval of time (or age) is not feasible when more than one time scale is used, because intervals are not classified the same way on all timescales. We shall use natural splines (restricted cubic splines) for the analysis of rates, and hence we must allocate knots for the splines. This is done for each of the time-scales, and separately for the transition out of states ``DM'' and ``Ins''. For age, we place the knots so that the number of events is the same between each pair of knots, but only half of this beyond each of the boundary knots, whereas for the timescales \texttt{DMdur} and \texttt{tIns} where we have observation from a well-defined 0, we put knots at 0 and place the remaining knots so that the number of events is the same between them and beyond the last: <>= nk <- 5 ( ai.kn <- with( subset(Si,lex.Xst=="Ins"), quantile( Age+lex.dur , probs=(1:nk-0.5)/nk ) ) ) ( ad.kn <- with( subset(Si,lex.Xst=="Dead"), quantile( Age+lex.dur , probs=(1:nk-0.5)/nk ) ) ) ( di.kn <- with( subset(Si,lex.Xst=="Ins"), c(0,quantile( DMdur+lex.dur, probs=(1:(nk-1))/nk ) )) ) ( dd.kn <- with( subset(Si,lex.Xst=="Dead"), c(0,quantile( DMdur+lex.dur, probs=(1:(nk-1))/nk ) )) ) ( ti.kn <- with( subset(Si,lex.Xst=="Dead(Ins)"), c(0,quantile( t.Ins+lex.dur, probs=(1:(nk-1))/nk ) )) ) @ % We then fit Poisson models to transition rates, using the wrapper \texttt{Ns} from the \texttt{Epi} package to simplify the specification of the rates: <>= library( splines ) DM.Ins <- glm( (lex.Xst=="Ins") ~ Ns( Age , knots=ai.kn ) + Ns( DMdur, knots=di.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="DM") ) DM.Dead <- glm( (lex.Xst=="Dead") ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="DM") ) Ins.Dead <- glm( (lex.Xst=="Dead(Ins)") ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + Ns( t.Ins, knots=ti.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="Ins") ) @ % Note the similarity of the code used to fit the three models, is is mainly redefining the response variable (``to'' state) and the subset of the data used (``from'' state). \section{The mortality rates} This section discusses in some detail how to extract ad display the mortality rates from the models fitted. But it is not necessary for understanding how to use \texttt{simLexis} in practice. \subsection{Proportionality of mortality rates} Note that we have fitted separate models for the three transitions, there is no assumption of proportionality between the mortality rates from \texttt{DM} and \texttt{Ins}. However, there is nothing that prevents us from testing this assumption; we can just fit a model for the mortality rates in the entire data frame \texttt{Si}, and compare the deviance from this with the sum of the deviances from the separate models: <>= with( Si, table(lex.Cst) ) All.Dead <- glm( (lex.Xst %in% c("Dead(Ins)","Dead")) ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + lex.Cst + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = Si ) round( ci.exp( All.Dead ), 3 ) @ From the parameter values we would in a simple setting just claim that start of insulin-treatment was associated with a slightly more than doubling of mortality. The model \texttt{All.dead} assumes that the age- and DM-duration effects on mortality in the ``DM'' and ``Ins'' states are the same, and moreover that there is no effect of insulin duration, but merely a mortality that is larger by a multiplicative constant not depending on insulin duration. The model \texttt{DM.Dead} has 8 parameters to describe the dependency on age and DM duration, the model \texttt{Ins.Dead} has 12 for the same plus the insulin duration (a natural spline with $k$ knots gives $k-1$ parameters, and we chose $k=5$ above). We can compare the fit of the proportional hazards model with the fit of the separate models for the two mortality rates, by adding up the deviances and d.f. from these: <>= what <- c("null.deviance","df.null","deviance","df.residual") ( rD <- unlist( DM.Dead[what] ) ) ( rI <- unlist( Ins.Dead[what] ) ) ( rA <- unlist( All.Dead[what] ) ) round( c( dd <- rA-(rI+rD), "pVal"=1-pchisq(dd[3],dd[4]+1) ), 3 ) @ % Thus we see there is a substantial non-proportionality of mortality rates from the two states; but a test provides no clue whatsoever to the particular \emph{shape} of the non-proportionality. To this end, we shall explore the predicted mortalities under the two models quantitatively in more detail. Note that the reason that there is a difference in the null deviances (and a difference of 1 in the null d.f.) is that the null deviance of \texttt{All.Dead} refer to a model with a single intercept, that is a model with constant and \emph{identical} mortality rates from the states ``DM'' and ``Ins'', whereas the null models for \texttt{DM.Dead} and \texttt{Ins.Dead} have constant but \emph{different} mortality rates from the states ``DM'' and ``Ins''. This is however irrelevant for the comparison of the \emph{residual} deviances. \subsection{How the mortality rates look} If we want to see how the mortality rates are modelled in \texttt{DM.Dead} and \texttt{Ins.Dead} in relation to \texttt{All.Dead}, we make a prediction of rates for say men diagnosed in different ages and going on insulin at different times after this. So we consider men diagnosed in ages 40, 50, 60 and 70, and who either never enter insulin treatment or do it 0, 2 or 5 years after diagnosis of DM. To this end we create a prediction data frame where we have observation times from diagnosis and 12 years on (longer would not make sense as this is the extent of the data). But we start by setting up an array to hold the predicted mortality rates, classified by diabetes duration, age at diabetes onset, time of insulin onset, and of course type of model. What we want to do is to plot the age-specific mortality rates for persons not on insulin, and for persons starting insulin at different times after DM. The mortality curves start at the age where the person gets diabetes and continues 12 years; for persons on insulin they start at the age when they initiate insulin. <>= pr.rates <- NArray( list( DMdur = seq(0,12,0.1), DMage = 4:7*10, r.Ins = c(NA,0,2,5), model = c("DM/Ins","All"), what = c("rate","lo","hi") ) ) str( pr.rates ) @ % For convenience the \texttt{Epi} package contains a function that computes predicted (log-)rates with c.i. --- it is merely a wrapper for \texttt{predict.glm}: <<>>= ci.pred @ So set up the prediction data frame and modify it in loops over ages at onset and insulin onset. Note that we set \texttt{lex.dur} to 1000 in the prediction frame, so that we obtain rates in units of events per 1000 PY. <>= nd <- data.frame( DMdur = as.numeric( dimnames(pr.rates)[[1]] ), lex.Cst = factor( 1, levels=1:4, labels=levels(Si$lex.Cst) ), sex = factor( 1, levels=1:2, labels=c("M","F")), lex.dur = 1000 ) for( ia in dimnames(pr.rates)[[2]] ) { dnew <- transform( nd, Age = as.numeric(ia)+DMdur, Per = 1998+DMdur ) pr.rates[,ia,1,"DM/Ins",] <- ci.pred( DM.Dead, newdata = dnew ) pr.rates[,ia,1,"All" ,] <- ci.pred( All.Dead, newdata = dnew ) for( ii in dimnames(pr.rates)[[3]][-1] ) { dnew = transform( dnew, lex.Cst = factor( 2, levels=1:4, labels=levels(Si$lex.Cst) ), t.Ins = ifelse( (DMdur-as.numeric(ii)) >= 0, DMdur-as.numeric(ii), NA ) ) pr.rates[,ia, ii ,"DM/Ins",] <- ci.pred( Ins.Dead, newdata = dnew ) pr.rates[,ia, ii ,"All" ,] <- ci.pred( All.Dead, newdata = dnew ) } } @ % $ So for each age at DM onset we make a plot of the mortality as function of current age both for those with no insulin treatment at those that start 1, 3 and 5 years after, thus 4 curves (with c.i.). These curves are replicated with a different color for the simplified model. <>= par( mar=c(3,3,1,1), mgp=c(3,1,0)/1.6, las=1 ) plot( NA, xlim=c(40,82), ylim=c(5,300), bty="n", log="y", xlab="Age", ylab="Mortality rate per 1000 PY" ) abline( v=seq(40,80,5), h=outer(1:9,10^(0:2),"*"), col=gray(0.8) ) for( aa in 4:7*10 ) for( ii in 1:4 ) matlines( aa+as.numeric(dimnames(pr.rates)[[1]]), cbind( pr.rates[,paste(aa),ii,"DM/Ins",], pr.rates[,paste(aa),ii,"All" ,] ), type="l", lty=1, lwd=c(3,1,1), col=rep(c("red","limegreen"),each=3) ) @ % \insfig{mort-int}{0.9}{Estimated mortality rates for male diabetes patients with no insulin (lower sets of curves) and insulin (upper curves), with DM onset in age 40, 50, 60 and 70. The red curves are from the models with separate age effects for persons with and without insulin, and a separate effect of insulin duration. The green curves are from the model with common age-effects and only a time-dependent insulin effect (the classical time-dependent variable approach).} From figure \ref{fig:mort-int} we see that there is a substantial insulin-duration effect which is not accommodated by the simple model with only one time-dependent variable to describe the insulin effect. Note that the simple model (green curves) for those on insulin does not depend in insulin duration, and hence the mortality curves for those on insulin are just parallel to the mortality curves for those not on insulin, regardless of diabetes duration (or age) at the time of insulin initiation. This is the proportional hazards assumption. Thus the effect of insulin initiation is under-estimated for short duration of insulin and over-estimated for long duration of insulin. This is the major discrepancy between the two models, and illustrates the importance of being able to accommodate different time scales, but there is also a declining overall insulin effect by age which is not accommodated by the proportional hazards approach. Finally, this plot illustrates an important feature in reporting models with multiple timescales; all timescales must be represented in the predicted rates, only reporting the effect of one timescale, conditional on a fixed value of other timescales is misleading since all timescales by definition advance at the same pace. For example, the age-effect for a fixed value of insulin duration is a misnomer since it does not correspond to any real person's follow-up. \section{Input to the \texttt{simLexis} function} In order to simulate from the multistate model with the estimated transition rates, and get the follow-up of a hypothetical cohort, we must supply \emph{both} the transition rates and the structure of the model \emph{as well as} the initial cohort status to \texttt{simLexis}. \subsection{The transition object} We first put the models into an object representing the transitions; note this is a list of lists, the latter having \texttt{glm} objects as elements: <>= Tr <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = DM.Dead ), "Ins" = list( "Dead(Ins)" = Ins.Dead ) ) @ % Now we have the description of the rates and of the structure of the model. The \texttt{Tr} object defines the states and models for all transitions between them; the object \verb|Tr$A$B| is the model for the transition intensity from state \texttt{A} to state \texttt{B}. \subsection{The initial cohort} We now define an initial \texttt{Lexis} object of persons with all relevant covariates defined. Note that we use \texttt{subset} to get a \texttt{Lexis} object, this conserves the \texttt{time.scale} and \texttt{time.since} attributes which is needed for the simulation (the usual ``\texttt{[}'' operator does not preserve these attributes when you select columns): <>= str( Si[NULL,1:9] ) ini <- subset(Si,FALSE,select=1:9) str( ini ) ini <- subset(Si,select=1:9)[NULL,] str( ini ) @ % We now have an empty \texttt{Lexis} object with attributes reflecting the timescales in multistate model we want to simulate, so we must now enter some data to represent the persons whose follow-up we want to simulate through the model; we set up an initial dataset with one man and one woman: <>= ini[1:2,"lex.id"] <- 1:2 ini[1:2,"lex.Cst"] <- "DM" ini[1:2,"Per"] <- 1995 ini[1:2,"Age"] <- 60 ini[1:2,"DMdur"] <- 5 ini[1:2,"sex"] <- c("M","F") ini @ % \section{Simulation of the follow-up} Now we simulate 5000 of each of these persons using the estimated model. The \texttt{t.range} argument gives the times range where the integrated intensities (cumulative rates) are evaluated and where linear interpolation is used when simulating transition times. Note that this must be given in the same units as \texttt{lex.dur} in the \texttt{Lexis} object used for fitting the models for the transitions. <>= Nsim <- 500 system.time( simL <- simLexis( Tr, ini, t.range = 12, N = Nsim ) ) @ % The result is a \texttt{Lexis} object --- a data frame representing the simulated follow-up of 10,000 persons (5000 identical men and 5000 identical women) according to the rates we estimated from the original dataset. <>= summary( simL, by="sex" ) @ % \subsection{Using other models for simulation} \subsubsection{Proportional hazards Poisson model} We fitted a proportional mortality model \texttt{All.Dead} (which fitted worse than the other two), this is a model for \emph{both} the transition from ``DM'' to ``Death'' \emph{and} from ``Ins'' to ``Dead(Ins)'', assuming that they are proportional. But it can easily be used in the simulation set-up, because the state is embedded in the model via the term \texttt{lex.Cst}, which is updated during the simulation. Simulation using this instead just requires that we supply a different transition object: <>= Tr.p <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = All.Dead ), "Ins" = list( "Dead(Ins)" = All.Dead ) ) system.time( simP <- simLexis( Tr.p, ini, t.range = 12, N = Nsim ) ) summary( simP, by="sex" ) @ % \subsubsection{Proportional hazards Cox model} A third possibility would be to replace the two-time scale proportional mortality model by a one-time-scale Cox-model, using diabetes duration as time scale, and age at diagnosis of DM as (fixed) covariate: <>= library( survival ) Cox.Dead <- coxph( Surv( DMdur, DMdur+lex.dur, lex.Xst %in% c("Dead(Ins)","Dead")) ~ Ns( Age-DMdur, knots=ad.kn ) + I(lex.Cst=="Ins") + I(Per-2000) + sex, data = Si ) round( ci.exp( Cox.Dead ), 3 ) round( ci.exp( All.Dead ), 3 ) @ % Note that in order for this model to be usable for simulation, it is necessary that we use the components of the \texttt{Lexis} object to specify the survival. Each record in the data frame \texttt{Si} represents follow up from \texttt{DMdur} to \texttt{DMdur+lex.dur}, so the model is a Cox model with diabetes duration as underlying timescale and age at diagnosis, \texttt{Age-DMdur}, as covariate. Also note that we used \texttt{I(lex.Cst=="Ins")} instead of just \texttt{lex.Cst}, because \texttt{coxph} assigns design matrix columns to all levels of \texttt{lex.Cst}, also those not present in data, which would give \texttt{NA}s among the parameter estimates and \texttt{NA}s as mortality outcomes. We see that the effect of insulin and the other covariates are pretty much the same as in the two-time-scale model. We can simulate from this model too; there is no restrictions on what type of model can be used for different transitions <>= Tr.c <- list( "DM" = list( "Ins" = Tr$DM$Ins, "Dead" = Cox.Dead ), "Ins" = list( "Dead(Ins)" = Cox.Dead ) ) system.time( simC <- simLexis( Tr.c, ini, t.range = 12, N = Nsim ) ) summary( simC, by="sex" ) @ \section{Reporting the simulation results} We can now tabulate the number of persons in each state at a predefined set of times on a given time scale. Note that in order for this to be sensible, the \texttt{from} argument would normally be equal to the starting time for the simulated individuals. <>= system.time( nSt <- nState( subset(simL,sex=="M"), at=seq(0,11,0.2), from=1995, time.scale="Per" ) ) nSt[1:10,] @ % We see that as time goes by, the 5000 men slowly move away from the starting state (\texttt{DM}). Based on this table (\texttt{nSt} is a table) we can now compute the fractions in each state, or, rather more relevant, the cumulative fraction across the states in some specified order, so that a plot of the stacked probabilities can be made, using either the default rather colorful layout, or a more minimalistic version (both in figure \ref{fig:pstate0}): <>= pM <- pState( nSt, perm=c(1,2,4,3) ) head( pM ) par( mfrow=c(1,2), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( pM ) plot( pM, border="black", col="transparent", lwd=3 ) text( rep(as.numeric(rownames(pM)[nrow(pM)-1]),ncol(pM)), pM[nrow(pM),]-diff(c(0,pM[nrow(pM),]))/5, colnames( pM ), adj=1 ) box( col="white", lwd=3 ) box() @ % \insfig{pstate0}{1.0}{Default layout of the \textrm{\tt plot.pState} graph (left), and a version with the state probabilites as lines and annotation of states.} A more useful set-up of the graph would include a more through annotation and sensible choice of colors, as seen in figure \ref{fig:pstatex}: <>= clr <- c("limegreen","orange") # expand with a lighter version of the two chosen colors clx <- c( clr, rgb( t( col2rgb( clr[2:1] )*2 + rep(255,3) ) / 3, max=255 ) ) par( mfrow=c(1,2), las=1, mar=c(3,3,4,2), mgp=c(3,1,0)/1.6 ) # Men plot( pM, col=clx ) lines( as.numeric(rownames(pM)), pM[,2], lwd=3 ) mtext( "60 year old male, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) # Women pF <- pState( nState( subset(simL,sex=="F"), at=seq(0,11,0.2), from=1995, time.scale="Per" ), perm=c(1,2,4,3) ) plot( pF, col=clx ) lines( as.numeric(rownames(pF)), pF[,2], lwd=3 ) mtext( "60 year old female, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) @ % \insfig{pstatex}{1.0}{\textrm{\tt plot.pState} graphs where persons ever on insulin are given in orange and persons never on insulin in green, and the overall survival (dead over the line) as a black line.} If we instead wanted to show the results on the age-scale, we would use age as timescale when constructing the probabilities; otherwise the code is pretty much the same as before (Figure \ref{fig:pstatey}): <>= par( mfrow=c(1,2), las=1, mar=c(3,3,4,2), mgp=c(3,1,0)/1.6 ) # Men pM <- pState( nState( subset(simL,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) plot( pM, col=clx, xlab="Age" ) lines( as.numeric(rownames(pM)), pM[,2], lwd=3 ) mtext( "60 year old male, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:19/20, labels=FALSE, tcl=-0.4 ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) # Women pF <- pState( nState( subset(simL,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) plot( pF, col=clx, xlab="Age" ) lines( as.numeric(rownames(pF)), pF[,2], lwd=3 ) mtext( "60 year old female, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:9/10, labels=FALSE ) axis( side=4, at=1:19/20, labels=FALSE, tcl=-0.4 ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) @ % Note the several statements with \texttt{axis(side=4,...}; they are nesessary to get the fine tick-marks in the right hand side of the plots that you will need in order to read off the probabilities at 2006 (or 71 years). \insfig{pstatey}{1.0}{\textrm{\tt plot.pState} graphs where persons ever on insulin are given in orange and persons never on insulin in green, and the overall survival (dead over the line) as a black line.} \subsection{Comparing predictions from different models} We have actually fitted different models for the transitions, and we have simulated Lexis objects from all three approaches, so we can plot these predictions on top of each other: <>= PrM <- pState( nState( subset(simP,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) PrF <- pState( nState( subset(simP,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) CoxM <- pState( nState( subset(simC,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) CoxF <- pState( nState( subset(simC,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) par( mfrow=c(1,2), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( pM, border="black", col="transparent", lwd=3 ) lines( PrM, border="blue" , col="transparent", lwd=3 ) lines( CoxM, border="red" , col="transparent", lwd=3 ) text( 60.5, 0.05, "M" ) box( lwd=3 ) plot( pF, border="black", col="transparent", lwd=3 ) lines( PrF, border="blue" , col="transparent", lwd=3 ) lines( CoxF, border="red" , col="transparent", lwd=3 ) text( 60.5, 0.05, "F" ) box( lwd=3 ) @ % \insfig{comp-0}{1.0}{Comparison of the simulated state occupancy probabilities using separate Poisson models for the mortality rates with and without insulin (black) and using proportional hazards Poisson models (blue) and Cox-models with diabetes duration as timescale and age at diabetes diagnosis as covariate (red).} From figure \ref{fig:comp-0} it is clear that the two proportional hazards models (blue and red curves) produce pretty much the same estimates of the state occupancy probabilites over time, but also that they relative to the model with separately estimated transition intensities overestimates the probability of being alive without insulin and underestimates the probabilities of being dead without insulin. However both the overall survival, and the fraction of persons on insulin are quite well in agreement with the more elaborate model. Thus the proportional hazards models overestimate the relative mortality of the insulin treated diabetes patients relative to the non-insulin treated. Interestingly, we also see a bump in th estimated probabilities from the Cox-model based model, but this is entirely an artifact that comes from the estimation method for the baseline hazard of the Cox-model that lets the (cumulative) hazard have large jumps at event times where the risk set is small. So also here it shows up that an assumption of continuous underlying hazards leads to more credible estimates. \chapter{Simulation of transitions in multistate models} \section{Theory} Suppose that the rate functions for the transitions out of the current state to, say, 3 different states are $\lambda_1$, $\lambda_2$ and $\lambda_3$, and the corresponding cumulative rates are $\Lambda_1$, $\Lambda_2$ and $\Lambda_3$, and we want to simulate an exit time and an exit state (that is either 1, 2 or 3). This can be done in two slightly different ways: \begin{enumerate} \item First time, then state: \begin{enumerate} \item Compute the survival function, $S(t) = \exp\bigl(-\Lambda_1(t)-\Lambda_2(t)-\Lambda_3(t)\bigr)$ \item Simulate a random U(0,1) variate, $u$, say. \item The simulated exit time is then the solution $t_u$ to the equation $S(t_u) = u \quad \Leftrightarrow \quad \sum_j\Lambda_j(t_u) = -\log(u)$. \item A simulated transition at $t_u$ is then found by simulating a random draw from the multinomial distribution with probabilities $p_i=\lambda_i(t_u) / \sum_j\lambda_j(t_u)$. \end{enumerate} \item Separate cumulative incidences: \begin{enumerate} \item Simulate 3 independent U(0,1) random variates $u_1$, $u_2$ and $u_3$. \item Solve the equations $\Lambda_i(t_i)=-\log(u_i), i=1,2,3$ and get $(t_1,t_2,t_3)$. \item The simulated survival time is then $\min(t_1,t_2,t_3)$, and the simulated transition is to the state corresponding to this, that is $k \in \{1,2,3\}$, where $t_k=\min(t_1,t_2,t_3)$ \end{enumerate} \end{enumerate} The intuitive argument is that with three possible transition there are 3 independent processes running, but only the first transition is observed. The latter approach is used in the implementation in \texttt{simLexis}. The formal argument for the equality of the two approaches goes as follows: \begin{enumerate} \item Equality of the transition times: \begin{enumerate} \item In the first approach we simulate from a distribution with cumulative rate $\Lambda_1(t)+\Lambda_2(t)+\Lambda_3(t)$, hence from a distribution with survival function: \begin{align*} S(t) & = \exp\bigl(-(\Lambda_1(t)+\Lambda_2(t)+\Lambda_3(t))\bigr) \\ & = \exp\bigl(-\Lambda_1(t)\bigr)\times \exp\bigl(-\Lambda_2(t)\bigr)\times \exp\bigl(-\Lambda_3(t)\bigr) \end{align*} \item In the second approach we choose the smallest of three independent survival times, with survival functions $\exp(-\Lambda_i), i=1,2,3$. Now, the survival function for the minimum of three independent survival times is: \begin{align*} S_\text{min}(t) & = \pmat{\min(t_1,t_2,t_3)>t} \\ & = \pmat{t_1>t} \times \pmat{t_2>t} \times \pmat{t_3>t} \\ & = \exp\bigl(-\Lambda_1(t)\bigr)\times \exp\bigl(-\Lambda_2(t)\bigr)\times \exp\bigl(-\Lambda_3(t)\bigr) \end{align*} which is the same survival function as derived above. \end{enumerate} \item Type of transition: \begin{enumerate} \item In the first instance the probability of a transition to state $i$, conditional on the transition time being $t$, is as known from standard probability theory: $\lambda_i(t)/\bigl(\lambda_1(t)+\lambda_2(t)+\lambda_3(t)\bigr)$. \item In the second approach we choose the transition corresponding to the the smallest of the transition times. So when we condition on the event that a transition takes place at time $t$, we have to show that the conditional probability that the smallest of the three simulated transition times was actually the $i$th, is as above. But conditional on \emph{survival} till $t$, the probabilities that events of type $1,2,3$ takes place in the interval $(t,t+\dif t)$ are $\lambda_1(t)\dif t$, $\lambda_2(t)\dif t$ and $\lambda_1(t)\dif t$, respectively (assuming that the probability of more than one event in the interval of length $\dif t$ is 0). Hence the conditional probabilities \emph{given a transition time} in $(t,t+\dif t)$ is: \[ \frac{\lambda_i(t)\dif t}{\lambda_1(t)\dif t+\lambda_2(t)\dif t+\lambda_3(t)\dif t}= \frac{\lambda_i(t)}{\lambda_1(t)+\lambda_2(t)+\lambda_3(t)} \] --- exactly as above. \end{enumerate} \end{enumerate} \section{Components of \texttt{simLexis}} This section explains the actually existing code for \texttt{simLexis}, as it is in the current version of \texttt{Epi}. <>= options( keep.source=TRUE ) @ % The function \texttt{simLexis} takes a \texttt{Lexis} object as input. This defines the initial state(s) and times of the start for a number of persons. Since the purpose is to simulate a history through the estimated multistate model, the input values of the outcome variables \texttt{lex.Xst} and \texttt{lex.dur} are ignored --- the aim is to simulate values for them. Note however that the attribute \texttt{time.since} must be present in the object. This is used for initializing timescales defined as time since entry into a particular state, it is a character vector of the same length as the \texttt{time.scales} attribute, with value equal to a state name if the corresponding time scale is defined as time since entry into that state. In this example the 4th timescale is time since entry into the ``Ins'' state, and hence: <<>>= cbind( attr( ini, "time.scale" ), attr( ini, "time.since" ) ) @ % \texttt{Lexis} objects will have this attribute set for time scales created using \texttt{cutLexis}. The other necessary argument is a transition object \texttt{Tr}, which is a list of lists. The elements of the lists should be \texttt{glm} objects derived by fitting Poisson models to a \texttt{Lexis} object representing follow-up data in a multistate model. It is assumed (but not checked) that timescales enter in the model via the timescales of the \texttt{Lexis} object. Formally, there are no assumptions about how \texttt{lex.dur} enters in the model. Optional arguments are \texttt{t.range}, \texttt{n.int} or \texttt{time.pts}, specifying the times after entry at which the cumulative rates will be computed (the maximum of which will be taken as the censoring time), and \texttt{N} a scalar or numerical vector of the number of persons with a given initial state each record of the \texttt{init} object should represent. The central part of the functions uses a \texttt{do.call} / \texttt{lapply} / \texttt{split} construction to do simulations for different initial states. This is the construction in the middle that calls \texttt{simX}. \texttt{simLexis} also calls \texttt{get.next} which is further detailed below. <<>>= simLexis @ % \subsection{\texttt{simX}} \texttt{simX} is called by \texttt{simLexis} and simulates transition-times and -types for a set of patients assumed to be in the same state. It is called from \texttt{simLexis} with a data frame as argument, uses the state in \texttt{lex.Cst} to select the relevant component of \texttt{Tr} and compute predicted cumulative intensities for all states reachable from this state. Note that it is here the switch between \texttt{glm}, \texttt{coxph} and objects of class \texttt{function} is made. The dataset on which this prediction is done has \texttt{length(time.pts)} rows per person. <<>>= Epi:::simX @ % As we see, \texttt{simX} calls \texttt{sim1} which simulates the transition for one person. \subsection{\texttt{sim1}} The predicted cumulative intensities are fed, person by person, to \texttt{sim1} --- again via a \texttt{do.call} / \texttt{lapply} / \texttt{split} construction --- and the resulting time and state is appended to the \texttt{nd} data frame. This way we have simulated \emph{one} transition (time and state) for each person: <<>>= Epi:::sim1 @ % The \texttt{sim1} function uses \texttt{lint} to do linear interpolation. \subsection{\texttt{lint}} We do not use \texttt{approx} to do the linear interpolation, because this function does not do the right thing if the cumulative incidences (\texttt{ci}) are constant across a number of times. Therefore we have a custom made linear interpolator that does the interpolation exploiting the fact the the \texttt{ci} is non-decreasing and \texttt{tt} is strictly monotonously increasing: <<>>= Epi:::lint @ \subsection{\texttt{get.next}} We must repeat the simulation operation on those that have a simulated entry to a transient state, and also make sure that any time scales defined as time since entry to one of these states be initialized to 0 before a call to \texttt{simX} is made for these persons. This accomplished by the function \texttt{get.next}: <<>>= Epi:::get.next @ \subsection{\texttt{chop.lex}} The operation so far has censored individuals \texttt{max(time.pts)} after \emph{each} new entry to a transient state. In order to groom the output data we use \texttt{chop.lex} to censor all persons at the same designated time after \emph{initial} entry. <<>>= Epi:::chop.lex @ \section{Probabilities from simulated \texttt{Lexis} objects} Once we have simulated a Lexis object we will of course want to use it for estimating probabilities, so basically we will want to enumerate the number of persons in each state at a pre-specified set of time points. \subsection{\texttt{nState}} Since we are dealing with multistate model with potentially multiple time scales, it is necessary to define the timescale (\texttt{time.scale}), the starting point on this timescale (\texttt{from}) and the points after this where we compute the number of occupants in each state, (\texttt{at}). <<>>= nState @ % \subsection{\texttt{pState}, \texttt{plot.pState} and \texttt{lines.pState}} In order to plot probabilities of state-occupancy it is useful to compute cumulative probabilities across states in any given order; this is done by the function \texttt{pState}, which returns a matrix of class \texttt{pState}: <<>>= pState @ % There is also a \texttt{plot} and \texttt{lines} method for the resulting \texttt{pState} objects: <<>>= plot.pState lines.pState @ % \bibliographystyle{plain} \begin{thebibliography}{1} \bibitem{Carstensen.2011a} B.~Carstensen and M.~Plummer. \newblock Using {L}exis objects for multi-state models in {R}. \newblock {\em Journal of Statistical Software}, 38(6):1--18, 1 2011. \bibitem{Iacobelli.2013} S.~Iacobelli and B.~Carstensen. \newblock {{M}ultiple time scales in multi-state models}. \newblock {\em Stat Med}, 32(30):5315--5327, Dec 2013. \bibitem{Plummer.2011} M.~Plummer and B.~Carstensen. \newblock Lexis: An {R} class for epidemiological studies with long-term follow-up. \newblock {\em Journal of Statistical Software}, 38(5):1--12, 1 2011. \end{thebibliography} \addcontentsline{toc}{chapter}{References} \end{document} Epi/inst/doc/sim-Lexis.R0000644000175100001440000004122012531361114014520 0ustar hornikusers### R code from vignette source 'sim-Lexis.rnw' ### Encoding: ISO8859-1 ################################################### ### code chunk number 1: start ################################################### options( width=90 ) library( Epi ) print( sessionInfo(), l=F ) ################################################### ### code chunk number 2: Lexis ################################################### data(DMlate) dml <- Lexis( entry = list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit = list(Per=dox), exit.status = factor(!is.na(dodth),labels=c("DM","Dead")), data = DMlate ) ################################################### ### code chunk number 3: cut ################################################### dmi <- cutLexis( dml, cut = dml$doins, pre = "DM", new.state = "Ins", new.scale = "t.Ins", split.states = TRUE ) summary( dmi ) str(dmi) ################################################### ### code chunk number 4: boxes ################################################### boxes( dmi, boxpos = list(x=c(20,20,80,80), y=c(80,20,80,20)), scale.R = 1000, show.BE = TRUE ) ################################################### ### code chunk number 5: split ################################################### Si <- splitLexis( dmi, 0:30/2, "DMdur" ) dim( Si ) print( subset( Si, lex.id==97 )[,1:10], digits=6 ) ################################################### ### code chunk number 6: knots ################################################### nk <- 5 ( ai.kn <- with( subset(Si,lex.Xst=="Ins"), quantile( Age+lex.dur , probs=(1:nk-0.5)/nk ) ) ) ( ad.kn <- with( subset(Si,lex.Xst=="Dead"), quantile( Age+lex.dur , probs=(1:nk-0.5)/nk ) ) ) ( di.kn <- with( subset(Si,lex.Xst=="Ins"), c(0,quantile( DMdur+lex.dur, probs=(1:(nk-1))/nk ) )) ) ( dd.kn <- with( subset(Si,lex.Xst=="Dead"), c(0,quantile( DMdur+lex.dur, probs=(1:(nk-1))/nk ) )) ) ( ti.kn <- with( subset(Si,lex.Xst=="Dead(Ins)"), c(0,quantile( t.Ins+lex.dur, probs=(1:(nk-1))/nk ) )) ) ################################################### ### code chunk number 7: Poisson ################################################### library( splines ) DM.Ins <- glm( (lex.Xst=="Ins") ~ Ns( Age , knots=ai.kn ) + Ns( DMdur, knots=di.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="DM") ) DM.Dead <- glm( (lex.Xst=="Dead") ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="DM") ) Ins.Dead <- glm( (lex.Xst=="Dead(Ins)") ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + Ns( t.Ins, knots=ti.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="Ins") ) ################################################### ### code chunk number 8: prop-haz ################################################### with( Si, table(lex.Cst) ) All.Dead <- glm( (lex.Xst %in% c("Dead(Ins)","Dead")) ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + lex.Cst + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = Si ) round( ci.exp( All.Dead ), 3 ) ################################################### ### code chunk number 9: get-dev ################################################### what <- c("null.deviance","df.null","deviance","df.residual") ( rD <- unlist( DM.Dead[what] ) ) ( rI <- unlist( Ins.Dead[what] ) ) ( rA <- unlist( All.Dead[what] ) ) round( c( dd <- rA-(rI+rD), "pVal"=1-pchisq(dd[3],dd[4]+1) ), 3 ) ################################################### ### code chunk number 10: pr-array ################################################### pr.rates <- NArray( list( DMdur = seq(0,12,0.1), DMage = 4:7*10, r.Ins = c(NA,0,2,5), model = c("DM/Ins","All"), what = c("rate","lo","hi") ) ) str( pr.rates ) ################################################### ### code chunk number 11: sim-Lexis.rnw:481-482 ################################################### ci.pred ################################################### ### code chunk number 12: make-pred ################################################### nd <- data.frame( DMdur = as.numeric( dimnames(pr.rates)[[1]] ), lex.Cst = factor( 1, levels=1:4, labels=levels(Si$lex.Cst) ), sex = factor( 1, levels=1:2, labels=c("M","F")), lex.dur = 1000 ) for( ia in dimnames(pr.rates)[[2]] ) { dnew <- transform( nd, Age = as.numeric(ia)+DMdur, Per = 1998+DMdur ) pr.rates[,ia,1,"DM/Ins",] <- ci.pred( DM.Dead, newdata = dnew ) pr.rates[,ia,1,"All" ,] <- ci.pred( All.Dead, newdata = dnew ) for( ii in dimnames(pr.rates)[[3]][-1] ) { dnew = transform( dnew, lex.Cst = factor( 2, levels=1:4, labels=levels(Si$lex.Cst) ), t.Ins = ifelse( (DMdur-as.numeric(ii)) >= 0, DMdur-as.numeric(ii), NA ) ) pr.rates[,ia, ii ,"DM/Ins",] <- ci.pred( Ins.Dead, newdata = dnew ) pr.rates[,ia, ii ,"All" ,] <- ci.pred( All.Dead, newdata = dnew ) } } ################################################### ### code chunk number 13: mort-int ################################################### par( mar=c(3,3,1,1), mgp=c(3,1,0)/1.6, las=1 ) plot( NA, xlim=c(40,82), ylim=c(5,300), bty="n", log="y", xlab="Age", ylab="Mortality rate per 1000 PY" ) abline( v=seq(40,80,5), h=outer(1:9,10^(0:2),"*"), col=gray(0.8) ) for( aa in 4:7*10 ) for( ii in 1:4 ) matlines( aa+as.numeric(dimnames(pr.rates)[[1]]), cbind( pr.rates[,paste(aa),ii,"DM/Ins",], pr.rates[,paste(aa),ii,"All" ,] ), type="l", lty=1, lwd=c(3,1,1), col=rep(c("red","limegreen"),each=3) ) ################################################### ### code chunk number 14: Tr ################################################### Tr <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = DM.Dead ), "Ins" = list( "Dead(Ins)" = Ins.Dead ) ) ################################################### ### code chunk number 15: make-ini ################################################### str( Si[NULL,1:9] ) ini <- subset(Si,FALSE,select=1:9) str( ini ) ini <- subset(Si,select=1:9)[NULL,] str( ini ) ################################################### ### code chunk number 16: ini-fill ################################################### ini[1:2,"lex.id"] <- 1:2 ini[1:2,"lex.Cst"] <- "DM" ini[1:2,"Per"] <- 1995 ini[1:2,"Age"] <- 60 ini[1:2,"DMdur"] <- 5 ini[1:2,"sex"] <- c("M","F") ini ################################################### ### code chunk number 17: simL ################################################### Nsim <- 5000 system.time( simL <- simLexis( Tr, ini, t.range = 12, N = Nsim ) ) ################################################### ### code chunk number 18: sum-simL ################################################### summary( simL, by="sex" ) ################################################### ### code chunk number 19: Tr.p-simP ################################################### Tr.p <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = All.Dead ), "Ins" = list( "Dead(Ins)" = All.Dead ) ) system.time( simP <- simLexis( Tr.p, ini, t.range = 12, N = Nsim ) ) summary( simP, by="sex" ) ################################################### ### code chunk number 20: Cox-dur ################################################### library( survival ) Cox.Dead <- coxph( Surv( DMdur, DMdur+lex.dur, lex.Xst %in% c("Dead(Ins)","Dead")) ~ Ns( Age-DMdur, knots=ad.kn ) + I(lex.Cst=="Ins") + I(Per-2000) + sex, data = Si ) round( ci.exp( Cox.Dead ), 3 ) round( ci.exp( All.Dead ), 3 ) ################################################### ### code chunk number 21: TR.c ################################################### Tr.c <- list( "DM" = list( "Ins" = Tr$DM$Ins, "Dead" = Cox.Dead ), "Ins" = list( "Dead(Ins)" = Cox.Dead ) ) system.time( simC <- simLexis( Tr.c, ini, t.range = 12, N = Nsim ) ) summary( simC, by="sex" ) ################################################### ### code chunk number 22: nState ################################################### system.time( nSt <- nState( subset(simL,sex=="M"), at=seq(0,11,0.2), from=1995, time.scale="Per" ) ) nSt[1:10,] ################################################### ### code chunk number 23: pstate0 ################################################### pM <- pState( nSt, perm=c(1,2,4,3) ) head( pM ) par( mfrow=c(1,2), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( pM ) plot( pM, border="black", col="transparent", lwd=3 ) text( rep(as.numeric(rownames(pM)[nrow(pM)-1]),ncol(pM)), pM[nrow(pM),]-diff(c(0,pM[nrow(pM),]))/5, colnames( pM ), adj=1 ) box( col="white", lwd=3 ) box() ################################################### ### code chunk number 24: pstatex ################################################### clr <- c("limegreen","orange") # expand with a lighter version of the two chosen colors clx <- c( clr, rgb( t( col2rgb( clr[2:1] )*2 + rep(255,3) ) / 3, max=255 ) ) par( mfrow=c(1,2), las=1, mar=c(3,3,4,2), mgp=c(3,1,0)/1.6 ) # Men plot( pM, col=clx ) lines( as.numeric(rownames(pM)), pM[,2], lwd=3 ) mtext( "60 year old male, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) # Women pF <- pState( nState( subset(simL,sex=="F"), at=seq(0,11,0.2), from=1995, time.scale="Per" ), perm=c(1,2,4,3) ) plot( pF, col=clx ) lines( as.numeric(rownames(pF)), pF[,2], lwd=3 ) mtext( "60 year old female, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) ################################################### ### code chunk number 25: pstatey ################################################### par( mfrow=c(1,2), las=1, mar=c(3,3,4,2), mgp=c(3,1,0)/1.6 ) # Men pM <- pState( nState( subset(simL,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) plot( pM, col=clx, xlab="Age" ) lines( as.numeric(rownames(pM)), pM[,2], lwd=3 ) mtext( "60 year old male, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:19/20, labels=FALSE, tcl=-0.4 ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) # Women pF <- pState( nState( subset(simL,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) plot( pF, col=clx, xlab="Age" ) lines( as.numeric(rownames(pF)), pF[,2], lwd=3 ) mtext( "60 year old female, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:9/10, labels=FALSE ) axis( side=4, at=1:19/20, labels=FALSE, tcl=-0.4 ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) ################################################### ### code chunk number 26: comp-0 ################################################### PrM <- pState( nState( subset(simP,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) PrF <- pState( nState( subset(simP,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) CoxM <- pState( nState( subset(simC,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) CoxF <- pState( nState( subset(simC,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) par( mfrow=c(1,2), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( pM, border="black", col="transparent", lwd=3 ) lines( PrM, border="blue" , col="transparent", lwd=3 ) lines( CoxM, border="red" , col="transparent", lwd=3 ) text( 60.5, 0.05, "M" ) box( lwd=3 ) plot( pF, border="black", col="transparent", lwd=3 ) lines( PrF, border="blue" , col="transparent", lwd=3 ) lines( CoxF, border="red" , col="transparent", lwd=3 ) text( 60.5, 0.05, "F" ) box( lwd=3 ) ################################################### ### code chunk number 27: sim-Lexis.rnw:987-988 ################################################### options( keep.source=TRUE ) ################################################### ### code chunk number 28: sim-Lexis.rnw:1004-1007 ################################################### cbind( attr( ini, "time.scale" ), attr( ini, "time.since" ) ) ################################################### ### code chunk number 29: sim-Lexis.rnw:1032-1033 ################################################### simLexis ################################################### ### code chunk number 30: sim-Lexis.rnw:1050-1051 ################################################### Epi:::simX ################################################### ### code chunk number 31: sim-Lexis.rnw:1063-1064 ################################################### Epi:::sim1 ################################################### ### code chunk number 32: sim-Lexis.rnw:1076-1077 ################################################### Epi:::lint ################################################### ### code chunk number 33: sim-Lexis.rnw:1087-1088 ################################################### Epi:::get.next ################################################### ### code chunk number 34: sim-Lexis.rnw:1097-1098 ################################################### Epi:::chop.lex ################################################### ### code chunk number 35: sim-Lexis.rnw:1115-1116 ################################################### nState ################################################### ### code chunk number 36: sim-Lexis.rnw:1125-1126 ################################################### pState ################################################### ### code chunk number 37: sim-Lexis.rnw:1130-1132 ################################################### plot.pState lines.pState Epi/inst/doc/sim-Lexis.pdf0000644000175100001440000126641412576452270015124 0ustar hornikusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4303 /Filter /FlateDecode /N 97 /First 781 >> stream x\Ysɑ~_Qo&wB]#x#J.Rm=@Sl 88f$ݸD!uuVYGB TE`9fUY J#sCI' P%#AV(8/a`0N *`R Г籉s8f _3`7^wFxUt-LM `kwoORdrgAvӸd-zWQUx|KTy)ӝRe9yHY/" 7^M"&g +b.~8ʩLAf9X $:7iF$|7>Sei8θ8sÏ~RΈ!!Ÿ;*&x֩'Y({1Y 40pjbirb/N.̽LYl4S sg27pe6],;hey}=f{ݛݤer?Q֕9u3 6 L!0<иf-QGPl38Gv33Ay NӫZaWAL8 yw#DWXh$\|n;N8UDECuc"v3l2l4?>4]dZUꭼE؍( \kh,.,^n'>PFXqrUsIL"6C2U;r`Bk#^)3 x`=N8hElkyBlus"RdfMmxÊVV#| :I?">' _\O~aܾ=:ǣ-]FH3y*!g~<_}8}}Ng,2,.sVo//a6ˑ#nizvHIQx\W4]*^rKZ}|ON>}>||v3}O\PgtOkɗo>4ftV&#y󏯮I>Y.up4*:P>L wgvsKt_ ޢr>B{nA#6@e9swSvtr7/kó{1)'~ -RP F8WEd3P`\6 u=m9i,}~8 nX.v.a钪IQg[W@28[ǹq>Ts0z5 sEZ(ԋA{č,d/3CIu+kg,eaa ơ/-Njpe9g>ޜaDص$FxSx*>xn|Kқl%!l6&nV6F`eVRyuFl#b=٨W{N7M_B7ӓD4XhPh$cK M" Q$~b#ѯuDi*S}lM[c[0Bs)V_hhb~i Au3*}'FIX6;6e-z=T JlluTS_'rVZ'e_*W+&*ҧ/OZ^[SK>gtQ6}r+Jbg0m.#/ %4 vܤY͘Fr3ĺihA~& b HN9>hPӉu%l~4FG&Ha6}wq@0}!erдg&qqy!v(ӅFV4OmZnoT='_jzyJ|o66Kx7ͨؗ83xm60~Թ{V_n&;2To:#::gox_.k~_#w7ŀ+[>rP!yQ9q;Fo|'7?|w/b46H?Ie̪'V'>)uZ|N'%6JԇJhI' ?9te n{=3֩Kg[5m^T BL:W3w7t3$Ф_-/p"&45K3&~IS~D9_t=?Eu_IQTuX }6+.y#-?@Q/KiJ{1-qT]Ic-ߖ FkUG(?IQAEEJwhTHz׋HBĸI7tvB`\dUM53J|83ŌX]i0y3eu<)EҬJT~gXP[.ϻa-YMLoѸ2׊Mki!6L~pZ5{PKFxZ7!^CՙnLӱ,I6Ow w-r"9 i"+޻]+&4[MG+3_pG^\O<ҕ6Dp f?낪޽iʃя?nqgЛspɤ`_t<&&9W9% 'Cc<ɆQ1I;fLj\2$9YK_f/): pX=~&EX9T/:trY#ZIؽ$Xg=-Du-LeYe *HYÊ4򶌹{Ig4g{@.l)eq@i78n1ULբE[4ԨVtVU6t$]e"i10]M(S/MP^КB%>濺+տa ݫ$Uǔq̆UvL){q1[I~>βʫQ"ԟS;sY|dSF5¬pvKٚd_uJຼ)  wMө,όՖcOfF@?=:cFqkR4=b?"g> stream xڝTr@+DIUd%'IHU8P[Ul3,fSׯG̃aqk K621g7l8am%eeyw QCaUr=~ Y-eNVCn|Mr^r KYND)ݜe# r<_RZܜp[ZsL2u]cj(]tܠO2$@- m񕤥+ڌʑrXRGks@! 9QxHRrFX@c0"܀x΍y@vCpT&)n,?o0 o{9S;O"}Ob; o_Eendstream endobj 100 0 obj << /Type /ObjStm /Length 2801 /Filter /FlateDecode /N 97 /First 870 >> stream x[[s۶~?tBwL3ԍ8Msf K֖<˿?LICYvb^> ]%ઘWͤ{ô ˌ{Ǭz1 JM`JM3?tSZЈDè2:)Kʃ-Ӆ>hn - 1] %? # ֊iK5Ӯ̞#}ALWBe83tH #P Mn43 4 97 g`d Y3=dYX_V1 "Y|e6pL[ r8sN8ɜ) Yr-x"vby@ Z["A O|p"' {Kn[}-ˏ!%px4L݅BtRXv61ߕW# 22ɿ۷!4l^^ fݨQ9Ʒt^Z~-!-dE񨺚pbkǃSƛpMGDǑ2UFf37Y\_vv 4=uEU*𫆪w@ii]Ԣ0m>y8rRͱP%h<84,@m3(\3/2nt=AكlTΒ肤7X~Bd,l g ֞`y,3z8T=Bvaߌ'9%,I5hlvvZ[v;+)a0vFtAȰ($z2]MFMrX1}K;e2m3v&<X)--\8Iv!a';ן. 2)ı0Ɖ٨,TNҾ܉AT۪m?sո׵]_vOuA-'t/\s1Tr\bOZo"t@$.bvq>_!m"T"8m*\:?_yN3նE63;eiL,Pmu05[*̦ҝkH\ztugh`ی3/}%!2J@De -5<$NPmg :L-7=Vbx^9.e:3LS}nBk"|fkqn~L 62eurM9Kc !r\ѣMRF[<$ip `W.uQlN`ZH_+ix.PvZ迡TASچQe lзǨۖ;ɁRM|G񌍦 "Q OAb|p? .K,A i{P0[>MTͶƟ\IKZBm+L9nhdՂ`5#1 ze ( 4h!|A()InhE҈A% ҤOqSFxiFqȖcN XF|ߏhhu?Ń 낦MZGVaabYfbyendstream endobj 198 0 obj << /Filter /FlateDecode /Length 1439 >> stream xZrF+p1Q|pYt( *r>b$"E:X~&0e[AL%Y"(%1O&7bb5&(-(w!&Fh)ӏb3_[o 2Smgm6z|e/3B s`5 ?FkS&$ YobܜQJ(Q G;Xڇ^ FgRL#`^gzJ+xOI*H q01q,&VJpqmV&#K:4pȬ 2ti+L[RC,3B Wc߹Lb]"=T!,E2sgj[X 7!n:}~Vd 9\蠥y'td]z~.|`6&ٱ(sz?ҩ.ڃgSb!3wile.Ʊxik.ArZql z}܁^oYꃄ'CVּ2 Ky\:|),oE poNSː{79i&8e*Q'0 "uoO㐉6ucѽ.|xAwϨH]$YvԑzZff۹e#k g҈|tꮢzYQ]oC(gǒ|@ p݀Ô'^Ncͦ([,e #O[S"waU p`9sqEw_) ]Ozw>SP>ǀQ,떏ʼNku@#U3p9j@UY ?&: cAߧi]?E7 T0\&( zwK*JP/Ud?U++UHOmm+_ g#SAvcz_UJϓУ1^Fp+_^*ki筒!}-ҕvP0 yl ⩗$I<Q  nPDHw -'^+endstream endobj 199 0 obj << /Filter /FlateDecode /Length 2429 >> stream xڭZK6ϯѮ6\*U=0dm3ͯRK}fJV%Wߕ**jwXy\e|Ups^v>Տ(+5ۼ$ֈm\LC ;zҕ6NY%&]į_Z_+PYL E'31%?jg{M0e _eu<ѕjm<ڞ ^9[Xc(z:^ðH;t;E3K0Ȓ$CDP/Pm 0;C^ra6c|jjfVf5tB-KRl+zhT|%ؼ^SoG]hFzMƌ-1?*z(H$qc}4; $Qlj7rzԴkH^SRga6"}vq D#Kc6mwD.:MZWoXOD.vdxԑ<"m= _(͞{ Jl49v9gy\+0WNxm&r[ILVoWk]3Ղ̛~3ˇK)B"dHW]Bxe9>VUe<)br(4zf <'TLfY'ɸ NTfVs $mp:"LBL[hwxn!ejbC6R["Mg$+ٲஆ]GrA2zXj"{|ꌌ EDEʿ+( )h+9 QS$͏/9ȿʙ@Ԑ Ps \&ag`N엥X{q,&n(bn EՀ/G w}Њz/ VCW]oNѤ}OcuFi*ٛ6.[gLX_Uiz@i9_7m6*Y3!{!T{,MOp8n1e  }EbǠaSԮav OFiQC9HU)|}/# Dǿ̊9Z޾Pga~iGhRjzFz2jnQjni.#u֭4 F9bdԤ Q*r& %G򮩱3)IA.̓*}oHΫ8PYɷDR;>询A'X fҙ!b),o ktQB 3*{5> F*jD:HN:snSz'ܮ=_jXuf2A 6.*v$;D8_r=b/BsT:4vAhVendstream endobj 200 0 obj << /Filter /FlateDecode /Length 2913 >> stream xڭ[Ko#Wd64&y8Hgmm++Yni)>,&"'ϲ/>__|cS̤˪gwmQ͚ 'l1!}0jqHj>{;PBi|#f#Ch큗R?T[*0J2/oQkW78.VYooiюMCJS=W Ǒd}offRB5zg@evD+5.KN5~_)eZ];Cjx#Rs QfM0e#6Ǒ@Bs:SXm݈ô/y+*YV 8b8h8CG3Jr8@!(%3-F癍dW]dfm7%^8YF!sGˎ(bZ}z=1ʱsa$o=]^wG7,u  .z{r7bVbB i&S8B1rU.K ,EY F+2XS*_ꗼy9I)TiSz&2ˆ61jrJz\}:m'pHۖ9@b~u3 /a=z=l\XW egg0G :\&wB aYܛ`zVϴ XWx[a2aT;hTQAad-!59$(Ѣ6Hw An7:r8{-#n\W7b0_㤟?ۿnSai͉@N}|Y 2*iG;k']'2-ݥ<3K}\ކ~8Ʒ\R$O65K` aYCBV>Bxu_%/)cendstream endobj 201 0 obj << /Filter /FlateDecode /Length 2522 >> stream xks6~әB|5v'm/sԹe:DيpEn}X} KMG 1ܨf~SE Vdеku}J]Zm AL\v?WpL]iAɱpc:es-2eyܲU`ףq*YcsIɒ b2yZqmΤ̢z}ջoQ,UvAL-iL4Ԭ9ѩ9mՀ6ZQy2k-NKyA+x%PQi̲l'J?Ѫ(X)Ky2&l}Y#N`D ;]Up#lw+n~:Qk+gW մ;Bޓ\j_jb~m!QBYB˺ qzgZwTFSP\B|GYX[-ӊZ4\Ky’$ø6A- P ͽh[] ]a5bC}V.^ʱ{ ?`096p>lx=50o(I@IqW5Uio*OJ?,͎eXX8zHZ&֦? ݃-)(״xr( eK}`cvM n {BG)_ƅ,d w{$~IAFYnHBBxeh/1TVWH(H;ígؤw江b˩GwRok ߵtIݺ ڈ M`64cl۰>>OnϨcA?\e!@F3,9Tmd 'Itjp7TۏR9UљY"Ց 5_Z9DaEt`vvN`{ΩO\` G팰ڑ#̮u7b@7'9tu7CHrOMgA-Cg]EULDYճD1lZ!gձ=V33DFzN$~(EMhr7LS 3jC{&nfd+@aB;:#z&P,\([Z]-; mzpfZ)Dsrb=oe~@!~M$37CoSR!i-# l_?jyLaCF}Di[㤁~`^a.8: ωs2Z܉E3/&VM& D!ܷZJC- Lt BC2?š|U;Q.Iqr&TJx\~vCc&K:3Wef A}adh܏)1aAx,ݥC -S?w:ʩ͖g LAa~`甜d.-Nv c.(czҼ?<"X?vvȧ; >2&NS$(e}}n5 Lɱ?St?Ӌ'\8lL)&60X0b΄[c#RP i'ٯmKHB{@֏l.&SG'endstream endobj 202 0 obj << /BBox [ 0 0 504 360 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (C:/stat/R/BxC/library.sources/Epi/pkg/vignettes/sL-boxes.pdf) /PTEX.InfoDict 59 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 61 0 R >> /ExtGState << >> /Font << /F3 60 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1048 >> stream xMo7 +xL"JD]~R ouElևRȚ5k=KJ{@?/?w75Zx~ Mo`^^ A茍.OOߦ7?xd632_gx݇p{?}[Ir7Nq.xc]E ?!5ܼxlK?}{ϔZ9db'Kxdė7Q>q3LӼ_~<'gEbo/%VTeA\ޕ{}$l(f]I^a#ʧG* #л󤮨c-ud4 ;[|)\3S2Iɔ->Τ6 Ǚm&s2m6Ǚq۵rЗ8ϵm &gڙ3[|d/̗Ž֖Iq)fwy߽a0;fu/ꨍKa.Γ1.cXcX>1gBG2mc:teowg,3e ą&U&=&U& Ta)q\e^/0Ñ^T{T0C3f \aɕIG*| 3T3fܸpɕw<߶arLw6K\TvYL*NiՇ%&À/@P+cPulA2'q!(?XA@yq (X@'@J8%JW1(WR.N4]IRq +_i}'J^J8JW ŕg/]Jܻ8nJW1(QW.N[鹒wqr+%_ yWeZx'k? +t'bOHOHz\e|6Cwendstream endobj 203 0 obj << /Filter /FlateDecode /Length 1667 >> stream xڽَ6_!}۵V- bsIAQyډ-9}Dri>Цù89%kAGs_FF(anNn vL]=;P^j#jUHqT0n[6$ vxFV` 7n$=`afN2䓩C"]N:ϑ(a%S'>|#ռef=})4Z*#g}9sX{W΁6Nn\Ȼщ);F:BӤʍԉan2 O0[ㇼǵ'``xb@>w@tAx DQ0&L %OHMD jqnA/L D5JfΐVVxm'NA63 A, 2k87=n{kK `yA-՟v#Vnj}7e@Sini8(ZTo>ZڋZ(\薹Rʆ#L9(po mG>B?s^7S7jώ7le^u's6iV|֛'}/Mሏx$ࡻ<>*JpGc e^kJ\ mwa8АaÚҒ'ˍrpwzP7(SC{jS/paBb]Wܘd"_=4WN _O:m7.?O3/ԋEcpD *Lڐ!^ 򃒔&ivWzz|U? aC 9$2*]̢sI2Ʃey&q`MbaYwͪ? 9a(Q4ŜсJ/5,zuyL: fK΅vf(} P#MHP5 1"|%5!gEWzh$IM,}11t70|U9⌀e4P䷟* $BoHXJG;F!jWyG7bj 4@oEP4H#Ta~}i$0-EV,yZED~%۲^ 0u.r#zԷUR5-S&cJynŰ¹wVf jhwwQ e!E5]T|#|2-Il/Wg K!ڮ)$*pN52|um L,;@T?vP r;|4XCg ˦ڥ68Z=ض_*ZiQO:׀++O=U|h8endstream endobj 204 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> 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 205 0 obj << /Filter /FlateDecode /Length 2603 >> stream xZ[o~ׯ(j3$s ްE\@4ȒW3뗗CCJNifx9;eg|%͛ReV"JA*`9gӍ.oϿSS8#uY^S:yz3`:eΧrW{њԬc_(Zyu߻]fۥ;5`P+6EiWj*Pyͯ'oB6 (+RJ_g'$7Ya2;rҝy6lt&  ).arZh>jpJ[ڌnk @TQ-PN?w Z?{?B?݃h/{ 4%jdw9(d3 b E! rҸnkм̬z7eEIV#írYð"nvg 7o) &4?)- 4R's43.lHSRX.1jHQve:֋VTc@RD"r3cp7gQ.>L^̿>VNk4VtK*Y@SITH-ҳ$XG5jNi8rJoNnZi~h1Lj+y0~0Y zԍFFR%Ja\f#J5gs5nQ+K>=,X>xxE@,yvp&NER9Pk{1oJӼ6R.+.,4$#Y$K m@_ 07`~,5eY(p3B0, 到Rp05޸c/^ǻH;r^˽=r_ܛxirg.w 2zzT? 9(a+3r8+۝Zg:TwE5d&ܨ;a/ՅP0T0<9wh|"_p6Wשnu=dekV}:`"쬦8`DxGqYCS8b16ܬ9Wv)fp(E2q z(H^6mIoX->-: J B8vjXY =KXFF,u@49"mb@]#s9v+DPmit@t{oqk?*8]1qBD>AA)0(=Gu;ʘr:ͱtijC^E멞bOC8rsofކPa2D ۷!OѴT5օ$n6c~+YXhKVm2fnq;s[oF^Ӗ]K13[S5=jDbN^;'ɂ~ X†]>PEAkZ 1&`xD`:h(Ga„+f< ]Q8Q9U]s2rEfV{QH83hX)ylc:SW0kZ.lcнy]soQ k}.::W0hN(R 슖{h׭Ъ;S[޷n|S}ؤF\rA86\Zdk %sm`ŒUvf_ǝպ1cG1]r-P2Fr{d2 p9(.p8򬇝-K8`7ƕP S։حyQK_y>mw΢( ԿGl}+?@G"m2^ 9[5 6VVS~HV)`v * 419=7g3b㆓5%pqCjd/a8n$h|9U{iLseo]o[@ [lhsv7 UZ$PDGCZwXٶ&E\Ya"Z>>Fm},䄣}uh9_%Cy>4CO"OL;ÈdJz*s+n)1G'7s+6~"s)q(s> 2endstream endobj 206 0 obj << /Filter /FlateDecode /Length 2138 >> stream xYYF~vEu lfr] Vw{mw,w:yod>&RbY$gJ)**{á/&yvßL>:ԙVegYiDmVV0̾N?PB:D]s6JT95\_ uڈX2n7ZYdU9].3Y O?#" ;mh[vtD:Eg2*P l|C-~ :3E)J v.o'L[N1i+-IOU=\87jmњ=MMmݱ  U-sE ^{j/\8 mhq%HY kTˈd!*pδ# ;VckOw{^8Y;m (+L%4KS!~eiMUp4l߅ X"u{6=!Uリע.TvjQ3>ͭAx_Q>U7݆CBGP.(K{+tA)_3J~2!+sSNOhs*Ұ DUwi=`^Gq{ڿC3"_T'W2 ⤷ T3՚edP=c(Hז[wg|5/#xLgZk]oΙ L3=39OO%a\ 26-Վɰ?*ag'ݟݏ'xC6LA|e,9MѴVcNLؓERVP2VtfhylC;vX%$i0R]YMBz>̣BypYqر?c50n6l;+ϹaUmW*e&rȚE^ uӞFҡJSR(i cߊ~$2 'QeDRk? U.cECw!TQ!Fv%f,${j׵Jduԣ8v^4ђ7NY./aW89YA6cpUV0cRB՞d4Zl}jSXc.aE҇yAc>ވdݮү %xL֍R(}т.n} t? ю{9.3.5_KR(Oz9sf y[t W,)k=*sʔO5v3X,QWgXنBwp. -ޟ:Moa=lw-7ے(z?,bdW(ùVIٸ EK{q@R D- =nR@_3SV>  J5%Sp5qwc&L-0J> H>0>1V ֟jx?!?Yߚrys7[h%We v`X&U[Br?(K_ފx̕#`_ywu?O~59` yȯkP*x]8eN~pendstream endobj 207 0 obj << /Filter /FlateDecode /Length 3111 >> stream xZKsW|"kEd8UNx7Jj`0&#9ί3 %yUFan|i&)k'Wi6lnMM'5S)ESjzVZy1BTa5}3{=vʖ'$([>nqXԢs,Yv9BhWSEV4 $@VoZ+ndlbe,jGIv,ȼ[c 2i->@4Jv!Ua:[[vi #LrUކbg[0oIH>no!ɘ˜fm|Aq+Aa 3 {x]8 kAIIؽ,{.!0]$aIN(e' /jF&6-J_&1:b .f%<%{Y:gEkP'>/98`IXJ}N@n,-Ң*VwG㖁c~p1gNBf".ME2MIyͺNLxRo,K^C+߭#>}f87,2ZZQ#jsm=d:@=t.$8.<Fs^ \2WrDSŒ+E`%F1ҢW# rFwNaq¾ % oDЫ9* F__PCA`NLG:+1g!u8`څ_r )}7JkiBOj~  䕌\9Cd[1q.1&@s2eJfM!go\%{A:ä!4y.=EۣJ!3%?(Pb6ǜ9#O͓%Qy9D-`* (>UD&v,VS=xw>JdkJII@y5قqe<ġFZdڵ ncPvךp{qC @/An/] aKq husM{?/Y[J18( ZsQ /'te}:bə &gkMGŢA6KJCN`Lw| i{ʱBfP%YmC1];&K~\[jViCcCUOaw&2)X>+e -3yaMl̀ Ȍ<»v6qY )$2斓HqF/䱓κ;Vd\-cuBPfQ"QigX~P."/҅1mB$[ .*4^U;npdax̥2 ^mbpaHɞOFNWC0 K[pjv]oh܂, &uU%:fpF'BH]#ZX oV',aB٩MKUjDadQAWҳ?24q;2{h0tp@L=$YZ,UB-'q 0C@P9dž6SWi|GUdd=s֩|v =:=nAH1>L-w>>yX<g $B;!eA]s*kp(޹Vw⥾_3L݁#`a}L%/mQ +D=5TP7t&^z /ܰc5 i٨ܞʴ{ ZnFfU 8*|v#'bflkIhF~p?qeigoǺׂ+|ٛ1@#CԯOzkɽTdPYendstream endobj 208 0 obj << /Filter /FlateDecode /Length1 2133 /Length2 14392 /Length3 0 /Length 15674 >> stream xڍP nwwww`pw n!=+9aV޽zw$UR67I۹330DEYLL LL,j.6(5@NΖv<`:.61;Q j`f0s0s01XCw,M {;39 60sss9Y@ &@%RPY8023mh.3 d K2@h 4Jf.@'`cis~q39OJ@v"@ws MY 41uyZڙ,m@E 9:/"=.V[3_Jfq;SQ{[[3_Y:L˵w235K+HZߜw9 9@&]] 8|_ 04q-d7>~M}LlJ@W'=_"޻!n  OPg130^C_Y_V$jc_?ߌyvuy y TMпZ]"lgn6Z:KXzL,]L,5D6v %{g˿=3~W@+Gۙ؛{,}XKj { v.!wq>3{'n(_(qE8YR+Q 3Uw`TOW/~?q nieW7M?ޕ"6fR1Y#_l{WĿS+S߻R O ?6߻a.(]v?ż]{!i1VҝC;]OF '?.\KvY]99+,f+yLMxj wg(w5Sh轗]Q`i*37nVwĩoI^`Z[>?ƫL",NbO ҫ }~q` )Cʅq+QW2:W!\:MP4Kc9KBO uv=kD&$[g%akO< <\"ѩ"I28 Ņ2fD@Gj%ґCRԝXmJCլ\Z΢f<gl ~kS%Ԟ67Ԃ0aI x}ܾTu_Ys\tȧ}&&$^i M-HxaNkWY DOAZVotz(|?6 \6{B\pTu ^4-MŤYtA>EV~;1F!h\YY 'R7_)MLA<41yJt,DZG' }pXu\PmX]귣Sl<&=39t'yĶ7_嵱ӘT{$]fAό&Ab)/x\AÏ*z-PKӝi dDWܵQ*~NK8}c/Pn0<>m=}ǧlK4t+*Rg5e+rr|\ .k>?rCGNwЎjHV pY!ZBشb mvo~ v\ReLZ`ͧZ>ɳ2ewU?Y1j o_Ajm(tT'_r[.ؐ ǖFP=~'@'[aP6.P}ݗ'I20vb6 &-6ra<̩:O@lt]p"fk[I $t=V wOC-~ϸPXjn}Syu-RVv $-t*qbۘF4Y}Lܖ$⺊%OM<ڄCMr-Ou:D}klnn~D20<I0W}sPi/`Y56ǒ Ȝ`$[{eea&3thتi ؓtcUt(,ESI~?) c|s0z` E-=KT yfuRa|8Do (JC'Z$.ښu2E\ sN? OӓѲRL7Wd?iBW@˴@4& ˻1(KP8-]w؉u,l_R,ʚ9. ,{!Cg0NB(ā;m3oM0mXp{ W*lM,|b&O{]LP]j߷KgS>z= R1ˌaǑ[l-='ppKI w`#8mM2>‘c-'!W9Ŷq~c1߳g5@iA>ЈjH^Eu>rFIde;f![/qy*"//?gw3,%R$aXjҒל{2pZ7gT ՐGMaXN(=>rK-^(Ge:]K<뱳%,ahO`cR-0 kN-z D7xM^KD4paDX-֤,M?)f*j:ZIwXJķ  )}{3S6EDIkd0K'd-GnQLu"`{@0[WI_zkwˊtER)kRhڬ:AZ FZӕӦ[aWsX .q琽(ApHyO-U ЖgrfWfEy`G c٫"G.7^z8?ֿ0:c?'aρ/H ةb/t~*; ,,4:U *P! &L>FޱJS-$4ΞʦOo__pWTsIQ&h{  hW[hfPpޘyD Z\ \ۺ ÿ?M^&ʜDE4qRTS7 O]0+Im1d+ς[ IPZe+!0z UTk67ё2V>&q2rvPGm%ʈ4 큿q3v[TRGrA3rmщv+fs8 i2NG#m[c *1 Aao; ,*{dONn0z`"sfck>ⱓ 7ɏ>gMHl,8')6*k$Iɝ@fB5x/ t3䋼xeI3'3\tRpua$:AV;I9 :߀W_v1^\ p"s6$;kWRJwz%zF[;sN4cqw1|"hGK %;" ;*Ҁn )G"{E?SBO:mѕmkRi$-nBy Ӟ/io#hz}eK KKwHdw8}=ɖikm9|Fg1g7W0>Hw[H ֮Th/ɞ`G)=u,Ę >ҟpDD'< ؒџy55.d%L-'xoYfl?R{"ֿӃdGLG-is" ӿd]=-O:6S]J=dG~̕Y\)d0rr5{g,L`q`/a8jb}>yObg趀5GÒ)2Ô9svEۍ&by,io(,*ׯ65瞨-$4v s`h~CW:%$ҹ!Y#j x{F\0"r P5u)M}[wd5gˎճB/os#2Cso3K}-Пд6"S^!w{و X&N!8Q~tz?\T~Rbsu5Me9k{Ց!yKx) Ldőv3ķpMQP(ld|GC?|99)[RYéʋ!FEo?jo#Vt^,ú+F9&qt2:C[|wP2P}4}mXK>6m?oRVe|%e`r9Qfvq37{řc3e&ᆱŗy>budzCUo_`0intݺi[h!B)Nr8?IXGx 9Ec}h R:T% kG"wԑ3o p݀^6SREp\=uZXQ@y5gv9b Gܢb8K2}8d3R!{zӬPlI_CreX$yT,&YK:4$djxec\ci_U6u6Yum[{]}w-(;xyO5?5wHquD,߹J3Kk@Wm}qqA%qǩU9i9|YhG)k>N.i(sVj(JFW?J#:rvA3x7.4Y]?n6Z$8)&Gp 9"(Q iݶO6?l-pm6^Gr|hr:OjvB*,޲[Kze-8Wyݷ ў A!T6.y }S>?.ի#PகsB[:!gޜK-&ڧ)e}VGȷj䈿y6|4m#, $]w،K۱s&jS8ɛnqvDܭh=O,r)㦏)?wAkq8qg񽯃NOzSN'3tꋾqo{uvWlAˡ⯌f[c,GjZE"ԅkt}̧pgH(pT9c4y]&!=_P$0y>{+Z8C6;d">ЈT\/ 4mK ! qȚ=r_~ԝLdqSe;I=X2l\|TByw+I#f0N9B@ѴV1қjdA` V6e|YcO*1~!f-Ҹ~ڧ>jIhd1mRC|'bYa!LdG}XIFI!@O{+R I'5[OY,P"efC.p{F1qGtjACnTz(PFtUb}drۢpH^Y8b\7)u S-2VLAl]QZ dIR  a,0TϛEd#CwF4sG m^"?4vT.FCXoU_y}tV,@)ODzѹp~uő[ݪŁՒ\ѝ\#= "1gH01}FLE&;(>\mu0՚k=X/u3⮌ۆ!e .T[cZ`,,gDk!Y z^`qŔvES EJkP2@$ڎaK ^кU"D jh1TJ/{an`\7Syb o؝)*!NyӺ*ɋZ#N\x(*LJ6{/*fZ}yH'_c?S݊,"Bꕟ-80 +vFUD|D\ڒ 3>M AFWKEh؃ I.cH2]kjӁ%oO(gqN̦ ]޼;WP"9>ۤS"H_*Cސ60՜?M ດ?qv1q[61,۠nݢPǭ Tz!;'Bzђ!&\ $^{Z>'4j)ZT}ݼ-çLNjYAPj@ρvkV('mHSW;ߗcnx-zVn9uid޲㪰JEf/-x(};)d7 $yp?{'ޝrerR93UȤc Pv=;be)^4~*+- 5V#%J9% }U$+]1u;fQjtZFf}jR"1/ʪBIih4)C3wJ('Vi!$M4XϐZYtXKWH>!ܢ kutB/-mbq .ئad5/5҄S:8HogCF褢V.ཿmp1gyUx#?,ɱ~8[k4QJ=6%y ^B0D^D6/5mdfs+.=`#c&P9L U 숔2$8.[\~w!ΓޑE`Ȓ~/&z]{)u!+`Ar8Tτ+^8/sW)ͬQGSd>ͦ:aB.ty/|XVjTEieapN8 e$'oLQl]Zɷ`.^bAޥKl: ˨Y޾"wE\Uή"S^RIY%6fQag&8pSf(QmBng1*?D+Yl&t:''GV1DZU}46Eܠ44:tpv~|=[Ff_LNW|, #t#!"p ]QGT"6cYn٥\dQ*uwyM9\T~"JVQ0?~('9 IvP jlJw f?}Zu^1iH.ciWd+Xx)qeGP}ȝ( %_(҈F, /C{lu1X0d>i`N4Vzuݷv=<UjѽZS.ӭ -€Z6@WFSIxjs"X52Y.sV1-4E n }Lj//!Ml;\\h7<|&L ~ʩ{|F5 ->ש+,WJ5GG˔jxHS4H'k31h;OJ>4 9f]X"}-\+˖ d bXr1a!UKETh"Q-K#+1!$cvh5-L7tT@ vEzj; B䔮DM,@/WsX$w, h }¸.@ӜwuDXgc3 H#W+ "M˔c6WCubho dd BLd3i>Õ 9^f"_? u;D<$ᕒҬuZb֬ plʔ/B ,ݫ(A X5vEɁ;j` uV!ĹICAl+|j˻Еi-9.{`xc]ڌ]8ncqc.4~O\߉CjAZCw/Osd<[Ցtp}Cn@T0Ą7UUn+1s &Cg;!V.fL[R@ /0J {wU>q"RfKCNj+ v%1!CߏS3S'4myDP1pMס |}yř#|@8w _"~=6*6oa`hE0ԪPQiN tOn(1]O=Mc8󠣭3:o*f}m?^ 5bSG([yL|9zk`-At~mf#3r`Md=[ߞxn^PKj2/'6q?aZ8ǜ1ʪx)'Yֹ0^K ]Kk3T'IURjeWßcW- VuR_r= 3ך @Eb 5* 8HvIK.9❲mq hv%4ڿD%f@M*tq;R3KoI5^⮛3^"}ߙ1On)PU=D V^@s?y6ptC۽q*=w੘Zњ-74?GTfcˊ̡T J ltosSLQ=#)FBQx{$fR>Xg< E*`?J! V$Pbr}AD`r\D3t ''W/^\VEL RN7j@Y!PO^{^VfJO",W |?= K6I)W)WJ6-\oG0J_;$k;&R:eE>YA ޺7'Yzռh笢}ЅxK>?J6Jc㷤G"J`Y$ܞ򣗥;Ш(^R#eQyD?gRXhF7V!e5T.Vs@^ujk4{c @'P콰L5;RەUȧɯZYng H癩>. Jː0vMIk /fnTdnSj3`{Q)QӪS7jy Mq6bM-F6֣rq( VㄡntB(GTa[RLLO6Y|1.#&qk!;?}2zn=#H`E-zرX kpvnډJ)뀅7]Z3AM*<Ah ހxb:[eQGWlRa}qz/PO1CQqu]6]6gi'Db?.jmO]&s00/A`RVWTyMNbgB]HG PJ[ 4|,L/_6)egxdR4gx@3:!y~rXio"Hu/I/2s9QP+ID_FtLi# Iu|?B  b .`){'9dc {|T;5h {^3:)^nKi#CD8?di_ɀ.Jխ'>Q p9 =K`u.t@Gq=n,r6&*VK.DT#bGiES:9ޙMR8 3C.Ub ck1si#bd4hM*Z MN >9w$KyZbM0l8hi,+e'*B{vvO̗fgoQ] Xzi/^e0+PF{]3L,= s֡h:Bu`?Wl}[ex/2lz?_kmWG-HL{ _2] *8H^ġP_dA:}ɠQnpvOܦxŦ l^3xzC ' Xzm16-w];3}l6:]& P@Q>-iYdqV?yJC!4Ɓ?[ʹAc BC݅ZXZ.OJ,¶6;a 8~F(K&G>)Al§?2tVJSW4&,3Tq@=_3ETރH]*Yv %!e-(̊rZ\d?#Z|l$?:qcпcA]+"$^P1'~'!)#:^#n:*%)[7~Ğ-!:3_mnE(Q@nJH7:l'Ǖ^-iP uL (&Jom\e%eEsG< */f4@y;$U2b#0hWUS՞0CGyl҅,+Rj)b$0_= %e&f .Dn$4gcȀZr|9T{m't:K +ӫjǀ3,KϤQ9= u+7+4Ɍh躆tsYLӴpBp1  jI):CUEp|C&~U/9)14z4 ө6VNZzڻڼʏC)3 3md{ J {wnsT45pR!+KS{'59Vyxghᥓ? 1d߅NzV|i7Xҵ.Akn~Ϊ5v=YWG=ͭ kk(й~F#`!yx~uƠ{`ܟ89μBIsWYuB rdA̭*W0 +-Qdˆiw]sȈ׏{+N'JOXn+30g^t2%+hb;@qIklz^a"($-10D?Wyx'N6hەXCueWUW&%ۚrCGX}iBGρNgN~}w endstream endobj 209 0 obj << /Filter /FlateDecode /Length1 1565 /Length2 8722 /Length3 0 /Length 9770 >> stream xڍT6 JK#]K) KtHt,Kt HwtK !J7"!//?7// Ǐ슀abs>yT@~PH (, wȃܡ6un F\v9|X@QQa?'+ G. FzW V , rBp]$8P$F]6ߔ 'ԸqXz(⯀.rPk0 qO*4j87ٿ AaAp'g BME5n'|;:( 3Dp#9.sf C"p~O u=`XPo6n<0XYo̽ >;0 +"/"y9|{`_-7 ]o @+n_]{ev08?#Qז7򿂲pO7?' ?|ο:?^-2~_/`{o}^`o+k}ނ?)]8_Ouq/h7rWP_9oT _ݽйܼE'F %q#ւ#,^ジ_!~߯Cf |B+ ^ x6`?p=g_-E<],AQ;~+) q8l]x^׼G A<0+1}7^#0l3? iY-C1&~Ӑk ٫0i5N73cATq#PܾSCgz}.zm;z3w?P?{_04$҉hѾ&–e!yZ3qJhFGWuIo:f 3ߜbޘF&k1Jt\yT ,}:P=h9 I >@#/Yb)&}/JDLW=Ag@./ >#GAОU$_ v$gf {m#<>4I~1:k5R^r7,>ژ +qi~_3?DgTvHFMٹT09ς2:^gYz &V}CHYnH,q}Zp  ,!]YDwf1(\AoKWE%&u=rXkkA:1W0yUy^#bzQ,C< %{nj >M!}:)s'Nvi^M?/ YJ:<MuLla[Eٌ!(?\neb]MOEOrR|(R8`eB4t3Q\R F;UàC rSyyuw?cfqI5-mBDj)Z)Ӹ5뎛Ķ' pFI2gsb=L_nG`-Ǥ֝/8F$XP zcI)wg5piϻ!!`1@: G1ӧC 2쳮v矧-u.:|o5:&xQ'銈jT#ذ,6[DvY*&W_Uܳ4F{UJw] 丞f]ǁɲuqA5 8Y$X v(x4:k8 i16t&<8izfs 4=Re.)yݝ`N&v?<\kZ< ]%LL|e0cDi92ZV;ʟFXjzM{{񭖷W-5RSc#L>SĽs`7 N~S^u~Au)Dѽa"-˷@A#qh 91t~&){W"{-/ddК)doуjFM/|~+%&OG +_a{~xόy^ȶnKI/h0iĢ H5hqy5a_,7݉N!vZ (d!PdFUׂeC~R,f^˜}PCv.0_|JZy- HO/L 38_iM)R.Nl9N/ kH"3dEĩ09%>V\jd+'8[ݳWJSSUt?[4 PV12>:v>ԯ [3? >rٌ>VO %l`3 61v)YS+klz]:AY'+g^гt7lN}'m^oVzՎ-3ouvb GޙU8=A|JywF}G«Vb~l\6ݮW[oq>O<1l('"W {;)dG6=dP?' *e(=kNа̕K *}3@j;jіi1tD ]c*QsL烪eA[l긝g@F0$'JL@CѼGh3b*Li=_@gUt 0_CK_ C{LtE޹<Սj` dJu o69$AG"9f<-!V~H31PH@GQCLminVh„Z1'-hcGG90V NXSMÙWS4U(fy"7_#mݹF tIե>vL[D j!"چWWoFp ar'lx4p -f~+@;/JGȤ<;Dm]!sx i0cɴ^|Q_׮:Єj4et:'f )]n'{?z/DlĈ{^tQ1_fL3*ZFPԨ1}/? xh@%Styt 2#Y4gvA$X"n9EhJ|.-W}rT<2E4&=}}tUm$%tHtյ/0[&j~y썜Η_,!;ܷSm-Vds#*/L(ϞzI(x̭`؞:y;SO>qj\=\pRwUA5,%ZyN$ahfV=8d1^w%`:[i)g8u`t댕7: A>q+|.yhRSxt5t6# q%sŴ(=s}]H}l>-d!VPcL3w!*Jp,< cB @d&/Y@Z[&J+k i\ᷨ.[(ݍ$N{98S)Fr0aLגݝ}ch!LZ:q̠O~]D0ܐ ÿ:4?d(D]ӟl.@fCxXm]$814Rn4xL!׳DtNdIz9o)yLTqVZ]d Gn5E^dlaAH?Ά[~$;NHDž䂵s|&/A@#"͠rB˯T6|;JwC4DHB⑃z(N\'?QeEf}P3˟O }8ݧܺy~[E`*$Ej uJbYfS\vŰuFEX/3j-ѧDLJU >|.b'(f;[%#5Kd;>X GN~ ZM@w,Nj]ѷRw{\{L,;EUeŘЧGz:PbͪK:]w|8vq&:k;L'\t),l9Ly( gdy*ZA]i OU߹GQZ>r߈עjyS%7;FNױ1biG5j**gϒ0uV6[^s #9TP M+1:%ˣsOwDE}q!vpV餼eN\@{WWmKKx-bk鴼ש4hX[4/ &S ¨U%mJEpL>} & r$zCjfRHԳOu T } %l7e=厅83jqZJB=7@ PgHVGjq"a:nEs}UՄ/;X~)kd-Ӂ;*ޭ:chgEtds7ݍtA$_ ͢A (’jgS6Yz1NmQe!: K9 ; Ѝ+AD>=!Z5% M9d<}%)ha2I6l2KJ]S\*;iUf2#ayeWLH6[Yīw&ʓL2;1GnEo>c8ݥ_)4 K4ϗ\2`Zov*Tnj ֠% ~gsbAZ}d=DfR$. } wl^P-^KEɬ3J7U'+{sK6 69E ,Cv$,Y^jX#@B%eW\cA Kn:SHrSI2F<<'M_cn";~Yu~Vwhқt 6ќәpb񍤈#61R-ry]TMIa^ le1jֹX S8_XͪbmC˧\&c7>+c! ϊ7E6I Y3tl6/=\bEm&~C}EY)4'^\a ;_\%9= /oRb.˧xN:Jz טe;s8'@aFX=4L{ݪJҗұ78VNH>C7i–;)(eNw-F, HxX~E YgD k!lOM0nt[j W?>rf?p_ڠgn'|Ȉn0 80lGVpDꭲqW)aMpy"ں0uɟQ tՂ9ҏ-6E Fb[dL~2[)}hwCCB%usdW8(f`'ų(Cor6D*F髱NdTLbnypﲓtӍTJOJU W-!}vN4䕾V0L<܇;bbo7h8Kxۚ،x|==BklBL 7MӸɩ13oPZt{f:ȯ%b|7 ߅e>$6@T0\=.ODA8 sVyl9f{_-4;rӄ0ͺƥiL4wX1OʡN(e8VJzRQaٟZ*łVku4YXr D<~xerŜK1RbPw`!Pd-QPyI0⨶ .y23-~j p)tȪ0wOi-\01|]i`[7NF*:[(߸ݰ`}MKև[g {bWjj /ޒo<ڥr %-sүƭMLRIw}6N@W}z]C$;±'9R›y1"[H21Y( (GNSճa/Iy\'ouytp^ӊҹ f3/+5r3nX?<(-,NlPQ2u~ɪV|Ăd8qzOM}eEYN7hQg[.+WoY4aZOD.\& n yor/B .<ԗ=sI)"hLD Zyx#"gnX7(=dG(k+9Qss 5}z _~{ 4; -V[W*\Z[vɿ| Flbb5 G<<2{ga!%*+\N2U@֨Ix7zVfJ& RAY')rq2!fž9DoZ-qpzO20Qn)|JL=msMšDUUUpft-YӴҀ:It5ɆRۅ,Lfn!ekr%\(,(-fx Kr^~o0Ga TDej WmśqӔ8eS]tK'5UQpM3{T۠ &SY[}촗ul +L3Rkߤ'LJdY%5gH&7'e72_9Cwx}ˑAf׫T]x=ܠГOkrKzkf9S]Ա+_pa3H(ng72eWXP;wz v'zcf٫xmoio,MMe; N9=¶l'Dg\ Tjdt]p؅T>i3u)|ֈwR+#Qh[mwW7g&?-?[/<G*F<.mJt03 ݭ^617 +=n#r}ƒ @ޒ +XѮf [[ASq8ԾFڊ!txQ|fuNد!_OuFO7FmgB)A Wr? ; –D,k:<4?*$'t8_w_hhK̲ܕjf!NSVM ^OI|λ5._B98HO$/Hks:eWg؇5LIny|5yIYjendstream endobj 210 0 obj << /Filter /FlateDecode /Length1 2671 /Length2 19671 /Length3 0 /Length 21180 >> stream xڌP\ 4݃k \Cp33$Wuouk~Ċ*B@q{;zf&23 \\lio󇁈$5r]m̬ffN&&  xFn9\?T&fnnNB@'K#;bob t#;35 t:M ja\  l,Mv W;S"% Ppm,_F&&Fvv3K @A\Å`dgofdicd 2+s#T?98Y:838[* bv"@;g_Z:M@md{vvfvf0uu`TttJc]LLLl#ab^T{ pqr|S_ 04q-~@1hN&1~}Z/S{;͗QFTH\M {>гYؙ\\Nv&Y%U4'7߄RvfKeT\ 5A P|]&v&7!qWTF66tr۰/YhjjR.F3@SEKWSX-=kLLG7k4T@97鯻ca99y1֋t@6`gr;(;Qo`8"Q7083Q7b0JFF߈ (@FƦF|~#P>((o"V@FnF|#PtO_ Γoꆱ51s-gWQAd&6w_hfOf(z) :Ԡ^ ? /h'쬿̘ ~2wu#hX@?,@?3Jd@}4PO3\@Td@Qq9޾vY6]6PG`?H{g@]]6 zoV43#`uwXv3 A$Πڿl}cU;,bcmA-sqMy{A@P~'b:?OWW't\znq@ Ҽ Gw5Bx;;):]`3םnGzQVĨ/=8lm mKPj~2Si[z78Yp(T?@O~[=M4y+b{G@Xn5 S }Zn@yq7lhz4hgs7hٓDqp>GQ7XyU8!&F $pi,ۻM6T^;wN /_6/F%iŤqT4Bwpwa0‹=xNvqa9@EOOїeFL le'=`B& qKZGN_QLc#vKc:|& sdqԗuoB`oP>=)5Ȑ)A:do9YqŸYT`yXܵo tkB|#bb9V  Cy p'(KgsIvyKsZA,tM eѨ BO*A2jR Żt6~9Zp[~JtnE)N<#J i"Mі{ڟkzI3CFMBEue1,i"<xzwW'O|&͇v}\l0(CïcLS]I vjG@N/G +}ߒΊʦΚH)釅nH#P G- Q(v='ISuzV4o "4KQ_ 6 ^MƫFJl68f,8t`Yc 7Ԯ~t(zS ٞ-gStUsNh@?V A90/!k4Y89J&+8%#5='W0̟lT oNDY33[n>!uP%YQE xbsgci(Z~xD=m!sb-ӭߟEC,7;ro^~}_R.`IgS͛X9$ɘ̖,U9=ֈ@'=N"ˆh! ;H^aJ =gۭ-9ju'rvͮ䂸J\W/-6㸭, j׮_8~"RTµ˶g&+};KQxid3}7= 9P. Q0YѷILX8?swRJq.B'?ysI,mwr qª$"ԼrKan~cS.T-\mR^B mFMܕ%e몡5*BUU^V2"NX呐413F(jKٰstmT9ʽBhoERw(E+^ҐGX] RwXHIRsc= M-Ív ^̄ +K'x*;ߍ#)qM8,M4!&*A~t- ZjX>xOȷ5vAWV5 ۉ`ס娡\;s^a_H*Q =BŌjgNF-m_3_(qSo dVzYw:Q/j,&R;Ѹݲgc=i`(l]ZfxLIO?){?w*ÿHsнͽR5 jn؇oLV~>Rc.)/Y)UH AQ9jWO5D^'2쨂j[vfbf.Oubj M`1 NK;ՌN{Ł(Պ <?x =M=iQ}ɺ25 {P4BoWzPGX>hcN12 ,IDO2f7EQeEUSxYqn3~s?3F 6xHB;F" cYQSC萋a۷LuU\ZBTaigG7Q"tRR5`["ʭm47cIL{ЅnP fC-³faG\TU-H!urb^L.7Ϛt]ǡoulςŷ^ V?؃ N!+խyUCf*S{aϪy#0[aOXy@+vs>m1 ` ece)b%NOdN3o윹M;[]\ A;yM~n,svc }1*(,1?še.,yhяS» bGCi$2ll[jipG>T{Juy*W2FT El8z_oD2g (0Zy7WځQa޻h0H͜87:|Jh;nj:: ʮb'IB/j+ůtV{)/Wr68"YDfp;<č=@1t"c'í7,WSK}RY)AnA31vi,ȼ ꍍړ[sD6-j=?YWfLieцձP7X}3z">V XV欟1)x PRIwLJf=mq7D8Y@b, SQv<VԾ։icKrBWD}BLe][S($iOT1E< -#e˿O7%ml2Ν; r.! (e/Hh[Ufę'85@Ne9[坮:ְ.%UmFfdjY/9C}܍޽fGy1&29P=2Tp;/PZ,8'@ö$imglFJ g9\3c ƯYz&jTV'?ʙ[DDnU1Acs,9Yd9  63}Gj!c Hz䑟D+hU޼Vꇫ$2ћhu2HbM9`f%xf1Պ7sq'ӗm祔~[W+| D0, i/rx[9c0iB=Sc"9h­L7ʾAѕn?%vɑc\bZwm:a~ go643lz*+"XI"eٵ4H-r<593lE4zX#r;>m?Hr}iۦWJWq 4or)zky6ŠqҿWzr8ˉfuM#a,_}dStp8% ;2q9'5Paq+4*.l_OK9fzHjR^]>s [-kN}+\9n{BsKGZH?+zMQMW", VBc9p`%N8 panRyEӃUh?YN-QW3:3Ylv9 "7jIT1ةiJOջڕ)kCC.Be&6nЌu}K[\~T;"yEFc:7fx\%hoDk~^>Z9'Y4eE*PZ+V  5Jh$L fn7@ŕRDX^Qt !C #6UD "01djKF W0$~dv2-I¶?^ rKPɈe(f[IZu3#ocT"{Dry!=&zʳDj!B=Tvi7TI Iq,B;Auk8^fIwVBk Š|[3t}nvl᥉jijU{Ƹ}4 tVY7XhLI~s]2 NjlY`cF{ |b`| ek;Tf-װO K8`MPnݫmQT 7._ χ²obw,v^+@ R{m 5/K! 4CwH`&s=\5,#y ~үTҠiS wFO}4X%Γ^谄iwoaf> '&/s^sI3wɟ c,S8[ff%L24To-%6]>Lm ΃h<כIQ+ֳ=VTJ>y~WGT`f~11$,3sw8=#+g) ؈a'O _ yiƍ.T܎-syhz9!?t^IDɈx DTk}eJD *DR֓&k>m7[Uҕp/ӗK Sxӛn=[4& 1FKp LWUp< uqe10t: ם+Tb+Ր$QT,ˈJ]r`v5t`c'ʧTc"}~&3M~h`q{T虙NkEdРKR }̵`ͅy >glj{5pS$ ;7tw KoȪǓ0L 1+ 3c|H0*CY2[î׆ՙi4R!-?  ! JsetB6oj eɲzGcF |BE6M) WH ]5/eB8nJP wf7(ְ є||Ŀ8tRFޜu|<ҴH?B]#0*<~:0J締iz f/b+`ҢؿI˵ & cPyuҘ\@7BOKVNarGM,(48x-6_K1w.#Wˮ2 n.Q 9d7IAɂs}>-A`{RфyWb. Y)z H8e=d7=|zmnNslcYF%j1P Sgfod/Oy(\wCZYaIvZ6Y᳍XëNΚ9S!*Ncӄa4lI9 7ߝ8л݁(52PB_!* >N_xy} % JPZy~em* .0`7/֥ ԙ BJVQE[Pрj~R?Hs'7\ i' ZBoSLy3&֚rsފ9 3t4)udi\6y/Yּ&ɹ5'q4c[6rk>Ndw~O`NX63)b!PZ%pi~Ե~VIUr Q0PK~X[[9mijaqRƾ6viI@<_:/#kʛ!_̱2e.8cKƻ Đ,hnfi~>!f?ÕLy(~LVl5  QQG . j||)nR-Ճ̷4ĝW% !VD]m5qsm}zj5V_j.RLOu1 odTlw5 ^SN/xyB \B}VqdU][Q W mA]ߋ3{ ,D-* ֐r ;dž)vGXV%U7QHi D)UV:!%A%B61x?k!w%˱/!d0边nGCɡv:mOgv[bx"f)bрŘDrqeIƏ3Q%n5*2 TqHxHcgX0RgZjHw5y;؇*[X4/jV/ӴsRY$QIfvӸzHZ7[W%|"Y#:sc^[sX 5IuF4¨JhkW(- "ڮ3F7>p4BE8KIݞ;ŧjY˽Z6&oUyo9ޮmd4Vdl(S}8A έ=7Në ]%y7F<>3Z&P h\ pa x`i!FRf?=E/d2{^h\sL@} =qDaS{dX` q'. H?BvxO0jTL|,*gyuz )fV^,v1 iqy^[wE5&\%h)) G4T]T`G,u&8 "-L'-7(;槁b;>||YWӄfIJeF<Flcm!s=#5}]|&:t0tٕ؞5_uJz^,!45Yv eX3 *^{#zQH*3GOj˜D0l_D5 }4tI[:B?N6^&M|:u9X{)|{h{euVhSA>-^!7= 5~cyۊ7^" 0lIm a5u+j <ٴ^L8 "qnk=13-n dynv]lBL^.0:[<LEd2yWY`dfYnt$0?Mnő=X#>^ +E8 %t `r}1X |4Ϝ?C#!̱ յ8NdK\|m8፵T63U)gS?2^L-gC=-秘;h H?,yx fQUJ 8'bjik`}c2\ kшG8XIj+%>"l4m89*~SGEݯx 0YiֽFw!_.eǝ}f[*GS?n;et@6C=td7A[sX2BE1rN"NGwr~E:_+OxJ!eU^"L+3 TL#WfMgL22WHBSsZR^-G0h&cJ%AZ\XGSN}1bsԑFkdN 6uDc tԈ? QYmm`V @ ȳ\92izLH|%sT8%XJfm?Bh BS]^K Qf^gq0Z.p7}%,zm?|+.TK3 X^nE)-EgE5# !ٕE{Nf0?lZ oƋAr/d$JN^-:2.@p"/)M7s8T}F>:vөw*ԲtEQ\w#SɀX͚OEs_p8xH %╓>q3RH>9L3a)J~lŔ)]ܰ6SbP:B[+N\I)g&NNp~S#tGȼ^(L& 0W"'ag=e^mY5лD:%d# 5y? H(.h& ')OUie x!7OO̾ AmEZir~S*^WڂhDk)'~^;s\`qH*f;ĬLxVq}v3W$ǰZK 3#5ޘUgNR5 =)݈+)+TϦhY}4H-zم4}kf_iˊE}x?.{PE ܒHxQUu[Z'—;YpLi= o%B]zgJGaIG?zhBnB1f$j©n6q7FhwhdXxmV̭w]qj)oԦgg &U&Ǝpb:S=Ծ%48܏x43O2dhSVk~:cd,C$ne^4ο6ϭւ==9:v e|Gܕ eü^9(^=ۙ7rCT|7٪1 j.0DGp0,Ov!Cևmqlbu:%TBP=`V*=fɚi0@l.{m**gq_j΂d#7J*&GQu/0 fVɫYLQ, 60V&(d2AA \3f3ݵ1);cd"=I-UR]* fgWs"vLK0',OPc";pu\$2<~i3Af1\ǁaKO]ǽS:F!^G+\ne25TtQrh)yR…AedºQ `{=mq E.PK}>dZ׍5KlВկydY#^Vo4 Fz_ s[^W)-;TءuhݣVfy [H$7: V^}~S4+1VS$U+Jа˱23)tl%ds:lr6QG.c-告^5|^a, )YP-P͕w-Mwcmr.Z\K鱷 EjMZо8(Vrg>~-͢\.}5\0ɵ{;V>1. y%\)(A fi"4Oݹv"2>ZM86jSh_i Z AMN]XyB=2S~n/B;kŘ4JJ!gt}B*jqh ]Ci1;]nX6K qaOb};}~Q[/$0t;^|+;jrB;ンk(uP33*=[궃lr(?~̀g~dL'T_[%7i^}^Vs"Axŭ 9 81z6;}&G ~˞ Kc3QkH~Hv['zҡ'a~Y)&[YH [v,ͱ G4q6@L@ŸQc7Sa2.ڱjK-^ä[mc~6aȾN6t1+by{xzq-`%4yurX^mO9+ Je1li .ؙI[|y–:]b^kWk;mD3TGo1*cri$ƒޡb;wCd7vL,>)qJgBg qjEbhsntOBKRarqnޏH'T5G( N+pZ1wғe()"]:ZިwY ] ` ˪ͮyS=<< tU~϶ldrBh~;6E E-yk2Ly%xd-O+6]3NoVOx wsĂ9Zx7I۲onL]ՕO Hߣ9uuKgBeġBQjXwomWB瓵If xKlK3A]Ɔ(v fܴ0bkwi-qؠV'(ZT#O>>iJ j$e/<4Oem;#xz #ƽ^iRW=.u0fM?`L.>Ζ)y.xh!\pvQƊ3%O.@1Gl!bɴEc%v3&ePI"bYi|p`|Ҁ obC ՍAzDމMHaR*9]J1TJ*1LA-MG/`*dW!~jXSbL7 9ZHgp#K7ǎW^WtaQѥ:P{9=It1('6׺Wȷr'ǯx3q>@4){od? }R$\ ^"3H k v0dn}*9q1jﻎdm<`o#&;V7'wMYޏ}yWg߃zQ#7biP ڎkFw8r!?nDQ+ lO*O Y|Iڦ$CyL.`AfWd> R,bݿةދհ1W 8,vdq ~!>uay߱LJ70n"f3"* mx25XDt Z+5D[O  MIy%ؽe He T6숲we<"Jճ!*:0X+)1d83N|N4}\s -&Wv;RBGs-VdiDY`&'ʩQ,F: F>ޣ35D'wTUحdwa!=֤u*.,bxj:̃_$\U~ּPQXdbI6Ks)L=ޮs\H_"[TS6Ux/"gr?ŪA }޴pҙ|? +񦏜{CW*1/Zu|tM9RxW/;7_4Zt_r3AH"Rgϊ>^FPAI2*p^_p<#ܖxg3"/{,CY| f95 p9XȸZvVq8N9JxbgWjl{$߈KxecG 5=kЬ]{dNY4BK* إGzx][p?EF7ΑW*#0ZnOrB"$:*_?`o'GuyQJCFxz"|\X5UG^u۟zlo 8F|_5jhz:-Jc<~ms]nz:`8qڶ{i!.Lb-Sh56`&[5B*r0n;riRG7ݪ$fb%K8֣A1E L8-q;sNT#k ~D#Y`sՃ j$ /oN3? "ߊ1a!u0_<㨵"Z5+DԾu=5!#U*3XLAKFcÒCFSG^wHw!eeG X~{ sW8!}aգRƨ vua LCh@O}3jOG,5uui`_ =>H:]Hh`צ֛:A'`+P1ThF5Y{kH}vzb?4҈1449-oEO ed_.UCH:H< zއ[,.ML Dǒ4Xp( 1xϊ1#rh ,n ҴjNt0i[t͟ e,bLq̀ 7Zg:RD"/ӍdA"jOhu'}D`RJz\8a4E6gC?S:pF<v jHP`,ͫ5Gp(dr)2^TܖniW\OaoeʵSQ``iP|ΠlMm⨓sk|y=vݰ?f? S9u,$K)3!PF2ɩ{ֱ3N{ p]kP-,JDmWpM<> 1{qC$\|)EGe=[YxϤZ]6Ah(M1:\ :B,ٺtŐ⪉`bi W؅}u3Sܴer M|LJ`AX^=y8]C_*k%-cDJ6q{M$+T-O<& hU _߇2Ȃt;5u}P}e% [hS\[6gDQrTk4BxU p{$ [svni@&7h=dTM9pI dK SV!=KexHZOߖ?s%JH8U)ePL狸%ZKP8u;g@Q:𿕀=pC_'UbO'N<\jbE_;hd)(\/ QNߘ7 . )JѨ{SN>O 3r8-XſƋB z)N|KyvlIJzEa#l"vq ܨ~W\,`Jv+!WdvIkkv{GַRӆQ(o,`t+ᐕ[A׷,>0~M~F23& n*hC2eg?N>*ko0[,*'!&/x`\vƇNR+$!_ׅ`>#2]1)˰b 'ΎAmrV31w3RzTSCra3a'e}!@@P0pE9Jm5` MV&{peg4$~9œV]]G_|Rz^EOANik40Yl+9g B 3w23lxDNgs^˜M 3FLvϜ{x%gd,bF~XC5@|M' %v!l<3%ؼgsg~^Q%׾@Y3+ hLMpR>ffjo Xz^Am0ye]h5` CƋ.b FƇ#sޣ73qz14q2θO*Un3,jiP5n{yxofNtNIJlIah D?IxaI8BM,0Tx) hP f1XO`-Z=#gߪX=eARL$>rO䝪ï毅hPyHǍsm ʷa&=Rw>cËUL6k\RhUW$m!LIdLw!Xu`uH$= (B )D2lH2za<= !)DVu+ƁM]hDfiMކrw MŘdBSGl5l1~=AȀ#[T+/dzqxҝ)d2fr\CDd*G%mY K"LS #?\Fh⟖6Mn9;6.-JަKf ?t׏\endstream endobj 211 0 obj << /Filter /FlateDecode /Length1 1826 /Length2 12238 /Length3 0 /Length 13383 >> stream xڍPҀ w tp݂ewMpNCpw`e9{y^-kuz\UY,moH(i(@ ZbZ **]ml6n~6~ މ rXv`gdj {O'k<Ll||?>}2|03{;gcK qxT!.5 j 0G:y֯W37c_OD;uTv8u Os{'?Ε */Jx^I CVqX5Z%WjXMKٿ &`/|_5KO׋W_ `&f/|d{_^_ÿ5k\k\ _쯁<SW'[Y}mW26E^7 j#rgcDBْz綫 !xɑSkf'~ Zhm1-o dá+BgvfxMCWL۳24M喧 G,cёAbb3rTc $i?ع6K iDh W©{=܄ &[=RqtWmAt&#M, fmMml 0,uQ M?dveasmq9d-^1yno,Sl? ]wގ65'bK7 Π$/)|JݕѠşl2wmB~͍%q?y|on٭ ﵓ%3R..`}|D.$'̒Q}W0x%-PT*Ak)epi;)0%RYQL> aPIRb )/`~FZDi*h2.ݧ*IEBШd&/w[S;U@LZ,41`/"d^b8xÕhBG^Dv"Ss^Fo]c6%Ҿī5w=~"Gyc L>=,ߌk,f{.{3Y~/E\ʊT\돛-?*.[A:wGa$|)o;-*(|s, MOJf?Z V.QI-Y} .(JпhiA izj#E>tVs c'B S8A *wO ˑC?]n:ct/0-Klm# 5GؙȊNmӡϚ"s÷TED+A@ܢ`%V!XpB]GD00;>67!nhoX==xvCgJ',3Xcf|I_G<3 $yvhHi+Cdτwմ@Kꓣ7Gg4{'+ٳVFҐ>@^"  L͐0.sikKp(P+څm /`_@ؐ.7΍:<.6+ bX!l3|$ȟo; -1uvkrjo nd]Sʳۘ6rۯgŅ %3htVzv?D :m1+x?3X!PHd$ddVu(~g̣r lr!4/S>Le{gx?m,4kʹEVuXjaO f R?)A-`)E3oD*BMo-Rx#׫Fu0h[=w^Ԃݭ6^'fq,vkW~DdH +1m䪬:dQD2, v"B;Ą(F,w[[_j7!n@ U SɅz.?*נ{7| H*u/o/a#zϿ 8lBn6ޔkѐH M8]dz/qFJ+Jԇ =l&PODObV&!3/p]/)ܙN@3mKKr3{9*SCՀU.ex">C${Ske/ׅXhd,'LY188on{4<]m(Hhe:6Yi\" ‹vGG*r&JQSdmPlЈ!ȊJ0 Xi|}]G+X2u<]dy Vqܳ*R3>%=hѰL%f BlB՛]mp_mM=)*ĶEu={2Պ葐.#'qJi7Xl.Er7o46~FCovg͢EAlG;LJ΁AQTחT'-ׄ/aHg0Y`ŅvxNě( Sˀ6P#;kpN h^p$bv"`uKdde*~" p\'xWU٫8];"-kI^78tf]o,̜ތp…\M _-CF'rS dIjZ{4HK}@,33Dw԰쭷jddv$![F7MGXFa „,`98]M #mQZ.JLB,ap:ۃDlqnF>Jh72 3u&Y}h2FGҜC&Nc"zi}9!z$) xU]"U Gmy^Ѥ7$jO/soו ;9::e Nxy]o .`j-[2hc6\#63B~cfe%pqH.rX'L|g*n"&~]maftbJ[ji  tbج-4EʟM͘h5α'6*idIL~}+e«:xޒ^ʐm\8=sq؛`f -=(MTW1;zK澅9ach; %wfؑӢϲ9IG3XDWQ`hu/ e=_d!lOnu=ؓw 8::@&Pߧ@f3wQT-7aRu`FBCﱪs&Kt4Y=Σq7{4[ǰܩJq!xHw N1tFϽ2-mmi䎦=kq? !5fi5rUn`#%wfȋGELIf؍)'ʣXC+!xD8 *T&?by-aDh^#\dkBqU%g~MUu{e~ I_& Dd{: ~/# %C!ZfW] ?ZK|(VR轑mRH%yD0J>ɨY8bk Yl l Z0]Hӏ HIeOa6 }'rь8Mfկ_|?4QO[1Ư9:ʖ!җqdqÿ!Q$OWʠxQ"y|uO3#Op=_4W- ncn h!^R{X/ϡ|\օ)&5ҽz(f5D5MC='KD:7qL 9~9Y J=8lNaF/BV""-Z)\>9Bϔ A_f'7hDm0ҹqUUj) .~\dΈ]7^*fDoXW{ocBB_;V|Wtq%.N5 MV1J T+ΥNETI=6z}8EB`8F0ul 5u#іT",%N [phaAgQ0/<"|x Ӭ .%rái'U-.LZID ; l^VzC*} 0Ygr0aqX횩U@"7xbe@Z)i~W16gRG;wpaoPϙC%-t}OEo!6g6;'u8Q+ YzK#[IB7ՆLO#:"Bm3c]&E\^`xn{5ϝ8.18A*b0gʾ~;" M|QEh VFQKrXkvgGě9cT;%0 m?*<–ܖ0Xx1\kmWiԭNFf˫ URQ^9Zƞǹ`L|FEv Jo"7~Of;gBQ;+pp/-~Ćn7 j>E۳83Z{Igk13+\^ iZm:[yaXqG)tK3U5;Y.W6L=#ݫ7߇tMM:%=3LB>;@}2ճ`r#N\2 9QG,̮qr7 AKЗqsc |S>}k,asZ1Ei!ײӭQ7Wi("P3{`ISz`qB,.|g #r97a7gt[kwjN}rp& !!ˎ\.2h/93ZQ\^6rYFwZѥ1c}nGT:+8G4jW=*X+EBoהLꓺjJKIP}Lz|LMɿi5^Ӫ021bA5zcp,D٢%<.`XwY6?ʏ>wG$0l U"[-qP'&>O3I1_n8~8=z(*S"am\KW;)Kon*k9^X;P>mK.r8AN6nZ ΂]ЈLj(郸AޏG&8(#6/Ey*ƴ6 Bkߌ-$ ?p#POls@SZ$1Qu]+=*Tl. ˦5^!j k L7̴%&Ȼg˛bshG7Lf 2xkCmE@]t %x*̎dNp!>=>ћYwǵ I}5gTtθ/z\SCFb"EkYDFQ=c{W #M=E¡Km`oDr_ES1Qcw|9ve\ kF[>RCn.l#AN%_,$jِZg)ķ(cʅ ߛe.SjDj"]@@?,)yj(y%t퇟'$t[v,{r1 L9éJSO?O~X/_dDJamsLoĀ&f%co/$Lfy/JX_z@,bW*Isb[KQA|rW&Kl.X@]֙o C#o 82aIuC>ٻ&p:Hc+ GU%_W8ћ}lґgYq2zk@SC;tO~E.4pp BI-K|D-c$}Q2a$z_Cygoġ@njVP;x' ۬{y\9"!zO[Qu2I ep_6?&ux4fYRDz[:SNF2s_Cqc/BєS]ʋ`8&S)uO6M9 [pEkͅ $}'[STsp&Zw#qCPς=!.!7Ci:ViqrCDApp"=(HFByA锷kflπM/Eh %a%S١op8ϪIX6c~I]Q-tc;RghԸL1zoңn'jB8;&TKK Oe0):]܊v |YjVMFiB`=VF #i,0`UUw4k^jKmXobpǓ @y :6-{#g1-ZvHCJRQW 5]2*{~3LY2?_cbSz +[(LJ-W:cv9v%tx65.lm)\p4;P+DcV JBg0wNq A͎'AhDߋ@4ʡpKB#2BV:Me0KgǸy;OPzeJWpr}Sp(<1tBHyQV^6 RgxЕEb_[!$|^~"^c,“G#։3uNs!s?*N jIft}f-O 5W(Ȃt]#W#_܇ Iw`(Ci&bT|k9tnvmABNeO?{GLpxu6.64m_,snEM;Ys1.Q vZe:pN/Dj3GvQ*m{7_P3U2(/a lm[, E5y vi&a=@9#ΞQ})>7RВ]K<4f.NS\gʊ1W1i7z7ݺܷ) W:z#+c]u4IL(OFD NFDg`b͙1!)m!v=Yy [^]4Adڝ'˜Ɉ7P<("|sgwo 9MMubIda]J6!E QF43QGnn(ɷκTٿ{4hҮ5QO8oK^U߮rSґdSTLԯ"-AQ[N?/RRJc% ;D]ՅS>Y|۹C+D2Wn 9b3Is^-Fs,;T! FUhY;x!0w?+?Wf&=,4] On"V/[fv}P:M,ͷuA]eP518_*d6B6 =[tbnj 'zh5۪wQj h?Wb^/ȖOg~uC;[O帜Lq,CCm)Ia}7fb2uF]SsS͎:G" I3C2 j#{~o$Qy)I;P ~ G{l4Dhej\IBIJK4o]!c޿kfH5=Ł274 6Qn(zE_j d3TX%mHgcDIDYcrJ:m̉Ǭg3zs""|Y~TѬc;~A֏sHԼl ڔLt z!ѱ>KIt}]A:1Ka*\aBrڎSsS >T%SkA8Ê%oYFeNْ79Tqȷ,z ơ]q`K 8'X֎k[up8pX9_05 =Ѭ'Z)};5c|D1OzQZKభhUjo6>h )5kB+VDp0H|^%+VU^0X{G|Àr\/o|UxK="qκ{RCȮ%d'xH$qFgSz3 :]K>Зs{8Da˺v߆B,Hҋ;Ǻw{ē$r,Z6l ha7(qxaUy[On<+miXouJŻlyNyf!U.A$X,pdVCލυI~Zo~dĆs{BP$-P7 25uZXTP XpG$"lK;h)k7:GMV&F1A'>,H9kպnu H&SY!=hHO+9rK[m?һ#- 0lCN%ES؝}TA:t&fzZP<6m#@l23 O"<кUϱúԟLw۫9U^`h( mWdmH}l!yA@z~ѷ5%.+ &o6Wv?:+4{MXRiILm"~f`|d:C9 XTz.'R|ǗK!u0'fO#"tw 4]Bd O=^KsGz)>Wr^=4J.YxIň\:]STbifW587zHƱLyJVSuq"*_R|cQ]opr4X񸲕rw6Ѓ~,˨ $|~m/=7BneDLIV!X|\wV Xཛp vOD;>4T :ZkƩ, &Rbw$.{M&'z,ogы_ç3!P^`i`dB,5[` J'+ʊ#k)4:f^<ҾQ}(*fGqN_ Z.`Wc} ${b'n9Qh_Cp YaRΊ jJ !M# a%a2}ʡۭ݀@}o^ Ydr{ Jmȍ5S_cSu/}L47v|0$ 4pOO9M]4Ÿu˜c1Lދ=J;,9j,:OX%.Gf>K" *t¬(RJCN'ZNZϖBPޮNpKUZ7 7i]{ia6tPs ]d+Jk>zt"`Ӹ-iPL3NtC !}/ ebZi Vo/i]5:&E {sN, f |YXL `x 5/8r'4&G ˁ RvT$SFW(pWdY-@!P7bYr9&Z |-Z\VS}nL)v73f%Occ ~:Ե mߣH8[8[[6ndaʮVԽKCG_[n?e}\j3ݾF.iy=~G4$DKIA_bx KĆw&\ɦMDQ9endstream endobj 212 0 obj << /Filter /FlateDecode /Length1 2681 /Length2 17574 /Length3 0 /Length 19111 >> stream xڌeT;@c .Awwww [3s$]VȝqwKՕ)r "MG OG Kj=hhȰ"Xnw^.&xLPL(HE>s ^Ogd:TB⣘ja8ouH* hyqTSმ` OG<@-|rUՅi4;'? TnBS=eH7WW ECwI~*Qo)Rsl72JB3t!|s(ֈE?rˎi>aN}aD I1Z7,O2\|A+jP:T6qW+a#lh i0@]VbȀ $3m$gW@|C?A5r 9')f쑲MX0g7f{SW00JXu2O6n$ZEA).j0O0ObZX  iW 4onkNjdJ$z὇)ew zfϑԉːER5gy㸕hML{SXG>d]tEdM>=hhC|H}.lk1YH#ZS➉s&Jꋘg{2yKbH[#QJv -+9h2G_5n g՘fl])38X^θH*Fh#n1w7,\9:-84{LowӫJ9[N OեVb .'F);*/e ΦUV ྦྷAU;uj;E;^Q=1WWz$P:Nq@*Wo-uˋI4x6QԬ26R ˭-APT YqWPhuv [ d"e֧}ETd].iPNa/AT -){Rj$n~)D(qpd΃7a7:m:oGU}C:Kl/i()Y`R>> 6arJ-d1CK}MU\x#VSQFE7)dOqWf2ob,u EU E34ͻ3)cK֍e(5=4\ꦠ񚾗gպ&_BJqF/HB}req3Ci#ă 3`adRKp*?ׂA2F8׽ uXe RҭUKY)FM'_tb-|$$/M^pw bN06FGӞ7 n98?zQ|XcqAֱ8" S1h9ͯ' #MeZya%AIO/Z?Cs +&IDZݑ8 MaJ Ż&xU OJ]urfruCSNtDu󠸀pO^L2"20& ;JAMu\H;_T&s0T<0-*c0܉rKӨa(Aw\GQ(*B}L0)}-eSjkO$s#Gpk uJ.#pCI\,q Q]x ~:U+~-2p.-jGO̪ IǰH =APR!;*l_v)gfk[;Y&e '-9T!E<_t>YOm#2'N ;pjM Ǎ_) $Ozhq<5r05rRY> 2 Nya}|6B{7.}>Iڐc zrhC5Z򃡾IEᗴ6Uq YdKe;ʙ&el7A+zZ?#r.Eͮa1[U(ۿ/5mBN -hA΍Şb;_rzi6-(iX)2= Lc H0[{df{y&εA:Ӈ\wi-_0 Ndmձna`Ec 4z1-mBF6[O+Ǖ::Y!NQЏ6ɢjZ/LI!4t&cOEyuk!o4[ C055U|(HR;#= Q!M|L_ `^_"F(GlmFg}@@Eze-#Iᱏ]3dR0*yNJ|OLOa7F5m~͙Z i/ODSĘ*& 2(0La>9 ꕿF8_bW5T;}h Zy<'b %zءfdOPyq7)Gceeȷ{M5 AO=]2)<ɃjxW0ܝ;uGálȬ>_6=G:͓"%⌍L|rBvɃ-g.gdq˗N :G=2: ;.|r,oyx\PRcl4FBUFP}(\+WcDN"WяWqm^OВ\ (,kҺRH rEՆV8ʟai!Yf|o5Pmr:j4M"(cY2xAīͬ|$?mPkBiFv8# QD$#&v3unA!@̈䳦kԂ\us$٨p&mEx {8sҳwͫ;cX+ իw-VK5-]\Q:?!wفİ}]a$IzE8l\k)csP:1Llf[%HpKOz/8sWzW[@8ٹ!|iƤu8&cÀgʓx!ST24ax3/ce_YnU#{}E 4쓫 ZFZKoģ\o ȏIh6%KQk,SuEqC~qi"m*'vWPs.x4I_WyAo֧Ӿu W~D$:V?gsǮn GY .DiE''C)@ HАg4#ɥҝt8t>3,Ψ[svLOp &{o'|%jYTARD 1xM#1)"%eTR^g0J,LO+!A0qi/k$EjsHP1u:L*ӀSvt̝ { 2~ޤZRxrdS9WVI ctLpwq㡐8N"Yl遾Ө_ ܰIw|@H^$6zusrbe%|;MǺk$(gp}>(+[O02s_a{a9A[W.Xk/MWNXՒ3=̳T“1;lKCJ(߫GEF3EO]cޖ25# TzBoݦ> 3@(hc>7עBSG]~L [Q1SaZ}5D^F ey;ɥxݫ=Cu[7gb[,Ykq}Թ=$ah1;DEkZڊK Bqץt&0mс=O*4 )굎hu葃\.`2ҁW8v‰4[x@%bx!jԁFi9d2-!go GGbwx !j"*WGlM3! 4} w>2RucƓ95"hت;Kx}eMLJ' z'vv5.5~M8HnΤq"y&ɗN(&0^l^ո0W[NB(P]_YbAlq B ]3rhq6C4Txq(\9>Z砕Iԟ#gX'r >V\UV.Q˟\WGƮݫT#Un* Cn[FN?r_*{U ֫`GwTEA ١|Wbq{*Ve_s?P.m[Iԋ f5 )Uu5]S%9T\lTixiqɓݞzbV8uN9qЮQ|YJ緯z,e* T[41S\T>*]E~ l0\ jchB1搞cIK6$"ŸI?HVU司^C.ۻohD"`m"?༟b"x=8Nla0l}͒,nɧ!wuĢMɢ>\*f ۞aOB!}ը6I9#>Dr[o9 0 G}JWCi(7GGo0PV R^> Nž7qp\ eKjGP2aKmɂ{!1՚~M9ZA W:b!c9ϡ=zM5VęR`0wY憡2zvQ(t??Ŕ[uFeo4)9F+I~Kl%U,Z hcڷa?N.jL'L?=YI>I㔳w IM]`gRW|дR3,5Wwc\~""帔Xm& z!nnV0٘NH 8Wy8fc 3I,ѩeg&m tmqHFl{!QNȲYϭ_ b?:!yc ?cS5(Oϖ:c7"#X0>+xvFF G9GZ2cv_ZW_ }̴\,ѶEأiU/!ן6!~ݱH"|mz 8ny(;nycR^Iݐ=b<Yז;Lh?@/zu71ՑvYG@FJT'OE(+Y+CQjL̇}N1T5#QAOe)tʢ*)50Բ'? ! M4] q̏WxDK5M/QO{MMe=^>Cf) ;s4n2x ՙj7ELs7ͅ'*$ Uma\=ķkI %ҨߤG1`iL4AH#m4r1F5rcjJYPA3W_=4&WJe̓QnQ'Yã]l>ʻ-hclۮodTd]".2d" ekHoGpy ܝVX [bH4Z I\/%*_  |ZgHcT[nm K3|0c }}B= ;mO(rCg7@YkpXӓLIOenwgG=X\MMkJQԺKYhpo[>z}aTaK,R_NyNE`}%}fn(_qޚ9j-հ<[^qWZ0[9AjЉ"c֕\<|6Qu P ZyV3Tȅ&&岦6*Jw2d$!v覞P57"<ɢT+c (4޼jZJ"'EMٛ.oqí/: -ǞP}%:OG){~ڞˠdsx~u0ۏ ĝh42BiV"v'iÑɏq/۟1W5HIȇǚ-q>q:|~kc0Ҋ٨ _W&'½N?ATw?to(C=)ZH,@: 5(HP,U۞YA`a8jiݒFb@kzޫ>w-8H,;E7B+o 6ܛîy8,?y)52?ŹAI$go6v@i/3"@]jOb!eO䏌ihJczq&%TPSuN`N]bXɪ{P<йj$ضKJ4(%jȠ:ѫƛ;\N ~cI `Ҋh1ڀs )I q1 4[lI}Di.qufZ*Ʊ'KT~B-D& *\(Cη70ԓx|Kf$u_i38/$ȏpsC q r-1ξ|M>6?KpeI|vq4n6fu1hR=Vȁ_a7Qz00F'um(~=bU~Ә1ouA1Ȋak*M% d^Z+6RdW| 4gyjtC\q+EDg +)wz/mw|f{ۥEg.qx$nIleZjkO6Mqoo5E@E099{c'])LJf/mN5L€8[cxskAL*R v6~wUmC %?xAK>Agz ػqN\c-(\ m ;BLN!RT*K7ZJ &g9)'*\ÈO{UXn )îK=`dB۲b^tO|IMsn(znP4?J=되1=>~9Lt[Hig)רRK5fOU[V&`ݴʢt 6p䶴 GZ4{mm :o1PRzWB9Ym$H.P Oo+ okhR hFh fQyۛ@*aF\aէYF)^o16qˌ#O֊qEzG8U;2wk5\,D~ UbAdOAV$nZFcSE>VX#7#Xѯ/äZ|~n,4֍ i.3: šY퇕K9e憆]]Ã[J'5 (6⼱߿bBȃLASoCJ֝`e3+ -aOh{-&܎Osg=w"D\@m3^\%2|EI+r(<5LFϠ|g7S۲jC pV.Zd8Rgn8EG A%Z-z._LLԀ_$ɸЭ;F鉤d@ŽqA)h(2Id$$L.co ܡiR x5CoCS}_\}u(/H8F2IF*' /gB+A |*:zC9Q^p˅ڏE&A.9;-0":WMk\E2 }"(ے|?@ ejpHq*[̒VN UFq@J1=+} GH6s]>C3[4Ŧn)}ن|HBգPB+W %>4+8n{N!Ί:²CP VT cPj7 P!B\D#-y,Hr=Hl񮵊bׁLYx DoEWOY{IMKN/9LOZu`m\M6\;Tr-:udsset-B4f1!1$511gf&?Jr Tգ>loRxWą_[m,}詛IH8D~aѯ r0.\嗡Wѷ&Lĝ:ޥޯ:pp_]b6=9.ƍՕQA{bV-2rGN&/` QSUw1w]|tj̝o;,כs/=гSq1s蚎#[EPdE9;!8}.78WJپQm0gV#p&ѭIPY"[^8/taQjW"}.B֥@4HX\f q})vh/`^U Y2zOħvuAݨz | 1Fu#/C-KHb8q}KדɆ6QH*^3nv ]Fr fP>5C㡶2˧p'v6S(K|rQYCN17ČHePV&5 aSIodRlPbfu=mi]edߍcJjfl$RJ4 6qa}e# >"q| FTVh<[u&@i-̎:I^anB]';WDLqGxomXE5!qK XH]DRͫǂ)דvHŒ2y.xH ~׼K]Nlo87|91Ub3Ɯ֍QgEGƌyQz]b' U#d{[Xq,1n6aBϔw-dq-0-HIuG]0-:SX.&]>U.[6ϓk(bw.qq7M2^Na Sg0c2RMM1XG8pc҇@[PRڧ/Ao&&/%A\M˕"Zem̖~pj1d?OfOnZ jp6Sw_N/ğS_HӒjW P*8]XE}B2^/G"ϕKz eY?M涚GY?OR-.7oCz7 Dc&pc,$ͺ-2N֡gڱ䧨UsPؿ˰_R"޺z)P4L[N/M ߐP_}^F1ڹsN9wq`nJgFseərxj'2<'=G ZLPP[FI˰Y\g[Ng2E}?f>meW1ُd/8, Xj56gtɘ+@Va 3\#*#upzmkN;qBgdI0Բ;V;YR~Źhz:6][^4DC-('"=: #kXƂI+Bدk{b0@vNUήCŶB 8љ;X늷Rk 0gp4mz[*:o,qKzmmaHK/M jzC:CGiݥNh>b,;ӥ]q'e&T~ @NNF֓apiiw^tS ֳq~S h-XϽܳfiY'߯\*?6v Wbk #^J6ABaNiNLt(7+n"5m/9WǠ3=ۤp$oj:ұv5y&b 4 oFfwB>l~6&jq\uua /DX9FgmILr qnnܯW-Y/F&OlJ^=#n\߳o$Ch/ r`e@fyih`TDH#[QiG(}rN%r7j37Oirגy ,|&&!rg7%BTeSYG_W`*EBn#VEM+D%fw@5“i~ӊ"dv7xgot#o/ۚSx*wu#m ]LWfd nӣ&(HIl ӦsJaV(776]?XyԤ6~#yktZbRdΫ\d` C2x}S>6ؗ)6[>IWjB.ǤdB}&Wy Y̹[&P?ʮ湣arxNF€9],+"R?Pn?2AN!mDh-|~1 N~ ĸAP-S jzl)>^h倠z-*f7tJ6&kaÓQ&ЏwXR/ G߮D ?2 8>kR7(-? ١n*Fڤgt8`O?U$׉ct# SHuzdi[ L^\qV ;$IRҁt7XǾl,s*3!N+Lޠ0ob7'';o,.|͂3 PRN$~@\U~7P 3C]-//%Mx VLQrITa6G|>Tc&)Y>|1ox-K^Ee9f_;I R!`9KYQɀD++zډSutbIڟpb.rD4\]m`)a.yb4K'@u(|i-v]pk\©^cҼ&fW@46EoHr1?Ia%ÒJCw0[]1^` ꘙkBZp;¡1ǃ0'"MDgK)VcKj@ +Pé){9 o63Bw* 41y̱aӄr!Xcendstream endobj 213 0 obj << /Filter /FlateDecode /Length1 1392 /Length2 5960 /Length3 0 /Length 6904 >> stream xڍwTk-H&]JH"B EHtT.7M"E@?߽kݻVgf̳gfYag3䗇 l*8_H(P64"@0; Nn E`B(" 4ƦBc8@ $@@R A "bWDz#ahL!IIqy( S r"0(_)dhW)AAOOO JP~Q\ `;' ` 00„!P$S`uki@H@t%`+ `P ! gA遲*~(0F `ο8 Ji2pq(_S!`L߽ }!vh@]anPu??6{( %P7 +S Ѐ젘"_ @#ݡ~P{?1f_g0/9~B?,1A=bA%:Z(TP@x|ń¢BIq ii[@?':y\T wflPƼ kwmenH/ 0HCY W HDnO#a(CڢI C(د'_/Ft`'SoT_H7a¢_!J!P #И$5S a/ѿ҂ݑH~SoC^P0,XpV!Oɿ6k&uкMRJӗ7U:2glˢ%-KZKcEa?zO _{Hfckxxzܫ&ԺBΜHOoںi̶5 A4Ov7R4tu#T!{EJ|wZgGaf[Xi(-sz_\i5(,ذO%HK3gێ7I\ߣ7#,K25(iTD55 H&_Q{/X⤸*E}? moS%ǽVD-)0&O1 C`ɴ#AM\Ouo`?S?Kefs&PnRQj\!+t1+D({.q/w+ޭ~^څ^.*TF}_fz/VF{99w^al%߲Wn Htӊ> }-V$l'}_`=ZR17.Cbއ;,ϣ[ LlNUtPVN QZ7τ@׫/&5,mӗ"^%InD[Wf_S9I_rob;ykU B&Ur %)*㔷Ompng$h01&I 1! V|^b,Q 74d|3yxG%6lT ^mJDh 6Yf [b 3PʘKj"9yZr`@6TI?AcX+OJ/ϛ+7 kRi;.㯞e7C%:Z5e,Gm|[2?H ;*ˑʙN_7/Q>ʃY^R2/JJ:rF`ܣ), z|'4X|qoLA!e!qO^q?p^C01'Yi2݊ŇIM6UOLu?Iw<^+ukETDOHA+_L{ Q#Nt*SylWvhO@T#ΟLX :mo;+c}޿gLI['PH~NG^u@CF`;օ/f{-?(J.Zz͝ f\(u1A\ N l@C`f߯]Ia&yV f"O' $b 6 }\b9jcO{dn?Slܴ ~ץ#"P7l*3qI;8,o(;.or3 ٴ`KfL.|QZ${;4Vd͙G19Xn*X\ zI>'eVr&g/9*ϗeԸ&]<ͫpyt8uT^}Xw A_3||%]id\^|)z5&muMKU"Gjd14ѻ}wNE;X,؇0fu=B`S/lSIQ%?s*⧡R+t:99}pL^PQzT)Fl:,0v"~eS KF8$dK%g .oa5=Fj׫.:fT?5;6 nf<n\|'.ɯCgu)~Un|;Aŭ;Y[tB9 V4?OTg?D9=lT,?ON8F@Af،Θ8^1//&tS=kHڷr,eMhLȿ۽Ϲ龚}ANU{dSȍV* E Adq]o+Vёz˖ECukWT=Bu0_$?.7VD|_ #g)5"&Ffʔ,%5[qhoq$ل3e`j>Fj`՛n-HhQc\)`7k.d^CnIJ!Bxfn8NL6% ."$Tf]%b|:FSCPT mY:䨩;bj-&)H7^>lLv82;{iIQ\Sgn4Cga!W"%[*sdŊ2EMe(/7.׍yX_,8 q9&-YL,I-ngpK/%)ViN\d*1XZ\4 ~1;IhlNyiE֪o汑 r9Ux^朘́gKT:qrt 9ǵ =Nqwa gIS&m@K' <: ~j~hb]V]w/!@Z17A IvtȃѥYEFsϤ-8MCtdR48<]-;%}1q$=ϦyF񱱙ڱs%%U3hF[4I' Fu;`jrG9 :T>͂Tؼ'lAZ]Vg?;3D]m6G}9#FNt}i[il#iͧSk݌ag6u]ؽK9:;cڝ'ȅXoU k<?)8Nk]{HC i J+8e¿#SĥlI 0=_ t}<Ǒ,>0"1" i;롑+{9Jw:sxoXIbUGvӒ-)fYj{gZ)8?[cGny=5]I˹*J&J xâBx}U9d]i#e#:2vsw׵AUyҶBSe.ﰄ>MWs~3.0En]C(_`CΘ} J"$ke(e(D)=6' &R6t:Œ)HvFDos?z;Ӆ-֗C7ky:Fo5[0U铯CI7Wzo^4~Rout*T}|_?V^A %o4‹ ޛq(Оki)CX|g,C ~;ر0Bh(^IPG\Y+xN*VA.lYrQSxz6:\ХKT). (j[gh{*y/iRz6Fg]6Iy7G/mmdTť?_F{ \Y{xL'?B)r~U8a|.gf Cђ/5mibT'=]]ю9:NK9z a&)̉|E'XGUEm HLַ[cȻv=:/d~-+H7QJb c[èy#IIYxAJcnop^-[]цNqBvgZz$̂i&8>mzj[c ^vx# 5;4Il_Qf^^j?܈Sy^ DwlX"2\Ř}1cN; 6=}vm-6 FM{F3R}o>-|/}=%"VɇQ@j?lsBS T vrņӻ6l0uA!yFu6&dZjp[ O rGoгl.L#Ɣ<)Ѝs !ОE~ҼX3b9H8|V>vt{4yŏgKnzF'ޑ*)em@϶+<Y6~gy)(dú$W=q06 ~w BЅ<7ZS37x,TO5 OaUk1$?D˹,PmApŖ:V|}*<;)\7XQk«W꺽r*t"Dq7y2fp{%&nȝXn~ *&v$VJZ?sul4!zaZ+CWa*hOO1D4ȸ ;[]M3uo{8I׺5x΄U]Moz ßSS]Y-NI,mvr16n`/ i,ˢu]s=2rB>HtN}b:u!hwt;-=^)}B-mȞ%[ KM$UGR[$[*L3 dg!ڍ)?yYĩ~0%+B CJl=20*t>=?(7%8Z\9y@7ʃ0jJNGY(=6Vv묭 |x,d!K<*?{0ϊRZ ?տn~X*כMEJl(0Z]NdMaѭ7~Lf˜c4gՇ ?;Z R:7?kߊ7$m{e+> stream xڍP ]wwww ݝ@p]+9jffukɉTM쌀v L<Qy5if+ ,95?vXr -?@CQ b `f0s0s01XCsZ2v@'XrQ;{G 3su@eL `; lt06:m>V46[='=#5t:MI(-fn/#a0:}ؚT@E{s MYlhllgcohaak0%ݝ& > ] - >nV~(>'cG {g'' 42cmMDllN'f4w_2L\m-\b|`̀v&&&.nt76gk5{N|2>X/'CW O"Xff3hfa 'h/qc0?ݏ3CE?H[""v/zV= ;3<۪݁dhd5pKG;cC >_ؙ??!z,+pO/ߌ~vq y  c>#]Wda::z2} ;;cVM8#`jrpE2 q n'Q>J+QȢ}_i}0>|>6? 3`4? G\A1XO5"Y~Hf!}HGX?Xho뿆f(c?C8?C(C?p1n GHQ?P?d:kcg$]?:}w}O4]3 xsߛ`aC+z(tZ(3zRldŃajC=|$²/ݭmjkbyѢVhjW$E* (ʦSx((l..VxN"³s]dNBgIGO?FYط@-eo3qLfwı_o;TZTTLڏ|wXhҮuV E'rogP)=f剏o]TטCg6l;H-+p ~`Th]\X9{%vlsDq݈ny/vA V-vխ 7C) ?IfM$P(bU@JuFxzEjS2/L~T"[׬qbLٱ0DELwt:ttj# $ j q 1r<UX̀ۚ;FS \zv1g 9Ajk$ p.5:{լ$::?Gaw?9(|; |^d@D*|ʝdWv]i_3/Ӟ"ӆRiZ]PVl-F ߛtiGnW GYL< T? UoNN P:+Clᡉ;ٗƵvGf_0wߪR(RLi)8*vZ(i8LÖHA8Jqn˜֒p/E}Y*%~ɗ9~愊.\Nk[aq]P|f^fD4fyIHܑոRA\8Z<`D=Jbr+F[:$`r)7, fll"gOe#|y8q=6P=Wv6 XKJ^!ﰅn4lފE+[h2~8 ).9 MgPxR0 Jh1Wq1R~ݦ`Lv{e o@t%VdiR,p{kȵgnj1iӷ 94΁epp v[?)@U@Hn*ؽBlqK#yy"}t₏- x\!.9"0lv}5fhã*nkTvl-R@4ev &q}@_޿F's\VJEPK OZm|lÀ#YKK%XQw?|)1 {u1qBv ̪ZUP{"p%ν:V7OZd,ARϵf̮nY^|"5Gz)GZw{ _*Qn ᣫYO/ljZ1/qD)Ld^4`qM| [`Viÿ5}'tq \եX1%'M&曙ocھ,j:xb4$)ro5է y^'<] Uij-ީ$I.zzuցTmc=dN Pd HK{Ë]:݄ʥo}i&> ~mM] LIz$w3h6;sB^t{$;jb<'P(fY[c].8 VIlvS8jҔH!|˃(}*nH-"0ѡoD&[/4q5 Ij?yrr73A*l o' Bu_MN}lL<"4{<8&cI%[|9 shºi@$A(w(=C2Ԙ30:!e*>Y|` ۝qSIϘG/#$YY~RZ(̖:w+}նEy/i_T>7|zDڨJBFة#s I{1΋+=9֔CUޛ5Xa^79_IGx\:s6<* aΝByJVoLiUp3MU[x: B92Ĥk?@K%x_A:0dUBD}(53өFI f}4'7+Z="-/ ɢqO&oX NYCf(J 5d@C`P,{@A~?. ,~Mq&ka=F:[N3bBojϾϷW 8rKݯFlgYzW蔛|ڀžq5mϮkҕ3^9_ZJ,Lًl{N;|yQhAC3^aݑOnZCOڣ ?vZ Ms9ګbGPv`m$vR!v̉3{ NO<ҍ&uzTCN'd72k+4$Deym^L_䧂ܲGYܝ@PMʖ˦X E|r;:"l$QXu0zLAcZrGqD޲!{>WFI  PP؋K%΃H 4r6y𢡙$h4>E &O,7h]#_(+WoT+ۢPq72772Ip)%% azsl]KL 9U CKK; v{*CzJC6tKzc"_G_Y- {*'\fk$)3)H_:\_T>X@5C@h YFXu>)jZh#iIBI>g⇵G(g,|a6>pC=4-l*X CҺb<~v;_ jv;}-F PwbgO΃7 ;5(QU}lv8Il޸?Gy E8Ie9#GPlwASHN2dCz*\^c~u6A1$Dd1]K )"Gb)KZǭyRfȚ\+bBeɐ* V"n,ƞz ])ӀR^![T+D7mFN$$u4 \]sso\X OKɷ%[kIt2W^,~GJ!/,Fl|‰2eƢV^ZROޡ'^w1w'=1pMrmRhY})ޔANL5J DNn©Gfsw$ ]M>8(G*-Bh`h=nR]djgWcKpu D ʈ'"HT#lI{)0i{I w%AZݬ|aK:l[8=`܉q9B,ja뾳!Nǒ,sB(;Fۭ_㹰$UY{3F#M4؄(ʆ1):eV+l(_Ìq]p8&Hkn1r2 E!7qh(N3Wb05Y3sduDZ^~zxn=utѴJjq\nq]k&'XE:6&FCL(:6.uͥ'݂Hs(_>B)L2iݮUկs NzCZR?IƉ,:q$ L#ZRZN{αk).e? \ d=6i&B荽"ЇKM]=T?]/]r'Yb#/5gj].T1>102PC"?cǏجKЕ29Pl(1a_Ia5`@n. '6[R}2}Θ˸7Kjj C¬ hpo}F;MD燠oGM5 d4kp7BwǎEcZ gANrU3nn?:,L zmpzr`:`Vw6ZG=g^$*a>O禳j_I8T}>45ڊ>@XO#Lq $P0Yq=:|a8nYkk|@K= /]Zcgւċl؉CPUڱ"S.ƃO!\qrjuD&Ӫ/7/4k4@r%Lt'$4Bӓ|طV0Ӥv@7FQV JsSA}g17mJ=5vBfcN)=K&;%8y'$;_.i)dVv6& C)r 0޻c/y0W*zUaO"Tvk5׶EY';' BwQ]f;l *b*,+Z<ZHn'=< 4YL -m ;tqZcnD )COdo FP2|ybBK3i,m,s3hQ_Y6mvʶH*XJj|pdxiIN͌K2~HKg+7QB2 %]X Q`Jtt8jpo GuDQ`]e[K Z(}>U+'˨jYKqPREzg4*Eq@B WgǒuA9c˟nDzlfԌg ^3 3zDlŞyEoE+=>i8OIBajb V>~ßێŶ977\ΐxroo<S69h|͒Ys)T4V#7u<ݾ{*^^ubO_XOuIĒ{h7p! 71æj\+ڴ%! OĄڳA輜^.Vqd,mm9!b6^1eB=Umq_jEˇÅDqexbsq{+_rd",oywe~S,h^fXVn@Ә]9]*=cz,m m@LڊmkyM>ĝ6߳Yз>Kj*H͂^;}1h_Y\Z ߌ;2Zoԉc'}^坓hNj03gQnݦ MG1-Hd̄$VZ "`ѫ髒3#KCեڨCӐ(noXkFʞ7{NG ӕ͞2T5'`"r3煿`KGvyw; LPbNkWsy6%ϰe9pX)54踛>*$w":~a)Ti(Ai !- 9] XJCB2 0*|)᭵ WTngdIQdr#E|H_>A~٘1'PM&%?}IBCr=<)%gMY?Q)U.dB UmA;HхEo~TXNv \D;2D}G8eRU.k<{$Ax?;f2q9Bby|\NX=3EQ(G; ߃_ ϝפ2԰MOrbCw>:_&]r̭.xcH*f;\:m:bASx2mZ^9F%ۭ[:2l訥=} _ptx? /U~G1[B˱GO/p[߿5I W W\}-) iYc?/ m\k,< q$\y\߾@mUOh^zyA,{fS1L)sc&R#Vm*qʴ@~C ĽOy16*e2ѻ`!w{USffBBpɨ g;U˘$5[ǑI2Ďt Yz1*qHٓ?,]5m _, !'':O1J6jY '5sEqTPS]Н^uJ IReK{![qrHi1%W-ZAlEco3`ZFL%Rzy+k:e ?yWLDfN/֮Slt:w1k76q:R޲袢M8Wn;N).5-5e-YAvR=遨_8xE9Z n40tN1̶EfUJE{Խi^jU7X,k o\>[vS$;Lyx@Vbв)lc UsOVdLYH%1K]'RK NDxN \-`W| q~w kM@Wݣi1D;FrHy%-2t&E-evOg6M쨓R/b3h#^_ZCʭ]EWҠf(peoEUewrOlnh{jlQ"fmzVG ]NK̓!2u*l{dT5~Oer< $5Qc~m_*  KbCzL; 3ZSpvwA`w⥜ōDD@6^\)|޺к1|r߮Z׹iy&-I^v2ʲOR_>^f٦OIoUQ7`9]/P 1=?`XV<&,yà DGzIAo%ajuFP{*zڤ7*Z?|2 dX$h>EDG:!-51?]돪io*ّy zw36FRi5sjpchCPyr X慉`ɖ( ]\nHw(t.`qežlNM>w{RΑq@!,pƜH놝T{i D]m%`e'ٷuënA$>T* N| M6`!)>$G3c=s~'f]M[NGHD@HIR᥶"nF,91vڅxAt=7=;ï '8[l,"لQ02IO4k5Y]: +P|\1;"aRw\y"Tshv\3ϛmfr:zi/X7O,.r==tPhYr<翉D[G-Y5ok[>:R2 &>azgN!"ޤbw|O*W\-!;P=8#[D5I, 6aՑ/5yBªq֝vvFCH]?~2~/ jH ikUws*ct.)Xg XFIIU4 ~s %_2BSu @y]/xI"k{-Kj{y޶mLudHc*zH]7-Po|0|^o!ʼUy)'m gaH=d>rc<0!ۦM!V؈ : I_ku%C!jg.׃2Dɘ58 :eY ͼy s0X|m([~dc hfڄS}z%{ct]C ե ]b2( -Z:F5=~":by\O#\>FCת1T)0)cA:ˤ.\24nB"!u* N>/sJGYb#rnܒd76m{+_5 sMNpU:8:(3 & EoR:N{p"2 Hk䷋ ),/- ] +DI 982J?6|846F]΍$QnN,c7p]5UfLHҼo wH Ȫ:M9 n+;`Ibqt]鳉D˔b b$ILjHξ5qEM;TKKڒfk| `New*^[5GEcL8&iqmSe| ߰HVyv Q36<[f~9ak2T>33PX#s`9 gyPX.2X&4;9lp!aF*|m L$$U#n`"d\ zuzrA-\_Uq:-&)D{S Uq#[rL<\DE@ϳLwl ,'3~/!W_2RUh\LqP2 <R9euN Im#*B(-NhN0emP\Ub[m].7. j 7{۵T*;KAېTg<>, /STo2Q@׬_8]Ldw1hi\W7A<&@μ#9%A#&~R2xp)cLN`&$rka TBָhT'ⅽҦjpGM!yz2t{+0ߩ)t1+d`|~>3,T,_V Ȯ'{I҉gha#tK:>ombq&:<_JЀ4{wr=]W{ aso]XHI:j@tabBTْt.@<9('d{OIITT| yR=>Z؜>p3#'WkVP1VςeO0hո}c M x%Eu0戮o!~u-v HphcttsZ1uz >{Tl[cZ)"~ w:w4U7zt ڣ;kWW9U.K8TFq=]^HP>;gendstream endobj 215 0 obj << /Filter /FlateDecode /Length1 2697 /Length2 18888 /Length3 0 /Length 20436 >> stream xڌT c\3wwwww`!8s=$[5̮]]CFL'dlkqcgȩ01YT̝Ómmq8dN C9[`fd7@ G:“ڹ;9+҈ Ar5 gdE42(%7+#)?- t:QXFOP13wB ̍6%6@(:@YJ` hDVFFv66s+ @A\͉``c-h! B s4r0srw4#_n@e189Tww6/v 6@)l@"2S݌ n[`67{:N@o?FNC o 1?nmFP1Ìmm Rbb2j4PW),lc1X8\/r[h`On1pvO_P34T o f wfdc4}06Ho= VX 4rj @"dcjo!݀ƊNFfwhhycbd?:YGf&#5zlwxFP1<@3j t 6N%;o_[`K`8 A_߈ #vo "F "NP߈)Fx*oi@X@:k;PoulW kjsG A_)3_b?  V@?l3*ze?\,PEll@m/ֿ$ֿo JelkegΠ)?A;_/@fe`PL~{Y/aA&]?M@t~WTD3w;3 @P~`꯱UFSw(6/и.(_)I| Dti2# ]-3Ara` ζN@cC?l@?Jb_G@掠;ߠp0R(^`p2s N,p렘?_l, h]1i n@PT? sy:'9q@wR|@7ʢOE]`!6\YR;N.7wA޸׺C̅7cphA2:&Iظa{k5fdNyfU 8:FE'h`AQ1Cu4b%!#52֙Vw#6< /^?ljH[]Ha"C[Ch]IA9'z#6Rr-~T{”$6?ۼ/4 N\WI .+)몷;F7);(7K`5&#fk17McPq#>N李E#XW&Ĩ_,9R:!=긣 ,敮G$_=u=_*PRx,ԍ!*+3(8E.fvꙧ& +}JlZ0tzR~j@#Q$V#+xΈlg=a,TU[-0& gUAQt'PSs\sQ&UJ텋FlF`H`}X0Rb2Ux@ !~\%/8i[ %P2 g\8mEsTmFW2r:# Zؖ<-ܡg2 -]l( ߵ[qlz{Ծwx9WOVe%+Uv7;r\?0Mg ]vRFUf*E! Gt|\ K`")zt{UTbm$ÀV?:&⯢r7wR}6%vȔ|PL-wa]3% TO=)qdEN'd$0\vĞYBbrWZiow( 7i% 5p6ZW`'j!:ozL !alϾPw$ovv1~53E;L>0(Q_8捋~^;ZL#,dKu`wn52oko5A<֐* pJ/S6W#u2'fz*@G{~f°k"R Cs$Ei` Xڲd!gTVt̠xh4x!,/Ǧgw{5*2 Cu4goVf76=Zo\be9Uq\[ _vc2M*5.靇L$ Ş]ylii255}:*'oA6.' Bʡzjt3SF bMe:m)2H`+Lʛ:bi34 * +Z L&RRow8qB^W+p~`FÖA-yP x+ mF;g#"S+((.cjbtm;^wvf=%S y;e}!?sDT>橿k$B.p7m5N$XVgצS>c%ʌqӧk|D>(W"4U!6$ާj+u 0C!^ Qqc1%'oe mpBm``$e'j~Sd3`?x!d4Jeh]&T?ڶpo\]zlk+U`O誎fN`@r=*=櫨c[ 50U 6xX #+nP8gjryk}Mb*gVIDxmh#j7BIh\&"-m=Tl'-l$p.Gzp,0iF(ziAr\+h1g`4ﰆN},uz ڢǏĤ|l gOg>UaoL?p]Ih:uťT,.2,L %a){v3#!R n}*usixN mgQ}7mP<И 6҄ǯSWi/╖u:,R:>Tm4?,L;-DPJMق)Tl8fy6&ek 0,ԃbb<=Qkj%<%MZfOyR^0WmAqvkj5bR yOK^OTo V=.=܌)X](w:c 7$qGt͙_Ks Y9<bM7_l###KDwaxkQ>OKLr+ګG]VWv|OB@M,;M~c%/] [ X=զ 6X#eUD?S|| bgP^h K*8& }Uf?%MZd`%,i0PܖLk-GᝢNcb٫ECFC-Dy=~?tv֥Aβj6zL6 VM9ěcFik5j~LIJޚڐfpLWů {5m(eVȷuxi@evd `Ϟ."p_XaMST(UZol<PМ)yӜ "=DWGݔ'>4q!\r:QkWCwȕkwrS /nGк2;qli>j%H)`A109bF%q%xg"h ~<5| K c|Ѿi_Wx#-w"3KY{A,^Bqۚw0GT_02 .xr\C6[* |yFA$j@P|6?yqf$DA Fc+˜9R B%Þ-Ћc<S7w_Nڇ O ܄S ] q%XRषIorEG}NNؖA 툶_G%n\puiT`-~%m+xījlA2KGܹk-n_@LtTt8Y!Մ6",0r c r_24,5Om(W6p"@ޞo!'"rVx8K쐎1,R;>=4KDWDZ&] M{!Q'S1I&4O4 ZԀifu08MI%ֺqs"dK%mY`/7$z矗O&BisPs+RwM-Gt 81 Ss BQ&w!K(wxD6t w4nտBD)`߅}: /9З"0+㢭Ԣ~5E(mMFS`D yNWP21nHQ@ose> EnؤbsmP"!ѢY'ԻMd>.KT4Khc'*v}k BIO{;)1DK=?/B4HYT+ެ<Gi@;z̸13ʕ\}yY!jrAA@AHiM!>iiW#η/x:n">*BR^nΟuF*$bQ#ET&Kf?ra'6i#9)r}\b ͘33»N$'kp,޽~_t^fG?u[̌1z; <^5}$ۜےm^@31+5+!]dK Qi4@ģ<_ 5ޡ4WS X%-9﫝rv78 )>R D;􃳎̌Ȳ~*[4&ӅI)RE fC)|N`X}W)6O}EkPr<=lGS}qrbZ XwiBO[DT!|\L׃|,Xz]K\!lF.tM603]r,4)_fW;լ)gB(]R6q~{Nn{f=g9~҉uJ#wx99qRֈtm}!BsBU[]nrcC=?ZoBUK=sPqB@xUJ2bO*lْ;>0< S"g2 kG.lLVU8i~K#'QgϨ(; :α[~Ztx|w4(4MKr.fk⭩jyNr%vchp9 W5jУ7m9BBw8L\W*T_pS?0h> )ZYjFI:u_|Pi6o#yH'< )s1ڨU$j/Nb& ;aˣ4xl[$r0/GG? HEi\pCiݕK'cA {Ս]]Wŀ^畫p뺮_#M %iK$ Ü'ƾesS,oii+nљXD&w~V5VELlzMIKSsYPD6Q,M8'"X'fr~4X@V#rv@ndA˰CQ|8/'AݏC)}Oח]sKc+I)\ = mv+"B X|-޺9θEsKspQZWX[Ҷbz>TeL@rM3fF1Ƿ686r6]r9܍ ?(倳2lXA0g'5 YeD3Vv&FRd^|>Unzt1̈k/doCbq0>"|VZ!P=w)u W+ fL0' V6ChGR%(oƪjN痓o@ECm|VDL /@{\;T sV; zBflST&}lޣzDxW/%B+ŠVAP Q1[ 'M UʆӮ?-WN^[ie݃~ ;UXӶw"#@*`W:EyqE 'BV|zI;$g[Na Y / yeu7-h}iW#@ m5#9#D'#7HWQ8kr!y"C.a{MF,plu})ܹL'Mr"m `ZTwxC6X0\wu,zչS%aw(OG,.M n獭PT0.騔)zM)gpA.W,UD֥9ZUZ҈S<\cyܺgq3xAms w$hRȿ&pI\ &X(eM P߁.6nH"_Yӛf(7ϯjk?JԇHZ!4!_-;KT̐)wa˺x:h?{#B^Ʋn-@H|tob yK~*29*i =JQ;:9 8Qlb;~SxO'J]Qd+Y`/d݁0XuD Rhldl:4^X+*_1{H{)Bز2:Nk%Qb7Y={GXQ;̯ Zyb$׊2Y6UpqL{ئtl"f?">a}_Uշ?'BE_w$,l4&N$PYȌtR-Jtl-XyILF2I6~Vs vqwc*jgOs9J5 Пy6 c*/3c-8"**q..ɟ~Dg$qHETH:d+Yi[S < gӀZjZ]jlwsk7R&"ogyL~srXoH2`pԮHmlc˳ZZ.#BY*_6i[%`VGuG7w[)7sR=!GHp Rn [nbY:rI>j8vO?y#k >]Aa";nPEJ'Pw9d]>TpG5tA |BggJ3v'^3r}k[:n.8W<"GsJv+$Os5%[3YXmK:5^ `l#>Q{uah;&槩0`j˗Ôt.6tQ`M}@͡y2{Q 05i71EhemAJL0P;ueGv 3AR 2CA1LMOܒ0:i ̊,DZ^OTҳi;Ndt^A)>bkgM:~T^ oFV_T  Pܱ4iȰI]^>/@ybN:riTm70<2;l`?[6ĩ~kXuǞF{bЮJ~TFna_λ0,Gu2ZaœL1+T/[*-IdnAjqt}~Äƥo]jS$d+_'c:kz:c$*/㝗m9^8JrI䪔V6-u?4ލhקF-m)C_9Z@IF3P*7 "4/WLy^J=,̼E2rsN aco9Au r4ev|%kXfg4%NPR/SOծN"p [E|c0,#o!̍y/?3vUuhamADNDsF$F*dit#릓e Dbi vW,ܞSS6TFiq<0L!UsPʭCE%$DMԹ}=j6;,Y gB~2bfDXay4v"K%- wx2Maqr{Bߙl#zJ02P̔,_~}cʒz‹MA{6%<\ē |گinћ+xKat6[1is4a`|c`htAl̉,kY(5U~.Us9w+/$Pο1{6"*y@W9g&7ͻ$:^>f{IYuFp]<-TM4Jr޶{>lD9`Eav88sy鵕m! *d\IϨq1q].)ҹu &t}aS[{B-TV6i|p^? f>vI%yr&Er))΀:Tfk݃{Tʿ:mau.W+b3C]F*厅!V{q=T&^po*JGRՆ^bjo*y$X^QXN9"x]ȫ)aR*&q6&|꜁wr`K0iQt'j,MLG}^E A𫫖Ne%"'{<G@%PsIZ Dj:eoH L}gg+dv4 $cN=ɡdTIQ>4ۺ[E-jUµ)zc1Vvy#FfFka_oL`cm~.{U.<@zb#L5kdhotnُ!C #-"B#w |`q(궴 EwXM;Tͻ֫U1wg Z\6xxR'8՚;pru8Dyphvqܙ>?|w|itWh|5ΔJyUrD]gc JE!́P*ӊ@Y$yPGܒ dV~{BOhUwݳ8b HdtX8<̻Zվ:aq-%T=eh֒|#>bR{#:̦g!`s԰*н,,@u]*?au-wqO(<3IIHLAgUfT,5&e{{~٠|/`(N.$VEM&%,0+k~_>xHU~ HZ"af1Ju JD xqz0/g. dM~m)v7Ԡeslev1[18sI+dr=xAajx9qæI%%PTj3HN^SLs#R#7'& <>K `5<-=*2>s'[˧W>6uxdG2Pyk=3"y/]˅@ِ<s77oûTƒƒ#iE" L~ {#jGo p3'Rmp2fJkva0EMC!K?g6؆q[v61y o~aUU;NGDcbm[F@%@1><g]8F:˥XY.9>!BBi5(Z)&#vqFi̶5Drp? ;{we3W.3H"WG-Q0|=JD*/N&HTq3~uOAAK(+x?  o \?pCloOåp@WgX&h,uk#,@Eњ Ob8gNȩ6bW6f7ܛAsδWKs}@>`r(7ܔtĖHK%W~ /:͓C^6hj0kp;QװkGDZ|vtkzvy8.΍B #]ҧoU=@NBsݡ_*k*bl[5a}P}&%gEj҂f2utc%pys/ҪcdvV;wيO?ͪy's#qf{|.qkoi72/X`V (|oGjXȣ &JHظװ|?"l5\qג3X)b2NC5Gɥ!,j,ُ]!J߀Q!~aLl 9^w>,T*XjA™>Z_ P,NuPZ/1tY|Dž =#.e,VKT!ZXyV )T uyҋklYhT#=Cш]+b.wzc/8$ʚiQ/͈tb]~Wi3O)}" iN=FkRC˦.J\uQ{ʃ!%Bpxly'#^8zJҸ DSK1,b= f2uWě F5Py0e,=,p,[Z C 5[O^hSngC^öQs)bcdM[ !^, *d*_޳rKbƋUgTsƈA]2;7"{]#gdsU8p7vv#HZuI$S횫Ji7fҀuI(OT .^j?eE \mj1H,ӿ܏=Y4p0 .sE ~:̒&/ZW{`9$=xi:~dM5qΥ[ C[$>H1">g02Qqmo_G<)'b6w99 t?ګ$'dI9Ř] zkT/{]cm|ş80lhgK2jb̟ @WZK]ũM"ݑUfÛ"ahKdT Yxw0H e 6(QےF#x9T\2ce@DΝ3*2=J92 :8tEWU"y.9\K5 `PrM"O,;v/D>*Y W vI)T&d~ޡ>鼑S)s^R!;&o6̵آh#~UXYc*KowUX U}m\J\ gj1R%}-N] 6_Ft14'`ݍFH8)ʲ?)Ǒ,Qff6dl5Fau_8ʅgY 2ZW5$,F[ Ctf+^OU0_uV;}I4 R@~PC[Ңo@Prxqץ5+ky~%co4UIյ>rPuDWp13M:omKWMSŮĎ:F{tTABI^,˞ᙩvC"' 9̉*m}Sɼ~^[oT4b[$oK#{}Nd:'#v;zSJ6$on LxKb]gvXH?,z`|!G8Rt"b ~ se%{,yoNkxZR]^G`JluJ}|txWGV_}ऺ )M[U00چƥ4ʘ8JہA+NI8D'm@0,zB-96^S*Fx[gOF?2ob0-l}ۇK6 ~Oo?*b~g.xzzj subV t+O7$Xtx_qh1I.3R")Z$]`϶زj&2N/تQ;!+2 #0GFO5#BT iy/@BT=\E@7OwcD"ZsN$\ z#!!N~*GP!n젍m\>3ak%Mwky^LpȄN({PY _?sHoCxw  ~qy't!U[Z2|ozԆ?nҝP֊@6t>l1.P_4o_=70Sӌ%GeHd`dBQ'1y6|c(p=OJNZk'5og`~ó hs#!?#/OYR{V0SSn N]~?k/R,N^ 7Lf!?nog'[#4Ӭ7b`=V. UHoOP>~ %5C7. [>ɬ,w<]ˏ/pά4A4^g8g=LbuE)51Ygd`Odс KN^HIj;XcNr nϲ < u)&;b"$J3ݗ1 ?[܅1c MBmWmrC%鎶U;K t)C)F#r{Bz 0bh:+{4e)Վ(bZ33gȍsqI^BxJD/ \VZ'aITr7`_zG^NF(7ҁGg?^A > 3z\"#[5VO\Qd̝ J/6G:X:N ܻ(Dv#ZZ\Uw]LG`\E_U-faM27,⍅5^O洠¨)TB:\( nYfa(m'ĿQK|uhi/=&<Փq҃պě(Pe{ pƀƁkN 3}g ˊ,}>.4!Y䦣v:q7IQg@$9&XwIIJEf/WVwSE>zޕt S "ݣrf%(eE'y,\u#; duеںOo(^rQKoX$PmBE 4Ѳ .*f0s }؁DlϨo;jyB9ke;l\)LQV̠X F|9c)j8H.?K-ط89‹ Dm<)Yo54 =bMJ4ӿ@T w8UH&F n!9e f`qjzˌs曰 E"ԝz^6 4tsO-gTҟendstream endobj 216 0 obj << /Filter /FlateDecode /Length1 2179 /Length2 8087 /Length3 0 /Length 9370 >> stream xڍTl6LHHJ,(] ҍtw˲K#HtHKttHIK>|kg{^49f98̑( VO8@|-;>a0#&rDU0- _[@Ba jP(a$>4 rD#`} eA@ @hCelp0̢V\\... ;$'a)p:Z Hb%-cEІ[8` C`H'9@eh+!*7oO > v f Br*d΃AP[t@NJB)[;"9P_~AYf. ꓁" `Tݸ\-~0w҅A 2sP&%<@Wׯ:nN_fO{=% { A# `; PMtbF? xD7OF 3ln迯KJAUQOo:><8 ߵo),$z a75_+H/ں@M#j3T/U:B̡NvUt6D fio#H9+\=1\*-р#7?>ʁmPo uY]F7, 7z<|r拇Qspq#:OJPp=A.$AB. BEQA(7E_$ҺA(7sP EBZPLE5A(m ֓2 E]?^_;_%nk B@U)rpBM  r-"nJB]eQdr qo?ܨboܨE oNjjo넼i'JbnG(F9‹! 29Q ȃ*7Ϯ(C"A 0q8Xߺ¿Lƅcec?WYyMWZIVTyM Pa,̖_m"UxV M-)~juJcw[K./X[Sm78OncJT\jKcrO{y; ѡ 4ʇ) -ʦCQYHff3dFd/~f:vbYagiDPGkKy 'єSܒEO5ns3!%9!%= O1K],K6( srw0!M{Q)T>݊<1uz(bAL2iu'~jXcen t$ pp7u"ac䏹wsdxkUz'qj4>N4Exo" ٵ 66>Z ׻i rTWAH2KE\:Δ.6[1lբ%\>/h;Wc_mL`V.o_4AFu%!^ Iv\'zb55K+JԔQcru[\4gB+-F7bTn_S[~}[ *MeRf%0I0,o|'9]FLg 3L7 YFD9saMOs| }B(5}beq"'82no}Ctu9<DKu`˂A0P:r%/TNk@lP,-t}oc*f'Q*.RSXdǽ*aS G)U?kk ҪRy JC/6dwZ-63mF, (WWj_˲K"n 뾋/\}pgv+fb{LMu`q;gB]P9Sd8{f2 IZ6B4Gep:ApH nEOm^\`_sh#m_vʢt#1weq$~3._lz޵I{ԗoCQ~,ig\U_)'UQoY]:GmRљneq;hT CGIe}Hwď]ZѬ'&;yl6S:H%8P n%&B<.kg3>>VԐe_yaYq-lА)*7:l(te|&Wy}zGH,6n:,ц>dV ǣt,~~;P;k;}poHYߌ3nXGC|W4[1jTL<`松 M{WPߦJm]>Y{bB1ЌL ~:heQ]Srz|M{>*G%4Jk%z, oFr?du"m'pGj>P`p F#40/n44 3,uJVD8sLd BJ"BDl{ei'%ɩh5d"Gwރ}U&+ưj/%k0G[R.i żlL}ð_Þ|\2ZV-q^­ 5;M1O'>K2AD&^)OJ0#-mz7wF]r--TA3O%ߕ1{cYR9$էpx]q>BH/qVD}F gE~{ry"8Vgz)nGؕ岳 $U1ȯc UgX JV4=Gk{\I`Oh%^ ]2-W |CcRq?Ƭ sh'\ɮ)aNR`F9,Õ1[&Est{2#=טZLp]l<:#|͝zD_T{F$AaW_Q 5@ 1YR,gen(SoO%Tig V% fΐ#0GNaFG,@+ow`fTlо 4uTa]#*t.-k|>]RP-jRz!|ܠ&A4\VAr=2^3vWyMGeLԁ6FzHŠkik}umR}t&e{)$Ot3[ydF[3%*yx <I۪4|>-Iๅ?ĵvx/-?|5#?GGJ2o7Vd{68OuOD w!d+uBQ>Cbи2ʢ ;j& ٷpgq)ۦVqwRl?ŃQ꧓C FE*)Člץiv8*?1EJ{HV$>p`~CKR}ʘgX|9Q%'4GzK`+jT ء26Cg: _>bڙQzXmNrYdT|xMCHErD'6HGqV61v=,I.믰УOii)ND%ٸҸ5O)ByaEtD .Z^.o|-d+\ cv*J/V2 |XSYflgm7vQ%TZ yIsˁ^xS mNBgE^Ѥ FS+_T5T3^ƅfdX3Kɼ3Y@|ūzZD#hkrg2wαKMK6QۖAx=V 3&nZcVAc}SHt%އ֡yە}*&z, f!'ö#g,9y3C2=݌u?(a{݄B}p};tC1] F} +D*uH?X3gJ旓!g]wkfZoMVRL΁j̹<`3|߫fq Z DjGc|W!uNO1{L0'^ 8꽩Ed~:~jm^a8e mJ1dZ""Oriθ؊3>"(~P w?p2fwFc6ݏ1t^0P')ӮϹ"HdpDX{U|xpeY4-1;tai4U@ٙs`}WE[IB5'T?`K!8-KN<8~|>'/rJ6xV~]W|ʪ,>DR#s,Xk)~='eE/*O炕*!"知|Cl^mCȟ}C:q[UIdȼZic\g(|2kQedXT|tBK| :o7Yǭ68{ 'Jw-j~HhȺ$X-NR3ԥ81T S|qU u%#0Rb}^e+5kM%\5G]zN,-MK%;HkWKAgzq9IͱntL |OF3R' ޚg!X+%=f90tT|<6|auQ뢰&`߹zq-;VvGSo&]^ s=oĿZD*3 ZL(,ըIgc&y 9275^8ЦN UcP%m;k9ENܨA8b441"ԅƫ4 *2W[%_,49D+)uIc̺P=6ˎt*G?Ri 1OI:ICUً""0K["@/~qbl 6][}%eйןlK'\G+xl?R g-mBR9,> ! < S&9Sw֦0#tINcOl]c 3H:adS|o 4Sb:t=ٕKZp3$|Y xz;Y, ?չ hJw{g%!DNUH߬Gۙ]b$?{Ll>a?iiS/X|-cۜ֬v;Mo{LZv)Bs;3-s'<%i/Ճwuӱ.f .C h/1Z:j2Sf']C%?wys%sx}y{Hs.2hGJ4ԩP&uJ^h j#A#=͗Z#b^ʬ&aGp6dڏQ=KwћGˢ/<`J;_4`'/6wn~ ׬D`|jѻmCS-LiӃ1EroshLO9Cgc FX) l |s<^#{7{Q8wF)p?`o]2-,Bfpµ&2i=.{"LN"]_֨4J:~6* ><\DF1QEN< fjtBa8sGS!?s+8y|(ЪsΡmUo3ڲ@RW6Hyh^`KL HjP=<9lX}ʬT}Lw`kHDJVi7"-tB\WlzIߋL/aw}~jFGg#F#-adWRH[#f@}ۆArRipG>}j(yٌx apFn6sT(f~MN_rTendstream endobj 217 0 obj << /Filter /FlateDecode /Length1 725 /Length2 15948 /Length3 0 /Length 16495 >> stream xmctn6vضm۶gNVl۶mZ콿~=zUWWWw9&=#7@E\UHCF&lfj`/jj 039̌L0dG/g+ KW տu[#S+;+g%]ōٍN*ffWK3@DAQKJ^@)!07s6(ZdL]̨4&VBofή3wvȉ +ȫDTEFYۻpmfh#d?X=#01LL\fV0 MMrfxٙ(E\͜rfql濮FvV^C2-?*+q+O3SE+vuv3Z?s#gfjffpϬ:z 1(ȫ+i O,fo`jeoPqO#gQ۬hd /f\<:J=73#' d_pMܜ]M?d2343Y_q0 Nm -+1TYa^A458¹Wß 4ۻܕo&63;& [y-&~W׿SǶ3sMXRb9v*C`6,Gډ_[|ң@3;F )6x_ wCm`YPx_e-8%s-J^;$tŲ!r0Y~ë p )SɫZq77K:C# F .{=jϝ!*)=9B_nu2`A\gvLX9 uTl47/i(i[t"\9;#!E>#}@ٌA4Wg A2ĘKFS젷ПUsU02 _5d xϳ${zf6yi^5U^A S!}w)!h %SF;rB90.3=ltf_<9Ka(:y,op#E}r#丂Y |/xISؙAXgbER^9 s-'p'w٫Y5(ӕ|3uVARb$!.D 1@0]I2 g#^pTNYh߽Y~tl2 W*TXQj*zl}t-f:nVMoPX"*Z_n[7*JSkU{uFs'Ldjig&kh֎ wA3tݽJnKn9筼6[o/[x ]V wAeDH~3 }Mg⺈w;k}b21%:woQPK"F\H1^g pHUcf Uovey1-غ aWڠxCL|JRzV>= ;JHA[;`ك;֣'-A!W^ aehīO1]eV O \ =V' }]^Qc(%OOznu<ĜQ؋TIʪ+eA%8d$ d>#gشgAnK}W;2(G5}3.}ysA4Ξ=pdZaQe͆փ$NLjJ)?ɅLo/IKcR!q1hHSEzsu3Mp[HR9"Wq;ED-ˉA0Qkrl(RDRT2;]b׷}7C輀썩$ s4|ɏE]Txp8TQ*}XWױZs۫ozMZǛst!G{~V7N]j[vjxa{L뽱dKc݉Z]`a2&+Wk Mv^a&nhkS/S#7R-nKv՝fŧϴLBCr=m8p cM7=۩ej H 6y'{H@$_MWӦ{_^gf2  B*|Xv-@!G9L5fI";1uCD(T>'p}ua$cc }bu~땺W"tFB@ ]ӶVc+U?0|7$:NW6U 0Oτ: T|w^)3)2ʿLXUܞ~c]'JP2^Yn9g%:N_1P8-vЍ'~{"瘲dzr~a7kTU(jߎyw\t}ƠD񪉸abR3|g$#A^!M{/pU#_§Em? 0i HGam4pqh@!#Eb. .lXp(#\u8"*57ҕ:S):e%eOÆfpgq| gy%CHNmݺm^˭Ƽ]IߕXx0J*_s~.%#]VBoKd-OSmf=mu\> :b( Xs'Jcr-t#wN%TAx @"t-'3<0zCVm*O_> 3Y%rqC{nf \a /E #!8&ѩE(g{`^ay 0"0ۯE&ymC#@;ܝ`(F[.gEq`Sn\^A=.#x腾*/\{9ؾ %:;vv_=}~ZA\7x- ؈#u))I*hof1ZOe43R"=)g*̱$D'Džs3c11զЂ$`LV@L$ 芋R? 9:X<O@WrqAcZդa,̮17yBt1f gtǵ'&"e mڮ 2y ]E&͊bc:xjt:F!3.\:8nty}\y?Z~*gG:{2 HBHU,-0I6v!rQ\WW0qaXx-ؕF(ngm( 9FbGzG YЬ /uV_l!Iar#?Ol\7"2 xϝdwP"/B`pϷ(-jК)j(rgydLlJ^l% ie9,b EU]#'s @{ܜ辧Mv%Rq A>tZ Zjj7?ݨMy+mI\3z'F`rACDiV-!vy}]!h^ UI!Qʉ`Nf?_ E'B_wZzl-ZB _O#R7|pX5J)(P~$hlOq֗߉UI};uA*8qp)/ sna5;]<7@ "{RL+.HlQn5q-&\<2htԹ2z.Ab·uTA??eSC[@0C6T3n&, bTU_!|Jy(9ExףV6e 4'>qR̭n$𨪼S4?ή0LzLQb]{& }qe&U2 ,N2J!F 7؎zotwq1hu{*nղ|Tk Z {hۜխ#4! 42>9N}p$X-o`kkc@&Ds6j,z}tƟ"*BflUbQktw3|$͹GŪ@U#dƀ6oZ9CPQΏG:j% (0knb>f7`*%FXō("یGJ84P~ e9Ϛf*NMW(s &Q ;H膿 *כ>p*,}KUhHJ{寜BZ=p"꫚(0#%)XI|C%[ݖ@45QJR$AU%>"|{e-A; <]brYZpl0C#bѨ cH-'{ -A e%WN" ih5ј*=(VA8;x_jD]|K~= H"ܞqV_Q6O0!ve~Rmܪ}:;3$qJ;*MR*N±):O'ah9 Zsپ|.nЬ#]Y=J{V_DeQ|x\/sr$7]5NFp(mLB7S.4f`=F|D, *l>ELa rC 1",/hR;Mr B4*Y9r)`ߍ!fD@MvHw>X=:rϿKܻ}&Ր;[&~Fiz)v$5BQac!788\.\kV*tXҷp,qX79bVziO('UU Bڎ ,keX*ck4 3ǫE6-3I"#~ϕ&y"`6(eGP{:kiEc [PP,=cVCM=jph6izoOxSvAb7`KidTi[EԛUSx^~Pk*<g>tT͗*υ "`ew9i-(pL~w5JY)l͟-Pe]R,ŝ%FL&F4=' qD?q )3q뽽ob5y%+ Ҳw_ᶟTl/nH9/@JD|#HCp-b3oDǗN3l$̾.yFH:D£Dv"]O@?OSyqd^D?E$d0P?|||Ղނ@7$" WPHԠ=_>qĦ6! _ˋ&s7'VD9!Kf+>U.Ө I.<ՙ@"g}#HkhmA,r3ϛUUUi>ěGgrz鼥 #,dx{kHn*xȧ1zWI=C0{_wmsHs2ء#Β-cwF5K/eI<*~߁_q*.),+w |(-b{2Q%xLaA,;reJ-JusȫxK8RdWS퍙} ^ `ŰFK$s,%ǔ"C%S;5 `AGE"q\UXx=6~^g9o_sd XW Tߴ:gسFlp9ҕyO}4 s~L;Nn Q-zquk#esmFҊ͔?U7drў"kwc)%;Ñw{=LnjҖIxL {޳lیUv`GH$5wtN$ J8f> Tԉ̿sb~^v7V߱Qb}+H1PǤYb1<:,4^4/#o@ъu524Qx13bˉN&%5%=Q$f5d" {^ lBc8I)ni+Hf= ZLtjl֪ĕ;Q P|LȰP~a90y3M8e U>F@?OYxm$G#̲F;i_3@8@HOeC%Pɕv]Y[}`5(qz;^yWmY1`ڨeO9;za0{VS͞V% WkC aBMݼ-VWҋClUZIY$(M IAbrm휹V1l_aAjKC]P \zb=& <&T WōG*nG]("50]QL%W䲋us 8 X #mdǢxgt%WR +t4 0:JV!sjZ,Tv> "[`X 2.6u0V~)ظdp.nRn"X%\A"8]e|X -~O'78vIQkN\G,^wbnQd" ER>-d 8҅AzyXnkfP3AP('NalҮ%Bj_5 F/"I;!(-'U # 懏rΑ8 ?5X:\tL} "o,CVo=Ymc4-r ƕx\oN;.H R@\/ |sN[fv)GF=9G׏~4KMpv]?m?B <SQonW/ʮy. 'Vv"3R0” g/1| ,MK<.j5_(7;=ANʯ`„q2Tu&"RMX1 >rY[P~rnsF'gB]! $i*21Hy .oJyܕ|}vhvax;yY4Ĥ tx #ݟu3籍Z_FgI}] BTllC1 KK߅@HTY>ٴ̺{n#IKɡ(AMդcqɾ)D]Owfen;E~clp 5 G}V7_%%,x%Op}zP+)5`7·9{5Q H2p!Qh߭1N9>^cDL>ezgIrNpՇ;p،V ̬Y}`C|vuES`qc:~X I7Յ79QH:ס\B/i/V&>DuɬLujŒiMwcEJ7=~A=q'QP*G-_ {5Iz]O+N>ӋKN3 %~0qzPieA G>3/3y]M' ˓pEd8щHT5N~ Av7 Z i '6yTt'T f2=4ynS׶61nwGu%m.\SHP K7Zkږ? EpW @x@W#3? d(bAg^r> (6ohpp.@=Sw>h@-Zw* G-:Ƚf3E^@:=ٹCt %A[vr1b wb /Ζj-p |=,aT\.qXĉ.s>mqN;z)k+㊸aT?/۾3tSl3VES46o<`Z*=Acppw=hWciJc8]֨}EM-ȋD詝%فoW-zm"<$7Ԑ @`"Li -3qVnn_DFc )QƲ3$ji@@IP['RފvtBJ.)U1diGRԛIךl[78uw%ϲjK2 pysv@$G™26dpMH*7Ҿ-de QL2;zxTsMv5tVE# KFmAI+hwN/0@M<'-cXH;@҄7J  9ʗG/{*[ӪR@A j(5,!R0H9]c5٪9"$;}O(:a"N)F;.YږKȟ94}NEb錖1 sOվVsУ=4g܆l"`E$1D1}tĔ*MÐr"&vޛq:v{$ ʓт!]c򙬷᭱ݍCs>嫦ByeDli>-eTa;F;far2лcS(ceX~ubO}tr\JE]Æ\KFiK-?R;Jk\fkyWsHFʧrg,3l0B}$(\ޒؿE4 Mg[7aҵ¹/IɁ1iWK fQ7"oF !B)u4f[nۃYK2@(ÿ!+7gn=VZ :kM9쭿bpbiR5Wܓ5-4gʿ"Y $3l ~Ja`m +^%+"G~G=e}QAR&2$Td+3mB&223 ojvς /});;aŧwKaD\mMU|.hըݾ,ߥ4~[_P)+ӻ ed 6.HY sj^?FuC"i?A/;&ăd&L|Nmm3\! J5{ KK6V3Y?sު{hRkG_A V0iC/mCZDA3CČALx"tj\[eJSX мƇӏ$+WU+=׳됰6%;U'R⍜ 4dmj#$i.}ʦz*6̋cA u=ZuNw9?ȣfWW!&NLOlh5FUn9c I'Q W^o!#n@c?%/4}ӈQ6]ݠm&M)Kokq ~#$DfR;ҩ]_ҪۿV]zv@=ǹ19{9fZ"qxlV% 6& dG3@bLzD vÊBmĚL8qՅzΦggh4O͗ [.*(KϢ̃$l~%n"15ܨBKsb_+g-}m\:$m[f݉'Rz&]hDF5T|s<~™`$(ܔ)3ix4 RBPl^ <D uMKEٌ9* U2Ē5KM`0 HlpR((pujh+v9FwGkz%s%}?}A$w^!:3Zj\@{Ed*UKl`vHf4$ PҚ#>a4+ Bd1rqA9_^qZn,њ~\*1oNHg3u <4_0*gL5NpH86]|Aou}Ai2GE"_a?NW֨ dMLxVO'(G5Skz㽷Y3}l8~x1e.v%z:c^|;PZܧdΜF #۵"~VGحnAŌ&9cm 5P&eHxʨ>-%Ps_ɒ5S)p3%A_zꌰ_ UIl7]@5~D p 9$R`7CVDnSC^=ܧ?bk&uY7 3,.cwHCq<`iq,* ['^P @o fx%r˧gmU8 0((˸R\c$ Gp3_p˧ (B`>ч |Ug{Hv$Y j =&M|ˮ5J8]eh1\}hN Zu_v|wغ)4 |8Z0Rʪ 5\B;U7_fi !R܋~=)[Qde]g v$ߨJ-ݖEjiZq2)0;N0z1R*GI{['gM0皈$ 3 Jb_[@XCw]L'Ӂ['qSpL..IS !U]h9 ^^EE<2XRdljog< VE#SQ x{{w5`(,:x,ْ}^᳢/xk 86y00B6ZVb@p$gƅ\x;~(o[_'a,S-w_$Gi)aԟ ~L(O~Jzc}]~ґ»{cE-Yч8~8hmVЋ>5KNs K讁sRnpR4Ò;zkxРjP *L ڇ4\a].܅TW$/ &1ųf GRil4X$0@kN͇ +{咀1j5~ nTmkr!#<`*O#e]IX^\ch ' 7~x$W7>DpHz0զoc@?1NtJMS_\Fd[Ӛ>,䄤=^,]ƹb"F݁_{3ưJf-ceU܄ϯ냚 d\ "ՏT*$ !JAb+%(Jh1 3}L{4P\/D~+I{ubA-FQ >%)q6 0kp(;@PP_;2sb*ˊ_.|.#]<KIVthK+q)OF |?qIFpܖA0:_PCXX\̹4IrOlefB<2YR,cVp9ώn1^|.o>K&Rf}bF]ЛVΜVbֻD$M&)0)l`("̣c H O{'dA&ΊA?W`d gCm)5NƁ r<@Bl4dW+[gBtiּ;LF(TEpl \,jm$ uM/~[6w],}WiB2[#Ni'ȶ[?%FJ`I"Bl,j۝W(cx;V*TRЏ@9[+M10jJ}'fDPP@Y75B6 rbQ1EOQ0N_9h6k,=ƚY^hlCC  7 ?:7$xa] ֺm|O*&ȪľC}_;ɧJZ0D@)m_3Z9F007YA"dZθi| lN0\lsL8= S]s&"AHT\Eq2D 1!菨 fA6& YrOx;AH/=f_GV_00x_C&uò)GgNjyy-{5 2.SPJqݶR8zwu7r|T+Kz6nAYt*QՊU?:>GsO,\1TeyhRSsQf k? nQm%\5lk~U};lSQ69wםqZd>u-vr+ oP$FM]ySA&Ŝ Y؈ ZʭDcb1;KJ2C!࡟p_Lv^)pIN:|hݝ)1z.endstream endobj 218 0 obj << /Type /ObjStm /Length 1619 /Filter /FlateDecode /N 97 /First 846 >> stream xYn6+xtY\\ A9xΤ/yݔTn͡[TEw 3w8Wx/>qF +^^ĒpLh2uK2z%+PT=tԈq*JE#( C#G>d42Gx80\]p0h #4GEМhN KLsw%Ak>$hh%=0> ?# ` 0_hZGsH&Jp&v+GL2 _A ?R(\P/0PZbW) yԔ0Ё퀊CW zPp$06%٩#F04'3D-AQr(X;$dBJdTp&:\`86REC'*tbKԱCB82ݏ/7?49؂L. ϷoVE%\|1ZgsY 1=V4I_C.6'D5sJ#q!%l`TJDZEuቀu=d;d-HE5^R;Y{%Ϫ1ΆԨ;`r}uqGAܵ Qw5QPvuQPw <~oçdβGi9 i:ԙ0]{4h믏O=m]{s_RS AAC=x==B7PGoSHu:,.&}D 0 u~NДQծt?^Bt:Ӻ1ʶپv[Z%(4I0b 9/6zrt8^0gj[QOk|7^US0>(a3 Sg-rIrfkTS2M}H4"ՐO'gH0Vj e>SîM2-i+)RJqi;#8;)8;)c)+ ,44pWϟ:ӧ> stream xXn6}W1)[@ p@q ( ʱڵݯJ%rqp̙\ ˘L3.蛳\c:,7%D*WL/8Ij)E_͋i>Lh+͙B0#s|%zbVfQ0go'C$%r h 99MI4`I~d <Ь-fMX4P hpM(h&ZP4[LvEooDriRauD"eQUXЇ#f[:,ϜZ< R}on;vT]"=uJȝCO[؆ yW(O2tq\6&8x/S!킵ewJES&2ajEKm6_> stream xZms7_q]lqҽfNiaӡ`8.WZN;@n"K{gWqG<.s62."eeEEBN̢rptc]B3 м#cKV)QWNѯ|ysUp7>NY.Y"gr%RFȀf0E6XgX9_{'D)~)nV\tB lamK[9K<{/h&מDQ罟{k!\˜e8*<<iF&ꭁWJ \׎Z 4X1<{kftBevkzv>s#)l+NyK& g+c:|QYih$,TMYf5F1x%#5wz TP?9&% [߼zv\JOzH 8B)lk gHR 'nܖ1k=1C+s3.P9Yn3%I 7'oc]+ Ԙ:~0<{)aʴr |kK ;r${ {F# -/غ"}c!9̵>sk4cB!LOlW[!(lkWr:x=ݱq?\!o Á|ڧYmNhc6! =u~dxeM0V5̌gcl ׁq)CHc{閎O}_bxS'~ bƹUȊ(adnF*MrOGzL %Q_9bM2EcW1i=;ùh=QTɸT=클O +UE)w$Z  iT:v!R'^B+S&,wKt"wgJ :6F[q[k{x55e<5$S59K@a ]Aec6JS|)t) c1E-bQIŗv^+֨oav}^VsiC( 8@mòDrg@XfQtePqgna:`׶տ6Qy޿%QH!kt#9v;02ԝ:6XgiV5:k^'[utQ6=.'̹qن:2n A.c:KEŠ$S \ K P^nܔC$?T9t -&,u5 MCTcsT-WN,u$F:e9k*kՅΩ*j4$\鷫7R]iqmM0(0urzUSG_ucG{~!XGN6UiwF:Ve+ͥkD9{!mjZ]"c[e^hOޅAyќ{h>¾NV<{4ATs}BEp{ h+f`yિ  Rl_ N#muz w w!ɫm6t~`ErAx|s`s]q 5cF<+> ƕ/44cZỂYz2Bd wtDW_AӅ ՂatYvM [_>:5u~)VWb@, r>qEc ]Iendstream endobj 413 0 obj << /BBox [ 0 0 576 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (C:/stat/R/BxC/library.sources/Epi/pkg/vignettes/sL-mort-int.pdf) /PTEX.InfoDict 111 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 113 0 R >> /ExtGState << >> /Font << /F2 112 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 38406 >> stream xM-KW!{oHH j jTQRwT&U  {߽^kExc׿~_Ͽ/Wws ??+_?_M~?_~[?ظߣwg7OOn _n/Y'r;~kٮs=?wc 6?M齢ak?yn,s ;oGk~n~?➌߭z~=m樂g./)\Y4I~?K{K??yxVfڧ ??۹2_ÿ?O?;LO??[} =ioOw_c\}y﫯{潾3 szN؆ԏ|"Gݞcc؆q~,o._=8)|ʚ \Trkw35B=|ީM_Yx\x s}~Z也-4f^W}Sމᑀ5T/(_oYF5ʿsx>?76vD^Ige۾ ;=KwA{t{!7:'w=JM](|FJ, ߧ}G}~1;iuugXgt.EG//xo﨟WVC7-yG~qw4ws>g3{ywT;,{c]g\5;k_7^oGugxn;]XύN̂w(g,[`DX \S3ޡr;w3ޡz&;38ɰ4R=ׯg2s;~=ׯO}}[ޡ}z&ZLwh_ɰg}mytZa+|S.A;b3#ܶΔc m]]3{D~M7{kѻ_ޯji7t9#M]Qt1Om?v=ƙ#{lc?I̒=14])Jd[&,~Ɖwlc(v}ov{14_XTlcK˻0X6_ȴl$!'-/خDz.v=͗w|?4wдW<1dN=Fv|/0vV&枈4 `6N܏r`U|80ߧx]`>;:kW0߿Rs?݁Y-0ߕ<=ف72`U80oa{c|6p^3K fk6c ﲑ@ MB|z{Ai$wh 4`75 w8f!3`C\]`Cww8^fg7`/0Js~NV.0w0\`v'Ls0kOs\`u0ss>0w\`gc]`=掴~v<̽ i+ma{d3 i>v 0rSrS҃)'w05.&w0.%G[iXIDOEOV@іcntٸ@ z[㎭⎭"*0*N PܫPL| j"U.Uy.a 8|6s" ÍtYm)0.P#;\@bM,3YȼSB~ha$(] A+8.zZ{->xmQ`zf!"BXWG;gQunEo8ߑAL`t.Bet19.wkg6٧~if-}G#pyhO@.ز*yYc )$zf$c{*}ˤ_R"_pb '% ]=Mx 0"7?J|o7ϕ =6|N/pظpܗ%:˴.O/[2BϢAς-d{lQPU @L< [c_U CU^04Ajh@aK}[K J]`&b<%mϧ3 ' B&(J0i#|yJmH ͗3}^%\VYjVNO~_ ;-+|J03 ̬53(i خwlRwZLsO` (|)@SmR|/Uxؔ=E`}#[Oֲ 7N!GV;v[Vn_A=OnkwkWjmTI},R6nu6h ~ {'s?c댻;1ZKswz3>IM\%+hٮ"8Q"xV[m6/ S|=Amc(vj~6еOA)m̐zТBj-tKۭ }e~"E{wr iꗳKCZڇtJl\CÙKОLaG_AZGm@֥Zm7VD.6OdH-Ij ®eUw_ZmՐV[V=HEmV4G;Aq ݑ}]DН]-4.a r}`@ߡMQggtYx>Z]妢ϦOyp_gZ] V|W}xχ+|>_ X:ѫSM>߱m>p׀χ[-|>kf X8vKu>;@-i/|)^Nb|L r.EMR^M•A}MN,gHɤNMFzSIgXHUglJ" {lܟ&yp Mʤb.} 6'g=5g{]or^6 v{$ Hv4*j|-ugY5ϒ5Jp˕#>M{HI;!mHDۭM?,ZXm3HUɡ`M|\ ͑$/$dAJ5} >[llՇ>$n KdNKBrOq!93OG }fg{pl3@rp>kD(]HN4G鳊>jELZT>,g+D 15nMY&P,7El+}۲>K.oB3Ax I8qd|zd"KEĒ>ٗ>U  2 Ϧ8>w5.[T haap)uu骳Z Pg[Dߑ,nxEU>:oiNgv:v˿9TLኳJQ;Ǹɩv2Lr7jƿ)} 7%'~E-c,*'SqCB+{pդ=x8t`[dwhe{8B}rC%pجO0!&,> ]GZp|$٢8?IÞh$*r *iwII$IW4_ I9qs@⑘o-Ivߒyx$91w\<`>FIKU0l+1-ĒdD%Y#8~Ίdɪd)) [$Y\M*{T'U'$=-E呰+e^X ;rE@/#v$n~ q|It!qty$qy$z2/8آ*qX%o"noC{6teCݽ[= yAO͋S&fSe!-Gqu#+8:i7YKWQɾ%= Z.pJ`䍬:T'uqa|iԙbҶ=ڞ&XlC/%RuƯܞ:N۔LRP~ǂpN3#_uu!f f.o{.]Pum;ml+(@yaGEP~#Byeb`%D9I+ɺ>O٢XB:mcAmLTk \ 1@P /X"(Wr%߱r@Kh0E{+ DPV PWHb؞AiPn"͗F*(7|Bz/[P~/=6,妕 (=AaχJ&&PnhV;vEA hP^(7L^r oA.jc[B*ԋ>X}dPICi(*T-nw-N SeKHʾeEz,V鑢H8K%on+[*T\JnRٮTDW" AZ%aWI%Q)*[TmT%QEؽe]NFerX(Pœ۩׾uI&ۭdTa\],k ] #7ّJ1LL=l SIT0}2]tk>یr. PF k1z(Q=Rc>jZ0u-zv;erG@L LwzN lt|t ڍd$Db>?$ϘIn wx?3OGtT3+tzL5Ӄ PM(!nY݂-ڄ[7Mlcw UuKt=gw >vbn{h.ʤ 9)F zd9F-YlW,vAb߷ջj{Ykw6bb; mT;HY,{vmRUW+m3RDPCӔ 7(|O)jwե9\O[{x"/e{i YTVVҢ_Yl-(Ms գ5+mÔ6)m^ {_QE-%hYXQf }xr'dv6h 6G:Y۱s;UF];}GMdw4/lp>mt旀lq |jKܑp|z͗GC܁J!.wsiepek~u;z H܉ @Hg0剔-:r<wRNhWSp--.p]t.ܽ"J~pw,J{M }WIBprsi9?.=}i9?r]nЙ[rsB~Ay{~SVw^MpUbv( J#]^q0@HPnl) (E2|>lNOAyonޞȊAI}ow;[>Qy PN_P-( +87{S'(5(*z{f-(wܹ߂;Dq~ ʝ-(wA웱[PAV~O'N~ #L0!oAy_X{[PoeE~+ v mQZwH}SkmȉS*Z)߽)t}tĻWceN=_&5~p I+L!'N+7itkoFrUv[ MlN ]LeWBщۅ_6 9 Heur=7 .oHeǓ+o[x܄[iMDK)O~}ǛMdLU<z[z ]DS*l&*w5ڭ 17ݪ'TʎK~7lJ>U*õV^i(BWA5QiۧAy;Fi$Tv';u Q;`"tEew}[ Tm6*_U[,5᷁*ऻԶݪEg|5)*tѠ[u=VU6}>*찥K8Ae*\+3mҸVv{̉M쎀^_dxeWber᷹h= GUY^mRM{> V)ӭ[t(} /;e m@<NAݔOhTB*@ 9nQm&\mR'29 lӘ i/SDmҍ&Jm*; ﺠDֳ/~DBE+;Oz#S5pD ݗN?p;V Z9Zzg[pz~-GfEf/"ODEmw<ߪ%i-'F㆟Gz#lpv܁UL4p[-Ɩx|w`p;g!7jA;Dh6 Bk_[eоq(p~oDA~e|;X'Dhڀ"Bzi>"B/"B\Z,EZ6V*oDY"4z"4;]ĖM[LDh.䇈U;[U߽{*=D_p'kQM9湰^|TE5waupYYπfh_vZV]O@zvz*-!{-opYBVxvIfv%݈ v]>wRJSңwa~2;wٹ6Hf7F]rϟ̎L̎ .(2;6y}~2VߏjQob>dvx gSgw%x g)]ni ~Պ]UCݳbzv;gJfBfW{vsmTiq=OVk#c渑6u6gW]ܳ;FBv=-V;+~EuuϮݟU5(jM쪚]yrݳ[bsg7ō4^Kdv׳[>*sjjz=g7 (gyݤ#EBE5ITi/IbR;MvwgQuɄW{@;iQdo[""{ lC^vQΦC^w/ǤJZLTIʤ0vʤIuzbR~`RǤ=Ң|zbiI TC`ƄIY؎I?cQ1]g8dE|clTF0nd/_^(=ni8s&"M[gѼdCER OмnyPΆy5ya@jH9/;{vѼ4 ǂ6A(Ev4qlEG}ҼѼѼhәܗ;>K'lM3t9蝖5/zoϬJO\&'$XM=*U*?1ӀӀJO?<ѥ׼闇uT᪼* ]pZq*w`OiN0oۣ=NZ\ժUV&UqBcsV=F,N4G2 ocOJ0\zpGYS,Κ_aUJKOi>G(sܥgiRҳ~]z5JGEr]z-p upU,-.=}ݥϑGNJ14@av=C0ªM>ڋi;n*}U8}nQca։K8$ݾU$W.EA˜:JśʩJ *]ed4mOt {'~x\iן˲l5cT~V3(Cd?qS쉔닷Q~Ό:\wf.Nߕ%.H2BOVb 3瞀dN'ƨ(st=UŃ9mbe{jU$k r 5Dl9*?v!<_|ןs*mL?2~lrXh?'fdBYxFr*~%OiT?zn>3rBӊ0Ciř)ZqvÊ3ﹹӅͻe7wh[1?vQ0Cu+u+a>izyƢY<\6l)7S4;%>jH1}-On9W,-'(m;>_5GiTp$?~L)Ǐ)nY<;f~ٙ%9y˳s}Yktrϛ*bcϪҨ譿IrVLήz4J'2iԙ9k(Ө^wعYiJu9{uV\F@\<:R.JiT{5Fe{Qv?bDQ<ONGGDDֆY"zxҾ\s5z*ZY=5v[|y^r5UvwUo!Ͱ]lz(:!2wWzP8KrfCDWT9VPf|A6Qt=H'=ZЮg 6]l.( sZeʜ9`P}62' * 18u=XtQ&+x]][Vn125X5X5X5 +DV1$ceDyYIƎGq!-(*eCgQATVe Y }o]BeD7ӮGQ1eC<+2d,c*j/26Fӯb p2go |Y!#.3-io5= ODRp"i|I۷ h9ɉ8q,>|v $ny`+9,3<d\>gU}sV 3|Kn f<{,9 P%,+|.sy'-y7R6"|.j9b6ss}oa#ˀ D>d5uLW\e ϖ^>W@y'5*kUUo\%w|ʜ X\UՄϴdUC\,> 3𙖫et7|ܤJ-Kϸs+X2Tܤ*r_|P |nkO.g >7UsK>#gZ->M>|n2d;ϝ_|% |~#/֋T1;>k?;^k4Oܵ*PV-"s%\_{%yO<1ӚB)Oa}Sy"w'媷CL-yb]~(9:;WuJMk)t0\e>ȕ$6E3!2'nj@d My7iDFŇMN4 "B DF{i{!nȻ4tID^!RD ;d'K;D^^]8:nйZpEj"J̣Dξ@m8D{M< u*ܕ<7մH흇@έ)PIjչ?н]V5'6s,EsKK|tn׽]V.[:Mй{ֹSv;2}jo]jcr;ky>Zs:wS\=b];TvǡQ{WۮWvwFn](6Mukѹ-jA֦?׹7:G.PݖwVDsG7JQ瞁Ms[^zuѹՎu?:un55w[G@@mG/{:y'[1:#wۢk[׹^t,dx7#w{!o(o|tnmssGyv?Qވyt ;{yg{y";Q^ Q^Ԧ?ѺߞG~{ȓ3:\kw[ұݝfH[jmڅ#;MvC=}CF@fӷ.;ڤ_[bniuatnuew:0`OEMҹ'`s#йٝMttnsQ;lzFY6IYM#\N޾I:G>gй+'K!ʂ :7B[ >tDy)dtt4tB֜ѝk;_,^@soȰ:7Y :έ~soK>tn:xU|{VG]{ |JcUj=Eԝѹt[t_׵>:gIu*S |ުW|u]йm>;f4M41 :tF|:s'߿]sK߬_܉,9_ׅʮ:7uXtB[JM]׹uEn=ͧSSC\.jWɖֳ g<8a;yu'zfZ1?;++Mй;}RtJ8Si Np>tnoKq2i:7:wCFgFV"׹ȃ:<"{"=8üMJZ̘"ogU D ӱ Cн~txйGOS#Dځgr'=S.DR r,"O)y;:h9ô!̝ar]~}3gȣ gދI jyQ{B.zRj=bvW bECQ{5tlUh&j/GtQ{ﶵ6.{ڙno#T4-gKkWhbϴ~.?:ٗ:Q;@ޏEFLQ{Wйc$J|ITgJ!cFKYib9-6_Q .EAF?[fHXcmL^m%3_νK=V^k%S-6je#?{Buz NbxELEQ;sج)E=è {?~uP>[C./ju"sLɪYͪ7y~+X=i';kHϝsd9q[Wey7O|ny6ȢB|XX3{LJcU?cM3%Me:tg;)=8w%E{wY#) …C3fɪͣzpvꁿUYvشU{zTV=fz3Yn8/OXޭq:zvΊp)ޭz=[F>O|>Ըj=pMgx.Ŭzi0YWU(^dʪU/$^ &ǏxwY1\׏{l7CV}ǾS||/jʪWf+O<\Oe9cz=8;νp)^JVwZϧu=L5 |Xg VBV߳ 'F~9q=Oh^`"!^xg賖K ퟗ"Ir9fKDޠɁ'b-\KDJd$-dmQWʀIνc?ܿt~e9!k#|{[95)Py>{#'ٝʘ3TƜq(c|s!8x\ƠsEʘ3Wsҫ@@e̅Ds!R\2͗.޷Č@sa2悿]sPU\q1Lʘ 2Fxd8޷YN0/U;Nɘ:1oA rTH\cy;+Ν2fwR*c|eu|2@p/R?/x?6"͗]9;ΰ3mνM ;KV<$cRdȘ/{) c1wUɘ{*ntLyQ%f'C޳l<{r]?^%KsUyDj'5t'\С s_Nmq~Ext]mOm϶O^jGZ~w"DQ3%R,j?tˢjjWMtm_lgs쏑B3'J~=/GP;Au{W>%:t |~R^lC]B~IGqz 3Q>.3W:TSUAֺSr}רCKC=cߒ6}K&uDЃ$u~|tj>'סjC.&~ tC'ѹWܨ0ܫibTuIo7:rpsl:_9:G>{|#>?-]ԡDSuJYuh@[:tczzVuhuM}vItE|%*9PW^=v1ГX&v|S>ao@zwvJ[aUgT[O]z>g^>dY_հ{Ac T⹂?[zy{>3aċ=yA>csV4C:#:Hݩ DC #JW`}'B \W$cNӷd 'ʳ;Gйs'?+CdxV uDgWz|Vз$s†dpӷfltDߌ9Q)TƜd9A?yŸK=CD'4nj9{e؟8E'ssl*D;J rF̞Hdπg@ss3 [g@#t:7~Utn:as/tiπz<'ܻ3m DvzdVP[vP{Cs" OoӘ2 '2 :7:7ttnϐ!}}1ssй:wC箑ȥm SIVN.e@DSyjO UgD;3Ae&t\Oys'vTINs<'\ȮËUg@cW!r%+Ddȕ"r rd _;l "W!rʲvA䪌"7!rSe"79G!2} 2u[ԱnBԩ[][]} y\ǂ9<:<׏,.I 3R'Oߍ=RsNbVC׿~w:nOXi:#1buق9}{,O{淺ط-t:~ϗ:=y`yuLGV-g  [N?,(괹r? g}@w ~dݏj.7_K92^$IB+ȩ6-_ҧNuBwcjV^/lǾN.OKxwI/ғ82[XT7~!?w}Y:wqC;w3G?-EŏNAgܟ+i*?i'~R7O||?9ק\];Rϸ~ |9鎷.__0R:|9~vroґi]vf]Z{VOKP×?}ve.Rb߈թӹo G }#Ӣ㧝쯙9uZ?-tAi'_qc᧝{]mԅ3]x]ܟnON<~YG/}.6Ѝq~'n3b_597d5ge|9uiu9KՈ؛\ IҨ|+cf{p䫓N5#DNV CTZXU.Q\G(T%e"Le,F '2X +:xbɈزS ʩNg%{\.QNđ.QNfdw G'sHԗ ~e~Љ3!dC;~u2v|]gm)>_VA܅d)"\a%Q6/Q2>]'ùN'2Rt2*odY+$:wˮKwj>^.A8:\DcU.: J'{>;4rp ۠IǺ:YAANf!::6::$:`džt2tEt_S:bdBR_/-|id,ﷱ^oj5: J'T¤ 9Y&MѹPK88A~?~?h|A?~?zA/K*g_qV]-^Mɡ^{8>k_j :T:{!*extA 'OOs(]ȯW%Zs?٧FXt<'(~9`pd4lpNg {u9D+} \'uqןǿ;W]Pr}>u's_rd#/#wSQ!NuA=o<:Wgkhy*e:wXqN 8QVNPE<}d-!ksVNwH0E<9ge/4)kORki/iũTfx:ұ-8Š/c\& !P88{+Q܎[w9?FoO>;yXxOF?~~F?~яo7.F?~яo7~F?~S]?SU5335]xzfCz&q91߫~`/mO_ByyHo7#{)?1%( :!ݼeKo^]uŔ캹_|M,̮.]7;hI=ڮW^zzŭ%S>QG)UJEWuiԇҕK|i?EJ|SyJC7:S߬]ӮoDq6$;a(tŝ4z2:qqGӺ6Dy?{"ӜF鶥W _Yu|yݹ^} ꗡfJVW|٫ݏܫg٫g|[~o!a w ~#t_E]U>ϓ K7J!>{?:/8|q|_|/E'^)3'~/O|/.Ov|Đr|g7'>x0yߌ|~_;Y^k>?pgw5ukPgg x]7]77>g)gnn'9:Կܺ\|L |.|NbXgy#9;|N'Y-?RwӖOs&3w3wgT.>gs?>, |nP9>w]>ӿ>SLJ;>JEu]U'yT-{yP-HE>s?8U+h*<ج(t,n1R9S$x9>_;OWqΐ1-]".]"{+=z4CLs:;@Kd=Y5.O/O/o}'ϟ|r*cN(Q ' ($ȧxD>+D>+d̘*c%s¹9u)c+D>;%KU(Þ O"cB䌎|r'W[JDBd-"{QYN?'."h;BD:$rk~Yů7  ?)"y+\TE'@6vEw$"cCȜ7 LFiD"DFLYϯ\YDwl\E]iUNGn 9},r DsB!2:0DnR rSN"7uMC[~>zʾ_-~>|'y]N8܋E"s{u0WG⛯R5P{'B}VLh>mzйϾr}t~}Gsܕ}:ʋ:7y.:7q8:w/[\VuuntpU+:y_'ڧu>}ۥOKc@퇧^/:w"/D%G%-PAGVrs sʡs]wtgV(>]wFy9R]?Or=t]uu_{%yz__[:_^νйs,Kνtdrέu?םV.ѹKtNk׏νTϏ)Џ~zowgԹvUgg,Uunŷs?:wBW5֡s֡sB_g+׹N_U&u)2O |f܊]~$׹Բvܮ:g>o7j |&Y}13}ޞ-ˠs3l>:wvČyqt9 I'+Bv3n?w:w>_aO;]vȟNE""_suq|N ΰ88nxun}_. -nй8.Ō9ѹsW :⭘1N%G椫E: $Xh"g5vȬ(Quitn|:, !侮 wTCIss7tɊ`~s]/t=Ȁ]d;c[sƹGAy-BW=:Ê;:=zᩒ=0R<9i\f:wQāέsssSg7':Nu'rD.O00"qܒNrI֎g׹Ut;$9~'Vkfchv3L'53L}6! 8ǺG r0uzr[(Dn8%tr(D:} DnRh!rW#>IދVcitP_]yȢv[W>vtǫ=_#ݩ6ݻѨPqS-EMwy?Λԕ(ȾxEX.E5.Q?;1LCJ-jW후EIڻ[T n:j7ŽPK~?QA Q#nDUjw>]|)T5_C]Y~dT_8ըsw/ ;Q&P{=G#/2ϋڃJPO|b=+Ewj͗2/x =E]IP*jо`=vC%B|G6_ Q{>6_tjO$w_GNO$6_f\'u8Q{ړ!6_&띨=!jO=tWQ{v6_B9mc6_{Y'P{'=:͗ CyP{%j/{?OԹP{c_lAHK@m@msTν0cVud=?/NL0] kRG)ϙ:'D%ܧR=J/杺YޢK_O&<ˬD$O"z6[oiW|r+egwFX~>~qyV :Ntzw4 )GHw'k}~׉rԹd?T"hϻa |W_/JsE5+6yG5@|}\u~[oSc2w[cMsS>7RMuCp#dNg=> |nr3,>?\\]U7 x&]>7sC>IEM>>738i>[y=?sS<ܭ[G׮_Yu_w5 k{_U[1߱e{_3?[ |ާ &xV|ójwYuQOVnUg>Yu:w͘;o16"o0lo߈|@; =B*E(eE䝑@Uܢ'ZD^1y;EU[?(-T="ȳ1VDKLD^yʉN/ygasQHDJFRc炸/KB^D)V@yqw0 '%ZYcƼbA佃~"/ "/u"{c DN+"{Gy\ ݹhD@Dc92V#r󛈼eZ_kD˂?#DD.^2"e?wF=N$b:y{seVDc̗1"eǜFE#^zʉ\Pw2Ճ{/Sҩӈ{ʫdtA>VpeK;|˖ޙ/"ϠseM//T. XE佬YkD˚2" ;2g;R1/%SiBy/{}{%^g YsY{֯^}W#\ 2P{tf[C5Y%~ t4HLtn|7E[ [ ~VŸ:~~%RKGo ;HD^-t:m:})Dwm:xE{/:.%u6TDaP;n~P{/ֱ:=8C:n=oɠ-j>JTbuzp=D1: "~<~OsO{o_ԞDͣg-y#w?ԅDI]GԞJ_=]nS6TDu~}tո ]ˣ܋Q_й}K^ ~=ڻos}Q{_KQ?^ǿtGϓ˳^K~޾u#:+Ĭ{vsSw7閃\eǍ6q#|+uu~亥sWV^'N[uOV[>o2 >o ] 9uhQZoC:jgsw~|. {֡wܝsC۬סYCsuh[SfP uhP'<2V[܉C?U~-&}{lMи3Cסԡ:tumsCPCOQ;P߾%dԡuסuhЩVy@Q~5=63Q~$q/:PЅ]Ww'uh|ԡ+psPeԡ0srzuV%=uބסDZסkSvIY<ԑ+uo#Kyܻ|޼˱oz#'3Wx.{W#C:tO٤}չCr34 E(I>:U%~CZ%zΰID)y<;S"+ D;2E耞|ŋΰAeXD(riO#Oau61czu:}fNJuDC%zi "N@3+"O*ED9s:7'/%t;Va5| !йS̘s?Ⱦ^";xBMA :2 tn91B_/G"ss{ߓNcGgr$q"~e;ȋ:̉py腓PD^~ry-׉ D>Yau2~yUiV"΍O:Aй._.wps?JO tS:T::3sR s?s'9Qй:s'uCNӷd/%Tu$H3ft2رlun:1y`߯s; |,'\}G{>u?r c{~R%̊*9@#y`!Ot?r쿸~dGV~<.LGVi#?Q?~9?~X]߉(0k_9#?Rs|N\>y`\}G.Rg'2r?r䁅}jO~lyW/8_>f5 R}$~îHv#Tۢvgi巕@OwJ_OV?d?e3V_RǷN~]ҷcn[g~F)4!ۦϪnLw꧌Ԙմ˗}xOҍ/OuCҋ,]1iϷc{}#q-/~vm?-bt,/?mǍ#]?h?(!Q4k~:ӕȗN?gӝT|ė~/]K/tKw u^}#:~f4z9N|:.{]*|S$tص?t _\O}Qgr|yDtP廟nKi/=K~k&>3Oě{Prby/Lf"ʎB'C,V;A*ID8iD](~n]$=Xl܉TvrcŌeQY({䘱,:(k|+WOQDѕU2/qJn$BE'_,dkG'C7B'_] wh,2dCG'sXZd#Qtџ > dۿ:ي}?e >_ZD9edO,=XaֹJRe:YJd<2NVpH'+8IUvDJ'S:;BrYu*V-lA*KU]xciv@ %v2;VT)A/?~?A?~?^"A?~P'd?JNgVݝH1uXÚfY֪G^D%J@ӜbF=΍@sJDfU (RcUbdU:RE utԧ?wWbUY 4 t<~:Ťy;迆_Wj'O]Ty"naU:qW|Wc/mwU:q~|#OCǛ?k쏶rW* xs|o'JwU:k*nILJ[-VRpnל>w~A?g |?WS_^O%oOF=7gd)~23Hײ(Fu4yGu4^^fudkpOwG~@?jfۀkټdҵ~L:ɨSf٧#4'ӼF)2?Y:O"]ud X/y6N?ouS]~p<45w4ON4:W\TudtBPj:edv 뿘iMM?e;?m~6=~^:Q7QR "R7w"D&2E@'?22mOTNv\^硹s[7Yqhr7Y܍"n{lŸ7zr٤g{r~88s-wgYƽqvn8etσsz4_NyXg/J"OQϵ'kt<(kaDY< < a6A6'R:Ji26y9y'Lt7F}~#o>7F}~o>+W0s+?/:}dJ]_yA}ctYEͳ\uaG:sl?th:fv[qNAՅ=nw}ꮛy׫D>q]y*Sϑw;9L^W/ԇϩ͇ܩמ85굧ڒXubyW,:o<|EQ@_l۩NTu~~n7}>jN\=mĝtJqu[hS< ͢yHrg3̯ ~7J^pt]ϼ6 n֦蜷nQ~dq~?yݢ覃ϣz^_7lswæk[mtE(|ޣCsƀ"cBPK'*(.w2F ͑mJT@E Uw^\E5dPmWfٴ0n*o*\yzDhyqRYNMwɶ,&sGWS:Ϛ4]c&MPTVyؚȭP_YY5kۚ7׬mk"5kۚG5kۚ5kۚլmk_̓,E5Eע֢VGغ?vtsnټ߱}~̯WO >ؤyZ샕>ŋυO|.DzEs!>{(}yWkGs!>+ٿ 09>>W?=iz|^26i=|nڮ | i|n嗆]Y|].>wJsl^S]cܥgïfu7kwtt<$>p:>wAGO<4O}ޟaσW=9SտotxUtlb M V}Qg tmYuʶO#@ϦT-mjms o_> 砺|Rs>g|J9h~!|^/38>/ 8>sx{A,䧆LAsP>M󊷲+A|FuAgںyGlaSS!8"HK>=!:"㴁Ƚ}ƼtlOyeDɼ.s7߁}k/Dt+=QGGN$D^vqD^܉ DdtlޯMDd&zC!?.Dx"20l72舼@OQ tG>NrCyT4RDrB2ϷѱRmyDd: L5p)" C䩎<5g=n':.zOd =OOdw"vD^7fpD %vKAK}#K䭓K.[{D7NDՈyw%Gy#+<0u̟*!s#cTV1/gQ)d˟/~OFy+^"yy= UD]['#SE5;" qO`9/k-G!sOG5w)"'9I'DNrA4!9/I_51"g rdd)D9 =;"g^A"Ys^ rVDΚ8# xE1D^7vՅWW襣=:RF vɖCjS-Io\}_[: o]E*B&nG-tg\DW>ﯨ.ѹ_tnzӹtEtntytON {Kwѹ5gߨ ѵ ~>:w&*aKs[GGL΍n=::7ժswus>W>':w[[Gtm}sQUbN]JWBtnZȳm$yty#> F=ȣ'vAW-tntvtn rs>0;I6:{{Q;(?ʓGth:~srX]J^'s<(n]]ұ-ڢ<=g GCGSy1yGO(sj{qԎ 'yйNЙ?wPs|tow:>k:>7~ԡ~ܝ= y?^O:>]n{o-S6g<}_me8:wfď~xM,* En}ܪs΍H:LEV߶Yg-swgsSg@&B> uh_ӹK7;5FYw_|':7utm['~C]s):sܒyst?ts^}>s{uLRy{tFksC0{utNluj>4..S|n|)s[l[Ho2Ig~݃;>ϻn/\>]> N*ָ|[A{n9W6t|^< N|Lաw.V|Z.ddiN_t=t"EʨC>:*Es3;,$c6]n3gN>D:wΰ:wΰuC Gs!ܧpun؁ 5йXѹqVs[e8йɨU]$װJ*շ.sqKd͕ gP3yBS?dL2 _ywEΝȸUi09 S%ݜaW>N3a|eΰ*" 3ۜagp |94Ɯa{faP7ge>#cOyΝa3,B@@3gxa$hΰ3g +T d)s/~եK?USE(Ka^Uˣ%GG^i1TGp'_r'h3y\"ՎC Hv75>O ._^jSX_lWQoUqڻˠ\jj\^ܻY,^jצQ$/6z}_Ot%H'7t:zyڙ(jgv"jgQ;3NFs^2:{.:}D9P;k%TNgv3{~|Q}P;3N3ui Vmsave|n3.^Eu$5j'}ɲluw-U!_>ߺA?WY"~dՃ.lh=˦[V_^Y|^Ymzj-뱘?z|^VV=QuъVWL^_es]9Pwu9kY_q|Yj6-zAuρ~89P7sж\s핬Z=|QM-6MQ|w͝%>Gvs/>H9gտ[:y=OqcO}iG5=?sR[][sy+c|c*ʘ9ѪXX-2B2B*c^t~%z>W\R,N^FVgNeYsϽLJdG\ "s:yYNOj9/9*:D䊎+"JFy?AD:: r%B+mEJD)"'L缬IYG9/kZ͉)"Dɶ%ts^~oQD䆂 "7R~!cNUts^ &5GFBDntȍ :t 4L"rۄtMtBEUw8?!rb{濟e@UG97o{ꜗncD4"4[ק}=u )ntYsM{-Ojչm.]3dSºT7j^6^./z=_Ksb\jgnRm ִ)GMs"չ@; s^$JVEwP;Х%jdFmE-jU@_+% swEeF..jbV?Q{ UE^ѕEe&js^;zQk 7A펿]E펿]3}ϽuJ|.6uRGy\ɚU'yV~9--՟bN:/7sqmu[eYLsJF%e*uS:|п9917K|N e:E|NsbNWס3:-+.SWϧ->gպcN)>Ɵ.:|VWK'Ͻ|h.|.sQ |.9"EKP:u\;υ:\:yGМJqOP {¾؜BS]q/5EY|k9u+]se߁\JC|zsens=VjYy%R9Wuh(x>fUY|n5[ Ӝ{»Ljs\8"Tѭo<-5m܉5F̾%䖄ՂKubܘ&>7ݷ=i|f!|nrg^?Df^90mnԊ't=9ugBݸZ'"w#Iֆ s1TDL)""gtd΍aItn2,tL1tn\ݕ1da!m7ls!#*vu15D?_[NGJWD1v2ynnɾ]]scunC"76 g :2 "uȍ+"7T"rTya+Dn WG|qD͜"rth)bSd\eyeTjݞ=12 9Q "w"aPrvF3f똛72-^^tw]V,:N#*]ygX>_"I%A%XD!L*;eЁ+"?& ӽy}L "H$\eup3mLԱSMw[]׏]8;o:e_|=SG}~NMH\M_4>y /~/-:ͯ\Ϛ'ޟGH~e-rq6Ou}Q#k$4?GNJ疺~S.^?3wiLΏ,JǼ~eF\?r:mI|~{yͅ1?Gk Uc$Gŏ( 9zӪ#eGR3{iNN[4mϜGnPUVvK!h]w}%K7]KХZf!ȗ/w~l{g| (w~Ǘ5댑Kd>qc/ҿ">M+n泛a]|%RnKWVv46G7 /1ytnH?=?Rxۏ9_"XO#;?ZO~ZzTti0?m_jߥ{Nyv^wYu OKTi}iu^c~Fm_/tI۾|Ka~N wKgzcEϗvNb_=_nA{uE>_*Mi *:uFuK܈]w|ڢfs \'_NrN^g ~T=DY2@WWҘL& 9dNfC/"K (Uk3q+ӮCcLͱᜩ,G%4uA dg,u>}'^gt&% 9 ]nx*6gU*j9KL,aCJD{%]U"y܃<QĹbΒdT:$R|DO(g YIDR+Wkyr}(v>q,&\]g,-:YS%ޜ% YBg9hT>\5:qh8DiLQ6ICBDiҩr>\5+mQب\ Dt'ciPT櫓@GeCǭDsNYB(Βd=&N%2iМ%q@,9bpph2AUR~~A??ϟ~~A??D^"~A/Aϭ`UvuJ%w~)V)[>V#`~Atd'h/ buCǣ^`:(7Dz`-c頾Vmڠ:}mQJV* j{fcMշb8-9?9JdmK<22;X^TDM<Xt*v,rd)sHb:~|FE17~2?Tw?3&QIt$U?0]iPo.HQ5:uA%?LI;ؼm= Je/{GEt&'DUVE'eE'k/6!~`^~z0|Tsd~ӭQEMv}d+GɴEdy?lE;??TTL[jO,dbo_dx}n%_4NfquOby`[&iVٓ<&<1lWZq|6MϊGEyqm0a)ϳ<cT.#oĄR*|c\6nc%c3y>=74n47i1eJCT6?O}7&hE M< ?o<55Y磌opv:7etpyr2N&*oGYrV#ʥ"o>7F}~#o>7Fo}~o>7?7O*Pendstream endobj 414 0 obj << /Filter /FlateDecode /Length 1952 >> stream xڽkoD{~uRh|^ҡ'NW>rHnIݳ{'n{׻D*'Nj4IzJܱvZ*,c+:[W kY-RN}j( ش1"aoR/M%{95Ics\<]cevb 1t֪:M;T/DRMܑcN cO Gfa 0]`>"n|2ޡm}ʄX'TnPk8 :wZռT,Ѝzs̯%<H(k!/w2L0#{suyL CBeE36%q"OroQ|?w"ܝ#qyA=/8i/hiJ8L&[H'T,^Ya ETAqITҾцAu ;Kڀ,£xeXKbe\0_铂+Z4vjw"n݀^ tW!XUk^Z_aAV;b¬iz"nW(ʼiGgfiU.X%RƘ^)ks5/+WckS~eܷ: ɀ{v^ޒ;V~ʥgKB;1&Hn8E\> 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 416 0 obj << /Filter /FlateDecode /Length 2741 >> stream xZm~BDB-z}?7W8Mؓ|Jtv; !嶟a9>gf/e\|s}gR,vVY]۹\yxw+|D ʌihYѹMUِ\M6h #pv~UiDKUzl~yм;;R5X#mUjxu}ۅݲ Jlu]6[o2!gOfjQK v/2~.J%/*kD@9+%o;8o ƍn=nmяb,|~}g[Y#'p0˞-`v[T_c ztZ֋N (ыtepE"L|8B@SUj`pomXƩ;H\Z{;1ZW;Ils:q*jG?ƕYhCsOl k-=U=jO˲{̄FWqȍ1~Ԉ<Dzbu'=lhTh,ߙʖ l{kW}b; SuF5np ;)Y̻eiV+Zhpw(2>hTF\ 8V 7赸CAf^S88`ewx F#ƘpI(?J]+Jnf2E[3/F(ҦmKkxNücvq3:x̍m.wtI#z\ħxsӹEvc,o%y o%[pk0awa s1dsaypsq+ڬnJ;=QZ8\lޜ,;Q(Phj˲䝎nubۺ?8) 9]yL[_%<m?$B|8§Uc˘$dL]-5gtFsz΄%id8RP#f 7f*:wFva{̌!}n| ]P'ʆI~:Ww4g$CQ&VW~g j-tkC]Bɲ[b§*毵ǃS $K@NuEҢͺ'ۚaMTPg+f4x%K @[eݧot [M&'F :0H؈4R (4:Kw{Cw"+ƍV;WPc_cNcʭ1, .eFE.B'X .Uф;uưiQ%.&hHUvVyv [R/<Oz竕 %Dp´ؔIx ],"/* yeF?zmmtwR_3%SJHۄ&&%=3GV?*.G6.`/`4-sd5">)9 Yq Tn޲WUm'Zq"gK^btvk,<%8 "znZשTSt?{ϱzPJ!؝vwl;X CoQT2vۧI kWmY{.+1z:.`;ico)-d)AJHb&r^ M=* Aqj5[A!(/&$} H)1y 즬dΠTp>pBE4ctT)c;5A76*l g"y4;R(Nv ʔl%ܱ$`Eq8SCt(鐊jc೼.4 SMσ+VY 4a1IIppB8y*u,}O'++-mO;f~g3e8ڇ7;n08MӤnky@R]*N78j^,=V941\rj+wl13Ѵ6!>kj^PO:d @ Nl|#r%)2 aeҞm4l3L^-=ݻ}2yoK){(̨,," UC@/PڎՋ,> stream xZ[o6~)Q-Ͱ 6$ypmjǙ$ۿ!yx8B%˹;ThD}VތhFOiREs})]{1%eiT*g OH9aPrpS[Q82J<*0Mwc}S/L#4&)јu8<;Pw;J%YQy/!RKǘSyXVcF:}ZoɄygb.Pٿ#q)Pg,u>,>XS_z 8"UJ*#_8s0}/ F(Je0G,grẔ pI…l 5B%e2di-%[^Ujn,:ZoSkfaC{`hb#FwRku_C¢ [4?.K.Z> stream xYKs#EWt8 ŎW?f#`!  %e?|TUJ 痕z[տ&\L>xJk{oujZXXVLLOۋ>x>'6X!W5PϩQ]ztZ튻U]k/_EXXxdM;] n3yXwBi=?#&.Bޢg&d+Muy;ۺZ»ϪZn+״7ի&ucJ~^ߒHyOZZmb;yhl@[|`_%yEr_ b1Xt*&0WC]z壢tUmceu1q Ё~dVKz A׵vDG jnW\;l%mF!L6h+vYTO(-{7 Sݍ~HGp;[uECd7f%p99ǃ*_׾N_%dn\II¿plt]N%Vs]^ =՚^}o 5tv)~TuUkGKgc3?VS0&8wEkв3dŐ`pOLFu$l0B=އ.V#x+=92 uĠV鰘!% B÷iVo) ҕH{y/H7C80c!&Dk3D'JFF*JvhO . ,;TnWTPGɶ%=v~Aۍ`B'旗6rdh ofpxR@ڄ_v9D2#^\z9(LF hXp~ˠp C&| Y?3HĶvg\c`.; &\"8 )1J&JOQ"B)9>e,(ϋL:[%S_<$}ˬp~OK,c c-&̕b?._] 8By>>wt% a)ȷīP3w+3-+4-31R2UrXg%d}s68`Pui$(OZ|.!jHOB$6 R#ɲ>-Il#d )s(e-7Hb%_e4mϙM:xzl37C#d& klG(?yTu/;|ft 3e ER}=b?0 bAIYf2y&'447.W>/qoY[U,1&>ȴ2C9Iu, ǧxd Cl-l~rrN3ʼn M6i5b73_%\텲4 ZVO_ky_q!{U]lqWtIz$y!DاlNg""Y*`v!E;ig0zF#gb ~ 8㶹S;kuu`46h0OX^@8r \A!@> Iw m0,M_&:aIJS@# o-j[w8=3ιJg@,c M4ƈ,E28ĀYe?'TF.#pcU 5Q`x'?hq \ǹ(3z$+ >MHA~.ѳ0AFEG츾T~_a|g||,JNvzݴ: 1g|dgDuDNZk}IGNkWd/8O*"~txO^}Y~+ݤRWA:? }ҝj;v1endstream endobj 419 0 obj << /Filter /FlateDecode /Length 2251 >> stream xZ_o6O!- #+4>m>lčuW8~#Crĕj.npp8T[Ɤ/>;m_qzEu|ZY:+k4a8;{^r5"r3<{v=omㅠÅ̴:玎"1<ޱNy%ڽg鞝oF ; pv#oK' -;NJOxzmۊg-r&V~ie2^Ee[~^=_|hqe\/\33#Ek OȪg ӲLh0~0cts4ulQcт/6OS W T`t9]yM՛!{Kޅ)n&a8 `lB籾9*gdE n|biHpj`YK%F
{9#[ sh>Eab Z]by7x0 >Qns5 !%x'ش%{!w_̏!*D+0_5^0}hN^"fHh7S'CZ6~nw̷뼛@ n#Psu߾ZMN=:C9'= 78M7O'yKĖ70x]+y&%ew=LN5iPuthĻSbϟfp`>ԇ3d`6sݞQq 2Qh$GyD0HP ]?,+T쓤JM`$YT!C|"9d'AK ce=p]#Fwp:x|zϓ{ylc֝ם0k Ro\_gcNR";j cYX#KA֨ot%M>"'(| !2sЮU2LiM*QH3FYH!(UWLRL\t|Ei&'en -G>c5a9B5$kwn;ui&mo.b;R(._ޏoB5 2 jƫ|B1IUq Pz`q+" X> 4gGK[q?=+O y{=ޤ=^ endstream endobj 420 0 obj << /Filter /FlateDecode /Length 2273 >> stream x]s۸]Ƀ4p Zw&7wm2mNryeVO\}(Geә>&~bwU7EY|?WVRTqq]X#]u Wɩ}Wl9EX [9{8VM98瞿sϯ&+^=}8_~͵f6Wvz 3|Zѹ}:.{nD:B&%Ju],&?ŕ(,>]aj+ \&.JqZT-,j;h"xo۠zTA^؝6U[U~*Fy-؟?ya37Bе xpn;¢u8{V27Z2t.RO;(e^U SFzKmOvܸsi1w#7Anx'ۈ ے 9ޞ|!kp5Th9/ؕ{5~b. 7+꒟d.l^o)攺 /e? -1XBBDX\LkE[G%KCugJQৰ@C=S//8چ h?WRTnY[HeWDD JhZc9Nj]r,nXȱ~wۈdwO3㰣d!z/ɽZʘWAVŜ!1skV=ѺuW&?d@:.Dn` ̃%PY*uqwqOt!=8 y|AL8z#5n$5**`%װDž>% ͕U%C}-zaϩ1{U.(sHWM4q1L|ֿmtXl""t0zIf$8S(¼I`߲3. N~2 p)*{)r8K ̍>xovN5j\ЌR*5(#I[p)N@3j¡vJ֩> esC6!),RT}:h]k}G]-'#9YGإKbٰA߄ xiM\>jئ_nΆqqD-㜑MRFUÎl5xsFGflI$=gTp?Tep6^ddLxڵlpen֬ǯpOoԃX:wdoc54Rma8@:3~)f bKcElĩa("yDTY c[*$MjB1 o QD/OE_'5~dM:DH6ܥ>:IT_"Q"ڄ&h m3r qTҜka6nM# H,TΚ$io*q4Ί4T%#A1 ˋɿendstream endobj 421 0 obj << /BBox [ 0 0 648 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (C:/stat/R/BxC/library.sources/Epi/pkg/vignettes/sL-pstate0.pdf) /PTEX.InfoDict 130 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 132 0 R >> /ExtGState << >> /Font << /F2 131 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 4101 >> stream x[IYH@q^dDHAA}kH3,fWuW7˿n||ⶭ۶-_v/n-?  ˷9.9q[.i;׺1[^Rm!(z^O>]!{ Pv}Zޮ7lݾ]|B ㏁K^}qpo_ŵm={<ҪyxzϺ:?[7 &fcff0u;2CwYv=/Y3)/FЭn,Wg{6nRX };Ӂ}v}#5c9ײ?=G3}{[l&cÝBlŻٻۋWKj%ԢKW؊!(Ƥ?_?{ϴk]3}ϞۿC+½_1-AC3ݭQd{?lW+`XcnpQYY1}_C5Т_=7 ǡs|yI[M>2 ;a4\@ ɹ´ޕ;!ʺ#&SXB3m1.Ю'Ӄ;FpL5y=i=:>ۋҖ>=k g#5S?˺ņsƳyaiG6<Ҟ~~=ZhsT5;ə}/cKhpwPHKz_Ic#}VwHB}o1!SdF j>A~؟}#֎Kh9v\ .7ç1mc2t`k2/|+#^WbL#ѩ͇1\LFX1]1Y☌"KH}d9"0-q0 3)z:&33yx3E3pwD;&kD=s@McRT%F|ddvd(tSoLEJi]rPږrZI`f(6b*4G d.3dq02dvQ@pA)bpS)8D'bd$cH%c,R6rl{gjO}?b36329YyّQr@e *T6|PrBe *C#*KTLQE{QƠQYFe=* sHJ eH UD ,H  X/?ÀTƀr0#a<¬1q"hA8܇M00`-Bw<*z(RH#chM=+ǵs92(N5ܝKx;12(3 uu1(3` c@2Wp'>23`e&ǀdH̀e HqTǀĸRJ.%!s y€tSq Hq0(3 aDtf@b>fV OO؃Z tnG$f`qc1ZP]1H:OWFʸP1@Ł *T9y@cO p$9V8RmybN ,_1 b.!\0<GB1W7 b\Y1< /.cxmsU1yԄ b('K=>^Yd|2\I3\'Kp/U<ãȧkGP1W R,Isʈ3c"^*T8PbAE*&TTPbEQ1Dʼn+*ZTQ1_5(nTQѣnj3( 〄Hf ՁD$H ł ҳ3`%zg}C"=\ghS΍"a讓)v):M0ӂuq$yzInqc$1BQc$3H*LV]F1.7l( _w$ 6M8 I6(;D#%m*J'ϕ>XŸɒ%#NegJ%%M|Ҁ)#0̇㖈C}3u6K-U)1uվlSWʹ0_m k™B/XrnWqMVTsU3xgzgZ皧z&Y+dgb+_G*̿ZϤ.}G ׎eSGz2v$ w, (}ǣ0uDcRHJuR#SJ:6nSG2u|J#Tq|Ǩ4r%q*#UsEhL޾- fo_5EHe0YIk4Y7o_7o_Ho0&WGaGUp}lKS.%QYTLeRPOz|c٤Z+&\a6 I)XM*lRIfJ0T٤R-&la6t I%\M*lRfJ;{1 h^2K1J?2!NQ$NpDpNdpNd u-MIХlډᰩ ⠫"ɬ![;Ml҉fNv.l0&1i'J;mdډ02!2%2)2-21052A R@%J*T2tP RB%J *5TrP R%JDQEJ2*iTڨQG SL3 D0SL2̄.fRia&'1b 3#c^AUF2"_#Voȵ_e8[H*ʈ\YVFʳ2"WCr-$mes@J\)9>)X>)w>ZK 슔Z j 슔y   R2\)o RZ3\&KapfWg8O]q9ͮH9_ꕆ˹0$2(2,2024280<*B *T0pPBB *4TpPBD (*ԋE 2*hTبQGf 2 @0C 3̀ C aafpfgEk@.G7>b" cD%-w3ѓ`対#}U}a#ϸ\sLO*-sendstream endobj 422 0 obj << /Filter /FlateDecode /Length 1718 >> stream xڥXKs6Wpz" Ae4Ӥ9v'Z5%:"% %ȑE緋,bI'/'}Ď?h]lq̤2RYR2RL|XD̈́w&n >K*"@nNo E~!|v!dyj9%kh/B,Z$ø#=hk 93n.QaPSj&1\J ZK9U:D$S}q{2(ޅh$+xJg. 8Dx'cHDO?}j DyQ$k?AeaTT%oE~K>w22{6?A&UrIS2'@lh-#g'9rSnP]vK@Ih&> 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 424 0 obj << /Filter /FlateDecode /Length 1384 >> stream x[Ko6WncY,6hm X=9!i-k)q IdAL3 ɏ$93s~I;qP?u' 7bg Mx)LCۍ*!G~$왁4 Liݰ9{~eOʞ{(FۍCTлe ؊ yAl4WBh5h7GImTb5C֮O5lA$8 =g>8K˜N.ką8R?~"c8+?piIT~l7`F}t_^WW"tN!\+PKTK8a~d7^Z&j @dxP̙N$*VBSYT4Ap6WR]ޒ?J8ȢhJN34B6HaRD4;mE qxxBtI|.el˒J9I)Db:)L[]7|ԟAdևqn܆bWL@ë85=meh',ARW ,Vfl(r(r`뺜 [1Iǒ~кC=w!r-@l"CȦeeO35H8k)9' yRto8qjFP}q w8fbc詼' x)Hh9=?R/khTiC[$vZ?(X4GKu5b BưDM$9*:K`Az"H(j=m cN|_=a9˿zլ0})NsCٙ$!!kN@FmyRGX =WwK|{a|PV_ *T^v̭Һc}443#8\v\!og8~n@b8_69kqv S|M7-ߴ|/̺PZ:'nu\Syp]I#8 fEk|n\؋> /ExtGState << >> /Font << /F2 141 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 6448 >> stream x]Kqb" _O汵 daxAKM1vzWuͥ"oî3]L,_-eno>Xo.oX\囇|`mvv?0|^va>0˵߼y_s|RMGRm;o/ynϖ= ?> V|x+b8(cOv[|j0?M_mX`xT ٸ0Ηk~dۨK;nISCxtpYǭ49OU˭r#*]~ۊ {rcv_iIB}B{39&pV;>^-RƸuoxս*Ri$v?73x[+F]s?`.!yc=n'N`\]q1n'v&L} ˭(lκõm#S|mC֕\v;7^gT;R*C w)z?0n+&|6qz!뉋Hz$땬gz(륬Jz,뵋z^z2ͬG^z6ݬ^zz=s=TOr##TIL*sr4HJU*Risa$W(7go OB6< e Q1?Oz0,1'òztհgǼ ~pŰ'Ǽ ~tհgǼs>0,1b?3sgX1a?˧aSw|0c擀o3L|,#˕_f>|8uYdEo$=J3Yd=RSYo%=EewуI/f=f֣Yf=nY/g=}Ig|B'RTB&9KT@*_4iNg`'פ_~~M&vO Gȇ J g ^|7-r?or?xW҃ '=] ӿ||j>f;5&\}~o^[_^_>dԗ63Jg{W(SJ#UJ"W֫6KqDv)R{1iÓvROlßKf*=n7<0} +֍e!Whbq[<L?E p%\GT2;h=-\GBTpة1J-^)u(#pc\{ W*8Fzo(!5vpb|s $~|`\9m\$hߐ} yf * q5~0?;Ta 񣢪qq|b 1'x'A%A@1_0N0}`OC |/IY%I&D\sZ TXE\%-1 -)bLBq%m&N !qbe"ONCA! E\ OAx8x*##1Ug\Acg1x8 F\T4BwmĈ?!i}""Dp/R sGH?HXʆS1tXnz{".X11"ƴ>OAшC"&FPNஜ(ʴ>OP`|OlYElm_;y)~5)I|>>- 1(#O}^_{ħF\g=UUWW1zB,E[!xXWDE\Dp)#O")FO; q- z!!Ax*,ʴ>Ov>D;ʼnE_vO{C)b <5Os Lk| C>t0y&8H{t *tv?AY ~#]\Qҟ&E3'}r3ގ9נiZ2码4kۀ#3 #yګaOgE;}n/>=79/;}{nS3~|'J_1~Q7>e>^ 1x_sL*>wp\X?A_E1ut(83z(~k,c_YSCߙJZvz_oӌO2g`OIqݥ+y I(>.ȬIcn{hc(U]?>7ZjdnǏ}C<X?>D %I_aWaL}cDj|g̪pf2lfX5cϰh>;?2x}m+5?;OG J0ۮ_ ?>yX.GA>5zMR5uXTa^Sd=zM9k* ?%zMe8k:L[y:lk*a^S5iMp^SْKʆvXTҁL5TpD$2e54hͦch7 Eéw=ZNB]B=K&bC Gn NPn26pp82lR;2F53vf)apRÍ>- S}I..e8dcqף2\%:9of+Udv26d|jh^W݋Su=N/I>< ӈ,`kHBصIGrb`gp%Za)͗Gl+'vPa0rv1jOv3|ď]n wJ2k NQp)a[` eƼ0^fĘQfF0vfYdŐEVY\KR4YdESVTYqeE[VtY](άHb͊6+ެbΊ:+/=)sE+\Q#W$bIMxQrE+\-U333+2=0ə<091O20㞘񘘱 s(3ʝ0Tfqcƃ}wŒ m̨*eƆ+ $]ڠnxJSfaZ$ 33J83yʌٔI82`&ՙ{ LdTܴ_ɰѻtP!X :Sf&ML81uf g%BVYid%JV2PVJYIeXVjYe`V%9+ͬD/J5+٬tJ9+鬴J=+O@r%+\J%W2IPTr%+\J37~I219VNɳ3a=D)d[ՙvOU}RɹO񘜫RČɹ+19Wu%;> ɹ;69Wu':sUw>9W5LisU3mrjs<&fJcrjut K&wOUe\UftMUeFcr*3:s5Ź2efĴSg&0}VY)d%FV"Yd%sQ:I eTVZYe\VzY fxQJTJ7+ᬔJ;+Գ(T J!WȕHTr%+T JZIJ+WbR˕\0'X?tKKןӪY~]~ sU[l?w*>?SoI@ҵ[LJD=[=9?o@ݾ'jqɸdkrղ5UJ#*jQ(}0KF%>Fw[a4B-(ޅf\hZ4­pumomeoeכG\֟W-Xow2[u\:nV]oq[u fUߪoq[u*ol6[u\:nVWUߪoq[/ VUߪoS!V05Ioj[-BaV8 ߪo&˖!V0FU#jcZjo^vKVE"jo_!V0oZ[EAKVE"jo¢L#[-BakqҒU#ߪoZ[-bׇ[#^4xendstream endobj 426 0 obj << /Filter /FlateDecode /Length 1375 >> stream xnF zPpM u邤vC-$֒(}Pv\@cY޾K"f$ViTe DT ΗADJE@BZVq߄93>~Ng?b?'l;S /%?Г?g_O4Kqendstream endobj 427 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> 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 428 0 obj << /BBox [ 0 0 648 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (C:/stat/R/BxC/library.sources/Epi/pkg/vignettes/sL-pstatey.pdf) /PTEX.InfoDict 147 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 149 0 R >> /ExtGState << >> /Font << /F2 148 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 6582 >> stream x\ɮבݿȥCN˶{@ p$ Zd Zj#nd^Q7\H=YC8YqT2}??/jiu^Xӫ}cziK<>RKYorr\9?u5F[kQO0`K,0o ~3娶.L7]u>][3,3~Ѝ|Ƌomp/) z.p-xm#\/LCE2<R3칎7+drI  <qg]~ Gm ' hGXz,!; pݳቔ_9ALgX6: id{"n 9n;a$ i v̶^jC)*$r@|ei!u ]f>AT~|~| zXTkr=;z8_8F|;?AB%5+lia~4:'_!l78_xomV Ju@) x[0E/xoߧs3jbY97.sw쩋җsqk7t>8dCG䐞X7ᐢ C=)r r`;wJO5iS=琶AޱiCFP0[1ȩ!e*R3i!eIC QUK|M͊8on2"CXH (b 24(o !b|]6]R*1u Yi:Ӧc:,cul9qcs/HmCj*RˑԮffluR#ڤD+5`ၵgGIoU/JMp|<1mwUESQ8ux?M6Gֿ&zz>r߂5|?Oѿ/g)WA/֠҆_U}+_VERI|Tv7ǑnZ9%[1Owrv^$_|8sm_{h1rK77F6|S-7D>/< v`X1Ǔa79^ K<;x7,1ò~3,1Wò~w ǬUsgX1a?ǬE9|yLzX~uLz(`+Ǭg0eӬY^g=z\/zToz$+Nr\oz,kz.{z0ՋfGs\z8˹>۩zs/~"IJjdREJ TjRZGF?*~GF?>&k_5)Mq?a@~4O/b޽~|bŗ7o_|3㘿^\^}%3w5H9yˏ/_58+|k[7W_FxWcݗ4_;0kqO2O~ ~7 FǤI1! J)&R:+Ō0,eRR;co={;'{GïSyy M7J0Cl!hbuϋJwΨ> * P%Ȁ.4?kH5)㸃fwȀ3]Ù 0g0 hxס™ 8Tpdp9 ~#@iVf2V2V2V2V2Vf2V2V2V2V2Vf2V2V2#_nj.m:UN085E.=RX_:uWw 1t0Xf:8uqgxezޠ9B[^uq}ŷN0 ^I~JNJv:~`S<0V^$eS¦-b?1!V| ג1NV"pd@';x`,CPvAZV9i㋧-2_]!!< o w"8x`,$0cƃDU,$b1Glc<01>}kbQ`XQd8iAC|4<,tEԍquPr ,EƂZ؇<߇8&0GN;x`,C|;cAZs{ <0hL,0xl,Jex?_+q*ւEx`;x`c|0J/ZgS{b{`<0ƎS.50jd]`P],`F?0_+q*K`<0h.0x/2!>v_>Z1nS1{}nA82`x>ć/8AZSsS;`Ɔᡱ(C|Q`IWc)1òAx`lc|0 y=:zӢɆ+A.]V=uȪ,ؙ,0/st5 VW|Cq܏~_n_}|&}"_M2 / [13rxY~y>rïCaNKuĐKqiHْ2:>7F}pSk$;+oZwupSNt njɎL`X2}pSkq njTM25S:^7fZMڰdrV%p njUFVet njUF}pSqJ4)mVYOJ+\)J"WɕJdNNr+\iJ,Wj˕^sx$J3WJ5W͕ps%+\J=WJ?uSȝD4r';N'uBS:wRʝXr';+I/]?tgY,7߾0\k^G8Ǿg\>R6<_ǷdƷƷ[-]F߲rPƷƷ3wƧ{׺skKwKsKwK/Ρ.=P<05LꎸGzޥǦJ46W赙e[籕q_p| :j=§GPx~ =y7ez+Cm^pVښᶦc# (m<# (m+# i(m# %(m #<ƛ3N`6 P a]GX\<²a]GAu˺{u]<ºna]GX7xe=§ FGX#,uxu<º.a]7)A#uxu<–`#l <$ՒGXV{!acG #lPGKaeGX6xaacc|G$JG[ aeG\\6xaaeGX62GC<0i#l <1#lR#x!acG\lVzacG6>Ƈ{2#|.ZC<02#l>Ƈ{!acG\|6xaacG <1#|.[+C=p1#l c#x2#|.[C<02# <1#|n ZC<01#l [cQacG>7'-yaeG6yqF??u8endstream endobj 429 0 obj << /Filter /FlateDecode /Length 1560 >> stream xXKoFW>IEsfQhӨm (S,Rv_!Mv R4y~#nஞ~y?~.fIfQ;k' 4$VXL8| /~if \k|7CM;\\Z3Mf%\\(&Pt=x%(wķє~:;JͲZ4\H+, YFW=g{o=0NDHKHUOvDnERB%RܷOh]TwNIIQ~5\ W grA`A`"ֵ%c4[ğßn`ra}D@@|4o \>ȋqqhQ S]j^20DĄy&ZIRh S\B( &7 6l7¤Ed R6.^PPN1c_P9E/oO*I0U?,c@J7iy ^%\ˉn2=P$`yI[ S~_acPfǩz>ӽ E$ECv[o~ȃ5K@uG$_,3\2VGCң2㚢SF)N % SU |}\B{2 ?8cSLtwtҭlI\3;DѨ3] QHM4iE߀6>,}5h `ѸwhIW 塾[SkG \S0-ѝ=姞7 \R0^) 쾓U``ϕaDITu׋ܒ(B#waYX (reMSFDdB?u#ŀ-uj)Ս|[]TM3&*VP9=R{aZW "@vUcs{}8)rkmce]weA06]a*=eϯZdnlQBCDTi^k K֟UXT#R&$&ƞ#o:]-u-vE$m;В1CL$DTbpot<7nB-?p}ّ9eU35ՠ5d?kb'HFєN] X%IoUV<ӳ̚Efz*dŜ|7endstream endobj 430 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> 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 431 0 obj << /BBox [ 0 0 648 432 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (C:/stat/R/BxC/library.sources/Epi/pkg/vignettes/sL-comp-0.pdf) /PTEX.InfoDict 153 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 155 0 R >> /ExtGState << >> /Font << /F2 154 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 8923 >> stream x͎%Irْ iЂB(`5 enfnEfuwU \LX߼q#<|縅?/Yg/w_׶mo(o|J/{R+mo|KW}K˯ohom({qZׯU(I]籍2֏}??sjw2y/Z~Uo)?co?˿o*M{ί7_k]%oNy{3o>׹7~Fe?_{l\A}^/k^S;(8y׵^g׵ G7o}<3tpI~:y~EheDIxS_uӷ;Kۋ|4NzT}3/:Wޯ_~&0s*c ǿo~>!T_-kLj-GJYڿ`WyлKP$`u*m|-nUED(Ri*24_Ԯqi~RDY~O-RPK(__ˁ(7[nuuO"rev?ʟKk\,?v7&JwUϜu8r_{|tM[}JjݵD䤤Nxsvsi^xHo:W&k _$_d2W8IF\$$E.|*rZMT&>ہ,_Q^S?OdGޮ(Gu䲎Z>hGKjUsk?0?/𐿷m4J-cT~pqG~h_.\]U^vV@sUioCs.׫zNmǭ6:ˏ˅x9>,yrY8ɳqfٯ{9,r Y#Jس~x9nY{qKβ߱^z%^_foYn\3>y9fY1rWgY)֫lrjvL^xe xuRTZOsLQwdV4FXi !Z)`J zL{(A.T5X%5L({ּDŽk&8EL0ḃ y[ LW1}@g9_grzK[`:o,WOz5?y+"; F2Kyi ˴sY"7$sRASPx9Cpրs~"H5/uoNF:yysk ] tf"P>WiôK2J S)|@A X4@E@G# N)@K}1@M& ~ x8x 8$'+x~%_c1N.?M59. _Wք/B~(|2Rs>rm|_a1ޅ^ZȢsw0P~՚P7GrѮ |.*|ܦpݸCw>\{sa]O"D':5O&&,cO &|%DWM5LC8U2\Oy _ f%P!hC s I>B&=UMLT^xz *ҧB)r =A@ hD*AD"hj9 I&AJ% h y>|\ < |\;O_mVqy9JL^Ol [᧭4=aƽV>aV?x9G൦ !ĬGFF z#^k|2둮xˬG6F7Q`ϬG.F> oӬ[d5cxza^k\6cXEuIz^kL8\  rrSW>BLS A BP!tB%A FP HP$H4 U,A LP~4@ NP'ihh$`4CRap~ŕ>\;xSVZ]cjzz2Ϝ5^]sC# IKZ]93U9cs|LҸ=pڿB W(שax7k4@fҐ*SIW50@GnAxsY uN/mL1pp4$aLhi:+_dzohy,p s9Hڂv}m#1$>0zx@R5>2?t2~}}\ 7\+Dd^!'f)`M-z\ cL1e["BdY&p㓬2LlZH5yY;U -xkL$M-xGI Fv}\3e9u%Y0+a/FA"g _7AY}D"W v4l&H/% T`tkm \0'ټiz4C J4ƣOA[L*LS @B`!xD& @F`{@H`$P8 V-f5@ G+xu0?/wASEuv 9 ,jO'4{&wOWKx3 ߩBf§M0gBI3^lX W k0u ZpXq # Nt߃K*|"G>b,L59tǂ2&n bҭ <]c{0eWXU縂W6-XԉV9-6Qk'q,iyϣa{!_ P50bd/ .0;U()OS)zA A T2A E"r M(A K% & }  x8#x'8+.2H +xSW>BLS A BP!tB%A FP HP$H4 U,A LP~4@ NP'ihh$`4CRap~>|<=6ke;v yh,k]!ez=uܶ= yZ;֖\+]쏖qx\dۣr#-w k?gt >β,UYfѥ (Uio!RX)z^2/+xE[g`gb3+ԟȝqGc+VmٷK8{$GHRۘCY[<|+x+x+xdaJuQW!5(:z:6x\\3۲4[lA+  υg4X8T ,x*L3x"g=8#˂l#e Nq=X1EyT4Vd?[ς Rl-u`xpui[rQj᙮6o?ELPuł9 fpCdEӞXAB. ;̇5B=b=> 9Q{z`—gzӧ<\4 -&|N~Łpm= cvyrrm ׄD^Fںbá5F?Ck[W~xZݞh{p 0b"ZZW"`"8X;BE[ל[p/+xpa{BLS A BP!tB%A FP HP$H4 U,A LP~4@ NP'ihh$`4CRap ]+x_?W>We} ҧB)r =A@ hD*AD"hj9 I&AJ% $Ty>|\ <e7qz'8+._)|?kh{$վPvogojy􇷫^9ej]eužZx^2ޞ{Vk9__؏7ݳzM;}e}V׭~յߵGV?xomzغzs WO7_m|n`aOKvb6o]߽xc7'u }9rSu@\p;"n[h?럗RA_i۩74NB=ֆ7=/'iQoq`K1fN-x:-pj}k`#ӷX2J e5,:`\naTZs87O+48[O:Fuc]CA zuHc:UʟT_Ξ:@DR,WBr|nqTF2v;t< Ѩy׽\F՛6ԛFoDF囮sUj`I}V^UON86;rK䲙u,`xGvNsSFhfi ޷u,Fն;2NnXwO\Z[GjˑnQޥǑ±Wu-G{RuW)$qi{+a!ǥr4{ֶ.td7~|96e+'~AgYbㅞ&/Y/r5zg cYK{ccY( :gbc5LFYXw,sl}9^_-fYչf%6L5kteWgI/$:-^5 ggYx 7~3uW>=81%([w wh-9'ȿTyS;2lc)ܷgf};=( h)mcflkfƦl2Q.Mٮ4f^S6Ք:wP69]iLlkXSDŽ73e&¾)ɤ@ˋ1F1}h.-N:7|w#lz_ymQyL-yncNny`uGtFoc?qOhO,F)ݑU_"62WExmב ֢fjUDQ~G"ȦE 4E꾃"J=WEE{R!TX*0 '< A PH0$ E"Hp$< IPK%I$l8 O§Cx88 ::::: 8$:âC~Ew_ڎcѰO0cѰ30hu]Zt ̺.=g] K`ңaìGY_KeU Kf}-=:\zt,X3sѱhڙӬ[@5cѱxkңcجr-Zu]sKz.PЛ43X8{WZ?r IRTp(< I  B!᐀HH$( F#I$H& X. L&aI$x>AaЁС!A=*fcYwVϣ{_Snƺ{:+ֻ; ^5qr~P. N<[GӲO;y6Q,m<8,ٸOcNг߳md]X%ٙg;ؽ"d? oV 5;mBt9$~uY%l]̶ck^^<슛"b"w"k3$ʶd,%+ 23۷Y>{3 vlψf@!YeLjaX[{ƥ4{;MzFVf":~^37n-㻖pgPZL{m ?2KUDnKKSWL=5EBRAT`*4 OxA!`H8$  E#Hx$@" %>K&!I$p: O@ppt t(t0t8t@pHtPEFF}~~kX% JSPx@$  C!HP$, G#I$L( A$\0 M&I$|::àoz!A=+secoz/R{`.;ߺ\29̛84n[z>ЎajydC2{P6&t .ۢ}hwwPwz_flBR-]n n.͒,۩:}[dЩeG1W 5{:u^l.km׹YvvYekJYfٜٝ CݳAh?fUEܳǂlr?!dU¬NNӬ{P~~~3nYr~TM+Ϟ⟚ ̾ DcKS:Sr߲@&c*~2N{DB\; ̃xfr;mGT6k)tR3;rZbfi}oFn5k?;wkQs4U˘jB#2fam1R*g^3#;cy-3]3ѝѱطFǓ:tk&ie{u\any=Xw~Jg*-JM%*=H@ iDH*$ID"iHj$9I$i>HJ%钄I$i6IN'? )Iiщѩ*w/tE\1T|SvWK4EovElX}c"l~3R̶6/xO3USyY*)⥊n&=d>hvycVYcO[tjFTUa,C*:Yd3u} Y%1/oLk|8i{Ъ336fpJhCuA }$g:CyƸi_e^{FǾYEZ JSPx@$  C!HP$, G#I$L( A$\0 M&I$|::àCáCz8,:0:4:8:UUU*( LCIOBA0H $ DB"AH`$4 HB$A0A$pI$d4 NB'~V|;糟_f{~{B~endstream endobj 432 0 obj << /Filter /FlateDecode /Length 1043 >> stream xmVK6Weot44 6 ǂhFc/dƣy}4:Eiw"EB$1dQUI:c{8"J&mE'mA;8p~0ϒsu)D Klmxbl/,csz`?&E<] #-J5NI!m®H*ɫw(ym%F"S$YVFnKp!J8.*Dt}Z}\\"\˳"vBJx+ XxgwÆ73ˮ=nk x9?]!ٲbE, [*vޓ."&K95V ekfaExsp?#Ytu (qM t5ڦ?9_ 6FIskZB~t :TW\AK(ׁeƁ4ۦ?Eo+Yyb4H2f\IkPSd8r>j{Y`u\9эadoURzE;ƽ [w$:;x8cލϗlFq6L?vdt84?"d'/]nQ!O-d9:L:t|G.o1cj9I:uB0S(d;e+Y"sW߇_Cwi;FIOgi}g^ЉZ"aB׹vDM[AԼ}Q܆~4zwjZO|Koy13L4pD@ÏW<|s endstream endobj 433 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> 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 434 0 obj << /Filter /FlateDecode /Length 2172 >> stream xZKs#5ѮhG1P`@՚ēd {ju~HvL~x޼S|ZDDs1B!d:};ӻW~<.ڎh(gN+05y0t}盅y5lH bz?;ٵvÛ5 eo"<5˃1%q :Bgv:n cJI'ÁL(.y &f趇i~_o:⣛U^ڥ[$n7PO Dn?}wqu` \hI C3qFak>c%30ΑcrH׉WQeh;Hou{tٽ=h7x6 H DŽ,'Nd&(XuJ6.%H׀xCZ}pa~(]cϢ¹ʽU%ive[);VQavR`%@߸v m@ /CR W sQ-:E9sY1%TY#$jM^]@{,PCGȽ409% Ok>Xz )D/8GcN۶U͐*ȰTɀ I]\ k$-/4r=yz l +J8WĈpn׫# p1ѧYG.awX'6Ě"ktecj}BF?:ce3I&se?I<?L? <ElgT5N] $]RaƥPIUeyj}dXF$@D |!xRc%UDHR\9\>Q$eծtFX} -ѸjDIOg(6j[!0s0Ě#W#YB5:3"s UهS&U3jM Uscr Ͼ6&|mqE;ӧ,+M?6дbUv'zn_h׳DJ[+ze$ecH] e]4U~nَ[zCVNSkt>##1:!{jjԮ7SBDRa;֛m.1o-3 F9aQ}!^( ( \qe𦊕0 FVuRE㝻2r6cO'V ~VYZw=<4:+w%HR>Rl~D e춏C8ˍѺM v{oISbUh9E I7ϭs{*,|mMo=d誸k/Vi# {[j=W&si+Yw( L_h}gqmxL,SWW,ЇGoԩ97kb ưɞlbmӑ캙1m:{>Y_ GkegbVWq`.a#qa@p\EZ ?kۜ3"A:qP!SauEcUF9Z Bb/Ⱦ 3Fendstream endobj 435 0 obj << /Filter /FlateDecode /Length 3331 >> stream x\Ks#WrK rNRVT((jO1")iȁh_? ::ߎ~89GF1NFJN4#6Dc6^gy̻ \\g D^v˵v?z3n㩸p \3axo.=4&pujn^ZR폜p͈`jawcUt<ʮ{VWf0M{)S(Ѣ :69=~OaGoO~?bpX5[No?(a[;n9");rX9׀/HFi| 5Ro7@`~"nEʤW1\u7 3 c}]3Kb麯S4kG` osog~\'s׿zT1┨M$R6eT8J9RD+ʬvHtYMw%QnQV\4^[6uRwas>} L+Bu>OJ)xRAA  kat&0]8ߙ 813<z6]L3z/s2hlopl8 |r Kټsp|;iOp*EHgRlUWlB)AD vڗ?Su&{*Iof]if s" ҆͏ )Q7uݿSGSPBεlemm'URxgh=p =m~(>h5|pdAfSaZg\\UUE՞N;Pv/uG' U ͏KBfLq BV y ?$.ɦjZ&r^ؠ/Mf`[!z >@lMƐki!8'NIEsZ]jpe_UxUVOg `E_+ "C1;&}#C+*8$y\)) e@(M2```д}{1)8RArGГx>TW|{W~rʲqaRez: ˖vysAi\jg}wgk0Aޕ:ijqzhc~MO E䁄;4g,@䔁Cb1;X6=s`=ʩǢp zl86 9e[v:?]o>'R6onEeZc6?fE1ChJ|@h !|gޤC'Ƅj:yPxX'j \w6DCF'9/kw*pD=(e kZ{6ÞG~.4blSH2_+( "B?\E'/]G͂*`p=_;Jp[ y4r@OG"ޡ: q}QBkY|s%8OM^ꃡ[VJ>_Ovo䆻[⫠ɳU@i(s"|˰ȿ%d\ad\d>(}~SF^TT4U}p l'._V ijپ'bfk=X(P;=3D$4 ^"O< Ur {GsnaM2Ҿ4,D(+7ʊxʌV ϹN'~B%sKG"c8[Hۯʨv ,[Ǧx}F36TY[Z6Y4922n;:+nzcgVumY· bDd&f3޸{v xCўfyJœ`, xBV eB8sz;D:]fna&$ NajCG!?%>ytVC>J B-kt S^2X{ۓQ:endstream endobj 436 0 obj << /Filter /FlateDecode /Length 2550 >> stream xZ[sܶ~ׯ8j ٩;6V'>tFJk/pp؋&yM9FI4_/d9,̗"eeMm'm?75_ uG˛ZӪ c&rp8w.eF:LZ=R?]pc4%I>iByyI?/")(I'[gγIŪ<ΩYY'F(v:KH ~H*͸P#GnARڝ0h!+5@F r] yP/Twor2aRзqB<raK̲=p *4 `Tef,1 &Qz_Rj+G+:e /B޼e<׽E㴌d,+q}d[}モұ(wI互/T*B:~'W=-IYc>S@&nnk0Bᢧ`ZESmJlJ9EB[,p*^RjjrmSw` g8cQaߚvo䙟bv\0ἦ ꚲ&GX4>ܫNՙy4NG_Ҩwjʀ=bU qopN4TUޒ2]]̭?ڲZ@b3vv}ۍK@h2REEfaM)Xb޶,"2acգޯˑ*a騈,q0vn 7@p;`B-Ff"T8fZlŞ77 j(Bm`Ң8PЃݒN҅WIux89#z1 ,"c'C9>PZ.repdBdu{\"MhѬi;UC"#V"{-ht4K Uxk-v"Y*s;>|izŮ!iU[$xcA{dͽMc(/ڄ~ېބ$5\BҾ^򧗦{]֔e?Qi'2ѩdMԨj}=l!l0NzjZ S3hgmf p 3^,dq8'=uhC ѥ>7KjR9g_C\y {3̩9 G1BeB"OܓH?ǪY{Gh{JhcY5Սg,ϹJG,N8TGGgCA\> 2{/bʌ{""ϼ* DDЮα|@ uRN!m#=oH=‚|3v٠?w7S'?ȹBdhOǘ,&rO:h#VÆwOp 9r Q<B7HQ{Vƒ %xh|Џo>m&0`!͝|=_;"ӛYYz|׵a"5.ܹ5&@F!yξDǹ&*%\9A&b1|u==|_d3{3^P{eq5??Hjhlٓ}K1߽w :)ߚYsaR{o-~u5oQ^\/lK81V$qu0TtO,ܞx`+ǟ{4?ǻ;_3Z|^B_=_k=5,G4*SN3ӳM\+8"=4f,z =wC GU4 ?Q#{ &~ <-{=uendstream endobj 437 0 obj << /Filter /FlateDecode /Length 1947 >> stream xڵZYo7~ׯ: ^f64. 7[uT+_cHZr!f8$D T,Dg/X߆W'4#JI]i4EUNYUeA*1.g?g0oY=#ly=8K ќf߲憓-O0gpn[+7Fg*,1kMx獘ë4Ŋ5%Bњ մVB[_ >dnPv34HHjF?,J392#.'Q̈1 w9&b E(}t%;C"͢eZrUUYAҢ}rE1MHGqgˋøH;;mAj_9†޷\L^Αͥt5cټA`5{IDRl_f$H1T&ZN$W7b! [<:>Ye%{c3~+7Pxc(n}/TX bLBjdzpe+|X݁^wW"da01~d ` 9 >ڸWSew6_a/m #|0qS\K*M W?ł* P=b= 5p-Ae"P1w8ӐH_C eKndDg0oٓ`Ը!Qp.WfޤY_Pu 5GRɪ3!(4hKK-aDrsJҁ zA>:`UF4k"{-w0sM2iwqt@Y@hUFA{1Gqx g; fS8=|B}[ DU>Ac3z;ƾy~җ\EsX6(> c܃{G88򄮧joYΊ{oR-`^+/|Il_T+u1 [Ñ]S5r5{5𳗒1!4E&[(Vk$['FpM)v#5&KV%*IR;yw2nqi;Ug%)wRк.\,f)KIYﲕ^Gؐ XDkC`LvLnlw`;vzlCχa ;_jC9Fo8vLU }gp:MsW rF?Z0?1r#^dZq o![X]ze;9 'b:2sk=sRH]V=;A{ <z*]`cJZ؜@qD-0ꬵI\̛HE(x/)N0r.]˨ւRG]ه74t ŽQ?A5 s}N<j.Q ;0XM.Uimr󸳟&ܺ$¢DfH \*c>2]5K7_T ZFApZg y=)SW/'Y^RR%l+RP#1yMRփ@Ӛ4%)MCɫJM?7WckӉw>%ڶHbF3k"bJvk.c OÄ"A-iFK.[},hX')j$ h*@v.Q$$2ﺐY?Lܴ`()YU y$6bR,Kƒ+ Gr8h\H;{>d{*LŚlJ&yIjY!I[[7(B+=' jGlh?gtRQ%> stream xZmo6_e`1+}bC<@,'jVKS ˑ cĩt/]^'aV~# ?/YLoyܖѽȕ|D`)CZ~mCp$4$#oB#E Q3BU ә }c"x7F;ތ̒ MBFQ42W$R,px=*DoR"0TH[A)LOf(Qr8RKx"v;а y<4P ؿ\/s.*.6ʇB=R֌RÞi;]FD*?'mW1"{jtP5<3x(m@@k4,C+R*BQXWwz(^f N FW-8K휺|jB_OEcf$8;dHeÒjgIwq"n'vKte-AHl+4!*p`oӟz%/ &r&QY 'To\UX#pT9j Uȵ{ׂ kowAhPY?j1 k#  lVYa M-d(떙hR#70o „2$L3e}02Mvz᭭ ̦N5XX5ML7m <7 QvUؤ)(j 1Se+d?m Q:U1o>abYvku8StL|^!bY V ʦD{w4ՉI0lϙQ<<vM#rm_rl]G58kg1u`S@q7Ga,3°a ɥ 1#f}gȔ:cfW޸qeB3MSJy6xF4) 4xC¨jtX`b |E%|aHj'xajkcivT-PM,}b` >?]7oPI)#W'VzP2BTNX b\ |W]gkӃ(r О날j+&`r Q  ٫ƷF^G9n ΉNI'~lv]ə`i0XsY )5V?ߋG7@endstream endobj 439 0 obj << /Filter /FlateDecode /Length 2345 >> stream xYo6_!/3ndX,Bc;ź}8Glۃ>x?AH 'An5q5 ˀRRi\,}1PyW1]=u3 /d/==*C{ص½S)J*EX@bUv¸B-|{,?Y#oz@IagϕO39b;,ú:+%uc:v UsWՁp@^@rT!1tX> urnt+s_ߠ0^m]v#Q]>ѭ1RR7Z(;@ߠc/D-RcpX6@iDiM~*`*ꖿ; 4Ccہ\(TaZ -`f&"nw]o4Bu3Q9z4Lr%-RdEe<וI0+d u_: xk=A"XH*' 3C[vWzr+bRkB|HSHո"h4Σ#N(G] 8b/Ɋ5^@F5TKv< WRSY` qx Zی@b)<x?"[;/"Q1)%gqITťHj#0L y "P,fPKi / 'u3kM B0l >Է)=³Z,^p DM;.0Y+hcTjU:h턚W GG2G_t,%,[<) ]o3{an;xpiA I541Lh83 EՉĵ+5T !1IbY"ר̈́ 8VLFBiLr D* rDY3M7"Nխ*{X$/ <Ϟ:eYoZ(_Vg|?+ƢgOOY'> stream xZ5b9@ڨY{_IU(P!~$@^dK[c{ڂć1&uD_ |L#J$Ytʌ<*c]lHbOd'%'%Y8>Ɗ?w˟p\6Y܋i@Ej.whTO%oEJ`woV47wڞQ»8R*urrZPE4[^&ќ}%F'9oeEIJ*_E/?_I‘iVDɔh1^M= k8jcXFly2#`.OȾIk*[!l5aҚ H@}۸PtcH.ʷ`^Ht$FJ mݪf%8YPK2 >|PRVj+b$|͹Q`8J!-巄f j`ϳ3CG3BVyEj2rp4U]GO)oyKCg!*919L󄌋\ۜDF kؘdK렴疋VBLc\.4/o`X9f-ujF+k݋Vb<%~%j=>FַoRG2)X!K'?pAh5V;ʃ/G41hl/'Z/AGqSxekgt:Ǽ9r}b#rUDz䲏4?;d9l`)xB<gL)/o.tL0˖p_Hd_IQ>)kW?V֋]|p 頶֮p[ZCcKt:tcDPcE3|5pCF zϜ@֯7tMC_pwK[5@5TnQ4IޟQI 6:?ڣv3Ѿ]"Ws&Id -2h A8%iJbׅMbn\KfA0h??gLܩw&eu5anQe89? vV^[G|R ^{"⇪K ȧnA-q k"37#GzJ;_|Jv)MG}*(|e q %esy@Q>Ǯe'Wȕ;0gG-QhA1v +b[7;:Aqú| &VLwK Óyc2r vlӬf `?+r endstream endobj 441 0 obj << /Filter /FlateDecode /Length 2237 >> stream xZYs5~_1@«4wH@p(TAyržqR-5# ƖgV_R;8qx RRe˨HIdQg/W9aoo9%,åÖk1m4b^ T|RM\}=P n$˵$u9~ cX3R%9T <ŸDHMKRJ>b)pߚHJH1Ċ9lN3g$UG/IFD:ʒŬk/$g>5?% WfpqGsmy7QC5&)8 Dj+T'd5[i ~TiLtz!Tm‡AHu$IsW%CI K<;o@{`ň1Bu%~L 6a<0sd])5k ^xiY%ʥJ@R"O;ߋ9U&*H +q+in 4pihb(el\6\!~wq[ W-8B@dU0TwVsr5)="zƥa#5QH\s/L EpS|€T N];N@&H!V-%*려t 0*p. l4%*0|f@fR-Jm ɔ BfH6e PFXE}<!ң*UY"V8/xȊ9!dy%*oIZ~N5H9% {^MY6qgw:JJɎT<^z@\Hf$oΰ IAMYBɢ!SYNhܩnHSE"Tam"zZ8zO(xhKsS`Z|QL|^YU/@JUB|~Mӳ[;,F(Io$QUnE$({ь9Ilx㳅'goaq~,VŻ) c>!qy<֔%;B͝^碸]>LǎFq.T焥&Z7x˚qNS,jU'Uh L \u"ZBpfp?TeI%G->f۸l C6nt<6uܢ JОݠ|_#V^|l f/Tsܼ{ R4f!YHWfF;OZ8:m@Z Y  x {,bu`@Aa1! XGʙ]B1+v0=453@1v:. B:| v=R3|(&OѷW xcOSɷ#FR]=wik=U VEBRQ)r˓QYŅ$r?ȾT /Êrѽ CdiGʡXps$O}6ë!;Pˁ<Ձj+fkPHF$ /4D{*o(/<΄+ ?EhyTG:?QL+`wwBQw(tҿ8u3H'M m]w;:`skȲ"-3i/*m:G|/_ kT>8žǩ-p.8+۠ UI7鶾&EKS͊YIek{6(sV }$\ɎFV{%1ݎO7s6fZO&FfYYކsǢ*ie##LvrNBĴyFĝֿĶVS-zAO_9Li[!CwVΑhNqtWl8 S.\|K9j Ҝ0WlY?ƞ2s%ӞӇIx۸${D_>?Fimm7-5cp+|3CU11yƗuocnQϤe:ըiJVnUBCs_Wp3'}k5pęSKٽHO4]^Z: ^PX6{-[/+mGGu'K(>7GF_@dendstream endobj 442 0 obj << /Filter /FlateDecode /Length 1248 >> stream xXKo7WE"z}ʈs(`pPuS}VRFw凄CrȝE9"!E#+#3}_:?;ȳ4l8gy‹8ey&lԕ=-zwÛk xT[[ɢ%,zL,IoJ|[7maXt /"ٴ}ݞ^us,=VHW'qN)Zذ5jf~\?NA,P2g RBAqa<‹A]ȅPD}W 5:f#! aτx 2.k8@87C#{=M n &´^,-³0'U/E'BxC3j_|,CM`o $ii6#5>?TR# $" V l}Zp\z8tko> stream xڽUM0+|L؎m*RU!6lj|g !=g7L/#Ad1O)$lQX$4,2Ŋ-/ec zC^h8'0toQAs)m{2VhY`AS,pR,V”pOfǎ ʛ]㷣5!תg-w8;',!%M"`h @Ն'~8+e@ÌX¼+D+t ~Ao' [u)ߔp8Wc[n7T‡/vlaҢ&5)$H.qNqӫs㒴_ho]wJ{H,KDµJ[^6bڈj#x4CR r)E==ϋ?4endstream endobj 444 0 obj << /Filter /FlateDecode /Length1 1455 /Length2 6217 /Length3 0 /Length 7201 >> stream xڍwT}?t(1@:Gwҝ` " "% (H7ҡ;繟=;g}sDPpj"(A,@MO(%4ܡˉ9͡Ho.5$A( Pq@IY@TDDo ) P =!]M̩ @œ]P8?xos =ꁉL`<.([tVP.c7 ~Q< sL]`)LN(? a`(c@Lt. @8_Xr6O<w8ܡM]!?JC~A=s9bS4U ?H'[/72k!j(M+?u =@Os?8 qE)ly@u`0"˜($]0 V1ўO4AP  F'b QG3 No13H?F3~@ȯϿ0A baMUmm?TUEЂAQIP\B %% o ؟å |33<@C<[ 0 ނ&H/y 0,"Z@h=(Z$*pg B a(_sw0ap!EDKY;^t ٪Ԁ_'*! !bL1' Sx pB T 쉹P'#GXxxx'QPo?r 1sI `(חQ*WpZ m>? 3ykD, U2?tQ.k)O^c<4j9`O% H 6BժT3U"d7Ÿ}+غ}TGȄeke$h%АzPH!fSX*I'NGNu.xk],rMa|7k^5n+IX=~GT:s5XivKï^eRҳ0Zϲü7f/G\MxR@YEYxԖ7CS4+ܐo~}+^m`azܵtE䆗B3#UOght_ϳ'G;$oqi`9KATFfE0CW7[vx'gUQyg*ÄΈmN#xj*aM(]kRmlj6WQZ헣z鮎%!#k<밥'6DZża x{ɋk*䶚uO_.'m=%$\: -KAx4xk̉_y/LM14y1~-qP<9f!nKڐRpc~4}!vXablt&U~c>l᛫r72{%yz^߻6(>Fj#`{+LC*?{;?7x̰c,(׋:KbcYez1T\0Τ94S,.R}޵ekt0hM9_CgVfywa5g+7mm<я؁N%EkTZ(=="?#:-_s6]`SMV폁s觳$H qj=}%=,U8gNgUΦSD[TDSݛsV_|U}|6yJUī 8i"q?U}|I]'qBݒHskX,]nr_DCgf[׹RG2L^Q{EW@ŭ-q^%F4޽0swZ9\G2UJq!d|@qV9@ˍ{RIKx9i7';M)׮oWۈb%"'ǍP19i,?]98޿ύN05R* c6=OS)($b,8cР 3=*)^h{2..d髉p ؃7x֎'AU[D-&|ȍmy-Ew%tF@VDU9iGa+6Sy#ED^;1؄Tg3&q+tZjA !&/M=KN~VoPfY 'gz&#z,`.G]zh3{սwӆ > _T_R빓c>[Q]`pX]+քѝ0OcQNkC7:4tQ:4=Ldrk:[kzW؞'sNC} >YfsE|N9mNK|'V&\Y_ָ諾, x ;>'@%ÎE-w{c®") xxYgU 2DFrPN2'͔^PoYn,#^*MKƭ޻!1aAEIrfT?6RjWp~~O<yWC[nP(wsG9f_sCLuB]qKk\dPKg%Dz Rw5e\xEpNS9 Eb 5!1h=6?[c!RP}Non5-wrTْsl1WGL+H;ANi|9M@P! &`My|r k}c!ˆ)V{_O طrW'{ְP~Ɲk$|17f ~@@>+78"l >Ug%zmRҪ4CmZqw+2,m]Z2fjX-^FU2ڬk"d/2m) x]mˏة3%yHaK 1ckah "̶ȔMs~# 1sGi[?W>>͌MB0T%6FWg$B, \ĞQg1;JZ\@d(/hDkg+gf߹ڳMjvf.z$di{'uSt8u =*?ƭɋôp8nM~jڬz`g%E$eit`09*?v^ɰbΔd1qA,bC?M(24FI΀j؏<'.@mlE{B)g(,F'+i*BtV/ŝ7ZWfT7ߜYovҲTDKD!bn2j<{E OWޕ3k|(#<%e`W$s{a ` 6dbqi5hYjآoHEFyy@|$tgc=¹{ӓB?qX6ԾutLZd(h]t!q|2Z? 0*sb:t4]zX W{9bv35yK:FOOqe(5Mh;%^|bH+{o iEV/p"9f'-ʂ-+BEwKVI^I5E:Y]9*uOLO>FwO\涁h \*di"AKxidC܈lL+F܉u9/&܄*) {{Ε#q7;./hI\ulk=\sNULUWu%ݧo[4XOˎ%w?Hi?~ g(0Kz3|WUEZz8PA<7A}Ob|Ԕ3)@:ox[2@&%Gi23LLc-) m'h6f~Avm,7clt-m"JM$0mlʨNX˾-5Nm}fuL\ɠs\VUMi.Nluv YCƂ,u9;i>C*l .*c5L79G u3"db3mѻQU׭.2G(:93ULȟמ=%3[M[͟5 s4*ְhRx8,!dJ0K=3ۨ=6sxbkQMԭxYbP]Ik EJIϾdUX)\\e1Z^,Åp0yftKW8ygJ ķ[#uN 7Sh[g!y(?炝k<*} D{*?b-B@R"<6c5?_j6", 'uF` !q ZoŊh7;[> BՅٟH~8uɉxhlz-C$=bX!uC#kDRl>Rg7mBQ5_ՠRIRYn9uP4&=ܫ(ZvП8k)E2׷.MË^ÙIʻG> stream xڍtTk.HJ9Ctww 00]R%- % %J#{9kfw;zztmP$dՕ 7KĤCá n(!dݠ4'Acԑ;EB ;& xl$"dExИc~ڰ""BP7 PΘm p.E{" qFq#%80@y@m4 ?ȸ z0. q08@a*P7p@'W#w1Ax; TPF{9DC< 08{r@AZ  Fq`_y~ܲa>q^; uA0 ~0;(nP?Ela6h5 ; cc0@~y3{{<:F*'&#rx@0 a^?7^-@tTF!.A`no /Ͱ}Cf(@6[KoHf?g ]#1@w!ա0w*!}H#1sa(V qäw9C@(دO Fv6N ?! A{y y777!K n)`0n  x`|e x1!l0Sf¿( jCi i#X|Z#Mɵ6$~j5Th\J}5Z`ت!z0}Zޛ†#넩|O2L3L-qҢ!m#e"yRa'R!f,5"ߖuo{S,;LJĚEid0&yV.~#m R^g Gɋ<ǫ6˿sSⱝAkxWBW=^G6?%1+6E3>ᴜ h_[y}c'pVDm#MY'Һ1U6&\܆Щy6 4q0Q}c ACo+:χIhܕɤ=rtcayZ b_^FN5B-,?2%Z!<[[u{G%=G;mi]}` ݠO1 &*>4͸q"a/6P,A̸FGMXdT/?cKO{jJ,O/pv3lRE+ڄg`*, ,R}#?g%7Cm/SEjzs)qdq塃մ2xGxjSY1xKmMi槛Yrj ~1 eg}"m ,{YlO+KސQ% bs1HY H52m L# 3PMHh'A1ٻ{˸␤ZR@,Sʕ9JzC*Y| EwP)[_0=) =d5q&)C7OZ/-gk䛗hvCI6}h׶Fw cM$?pO >WUW/Bꏝ׶ }io>{2>T$ Jv[ԵIwG61pxYx6DZ( xI Mi*omt\V)|u_&]Ua{Zsi@^χbKWa[ 2|ڴZP:'η1tՑ_Sr,b)> jԃLȻQ^Zvnɩ9פLسK,e {I!\c+懗h@c[:oLl]O tRS:dJ>Yզ685nnRXKMdH80Kt l:hŝw)N뤾ǽ(.Ϋ''xԢJW[%TI=_(i9]}?PK2gwj52 y,O, /TLJ2+O ꀏ.ffJer&YgQλˆ|4L2rPꊮPYfҳq1Pjc2bI8NuD:V}VM*{5stO$?Y|śs Fb#V lW $s{bb^?wIx(JԺ="R1T~]xW'-&Rpd}a+YNUF>f0vEL1\9=mJ9mRמtqM4w,I߿(@/ FD֝_#COr[2T\r }QY٧q|Ԥ,g^9GVZq5>'pM]9D2hlwf2ɥ0bZի f︥V~>[$nvŒ,.nc?t-PAk[nYb/T [jsNR5ڵp7շ|\;|mDʣc D%n0|,Wqkj _!yxn#jWx)ԺƋ$aL^!P}YWXY aaȃC 3 EMMgucȆ. -@ m^ˢ^YJ;7^ 4S[ZJ>-&}acMMvכorBM;7 'X^Ŕ2 tdJ@B+פҊ`秛;YF>(T>f?rry mJ"$GQE b|~ X;d)mGt]<5uV IeR4 C%f/ͳl)\oŏe헲1uRnx)ȼS&[ ~?]VW/LQ=vB$J1I5S02a#<ޗlZχ9on^۷ 䘹{ٕ#xl{ږ 2\ )r6nY*'{H6_Dt'Žt rXó ݇Յe*5o7{1-1.{xA*Ro糝WipnGYQXnEwT iK`0f"rG⬝'>6E=FBԾ0Q _okrZŢ[;cx#u)I(,%s&D[}H$ Ps4ֻTVʗ I&}%mD=dHJ,D%7Na/ᩜX|ٶ># g+IJ&x˳ /lM_*{ATofc y>e"/=x'63} H؆#c\% ĀHEӓ= 35{CXvE<$dɉQ!z+"O.5p?Z%;Vn~rDFda-X5 \V%;+GeaTѮ_N '~OJKWb3*kg,y?J.]Rn;z=#߭93~g$d!nNlrf Cx]qEh?"{{ 1Q.O>_)%p伋oؠ$%7 %8ΡAAv>:,p|M}&u%sYէ ơ"}S*E/bs6ȨeeF_w?N$CYIϔP2+f(]) @Dui YI+/ٲɻ2%B$4'>ֆZ4zJcN)%Rڒ)!u̪c_ngrWsjBeΏŽy=1ߌmʝ>>+._R)cc8sL6}3<DuP40+-7. ;m5caCe`'Mt# ( ' \PeI/?vG̲+>J:QZNн-(jΡT%@y#~AY}P^e@X-ڏC=R!ZcSnJx\_ |)v'XSj/ߌ(wagKtsX<2ahH&f+xcH$3[=skUz;plkJK 6jqUE8VY58™LEbSF TY0F[ހ81YQU{߁ Vg8hEޕuIGr,ޝGz(0ayJ6fQvE_+Fk}&j\0W{D~#{}A`$]sꩀN5xjPΫׄGVb, DG<\QYS )_LrKne3~"W: FahuDޜ yhR2ߒ\2hTk 7"K~S+XYHp͠'搠#tMm}Q5Auҡ$"eGOm=a㴖+&B$eyv ٵdS0gޫ"P8k1` .*T!'|24k*Ț2;nʍm2q7VQ5l6g!{߭͞P?J3+e-e]껞Vw+}| F#EH{!YGYIZLﵼĕŢ^ko_/4z*xghΎ sDCqY"4.-xj:cD)Gz;IɗOЌ0ѫ8Mw][bT҆t[H>Tv>IrNӔN)4m- ex ^4<"apDbR=%/Ig؝fQvW>8QycIF)&՛4!O):[m(FYռr*7niʼnϤI3O ٫acD^11Ѥ)}\0yկUu1U N2s\_k&9iBx5 0v +},Qٻv82ʦ#ӺSvso/cP /V'šwyrE5Ϧėݨ>U } -˕3AbiOh= ټ*"r8`=Q~1_$Mb15hz}[VkTD:#??[Kxa}endstream endobj 446 0 obj << /Filter /FlateDecode /Length1 1720 /Length2 12454 /Length3 0 /Length 13551 >> stream xڍP\5N!@. kpww 4eg{V̪EC"ad uCX8XR*vv.VvvNmFr @hyI[@^TEwWO.C'WA PtPh]Av4y[18tH8]AV`dB',jj+ A@7a#/f(4m;_r-'+*pYn`k+59@KA e38X9 @?-- -*B nN  W?OnX+r"a^,rrt!n(O z-7_;y}6 $ݝt w&"l;;;zYٱ^+_g'g+ ?f@\݁V/BX K-b_ /qf:^N`_6 %muutpX8y !TQlkﱠ{eAu1;o6@-A;u-T^M  :SF, hX5Ckx6^Bq{՟*>oJ puFym+rn5 .Wz'W?: `CIؤA<6?u,XllV nW/  / ` |=_5떰_9 &r|/_`W%+wW=zmw%BYs }WvW+Aɲ;&2M1&+xF"uce[Z|+bDKFoGDV c/}$,{~O.~A4y.o?cyy}+_ ثUB},bՉ1*ɷ̞%D"1b{\Lc县+&2rnpVjsuR^cLJ)/x5 1\a`=̬iF{, L}y̠6u:4rnqx_DO֓Q(jeY0#|9dSo&|!@ıUn=B'"ο\ 漃'IKeBB;.pLktBr*N&M^懔"zx~!km|-/t06Sl\/l$(07,dNj M7Uɝ')(x'ioVd4.g--{jFf -kϾQr¦dkO(( 1t1 +ZDJJ崣z/ӿR TcXͫNM𡲉%èx8:}7@D42OIcbYq8B^g=)#/bS+c1Z_7Z@XXoR Ms\HXvx`c6Z'!A06v`w+nmg %3!'62hq2[ GBh6 ś(ϫyk!^UYbՈ@k3 )+ $"#_E̠ {S!l\Ee%b#S=rEkҜ&py~HO&ơ{' ;;Eʇ+Qs4(N5y^nsXz^?g>lct0')M||,qB& O̸Y+eu@ n2x腔[SݖCMثFD+BM t$;>#.Ĩ^EC mlY?Wv>Nx\gl/O.u,nG1=l>K<&[޻5@]N9v.0/pb&Mg]Ev⺤w/Rt26}=H.`&˔To5uzS s5DM`R8{xTQdܻM~?'UR_%نsSL˵n{SseB|>H,3ɿ8ҩ]%^~t_] a3ZEnݮϝ2q,}P(ȣ}X Q7,lӭY&ojf2i;చ5:ԛflǻ#|Ӭ^ҧz8"7LU|D>E?l#Jr"" ߮,\{'ɹddl (ٔ7?d-"mԽp -ˑ``SrIYzܻ۔70BH8Q(wSl|jpc͖W[Qh[_S & /m䃣w50c]^ir)CDZylz8gQqU m-S<# ,ߙoF_/G(V! β.\/q+\0~Wо=nC$TYiL–mq ŚN*IF{u$68th8'U|f }Pt+EHƴZpXNǫK =ܰX  L\@6]yPp 1xa=,ő %82U$=!IR 89U4@1@DestVQ{F1,/YDɧUm6Opw*ELRH3H=9V@1-%T9*i:!)"8`Bq n{;blWn^ۂn W6;!D&KbW6o&>IOr(8$-.3ƶ+nJk\MM%^!ڴ*OYLƁF VPZi/mI?`(~l`mݺr+* omi&+s`ql6\i?)0lT&gto zbMQgiލP?VA#7-tQ?v>d z}NN,'C8TGmׅxrA6'ʯ,8VQNz_U/\K'͹`_Ow|FI?s80E Z;V5n|{2m*ʥ=Ӫl][*<=ewej3Z!g yv2eqH*}}#dMY H`9f)O`aj(/j0)qA'PJ" V*ЧJbM2R @G\Ӫώ:Gz [g; Pplw/!`I<m~'CWyB;yS/OXŃhQF5cQSGdr =O,Ȉ.-B . B; pKg3}[ fXs:-ڴJ̢+]ۢ >« ypBLKi塯t0'Io׽nqo{_I6eY[/OeNJ0Y6):'z(v. [F#Z8P|T܊%rKQEmjZ X}Lq۞Y|k]99f}<7J S2=pC7v1}d>e7\@O* wT"E_?nJ+}liG,r<@!xI/HJQnSKk|+{`Otk: KJ*w 6 Fw}{Hj#",gyLQLDdW{EꪻMeRی&ʰu`}h?BVYTe\ѥp)?3kSL[T|A _QKkNnCo!ۦYV.~u6 $ Y5PIwB W-j&<{末m`<_YWWlN_4~R@D81yFʍo!bFvcJ\3.%!,ؑ°kaH~GOs[.3見kVp#]PܜXœP`)4&"`v>n~aʳ_mgJ%εP9{E猾X7.$?*f|#"ij:Y"|GCc?Sb9 spDѣYkxZBBJcFW5a.}Ae1+:SI-𻐮/б9=sY_lVwL-1w Q1a8U=>EE$"QXy}8\2QoPKH!@P&]l~~zVk?0EhXQF3>=f ;h99x)[ 9^Eރ; eeixZAT`sLGYWDE:5cMqG1"$ꕣI qFN^ |)XpV𗰊d iȭ:E-tz=1%ԷR)R~-7D<@ӓeRoߖAǻ)D9RM*oe6xPMtr=KF>-2⢣RʇEFlF7  !obIOۉ;) "gD4l/J<@zW[/C8j+)Wb: V}Έ"PG!4+~?[ল#ߓ:iǼ|+Qnб zpU|/k6CRp}I00,(QR$fj@5(08@ _a 0l7Mly+1wnm ͕ Xb +Z7]mo~ylW=J\̕dAFR"U˔@3zH"u{^Ԑ:O^tЏIP!g/U@ q#iQnP,BG?lE4֙9{R3aeqW>:FmRatϻ3G ZI${0rOEUu?U1~&\$ g9EzeQTr5+[rIl%ּZK3c5fc,=BZ!)Csj쳜&V d}{eXp0!?C"ebDrؽ;e_HwNqRZK*)o2 )gCgDXI(Wk1ՄICR(qm~p|JWޯ[.twH/Yڞ嘫jr[L%pU" 8y]h*M+/*hg< .tDVltpcJu*6 i'voWu| ^hSKOq-g"4e1y XقWa8f>!؎y}Ӕ$Ptlƀ,(NDx451тP+H rBjr~] @w$Dzz,$7;:gͽ$oc#Kj Q#6R T6p#tu@CߜF`ar+f)A˟g߸7X1yc`S;-;ڿ5u( rЕp^cT:}7wG,f9)yUXQYK&mEs̨]- 5Q06ipxzGTX,P{:6xc_>8gCLLT5hw~MOkq1U\abVHBlr^E_*(Dw=_&F)oVЮJy{⏠&eVԜ:Zqi1*Ea7-8Z*rVw$TI$gSs宯T\_bG"^߼n@SEghzg #Sd}U˃UiH*>:5A4-eK )W-#DI}Јo~8CDaUR*5nsv8MWP"4`^y)Sf} b+T:8g\\PJژmrș=,qJI֐}v`sGlFYrXv\&Z,X-Qzד V%xRuCwuk"Od!KˇJ{m1E:7|^7;G&:w߹UTRS*R0s`/aG&W J1kDZDO:dž:f0|4P w ƒJ ;o#UTb*|7SM?|*k 6S>nӢ8;`&m .MKC26?~o TCO8G< ʛg{eٚKRu0cUV7d_i#>6%2 DY)1Ew &5xzGH͢odا,\[#jpby>'Ц?y/ fעpY֠-$iZʵ [)Hm}ka7d|p4|ɨ:qh?gV `D<`C釀(P r-N{Cy 1tdq:υ'"262|koOeOO*>:BG ۄD Z'żn=Cއq{b.*Q 7/ >F%3C)"rxk&`` Vg.a͟+b3{=ɕ;r)]VMW+iwJXvۣL5( Mݱ769CM5(E%y!]C4ٯZ["!Qvr%h3v,3UV'nVο#þe!헛YQl r4Y)U)7 0sïiH.UMU|PY{|W2@::lsjlksR\k׍F`-;Y¥dCa]IiZπg7(`"BNB5$|Mg+-.H#|8R\iI*pc= Mulspkv'-%F_gf2KUf>XFvT~߮N0!T^`.t8wGzm3[3XpLHhD>2,'jc{drϤTu5 xp3"Q_s]ZddhzY !Sl$ɨ X.wG/CRgt+1 z3U?0?-l:d^p^\̄{N}`j,-X`:I$r'͗TpTZ= % a_M5rɤ0ͻeM哀H٧7﫢*fAP🭸%?a'Rhv!\ho0?ےtqsZK*?W&aC3 񫧯},H.g^ǻzGr1Ū1_ʕbLvw9 % 8ĺuQQ*mNL$fPJ%өѡ~h{،Nq7ZXMutTU%ZNB? ~;jzJ4ŻuȎE!"/g$ P^ќ%[٢Sw[_Nf[4STS5ͼHXqSubDB̈j/jn?U]CT?>T%1p.,7d}60 J:2p-I+ZY 4D?sWgSIJd䋗Lu ĉȝvB^,F 'vUoI C=ǚ.wDjE*Қ=x+Co6L @#i~d=_Qr~G.sDZLM-"V<^.icq5&WPAoY'>>ٝ7W[w"nB H㲬BFy^ɖ"o9ş2ҕc j I1 VܟlFC* '4dN,TnGaK7)DyY2 2%dx@%=jv!#*r+ 㼢B'@#7ItL`_N1UjqFV-b',j_2{dXej**6Jm_z\K X˄DGxS njG}=d!MA'G#>x3DhV㴸Yيbv$$7bfcg׉qk^.q,]m!6}۠|£+PwpODR_^DJB޶]zǤ@sỲ%p:aco;a-_gYD,{ap*TWa&g9LIZ&on(IfL3פf\m0WڭN'%ɂ@5 V>z[K-GTb[#WsVw{|; g-" %btOtyDcV j8C#bb6-K)ҤkZUַy#L76X34ls*`\Xn-p.{jwO!^:aK> stream xڍtT]6%%] H!!J CH7ҍ !-! J|Ok}ߚ9{_{s}Xuydma %kypYX /.!A%H ! ("K<M^ rex.-6(t34 g6V> Bx#Eӓٍ #z 7d Ee M`víCxZAAݐ P[vA#;bCv`Bp n0dbe }p+. Ovn6p  ŐW%+Bma ( p ֽ~ Cm~Quw{T@pكa~~~Qq y8*n v#s!)v } l65 : Fv#2Cjx|ZZjr\ <"a~_ \۫clTTP@_4<Z0Ado/o*t V!$Xظ2$ſHp}zQ#Kɳ5*5Ų4w~EQ|~&2"íצzdݖkDO}c_ezphy dn] ЛP;Xr]tI/<{zftEߔO>1 .fɳΞdDasyNMcPKߏ,5^Y4pb2C?%`IU{0[Z~5C6aһ0ge`C'SYiVIr.aL>Cڍ[; | %9KksN*(U}c?īSC-J%gck _UIavD>w4?Gb/TܬiZ _`tPhh7)9=}+WcطaXkoU/L?!tAicv#QP9  W|Sև!Tퟮ q*ד̛{Ħ[qhVuƄm3kME?Gʨx\u""[ܤ~t+M B9 x8 a^3]=v3'x ,5%rDFA.&C{MAB1^$;Ԙ&߮1UosիᦞyI,Jѥ 6QwRXxw=n]EG%DȜ f7w02{.H E?zbc;I|1Ļ&i1-Kr' }ڊ5+"Gt,n2=ra:sL'ߤj86o-2pU5@ӃŜr镔H-U-NyLs'Ҥ *y*_9ǹ8,3.\ o1-N5L-B{ˤޣpzכ3+X40'| q_yIlLH֦sLTNRkʷA CrSk^P~{?U}횎~::'ޕTAD B ?Xې*h6C)Qz$]QDʰ9bܜ,>`8mrٚ^u!تA%r"SXr;STԁsW݀(4CG g^S`[ Բ+]ӻNr^:y>*)kX}x=tSk3X9G;(VC0*]r4s̙oDm-b7 ; [ĻhԂsǷOƀ$&\zǸSȷH!n?[+ƫІZ&exd|-ےbFU֔2;y{0 ]T-L&D=x2Buys}TZn.(ɧNQ3,R͕a\q&ә)\*?6,pi=kAKʚUURc̰/kawﷂZ$ñL7 u6vk5Ij;eha,oFwQ.Pn1KO|.5CЛ N{F4@GٻchAZegocܕεh%{"SnJEU¨e_P&N|7JN ip$/CF_߷ϑTٶҕ"ϔ(75;=^WqWȦxo? ޖ՗/rkCC֨kCOd Ex* 9f.OCeД3TYmSy`V){>`4c٣9!AJ {D)2:͒Ҹ%dfr%]\{am/9}.8Aみ@JIVnMjWYǀXiV2"gis`h^η"3Ŋ'u[\{o.l1ˁʣ,gI(#s//-o.,oaVE {ClWv*u1V{[SMS|h€A`AH1^wN'rxÜ~f=[J]-6{|=@H|ՋVC#0Ƽ[cڐ Pn'S|~y'Scm$KRkQ95<>HچjSؽҺGܜ>?3XbMp_ -r?$Bh]MypbG̗JuK v8&N|-C5oӈXE?صC`RGąܾ%%IA|iwuXzgxJEBZ4[/,A*Fza[[~jwArYyS)i?`\6aZ.A}M{Rpޱ/IF,mA]|NաĘtg>/cŏn&(81Z֩i\|(j7G1V/I Z`G7}F J …'{3~2hi3{;%xV/ଇjb̼Gji ZF#ˆ Pi< cCGyϓVݐ;r*mHeDVu@5''(5/)XЬ:f U'L;gӗ˓R /@ʥs=8!Vc$҉!C<<,^̪|@`=}M9^ NGI]UێMӏEoPh#W)=,\VϪҸSu.y?Ɇ{Ɓv-^,?W4rSw;Pcƽ:wk :q,giX醻nVH}^CIj \e՛`Ϙ~)lV䌢&gƬAr!B#l/@6ϊW.D?DA Y42@g;-Ғc*+t:ڜB,S#ޑ`.`jGSɑQS4LGLX, eq͙aM%e S/k?0䗌O3A>~ngSʇ⮢)1S}C)^Qe24FsG0"iiѭ 'eޛC7r5#oc2@'7KrvJ;_H/{4a?tNޔpə$=vmyb=+3Uf^ !B }Q)kWWzbfp|Rw/"ԧoSPख़w[\k}8 ;JSܼzg{_Uc>IOr`bwm-9e-wzEs F(?o7beI!tz,xSʆw*ݬ*賳Ast``qTb{}5ɭGB^"i<*S(Fuԥs0W5Dr=|np[U&#*FIHQ Ϭ >"gZaFYTN" }Uf8WK/R?ܿ8Z9*ߕyΦ̤Z}ٳ M!ANS+3tkz4Z5ayM=jeP($U$NH|ӑUgoWe*<>+&:@^=݆eO~G&Ϧm}k>vL\v]"B FQ@ ߢ( hfSQ_CV["RҁEM.V~})7y`:cFFUI?,页: PICU""\uQi[|eX.xdE=8vnQBvNBʽn+lkߘ$cU:{SxVyX˻)U2S8wJқؔɜ˫KsM8%F|@lG:evI;`s,uqOըXsolj]V/odj2'+l+ }GaHp)VEskXbd X4ٲP*X _ZX#/tSn~{! fr&si!qNbFG=E \| 7Qu cUḒϡk]ag%&{- Xx"3UЯP<2OP,$zt  &bTpc,3(\X=GqnL5댻Xf0|V|{D甋V<|QLƄ?<9:я6[ Jj5c{Տ}pAsЛ(u3@tYt6BlP<>.x&ܵ ]lkɐ2 :سύYyH\SK@qU>(pr[\D5]niK2!o Rs;c+cDGB{_Mbߠ7ʏendstream endobj 448 0 obj << /Filter /FlateDecode /Length1 1513 /Length2 6828 /Length3 0 /Length 7846 >> stream xڍXm64HJI:Nn  hNiFZ@EAJZR@B}ǎcUy_uoؘ;(Y E ،(oↄ"И vAa! @XPPoG4@tpMupDq$x] nP!. `A!(|BJ xzz]79.^'0 !n0e.?!`Gy 4 p$:F=W/gx /O?ѿAῃ P͏Bp/G @=P{@fuE!P/ҠYVF@($@ { i3 {e O!*|0 &(%..&<@@ {B~hW=jA"߆`(8@Ɏ!wz,zdVyw 4yPǨ KBBB 1sv_5_$Ч7?36\WE pGA7!_Y`9@(Z(l _W3_C]תgD9(_8(_Z0(@B;(AG䌾[6AГﺪpk@777!ZW=`o:Gj(@E[vn@G, =?rݑ.0_ؿѿ%xA@3LӛjEzOaܥH1K_GmL'Jwϕs;zܙP]U:qa#F%G'0Zb[r$\ItlT~-nGn<NɘQ9;,YQYk^c>Ɲ)^}v_s|*>siEb+*&/bJ,^N$;*{!6#ӵx`eCncR#osV%*0`~, [۾p3(.94DsD!aTYdWJ0&!{WRtlXNCyꅖKl6o8@~cJ0oN|)v:Enʭ*њEtpO`뷴Tg -7ċ5+2j4u}o8A$dy&#jYzYDIpc.LJdN /6Qi w;`8?}L^#u%h u׃n5 }@gXj"뉿VDt|{ae^%X 7Bt8<"~CpMT_B! ZʁmVwZ酙=FLՔI̓Kt=䘆BLj9vEGy"`V….NPiDl{g0yb$˷_\ȦšZezq̚cLܸݐ jL&az2b&/}V7Rۏ%+ &PIf%]Wdj?.$Vn 1E>_hMM']#;I7o1KLq=CԹBlGBZIޜ~l6;Աv Es}k̲ L"怆3'L$2)z hhD_WktIFmآ5oO`ף3~2rQM/Oa'C#$<΃E}<yXXMuOjw䗓]gB%(|#ƬU?^\鯜T1I&$p~y%'K\aT Yl3T7,ˏ̸goG6'#ZgY߲ǬYKR"CC;VV2{ǘjڌXd7Sܭ1Ŏ2ĕd= ƫ3kF[YJ)p}#r'x1dBIn]#պ/Ӿeĺle[9e ӏk#!LMi^"̽#;T,9ݑL7p{3Nn)ͺEHa!ږOO)5=Ihi)ʨd,Ɯ 3"$Y׬ݞ܃M%ڴ-څn%=ΏӣsldW׻.-1#[0?RQZfסy/(?zܻ4 'E7f+IogV)#j. J>\mE]ܟh^nUP"M»jε&åh D=Ϣ[͞:/GPnwjM>چy G~MQ*DH, 6D=2h8-Ƒʋ=͉8FR1}nӚNU&{Z^Nycܯ8NS|A{ÅïGZc])Hg#_tiF==ysuBL [Q&T2Э;cC&ayc1L Wr~e7(: i;vPO)Sd\$m`'t7Mst]"(MoWؓz-0W NruR./^7 KoO`KpWKoߐo͔^fJb&90RFp}TLr2\0mtA#i%;G[*Вkˢi)M".03 ݱ7~v5'{=%ߍ̔:,f_[O&dqpU s*#W>MVU|,K@~iH0? e !r | Yqq=0QP]tcs8 Rb@աdz@J5:I<|'N Y7ɎZJkY%w۞="nq\/) aP)c\VnŖ;=l\Ҝtx҇n5hpF &31XN{f[q6<. $_v#J ۮ;X8 Z0֙\-9!mF+CIq/!,|E'T^AT9E<|.qA$[$.֩ZeHyIbuuPr޲UܫAvXOPn5y0ޢԫ[Or0wB%P(RSwu-яL2oݹXje.>uy \}W~Z+0E IE܄ZPn瓖d -dN!rkq/ jy畸g~g91|ӕZ ·]1JDך 3+gJ7{scŮVLp{>G ǵH;yJqڣBBMqwITj5KVCR􋘑yoq'2Jz"?:nԆ[X.ilB~NKg}d'Ee SS ̑؞D븆e]dwApղ]n-`|8lUVm9]I0gBNf1~7$|1]xՠ溰}[yOÉ*9ϩ,ۏɷKIh\8;T\s1 g4cVx ^{9ԴW"po7=»8hgN< ûoeK>yꮿʤXĖB=mƢTEƆX8<)%Xc)"s4˟嬎ܛV Z&qc{g5)ݷqDSF9MZK %^A)JKqeFjtO/EajY8OYBTdlI{<.}2ZC0Yԟ9.zG<m(Y^lt[p{Q&Pbã팰tP/2x#cɚTQģE/cAźqŐgJY,|GY!B ba 8frkrU _{oL/Э!M;xd'Q cfo>Q(Oa/m?ʒpmЏYnAR.te] >߷zMz3d%]u^7wEx*9%^]d̖N}dj5tmG8UU肰{)B}ac p5?_WrWޝ0]$v3_,~tAOYT=ˆ]j#؝\S@--bS6~ -ǺyѡWgԪxS rY%_CP :yF,f/C'r\6@)WKF)wew$Xͨ;=ͫ(\RNȖLlDro1nK% 73M}atY0U8zVvYtUY|EeSҵA8}@n˳5o&W24`/W|mL^s~ʢ*[475~3[IKYr@-wtnAg5ʁ&-R1' puX~ekϱkL8 5;cʲ=xbKg~{Լ6SDXem.$tw͍_|~^W`9X%!W7eeoK4|r;Fy}p0cFW8V}Y9,.mgC|gwXp1BjeQ}[GӺXm[.F},i5zY9|!TAuno8KT&aԱ&9{"@3}&$)xՋx٭JW A3]^B"bi9~q3c^~_]e [eU\^q̇ώ}A+0_6AHlg^292}j8VAKg?={thIUXyk}+{H~uMgqΆ?ŌN\O)[ъI*(x "l[<~ܾ<мmJQ6fԄb&%w?Ȉu5mGl9V% 3 ־,sԍM2pRrGx(3{SbzN4{0qfIK~(W/[SD , #Q Uk*ZPϙw[`[Çw$hbsIl,kJ_s_Ƞ'_pkBǿ"Qȋ}Yc 9s5A\ۛ:]M@Q=\X?E{v>F)T1ԲػKX"caG8e|J f% >qG{ͣk6G̼g/C!,qόgwUvQ 'vH$rp Egnű OP$>۸ڻ fjyRJua0wߩsbǽv"/ߣJ踄g Q{<=nmm6|\\fbh`{H[L1ϫT89ť.Qwq 2buߎR&WH:yE +:qu%ԀzJ"I/J endstream endobj 449 0 obj << /Type /XRef /Length 276 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 98 0 R /Root 97 0 R /Size 450 /ID [<3da5247cae9fd2895e5c6a86cc79c562>] >> stream xcb&F~0 $8Jd]!h%)MQH` dgA$7U "9UH R}6d MwHo)) wA*7t|LlF(Iaf:k0-MK$9E@6g5Q.^!J<`p LIm)X e@g"*VE*U@$K,B )X\,R fIvp"/HI RTV3mQ 5 endstream endobj startxref 355043 %%EOF Epi/inst/doc/Follow-up.rnw0000644000175100001440000003624112576333004015154 0ustar hornikusers\SweaveOpts{results=verbatim,keep.source=TRUE,include=FALSE} %\VignetteIndexEntry{Follow-up data with the Epi package} \documentclass[a4paper,twoside,12pt]{article} \usepackage[english]{babel} \usepackage{booktabs,rotating,graphicx,amsmath,verbatim,fancyhdr,Sweave} \usepackage[colorlinks,linkcolor=red,urlcolor=blue]{hyperref} \newcommand{\R}{\textsf{\bf R}} \renewcommand{\topfraction}{0.95} \renewcommand{\bottomfraction}{0.95} \renewcommand{\textfraction}{0.1} \renewcommand{\floatpagefraction}{0.9} \DeclareGraphicsExtensions{.pdf,.jpg} \setcounter{secnumdepth}{1} \setcounter{tocdepth}{1} \oddsidemargin 1mm \evensidemargin 1mm \textwidth 160mm \textheight 230mm \topmargin -5mm \headheight 8mm \headsep 5mm \footskip 15mm \begin{document} \raggedleft \pagestyle{empty} \vspace*{0.1\textheight} \Huge {\bf Follow-up data with the\\ \texttt{Epi} package} \noindent\rule[-1ex]{\textwidth}{5pt}\\[2.5ex] \Large Summer 2014 \vfill \normalsize \begin{tabular}{rl} Michael Hills & Retired \\ & Highgate, London \\[1em] Martyn Plummer & International Agency for Research on Cancer, Lyon\\ & \texttt{plummer@iarc.fr} \\[1em] Bendix Carstensen & Steno Diabetes Center, Gentofte, Denmark\\ & \small \& Department of Biostatistics, University of Copenhagen\\ & \normalsize \texttt{bxc@steno.dk} \\ & \url{www.pubhealth.ku.dk/~bxc} \end{tabular} \normalsize \newpage \raggedright \parindent 3ex \parskip 0ex \tableofcontents \cleardoublepage \setcounter{page}{1} \pagestyle{fancy} \renewcommand{\sectionmark}[1]{\markboth{\thesection #1}{\thesection \ #1}} \fancyhead[OL]{\sl Follow-up data with the \texttt{Epi} package.} \fancyhead[ER]{\sl \rightmark} \fancyhead[EL,OR]{\bf \thepage} \fancyfoot{} \renewcommand{\headrulewidth}{0.1pt} <<>>= library(Epi) print( sessionInfo(), l=F ) @ \section{Follow-up data in the \texttt{Epi} package} In the \texttt{Epi}-package, follow-up data is represented by adding some extra variables to a dataframe. Such a dataframe is called a \texttt{Lexis} object. The tools for handling follow-up data then use the structure of this for special plots, tabulations etc. Follow-up data basically consists of a time of entry, a time of exit and an indication of the status at exit (normally either ``alive'' or ``dead''). Implicitly is also assumed a status \emph{during} the follow-up (usually ``alive''). \begin{figure}[htbp] \centering \setlength{\unitlength}{1pt} \begin{picture}(210,70)(0,75) %\scriptsize \thicklines \put( 0,80){\makebox(0,0)[r]{Age-scale}} \put( 50,80){\line(1,0){150}} \put( 50,80){\line(0,1){5}} \put(100,80){\line(0,1){5}} \put(150,80){\line(0,1){5}} \put(200,80){\line(0,1){5}} \put( 50,77){\makebox(0,0)[t]{35}} \put(100,77){\makebox(0,0)[t]{40}} \put(150,77){\makebox(0,0)[t]{45}} \put(200,77){\makebox(0,0)[t]{50}} \put( 0,115){\makebox(0,0)[r]{Follow-up}} \put( 80,105){\makebox(0,0)[r]{\small Two}} \put( 90,105){\line(1,0){87}} \put( 90,100){\line(0,1){10}} \put(100,100){\line(0,1){10}} \put(150,100){\line(0,1){10}} \put(180,105){\circle{6}} \put( 95,110){\makebox(0,0)[b]{1}} \put(125,110){\makebox(0,0)[b]{5}} \put(165,110){\makebox(0,0)[b]{3}} \put( 50,130){\makebox(0,0)[r]{\small One}} \put( 60,130){\line(1,0){70}} \put( 60,125){\line(0,1){10}} \put(100,125){\line(0,1){10}} \put(130,130){\circle*{6}} \put( 80,135){\makebox(0,0)[b]{4}} \put(115,135){\makebox(0,0)[b]{3}} \end{picture} \caption{\it Follow-up of two persons} \label{fig:fu2} \end{figure} \section{Timescales} A timescale is a variable that varies deterministically \emph{within} each person during follow-up, \textit{e.g.}: \begin{itemize} \item Age \item Calendar time \item Time since treatment \item Time since relapse \end{itemize} All timescales advance at the same pace, so the time followed is the same on all timescales. Therefore, it suffices to use only the entry point on each of the time scale, for example: \begin{itemize} \item Age at entry. \item Date of entry. \item Time since treatment (\emph{at} treatment this is 0). \item Time since relapse (\emph{at} relapse this is 0).. \end{itemize} In the \texttt{Epi} package, follow-up in a cohort is represented in a \texttt{Lexis} object. A \texttt{Lexis} object is a dataframe with a bit of extra structure representing the follow-up. For the \texttt{nickel} data we would construct a \texttt{Lexis} object by: <<>>= data( nickel ) nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd %in% c(162,163) )*1, data = nickel ) @ The \texttt{entry} argument is a \emph{named} list with the entry points on each of the timescales we want to use. It defines the names of the timescales and the entry points. The \texttt{exit} argument gives the exit time on \emph{one} of the timescales, so the name of the element in this list must match one of the neames of the \texttt{entry} list. This is sufficient, because the follow-up time on all time scales is the same, in this case \texttt{ageout - agein}. Now take a look at the result: <<>>= str( nickel ) str( nicL ) head( nicL ) @ The \texttt{Lexis} object \texttt{nicL} has a variable for each timescale which is the entry point on this timescale. The follow-up time is in the variable \texttt{lex.dur} (\textbf{dur}ation). There is a \texttt{summary} function for \texttt{Lexis} objects that list the numer of transitions and records as well as the total follow-up time: <<>>= summary( nicL ) @ We defined the exit status to be death from lung cancer (ICD7 162,163), i.e. this variable is 1 if follow-up ended with a death from this cause. If follow-up ended alive or by death from another cause, the exit status is coded 0, i.e. as a censoring. Note that the exit status is in the variable \texttt{lex.Xst} (e\textbf{X}it \textbf{st}atus. The variable \texttt{lex.Cst} is the state where the follow-up takes place (\textbf{C}urrent \textbf{st}atus), in this case 0 (alive). It is possible to get a visualization of the follow-up along the timescales chosen by using the \texttt{plot} method for \texttt{Lexis} objects. \texttt{nicL} is an object of \emph{class} \texttt{Lexis}, so using the function \texttt{plot()} on it means that \R\ will look for the function \texttt{plot.Lexis} and use this function. <>= plot( nicL ) @ The function allows a lot of control over the output, and a \texttt{points.Lexis} function allows plotting of the endpoints of follow-up: <>= par( mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( nicL, 1:2, lwd=1, col=c("blue","red")[(nicL$exp>0)+1], grid=TRUE, lty.grid=1, col.grid=gray(0.7), xlim=1900+c(0,90), xaxs="i", ylim= 10+c(0,90), yaxs="i", las=1 ) points( nicL, 1:2, pch=c(NA,3)[nicL$lex.Xst+1], col="lightgray", lwd=3, cex=1.5 ) points( nicL, 1:2, pch=c(NA,3)[nicL$lex.Xst+1], col=c("blue","red")[(nicL$exp>0)+1], lwd=1, cex=1.5 ) @ The results of these two plotting commands are in figure \ref{fig:Lexis-diagram}. \begin{figure}[tb] \centering \label{fig:Lexis-diagram} \includegraphics[width=0.39\textwidth]{Follow-up-nicL1} \includegraphics[width=0.59\textwidth]{Follow-up-nicL2} \caption{\it Lexis diagram of the \texttt{nickel} dataset, left panel the default version, the right one with bells and whistles. The red lines are for persons with exposure$>0$, so it is pretty evident that the oldest ones are the exposed part of the cohort.} \end{figure} \section{Splitting the follow-up time along a timescale} The follow-up time in a cohort can be subdivided by for example current age. This is achieved by the \texttt{splitLexis} (note that it is \emph{not} called \texttt{split.Lexis}). This requires that the timescale and the breakpoints on this timescale are supplied. Try: <<>>= nicS1 <- splitLexis( nicL, "age", breaks=seq(0,100,10) ) summary( nicL ) summary( nicS1 ) @ So we see that the number of events and the amount of follow-up is the same in the two datasets; only the number of records differ. To see how records are split for each individual, it is useful to list the results for a few individuals: <<>>= round( subset( nicS1, id %in% 8:10 ), 2 ) @ The resulting object, \texttt{nicS1}, is again a \texttt{Lexis} object, and so follow-up may be split further along another timescale. Try this and list the results for individuals 8, 9 and 10 again: <<>>= nicS2 <- splitLexis( nicS1, "tfh", breaks=c(0,1,5,10,20,30,100) ) round( subset( nicS2, id %in% 8:10 ), 2 ) @ If we want to model the effect of these timescales we will for each interval use either the value of the left endpoint in each interval or the middle. There is a function \texttt{timeBand} which returns these. Try: <<>>= timeBand( nicS2, "age", "middle" )[1:20] # For nice printing and column labelling use the data.frame() function: data.frame( nicS2[,c("id","lex.id","per","age","tfh","lex.dur")], mid.age=timeBand( nicS2, "age", "middle" ), mid.tfh=timeBand( nicS2, "tfh", "middle" ) )[1:20,] @ Note that these are the midpoints of the intervals defined by \texttt{breaks=}, \emph{not} the midpoints of the actual follow-up intervals. This is because the variable to be used in modelling must be independent of the consoring and mortality pattern --- it should only depend on the chosen grouping of the timescale. \section{Splitting time at a specific date} If we have a recording of the date of a specific event as for example recovery or relapse, we may classify follow-up time as being before of after this intermediate event. This is achieved with the function \texttt{cutLexis}, which takes three arguments: the time point, the timescale, and the value of the (new) state following the date. Now we define the age for the nickel vorkers where the cumulative exposure exceeds 50 exposure years: <<>>= subset( nicL, id %in% 8:10 ) agehi <- nicL$age1st + 50 / nicL$exposure nicC <- cutLexis( data=nicL, cut=agehi, timescale="age", new.state=2, precursor.states=0 ) subset( nicC, id %in% 8:10 ) @ (The \texttt{precursor.states=} argument is explained below). Note that individual 6 has had his follow-up split at age 25 where 50 exposure-years were attained. This could also have been achieved in the split dataset \texttt{nicS2} instead of \texttt{nicL}, try: <<>>= subset( nicS2, id %in% 8:10 ) agehi <- nicS2$age1st + 50 / nicS2$exposure nicS2C <- cutLexis( data=nicS2, cut=agehi, timescale="age", new.state=2, precursor.states=0 ) subset( nicS2C, id %in% 8:10 ) @ Note that follow-up subsequent to the event is classified as being in state 2, but that the final transition to state 1 (death from lung cancer) is preserved. This is the point of the \texttt{precursor.states=} argument. It names the states (in this case 0, ``Alive'') that will be over-witten by \texttt{new.state} (in this case state 2, ``High exposure''). Clearly, state 1 (``Dead'') should not be updated even if it is after the time where the persons moves to state 2. In other words, only state 0 is a precursor to state 2, state 1 is always subsequent to state 2. Note if the intermediate event is to be used as a time-dependent variable in a Cox-model, then \texttt{lex.Cst} should be used as the time-dependent variable, and \texttt{lex.Xst==1} as the event. \section{Competing risks --- multiple types of events} If we want to consider death from lung cancer and death from other causes as separate events we can code these as for example 1 and 2. <<>>= data( nickel ) nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd > 0 ) + ( icd %in% c(162,163) ), data = nickel ) summary( nicL ) subset( nicL, id %in% 8:10 ) @ If we want to label the states, we can enter the names of these in the \texttt{states} parameter, try for example: <<>>= nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd > 0 ) + ( icd %in% c(162,163) ), data = nickel, states = c("Alive","D.oth","D.lung") ) summary( nicL ) @ Note that the \texttt{Lexis} function automatically assumes that all persons enter in the first level (given in the \texttt{states=} argument) When we cut at a date as in this case, the date where cumulative exposure exceeds 50 exposure-years, we get the follow-up \emph{after} the date classified as being in the new state if the exit (\texttt{lex.Xst}) was to a state we defined as one of the \texttt{precursor.states}: <<>>= nicL$agehi <- nicL$age1st + 50 / nicL$exposure nicC <- cutLexis( data = nicL, cut = nicL$agehi, timescale = "age", new.state = "HiExp", precursor.states = "Alive" ) subset( nicC, id %in% 8:10 ) summary( nicC, scale=1000 ) @ Note that the persons-years is the same, but that the number of events has changed. This is because events are now defined as any transition from alive, including the transitions to \texttt{HiExp}. Also note that (so far) it is necessary to specify the variable with the cutpoints in full, using only \texttt{cut=agehi} would give an error. \subsection{Subdivision of existing states} It may be of interest to subdivide the states following the intermediate event according to wheter the event has occurred or not. That is done by the argument \texttt{split.states=TRUE}. Moreover, it will also often be of interest to introduce a new timescale indicating the time since intermediate event. This can be done by the argument \texttt{new.scale=TRUE}, alternatively \texttt{new.scale="tfevent"}, as illustrated here: <<>>= nicC <- cutLexis( data = nicL, cut = nicL$agehi, timescale = "age", new.state = "Hi", split.states=TRUE, new.scale=TRUE, precursor.states = "Alive" ) subset( nicC, id %in% 8:10 ) summary( nicC, scale=1000 ) @ \section{Multiple events of the same type (recurrent events)} Sometimes more events of the same type are recorded for each person and one would then like to count these and put follow-up time in states accordingly. Essentially, each set of cutpoints represents progressions from one state to the next. Therefore the states should be numbered, and the numbering of states subsequently occupied be increased accordingly. This is a behaviour different from the one outlined above, and it is achieved by the argument \texttt{count=TRUE} to \texttt{cutLexis}. When \texttt{count} is set to \texttt{TRUE}, the value of the arguments \texttt{new.state} and \texttt{precursor.states} are ignored. Actually, when using the argument \texttt{count=TRUE}, the function \texttt{countLexis} is called, so an alternative is to use this directly. \end{document} Epi/inst/doc/Follow-up.R0000644000175100001440000001276012531361114014541 0ustar hornikusers### R code from vignette source 'Follow-up.rnw' ################################################### ### code chunk number 1: Follow-up.rnw:65-67 ################################################### library(Epi) print( sessionInfo(), l=F ) ################################################### ### code chunk number 2: Follow-up.rnw:146-153 ################################################### data( nickel ) nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd %in% c(162,163) )*1, data = nickel ) ################################################### ### code chunk number 3: Follow-up.rnw:163-166 ################################################### str( nickel ) str( nicL ) head( nicL ) ################################################### ### code chunk number 4: Follow-up.rnw:175-176 ################################################### summary( nicL ) ################################################### ### code chunk number 5: nicL1 ################################################### plot( nicL ) ################################################### ### code chunk number 6: nicL2 ################################################### par( mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( nicL, 1:2, lwd=1, col=c("blue","red")[(nicL$exp>0)+1], grid=TRUE, lty.grid=1, col.grid=gray(0.7), xlim=1900+c(0,90), xaxs="i", ylim= 10+c(0,90), yaxs="i", las=1 ) points( nicL, 1:2, pch=c(NA,3)[nicL$lex.Xst+1], col="lightgray", lwd=3, cex=1.5 ) points( nicL, 1:2, pch=c(NA,3)[nicL$lex.Xst+1], col=c("blue","red")[(nicL$exp>0)+1], lwd=1, cex=1.5 ) ################################################### ### code chunk number 7: Follow-up.rnw:229-232 ################################################### nicS1 <- splitLexis( nicL, "age", breaks=seq(0,100,10) ) summary( nicL ) summary( nicS1 ) ################################################### ### code chunk number 8: Follow-up.rnw:239-240 ################################################### round( subset( nicS1, id %in% 8:10 ), 2 ) ################################################### ### code chunk number 9: Follow-up.rnw:245-247 ################################################### nicS2 <- splitLexis( nicS1, "tfh", breaks=c(0,1,5,10,20,30,100) ) round( subset( nicS2, id %in% 8:10 ), 2 ) ################################################### ### code chunk number 10: Follow-up.rnw:253-258 ################################################### timeBand( nicS2, "age", "middle" )[1:20] # For nice printing and column labelling use the data.frame() function: data.frame( nicS2[,c("id","lex.id","per","age","tfh","lex.dur")], mid.age=timeBand( nicS2, "age", "middle" ), mid.tfh=timeBand( nicS2, "tfh", "middle" ) )[1:20,] ################################################### ### code chunk number 11: Follow-up.rnw:276-281 ################################################### subset( nicL, id %in% 8:10 ) agehi <- nicL$age1st + 50 / nicL$exposure nicC <- cutLexis( data=nicL, cut=agehi, timescale="age", new.state=2, precursor.states=0 ) subset( nicC, id %in% 8:10 ) ################################################### ### code chunk number 12: Follow-up.rnw:287-292 ################################################### subset( nicS2, id %in% 8:10 ) agehi <- nicS2$age1st + 50 / nicS2$exposure nicS2C <- cutLexis( data=nicS2, cut=agehi, timescale="age", new.state=2, precursor.states=0 ) subset( nicS2C, id %in% 8:10 ) ################################################### ### code chunk number 13: Follow-up.rnw:312-321 ################################################### data( nickel ) nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd > 0 ) + ( icd %in% c(162,163) ), data = nickel ) summary( nicL ) subset( nicL, id %in% 8:10 ) ################################################### ### code chunk number 14: Follow-up.rnw:325-333 ################################################### nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd > 0 ) + ( icd %in% c(162,163) ), data = nickel, states = c("Alive","D.oth","D.lung") ) summary( nicL ) ################################################### ### code chunk number 15: Follow-up.rnw:345-353 ################################################### nicL$agehi <- nicL$age1st + 50 / nicL$exposure nicC <- cutLexis( data = nicL, cut = nicL$agehi, timescale = "age", new.state = "HiExp", precursor.states = "Alive" ) subset( nicC, id %in% 8:10 ) summary( nicC, scale=1000 ) ################################################### ### code chunk number 16: Follow-up.rnw:371-379 ################################################### nicC <- cutLexis( data = nicL, cut = nicL$agehi, timescale = "age", new.state = "Hi", split.states=TRUE, new.scale=TRUE, precursor.states = "Alive" ) subset( nicC, id %in% 8:10 ) summary( nicC, scale=1000 ) Epi/src/0000755000175100001440000000000012576333004011577 5ustar hornikusersEpi/src/chinv2.c0000644000175100001440000000273712576333004013145 0ustar hornikusers/* $Id: chinv2.c 11357 2009-09-04 15:22:46Z therneau $ ** ** matrix inversion, given the FDF' cholesky decomposition ** ** input **matrix, which contains the chol decomp of an n by n ** matrix in its lower triangle. ** ** returned: the upper triangle + diagonal contain (FDF')^{-1} ** below the diagonal will be F inverse ** ** Terry Therneau ** ** Copied from the survival package by Terry Therneau, version 2.35-7 */ void chinv2(double **matrix , int n) { register double temp; register int i,j,k; /* ** invert the cholesky in the lower triangle ** take full advantage of the cholesky's diagonal of 1's */ for (i=0; i0) { matrix[i][i] = 1/matrix[i][i]; /*this line inverts D */ for (j= (i+1); j=0; i--) { if (matrix[i][i]==0) y[i] =0; else { temp = y[i]/matrix[i][i]; for (j= i+1; j eps) eps = matrix[i][i]; for (j=(i+1); j #include #include /* Utility functions by Terry Therneau from the survival package These are specially adapted to work with information matrices that are not of full rank. */ int cholesky2(double **matrix, int m, double toler); void chsolve2(double **matrix, int m, double *y); void chinv2(double **matrix, int m); /* Efficient calculation of the conditional log likelihood, along with the score and information matrix, for a single stratum. Input parameters: X T x m matrix of covariate values y T-vector that indicates if an individual is a case (y[t]==1) or control (y[t]==0) T Number of individuals in the stratum m Number of covariates offset Vector of offsets for the linear predictor beta m-vector of log odds ratio parameters Output parameters: loglik The conditional log-likelihood (scalar) score The score function (m-vector) info The information matrix (m x m matrix) The contribution from this stratum will be *added* to the output parameters, so they must be correctly initialized before calling cloglik. */ static void cloglik_stratum(double const *X, int const *y, double const *offset, int T, int m, double const *beta, double *loglik, double *score, double *info) { double *f, *g, *h, *xt, *xmean; int i,j,k,t; int K = 0, Kp; int iscase = 1; double sign = 1; double lpmax; /* Calculate number of cases */ for (t = 0; t < T; ++t) { if (y[t] != 0 && y[t] != 1) { error("Invalid outcome in conditional log likelihood"); } K += y[t]; } if (K==0 || K==T) { return; /* Non-informative stratum */ } /* If there are more cases than controls then define cases to be those with y[t] == 0, and reverse the sign of the covariate values. */ if (2 * K > T ) { K = T - K; iscase = 0; sign = -1; } /* Calculate the maximum value of the linear predictor (lpmax) within the stratum. This is subtracted from the linear predictor when taking exponentials for numerical stability. Note that we must correct the log-likelihood for this, but not the score or information matrix. */ lpmax = sign * offset[0]; for (i = 0; i < m; ++i) { lpmax += sign * beta[i] * X[T*i]; } for (t = 1; t < T; ++t) { double lp = sign * offset[t]; for (i = 0; i < m; ++i) { lp += sign * beta[i] * X[t + T*i]; } if (lp > lpmax) { lpmax = lp; } } /* Calculate the mean value of the covariates within the stratum. This is used to improve the numerical stability of the score and information matrix. */ xmean = Calloc(m, double); for (i = 0; i < m; ++i) { xmean[i] = 0; for (t = 0; t < T; ++t) { xmean[i] += sign * X[t + T*i]; } xmean[i] /= T; } /* Contribution from cases */ for (t = 0; t < T; ++t) { if (y[t] == iscase) { loglik[0] += sign * offset[t]; for (i = 0; i < m; ++i) { loglik[0] += sign * X[t + i*T] * beta[i]; score[i] += sign * X[t + i*T] - xmean[i]; } loglik[0] -= lpmax; } } /* Allocate and initialize workspace for recursive calculations */ Kp = K + 1; f = Calloc(Kp, double); g = Calloc(m * Kp, double); h = Calloc(m * m * Kp, double); xt = Calloc(m, double); for (k = 0; k < Kp; ++k) { f[k] = 0; for (i = 0; i < m; ++i) { g[k+Kp*i] = 0; for (j = 0; j < m; ++j) { h[k + Kp*(i + m*j)] = 0; } } } f[0] = 1; /* Recursively calculate contributions over all possible case sets of size K. */ for (t = 0; t < T; ++t) { double Ct = offset[t]; for (i = 0; i < m; ++i) { xt[i] = sign * X[t + T*i] - xmean[i]; Ct += sign * beta[i] * X[t + T*i]; } Ct = exp(Ct - lpmax); for (k = imin2(K,t+1); k > 0; --k) { for (i = 0; i < m; ++i) { double const *gpi = g + Kp*i; for (j = 0; j < m; ++j) { double const *gpj = g + Kp*j; double *hp = h + Kp*(i + m*j); hp[k] += Ct * (hp[k-1] + xt[i] * gpj[k-1] + xt[j] * gpi[k-1] + xt[i] * xt[j] * f[k-1]); } } for (i = 0; i < m; ++i) { double *gp = g + Kp*i; gp[k] += Ct * (gp[k-1] + xt[i] * f[k-1]); } f[k] += Ct * f[k-1]; } } /* Add contributions from this stratum to the output parameters */ loglik[0] -= log(f[K]); for (i = 0; i < m; ++i) { double const *gpi = g + Kp*i; score[i] -= gpi[K] / f[K]; for (j = 0; j < m; ++j) { double const *gpj = g + Kp*j; double const *hp = h + Kp*(i + m*j); info[i + m*j] += hp[K]/f[K] - (gpi[K]/f[K]) * (gpj[K]/f[K]); } } Free(f); Free(g); Free(h); Free(xt); Free(xmean); } /* * Calculate the conditional log likelihood summed over all strata, * along with the score and information matrix. * * Input parameters: * * X - list of matrices of covariate values. One element of the list * corresponds to a single stratum * Y - list of vectors of outcomes, corresponding to X, * beta - vector of log odds ratio parameters * m - number of parameters * * Output parameters * * loglik - contains the conditional log-likelihood on exit (scalar) * score - contains the score function on exit (m - vector) * info - contains the information matrix on exit (m*m - vector) */ static void cloglik(SEXP X, SEXP y, SEXP offset, int m, double *beta, double *loglik, double *score, double *info) { int i; int M = m*m; /* Output parameters of cloglik_stratum must be initialized to zero */ loglik[0] = 0; for (i = 0; i < m; ++i) { score[i] = 0; } for (i = 0; i < M; ++i) { info[i] = 0; } for (i = 0; i < length(X); ++i) { SEXP Xi = VECTOR_ELT(X,i); SEXP yi = VECTOR_ELT(y,i); SEXP oi = VECTOR_ELT(offset, i); cloglik_stratum(REAL(Xi), INTEGER(yi), REAL(oi), nrows(Xi), m, beta, loglik, score, info); } } /* The chinv2 function only works on the lower triangle of the matrix. This wrapper function copies the lower to the upper triangle */ static void invert_info(double **imat, int m) { int i,j; chinv2(imat, m); for (i = 1; i < m; i++) { for (j = 0; j < i; j++) { imat[i][j] = imat[j][i]; } } } /* Find maximum likelihood estimate of conditional logistic regression model by Newton-Raphson. The algorithm is copied from coxph.fit from the survival package by Terry Therneau. The variable u is used to store both the score function and the step for the next iteration. Likewise info contains both the information matrix and its Cholesky decomposition. If flag > 0 then the arrays hold the score and variance-covariance matrix respectively. */ static void clogit_fit(SEXP X, SEXP y, SEXP offset, int m, double *beta, double *loglik, double *u, double *info, int *flag, int *maxiter, double const *eps, double const * tol_chol) { int i, iter = 0; Rboolean halving = FALSE; double *oldbeta = Calloc(m, double); double **imat = Calloc(m, double*); /* Set up ragged array representation of information matrix for use by cholesky2, chsolve2, and invert_info functions */ for (i = 0; i < m; ++i) { imat[i] = info + m*i; } /* Initial iteration */ cloglik(X, y, offset, m, beta, loglik, u, info); if (*maxiter > 0) { *flag = cholesky2(imat, m, *tol_chol); if (*flag > 0) { chsolve2(imat, m, u); for (i = 0; i < m; i++) { oldbeta[i] = beta[i]; beta[i] += u[i]; } } else { /* Bad information matrix. Don't go into the main loop */ *maxiter = 0; } } /* Main loop */ for (iter = 1; iter <= *maxiter; iter++) { double oldlik = *loglik; cloglik(X, y, offset, m, beta, loglik, u, info); if (fabs(1 - (oldlik / *loglik)) <= *eps && !halving) { /* Done */ break; } else if (iter == *maxiter) { /* Out of time */ *flag = 1000; break; } else if (*loglik < oldlik) { /* Not converging: halve step size */ halving = TRUE; for (i = 0; i < m; i++) { beta[i] = (beta[i] + oldbeta[i]) /2; } } else { /* Normal update */ halving = FALSE; oldlik = *loglik; *flag = cholesky2(imat, m, *tol_chol); if (*flag > 0) { chsolve2(imat, m, u); for (i = 0; i < m; i++) { oldbeta[i] = beta[i]; beta[i] += u[i]; } } else { break; /* Bad information matrix */ } } } *maxiter = iter; if (*flag > 0) { cholesky2(imat, m, *tol_chol); invert_info(imat, m); } Free(oldbeta); Free(imat); } /* R interface */ SEXP clogit(SEXP X, SEXP y, SEXP offset, SEXP init, SEXP maxiter, SEXP eps, SEXP tol_chol) { int i; int n = length(X); int m = length(init); int M = m*m; int flag = 0; int niter = INTEGER(maxiter)[0]; double loglik[2], *score, *info, *beta; SEXP ans, a, names, dims; if (!isNewList(X)) error("'X' must be a list"); if (!isNewList(y)) error("'y' must be a list"); if (!isNewList(offset)) error("'offset' must be a list"); if (length(X) != length(y)) error("length mismatch between X and y"); if (length(X) != length(offset)) error("length mismatch between X and offset"); for (i = 0; i < n; ++i) { int T = nrows(VECTOR_ELT(X,i)); int xcols = ncols(VECTOR_ELT(X,i)); int ylen = length(VECTOR_ELT(y,i)); int olen = length(VECTOR_ELT(offset, i)); if (xcols != m) { error("Element %d of X has %d columns; expected %d", i, xcols, m); } if (ylen != T) { error("Element %d of y has length %d; expected %d", i, ylen, T); } if (olen != T) { error("Element %d of offset has length %d; expected %d", i, ylen, T); } } beta = (double *) R_alloc(m, sizeof(double)); for (i = 0; i < m; ++i) { beta[i] = REAL(init)[i]; } score = (double *) R_alloc(m, sizeof(double)); info = (double *) R_alloc(M, sizeof(double)); /* Calculate initial loglikelihood */ cloglik(X, y, offset, m, beta, &loglik[0], score, info); /* Maximize the likelihood */ clogit_fit(X, y, offset, m, beta, &loglik[1], score, info, &flag, &niter, REAL(eps), REAL(tol_chol)); /* Construct return list */ PROTECT(ans = allocVector(VECSXP, 5)); PROTECT(names = allocVector(STRSXP, 5)); /* Estimates */ PROTECT(a = allocVector(REALSXP, m)); for (i = 0; i < m; ++i) { REAL(a)[i] = beta[i]; } SET_VECTOR_ELT(ans, 0, a); SET_STRING_ELT(names, 0, mkChar("coefficients")); UNPROTECT(1); /* Log likelihood */ PROTECT(a = allocVector(REALSXP, 2)); REAL(a)[0] = loglik[0]; REAL(a)[1] = loglik[1]; SET_VECTOR_ELT(ans, 1, a); SET_STRING_ELT(names, 1, mkChar("loglik")); UNPROTECT(1); /* Information matrix */ PROTECT(a = allocVector(REALSXP, M)); PROTECT(dims = allocVector(INTSXP, 2)); for (i = 0; i < M; ++i) { REAL(a)[i] = info[i]; } INTEGER(dims)[0] = m; INTEGER(dims)[1] = m; setAttrib(a, R_DimSymbol, dims); SET_VECTOR_ELT(ans, 2, a); SET_STRING_ELT(names, 2, mkChar("var")); UNPROTECT(2); /* Flag */ PROTECT(a = ScalarInteger(flag)); SET_VECTOR_ELT(ans, 3, a); SET_STRING_ELT(names, 3, mkChar("flag")); UNPROTECT(1); /* Number of iterations */ PROTECT(a = ScalarInteger(niter)); SET_VECTOR_ELT(ans, 4, a); SET_STRING_ELT(names, 4, mkChar("iter")); UNPROTECT(1); setAttrib(ans, R_NamesSymbol, names); UNPROTECT(2); return(ans); } Epi/NAMESPACE0000644000175100001440000000747612576332467012261 0ustar hornikusersexport( as.Date.cal.yr, apc.frame, apc.fit, apc.plot, apc.lines, plot.apc, lines.apc, pc.points, pc.lines, pc.matpoints, pc.matlines, cal.yr, as.Date.cal.yr, ccwc, ci.pd, ci.lin, ci.exp, ci.cum, ci.pred, ci.mat, lls, clear, contr.orth, contr.2nd, contr.cum, contr.diff, detrend, dur, effx, effx.match, float, print.floated, gen.exp, Icens, print.Icens, plotevent, fit.add, fit.mult, ftrend, Lexis.diagram, Lexis.lines, Life.lines, Lexis, merge.Lexis, plot.Lexis, points.Lexis, lines.Lexis, PY.ann.Lexis, subset.Lexis, summary.Lexis, print.summary.Lexis, splitLexis, transform.Lexis, levels.Lexis, Relevel.Lexis, factorize.Lexis, cutLexis, countLexis, stack.Lexis, tmat.Lexis, boxes.Lexis, boxes.matrix, boxes.MS, msdata.Lexis, etm.Lexis, crr.Lexis, simLexis, subset.stacked.Lexis, transform.stacked.Lexis, plot.pState, lines.pState, entry, exit, status, timeBand, timeScales, breaks, merge.data.frame, tbox, dbox, fillarr, boxarr, boxes, factorize, PY.ann, N2Y, tmat, nState, pState, msdata, etm, mh, ncut, nice, NArray, ZArray, Ns, Termplot, pctab, plotEst, pointsEst, projection.ip, linesEst, rateplot, Aplot, Pplot, Cplot, Relevel, ROC, twoby2, Wald, stat.table, clogistic) # Import generic methods importFrom( utils, stack ) importFrom( splines, ns, bs ) importFrom( cmprsk, crr) importFrom( etm, etm ) importFrom( MASS, mvrnorm ) importFrom( survival, clogit) importFrom("grDevices", "gray", "rainbow") importFrom("graphics", "abline", "arrows", "axis", "box", "layout", "lines", "locator", "matlines", "matplot", "matpoints", "mtext", "par", "plot", "plot.new", "plot.window", "points", "polygon", "rect", "rug", "segments", "strheight", "strwidth", "text") importFrom("stats", ".getXlevels", "addmargins", "anova", "approx", "ave", "binomial", "coef", "complete.cases", "contr.sum", "fisher.test", "fitted", "gaussian", "glm", "is.empty.model", "median", "model.extract", "model.matrix", "model.offset", "model.response", "nlm", "pchisq", "pnorm", "poisson", "predict", "qnorm", "qt", "quantile", "runif", "termplot", "update", "vcov", "weighted.mean", "xtabs") importFrom("utils", "flush.console", "str") ## importFrom( mstate, mstate ) # register S3 methods S3method( print, Icens) S3method( print, floated) S3method( plot, apc) S3method( lines, apc) S3method( plot, Lexis) S3method( plot, pState) S3method( lines, pState) S3method( points, Lexis) S3method( lines, Lexis) S3method( PY.ann, Lexis) S3method( merge, Lexis) S3method( subset, Lexis) S3method( subset, stacked.Lexis) S3method( summary, Lexis) S3method( print, summary.Lexis) S3method(transform, Lexis) S3method(transform, stacked.Lexis) S3method( levels, Lexis) S3method( Relevel, Lexis) S3method( Relevel, factor) S3method( Relevel, default) S3method(factorize, Lexis) S3method( stack, Lexis) S3method( tmat, Lexis) S3method( boxes, Lexis) S3method( boxes, matrix) S3method( boxes, MS) S3method( msdata, Lexis) S3method( etm, Lexis) S3method( merge, data.frame) S3method( print, stat.table) S3method( print, clogistic) S3method( coef, clogistic) S3method( vcov, clogistic) S3method( as.Date, cal.yr) Epi/data/0000755000175100001440000000000012531361106011714 5ustar hornikusersEpi/data/lungDK.rda0000644000175100001440000000535612531361106013601 0ustar hornikusers{tMgOA"rriVGMŌsTuC$9JKD"R-J0fDGi'S,mZjd. .ѢfTgRӺE1&3|߷g3g|˷aJϕsG#76xt^:^:a/4쥓YkJsnԓZtEk-E-zʢ-z?X,:0XCyCyCyCyCyCy@^ C=aѿYNuhE<~Q_h﫲}%|}dѧwPPPPPPs&h@(ϣ:vGbx}BS{ODߎ%俎mAދ[G~_Wf8>}b { v}II0OϹ KLc8*GQ'~:n7d{SD}||9Ջ3pTM_9> f`Lgb<#8@?2ϓ8~%/5<.~KN.y#_l~N3tq|#S^ Z9VƼ⿷ĜkƁ==\j+t#o|_""oU ΃w0= A7c͘fh5λH|q1yg7u&t#k90O*:s C?y1 ؾKp|,k} } u{SvP)ʨPǢ)דio>Ǚ<~_`&'q+_''_'Y ^_F9 0k@-Ӆ&7t˝#IФ/IsIl-z?(.gDpv6aa m y^u,=kn!\h/+yϊ{]c=: GxCV@|8^ӍĎl\o _z1ڞ{|W& _g wH<-F{W{\Gc-;q/ ;woqAG6d/)B>q19!yo׶6 WEb_yL_]8K,Ek0׷&u^=7a]:-=~:lq;o7^nN:啄KWD9#ǭeg38o|!Mh5f̖&OYo T3jwq]h?7{+p|46C/^l}#΁k`Iz6;ȝX ߰Nu &ڸD?pe<}akX9ӸUֶd~̩ ]r#uIJ4̭|7zRZ{u,Tai;_&i!,/9cԨ!V> ]"+0c"4B֡BKEF4BVe1G4!b*&R~Ũ<aX ю?K$gĘ /mG]G /ȅbB5WѤ~!tP.Q=UPS~DmgTx=+]NSNHRaj4URhnfNa'q4CjtML=`׏q_Q.^82Å.5 NnUB=T^ W .e:&7f6R#Jҟ];dxР"lGvk̅KǠꣻy6dMsZ߀Q| зJ3NI]#'=2輗9 8+[(NRX^މo2Mbl<3},;zBÃ-p tԱGij2 ޟ9:}GiL{7iRŇ>7>:EYC"]t_lRsjyK49ܯO4x4-IV@osN$3_.PݧVL1VB(QjM/fn/ϕX>ÿr`Ԯl|Lsn*B#}1#`]3X'H)Jh5YL}dEΦ{ծ8(Q\ 5+ c+˞NR~Vk @% \!4N{4}* >JM(mF&L | N?ςdMaD':f+bCtVH b$qς>M(y}>/^~ $l+ Ѧ &DKxY )& ue9Q 5>kv:U>M xa'A08 'r? VC: [cCA@ia٧TI4 Ϝl2s(VϟU!ru,ڰ6ۯNd=lMtyNT3PAT@,ŎMGeş$>~+,'r˽A|=\(4 (lg4a첳৴S@پPz"~e<:c y,zU6Oz@{t`Jc$iy+V%:=nI?RtO߳++$gnP50Ґ=u fc-8T**&[i ]Ai!=VCP- G~EbM[SLQE&" V&dN/u3.4W -](61 !'6_Z]5P}2)&DFtVOt;`D!$itҮ*2UJ(Ŭ F Ӆ^Ջffpnd(X2LzVW!1e/Pû8AZ$쳩\|&/%*zO鮒'Watֽy  Jej2e嘦1j_ҳ=u ~*M$q\^0Ѻ#S}¦ 7`k#Gx+'o5~[3z/q#%#nc1'd rO=!uT f{%|@C7UW%.j @E.#5KyIe*\SУf=,M +-5nm,CM0rSsQL^Ag{=|u!`c@?Ԁb;$ 0c;ݨw>:^5;4E46W%"īe9r[Y!4gMu%_G3wzo.Dno6WrUZE4x[?E<ደj[>&<׶YQYd~=yI$蛄9 xAuy.c"]a7zIA:7+>]rlύz_DVg3&{&u'^ٙ@:Ek倏1)9PZQ:iSlr66_Lb"j{V0h}GZߺ}2HÔ;!R]\onB:^CUq'kDtQ7eԈ`J#ZEZd |¥}VO{+A`/9[Ex)q/gJYN+|_ iZNͪnq]XEmfz pL}tCk@ʨɯ x81zӷsׇU2 m!Om"BV5Ca_;dyi].B9m4 {d: G_*7;jvEm_w)%GKZ= ;--#1} WL`rE>nC̄ m:<sl5 Vo[!xјܩ IoW{ŘZ&km;h? I'@]yȜNݫ4ѠTCoK[gv+o3YY~T0K!=B 5C);1=GT3SA@1k]mS(V <u{"Ǖ6܀&=n@m{ʑ1&9tA4x|q Tyr z rLp}i;~xX#=p -$} e^8iϙ.LFc)If < _\$SbA VnTzz{{*y7 &l5IC4NuZGۏB#@[A; s|l@Fymɓ{:Q `I2*r;[ jauwa~RBH%#/{283F"ckW-2՝\J R6: A a➷< "U D(SU )qF%3`~TiM:!%{tZJ jKm^,@8'rQDJ]b7d?YL{*`tGn!xVmfK^ЭQMZՎ^F1շֽs@բ*lsU$Oe {K:\)xI=M&'H=`]}"Aމv42N /ۍq䯫[]lAs"rf~,ah@duW`Ɔ\Bw; Ɖ􏞅-ϧDx8_7|AK_[LDm90mv!bM'X2fZ>f$+Ƴ쭒O {xDϦ`f$렩rTĤVp;)8U |]-<@cWFc=7*ֳM r*$7 >$jEa(8k\It_dwѯ(H^r(vrSU&Szk-DW'uuzqo°p@rǹ}6|oJ"Bw\aRxw G65׏VQ3Y_-heXvumX7R=b ^.7i 944u?_l({S }3 F~\avFAa8+rN|z6LL4/QRϖ-Lx2(3Nl֍;[-I&$ cvK\']f_ ,nKɔpyln> 6 \eU`Ca(`k/v LqJK<э܄Éʴuzx8";{͟) B[:$)t;xdS牽n:/FC^% FQ)Kbn8QKˈ9$I8h}n=0(_YxIYz@3*ĵ㖱Bo؟M6_+E=yS~M[)Qo2ſSf/ǘ(zI0p,zO*lk bTJ e(f:d'0.^w9xvS0Yt),ew?+QH=4.KϿRE9!_*RDnOIߪѴI&8UKZhDAlcQ:"'B@D;!DG1vTEJ aτ) Ktlj6p;$5K5s oFB\\c?ҀWȣRaqӻ;ZԠc (UOByR'V3xt,Q/$oI'iШu8D ,D@ڑҎIm"$ E< <=zW2=Jn/y  PRa`7a}I_꘶3 ]ew>;ĭncFrdƛ#_䲦l{bHgWLN%@ ib?+K53BDWԿZr`Ta/wfa|6-0|I17M)}w/"ےp ny4L82\;q%Mme3rկݱg|WlT`#y";W0)_ [u +` PQ `񆭍>x^Tv=C]OS Eи4&UF/Zrqy#-3 j-8Q' ͌;(,f':S )Aj9T j0Zdΰ=ZםhVU4 Z4mmg=xu(.A:Hx8}qS"|&I+pS-"u朔4BcԜ];%c%d.=Ó }5LEH GFlj6Hj 2By^cvpgc RPRRLhsE^4Y{V@̣->Kkr9+&2y臠t=q^ i4T;U}{І rJw ܼ8/Mx?p 2(wi=Gw.pՓ%Ι'0&LngoXm5aG[&6g`NWjf )\iۡ}ԏT((뗟=/5%4i,ۣƎX]G?3x3VX/=Gchw8=\/kYDb<hZen{7>%" +R$5RMdV<;hp1%LXUC<5؞\x\` Qz\i!+ fp@`  3&p/P[h@C$½>Bn$u\BC,eL$@7Yv(JQ1o<jޤ0b]׀jrk%WG Ź28ZPCњ <5a$Wx;l Uߗķ,m0RՈ>0A]% eT5h* ~ i6܊XmXA qb S6ɇ҈n;G25^zqƢ4q=+쎔@DaARd)u-Ot#!u/Z P+voqsHf TEJ*GFӠ x~%TV&~mz7#)0!}; dǏʇDj\uOtqkG>^bfsc. kQ,T EQ"w^Ru\rY_;MZyDd~lNZ`LFH)dHl q}0=ؑcH6ud h+^N,)E,Hfi2ޛ`ݎٹg Qت ALyǶ„OE s/q_#wfoVKɤa[Ls8P,e,w ^li>{:it~TXťСd6mA3#:-'8-ci~Koät UQhFh@?8&It_kUX|;;`tȸœ kDBRzAN:4\`P{iM32 GjA}v.H $?[79ܶpL!55N=+F/(2C/9zApEu [իDZ-ԽwZJU&UƈEcʦ1V غt벨]P*1[51KP3v'Ovifth+V pg?Y;sDwDLa[L*G&%>( tJ ~΅N?w@vD*d1E@lB;0I$V:eE逻©:bX+T΂;+\yu *=>\j}FA7咊)aF24YglikPFRC.H?6rSN(Ptʠyj& !soawd0D8A>T&x45g\}%Ϟ :Lf\"oU # ,k3I+OqP Mě$>NKPtqN;_Փ9O%`_WpM:'qiEBߙa)]*"RRH% fR7P)AsHȈZr$Ҳbk|p~#ly#[K=t-|s2]d"uN%פ\by K8ٖ,aM\Q}2.OnL10)շEuOacş7۝(;6Zq89֥&j>ࣵ۵>v]9'In|J̘a)}gJ6J8rӢS"DKuYC!%3.wzˆlρj;%CY`wy /c >*ϘUt!梴j:S99AD+,=C?br_CJ8z ޵( dGTr-4jUbZ흓03d3=  jsΜT16^hTTӭ cwv;`L맋'RvțG9DzDekobJ}{GVnKN 7MžTH;Xv'>0 YZEpi/data/lep.rda0000644000175100001440000001432412531361106013170 0ustar hornikusers7zXZi"6!Xgu])TW"nRʟXaqjnj-& H4 L־oZ0rYFLzUWE[mFZ'VMS96e Bք`_E4vlD_GfOgsÈ)jX٫#C?GL$zKQ x1lE6kw5?g\/A.yuW6q4pڭ@hL.G :S#] U~_plS/::d&QSE1 r6 h*/o4_@pScZ}&9ƞYֹ #Yu/KM]Y. 2RFo1յ'|ȗtWD$1O[<90#kG6Eu|b`7B%\(pDV6Ja$1a`B%: 1t! ]ޜ7K}d>]SB,[7Yvޒ>,P N=Rc),G.f?Qȣd))U,d'njz˸?o4J9ӹDH,!ٮؖZPXflu%ZP,HU>Ƿ@DE&NUgKZc¦VIKWDKK-vm #kfwX"bt伪-r'ټ; }kD`K)/.ɆJU{I{Z:ǃTtl.0:W {_\S]CJU%* "+\kͼ-'UAWmANOv+ĮΉsPDz#7A# L֑y[*|@ p/`䳊4hFyPoiD+ T3DGB(3Tg/'Pws]wgX(8xğ;M;,wĥ3j.C\bk2 v(ݲK?MICydW8V_º7<OJC`#bVkgƺޥ=0jĊ0݀8oa$SJ;wLm{ 2\%+) 'GRot8r6b+EԳ8E5@tA P: [m|_hh~GGiMr"`epkʒ>8+enxq2,k؊38b љ7V#h~ \ZPG U.V}ހF"'Wu41;w|(r&dz {θ^0If\C^$4|0?E3̱MrvںjZuK}! !ybguGFK*#6K$-j@j_u,m8~@($o+yԗ VèWy&lH;2SDseq:V(FͿTG vNQ|]J{SAZV U g^ 9uRd `~\q{J372%3ӑ)NlU-6۰08^׹U Q(Z(Az#Şd}g#K4%k'u=wZn~5% K=O!HGS }^gT]փV+Q U#\3q~k)faJe}!+y۰zNMo`ZrD;G^@g1bg35=Qe$gjRJBea>똠yԿPs޺X QT>&0eq%sJ` ̿0/ Bmڨ\x9%}>Eh#e?R`H =3k{r8r|ށ8^S #=Rןɤ;Zx/1ݡH\jG5"eU5L >Hq%̑aoJgW%#)0 IcV6\k]"&\996}ʺ97Q͙ӗdq+(9“^,% Yk[q2rLoD<H)c#u8u ki`QJh4s`ukVh /^?űxK`w%.<vMp0qm?4&^~@uv~toƱK]#CFYX›9.DOSk}G\8πVBL-"t9+箌Ň=Ar<O nNil࠿;)zvLMs!S;f׬%r=wnjf3ۭFX\Cxqd>Dx?Hk5˾1x(0E-w|Wray P@oD0 R焈msCP7u?FVq(w 7 )COذFWS@Cw>YкB(F"H<&x^6<|vTTVr0C@jR[i D:\I|nh5LLJpZ?P[i6C8'H52dkeMUs4m_Zj\! #=e҇IBn0v [[ VӇΏBy0EI,= 6$zq=u{,mR:}hw j5"yR'@#1ɈXb}"o<,zq B-*&qyEQjK ]n8I0rVZ0՛MAR>LA#.n1ND{ 2 WKĊ_ E`J[H`Mu25ѯ H$sU(^98;(5]'ܜvbmGЪ 1|71Tw،><.fOY* ޲sB9aÝQ !1;[/5V$lw%L8qhH!t-{v[xQ k!y ^?Fʋ 2yYu$'E`Aoy%8s!BS[d&]^-~Ahi0Q+(5 0#=6(#UbJ<#Iy׮r*".MpKksQ"YՎ#+_[1Xb*FZb`S2/ ` g-UM،e4AGo؈ ܴhls.?+ὗ[ŌMc_OwHL6{KIǞ򊻷JG7C=ϝokF~v}n^xȪCyH24(GaX:CJi?_H?heg@[Cd ȩT8Snt9vᝊU7DQ)=86I$ѓzZH5X2wB_nыclGdW5yFB|B+q=%w0/zBu!&/ #q6X/4RDJøKtSĆ^W:%oH^ߣ0ʅ`^FM@^ݢotМ_ay07j`asf yGN3_ }xNcJcz%F ֓epZguO1͓.c\֬2?Սn'-6?3gחg%pEx /7u*©И19KB4Vt<[m™&Tr&!]nY`tEI@dѝngߦ~W\mL&0pXrOO\_z٤x0ɘLdA׀Fl)%<[X *c+7?^'5ȁY汎5jptw7syf;g+(F0zg#$A7 3:v.LnQ.ZpcoVFM߳D>FFD$ mGӯZ"rPhTN8P2˪CI-㘳.eь`w}g;0T9@ԉӊĦR::g $ @Y]v[Mg{Eiygt>*kɾ=˜ac5O?t@Ņ'eKʆ,;-`$ kXFg_Ӎnbq6%8򽲣̡>6hw,|,)HN2}WK݋/RdE1}\y d$bcv!x 1)Nœ.e{ L!MWqDv0"LdAǡ=R*d-Oʉ>Wc Ŧ"ˑ#"]'9K!jYo}mhqID/u'Wp#]V@4wy FQ%Xkez  ]ac2Qp3$ 2u3R #vrXqM e+b6# ?\וLz@LU{\Q/Z<͏ K33x=#mgmYD3%C 1L:eeDTq#uY r˙e;җ=**m_yx[?J-ri(Ty5Kk!G_L2 yK VI !s5UّKrTm ^}wZ9B7l,-[Wg1n[RhHaWu0 YZEpi/data/hivDK.rda0000644000175100001440000000420612531361106013413 0ustar hornikusersBZh91AY&SYۄ \TUu{}P@FPBH@BD@@@A }`0zݾVpcXfJ'R6QMC!#z h6dH{TPjIiM44I R3Db24`L4@FLdɀ&4h!$ ?RM=)@H2>rK6mm5o88UUUcUUUUUUUUUUUUUUUcl͇Rvl7fffffֵdqqZfffffffffffffffffmkZֵc-f1cò֓c.ý~v9Xr͟4M2""""""""""Q4EŊ텱V 2~-~wXfJZ;Tu֍ESe32m ֛%ŻJ-u2R)Z5ZjjM \˽;iwz4bbR͆wp4jsXn(OXOu}VIxf౳SõD&;l6>׃GE2!dj#$&&a%Y\r'}I84`Q0IiW+,ѕ*cbIK!@й&n &b` 4T$dЎieL+mt 1:k~<5\,Yձaŏ&Xi`m<oDA$6r|u ,Eۯᗩ꽍u_ĈU} jUr- EגZUe}ܣJ".Jeߐ0 c3Ýp6?+2+211;3;3{0{0>ɌOf|2`l6amis`mamamio k kLxgXg. <&<<2晖6ϰ6ϰ6ϰ6ϰ6ϴyyye33ͳl<<<<2晖6ϰ6ϰ]yMyye333-mamamamamio k kLxgXgXg<ýyyye333-mama0l @k kLxgXgXgZ<<<<<2晖6ϰ6ϰ6bykLk k kLxgXgXgZ<ڶٟlk:dm=`[;3ƶCmm[lCڶٓmk:dlk:dֶuȞa[!{mm[lmm[Emֶu^a[!ʶ3zk@}DldfU?y"Y9w/4m*R:9h_*hsH3r‡wtqR]"|~\9y_V㴶n:M.XmGǪǨ|7II'Y8lr[~rmtzo"mF:omLJwa9GzHa++oEnm4J5q G⮶~U|dh7%J[;[WYd--th:/#v)oGñn{ܿ-BwkI]s\6rU=-h[y'uݢC8U,C>7 -Kᣝ79R=D{~",qMwV~4͓DA(5m-VsW47CWK 5VKdK_V|j}mkw-֟S#d[s\t|5V;8\h.oo^ޔ(NJ[7+=lpfVu_sK=`ky]ڎ_MGuNk)R8)uqRٴq~p-z#U{'*E;XozXoqhugj:_~=?O:퟾Զ=C\yfH|_8"˫o1!oV/n|w:V"ѹ8)l|󸿮?d~\UwMH'v7[6I6>/88|>/98!D{f5~#\h_G[HnoÞu yھo㸿>%beݽ@ K[?+ZQ,j߿G r+G6K9|G;q[#-ҏLҿgKVWKaQ>چڱH[7K;8l{$}$N R\3t eG_tqlJ_o8RkYE}jXwmrqW~r6qdxu=N ˜H:pY}?WK?>WlVvP:߶E f[\Ye>#Gx"G_d\:m^#Z{G*n|^+o7Zq[qkIӑjr<9^Ww[uG:oHǝ:V~Em{ RR8A2<<5i-Uyh:E߳3hFHhzבk6od9? dn#6›2V> bNm~eZ=znI'wpy6㭮cr|M~Q#כnJ¯|EWGdj>Ίg }[WFh~o}-_qc=g+dN!d.DH>VϷ+#Se[Ng6v^:?!p磣7~OޔLgyp@+ΐG{~n5m5mGGھG٬8ƿ)JoEӉC/6A/G2`/rxzG79b-G"6s꣝h?]h!˺)뢬 6!x+[_vq ?j/}dcpT#|Hm?}țeg!<|),Ygʟ[Yؚt<_DN_-Ѹ=R;V=Ɵw.˼[=/2Vz{h߅ICA2ROd>Lַ?WHaYOpIe.+AV{#[Vʹ\#1V[m煣]׏۱sE2;V#G߈"]D/[/IH"a)lGV._{ݨmyG[߽GrG8p1­ y>+H|o1r|+V%h󁇻F6n:-̃FxNVLjޣV31guqۑcUk{j~_(Fl׭he"AG~)_ey1qr8N/WG˓UUr8Z~VILLJVF#533sR{K)>9ǯ/{nد/D:kدFz ?UDE@cEߏ/qxL\RqNu䷕ "}EF<½Po$޷dQ/Q3%>[hDzfvCOEX x X7'Uw<."sF/A5 B- D>oVqe vX3gRMǕ>ܦz@$]UJb"]q[俧eE7:Dݽn+_8 ^Z(}vĸP{Kh's(Էdt2༸7tyO7p[t8}u}_`ׁg![q97B7~9I_V]] P޴ `'$A?`oS^$رD5P^Tё_K'<}eHw7~q/= cK޿#Ѯ~'+^_gskynn' $+?uKLjf.xq"GCvOq_z6$뫡gEC[)e瀏yF$ N4L-Qב_F< vڸ?וI@'\ ?> eO?%Oٛ&;DJp #zX_p^Ѿ~1חmCrp\ 0~ uGmo}_x\px?w&Q1mro~S5 >{Vc$~%DNEcNA|!_x3Y3?/c~O.Ot/nk`b]}D_(@|@O| >p ~6MBkQ!;גaiY迯-7 ?47ǫG goN,zf1̯%ƇGZK|l|z'#Oj*tS|=W<;hW9?x)krJ7JR{ؿ'E⾮p-t] ;|@eGG9yW~z&8ooA|kmWJv(oSu^aWnvoGϮ/p=|V4QwIV~W78V+?CpgTq†{oc۫% ͪ/l% lWv@A?>/uu/_:xu&u&]Zo isB,uƃorRx 菂[*Go|SCW\_7\_yK- :Up=QWGLy z.8u_f(#vtBefuRMܖN>g<|h۠{8Y (܅qQprw4yU۞B6[&y" V._+桜}+/y1[N<]pf=~O} I?Lp8 8߲)ҕicvlmo乐< [8s|@m zksnN&ǭv+O`Ip=lDU"{#vHjk@;yCuT|u?}* +{{ Ûp\( n) O-_> uu EoBz!ORџЮe8y|mx5'~ z3y=<?yDw7t\/f~yhF=h-g7}w_F}_S{c|9v|Oy'{W.LA=R 7E&gysՂwy? ךn=Ys no]3fowHm_ ~nx+yeKc\ 8^3:7[phBUks6^ GAWaR[Ѵx-O|u 2ޚ $>߆|??e1u=_ }Էr'_Sh_⺡`~rL" p/Y[Q5>K#>/F*@g`LuN%,رzyCcn*t9}$l|_˜yjnpPn^]"8_w,EUOn>oFi?О~>=!y;~05r D>z9'(_~m=w zy_g@~ky~ _u삾{.8t8r-E;98vFQ%ҕ?[69 >HOvHpWn' 9}P?G*u==E'1݁4gSΥh7g#w`|s1/QrmgC{n&{&b^Zv.B##>Ep\>.>7!uW^} 8]/(-t>ߘ>rWq+w81n z |8߰-א9\\)w8 K]_unvB:+9y蜘5O8^: 0PP=rƸpUоξ8αr4A..%[ۈp'ݍrwۅ|~3Cpy|-̿81Qu]u#ì ^W}^AKq*p%H?<ީL~߀NY3%a^M~/PߚL7|̓^ 5&㼃7Oؐ/?$[|KvUAh>||S }駓{ڳg|>{)>8.\z}z_r酴{PO p}y=ǫςsvp9 k:ƉzM|گi=R%(hEt-(n;a\?8ޚrV\oV3W$@?.,sS6)SC'=QM<}jvwk[d=# 1w*Kp\|wUӆ 0T7~qTa_dr$7zBy_ ~UCz/Nj ֈ\zy[^|/|{' ׆^<~[08N<]^G4}(G ĝq}>kˈwWu_.ΧTgo?烯=/繈u:ΣSqzdzH !+۪ oBzٜXtz)-lFO雐nH$=h0<ݽu'ch+p<1~*8?hcR,[,O5eyobx*bV*e'~`KCwoDzA;{`,ɳyb+NoD#~}nrM`WLEApv^SOWLbg6J,E|^^CcU<S*ZU~"x՞>z9n`՟^{f|[^u>@~BX__ =y ;k=Q` xC;~g8w{п'.|;gy>--FZ2*:{RXx 9Ovcߖ)8ν}ޔ"9anHG=ag鋕[/oٰM?ڟ6<%mɞև~@_fK4:|k \2k;<SdY*zFؽm}gD# \?VZ).$_1~3ӻS.TsMNnNE^g5[s ||컁\rvho*yWซL?\L?)rܯ|RSl:y'<^6y?G& .> EPP奄/?#kD,;y s:b\lloV®eX-3cW9=-އǎE;nyt~%6 ]߽ï F;v {jzM'!yh5OhT<_܎qEERXy">k1g CG~w=zxwP@XK8p {@~EE?=c!eNL2.xm:zy9t88"TNO#}/O}#}XiU؟M3 _s]йfoƸz݂=I~ހ\&ǡ_Nro~_rao߅76HyߥqWs^o2~ ~ eWwoh?״6BpǙ2Vs^ c*{|ZN~׹6Aͦ>9סۚ+_}9K/[ <[ q?Hq}v%˕=Ui;'7~"J+v,x5)~&3s\;= s~w$P$cU8D?"׫~kOo~6tS&T!xU{B>އoY?2]7/@~]_cS: :'Ǔ\ևߏyո6zs~a%|<ۅz~C\ N+G_>>o~|nj?QnJxἏ_ xuΣO ~c+9OL~/sN,]? ~8?VM} q^-8,}~{Rs8mpfkӆ"OE?_G 9w}RpOdpq+ܨ:OK .qmCoBw 8_G$^w ƅuryx>M[\w&q[ݏW^[]@z ZOn~N5?Fzox . >ת~7%Y-8߇2fPN)Xt#NPX7%!\S'GsS{w;??|A>^y/m5yzd>N>O"\o{7|=m{SV|b@"$˯G].Ǘ\3JpX|kh-yC *_+1}X)xt䟳!tzS*x^tyuCprty9~)x^h-j} \)o7o:0ĥJ`x?:\- +8 ~uGOxj0˓n.yg9Ά>G- ~C9 ?C=W1\?=UIT_/q/]^O@{}qmLށ;vMjU,5R/N@ ]y=x<'H@y]yBwI'xP|<#ϣl..Bm?ϻ/υ=Bw;:c97&teߚDsϊ1>Ae6twr*Nx+PKA`/*B&_b;gGѝ<@x֘K; yy `7ww\d=q|ogCߣ>'~)əC!9H<ܜ{Shoh$Mι@^C_? Ὑ݇j;LO|9"\D}|J^~p^N\a`p]Hݹ9<yE?wN-滱7/l>g+CU291/vLjtxw\bIn"w1Cq>]y |\+pUB7Jؘp4< ㄺ ƃ1|SQcOqa%|_8>\-0n_'} xC}G+ >H~1|(\g[zj Ck n%l:c_xoK NNKP﷨hg53 ǻ#6qލr7!+u{?: ].iu ûeߡ5^ۮgm9 bbeo0N_q/IhBcBpFD;\CgC#m܇ms@}'F/x-NA׋7g̹:=~K~O dƣ_abQ  \18\ NBBq5wPq33g"y #+w:0MnrʚT?!bdn^ />;9c }ڔm?[>tV^G=*x4CG[4߁_q˯V>܇¶ &d2ø0^xZ<v 2ד7[OH!`E=>Ԕ ܇P|M_]־'W|;)kz3W: j)u8{{_M=} 1.X*xu1. s qn~6C~8oyQ6̿RzڣBr}rz0<1;>˽S-W]yCrdq_{qyRyw6R*.F,⾢ֽx~YWBޱ0Whx/s҅<2ԡtt 0K_ Rrz)d|o<@;\xUxD&rߘb.$:)ߓ QOs.C{~w!]aQ?[ ޕq":ݜ #3vD<vnC~$?\G;U\~|>^qc2MFz4w}ڻc [",CTr|Hu}gOx3V>U?:/c΀-F:~sV'a.@lÝ('("{ t8\댩Rǣ_T} 3xQ!4ؕqH}`|{ ƗW4 w=p"u ;f`|.Gzd+η#آRwLqV܂ b~flTm7 =gC^zrvK'8u-8?N_j~>sp Ztp} r[&w>q.UMRN |F{˞{uz_~N8V"ȧlNW{d>syo{4ZPOx\9j9y1WӘyNF`]cnx8sfxCE\SU*ysa y깍; s.5l:k;疉"u:x^6uh7,5 (\~8P #-9|oؿ>B!]uz|1xi$$ =n^C!{D}KZfB _F-OhrQh y[m?|6?ׁ(?ys1}}}M]=Eҫ^m[踇~\'ʴ6tT}j6;8v59EWQO ?P8\˝࣌ёu;[tbஐ:pnwIkî |g cKCw,k c=w9y0gkzюr05ep'?;`Ȣ?3=˙ +c:Ƈ1'| qzfwۈpx mG;v^D}t.R^L~s}j!_q?qœwCG[1K6pƉvA;8x/ *z9e_vx.m+x-{EH%'޻e#X;~ǪaAǗM`ԡk)]ǝl[߅8/iUhwKpjPG!L/p!ދg*)l,N c #GD>b>~xђ^>oT|x,Azχ<2lf{7@mb}z| xyᱼQ'&z2 C|<+h_7'żR%M?, r;I~߆Qqu/kK3u\'Lw7tSc~o9_>#-$g}ϒ[W):~zA_pfp*83Y&^L+e]x^yJ :{ŗc|/=M**_vPBX?!s`x | ^BIwI-+ai-:8 :QN軡1 Hd|v36ߘM8 ^#X<|Ã_aL޿^}03UB-SBx=o=3|u߸K}ޮ<7蓇Q<^ nѾ8ʹKr_!IYJM2wۊ;a\uYmzHH6\6ufZCϗ?]F#N̓~S^PG_U0NEvroWkN_c0pO= .O7t8|CK7fƁFQ>O ƒBrqbwFu4<}61;0fX?Bx Px0ҭu Qƭ߃?:rrRos~Os<1oŽ\?=zn~~x8ŵ ~VXȧlJR\Ӛ4SxN"s=uvN3*n.oٗ&f.5#-zxvW;3ny ~ vP9^zƽu:E.@C 5x?8:CݰK3p*GӶPo9x2Cx!]Cޗtyu41FO<"82בcE|!HGȍ@qxȆznE;ϢO|EH^B{>{=z=raLQ\C\ Aqn^Ïޡeg8 bm\Konpxu/y%3y~Ms}wm,i?%LW霋o܃v .}.: |N?*tylԣI3߇+Xq N"wo9ፑޏa6[Y]؅6߃6uR;jI*l_^hC{*^>7^c|Dp2x, np{ccKYJFxH*~ m ?k&(g[5G,c+g2k;P"?_V}uK}~>0uԻbP:UB·x*9Yt碞 ⚈vw~Nw2s'rFp!30(ەc-i[B{·9[+}18n;mekڽ: |cz Ay nڒƋv~'[nތ*2hgov67e-ˡ_O2rz8C 2D‘E QnVׁ)#-\SGcF/>&wo:O@>0_,jOCrRg_^1v~{5s]i^'Wzj7]t˥PA;Ӑ'u:*ėE{ GswWJ&~ŏV }.넵VvsB't].snvytz])V S)fVʺmU"e'<3d=Ԡ,"bNuM׏뾨ӛp8oR!\s}o 󗀛QgXp19OF~~\ÍexlKA!P" .:z=~Hw3#}0n(pQ%Hz; }Q%Qu}>Pjo!?/Yz_u"uE?F?:+?Ι?g1\^*ote(ԣ4+->[(6%mJߋ&眖~}x]lf l1?o9pRQ0|q]+)h?_*x9M'.WF\G+y*F/WG0¹fyY?2LJMŴSwV:8 Fm Qq2 o%3b%74mOjC;D}p# wC?aq?_-x+ g@8ߤ_vzD/a]p랇˃vbQB}~9;fzϳ.{^v(]i7\r qϴ˅NdeG%8nisݬ߷0,Y.I k]f@"t]udy ׍Q/f]l{1~5h_o7zs_;QxMG;cpj8Z%SIй8.¦!8= f|(']Gg^'F'q7-s^qz!kcc'h0.}/㡓Z<{9AxnE?BxZ&WGN<%)LxKW֕{/y~ԛ{bsj^wކzzy?mjc%m:kry ϏSG?٩m%y@gEW7ׇ0JpY҇vN'w5U}a+RQcpƀS|~fDٸ/0 >w6 p*| c>u9*&э݉w=ؒ1}47h50~P_ӊP?/ZOn.C8S\g.CˇAw@dLqxe^3߷1y9P0t;mszd%aRL>l p2$y i~09Lл0@Cw%6< j+cӁN^y2QAr,=M|Ns?Iw_ګϗM'`]_ ÅjsԮNme]u{y7Hm=)g^O<NOW[H~^G2Jﰫ,w=y׷Wh 3 S{Ur^A|oC:-b#m=ϯwXb{fxg-6FEbWk*-w}7u /}^Wy_Lݭ_Ĩ<b"Tmxp'Ey@ٯ1)[[GOy&>5\&սjJp/az=Vqzy{.3 |y^*zڳ < :BZgDMkzW_&̧VzK{ 8y ✇|f̫0 Y}FG!o3ߨN''f}Ľ5 FYHY"54_KblEѲFvA^239BZ'ziQ!cϕ8J}sG717|0u1ڏ껟S9|9 99\ /ظKs 8?GWGWJ'$+Bx#?wx}~X!]ӀuO@aߺ_a&`ópO/w2У\_/lf3\\V@}pK|~X uu\7M|IP}x$˃ol0oo? n_; p|;nT4t2 ܾlN>N 'I) ;v(PءCa ;vP١Ce*;TvP١Cc;4vhءCc:;tvmom/| Epi/data/mortDK.rda0000644000175100001440000014465012531361106013616 0ustar hornikusers7zXZi"6!Xj])TW"nRʟXaqjnj-&,jMFjo!2QZEݾUc=?]0^+vgr V]>jYBQ3;ʴY*K?fbm>z_!ƴr (ҫSR9{S|V*{3Y[.SE}H.1J*Q:'!K<7x/\xYqꘄiTвBs Udˆ&ۊ^Ȥ T530P0=$L8N"Ϊt0ɾ$cfķԵʀ*Wa[>Zwh>%TVހ}pٲ5>F!Z`0{gI?*>ZFtPh7;#,֐&thpъZB%N 1יd~&Sl@ #"~ўg ϣ_e[K At!J+9OYeiR|mJF#r2_[n0es6E)nn=؟E rӅQ Q. \yte{J vT(+G 5Z7|}Өܪ>ot\܏QnǓ c!.W~>O˫s&ͩ O*%N?pim2Ti*JTȖVʹ.X 4+p g6TW1 X/.T"M}lӊƭaj7 o?sE.6T&- |?K[&թesh|%GGCx4Z,n#0G=91M?XK䫟m=^03<欘 JmQLDTm?,c6|HbS] ]F9*JUXLFڄ}fPK YZEփ\. kh-؛jS|ƛC' zus65<<"gʚO[+M$T]{Gf&=-\LUd$)WɱqE+3:\;j|uh7/4R~Ms2( AqlDϧWerI*̥Frlv<4ZS=A`L;{YX-/g EN罇V1m>ukJsw, ;灯,(N}a( mԅIC` P2@(}bfnf)=pjFX'2,:C3Ia \8cqm=kfnu;ZԒʬRd>\ &Nwv' 3:<\{ex.fۂ6Ű5*##T^^_Xj,'brs PF/Cm/ aJD?IopUg"6d* EEBfhQ+yYX/tZDrnG3¶),2"!h'Z.Iu}`EXJ%d1oKL6K]Y1Uc͡}2InMx6k5r[Rxpءbf;3XTy;t)+)zSJ_#͆Fa 7ޭdSI?.Z#b Vt.`ɧ>  nk9Y3}Qi3GٸKغȥujVdO"&K(8! daF́w$Q04uk/9Smr b%F/U wX߾h՚g] OL4瓤Jw}I"yώD'1[S&3vTm6L-7ژ޴"G $~_ʞ\)#һҕ'v&·M5}NoN#!fl^sBJhO><t6<%IAH-u:ĺ(+f/ҰQdž*/q94V~ڬtbR/m39V ⚉t~D֛O.DyI0 s7jAF[tvW([~FvYqͪi1{ KfCM3_ms5!Zqncjb)pf (EL>Ϫd+cQwAH ?XE|] (/=cZ9JS٪٥ -k)>đ 9wo[13yͼuD KKWIȮ1neiw%'9JM!Y̦xl1҈āSO%ھA cw G?ЯcXKO֜QgWVʦL4["7y( m@wp)n =Hq\}{Oa:?WvpVjifDP#QC KI1BS&SG&}pne[ s|ZĘQf}H瑴VwצdKdY]1F,{SppVye I#yu'rSFȐ նř5΍:g,5;etW"v5Ƭ@{UIni8*K?FuE*E5`.WN;M_(v+BZzH6͚t>h$GG݄= `5qy6Ę'[(Cn"8 HAyBoz,)e|z(&[]QE6JrLNZu51ٝ4U!`'vd.|˙Hq[M2Έع㬨jpG=6><̟/vT u>5w;R_?'"*tl"f,mALs*Q=yo"|z 0Sj=&Q)>*XpfHs>\'1o>9趽i.XL5=uߺCS%S|-A)qY E`z&Ј DC Aodj3W3BDJbf_֩r;:Y-566hڮ;D%@ mr2?rra]P@Y&ԥ:T+&m{G ɾ`3gb -}I+T]aH"2b8nRރO~rsrSA#]jT,:uB@qפl_gjflR_yC)dàZn|_3[|NJ^=p`zK'7F_ɦsMĖ*Yj{~vMBMEц1_9?(ŵIKi%ۙ.(x6Hx av\TnFiAm g2{tj}M;]fbMEbZ_x m?Ni|_v^eX˳ARFjPEC"TGOX؞hl ncl%x6);c:{;( 2(uOs2GQܒO-h@' 7iCnrz5WxQ"FQ:bݮkž?:2sSh 6BȜB v7t1;EkcAyy(h.XMC7z)B^6¯n7⃮(m"3 +ʸüD+u_Cx_s;`5lwa IӘ &'?׏,V \qCx|;. 5۫;zumP従khGj{^Be|&rg9qȯ*6bdi+cA;ڧ)qq*ۈSHŊP!$%X:JEK1E+QV=/7 3aQK|YuAy.wqW;(0DoQDbBW K_+1@3)kv#=j3`@? [NZ c)>-uCVUDZNFkf2=:^ ᒦ#=KV䏐zìonZϣ/@y6^T;8," R)UU7^`R!u T_(ۘU!nj# _\3_^>05taθIarvP@Ha`/@OF7Mfwɗ"@=K`9P.LA vDݲ :'YxFs#uWn62JRubpK㖋ƶ|=*S;0pPXљ3AcR^`9ϥo Xw$+%đzyEoY::*mwE>j.s?qӯ ꦈO֧z2o&fY{D.ڜCO*=-7W(zh䇊jooI]mmtiIa}ybyc W&.Q3T nrI/ OSgFAjA :ki/kjC9RKhgc40%Vb3Kov4Fd_IpURX0G/)`4n٬Ɗ<Ie*  R\ÈԶ1m`Z Jzl5_z+,cMDdi$;9ꝁ=#rF pִhZeQD0 YmonNy1j/ކOYq8XҴʰ׀ qtSm HLܚ/o5k9J2B%d>ѐ}<Rߏf),6|Skx";^ꙸqb{6m֔C}G.Q{=~pЍ>Z8]ȡ fg4O)*$a,14sŠ +y:{P KiQUN8=IAc:R7!P_g”w| j6%?~&ZIp`ψӓiplf "B‰}¿ZnŸ' /95SaqcoN7MVߊmHR}_x4MdL_E(NI:Fۏtc3;f%0qM8r`)LsW &HzThX :8" $/ xj H>HE֝Z/ڀg|9,/p!E.>i-) ww`;,ɿ^(s /ћ9׺V>7H%lG@Qrx8YB2m4yqc5[>1~o4iv"#Z28l3U 7eC"ɲ,mDUG!.J~boSN%;0,s~U./êD!>hřcҒIٿ*AN!IGKlG;A\R[:f zy(.~¡qr;srg+?pnSd4Eug^8ش!Pw9Dcw 09Tɚ:?\Egv7"k}ɿu|15FoxaNek ~ߡf]H۱:r݀VDo<{COPP&Iȫy->Vgge~S[]ɽS앵Qb2XխܴZG’"3L@͌3x+(c_D ?<Fjf}Z˷]H1ׄ* jxS c|v܎;} 1 }0؎uS A8[ RƮs:#c2Rн|8R׽7tZ$imBMmF}Ӿ wB\#{{]!qO l Cˏ䀓܍K {/$*9 ƶ!gJ?\80 aՔ&翫RqTLK.TL|ޙC?=헮\J<\FcZď b|Dwܧ&ǻ iP܃F3&MQR+j'zDK +g&L6SZJP$ %WUl4fqwۇsmVl0kDJEg>lf8$8*qGf.s޿fsGҁX$1^M8bp EĝaKBnk>`2Qgoӧ] -ckhR#zw^3~=m:|{FJTr٣u@n0R;8$4쳊+j?F}]i^ǂL R ە2+aԾ?  Gr `!+$:F~H&:}Xy6iמtlIfo%*]@OjcOEwfg{h үIVFM"/y`L} 1pZ M"bgS]YL30|GأuKҖH,LF >XυNW~Y?wD?37JY'Y N?鄔5v OPwqfQqK8 l.#7=*1! mG}eSY|i>f8=-yiCr3Nha緄0PuEOǯZ#'.8˫1x%(iE[~.RO0Izs SUc^m[3}WTw%GdEɅh'N!ۉ%w~=^xX..Sz4[م2(⡽~o\\x\)n=:f?ȏ>TKʩEL\W4 %g8bZ析E~#9bNprta?IߣtϢ4Q#C{gtbUp=$PblIJ AVc~r68Q(Bο^W*i]\ApYqJW>zo8y-or[pZoк֩55G[;x^/cB t :lX%uqXxGsϟRR+*z/4DDO:rp- i B>O}0#;s,{6ޟ]a1Pزg̈|XvChy*xOQ?Ȉf%ڌN[A莽kɞ<=֕s%I7Y^3?bjHH=>:Ѳ3H s{9R;jTVl<r K;U"Zu(&67jη')x6ԮuD6yge8hZAJI۾߼Iлփ+~lwFPSϺq1tE9n*ԧyJǩE$)|JmOi3,N2܁S\pVvǃ{ԫ— s<+?q='$|O2Q|w:זP|BP ,RB-_c:)l;Ipz%ScW,Gz]$HgЙI $ә:B~s)oTæU],7n5k $vI)֥9@k4 @CD(wFqN:k?{\LA쒛>7j*/քlqGO^q3itqIerrlQ6*z_Ϡ&kV /MZ$2lHk n: I\bq&jhL.[ 0m͋$q D: ,UksE̾:H7"aTROtMl{Asnqcf={w 3 4l#8,tZ@qڪХmϡ]obX aP ɉ/@JhB<(G=N; 6k>¹Ʋ8?ާ*ژb?ٸCO֦7^94Wxʟ!~fONTU csW_AUEDd N$ YѝN]`ʼ0b}lEuE4w` y2NTRwa7" *w#@FYzA5c'nC17QɖgOWX=͎ ^?zro0pĻN|@ZO'0g/+ogk8:3#}orayLX~Z]+ ܽ¦d^YCe78lzV%03T(qZ.9oir8'{~_lo%o ae?ȯ!O.BOz+G܊NHhJTUˌM[5{BD~&>3#e9htGyISQ=Pite=\pL8~ig+=l q Gpb0i]:p ,C1!3OhQ/cj+7$jsB+ѺsK]  lX"W*Pt٪9~g(1)yϋ9;9#6勪@l&_3{zzP7/u*3Sjn"/CUpxۦWBPMp,tWxRKg"3pE&3ឿKRR%3n).^ڎ'kOc:Dz P<}_JrzѴbeP dymQ #&GeOsutH +TV48[^yDֽቑk6\D j gE jj( Aa a5Pl&+:n C+wGH,ͪ /m1*7ȊI+ 4*-jLURύ_Î:a6&Mwi=U8`{A9~To64oM@[۹Tq3*P-KnK(g:e<Hް)6锢e;fcx?4p_!ŭnX$0N)|s&n8Cnu2b,Th>+WۻQ)bN̻1E }UTE{ uH ;sXƨ\+?(Mlj8!N0릯'Nb]sW$$مX,o\NyՆTւsdN!a kh:u9콡3{ShKH0F'$ԼqG2_V^rSnLd4 zi&+z)~.Bذ!DŰWaH #ײZA+'u:8_LA~HeF9S.Z0;%LJ,̗$*L R5r{w&D  "XePϬDQUy@w=Xěk'0vwy`A*ˠ j8|; f! ǜO[yO<>*k G)zbw^Xs;2r5jN)VP^`[$MEB!J5TW-Rm v2"%Fbr}FVs|UfPk眯mSh|t>5L?*;s^>AG-2cs NwzrRbT|qg$͚.kf"UØ1wI, H<`ijOhzyYۡz_級y#*6yIUx5 1 D^p@yρN-+JD{b2p5kD<`NȲUJbyTNGu UL7Z<]-iU7g)r^$J'Ǩ?iLZӧaحMar?0s^TVSķ1TvO~pwM}F쒛Aӑ{ƗS<3t"OWe+%!1$ 9BǠu,φQ AG&W5kd>Rorm V+-r_sDgi+bibb@g1!B#sLWx`s,̓~)RY8e̾7"JT(ﶷ#ͳT۪xV+ñ^_8*ηIeA,!Xg{ѹcxg\Ckp~_ WwVkD*v_~@CWaPB?4h퍠}[a* E\&A:i(5H{Z$cv D3idc4lTE6]/D}V^Y05P%#yw^s<(cٌD>" gG}0 QF.ա\&RBm0οnjQsuzOtΚӝ!F1bٽ@o e|Դ "Gkl[C_/ Tj).PڥF~7(w%ȭ9Q>`ϸ(Y:.?ˢ8Ñ)<Չp5U.]ek:br,ACvLp~PØ s ?B& G쳫fD r1`>uFJǬ~sԓۮދq㌶֕h"mZ/d|=9dS||}o:uXˮc׈XR57#L'"D%M.1~+I3Cg+O` $D)@"` [=Q$?;ΚEW}DI5b#8j#MD˰J<N"E-Lۢvɮn,)ڇPJ""\X`ėD|LXL 2@".QbhۚʸIP- |#@%Dbu񕄯Mi; ~{Q b` FsO-V䢃[*|gU GShn8SH8I1 nV&T&)U +,DC%X\m{#Ԑ.X˽z=Y )$B}b@ 'A\VN|Z7ynhӻ)z|6JkY?nUH-JLe ,PL-ݒ Q/5s,{\3=+WgN>!)X ~c[1<@ǹC+B,DգlDþ!Vg%g8'>D cP,m:-#P*ɧ?h{_@SԹWtL8Q^h_!" μ&q2>z &>^GlSU`JXz-dp 3-ԃK[[08)ڛ7cdCr{ϑ@훉M7g532 \@Q)aY*ǟ⅞sIТRU<txLjkQԼ(vܴAyyl>zXt+CvRWK*¬iۮ #* a&ci2dRҘ{F2_Tdۄcs>ʨ[99In,0lULo-2ZSc|e6hמ|7~HSVU@)$ṵ)DhR,Eɐį@ʉhD3Hm0{( F$'ˬɻi'+uQmS1ĆA|&ӯNInQaȑ]Fֹ N^FF1 tib?Ysn^q`m#.vW'Xg.qsu",gPusrlF\T͋jipd}4$FPޖ;CU䧘\ŋ氿p-^Ȳ g"Tb`|y sGGyuvgyH2L86<|DzV!#x}/=r3XqzD- Ѭ_O5 w_Z#ƆFE&]x)"6,Nd|Tzc+H۞.}pNaidM ܆&;϶& kQn/6gGɗ>MpzJG+oT`yK\нȳR @^@:Fz&Cݥ&Xz1HBn͜{B H[]f{0`Ly?mxgw7?t+[?z_)¤'XVX-o{OӥyKm3}No7qIco Qax~Mb SBfgUl1/q9/.Жu~meH؍I2f4حDA+;:g-ןMV{aq{ﶽ(:&F4xCXHǰ- d!k Tri/bQq<߷/XJ05]T/,o.W}ߑtqTl+Hٚ2uҴ/0|I_8A7IGyw^An JJe"_gU6>ׂIOA@yPNA^7SZ6]>.>;{ vD8iS.)'3ʤԒ$dƏrlkJ/XL8S*'op $;įx]=vogSM mN R@KBݐgxG9$/=Qp0 1K.CHs?:>K[jًM=5~>B·SЏro b6,v/ vYc'E=Ҷ {|?]ezN0[i1e8_\o19(rڣnͤDžlnG4+X.>0h2߽<~][ҕ4r꾶i%N[iH<nZ1Y-T]O J#z@?d؊t CWi.OTcAzuyq 5UيeWY{@ϣg ;j$˪Rbu Ɍjx2%^?+;h1_z6:5 22 A=4m\ff{Y";yCg^ztpKxGxVbJ57b|xc27Q zJ Bz\ wxf@Q E 0V zEĥs&Ɖ ڀr-&j'&Gd0ju~ -p'X&N5Q퐈%⨇r(ƍIƌ'|Σ Xm6pf62;uHm՜Q^nM/&N2'T!1;͉ QU۔Yp/҈?`/Y`}9bUHNimrIj1q\,D]֍)\Ba{6832+ wa84 {ɺpp@ΈH# ܇rHLfU4?ySϻ\)/>m;5|`>*pF *D#_Nmx7@+͝^/>W z.B{Fy+A'**TĘfǡ[KACzFhIfMz9Q Ȍ.Śk!g,.@e\ 73k$EPjQ*I䛛 tFuVgLf%2WC,ekMo>vV#ni3e،#kwǿg9/CGHS6 ]?h-o^:0ݤ#kjxvׂ]ȽXZ\Rǁٽ/gpw=Ѿo#wtd@{L[Ob6^vW,)Nqçrm.DրM4FUFu:R \?o"Z/)\soi"z(zg˻ywmrkeKB^ d8Nkqs[#Ӑ 6lnxv uQĝP|<#N)GV25cҞUGzO1Bqbۘbn!?G̯u5g]YY$7+A'ss Yakξ!O-SI]~ ,\5皂i_SR pJ1kLc묹ByqȒfGD_gEZ]0L)}6$Ӎf5gJJw_s}dNwɲj7֦E^9F֊OlbX- Yy.S~%AcLV,yfn TE$/L،H\v6;/+!B\,J#A,Ҿ}~IV@=}UǛJ_"#g 12Ӝ}r/%p<ov[ǧAdJ,3.,E<msSq)78+O $B]Q>ojլ4a>GI7͑`UZXMЙF ?L>FZIЂ*ߑDC6ĪL ̭f>%$viʊ<#n^Ir>j-yYjBձc-uZ8joB}_T,54B,ḥ\Tx_;mC6Ɯ1YAऋ?oΏ605J9TK~"~Q ]Jh(x >̟ǟ嵏[ylnFkLuHFYɁ_.,O d~TlcL2 Mwq8qjt.̸c=L'6W)y 3ϲR1ԟ0KȹQ4 9j- j!{蔹z-hLv.}OjK^6 a&+'m*G lz97Opf|²rVg[J.:$ToMv)!FӖ)H!8{hWK*ai\G^K\=w~lfzwk$boc>AWTԁǎZNa7O1w UjrTu袮}ny:T  oZ^A&zOƜ1U Kt 2o_U_ȱ3NmNe9`̺Zzޣ:a*.p_hNTutی;@7&߀mGbh7Ե|Q f,=i;=' )v٘WkG: XAJeD=Lon -Bڬ>9V0[;7@`"L`=0: JISیe7dIa-C\5շ]^#y =1E]U2[D bAAӯGv&*4Isn Ϟ])3f2 <ؒ|jWA3O^Ej 2 fC0uD}X[FƋ[f6HDZfTqfL< WxL A 88[ òp٤6Ԩΐc勍ޙk\2s |LcӒO]L8씒G _CHt5CYՖNhGzմR0L%jɹx1L]>j ((U9UDhekߍjVKzrtۅ`K/xtez8Dx|[ϊHڪh֝}h`a Hh5;5aŠZhja͗tciB6\I͝.3#-C}+ʖӗ p?.lh..oxxf*{4Xtb 2&c(6Ja< Ðu<4Lqs 4%TOu ʾB!TX_Gm[ -ȸ7 Dw]%hGIetI~r4]~[Ƈ a=>Ǒ!yj>]^} kk=/KDVX"ˈed.3uQ]YhP!lO=Z$HO?)M-%F{ {)ICի0~3=Iv3PyF|`f0DR*]t@)K2&\E\?u,!%DFa L7ȂQwqWM=~q~fOHhh?UW p}|e;t)**It9pFOD};uޓ1eLbG6Uu:A 7R4}B7ۛZP()3֖TN)e ̕}ZG0>o JeJ9*Vօ!]:Ñ f]~94̘sw?n@B]>?1t`,B?Oã-|*ȼ2p,nGsBq~=vׁZj&68 /qQ oG?]k|u,- y59L}OcR b߬dMiDžTYZnl l}X Vp[ߴ#F-/D vߏq TdFHp4`7F0Wn⌳D [\^9#'? ǝ67!0GhB.JF3Ee/mx\]r-H[:/LR MM*&NrHvKUE[C|r^o"T - bʃK#DFiC%'ںeIn4ϏkkķPp15Lm(׎;<\ BΔO|23\Sv߲! лd+u,`OeprAr/PK qFbP^AVJ+X^;ޑl=a ,(mte|N M8ݻ3y\&pk<+f~Uʰ4nU%( f -{}hrfDHg{6YN<Ѽ AC OC`ZBÑ x]Aqd*Ҕ )AdUGK*UjfVt؈ yK}j' ;@/Utm5-:Һ'/c.D\Ci' .pr(S+\yt~^>JQ^k89kb"~_ye50U3`4(4Ɠ`Jd~<>agH;ZmĬק!pﵽᵲK(Ȑ>' %!]hmwɯxMWSV.[t4 HQâX+_BVáXc[Թ+^W!xIPV`2(oZM3OGR1_kHxȫFK(9=,?m40N,:/ivgKY`*3ga) =q, +Zbm)"6ň5] @1{w;l<#;6r! \Fb]ŸEFtO L#]E]rَ.\Z8,aD9ȴSHYtJgHouRds >ȹdZ ۖYRVnB1q}}'Ib0υ'*/u7x(TO޷< Ĵ!Ab+ҶcRf+0{Lk-Qda&X6}n^͵Y7!,f; rq{o1$'mA4Hz/b3>#,Kً&߬-T8LGYQ)㦍E\XwaZPÆ "Z-8 ^:p8L,Qf47oϕO/ܨĹXOF+H55.EokJa߁ tńou g1(+MghSP5:1am?ӶR3@_7G%8 C*c%g 4K>~la-ky8._L*~m&CRQWsۺQnPz27NbS^"fs_,@MLYC>&zbDxbU&'cjA"^ihEW_#}|`S<JAӯ6Ej@\]M2[oXjn.nx`M)RN'bˤQ2󠏕wv)JƵ@?G0o:˲^e`cA<\;2@Z"^ QEa?~~#4k&&x$ yZŰW|P Gt ,m fjZ^$|QrؗjRXӅMƀqvhIw:xPzGY6` eQ5YBƌQ+ہ$ g5EaUkp/dlRg?5Y X"yǩi]ӥdl~1B mP9KPDz">Dw~_D7=F˳֫#k6zh1Awv?^V N 8]`E(e͕Z950K}~*6hL0l\@E5of&z4{Z)7^ (ɋ5nNN;' 1ELRč3ٓΎօ@0EsWU^6gz-.n) y^@Q"Y+ŏgA\bch\92# YV8btpkf&uY# O}ɾ~KoS&؉0rH\.Z jMVxĊ ,$B?75jUA)>m 4WW>ܔ y{ ΋ qxnw!cl̊Ο*P;ߓPWYi:_:$r6'+X,rV}z*n0yD5 K4/Un++Ƞ[ƧN #(K;^-=tFݯș&POl=~AA4US}<DǠzý, |ih,A(N/*JX|XHT־X e)#t[CSQL6ʑעZNP2hp1dxaoPAQMebo<^g/qsp 4og #y_+r FolL:~uJgߩtoE0CV༁>϶PU~*Ya6 ")c|i qxP|lX(t55msˍ.wL^5 Ф @Xxfmkg+@Qs j$de[abUm!m^8rg`:vUrў^Ni࣠yg#U bb;8F:1KjĜDH}0Y9u1?_㿋P5A7lvb )NRu^-]D- ("rqZ_rq&j;=&*[Q' w&|  tzOٟDoݻzdS$IHm.1uTu'=>UDknSC'{pȎwv Q0p z?a’+ {2m 4KbZ0 gӒ1*bl#?`ǼBkMlDd2|*m!w>":sRɲh;o "OUVIVN:Y*f ? THV%/٬!O6?=+4 Uc}/́Kp}z6I,:|XQQm_(G{`j;b餋3b"biXM//`0TٸpL黔/hxGZHU7LY&?Bq/riԞ#n40*O`,PLqL'QMExE}8h8E0#{%vʀת[k]N'9%֫he?¶N-\C&ťvagAѥw[~w-W)PC# s:Dtero)poR11Ck2'i)^\BZ1Ռ̘QU.}NBUe +s$Sm.(uکZ~ƃ!k{֤fyFC -[℞|%Av873'Lqyh8Y:HMdt~(SqTi ^-ĜGt/Hj3"P<޲$uV?GL=#'!P{WF,[%Y?]Uq+ɋů"AS`a6|QыTӷ'J>Q9*M$Z=QCl0{€P#K)cpR679^;/>Ugb:ʸHSeYm}6Wb/YË9bӲkOon2z0S 69J?PK'n\:($Ɲ6 U`50;YH1-m9{f<%6JZDf&՗M|a778s*7@%]| Zq@bQ؆fQ޵"B%u`AwBL8SHjW]"'$)p6o֩_29{Zc0o.$UnK; fΧ.RrEŽ{JR+Sb(`T>U/}g]ҏ~3#cN=!ȵөТ]uFA}f34/q IT`o9UjcKhZR{#iO.#J-;,O4P߅?ʲmbGVr\@4$4j4TCd€*yM2R͑JnRD"AxcDtC2om59BZf)_\G..V)kۃ;O t= !!̌anA~P#r~lj^՛JaCA]HieVy){qQ"52V$@K%|*)`쳮B8{8d5SfeuNQA#u"@3#d?y}gv[}DU?`hkrwTq^ч.䚛EȍLYN8qf܏֦8]X!؉S15<^;>܋h-D&Pld.'^LTcF ]~>d&TJy'9G.6ܘJyT֥^Sr -`Ë9i`ċ̻;뇛7GʉiX? ?w]Vqrn'b7읟b{v,vyhjӢI LEmڑ$?lΞǹ8 qm߆Bd!9f [ŀD+5/Vtس_mkKq7K#Hg6)Z6niYI.%uX׀F;V9tsmUJzM %(S"F\)]r"O~IJZyhJ !qq~'+LBQJDCvF$-dqKqt@U6"`K?}o0rVp-]csogBU,l$T0bM@1 8 %u{*Dp6%J.^ I['.K,a~aXDLTZ5Z9idS| 7ŦJ2E.p`%m{+Pgi{CPVP>:9c4Tʐ3wt{ʟjh)JҡD" ,ͤ\`<Ҫ0KV%E.$ٹ=LF25$[d{!8Չ+'H`]auNԻ\ysW}ĸ~G f]?7u=c_UQx"::ZE}A id&s޴cEi WXLw>ρ :J2DïC!cj%.%c-֯] Ӗ`!x,.m%UX\S- g#P:G't>I$FFTx_֚J>K>N7Yu~+ Qһemc%v1e,C/7 Pe(&Ҡ)ڡ(VM<}SC|,S/2h>yxż2RS,Hc)"Y(#Sٔ.#Z' wn5I௻eޙ:ݵWLTщ'byTk_xZU =̃yA!ITy׀ }֗ga6h AE3rVeBIb1:A7'Q㬅:=g0c^=21ϲvW=FۙBz)po6L~o_M%ܟ B@<([J[,I/qLP;N9ţ*I5lAf^.x5\Z$%xCղK E%$*h`6~X^[~fM[?6iԑ{̓Jo$Stk!D: 0e]h"|pQO4\,'B {٦ҍaNb[nHkNj -%* cJܫĜp1[mxM pBvB@P-׷5hff2OUz,-g("pZOh5Ÿ{c楘 D[0[8t+ei4 l5YdGt=e$U>!2B9M@/JAK-J@S>x3O*iX^߯ySHtS/PZ* >Q=.X;;h ^@&W6'|sm.䏸:\qʥYSQ(/~f: CU|ӫi|I<)֟1t0AĄq*VvbJ䠧bڙ䙲7.(ǩU~_nN%(JWĀpr'7?Ð^\[$3D$P,dʷ`VQKLiqR$IbrFM[t=ˆf17~ UvCJU[/e+3c)J- cߔ23$PkpI4(2d A.k'jB{k#"߰v<ۙ1v'p:]PN 즴;ȆN1DLv=jCmjB6ECS*%8}99?ҨgJ\n e)TG5vZu:%:4b3Q˂Ut'hK<"03MO:#LX򺽐Rbf=u6xCIɡHEt溆z0jѮzTt1dF֨%| WM#qc{uz84iG'zTw?gQkY*H4xj"uv#j-~VIfLApw6Wj #H# zrb"{icBeO+mCuDc~@3mV9K~-Y:F֟G9VѣLL4{˰p¾@!DT{!OŚA%E;% '=ԓXU咯oAwMa$ATw@1$N滴Iaw1y24"_s'dCx16NwHChNO'C8) gΘΛA4\}Bȍ@'1([1,[#_^MFCjp ϡsj{j1` ~f-1tCoVXǓ2ЫE[n83B]=V(әI.>M.ۀ{aJ베VlWPSB( \ߥ>`޹\qP5.GND3Ý*0JCW2  r!Nc 2_C& bh LB:olk?}0jhZI%Ū:#\+ 5POg{MsxHzMsXa~)0Gz|nH!5r%ۡ09csFzVm*yi#'&!o\[ 2(T"}^K}N~Ћoy !v$+0b8Rh" qMq9sav1+ge".,TFK獙M7ƋX U&2 ( Z 34x HY)p2dvWrhs=$uDB&[rHD tl;֪!to%!|I&4Y]ƾGd]Kk MkHҹ[k2h) o.7:Qqe2;No2 &t'i!b4Uo^׍6%CfFRCI 2Fj~Avؿ|yF(cZ=+RYVF(#o@׬jR[r[fM,srqV%C֡v2辰հO'wjAŔ ;X{ؐb6'i 4Rd5vZbTGzn %P}N֥L5ˌ-w4w)z]2<T辌3P0jӗo;z>EC"m=~NB)_>e8| 9 -]ϠLntg1Jѣ24RZiעjOHZl\=} Ň|`[/}:sğ3*zF6CL.%Y̻ OE9A^A NB1,Ǽ~jB͢gaMZSzUCr_{6˾D;V[1o:!DCiΑzEnБ'$_mC 5:__$)uoSy=h"m2VY r."YGl4|>[98C9z{Q*|(@Pz-1dXmDaWz2%-8i?h﷢/<# Ny9لQd/!#>g8l8)0R$q~>/DIx$/@CA߯#g^g&<8*@ = >QL<`YkIgX )N/8%:2onHbpA bT7WC~ړɠпW)[ Op'xB֦ 7,m?H賘lXdWXZK8]+L9 %q+aj dАqW_2cANjҵX7DHFwp!APDH>=KIԮQ?L#JGgĶJہ8VuD O؉o<aX|8Xۭ`At9ON1  ѳ>L͂7V/VXmw凈JZؑu2t` h=FG]`@~ᅡ6 fU`KhV?8Z]N='r̡[vb~6}эhʗQXT^IAP] >^yΛ )s 胕R$pceLu0OUi?5 \X~#BYP&Qe -ʬ#pos]+x'#fG&Pv%}օ9Fl:d$^ U;-x1ez bhL;UkV&NsyN IVmHUj_sM"7_:1xƽ5b<}nA w>Vf-*IX!Tâex$x,9̦؇8Z}gR[+Ԋ`pJQR\HX;dB\9w"^ gĂq?'wB,E kTӓDE_P(^F S-EyJ( f- BJZ}hpս%0?.;1vI>\ np7x=gboc^\g_idl[w!ר8x_^uGUň> {FAXle=aHo/':;y3f?(%D^^8Mbd '6lGڎ|myD;F;Tg5tO'DQQߐ5d$߷ʑ+t1ҖA8GNJfa2N,5WIB5ŽHmm]i3 M&AP o>ŰÏso:4&ג7 ̽/_F:\w -%'n)qb@V;X ˍl['\ 80=oA'<=+|zZ}0IRȌVCۦ@QaXG8A>h€ŭsԭ#C?X @Zgc^M,\fin1OsS,mB> s rXT9i`0UHCSyJZ[´xeysY5 ܧ;:z=s0ӦՁiϨ/(Id+v>Q5" ^sQۥYl_ky{r"%k~:{!kM8"U&Su=r,)&Q[SB~Y3-L4X J׷mw9_00Z:b&@ dnP׋!R]ҁ؞WSg~,#cV'P&\:f*B}+F}㵑LNF~1Ҹl̐ qH`W/< ,{CaۄC-fGM=֫'TTl3=_kUxAK?)ZDC[0c 1=0ٞ9Rk&U bRMp"8?:JI#J}&UZpA&Գ):wQNNsGť#.\9yD"Y(TUd<MX>+`,^ҏjJY~()>-GBގPO\K,.^8Y # $bTqtl0Y~ 3QUT1Y<7bgoWiDh˵+j$3G4O ajX씯b5m*t=+W6k8 =LJ uθ guߴXF<2~(bvDb7֙Ӑ84.y{[pMQsr]֬%"͛|nW j YЅ#H\PxJҚToPtH r\Gt~7/&qĉF/nuV3Ե٣S}]qxx0`FBHkP{>ELx6'wsg_HG\b@%|ץ'/LV{Z?7"TW ]UW" ͱasl \J*Οˎ-OZ4@ h?\Pc:_eikwx` 9"e+T\]UXF`H%^י<_n]t1Fd*K`y]+J) L3\4L{#?;Zf;u'Wx<2u:ƺ7b;PrŐuZrO+Ʋ(u`d*WTP\:B(D>AmXa'b0=FhF󑮕Au9d&1}%-:s #c#UCa:"ƭD Hj6DBz'Xg]HhP ;gdܷ@XҌ.5d"$ІSd/`=0gWg&pRqT hǀ Ze]V(CZmfjS "řZG()r*)LR{d\~FU0.`B_Vz)|0N1\. ϭ_|\![ EbF.^VQ>q)"82'.RmWrr+'0 ᧈDzW[6ēk9eɽGző;m/5"^E4B%iĮs$>hITs)bYŀ{dx8WXi#,1?n F9<O ;&{jXr[kw )Gc aK]T {R1oK҅t3u#A~S1Nȍ}ZI8sh oZlwo>;8 # 2%`7G< #'=5SpDQstkOsu[)?MܺJ z#uV`V犵;!TC;ӨQ.(KsfH I|9܉>E vrߊUe_+"9u=$~-uڷ.w^fnK'.uݛ(-\+n,Ynfjy r4xM \5rURZ»u"*rrX]^EZ怒~(c63 Θl8iX*A%O눥chF BL罬窏vtg3q3^7oU#hO-Kuubj 8P\SȆ΂g)P@䞓ޣ-Og{0,&'}k- H:þ]`<4D#Ł4*{aKR&tiF5f_)OqG$HՐ> 㙁B=}>IK<2f=OOr3K,ڴl6 \NIJ|A7ojb s$X+1۽]B%xEX!r1-mCc|U aٴA16([+yy&5 QfT7(vKS:s5=75IJJ(gRNG/@ӇȮ$c>).F0eE#p%ed`Kƶhi6F|77C')$)ޱ10XTx]n6 r))T1EYQN;Ce]I`sٚTe#h3Q;(GS&cƥNf`JVu\^.HN !Z7Tfbq86$<nZkp&fh,XS'n1kZKOjB/3Ј2{Z'ۗzzMI1-0˶O*Ӝ홄2|)ڞŁcʉYsLﳛW[0K;݅2 !=]G' i~twɮh$(M.qRcwf,Sqsֲ̲YEbIY,\# ͝Mc{Ї  a, 2\ 2xr!H?*'M;nkl6YDŽji\\ `0vY*SAzΧ UzV¢43~N(~$#aTxJ"}M6+DپtCG$1uᥟ\1a8ZU iPXl*f@1p̛K9{(k3(z$/s;Lo}_ _9S;j ˶Zz&zDf xѷCBTUk]3@u6Wcu5T!dSG F4ͼfl$l.gFjRV2ͿdNmN"n_@6%;u~PHp08E\HyIĆ_([/L@?d!nr# l9AD=UaHoLvXod=o+g22sVҙ٢hI) %pu03y^ E/Xʋ6>VUb0b]%5*g0߳7rcMj6pGňTR>l%p3QtAKC‡K5qXG cc^oq9 GThh2cySvg;:$?,:${ gg"j,OB{UJIC7h1O7wC'mD{E33푫2PB7k[fϩ0/>7vԨc: *+K*0,')iP<(+0`,\VԃF,͡=R͕ZCiV™iM.՝FK2Kl#(s Jg'^Ÿ!I-ɲ=c-hRJqxjuس)Dq9 s JRDh1 ͤ5D~ [4M[1wc A|TVk!{hsHy-p\hVӔ!ºI \O bzsR€NeN'`.|?ӚfXKFٌb5L\|;- W/:"ZHQӔ3u]pBU ]n1@1@YkN*S#|o|]tC`bCT0>T̸JƻEowc+夰&e2Y,ž);\7+[%(ޥ/dE6$ZI4X{K824>OSw+irJr\AEomG&ڮk%}M 0вڄ* Sa/U#u/;5vr Ҽ(ś1_>5n2< me"bَ n>RK|Fw\N `y!sw[(JB^|z H=]^Z*%}x@)Õ,?n1|)C^ksu_)?ފbN𗨭.#fyWi܍>(z@ϘsZ/]@Ywa%%@.KgB6`OчҞ{!.|s\|7EEk%2~E&K& +gL,av ZhDK)~Radž+s,x4Hj-~L`'Hd i'Toϰ\OT"'W?SЎ[o,Ul"Z;wCD*tW_R=M9̝cr `2oX4ȇÁpl*Av/! \.a]/-xCMIj(WP.7Սhhڟq FL%Z~?Px o\yb7Nί%e~޺*{ E ,Ojjt;os.'DAu 𼥔E;Ủ|:Ĥ'QFO>X mlQ4 $)^{N\o Xqru54׫ٷ\b{/ܴ}բ)8##9C#n 諢Vv`6deIϩ䣳ǐ?r鬩,#G.)P-"y  ׆yM^7Rv阭[2@8͑G'lK|13hE>vԏ,W#.\x>dzp}D| \ خ:m${')C)į/6 U*A--|4a c^cWKlGOA3Ы񞵵o[ÂX ᎐BbI:(0 C`f8t a(Ҩuz&d`Aېu@kr޺W wDݥzԥKcϹ&@ D; W"uQ|s{dL B{o7Q򴝟'M. Ew b|QŽ6< =l[Uit~>6LRyfΠ)UM5BƀhT:)A/e[P_nOm)W^]qOi ho=NCu~ݍhvLJٴ!}ӎ/JXNw]"?rf y524.qSvb2$ϵ4t`vS>7dwĊs,?F|l nBt CƵLVq'h֜Զcx}tw==MbFAas`~q xKl*|qkH~:@fBc^AΌMR]|2GUx6FL,*gj;0N*@@xvs Qu4:ׅj:ÜM Wbo9.Ftx[u"w}1'FTKa "+l|="fIEFv/CقPqNz TrӱHs;@\vPgL>0 YZEpi/data/births.rda0000644000175100001440000001176212531361106013706 0ustar hornikusersBZh91AY&SYMM+#__9p<|dRUU]ǘPу8!Du MMh< Qfڍzzd4Ѧ=M觩H†L!OQy#MM6 6QM aT=TOT@OQad` &#M 0LM&L#0022i!L 7hihdL#L4`M4CLC&C4 4M ɣфLd$DѠ@ A@ih=T4SR~ɣF2FC LA@4hLFdh i &iЦCOS2h@hL4 4zC'1hG2 #4&ĻIu,@G*У$I$I$I$I$H %)*m` 0` 0|?;+io,SfzRI$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I<.Jz|9lH<’cgHz![O wo4Pd5Uw> ! ^0O@:y]ǃkuiYƷsgvα*|C!Ygt8n05̧߭N+cҪRaȹgUӊ<47x-9-w닥]C6Lx>M은~ͬ/ne/owS}KH}םm?̾MuůgRڋ<=]wwWyϝ2ҳ˅#8ټ\NUo.} qxe|/yI9BcYٔii2LFIrnihZ6*Z_&` W,PUZY-C(q$2ڡZk[ZXs/Vg0Uaڴ-¼.zT[+MbZ[!J%ԣ]ec,T3K6nuȐnd`"_y<Ԝւ_%v}j'=#zV 4u^-[!,fb#ж%1lbV1T1B^hHKb8AP"c @n 8hH5-;Զ'rx% UJ!XB(SvI bFHwK $/"tBBI!1Vؒ*Wt TU17Uwx otvJr;-ǧHj}ҀːKGY.Lfdɓ&L_ӭ ֚m/Xb,,A.`zk71x娔 o ]AL`!|YA1KPR>]Vb"MtPjХ& >]mmmm1r&0ik`y8.Xat3UUID$RI$IJ!$BI%(JQ $I)D^o{]u]333 4*^Scݻv /2$cX ۚg0o.cʒI&gdfl@F[W1Ɵ)f]y=,|cKc4[$kHTB(F9UB*)K H+o?s?zf۾N"Ad*$HDJE"ZqxZ!_qa:A-_e}nU ʴ^A!6gnl"Un+'s Ӈ.Ήeᦪ0rvc2`// SQmMMMNLHZoqrqTRJ*MҥJ&,E$B**%K THjE"OKKgO dЧD61 "KtBBRA@Dy~,PRĂ#VrYLHDƣ:戒"B͌ DRTtcK_>ld$ J2ee2CM0`ٛ.=,2UY-%PVEEgWS>e_.ճl)?fe w5s6_a(4!4RI)454fϳ2ѭWOja,,V7wN+IS^[G[\+5|b 229FUhFYԮe!|O>|I&L2dI&L76"k͈ڤ`gW#tF=頌EJ!_U 5 e`-,n_;zZ J,x5 @ceZ L̔[ASo #hVНjPlS8.9YL8$&D$H"G 1=rAMU`#[8ax~ز͙E} 󕍊-eD#/襻֤ۣ0viٚ4r< 2Z wPm#:O):WΥa0ņZ4ruX.0ʶV`u/0Y bFukF6-gh60NkjJqNPr-kBͲaT7Qݪ aҴrJU8@SH I$b"#At+ot>_BQzq4M;=='P6χ7sCqˡB } }p`3 1xKrRDY:㄁z2?>F:u(2朖'f&xhTr}]f}R~ f:\KH*,XbE,Xbŵ~jX;d2:=8TԿ|A{E'L;or ,*"/`P<  K.r˗.\irƍ4hѣF 4hѭ1!~tҕ+U d c/N^:]+7qց#-nvꅀY& EH"D$8"DYYD.04%`q{̶WX`92SH65lm0.=.1c?6٤[# :6.f1""DҊ*&k.i6I"Z'sL) O.p!Epi/data/bdendo11.rda0000644000175100001440000000316012531361106014001 0ustar hornikusersBZh91AY&SYg.\TU_`?ߡ@@A |{@7POTTzOLMm4M 4=IjM *=@J)hb4A C@hM#.L@Zft B1y Q R&^^BUP͜ %NA41 9(rQQCQC  H)|.z/jWWKļKļKb] t.кBZ-EhZ-EhZ-EhZ-EhZ-EhZ-EhZ-EhZ-EhZ-EhZ-Eh^zR]Ku.ԺRhZ-EhOx#G,HuIZJX_fx eedW~wdg5ヲ'QCyy6b$R:CϟO_ӭzOG=Z4ۣ>8ͣFQVmQV#GޛQV#G6MGf{ԣGKGf{ԣGyԣH=zxsSoniPonM3 M=iA=7fPonM3 M=iA=77M777 M=iA=77077\ÛA=774774ݠÛzx377榙4àÛÛzxsQo4ӠÛfÛzxstzxsSo.͠ÛfÛzxs zxsSonnPonE=ÛzxsLzxsSonaPonM M=7zxsSoniPonM3 M=iA=7fPonM3 M=iA=77M777 M=iA=77077\ÛA=774774ݠÛzx377榙4àÛÛzxsQo4ӠÛfÛzxstzxsSo.͠ÛfÛzxs zxsSonnPonE=ÛzxsLzxsSonaPonM M=7zxsSoniPonM3 M=iA=7fPonM3 M=iA=77M777 M=iA=77077\ÛA=774774ݠÛzx377榙4àÛÛzxsQo4ӠÛfÛzxstzxsSo.͠ÛfÛzxs zxsSonnPonE=ÛzxsLzxsSonaPonM M=76*NOKop.: :oVh<^6K,M9SϞzl ggYލ_&~^fgX{2^Ic9^i=)9,O[Heg6vU;H^o77^aEo5FF=FWC7%nb\"kѸ.z-iCo՗ Ct7ǫukCzg.waEv3qbMe'9^M7KҧQ^˨'y\ʸnKa5~Sy-9xIr/7ڥ%\v1moֿe׌_KoWZu jהa妾|]zUxPylЪ0itKn]ܬO:G|>vTԭ1qV|!^d%AӍuUA95V*y>'e\O1tQloړ tS|a*ʫ2AzZyCG׫?4m*e?oOUL R+ rf?ԿOk}U U5I_U;UCU?i2g|tzU6vf=I~4GL~}g|U4U`kWӌ=0*K2W5orǾ毪aM3W1WfoH٥q}UC% \~S 52xᷪ,Is > dK3~zMFyccތ73K^USTn MHͲrv?hoGsC,$y y*W{_&;+_ oʏmʗjo>|.?*ފK%gQO1_52xŏڛ>fi| &>3&G?\2rGx֨͌{ ~£]l/x^3oGHozf72xs?^Qx1csm?I3IM<^~6(}|$HrQo<35~USKs_{j~Os8ۭxs?g>, r)(U\jܯ܌s=b'LR?HdhaoforKW?Z>3kSQ_7|%*_B>#=5?JOQ3cMZ*Q54K_#Mcך5>Sy?mg yn?H/į2Nj?V~26տy8}]zW?io~B/*~`LM-~3?Mg_f^Q{?~?aM|{_?Sx82 yOy"oԫ~¼(W^yQ*ڛb?oos%_7k/Gsœ4տ+|Uj=fί~Jws?oO^W_eWCFZ54xŔ(W~LɛTM|2x3_)>a^?YAċ|j^by?ּ75[yXs}ja_} \ȿےoK?ɗk~0˕/7O_SUߜ|~ۧ򣡿/zY\oJߣf~5ףR~I~U?3IeEN^E>70th?T5_򧙟 _*h}ڏNsg/*r~[ ķU.R9/V^F}oO1slċ6Un)HɎ{Q.i7·˼?jaL\1*<|>,٠&~U_ 5O]sM7&MWܼ獚_ʕ}vqQҳq](U~}T~K%O_[J{GkO׆|lƷq*ޕ%Ozi/<\_>-hҫ ^y%^r2kuG8iCvzMvW~Ӹ?C5ǧ|ܨ/e+?J? 7Ǵydw~HѼߗ=qGg}Fy3>Oes=)4UOyn9טTx#~tnn[^Fl1\RrMݕogɓGœ N*ԟ o"ۑ o)|#ŜS3a¯JɖGE+l)\i 1RQ OP(7_?c8ydno՗|/q_o~=].<KU.Tj4dך'Gj3z˿?+M=F^|TjdinO.|h)|JGY^~/{PU -ykR /^F%Rq) " ?k>V#OSM ^^^xtdޯl_~( H_ҷ5˅s~\T!/*irő9i}Ғeyl*g;MNhU PgKG7 ^.\(_Owj~a}3wo Om(O;e}Gcϧ򟡏pKɷ|.+Rśڧl7qLv2&jO*nolw?]}q;U)uU|h>Ur7%Nlpۊ]Rxx۰]sיTq"՟)ٹk̭ڧ]XOx{[؟oϳ%;wS'慮,kWv/y7=^_Rrה_*Wj3-_HgQWRr3M{ylwin^6wW~xel';t&םwIK:B— C)׋lי_p;}jyNzt|G*|>K*;=zk>yNl, ?ʯg[듦֟ҟו7#U^zTPiN,Ao_T.|G?|$OJɞT.cO{V\_仲 _ye/=zmț_^W[Q>OQ'5P>IK>8x^|*~^S _G*ʟLt3uQvygo>R2'(Sx!O_ϣ,R廗%T߯W)Os+>?5_)dS>S6T|!u/+@{Sp+{(_a{OSvg:J-?^4>!OԞʾ/R/GxR\=oޞ?U9iԓuߢ&sW/ﲷZ_r<]YOz4e |3h>_QRk߫uPS2s~Zf;Kk# /+/.}uN,W~I^k,U^eۥ£ƯyXM ߳RԌW,R4^ůW.ǧ$O}Y}^np\O/RcSq|8}(/O>5>O֋sˍ:NYO}|tW++f}ٯ7j*}Nq*}*J}QSzR%*S_OKP믲Wպt@{^K*ܿ,|~u`O ۥ1ǣ|'-O}_?9NWoR#IS"R_ǫW~Yԏ֙ԟد'i$WnߏS7i/Ni)O-' %ʧj/k]jKCORA^ݽ9N$Oҏ_b}$dR_zD^Z'{8dA5uœ>Rj&œ*~u/j Q/{`[G۳80Y)o0y ~Z :ꖟ¯!ռּ֏>_&Gy}+*oo/7?4_ O̐UN=M|I9>{S/OEXj߇boO;r.T>ǓTyz(d{tSPӛ~g0պ_}_SXn?P$uSx3ǡGx@S~0S=7Ż;(/ޜ<6l7Wǁja)RxbᬧTkQOTy!?;-?2Y^RT~'Q}ҁ1H< Zkz)@=BN}Ny^՗rysY䙯R!>e*gٔu(:jUn#ؿ:WKwW)/rWRQb,*+R?5dy4=A- !/?ŸK Cy?| d=Skohͦ}9ųqE^,OF_HGd*O`=gCy}F\rxF1^^@Q/OPKÍsYvWs3L>s}ҏP+kh[_zXuZ*_*>RiRU|P!{ ȳh8)}W5Uk~y|$ɟ#M| ,r5c(O Qy|}Hޯh5|ǧEyl8ӼZ ge?a?O~ROޔ7(k_O\Fo{<K=dG9zC}eғӉX^@*`Qsg~S>rь?u g~:izsڗQ}L7Mel>Éwůa|ny§oqkbVZk~c )G)(G}O/66c ?zh |)e1c+h1VO:r.K9ZW5/T8ȿ8?RE}Cw~h(ۏ u8swlRo6ǥ}lʑ=4kGvHo/¯g~tX]x<aʇc7Aqķq}"gx^W^@:'p_S/1Ϲ uDzp'H1_1頚ǰ0׍<ݧ}u00rFR_c8Ǘʧ_#Wk=1\,SjJ^ơqRs^Qu_3B8hyIO?i'2޵1rO2~<2^K)c?YK>)wxOTvr5hFz/oaoFj>§ƯPMݟwoUũLP+5jqc$M@N|uD˦_&Q/㓨^mn[ny7ˌk>X;rGz#h#WY_~C^CŸKFёy֓£GP 5.T?~}&h_Nq)jQ~фtʙ:r1xN'Q &#d>$gdT+ʙq 'ߑ>t_9* G9>3~zD'Nɫ~KWyek7ױ?G#t4ynCwT_Xv4~K#S%~u8~O3zMqDzK=q-*O"?Rrdo7MxG/Hdǯ}Ɇ|;'*& >&(Rd/!Md?V$?Z|l<<6zi_T{X^8IGuR>|Rj~u٠$j>I{N8叉N:٭$`r~ ;S?ݷL!NGߩGq?UQ?/Sި(Wx?vQ~SLt>L~Cŷ5*OZL'I~x⸴0M}5'P87}awX㸆nZ/|4WM4kMOԺT=S~?d ?)^CyZg:NR[sy9Ivɤ.< ocX>r|uYC|tDJw!^c^|GAzh=2rGPt떠Eq]}jIT>d}鹎 _NZωWjݭĝ&s\)})B=dS9XA~Q凩u*;rs85ETmܭI6wWd_MV>JٗMe;㨷W0LshIN[s-y|KlxwUn{Lxҟ9u( 5k3r4OSdWOxͿ׸<֣DZ$_Ʃ$1Hu<4F*3v:Lֻ)X3~ֺk}~4Md;3Ɏi9GNZWxsh Otߪ|yJQ=Hrq}iN:ys>|Rxa)ZNM#/|Q_ WS:3WNnI_,>| Os>d,q( Zk}HujjϹyGQޑtyZRq˿SYy\db|ToQTq=rSx8&S4y1xL9ZigD;hU(?N{/)JG)o$O))k} c_Odg?TݣU t%>ʗK? > <|[Kr^vhIz~TrwpƔdSrrtymQ\МIl9ioIO.)ǧx}n}r> \}dGvḵo~sna=# +yT9N9ZGɿ Z_#`*?JAگtxV$"›%)i=)Ox42x} .gynS?9l']-?TzQd\Nǭ<_ťm2Sz p-[Wu?"9cAQS8zIQPYxlS~]_H8]4/ȯ}V$T$SeGuUj^|ǨTia4KϺotr؎vևUnwrZjxu?y\z8g;W>;k?֟DyŸR/o>FԺ~Ce??S/h6i}}Rn{5O'\p)NU>6<|00ߞv'q\9o䰜֫ӹo|49!u;S|c|ylaLc?9j/ ZG)?jJbW9XOɺPHdyBwt>[rڟPRXFshZ'(悔gC;h]I#/}=ϭKwUCפ~O6t_~>ouA okN=߻ܡoJyz`ǘi++eP?ꩼ1iN[CyN;SO!٠zT)=7;z>bTyC5w\"w\P[yXW}ذZO~'z.J/kֲzG?a:ScWCϝh?OiOyKU}:ϧ|C)wӉwiSG7h~ᄅߵ^ޛz@zދKM78TU97:z+>^־`<4:Gh]R!Soȡۜ&z(泜TI?N}Gs>/xޚm`{,c_?O*P~>S{,OIyzh8K~Ss\zJc8u~/{DZץ㢟z_9.^y^h?gX.znPɩ|gվp8K>VϙMNl|zY3 ޴~UT#?i?\ zW8zVϱGqGyvtޘԹ%z[)ۦC=9i<GPO!{9ُRy=zFiݣ󌴎JGqQ~[M] sJu_nu|߫%_sG?Y(r2ٿ̼3uǡs~QK|S<:ljrtOy>rc3sc TBQZ)RT) OzYQT9ǯ_@9G|~oH [eW*='!累?{g&:A :GLbsU{=)/\<ROG Y:U6s2AuҺEy%=sϨs2޵΅My8~5h!usOޛj_Xx>!:Cx{GV~O^{Gw?,.=BY :ןwRвuչ:M~3sƥOun>G;i{FW:M :udK?^ֹV«5}Ή{tιS|(W!x_Rl|~g }!]=:8])O}*vO}N~c.;;*;u`u^w'>wtnl}BG8>;uuIWjG{:[+soi5?i@y@)F':_s]'dk=U%GASagÕ.2u~zGQ.].IyNM?Iz ZΟt~`=+tSr}WI?4hIC77zY'+]#W4 >Ϫ{w\j\E6F.g7ʕo+;>d ì/u7l/kozs˄ŇqkzAZ<>^MV{Hu^nënо)GZ/5,||&^V?[OlCK벗U{_r7yB3ԟ<)%_G~zBjWy&#jnnxUΚ&?xg&;=->{jK.*R=Seؗ۵k>kxkoeytʊ|ZVGU߲o% &TvݕVA@{2-_Я|M>jf%8G%:>_k^PHȋe7vL|w /GBS!Ϯ;={{,-Qi'-vj{] ף;臷1ĒO!:{8"Lo0 F{E?I);20#Wと c<2ʿz4|l>>KN?+ۯ{)p;`n_z6vo:?1B 6},JIWt| 8ȍ]?ۍXF߅]c;';*NG+s!'F|}C?|~kh ޫ|k=ȂeK̇qǮAiGALo< GO'5 :6 τ|gK0>-bb<`g{pj źp?2< ӠWxY_v zዀ/8q%C{+/nо|-x)h>8oZs|ᯈb:!9v ={)`S7ށB}ؗ`;aE3I?a槇Bo>b1YWfC rwo/34$> c/R3aq2s ;P>:3.{ -hg_ }kw/2.ȳoRS߉;|qw!%_`xJ> xwW7x >xh5&ᛀ OiPNjDd #Zxm[C#C{{{3gEdħ]vYG~!?~.ޱeG/ξh-U FW)%ݠ (XJ|۰8W0]EȇtGA8O@ܾb/%GO_Y^#maG<3Ro$qpu!<o`%!! uD~pqA Kp=քąqNBM~GΌs\ ȳ_}fI\3a@BnqL<2_pEdfd3]8荸6!n:nbYaይ!kùr9q҉|)dc^O,yQbaы&o GX'4z?˟ox@%3[+;_"a"_:nx[r;yYrGWP>6}ѯgE&|geP-` Dm :}? à` ṰK1[Ywذ6|0 >'wkhZ@X#h_=ʯbۉ/>Kz&*赔$O@/ ?N]~/NC~z8k;\:w5?x۴v9t:jm׃0csa|KxE~#+OA9tqh>ѿzO6-IEPukh/q~ !/t1rbW`<+o#oD>1]M;F!oy_||{I/v&-ch~wy#DӰ{,OE1tk3Ɲ?']e?7A|8Wz! .k0vng܍t@ԯ =}%9'pyv o3|#~~ ] ЏgWQ8 3_ ]_ |?=?2?]Cx{3#;Ac30 k_qn[ ^X|=%v3ڳѮÞTt qv|71zŸ[L~p_O=_"ǿqi_+pq5<q^Cᬂvs~4qv:6xyNL$=2qv;wd s=BN?|r;Љ@#IZ0ԙkCp/"gwǡ_5+߻H[q&[{ѯ:SC+Xvl@e#uo?@{>>z HOe]A}Wcܱ!??Ob+_R݁ˎP??D`W=IvLp&`?gB^p{F|Vt|kgvCAJ_4Qd$"j}8qE<|?h!S`}sS/G`/068;"kv qF=C/"/2.!AF`>Y ga{YMLj]-\?$^7v+ȵkO;WbesE ĮGm"tiN@Q'LAo^ݡgz# *F΂N&sg=7-9k1;Oi]φ޶oC}[P/v6*H*ֵCKԏl1;{!< ]Onoy->\_t }=b] ?Zb[Otfך 99Xڭj&pv@Eؗ1DXm3ԋ5\0zz WR]CJ>8;-$%fVhors{㴯oq=ι 1ۡM?Eo&`( ľXȋ̆?]'« o 8Nf> A *90`G%?EF͆''r<' y'zOE>}_)'6z>C}r+{,gޱ;ӞwcM)0.>Oag!xN:wO][b]Ixȗx;ʿ=\_[COq̸a p >AS6ylIA{i"N#>~$CTʋ\>r8 s a< 74 ^p.]|7Cp?q m/<8uKhGg~l 8Dk߃"Գw ž>~g~`؅~cEp\7]쬟YGpjCzG/+'kr]Y4pEέGk? ql}1|v=c6N|n&֟Yۇq_1n=om_1>Sģs'Q?pj3  /gobqy"p/n h t_8lCEj04v1 EP7'#^,^Mi}?L; ah < ]/Va y1p~#~s8{zEqP/#M\#_ DOXh^[Rs?Q롯iφ~ΐE*ߚqp >B:y0>k7C:đSQq1rV%Ai_(p?9L3aĹnA!>?;#ا!0%TswlQp?3 8| E+3{N/W||ǁOP;aZ7ܒx>(#oW9Gdq ~G${}s.f|w)rO%=-Fję9w w/rxwq o]/ױީ7GRO\7pgnߧh2˹`)CW0^_ݦL]w\Yx 9 89j">C' x 7C̬WWϱϠQ_p ㏄9.jŸqy.p.a|^<?|WҾA5`sߣa?;; q~E p_Io< &;WI>gdsy,^ p a<< OB\اPG ďŽ S~;as^x} {&|$vEK7ȍn#<)}. 5D[gp !}P^ uFD܅k#u>$㋾F?_<:xq/vw΀o%籴fB? ˀkgi#^0+(̀^΀Ys;u _9q\->z$Ay'\%| qzt\w'voYCt ng#.?e4(csD7@B;x Gѯ0 'oe? \B! ^yg=Vv='+ο+_;X&pbn"N/CF|w_|aaAv7erc".3w|~OPq;y_]G 9G1'ςI8z%'M6M?Ǘ!>E~/߁B8@,}Bȗ'xsYo?_XO0gs}I\BX=G& >wܰ~%^tE7Ǹ{됿 )9񭂞㡇c|ocٰsb+֯Oxz>`US@55soY(cBfC2ݩoZkݟGYh6lWx;$|[q%5n;q>O|I}}vI#`I5?K߹,"~_:qL{ؗ;6 #.A|nE>qF2Oq?9|&KӈW8oBn$ 뀿9_dǮߣ#?'Cv/ .?/C?}o;x~2.#v!9~?ܥ+?NLg>\I|Cu=aOA;g/gcv$Q7e Ɲ8x NlBv_6q w&}R ;#WLꇃu|;&~&]M{KR c?}zl(:^at1|Ʌ~j_?#N"oM[g'zp٣vokOq(~oKNmߌvv:ә'NPmG {I 2Ag>򆽚{g1N#>_]kezmoC~$Oq'Q/{N%184=P6}#̗鰏ӵ_9le[@;}E<;h?Sb˘/ر{oȉR(ǑgnJ3〛#~6<5q7~߁3#~wBD~op|+xp<; 6H0q'>];ˡ#Fh d_<Ԟ9~&; O~әx ~_Yy=yh|'$ $}ׁ?^:;.e7KߎA?g¸qv3P) ?L2/ c 'tl [X[XύW{ðCd Oa/D =]<| q|8>|sc!/"'Aog9 ~6q^{pgQ_g;~^#.gij}9+i-s%K3dTˉ:s|)0 vIq#7DG0XT\$>G (~)8B7T_0Ɨ8q? H\O5e}+%a܉B%C. Pp s]Bή!îG-B!,My\ =sq7{ǟ}q=qpd}>98H{'\<%{g?Dׅ&+Nj?gEШ{ԟN{,q 64~p?웈_ہ~cu>/{8m cuC ĥ j`DM?~L|> /$={;~^ $>u= q7vƙ\oϽ1O|SDy$y@_˨}>ş n! Vܿ]~} S%n_Q?^_Ի6?xb> w3X_._#;ڷO_"PW}c h;ޖWga; }OZ_yD)M& %Vp3qn?19*3C;ȼcD9^ ~Jv#s^NIއ$aK<l&53I|4lwxw' ]Eq?Wk?r п1 GB^C{k:y=Ȁ_|)1v9|)(P.w5j?L.8EDy q1<xrvpq8~/#'Bn qp<bW~;c/3R \G^;c>ٚvv?\$v/OigO9,ҍM1kl⫀y ~unħץ[pރv9w38#>#KG%Nq=>xsV¾x_'[y 8Nz$o^w'@N"p?nt2OZ# A<Ưx9218w .WBNha 7<GPADs b}ǜw0n;|^U4ک Ɠ\s;9o#v9z:k':sz'я mnZ w}2[; wɛD-y!Q>A}7 CuY!sVSO_".m=z'i*s^lt%V2O, ѿgg0>v+^|g,p:yxŇog;9XЮSjJ^3!c{:#g ㊿/:¹a>x|~8<8U^>Q;ڿ y|޹q'3>f[}hT;IhDɿ$3/ Og\eL|`xmsg 'C~1n/t5  L5joe}h *ˣzI8ڻ.79~<.yqX $".'I @ fۙ;3a;F- .M=b:]qI}?C{`+ǀ'opd2LO܏GczC3J sWGKޠRN& De>ۗoG;Z\:g1*CCs'WO_45sCCek{ycBwA)~<\N\6z7'plߘq~O;UTϤvIqX>Gd{vdo d>qASt=sO< K'*CgULg1!ދ B^D78Nu/Ilq ܄&)u0H=9|pQ~\Dב9*ӹN:- |vI+y  &FaGLm487^vsXv v'B~粣G~#IwBY b9} N /e)65q> r߀Oyɧ/?&3A'w,%>x2'z-d~h r~ Fp|(>H x.L ^1>gbA?i8QTkb6N71}x6%77ΰG=)-KḞ[||?q: _ r!^aSG{!M,Koh pB* qqg"nh{K/q& %f~30ⳁqM¸sov^{Ի<e~B~ۙCWę 8~7dN~s#q (gwׇ֟ sć?'f>;v|8  V>Y%g_O ;݌=}q=oie >$YA>书Woo^Cq99| F~s/xu21>{^ q}:;ăD%1k $8:?`Eއ;w[s{2<WS/;Hģ=Ҟ<\ۆv {wk`O0v7q&8HT>'[;`d+M,^ek%I;v < Ms/OIt#'wAѫ8s?oCByB ρȃ1WבGl4~r. ǟA<;[OA ^aDz ~C 'QycEWܵ ;_7ຽw>Xހ|~7+UkI\-b7P'sT&j: NwD#^%sIwhBǣ}9>0oyq>L ,ޗx9GNnC!߄x`=7Ck&+="78߉R1|7O $"^#$N@/~G95`h~QGάys*b/#< 9M'|?F!./Brs vs# 8O0.CP/\ ?47xNg/8zK;}&X$z6 Љ]BF /xwf \q\O "B_}.NG;%-s 9U?c3ߣ=([l Nt3ۣ?뀏 ϱ=z Wa\)$]pnO_-yΥS8y^s Z_~}I/P/~zT{e?qz~q׃g#q# | )%?@<\69sπM3Ԃ'Bn2껖yZPyYqu GWd "ƞE1 ~ v |:3jW=7y @H{&2?Y(w\s!y͡_[i5N%' ?rP;vN8v|3Ԁ=ӌ9a/Y8uއCC?1

zŝNɐXv>Xy~xrs!?g n<Ώ!|+яG[O@|=W5}F<>Ã!WE%No~ l;yX#Bd:D3=k )7?'7d@%^"{ { he\d*%fWY >spgΜS)wfװݏ5Xxl9'-7|6lCЙG釻 ϙ naPѿ/3D|EpdCg"!Ќ_@fNp{&q=09qt{Vch[ZG.vAt;e._0c'x|4hr\gf]sorˡأQ&aĥG徚=?ځquT; Sn.iGy歙_x%< `wi"s_s1p#W u^r?0?pW#/?_`TKk{AkOKVߏ^>ːcH_%PO;U}A虨vwDQn ,_{'[:vx8_(a|/o/7|oȞO`Cm~,ۍqڼ @GaGiG#G?!y^~kcBL@yfs!g qu1O)!ޠGg˿ +yq;~~77wg|8 $# ,xoh& `ND>+8 @|78K! \ur+l6;2˿#.+^+q9?_I5suëϑ+W_o / L<CA_ou8\lC `3n8o]}[m=| xԢ#^:}p@=}EDހCkxo%B^s/`R;x;&K/~p9GYw C?(O'ky`~~:ߍ sςa໴}'t yFB(qx*~XwIUw#} xH܈߈vYܵjr%R>%%ڃ4 r7΃v=A~/q*ڑ] = #](hh9݈/K-K'W̷'b|6%ρз'ज+oD?eeoy1]A w3_~ rˉ?lGA^- G~=v0~ߒ  /OAq&E8w!"01Of=>@<}! ^øN'G'"Bcq=l[|'>ď~N 9I|3)Bă=_+U\g;g[}cYr\7п}3_L)V_C$`Y:rCsO!o/'h3W3PynHn0Nx.jO5ЮME{M}Yzqط|_*eBNylпo@\?q@[,gX\Ϡx}L Q._b<~xb\!YNUU`x$p2p 얣+|>o1&_$WAwUt~[Xޗ⺴lqu~Wikiq[ط, oȗ@ni~) {`s0Ka~ZK%;_7zy[) g{YxOs''Pz4}'|||2gϿAϒKOL࢘#59Bb>TZN~p1pW'JirJCg?._^<cę3)7p sgo7A ;j/l[rh9%Vy>X;_13.C+nO'X: / B݇RUs^SaG +bţKG%߯,x/vi.;d@$ps=px|߹ pQk7^vط =ʮ^EooEKxA^z@q?D_cisY2ECʆҿѮ7-ڂ/^H{I%\Yл|5U|{݈r -Te.lTG}CY -mN\<haqG,lSsHKE]0_f"?ފqLsYwJLJeyo)8~ʙ|_88 .S-*\v `q/6W]"M!?[v6xmS=b;QENby&\U|(H#޸_Yv/ 9Ч|B]y|,?obM{}KYN|4gvEaA((,ŸKWQI[imp6⸄q-0}0B>_Yކ\jqˋA>Qlv- zCkU_ɛw/t4@-[}#W0l ;];/%/OT v,r >EұWx]v3^uu%-H[F{yȲBVv,Jd<E*ߥsA zˈ7>WzJxVHIcQ'.ޅ8(XA~3RK_S9~JxNC.kϒ`Dzл߿(m|߁~Ά\ߡNGhw鐛,+~-k`|~d,/W:z e/ Ϡ5Y~ *s eg ˂Q{ n_KwaA)Mo.J,}K;zA>ꕎa9#,=O%Y~Ob5г9n.I?`kZءb#6!Vq_92Trnڙϗ󾱈9n~ø> 8;~g@f/>;J<"$o/N{Nbd+Nk).x}yBAo>K2~ /ȿ)`ҖKa_6sMs>/\ӒY,W;3(s%}r|>\dOчh_EE9\ړߟ, s||9/|/>~N@Y=y[v~)<o>y6){s?x^ց#({ߎ<~AUr9Jگy  |S$ߠ3!]r%;xA9foqOY X~f@C0.\G|M@C|+yC^Cxn~> }Ca<;vdi8 8J;@|oUЃzy~E|/Njp)OoOEzEC~cna Do?vnb w-r׮ !ww= ><G<87\gy N]?D}~旧'?W]|3߿?6ms[E|^o,s/gۿ~$nχ_3@ߢ٨9*Z/G"yS-#xyߙxl!7F0i&G{~e||_5xv>W{`8:߉G;.=t~;BsG*Yt>xVWx~|᱐Lص-ݽ5߳v?xxz]E迈G~{>O+)gӞg1ByZ/+ }9o{w dqk^[8s|q/* < f C-}+M?!B( ??+Xџ\m׼q~+Ʊ`mq@k[/`-i硫q}?v7BN~v>יJwpvH;ϡAϝYO/R n$y>ރs/)wW+;EEw]ܗ.`}=0~~A[ϙ,{/T/]L y{A^aqO-%i;s-̤b|+ZTw#9r*ȧ[~}'#8xfo`냸^ySE[@^ok~8矶C'o70m;gɟ@wxWb;}g B=`)(#>׻#= .A?о"9|~lO=;8e7##;u_yjDneW{ 9]h_9V0+](?;v^ހ_v 9yߵ6O;f&?1ݷ|발7'0νye'/ؿr:ݘx[>F/g|9ڃ|j]so-^ڶsk;G<56>x?b|}6_x3_TS/#/} wۣm!rQ'&0⸀;Hge{><.KqJ;m8t'Op'㈿lX| \~7}tcw{7M||m:}\oވ7y`_@+a{BުmaU]QU?>Wu+> rwpݼ}轳t YZ |z\z=mok=zO>Їo6\~poC ߳~)BO`(40mN}Co{;H3춷xaY>dEQo[<_Ձ܏E}0ϧ][CG;'/o++W\qo+}t޺ b*mA߂~̶xWL܎@Uow] |~~~Dig[{%vkwݵ|7d3Q Q`\k_xNGO>{. <K&M|g1=WA7sUO6>[x1[w'Ʊ '?Am1/B܇&ch)y گ|;ۡJ>?rzЫrX.*s1Ʊ3;'ϸV9;&|>Ov9)^5nƮہ5c;|d]_W[iuo;'">wƝkA?s!G;]c!w1ߋZ4a%}keIw=} π~ЕP|`,!uG+w[xrAܳc8NǸϏ,uc~_v>cU*3o8-~yqs{o6߹>'m ~rl[췍xtگ.;~VrQ팃UmڐW0N끅 %|_1x/KiwW+F"} )K<ʸ\N[`!1(h,:t ǷKF\,75]7(o{y|&У`?9φ>ßsۃߛDOa9[A\rț-}@(Vq0-_-1zkoDwYݣ57[4|C>W1g\/ziX?]N;^t>Y_-ƳU^҇Y֥/0޺A a^+öoe>8{̂nD}F<38_z%=M_}72M>!֕?z0ח7$$}O.Yf@O?g a6qG>Chos]~I ?s'+ݐ賊W|V~Z-F=!wۯ`2~~f_C께\.!~a<1'p }A's>|M=gNsso3p_mq95~n?/ u״Q L[An$/br9z埢b35%o=DZtyls~Go~u_2Y4:c*̽>ǗoP`o~®X:i+nf|w;oW < =\1ø>ߛC|M :Nq&9@i ߽]GMa," `p}k9-og,E>x)'חc6j=ϟx(Oqv|c&/7g]u3ih:\?r~ A؇ ws|ްnrʳ*׮娰#/|:,|8wiH j^9?Ә@wf/޹>E7x?Pow\ԛJ-y9ג ?Qdq/^zKnҞ7>Z}鴋[zzø=8q7:ż*[~鷗vmrc('t'QOm SN9iCX>q/|yM׳!MgA0~-:Z\}@l/Op{8{}l7Uv+ih?Gϧb-~ _Fcl]б o8=7nڽs] $_<~%"W玟o믲"~/@wCPOJ{< b;@{oKLD^P7ٌʛqe\Oa|'Snzu+ẼQikp_y^:/7z{ӏ׸Пq43z>"ވ7/Û混xUWwٴwF;.iNgC{ >\;|!{Q_ ?+I\Dr:3]Z8w7Uսc_i߁/gfϡoXmyͦS=/3_ʯ||L^WxϫGϼԟy `~yc |7oߎN?7v{QX{T!>{]Ns<5:{IMߕ:_})TvL `\w :+7rgl7%B8CNh?Bsz]y}=ԷO739cg?s |沂Ay8/:y)9\Ͽ9|2&Y\~'3맞g[ $߁{y8xxz~nY;֌n{>myA|=&oq@/^툗iǨ@4^t,'\u~w3էX>:8ow?g~;\L\')o(RݐG a⺬s=Q ~GӅ~c?z|ޫ"s q7=L'g~ ۑzI]hVc3l߆cy[׼gxz]7)'Yޗ?Xޟ;Q Colۅrl|%tSa(w{Y>*<ۏ}tcƹ.qz_s=םr'_){S)9Ai\o+3bרO 6]w]:x9.Xq;~]Õuf߽we졣z-]rlیY.vp_Kole߲~H_vhho/ | =S_rz|vq.ʋ.b}߾N?iojs}u\E'|h}ޫ]33}?x2_/cM×6 Õw~OK,OE6?.|._Fڪ^w|/̟ے{Wûj5Ht=x﷾/$TZ^Nc}gIߵ׼SNmKbC}7Z;2o;fW޷eþ>v|g¿;lnUૹ!kj"{䎱o)O~8xaU (w[z3N|t|g>p\y4pYϟ@z-_ŝ?Y;:}w`΅_&v𕾚~k皾_N/j~֏9/4XgKeDztÖwՙ3ѹ;W{ o:Wc4WOvXƫy_h=ov+v&[3o|/X_uS'-ZgEg;֗yJ^[g5bc<'++GylRȖ[sXɩq%W-:%g~e%e|e]-ի&XԴ>=_hEҠO[Gn%Y_LyVɦVO7r0zl_Ww>3;}5:ܰ#f%'ַO2]w3;ZC~su{e|f3xo9?+|J{l§,c]tUzjkyK!woV+:fowY#y꯻؛ Z=}՟x _sCϴ|ve~uqSmy_lݯGV^[ݼa+_E<$wX%' qgXgMnUpUk`f[߿oW95VYg}g^5+ז\udM]k+`Tzx+}YVܻ/d \?-:q+tKA=('rVGnXQ]pQ=뎟O+^J=_v|t+K*sT[D&XvC%o',/OVd{[ʗ [%VpyX[rI~w-̷"ӎ.Ge,ƌã_ڊ_sZ=Vt+?FҊ]tk<y'=rJNͬ-yC֡+o|s9VӋ/ͲfYA/*4.Z^b|U;+g̉Y/bNzeY[n3Kja!֮IF:u[zcY:XVG6qU+n9fҭcVlG*lMnG7}yUxY3m{bԭqswvW/k *s~~* ~hׄcc+e??vk;~6le^QW68D4ݗ} <X^t앃ꟺ{%3F+k)_>~U&wȷ 7(ŏ|}bOC;F4huhmYŅmo\h}2;5i˭XO'|kF*vSNj}t3u6qU~~ZuQ5Y{_ngw61v.ֶ;=uցW-]ju̷X;;2jhiߜxak&txkK~/kҶVչfxW~˓ M;g5k{tnkOڹZk^cupW7ga;aΟ~Ӛu_QM;fmjwqdo 3_߻Κ3ܙZ2{/Эs~eb+^]w˝~G[kOooxVhHSv?m~4c{'-Uzg{`Z9M9/>vygϟiw͇Z{zMyk5c&=`xwʯ>߮oǧ6a46,^~U݇Zh:0/'YSo*}ۣˬm ZֹqVkdUw޿kֶ|;>tv߶̱cו4[0xVᅗ<v+UӳOѪ뉟|763~֡ͷwH>\6kW=zf{~GV5ߧ>aEw5{wLn{cz]Tie ߈ZZ7ya k?_mްKwֳV]q(1֎9gRj͹εV4yBkױbkkUͷl#n}mjd[[O?t]YWX[_nvvxuny/XX'jNw7']aߺY%֮''3_Zהa,Ңѯ\{vkg=֝G"\7Ʒְ>jyfoYFfk1[VZKȰ |}[o^ۯS)__Z|iVpFffdqYZ%[>; ɷFMDkmymZZ%ξqQ}'Xn[PREA$ARC@%Dn:yqٰ]k9y׵5(glR\/R6/GYu(S85A2P[Zzd}O @%uA<4i[jtwoe*Hg ͪH]jeI +kڲɣ *tYCv:!7VH:V>9xU\rn r2%C೸48e ˅E[P^7ntm'>ABglß|˂95|k#jsD}^I p7AZp2㍨P-%uSQ %q[S;&\ W%aVِu_u$Bqe-hj)Ӽ_ +/CM8:b>۳ajdZB[G|ם5bz b<v2ޡrX.ͻj=椙 :4;W%՜!K&Jz}d*lp*2= egFA4t AKą{/W!(Y{; %nCwїWCMv4p93THŇB'.OZй*ui:9>BsPޖ^% <'OEyC :hy HC-Te ZCOIB/e2غɡ[2ßtxPKUCTooBY˜wg,|Pp7kT38+Le({T $EBlы\1'yr'mAdFkPS1&X:깓}AΎ ΄(T̝GQoqyAG9 ndAu?rHw0&ח,` mJ*6d:08&;1d BG.T I0Njs؂)1鶢d5SoB^@?UsXG|ɣl~mɡ߬M,=07M3ar׽sX7i[ 5xt܁}1n)DiAy@'=ʤMS>ޅ fUYǔ440 c(j,__<M Jz5.>KYY=Yoϼf %$Y@82 r4i!8_?.GWuR R-ļ87^NM^]]sw?uA.bhfjLj@2ύDZO'@$%MȚدOm IICsX~PkY4z="9I)BmPI_,i sgc'TQ́7g~]v_c g~5ozQp⁜U.xmTQ\hSR`ϗtXEgv@ɮϯxrx2.iR~=N'CF;ЙfdiCO7% WϴJ{)i}&(W7p`*e^b:BhJhlCهxtP/ܫ VoFn߆&#A ԉ[!#RBK53~_\FNvGN:d=ИuC6US*B3^z(E[׏DŽ?Z!PhZGm.[Bknw;2S WC( ͡ZRhJ=>Gɨ qZ_'i6g'2痍rf>2ĦxRo}rM?ZWzCN*zbkHr} -\H[ U傳QPɞ-%e=_3\Jeۏ *hVs/e uے82b g~h=`E85!vF@QF :]߰Rqe{ ]嫉"O@ AYd32yaH7 gdY]#IN 0I?DDr9Aa],կ_.f%-PF\e& ̉#gI<kFLXUCY4FpsV4/ZBw/|Pss )A#))2ne_\td@9ɿ ~xFۗ[swpPLuOɋ\ɩAN$Tu;t >^၌2+}ᝳv*y嗲]# Ϲxj*AME!6o%<4@+t]j~׋o؃gRPfy Z@isaf\|Z VfPCۈ,cڟYPRaG6T-(6Sķ@ZU.zid>+RCo ? 5MƵD =Ux缴m^Dz&} 3W^sdcnH& ɺw}$L^S˃h%6MTbih~էnO/\]G0W͂׏ M2d+@3o7x#VI`9*>A— C$фp-AۅxG2EpYLA *jOr@p^~}踥 Eqt?˭ PP=W C4hpfٸ;{6ve Tazq3\pjhWͼ7RY(}xZ O|llOCF.(m4Nzoh&sJn KTk}׼y֢KTIEj\!T(sWlcJxO8&¯B[=t^P{(ޣ ^5 2u_Bd/dr 7B$X+_ VhU eM5NL!t Fmd ! Y \ =sͭ\"wHݰ w&t~BS>wӑK]\4L>b֏qvePg=ˁH.Ń#U0x"i2J ?a:@N :X'1>k+RcjHZa7̟XFB1 ÿӠL3'hU+mο:5džꜞ u_gC|_l|( 6#k%n8^ kҐmMbnK2SB05ToɖTzlgo4eAѰMK/ _6?[=yUlU{?BbG;/% c.c#f)_A; r|| mg@Ɛ#ya"*RT t/ouwkra *)mCcHj j& ~CegmC. /T>;֏kbPU+!6XS[ghpݜ DDELS{aQYO>WB%3Aϡ#Jx*κ'@S\C%!{W@ T$+ 1OG lyZRX|8 %F (` #jC|/ pT]& 2D_:{. BhB:dq3`z =d'(ʜiܭH0:?? .$[z F \KQv(OAى|7z=r\5ZRFQ*Z@^㍝COޞ$M:?2SCvkz+G T'wBC4z~vuo HOR} jmc _Vx80;-(A hI~jYN}*g Kzÿ簞4d&N%PGP,EoYz1ġEW>^5T;$nBm(Ä@=Ż @[z8/ :v@⽘joPba?qӉ3( :μJܖA"kq cFX \S#|]b!qƷą[PK=.M:@vƳV{HK>/DsaRtB6yz3'L3r؝7m\p:73zk ha}U*K{T^7ۯ0j}/*1E!o;H$!w3 *97!E,wWSdapH j>݇nݗgCpF } }3prD6BspBhc=};LD#^g)>=4^7$rͬ\/>r|&PCs4|Z+ޚ0Ufyy%W]V0V:Q(T8pfcyl(࠘Z( !:Р6- ӇPx=S o4O- _}Z͡mUO1ЦM&ht-9WajD.h ;=}f|h\&/0_|#q@7CGP%#FlZgJ͐MFqFnBGo [_xPNP*C-fgtCKbK&1O? ut9\ V4#&`2?3AKb~$'iy=5yaj|OT.Cϒz͠Tÿp FK =r B5r;G6T^AA|e E|Bo]ˆ߄?PꝒK c;,aDQ'yaq. _*F">1ezB'-AQUKS5({Ԕ "R?禰G3[M:NEA &JG]$TAˀ}I): CۍLos\S*z/wXrB{̮EY\ڝHNͬ] 0sT-h'IyB)oȘCO;K< uxnsi iMht)OpnL ˜OY-w(g{ykxt<N@cRM3&w#&a:s'*57 jh1μ6.یB'Du.0@O1o-V^)k4"z:+fOAP]Ue=!uw`=V>RJ0xZ3=:3]@F1q0me`cK˿h~q}.j\L;U,F(FuÃYj:t1wfXCGL57T&YWɟ;󷡰Rs;-DÊN2Ԛ'0A݁y^O ]/VfNVɵi5nN~4)w{ABl3|;=CnC%/.F!}+5ciS"%g7ظ aI3Tq`:ݿ9o.UªfE%V\7!0#CM])o`_жg.!# KE'/)Zxc Gˏ5'( SvQ  /8@[̚CLRaRz݆0b?UU2B9( T RIէN'&}錙Á4 TjBëarP=: _a4?;z2T%n^@Uݕ+y#6MXPA[^wCJ.nT 8| m?zaC)kM-U^3G3YcIۅ^PVr"1|,\k/pwkMtF붸b>- kN?w8j'kvpsrVő "nҾS SѫOB?*XvRztb('`ezu|S3.ZM9;RKGY# sxiIddGj S# ,l?Z6XXr:Kf`e@S6Kh՝0|J#_x~̟OȀʗrv0Kqj=54,qQ΁ު|Xz Zu%04R$RZ\;0z:>(8AEi]㹅<^|hx&%mO^|-mh;}# za\ gg*a!7 k|`ȆI,>Md9^T[JX'fPa'YؕUSՠ7< %'ќCgEСMG<؇^q|0Td,oML9>Fbn&L҈R[ca5G/>e47[tA~?J0R;|y$l>w? Ykqs0Hy փL9`sXGbFr>5=q_ X1>uްr?pxCn4T7Ilm[,yo¹u mxZ1ó_?9ZE eaL-S.UAC?vuP^^{$ƪ2uHa˜Rn2j ;{VA ;_'4)3vakL$Czg-0t`6vowú&ūa_-1oKvS6՞A'w_`3N -3"#Ƹ3f>~dNv8L33t2!%&(b&'weTeEhTf( kAq`b1,4, 1Bڰ?w?ua}ᗃy?sr jDFPwwƿL4~bǏ`y]7Pѣt_, ms5չGKRZyH ;U9z"~HnJq\3lߺk(u՗x.RGUKh^h+CӦs?؈J^$`L#a{3Fj ݈IaVB/-&n 2;=^9Us>-| R#(k3c aZ`i~RxFzE5·ٳe'853K+v SUHTYˋt^T@.wZ ,q)yAU9ZU&R=sA;/u*8v^@ wt@OX;,lYʺڃs4ϱa7(2txOC=íÎlC/b0iEt} 0._n \4{b܌V )_X&⃖ }~.s_PCOX>f_=N]eavRL--Dm6YiK@ e,8^J W71Kz˹qB~0AF.v{$xm&XdOKpէŷaN¹Яs)) &|0Z_%X>8=Sܗas^ѭ< 0 :5!YIgcaE^RS,eQ8۽_d`/7>'+)4Jb~t-+:C]=^gТbB+tK@Gx-ɥCׄI:;,*,>.郦N)X]`*WC'pϯ`,_Y&cJ~K|={!dNHOxԖݣhr}} 5a:pyבКs?Bg5Flq]\'I`8tԹ<X9G`[:]Y\qnنנi~Ui=U0ݹ2b^Y8A=]5` c G_X܆ g.x sܜqa\XV~2f@֣KacJ"M 2mr,uՅ ԆН}4B#,enlM@94cxLHy1w5"0k3.evn@7к9-⢁^,6'4?`R/*ĸ<[|c;uqBD+7S>86V[1T5`ź&%XM#`mue |3 7凙dO:WK=X+Jw\ߧ Rc!:sUC QP:^5o\aOn5M,X ŢT/hQE`%t7<]PrxLiLƪ܍]c2;p]Z`Bl/lX_N=&zw  EFxX_0R+pַe`ЉgɁ3? c.ft탗0HcyMv;V86~kp@U/-X[\q<ΙGJّJE vTKak誠y4Lk1b y SMAO<>_>׷kI؞KqoF0ji>OX+*ef}FtZ†15M#KÈ.Ft# *ljQՊ_A [O|;X!ö*Jt$[AZ͐n/k<28 %D!3姎BbmTsa䴥+X->6Y = M&:uXe*օ t!j]Mߘ}Ko0jX@1c71yEꍛQCJVйL ք-t$ϡUfhmje]wGЕLk^ fJ5]?n3q)jh=S "P EgL |}$DY囯_b)~v,zB'hZ#p9 Ӓ_q5G9cAF>ni[-)(4 _2eNJ[YW)*6w`t?x*>,fl]Vg K%yv$ц7~I~V?e| 7ۊ eVz:}.w`%M!|j]Q-4N0VLpV\i&E?Æ|2-bsw yUֿ2Ako58ReAods]X7tZ+Orv5l>! ϟT5ppg5劵];aC~_?nTz k9v>0usn0ZZPݐi Ӑ=둖:;0{_U~(V U@oo0>Xt&CX *P{E`^+I jXrlG?-i0ql_\S톞ⰆI%p7B׶&{&|9;>ɺ1VJ ^BH&HI%@Gܖʗ4°O9~.ryB0iZm$)9`A.TTt޴{ʸP)}N:&f\.OX>l[-ܞH~`5[Yj z faNG~$ &^ݭ /"3J첉aȽ*L6;yÝarz|~xxX+op uܹyii`GӅ:mxT?%F!]Ȫo1U),'H ev®VWKXPL XMdX/{`_o?; #aUIL>9OJl]~mLh^jm&Ka7i lsM@7 iJ&lr+coZo{O45uL+Q26nH!}d[ZMB>o]L<d 00 9MUU}|\0ť{~A>uٙ3 iyS= ?˧"M ^m¼O>}=y3~G@/=4gaƶ&>5ioеcV=&|;b VCE0IθBk胗u&} kwV&,1<{80ܾPkjۯ?הnU֟G5<Ю,f". EKNh9A~+R8 m9fV/qݪ9w0~ M= #L=u&ι\i042d@V K9{`8CJNr=[&`17.ć4ʱ6 X;x>+_DXoZ {h֝^|Xi;.FSvylސ 㳧Ϙ0Y꟰ܿ\bMgF` ނݼ xX//Nuk0)26 ǕF.i+vi.4oüb)~A5l=\qe yM;`Dն4lu T>5%`Rt %/c9և2n^ vo}QʄJlEO{1>h: 1I~C;b䬼w{BOCg$﨑mB9_da̻~zjJ |syUN #uO0nQPa+dL-.<&ma*= yr%#s-0>ɬ䎵U{A|a֋0]̓B3`c$0L>% yo v/uGg#;F>X܂ }+`|0H+d#,F^S #X|Q2c`ݍ6^Ikrr%[/8jKK6YƁp|;1L5 ؟L1XPxp,ka$ie8h!恩W7p4`OH@o̹x}MC 2.|1hh G,7Va䚱' [r3O0nq͚4atr.l }U p |v0S#;[1`i-/-+'k`9d?7 6d,QΓ!-̯Jh-Ja-ՀC ,L<01Z w%XmYomaim|鉼FMr`>X9PFFC0]ؼ n=[.0e;XzY׭m'%N/gP;g s_FLvlMBN*`ik#mX\OZo澌A"*J}^v_.;o =GR/ bsqސivkc+2üڙCHY򂽬;%0v34R`xq=yɉz<ymw9#pzՉDd6Pf>D!a&E3;"jf i28a 3WI+(awwݼ,Oc'}1-T!G׷>J 5b;zGMihkd"Ns)'̔] mEk!,or:ΒA Mgfc~{E$ Fj젚m4s OZHvr^ؔJ}ۊE+9ffsx֙C>Q}y160smn&,%ZpEw;z LМe ZXRDKt& >(` V6meUaw|7üJW{0py/:v7J]%s"1&.6wcO&jXyOB6]V ق4L]BMk{V\K=?r\B։*c5 7Ǟ}ز[u7|.u5k\Y5Ypݝ l>>9]:?_5,U>;;o*ppl(79g>lİ#Iu.><꿀I==Ͽ尚+|yk)|g`h^*mݻ(y \/]j09\S;8Eaxwu룖/u)LzlvI;`"~Ȫ.t,8yj/607g،o Op^`b/sgI=~5*_'mV6c}j'3uM)U'j&9gJ ˳ qE3Y6X1ՏE kd;J^XpLCdXqD%$ 浗Mcp~.\Idl*XׯTԇ})_Lay)s IIM| ֲ`)| #,>=[loak*glk7j]X~HZ9rgJͦNiԾ͡MEJ# s U_q+&m K¬$Ewi|V@~([FEAi1VlW J|8sVz魄`O6j w{eG )Br!~\ IVG~`X$ވ{8֢_nS Y$gXGJo.^@`;R,)Ʒm$A8zM`s嗺p<I \ۃ5W`[ǺZnՐz6O? bZ"=s,zD{v>eUĝ[:j#zZ?KYV>E$nAT^o`e[y:?7 v%]8f 5:+NSBX'#Y|oF4^H[M=Cr6nxsJ@ޭ?'oƗ8aVSlxvra)_P7 vE;\ߤ <ЮI <Z/?x܆߶^lȩh#lQ8(0}uܕB懡=G}t5xZ-ᚧEñg١Gٸq2 s-Y!"ti8~kh =ܬ{i'"۝tcSI2Vx^Efb*T: ϾF*:z6[#|d{:kDtnat8:r.߿DU% !b>4C]M^,w> #\4ۖFx?¾x8 ^e7䈀O8zag ԯ5kaQuS,z [^c}0og`@ GN^jTr9 axx>x09+J:>G-H,T:{Vl NzAcsVμ}orcOXt崙]2S؊9ZZdzk? \a?T "0)qf@;wCzQ-Qn"Bk$8KXH8>=YiS87rU2s_NԊ,QKچnmw>yd_2|hTu${[zsg/ 6FmdN1>3_ uq%،gzhѱIqM+59{}Fg΃ `Um+prSH0̻54w{ a*՞{jlU$ StzOzS;UE/zdܵiJĥ5)M!+sQeAܵ/xp!|*$J#"5/1E6ݢaDC0'wA1/5=DtG*fQ1Ծ1]`E"d{;Fv.<Ǯǐd=7HHr2#&)DlA)d muNZr B]BD.m]rokD$ d60'="mŻ6kIśa\!"Z=%'jG| 8sqtvw"}ލދp?CF5 bUWZ@~RA׸{7A6<Ѩ ΧE. I,M^|zu6?#\Oǯ;S{]s{NO˝ɶ6'. GI"7 a/DmƟʹR%~v jQfP^ֿ/`Bsp1~Ԏ%| =ļew"X{Ez Q'˫&Ѭ*Х D3r\#r"k9&-3g7 &w"o= X/^C_8x#hfg'ЪeD7YEgF$OU~F"|2(Dg%P &/B$ߎzi\r3"@=_#4@d"aKlyCF <%D*?s&i ^6"{~Q‡.]2OT`Gpp!dOSiD{Nő6~D$7[`D"ΥRޤG+&݈R8cl_( "WS`Fv~'"]T:kpnS ]F.]W;:;]O]ܝ,\ZRk[}jC%QMmӺbXM|MKAR=^% 3v bbߚc߰u_sw7 Wti F8S.4!pN3!YC8x~iNV~Lן]XQ&:l}}9VI^)ku r~l~IB~Q^|_ʻK {y|>Lġ%0Q=fӤ@Di-Dir- ~Fǟ6N"bre?GZLvb5"יՍ {lL^IAd #0<3HQ&~~w$!<>!wx\͕|8ȋ*O dUxɅ&㬰pV N?qD0z"6_#?'+Cxx "LJr{}63nG8]$و&"ϤpvL1!g&;O:]f\S*•{G)Fm3`3|0h2Zp V3VmW\ 3jg8Zrl)KWqQ!ܷ<Qg,D/iH=qua5sBD6/!u:"`yᄎhGȜU  3D`"fs?o u]KD2Sq:\_pD|GMPyD*$mឋ\H2r"u7D_)C[mB$O8e9>6F6w|~c]1vдJWExtKgżFŤ޽tMJGx*8A ? Q^H4t(1F+wdE _]>7uY"z:&gJ)Axd7>F$3GN~ǧgO 3g)E=t|Il훯pGDN o5!JifVjDZ1Q?GOQVN+ \*)#eD&@jpg/{W*"b^l-8z."lf{fdEXPR x~(†|=v:]>ru~gyDpSDC[>emvcv Fĩ[+ĈނN};39JXFֿTA8m F<ԼM*"hh_\6qD>ATYeIN.{isQI'( |Ӟ>_U:ꊈ. ' UiЦIkd'-H^j IƠ2" P:|p2";^"-%kEkGBGiG;}BDC?'yVNÑE{"6?,uk@7!p;JQO}D>}Y4ZT"&R~"*5pDWojY`uG\ L!zÓJ~%DNx+O~[sGfR3ϭQ-^:ŏ-5#zW)/~!Om,?Hhg "2 ߅{y?TD#r BH0 JaB d7!%;up87.3)UDOLC ]ͯ e/rэM/D"2Gܑ,T{D|ս9XD$E[:oQy~sRFe ],rxҁyF~yFbʹ0@・9h_l "QX:nI: f"DWWcHv9  0"KFzPX^ h|n)g Q4:Ak%znG ]K-+)_pDǧ\}:"|7S㋪JQ;Dq!O( ETW$N0),+"WO7B⑌!Ԟ@,W?ҊCt5GL8{.g3+,eFkKc_J.5b4 IS"6HlMe+ʈeȹ^oTbyt-*a3t iy1D俉Ϳ/"ȠRDg/"؎ &UN8bN{Muh\{DXDU#II5 bhsx ~tb̉&_D符 F^ٝX ;f$ !_/";ӛNkFgbc "G8` O$d^"sK:zN1,^]z㖛R;8i  1\'8L㙈b(g9˛fHZ.|Ct}6]@y !lUF( R8`Ë[AfQ~[M'C,N*-f Q0C^w&"/?V*McC"UZD.y01gUEDb f]hH*1k"(h+#VsĄ` '*v̈:=ũ>")bE\V %~&K+{g v+ }o"'o? y8:uK OI9?DtG:˭i<}=bL`;~A$_Gŷ[*2 N2MG4b"?khʼUK 69&~ĔqmAl~6x'vDY(7Ƌf7# y>&xFx{rn^梸.1bYEL[b%Ej b{0jn7Gn8jQ9exs՛]nv6,jX<9wՇFf# o!Ne9Na:k6Dk_fb9R ( ;z ;M`dBb~5Z QIlIF=ͤ+ p?>Dy@^|x>wR7lv,"jc^5Ci2Dy~4CL^SS ^Ioq5Ō/9OT#Z7鍧rÜ7#&;"?+ 9y(} 1F3xP?gA4Oh6O0+ !fr1CEos\>%W>stY!V8I`"1;n#~=OP^JhfgA=E[Gݫԇ*Vfjyq<۔@ 8B#,nc87&Xt[!aS;Q,oxi+"?7fxD:K b<1pܦG4R"޶@6L!""WlD3uhGb}!}/%٬a|{eQ'E %:zǢIp1PO3E.>t@CS/8syӾƿoVʩd*qH o;D)w5RԱ 0kwӈ~Rk1" "yO$b4DDgPD"抄ݪF$bYstڍ%@D Xvo#><Q߈M;H"%DLcn:3=gIzңLGe=KEȰdb ^Uc88.hD"Fy&AgxSb͊kE=,t UϹ`$qqb{שN(@lKh!~\cK[ƷJQS ĆgDf'I75ms:z}rw1B<>h2 o+D_)>Bd:gIU}8*TRtXv' 7b:nⵕ8CBe]#:û =u7qb6WϤsXwf!sn Ոilxst$>mŜ>UZElaJG.#^)QbZ Ut#'D-㓛r*6G(hq1YrhDl;Os`R > _]9&#;qf#&=JWBDkOP1}BQ|9GMu ReX\[+""V2ȝCBGD6͝Ӄ U/Gl!x%s_S"ւijHX{WcmeۆJD yHU{Mm" =I*8og#F7B*a R*v e$ndUŇ8Tp.#?*Dib/OUH283 qt]Ebϩ MQ鐀Imޱ$bI\DZ #l9eoQbWHbĈ O:Sq'rzy`xd)#>G0ZD,t?>hp "x<}oHsqneV!~o1ǩSߜ>/Idf72y~D+q\@M6-с̃G?#,gND&eKq]My{q,; ~V\/\UgD4r!ǧ~ BtΧ< E7)=/" ;&܅WfƇĦt ;#Xے ջ>H̲֝qlO[Q�.}~$D$r: .݆8^R$.Ä+nih"a[S46.,>5>S##!i-t.\|G!bЪ"GBS/5q2a1d8b0#  %Ĺ9$JqHsqq#E=F.͇ !-GNs*o:ӿzx[s6፧J|)Ll>G4! hqr#OguC X'xsܼxS,ٽ5|čtU1~zX!r`e , E/0ę۬zm6T?AR#}QRRÏ+nŸldۈм}XovK 7\dt3.`z jibO 6U8^lۤi mP BHCh( H<85[~y˧!)g4O2wahP 1XY N;>$Hl#7 ) xRr\&X\@u'asCjC 3,qRGt‘XIJ뗫lEb8 Xhd G"~!.D幷H;\ըx^픎.D<% +ēCN]O. >YChrN{_1/+iLFlnJc[j7Y2ߜ?eG_~wq`M õ[A@O+9,a2?|˝s̈lO˳w#GF-܈qL4 ]x, B\/׼n!yM%r1.; ^8W1[f@]J᦭Z}Vv\\zJ7a{< 1'p>D/nL"Vq)' %zFi1\5{؄$88W ߐӫ W9ղ]2;#YCE$,}k-ՕdwZCq2]{ш$anʳh̃h:^@wcמּU$6GQU7ٰw(C5)#nO ]ĵ|"tcVus-L=8/N=. >f#GVquLR\VD9pd^ l5C݊)<ߴ=HK#Hyv~Gb=S=3RSFSL5G!h4!Yݼd<_w* Qm7"Ո#oӑ 9fܼ؇2μSXp E i1yJ͍v5vQu-Xpj=qϳ!AZ. oL 'W-\?)Hbr-)xdp$0?7IuBܦz*y.' Ƌ½流L b1gf(xh`ymdS8|JXE_Ź7 { 3o *`ϫDBJխx{u tЩG?~8F?YJ4~XT `ISt wdKH!o̟tE2nul/LiW>. xߖAӿgl^f͒);U9V_#~+nI Q!/MK(dk)'qzxFNFSe{ Y Ʈ)g{nd[y'j/=FM3ςAلjtY:LIxF6_n n4ҩT?o]D?H:F1.zol@JrLKS|Vߢ7!=JHng!cHľ* Z? ػ]U -/m[Q~ǃD uiNpgdXYR[@I 4/L,O.Xڦ%^Ɱ 9#}xGuo VFΪTZ^]O%܌!p癹kpLS_1ώ "z788Z ww.<4L':!Zxb|j $7˃g~,¡_s 'y:GJ-C+0OY϶ӈE0-Rw%Њ2ckU "xw"FFɿ|)dZu7Ld*::(ԾT Qx깈&H}35'~UBN|6ERNr@f8[XRF!C>3 ir!-ې#>QjxHXYNe/@=CH7?_FX2d)T {b\&d4eiف !}r&_~2UYK[w._?] s%{}JpFP걩[8 O,=UD!)bç 7|">>N3Ο~ˏ |n <%q9 eYȷ}CPlPy2EExһKg"g}dyyBv̗5?J] !wjOd[ ?7jݔ0*h BZtjE;lA4'gگ3 :6Jx{.pB}XOtA(Us\|9-IIO>Cqn>-p!/^@IBOUjYp*ܔ-d&3dPx/ -"r.}4~ Q ]c s盄O,Ly;Co BQe. $o1L<.>^}:ɪvB13s] 9{PL< 4ON *!??Y?zgǧ!F^do>Q(o[SSU"c_Eډ\zP"#^=\ .˲iprT,Bpe 8IIAZh)CQfIFL3(t'6h@ID~/خfB UW7OX.*C!6FA(z4{x܀Sn(w/]Նt[c(3qn9(XĹĘAly%%"HI}O\WX;|5C(;X9GMi[zP֗m|? PQ~(Φg6>ᶦҚ) (΋Hù^(X,9|"t/@1Ĩ>= W!zL;= Z6 :ι֯yrjG(W ^A6DN0H Nr삄˓gHR@#t!WbDoĺߥQ:7)^и iI[/R3CjѦMX !5ǵ,+pTB@:Jcˣs~X$myEJ6Wp?0Mny ʳ"ekq+ r.OY7>I}/y[*'ho1 Lslh+w_x ?~ГAoTY9¡26%P}fmI `P1F~hhw8X &RwZ^o^FPʗP">q[/nCo\=-P]E"?nAW2k+f{Ac3T3lTYkKjR.w5M7nɇlk# & D|ùe;[z*sF?~< d 5$OQbC']qRx1[oHe: pANbk:/NcJK~ $oz%*'cP`2wiΠϒ5Ux绋!/V Q'3\"$uSuw6Y긐]IiIKlH=w6ˆ9t!?&xu [q .Tx@rX8];MdAJ{Rk&$4-]N䡃aސhycS|c.!яg~4aO}f0x qzenD]P uS]M'o?kkY ԭ'6Kh|1-=PذV#CkDߋ >uj o&[!zGSԼ={:ßjA'MQh(~{RnŠ(%1sq3!PWcmw{K4<o&p쒂8g]"3nT0X03: |7=et#l*Ri-[P:&_W~kRtS4zmAwP-?tYȇ9S9Bj%ة7!7??_{_\"m|;d MF5 pvȸ~w>=-<4 rǩB!Shy"\du 9D??-@pmׁH< i Gġ :`"*IuHCߝ} ~.uk"G-?9";/RaTUg` H_MHr(]fv\Qx3r@QɧpH|uXי@ZUKhQZ;^Vh+ 碧M47erHi_pfȅ퇜 D](dj('ˡo|R#ԛǪnztZEw&]=h3J^1HMo 0[~ţ uO.8yt%SBZƉoaUrgjg֔û!꤀Y h7QRσjJR+ 7 xzߠѵ\ExQ '|x5?@qݓӾy_*%]/}!CTNƆx^Dne(k ܀Գ(56Ayn(~4T˾LR?y(p&$ZAa4I6dkz |AY !oO4i ׏^oSJ@]3*dz߻A:UL 2C_W@-@6 p]\ FoGr5R=~NC:6k9h} k}b+'\i D2Ngz0M+69#R݋eJT2!r 22]DGmoVhOH iaCzޣ봔)UEhnʓ$CQT3ͅ h&_-l}R x7AДו x;F|Zu]~bb{tGWf@SV;ٓ A~% .Ʉf~~ǙIhmtBzx(=2Ȝw jh j]7oLm+t.#$J = CNfЖ%bY `7/I9emgDL8!%,h(fy@/@D#BM/g6~ hip"ĵ# W r|lȽ e킔+ΐ'a>2ʱ \[qpNJԋDHXF-B~LH(fmAu=X5R']M?|bȍE}mHUdk"kA%?MEDfy#|Til32Cx>U:\Y=rێ;OUș=oyD*\dngyDy~ )Kb-h$E ȷUup}}G:ߖFF /?)s{:3-GC>-p$i_mzCl%t'gAA>_j$=tMҬFܟ319|vVk]J+Ydwk/WlqniP-蜢—xȯΕ1ס噫O$PCG` Bdw>Csx4>ǀ -H<,r{pug4I>Yb'mpxfebǯ9i2lXK~1>E]h(. Cߝi#?Q g gw_L G" LguBC_ pbۅm #m,SѨ. {tt~Py$).īC9wϐL o*s$4 Q ͍|CkX[@,}K27=A^]dZ*B Ю7A0<(`<`iRlMa їQJ5#07ΫeG+8;SbƓy>j.oQ[?bBt[ߟRt J3Su!_F ˣ"Dʘ1"i'Uˠ'סЙ.(ZA_␆_"g'}z4*n$Qf꾬0ў"BKj&Hͅ7()(<-Z䅶'^D95xڢW\tVOZ} GU^g{Tœ= y~I[Am}ry 8Acn1ԋOh|krj=ןAǑk͐4} e?zH3UX8,E e$񐼺@nug YS@;ORWZ;#%P T:èBy"̇RxH㋌P^̀ј݊ T6K$?#2T'TIRp7c0&3ю~j3($w'L}qj, aRrA%{T8l{woI8oea?ixAL-%"@S"Svяy蕷Vw`0g{g\p-=8 j__6(I8i`]Ё;.\;awaԻ^QjQz`5{T>Bv/c:zxPPC1GO~tuo5{7:w~"&U`Kg}w,A5_>} x&۠T5zדjE}ͼ#-[z SdE]ptV)@U6}-1 : Fܛx^:ա"+SJ-)Ay_-h>J d)dV)Цzpr Xhmӽ!/.Wj7s`KO 9/=ְp$?;Fl{R`>nXfLsL.0-9xsA,3';^cgeX0[|բj`*4j.4mkwy[,a#?S捔_/\iVU2 *QdL<jD!o0=:Ӵ0O8 ,T5`Cv9:0gV&#_T[ 10Γ)1S84NzT W~cᗷ׀aN&woJsr- ݩ&揇L)%/Z>1?N!DWU1,l>PJs8FM9FP;sی2t]5TvJ g^\2ܙ3wкT֣+JsP4])4YָJwT~^lBOjc{%P%-ʼnu?hf˅Kd"S?X}ez2 eL+R{~1y-XЯVc5#gaٷ=u/4g)&˿2%yhF%Er,)>PYGh)J+M@aXh1lYXj`LJO Kyӟ vDE)3\;ᦡCߨ2ϼ[Hhv=4~dZ÷ٷ%ZuF3 /K>AO\dBQCWO5(pmNV?f|mu@fn)1 A&("A>J;X@K@ړ+ЌLLxk ֿ |)" +k,fh.ܑ_w)^8,+4@ջ_Qc/Isfx$4T$u`~8˝إ§]tGbI]O߈Z gYD9ٿB;'f*QBY)NU:tϚ& ڎ\j3[^: s.Bw_yXf݀TZ(YS@gO]Xx9AOjU?V}o@7KvqAfm Czm "L p!9kK~g<VRC|c,?O+"1crNKhX5 \eDi1,?e0C;v(9٪U Q7s`;˂/#>{Y T%yXU n ۰b1Rԗ;sYw6abO7s@Wە X23|YdqXЮx,,gކVA9e!6d;𶍋a.{M0䲷*txx܁JW u>{ț[ܷvG. v$N߄&ٌf 3.FNf;*]>Z?mgC~N{ B?v`qF-s%oi __ī=$''S cޛOa^u:+pvpfszE暈P?PyP@n, Q|z26Lؤ̱fjخ%MVU,t>,\=em@)|8qOg^<֙ws*У}w,q$^^y&X9vnq7 ?#^'+Pj'~WW˱[%m2T^S.oЙwM),]I`kLU#X^%0[MYn!,/&G`|Q;kһaAd'h`!rvloeًiah?ly?cۅ/tcPW 3gkӡ=/)qƆA ?._아!VhEw쒜RB'Ń=Aa6h^g χ=_V7}}`rnD D5j>eذ\g"-<E:ϸab52@;ǶYa'.v|ޖvYUAcD&$'d]\,#lmt>SVJp篷MqܟXN`]B|?ccHpvǾGw2~n?8l~7 \ArA!=ez}T eaSF' ns|yolFἜ3VʂvG$aM7eXظ!O U|RDXL! F\"n+~2X'm`z`!z N?vNʓbD=q{ԺO@_d WJZ>Alک912[c;2'vIs9߀UQOoWj.; OF@}OCWAJ6x}]B= AqkFjxp@{G`g;G ^n0Z-;gÂ`z}nh}uF]m'WOWHrwA{=7gv*sqfN%rk" wL0skoٟl͹0ޖ Dž#)0rKUU.\ -_/)JG$-2.};Tvx>u ۆ arnvw8uԄcy~ $WC-}8H%a>ucW yv&]tUa A)&r2Y\ݻfpK6~ ;AMqr;s^Iy2lPoz 0!A&+ma8Ig+زrE1QTjal=65@n(lqeb Z >iEsXcD}XmŬxOU :R|kM+6a39u،GSRs+HNf㷕;LɩKqm!(=0X[v CfHǒ-L3%jlh+!̲ >7;,F-yH^d_-vpt)Kʗ`>UjWVU+d0]j];`ZaSE6 `C,< {cacï-l[&7;n?.<ɟ7MGo&?dc FSv7ac?xi&ކu(pSW Z Lzy,êDxfFt5L԰Lـᇻf`~&: d\1%;cW8e>R'ݟ:BX=N0b\-YZ‰>n+%,i=i-F%!o{,ǚ8~{\c=܎~Y /,5,kF&?+ /`K \ L >Mޡ0 .#OE>!x${Η%)a)7~%NW4F4P.撁-aBy:.i xpd~zOS(R?_\),DNfe۾Iv MX_ gև!X[ܷˀ]:bg/uDdO4K?PV8+m*==p >ۥpdX}.is?(X1 ,770p9 G]M0W=vaTlfga~A/HdS9yT~8H`M{e؛U ~8UvJYwr;,jpQ2Bϋ|`K!'"mai]cHiN;䋹>6"\ ę6X8n'unOQvvCp.ppؽzpm hKgDvbxp%6.fOW:FuZp(=>qٞoHli~ i_+zwMdܣv~ ]!5Cs6v%_1MȎ]O0QXu=Hۏ3LX;u '}+fka.XŶ5•o2XudVȍ氲+ CˇV`Cs }NՂE'"n7Z k>/Sy/Gݚrj`xs\i&,ݪ}mQʮ=`%F ||gg;X~P .`7N>-g3 ?tyui8s~Gh?/u2,\:S~u0+Uhby$]z,8t]t,fjYf"s0,l ' Opx1?:ܼF.5kfe6xҎ~ Gw{çcp;ps1~j_ Uuؕϱ?b\- B&x͔N ~斂$ݱ6@J+s{.נz<a}1I(YpҌϰz,9uhY@ǟ5C:TYhqYcXGīpm@uX (k(!uX\IZ3_n%]ݫ {;:`tP)T$<+gw}l,_#Ϡ1ۉX$ C`))[m7x-"# %Lz?K?Pon\_j ]xn6Z[)+J Ox] *9p_ kݬlz^[mSswxohIԉ\&³j;npPs1X9OsEa?' sn+epH ibaoE:b}p~"rs"1l /g&P<2~^V5Wp7Duv5O3czn<ܐgwy͐8 )AT| Lþ2A3<%~:zަ!5KƑJ/O۪~aBس]y"O_fxJA7<=]`gsLlXea6G <>_^$m]?=iqyK+`&gC20ݹO\.M6Kg;^_lUueoQyP? %3^zNq bltv zMqF/REA8Nǫmzt|RVU8_mNiV^k }^G.KqENU^UFr?s^1m5#ݞwg%%rS߱BxY; 'yJxv2/ev.H+M$dǑp82Rk ~PE8/ ~ f[ǥ}Tx1/Yg !>)h;ISO;5N%v voyտsý{ZثߴMN8hU1sv$th{x(Zvܢ` vNV7s8/i،~\\7f=a#2..eUstj~R'v\\w3\oȄ'RXaW\1a&|wySp}F>C+pɾrnM>_-], -f_|}W}ó1+fcpO|bl>z<r_z/4+|^gMuC7Vgz~oQ6uo;|:'BGvN[Wy["?p7FǼ =; Ox;'.a<}EjC19:E]F 0ؔ'%Ǘ%s:n&"7ïcbou}vۛ$6Y‡R/-RN| v]-tWmEOSM[ T= ׇ=4w1U3;i ?n̝ oSsfp-_L9EI oJvo68͙]z_YF98Bv8 ^OY4Un/)"yO:LzK!,\JK+e[慕?kǗ\#8Q=kFӞe+ ߗY k+7bux')j9v\$]:^5>Bum/ҭKc4ʡ'ݎ޳G2bc7y$$//?x%dMsW,nwwkNtG]b{GH(m0}>Fe!(Q=}?~8:̜_Zv1xŏZхomK#b .k/E0KQx7,:qr"HCF)b;Ox^Ɨ&H_1#Ʀ.cpFCR{?D /./hy cnI9eF;tn&7Nxx=+c?zڊ Z(I ߃O<ĉS!gW><%O~h[!D{}1}wF0Y5\!Q_j8݇F—ʇMRҢUhU E>]vGػ·+g;iŐO {F x`E`[ ~cji p{\l68i/#z_|'qR"OݨMSWwEЗaO-Age;-+F|X@ܗy-F0fY63xG\ $G Ix0>;஫Q ~ w9ɧԇ-[/fM=˩}Ч$ ARBB]Oo$|; ^9ANQx퓈y/K>g-}?N$.P#P>x<5}d&r__ʿ,6xD!Rq" 3pWg dBĩg8Z{"x7ՅGa!,Ox}OBPjX_ۭY%G bޯ.:#7I6n}Rnj8ռ0KY[%ۭ7 ΒOYtFS 鮽})_j D6-בݨFPW W}|>oAm2?󺔢o2B٪_?[_Ɠ+!sYZDd85ߏ/׫M==,vx2aOyxXaeTȎdOՎG(&=7pO޻;_oaly'WיB#SB>OW/~1fݡb;긷$>T{oG $ ޴c4РG&1">werMD- ?4%"zR3bO?)A, `uryP c/j»uGJ]+g)O'^$#-xG0^h*GpI;g^~D<:5>BI >g Xi-q>LF;EOcK/p}/Qks_G exYOׯC!Ohɮ|U{}Ju-*av\ v#R ͟3:w"ۙ ǧ^F?6+Q' Cv$w~ӷ;ڲH"\SCqsh DǕ5a/);ƫ|!jcrGES |D{OP^a;>eE@˱_iuOZ_DYlW (!Br8@ G.5@]-ĺַA;) ZΕׯ| 싺)%jkoEI[8ذjhB։za?cNg "{la_6n哱J7Y~=rK,Ÿ4\%.|>ysSniLnX·o&뺺Nc/b\y*~nW t?|?=jߖ6O9jLB I/q?#oFsj۟PG-|GtG#{b?N^0mDԷDDf%~5V f2(X)Anu"ț lHN N?B^OoP.$P?,@t®1tUn#H[}3r Aa: @'[VglLuR _3B:U@,Z574 H ŏLj}:$)n5Խ:Zy3%1_!8 xk "ffĚ%IVJDŌS>}&@ q_׊QNW# Wq;h}@dU~;]u;"yXAk?"|x N/x4E 밮B@bs_|#"D)Qē1;g!x#Pї(<#xsQJ4{v<C|Tq\{ئq2#gu]DQ9؀Zn dAHV"MO!Js|L/vF^EST-Dua##Ȯ$!̤幆kR@C*QCϯᔦC)>. +ݕodÄS[GׯQ ,M"Qێϻ-W(A$&.;Qhі,)G,AH٦8Wsz \'4!Dz \ag17E>!䎒)"Hޝȉ49;N ө "6͹ a;?!<|}(msYܽJQB? ǻ̵Hei2?`n DY+ ļ"J[B$ .#8 _w_Gd`g4=q#3SFO33WSgK`MˆɑhZV -7Jh/ zяWuG]0XBqP >s) )DѯeD9#NWm3v\)o^s} gV>!!9tyD;gg*z"V|m~NDXP6FlewU")mNI#:(h/AD u1Z=D7S7pEΖ}$_Й_3}HXOf߅ ᭚ò+gCN{x{c4=؟$㝈<^ۥz'%ĶU#+.R%_k~ }tsڈjgRT!f=]Jll{ OA Ŋ?SV$\-2-2Bo7n.%}A,Sq b}m!v'md;S# c{Vz=`DK4Я!:X(ID]Ғ{ڜDm7$ǣN"*R֎HbMOԥM)ΊaWT7CD_'U4{m;reb:sVuƼ⛆i)S%C s1t^8b;wG?GUx6[8|:~iU[H:D2t7x8ͷ ‡()ҽMYˆ+R뿛' CdhI>x!bkL["9}ԴqI;j+-.-}J{v!Lb4{qN~8ah#_#}Z(wiP"ˣB8d ڃjz"ToaeCR[?ݱt&:ĸ^\~Nցl1]!&!gsDv(b'ڋS 8kLJKoJf0 R̽Rn\ qwrlvqKd.J+mዄ'.O#P F)#s yx+GľIr!fbAO3ب8#Dri[IvgG/!oa $S٤EqHԳ4IVu^ ߑ\'F+xlDS74qfԮmOI#ǟ QA2q-$q 7=u_B2mES^$6lt,"Dҵ:#D kP+#tM)nQ3 !ѱs$9j8ws҈=Mmů6"'u D6fJ#oi&~7.d8\)j،RLWۚ#dC5ЏX*'C q^q^θ : 9"XHaǺ=o A"GlGk:&↺SBCgNYp"aNfF>iyJ8JύᧉPP[#j!.8GJ!PEԉ¡qipa È_j:>HX@-o =y6&Tcv̙~"[h}$Ѿ|r̖ CaC|Pıs!9NIJ[WTEDى"$,6BC@ҐeN%b&NB©\v{w g:zJ5 T {o Gbq5$6b;݉X'>FB#{}MJ4 s,ZɈɛ6 ~=U{)/)w!jɦbY:(.!I35 )ZCf+e~D6]"s#lr[Ll i{0kW&'vOC2ٵ1AcubCg*3d*#(^DFHe]GjnHTqHL/>/fE̻(wA{\j 1ASJeE#HOwDfЖLJDCND?7>CףfOӐn`uRR!v9?.q9qgs DON!nSk,&|PUɖƐDP!j^- Z-*A_;gMyX_Lcg.>2sCۮR#H0zowA$o?wGbf~7lrxӞНOH感wD])8qWuAYg$5jUZ ?*ICPDԏSPޡ"b'}R{^3~T n|}1KGt79Ѐo̯"2Œi۳wy!8~qaDLz)59IOC+?w MDiW a~d$z)sFH̀Lڐ1S=(wM4G<쩹wCmq7IR?sҙ7InUvV7Gjx[RlzT-L9hpW=͇2D#H~Yiy=~D[G}$->**,=ouA{w".8/$n%$Ɖ"SF^*HNm!Unf<~?k#N H&nH!LrTһ8ٕO%!yaѴjȰZ{{a f*J_r,ʜvql^ BK36(q1wmHy0eҦҧ iђ8;7 IKK1H ץE҂=Sg 1e'pB !3'otH?8:*aʖMFBk'$HwyFh;CF&k@8]Q1O{o*?6߿w9COq(b{b|b-bC|88}|=c9=|89cC}98u|B=o;Epi/data/N.dk.rda0000644000175100001440000006730512531361106013211 0ustar hornikusersg]U?QuW ,D@,ZPpM BM(CBBBr&L)Z{k! :.6Ouvx3G|i~00^10܏x_A0@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@:Ёt@sr]}=s$`_ 9|Sߒ÷p9/r'r~ r~$a!,~l ,~| ,~b ,~r ,~j ,~z ,~f ,~v ,~n ,~~ ,?b0b8b4b%` |F  p'pπ p' 0NK 0`W 0`; 0N 0`7 0`;o 0`wg 0`; 0`w0`~(` , 0`; 0`w?0`~!` 0`~5` <$` F 8+` <*` n À p'pv xr {n?QS|ݲ@cջ#E'8ɋվ0[zOT~֐Dq>q~v<_ <qBiڹMc?өO9#w?ǩA} ܣjמvTz7k~V[BqS?_MߠJMշ_n^~I5~|[3Ew#:>8KY3(6~ !:uG\ ُVLq s_1,ѵW[ AX^UɇEP狮~|Jc 6jˡwSD/Tk7!{nT8zڭ=|~ WuRǠ|]Oyŗ^RB]κu %p»gyME5oex |H!+j|c}~2vԸ7wk0&Sz2ƾ}}:yaC|w?}\y^~֡*o s>r~FQ+"ޟD7?<NsYs ѭ]٪o?Wo纞v ˜'뻞u/繪g:ϿR} z79ߺf3-w'%}-au7ೕW}}/DŽ:OjA8+>WD_- ط@On?U_ \L}-olT?WL~կx~؅szpq?~Qm»z/.X5 c~0zlᅬ7 ^2Wxڐ9?(>MBEAW-^;KMjoIb Ow{b{.~V,zsoWdvw_V.R7 2OzD. 2Q4jWu<.q.b/PX25aj7Ɓώ_8˄c8s~ rķT{~DQv޿^W 7-,UbFyd/$\Xxpҷ'-}ޏv+] )>qcECx9|tڝx' 3$La/OӾ?JQ(_zA?ܯ]\ #?}t'oV S^_LH)ˌC?zC6 jyߏ>S'59N}B_'a>%W4_z 蟦6_>2/zo}WsZWv;:<վsI>oU+gyoޯ慔#Eq)F=u:|ʯR4DDoD:qƺ\'&Rֻ?ɾ/A9g&s <'Y߅<Gj@xNΣH/B3/zںߠӯ\1s*/835C_<@U(GUS P(qbM;㏋GZw;衷:[b3|CqPUa)rK'F,H4@^v~2 L󝋅w?pӄ΅̃^t3^a|ƿ ;?~SoV,<xQn[Cq%!z\ߠ?~ [{,z#ϟ]Tɢӧjm[R=[H/|ooY>}CORe?$qB/V=_x` E!g\y^؟1O&zj ~ejC=4oRӺC4K~|\/|7 vM%[UsXtK9'$lC;@#g=Oaڽrfiql"_V<МmͿўsTB"D3e[ {L7+пU$E?zME裚կc}N{Y e_DO?DŽՂpy2#==`T>ހhlկ]WV8ew {Jsp?*>`p ǼYB=^sMO3Q/1ip PưPבI/.L,w0(s@?/Cz+ ^Q4*7o$qtW zþ?Kt>Ah鮔cI~SӬ̃=R{3BO#i@x _s0< зou'<MC;w]󦧨ԅH彿kt.>$|ySc}>.|s@aEYOnn^y#+nָ͗BcГE;O5D>yᇭXrc =L ~{R =^Əة;/.{XI]k\F;L`jpozchQ?,}OEI53 ܘyUEbDoG?Sf[Ǔ1/zMy1&aG݆t_#˯B?*?kk|_X"Uș#xڏr"6&]e.;_M!U o@n9]BS=a9.(Ƽf琚vGS?u<)|Ă O4z#|MAU?zp,~_qQǫi]qoLwQZ_oOկOSB <?.^X[|AC?ѯB=ʯc?x O{b_x<;vR']:aOQ)KWK:u'I aov`oENA ?ͽ}$~s ?4 5W?5u!*4#)*3 R_~1Por ^)Z˼_ZSM4-&W<{kuRy`Ӊi^UV^?{w2fg۰u臚_T4M=Q5]|T}z3忩_%'oֶrj>yѕVo>? ?^0lž:A Wڅߎ?[?/z3> ܈1uZΛ9ы>Ra>'<*|R 3}*CgҎw5|Dfi1yXx:7-GRLp&hyC}0_r|}tBU9'ݟE/ Y?twOޮ%{sD]rҼ&Q\?xC<?u7EQ ?[y.* QxORdK/ox=G*{Qzgs4ُ};-O+EtQ٢;Plsj7ooOMMW"qNE'E5#z>уFO(7>μ zQ}k&tv1~iW~WN[+ "]#UԿ"Ÿ~\_X^E~5~U @,sߥ5WU+c}O(o;{݌kbHF_0| !A϶eU%zdve'k"\#3rXe[Nco>{kfܼ =MI.I;˱T< ;(tAቱߥ͏cQ'bλ.ro}vp9jwS<P}dmcgu?WtsH4~)~5l?a?oe/m{K%*;Hz{Vj}ʻj~=p㷱Ѓ?59o5}=4_c_ =Gq=~*ocVv~I{g/T_ǟ5w0rbk<'v:{Gs |?j"S5񢫜K *G߷hCxq W֩~;}?ѭ'u)lFka#z~GU?yM,z#>KX"cz6 ?/C[ W_*\`|A΍&",.Jv"_\sh s[\0Kx-~sE 1}2,<_Τڵg/蚟}*rh>W/R?E_~75dj|PHKދ4N-+:!1֕|>g]iǽɝ߷L}tyN<v±/T*ݷr(&z3z}o#qֳ'%t;jDjp3zѣm|eX5a)<=vvKpwS}FO>9-GbHx|gb8yj/‹gnڟ<( +;yMAbkf1~万9#.avYB~>ڛ_.z,~?C%7wmU}:z%7SG~GQ>E~`W?"٠>:zT[q##5Whގd T^Gd~55`ȉϨZ|~*oVy畱ԑ+&>Nqfy*r*l%.i ~6awZ8o}NWßa)O`D F<",Ov q!ó+9g ׅ_zo5?kO#~9D DŽ?fЏ2CxlCs(xSvN>&o(|m q~PqOmi~k?@ վ}߹B>sns4ÿϽ ~]Bߐmq<&ݕD q]^-ݤ'hg"Ag ={'}3)?繅~w)4B zo_P7Cٕ<^?~π-A;r~S_?rzʽ85ɣj_& En-Ye h+bu/k&M4Jn'E3oU=A/i wG/ռ,''%v&2z->&)B ".^I\SW:]DćW58W._Wu _\fq4N"y alc E%ojMQ&C^q䬵6.ϻ8mK׈=P_MS<*KrÜ%kߍl@X=F^xw8t;R-II!ţ_:[8{OQ%<4Cn?Xhq3ntP lU lhqh2]mgu cﺢG:yO,yٍUGNg=v)G\^Jj+k| =)Ue8遪O'5\-[X7ro]g{Ppr/x RkzvT?>܎M?c#_ˀ%y㧫o"7t fa{wkso/"Uf?D&4/4=y÷ۡ75#EQ?+)GhXH4oU˻#׻߰^m?)k&@vIٍ-V4"NZgr;Eء765gD64~fGnpomzBD67ν<"[c\t =qd%gzTl7c'+wu9ܣjg{Q?IuD&oV*z ~X}o5yf'y_6pL_j{%(ܟ?XF-:Q gVW4R"{VϿyx;hvq},OCv)v[gZC Mey\qJB_]?"6;֑ M#kI&eq/m1y'~˱= w^0 ڍPpPvM|$ꗾIɁ6#N|H_x ?Gsz~w?#>q5p20?D=q|sa7cOGO9_~d_8S{}oƵZBͿN%?J0_a6~-kZ'9?$"N;"_}8Zu a7 ~QD|ksXE1CofzQ&Q OտN>\e<-ƫ7\ϻ?nu˓~?g=%>dn!c%1}֣W_s ap?&|{=RY6_?^=..B Gfu91<;&.Ž}F=<6M-^$ڦy#Ekp44,>;a :"oю43^]z/㼨[X[ۨO}~~hŭ/]=!N!q^N\ݨv[Xr먑oOGO8Fޅ r<,ܴ}Yh5fO^1!+ȴ\1CxeAxx=g ͟W7P,Ł4[4?DȗDknh!:n/EazamZú.kc]%XH<#3%P;`˛?Y=̳R"%_ԸSU!g r}߄^B=r9}yÒݿz(g?Q/} zÏ/eaá ֭'0A<އ5N ))qh=bܛ\z#nͽFuYO{C?$sg{w=Eyg}KGȗK9Fg~zMmokbaC0vZbZؽ"sFD vϱ 0㘾|~<y,=PL7rh.f㺜yuga|n]:۵_Un[};&/478#vvoOX'K=(wϵ_5G?#䵚[zXŞ8ܯfoǯH8C >S&_J yi{TubOast?"c>Q%N} zKR!0t|G7Mndq_>So܊<;f\Oy}1ϳ'Z>Q}/c #Ni !Gr?=j࿺~o27 -NGW@?} Π^Oƍ|SgȋM Ӎc7ɓ]Za|hT 8B>g-i5m(J_ݎT?"&^ }~2,eP6xE] y(sޯ6rO?_UoyF,(jGHܛ;rH0+_5CԄLQE/:TqʫljKN8%hkckU跍a9q뫅eѷON5p v1ޔ[Yιe#6ƅ}xG+9q;+6"{Øa5{7{>|x-ɵ}hJ,Ny:P8v߂>cOa;vHnlg^]N;!Emzqu_-vFWiq.ڿT}K6y# 䧈T9vLcűR'6n Ae{ا/P{_9tsY=R D-[z0"_MFD9]x}NK*ejձ+ݹ9U#S>Uw?=_Q UeUKf?G\|O+EV{7 &cngU7H a\qoQ>GЛVVU^z3~ӓg6;NZ#g'e ˈD'X=^;2.S/ky}1ewGA(״avˇuYSƄWW)wS i']-:- yڼm TA-‘/Y9cWt]OOj?ɾ=O{OKM?NȇK^:H?_y=?R&h`~Ƴ_aJspO~HzY^oɮrK]ZjoL?X"U _ݽv66z7޺L-M~~yāGs68-a~&Υ|UNR^^Aj zʵj Lծ_Wd4o9n{hαwQd2rLVEWf&P1N5j-coF}p%(ve#7g1aZ~>>q+X78 ^/^~'L)"WShyJ;a,XR Μ-4qLᬒ'hع뉎.9n:'ka|;-<"=GOv@wP?~q"wm4Mh-.~<ػ;Ot/Gr$w{zXqx-__:}a=Wjg$/7?ޑ>&gwis/m-(ZZ$ni~Oo#vXO,Ns>u8;UQҞ8ߊI{^{Z8m|eԛj?tx2D]vq 12+7hmT^ƿs+-&䡛H眸OƉ+Z0z픗[>:7W{i>Za՜_󱛯c~T˹nt͛d\O%rz˨sCOMu=WΦE1tP@a{?q㿕ύn;c'ׁu؟66qC[),/*&;sk~&~ݢ}^<\f_+'OJa}ʓ'Fiov<97S%o?zEOL1Ỷ)U v˄|,~Oh?^ C>S_M? $?a?|B}.oN_Lf\N{B^da5+Epn' ];y%'axG5Bޱ=_S5Yca?Oyׇ`ܡo:1sfǼ)zScBriG0}'^; }L{gn.gߡmr?lp.N ao RjuZeU7USB:zEװOǭc*QȗuUϞ>ljg>S 6W > $r['l݉ۄyyl?.Ma=_"#4QN+6 7"=B:5Vs, D^aO{ޣedku|J.8?#~#Ucg /-Oթ+z;RuA Ɵc'pt6?{ kҮ:{CF>}6|ѓ?Ş߁M]> =zOC۷߄?Agz1aL?M5~- 8Ux"c?~< y!FOOgB>sҗ_H?Ùሟ'~ֵgvj﹤\3?;A/AI#ױ<c7w;mͽ]^ɹҜTy^=1SW=aGhP|5;{=lZOw?/W{U8gC/u?7_Fɋ&@U)>R%ZW8qհcrO~niC#mD"7id5ZcKm% y]>fAɳ0mO~Q"?W?|;vG{"Ap!r۾{~#w7KSbtx 8c*yb0+~' J\rou8ϻ'jwȓ".ɹ2?/fOEw5w݀GW4M拈h'iǭ߷qѯvx!t55=ra广w;X&ݡ}K'/A< SɽDݬKޗ8{߭~unT~ MY/9OwRGг_(ʟv ?}?}}>ӻ}[s+}>Aܴ}̣?rK<1yu:T[i4woDn[Ma@~a_XXx~O5|85jeD՗ˬqTƏ~>J<8*peרr_UojMeH[layi_`_X~noPb}--#Nl#׋g^B5w;2Cx7zo?,2r0%nB<'9› OC'wks'r7L=a^GD?0BǸ~|o{,$C%C\^6|E /}l"5odx&8"ۏ2?rr9MiS9?x~g?{hAwV˂^<)!nßzϳ^ iO>ݔv y _gq}`OJH~ء=ZGJvϿDY?@댳-_vgyλ~.Bk{}YJn7!?x#|&ed7a,}o Ewq=B^i}&߆ݧxK|\Sy{m a?pw*Ϥ4)}X8I*\e,-$*ub;@oPş{<8B{Fv 6u6O羽8dzk)usZ*œ-&^̾'kqʱ)̀>TY?Ic]x]~o]#:GmEMv&R-Ʊ|rM Ѯ q5O#};&v6~-ӿq_ů~ts/gr+j_\BKT6߳'x|Wm,_p~;; ׇ}~u*~Qu~xkVv87^̽~b=l>6=J *^&+Wu *O_u!"~b+2_F'emxpz6csאo`;q#wWgڂ>krX2FږBהrO8͛)\ҋNkͯ{/ /icz{ W ?P8ra>Ofz=^A$xg&O[v0Foe3wsSc~w\o\vmo_MzEYDM|_Դ.?}k~!_{uؾW.#~Wkb:qG}eyC~9sb'_b$uxvNCď_߹ joqWI."Io?"i{۪T_)O]!JO>|RoLg\ſa &*Ļs?N ǐ*[ǰo\ 2}v-ď6S>:k\K?Gۊ<&z v87?|&{^}d=y8WZK|Cp^_^^N˹J=|y"G-<|sk, /Pc‘ `*q|68R}/x/QC-n =k:qѝo9k_4+""Uqk!7Gj/&Y~.~mS.<ݮ'[[ o#[ ch|w߾B`_ÿDwO<(ng!zӜS}*<)JbU^~u&#A{^aRO,E!=s&|Vr܉9qCK]Ν!\H~+Y*L]ģq,郌gS>߃wkăvow הD[2=#n*&۾gvQY/ŪoƝ)ɯavGѧw9 /toװ 6KlD4W6vﮉ+"q677_*y~5t7w?hww1^mxF}gqz-!.'/C1ߥ<=i=J}>O͟vM=v z]o뀏L۞,8{'cߡssc=&w<7/o&)qүRO\A>+1=EqG<11r}+~qo7G?-&Jknja7,n|k`O+- q5Ua-sϯį r„ř1Gdڻyq=_ Ծ/[~ϸkA난N䰋:[&<zs"%hB^Ȅ<}ÏK>?տ¿Ⱦ\=M9Ußھeq?X{2b=4^|+S]ɿZ~>Z4l$c[=L5Ϩ9 y ISL_|gk#jG_Z&p-C^؀|xu^l CzOŸnvޫG7@‡8wd(C\yN孚 _=aPx3$>dKLvD,>kV&w3?v7KhveBĻh\Gv9 |,8)ܛOB9/wZW{iݩOt8}ks0oN®ڪn>Ms=[G>o8 ]8~ ]oVn8[ 9:1?)ſo޾+J=ztڥW:Q <=;'WRǵ7(OԸ}}@w#OGox.94wп4cCr&GL#-{ WzMJOIO Axp-G&vyjȩ Uյ_ X$ouP8?};8~ecUsImPFۈ@}o?Z\8y6 µя]oE7|Uқ[Dz x%: 9נ|s}?~]c}?웑'^~?19P|7[|ѓ&| <}1>^8}{}vg>џG#@8qcz؟uij}6hvsT;[_aߩZZCC޻Jwۉcy[4Sx-|!Hap/y/9}yPDXx1f7P8(X?vi?.?}w<8C1X1 ȋ}c-bkGNwS8cۙGs$&+ƯKޘSշ3n!l/ؚA;95kiqhbl-SmN"{!^|]bb C.3zkϟv}}y_2bg!dw_OohRa@]#>W:v+5hU*؝&nVC7?߫y#'Џon>qQ#?n2PF&58ư;s qANJ̕E6C->xE6.a#M^|_x;kK݌=}ry9d^;^Du+|G3W^>$=(꯰sۂht؍Acg?giIt&E_GLgwkj#g8~u[@}1 w/fG/5]kmh;K?;ZrX M|A&/D{L񧏯zc11z?rt{#!V]£g6?6Y1C/5oDJzg^Vcs()T$ 卪$v&mg8Qpfo"el=1e&ZP62VǼWWq/R>FS˰oŜF?[ ] wǞG_ i!a' /C9N!Z{7?k?~Gc+:O \/3蒗%f /=~%"I{`j|2F2{㽉q92-p܏O5^=q~/a]䁈w.Uđu^ۜ6qlkm[fͽIhJd^.w̺b_#gķ<ɋ/c5#_:_?L~SEw)}aO+T?EկS[կeoq_O=sMZxwD3e5~~vZ5bt͑7q~:~w O~5!^)yOL{Y;X'q]ΡK{R?U^/>"/GzWSR ~52z*E ǐ&f#?cxՌc޴Ƿ~5kۈXV)E__"?>sӻTz0OoBkg/s{ ?Vx Z!BǾj~wrޚqCf1|GiYW):"</蒇0 ]1U] cŞџ|B]ڣw#olrb!&.)tQΡs^čA7|`c[?]%ԾV}A#Ƈ:3hFqa}Y缴T9?V7_԰OWG_Q<^rDn#.JF~f׻*CoN6솣SW[[nFaβ<$/[<kxB7|f9< %{8^gr ~ps3Ŏߗ?'վ'u=+iy޾OYB~!/`HA4rwj= ?3K4{i|5;܋ٱkۋz1G~?8̿>[H;v3ȣ]?~1UkqEv̏1ݝ ?CmY[';߂h;.vCϳXwvmz!z_8a"C[!!WBl4U|T$G1_:COog;OKyzoR)R?=Tؑ?w8D~%y!MuK=w=S}0%}j0}qo|r*$xy2Ɓw#3?Vm"]5V_Q8UT}RN8iSDsB>qΧMKȼ2? o%Zo{j|Dhx7 ڀ}1zu^H^9F87cX#7iA|AA}{m-u-OQIj.voΣx.zо>Y?^BA߇>BݗWm-bg/~??~d{h7~ zs喧z;<Ì_x+pcD^q11riw6?wpuc(6& yFbX,Ո/wbc?rc s#<TBYjwڙ_L{ioTtIg>u&L#f:Kob_x=moue:99 ti_NLN8NЯoӾ'whg\GmmWaW=vya l*4? qN w[cwx1R2saknsv#qm~~ahr.Exl~X }+V ͹xۉ|뱓|? Bk>vӆ?q- &/B|m- b:䕊u\j'j=-tOW$&b}wzbĵBK-82ǿ?izgq{h~g`\@ȋwA).9汾@׸].y;mW]ro}d!?g_ :1, 6]<؏yAs? Z|J Jk?F|y}:${ )}PϽ.ݕuOyg=|cDžp8=7O8g=}2C/s y_bΙ;E?Pl~{f1K!'VQ|>ǜ8=z3O<}lLon3>qq'}2?'OG~ ;Ï'>?yq~,z˚,CD4Epi/data/bdendo.rda0000644000175100001440000000557112531361106013647 0ustar hornikusersBZh91AY&SYW rG|Tu_?ߠ@@A6)yz:$Q3&y4GmL4MzOMcP! B4!A j` @pd4ѓ IJ=DOP i021 1& $TSC&z@ @ UO ) ~kVnp)wts7wHFGw)t]:n㤮dQ&m /:@Q< 7eQhD(FPf -`v6}hGu( 5a q7ubX.c *G<(#oO] :8Z"5]>xjggS>Zs-49,@bx4c6vhOۯ"if-v$+يhʜWYj2I*̡A&6(ص>v4Xuxh6w]U`h1NsǗ A^(Ld4<=^:yޯ<+$#s LNXdȉ(;v;C݇x77<7v5ř$o]O(!]y&"ґ$+ Hbs4Dd)c uݵ]7:/WnW.i w׍Kĝq\1BBIpZK*tґ H\RcܹW BPl^=2#z B ЂAEMkӼ^/=wzeo:H 3,TFdbAhILli!cILPh(,Л%b4ccXkJH ˊPE&T@쮖YbGQ4 $$[Um4V6MX5M-mUhՍ+2Ul[-mXQ[ۮJ-ֱVj6bmJjkUVFj5}Zk-Ư|m% -z-, xm`D-oS+5&T^k335AQP +ޗbŋ,Xbŋ,Xbŋ/OON. p\. p\. p\. =Uv]z,XKԱbŋ,Xbŋ,Xbŋ_1x/ .˲v]ev*.˲Uv]eث.˱Wev] .Ut]B{uv]^^^^,Xbŋ,Xbŋ,XzWEt] .Ut]Bt]EЫ.]Et*.WEt] 2/%众^Ky,Xbŋ,Xbŋ,Xb޾K/"t] p\. p\. pB/%众^Ky,Xbŋ,Xbŋ,Xbߣ^\. p\. p\. p\. v]E^^ x/b,Xbŋ,Xbŋ,Xb]p\. p\. .p\. .y/R/R^Kbŋ,Xbŋ,Xbŋx/. p\..t] p\. |e||||bŋ,Xbŋ,Xbŋx/. p\.Et_Gev\. p\/O.˲////ŋ,Xbŋ,Xbŋ/r^ Et\. p\/=Ep\. p\..y/%众^K,Xbŋ,Xbŋ,X===x. p\. p\. @P@Ph7Dw\%ui3de 4"Gi=` Yį0E*8 :{z {Cm 0WHhhan!nRoJ{7/^uy0`hؚRH Lbэo:E2469VbFQF{yuG5M,U9B"B1$CIW$%To u<]x18a P3qie<Ȋy{)B*z/hkATAq)WzUsܞ8aͥ~k9v:{oW6?z2#4}Ќz)#c c[ *BF"D V-4+JW޸@΢dCi2bbۏƞ%r՚碽}㖯u59T@S@VLJX1w$S pMEpi/data/thoro.rda0000644000175100001440000005152412531361106013546 0ustar hornikusers7zXZi"6!XlS])TW"nRʟXaqjnj-&dV^ꥍ k7}} qrRs杋ʂ#}+,[J75)2X: `rR#~LOTAZ-"p-!}abO̲<*+Z`o1ڳ.ڥ%x%g// d$f#)A[0K*9Y}3Os 0+w)$6"'vI\0#m1ɄJ&(8§ `Amw ipМo$#1&3jXAr'vE [E5.<MTrE\>ՈO'K\,˦J밇@JnW6RsyʳصH{{bFil!NDZ\@Hk&\Ag D?KH:qq :sQѤxGÜ`3 Q= 8K+q+vHc\s41Yzz9Zw5PT0$ lu1Vq((, x |peKp\J =s TG!,CMFSJg=ȋ^/:Ģ:H &o?(L4T$j؟5v9Տ_LD|=;Ju8tdvP,cœa@Qu>Doj>[M5O׀t8\3B_2MKך{YMpS5楖U^)iWyU8}0nfM ހsFGܟbrx^S\݂'uYSC1f4n ijw[GB17T*TR\w"w P2Nkb_y/E&' T{VZXX2hb&+ci3)hxN:,\1SƎŖZ$`T5Ms!j67o9aj:N+}*-[quI0ҡI߳R i؟>\kfYD5k^ Go *6(-ŻJ;UdOEq1# ]Zs{$.eSVM>ci}'WϚӸ68z̍r}kNuBa~eHH(޻r G?{Q3U1FXVJ_61$A_RȈ4XȉS2c}iߙd}$54+ ϓ!cǒ~"i6vQ}$3|EjS'r)WLB4ӲP=,%)<k D>ZM1h w_ Dڮsw564iPO;jϦ]e dMZoάT_x4U{( 20@4y>CT9H07bD/A'tiJټ c33;@^,䏰yV^<ݔ#=^$Heʩ[ `V:]I+4GX#]TQ}RPt0[X-Iƫz!w!{w$2nF`Kı4Ii|pP#Q=Jl4 +4]~ XAUvz?gN{ygnBX3~( kܨg-f}fm1 :-Ez`KR,u<մ3=GmW 9tMYdZ`RԈJTs?gn{djloׂ9$޿rV~U,ao,Lwu5dqMJkiI[kO_\2IUK5=6MJL?ND%P$acGF:YA_u˟Y#fC'#$&+Mӟo!:7 $~/) RVsqp. &6Vm4mv+q6e;7 0WuZuky'b/e*h;ƣubqxLiF0&2;%DskNF!M.dusGR0ϋHHw> \ÍUBJ4rOÇHPM}ެ`Mxpol\ Ўׁ<$||BpH8>Jҕ0r,vPhG\cB+A +pRgl".t֟HxɌRV hA<2/ ,U-&s!(|yGqOSr.Y^:щBV߼HМ4_)f ]4^r]uDBrk-L$VMض]͐y굃krVOyƫF0i{sNϬxɅCv9/m!"1jn)I>Xo fPNtmtc>Z q|xH#KܔnHyث:u8-*B_^˚l`5ǕEnT]M`O;v"86QOq% ֶŀ}IKW@R)΁lR2Bp_2:F"~GAj:r5. O砂Y@`h|n31oIKR*xIףcFúLBH"~mЬlX(ubf~0\,*O2wP&DM=a0b@ m/7_"7gCe&!K>M_ZVi\:uĽaE;Up2:k4<*x;D>ʼnJD/)"T`^UQdpt3ȇARw>$7waÃܣ]9:BD?,oIo-1s4"U `vןdN 'OӰKy(-Ԋ1_iBvTW@ ҙ#gBV'; ΏKtmLkX^庱$=u`tx]Ia-پSV6v t'Q߼GLA@o~:zj*(̗ŝ҉JJS~W#mau1u>4nA$}ߴp}ZW6B'.=~B! vщ0G}0~^ںSgV=G76U2|+4ɮkI0FB ##,R3o:ƙ}S4C Exw5JYg/@J1Y>Ww7uLBu^Z+ڰV3&|}'5O9D#":B=IR馝Y*IXq8M=xtIqQNj)HÙTʄ:Cã43^csI'neB& (H0e<8NRsXh7aVZ뒈L b4g# kFxԽm!O]' ɦ'['A+˥>uBjCk|rT N-fI kU߻CLAAKңWrLrrp4~`!)28Y}ٜmd&$,7<Դom9+$:]tGijTHq!6sG#v'"P(daLd6`f uEW;TD[V,/EM4)o@IS,(vvX: Zc'k_$D^*l&|1ޕ]o.e짐7}D҅ٔO i)4x΍NoI*W3b_<7Pw^B{HQF-j\XKG uZ0RzcF&)re7;BwH,RT3D`ʲ%rwA^jЇ^eQ]+pSG"JW/0 BЈf.'U.r54Uj7P#"za @OEʆaox 4I~-ҋ#o5 3@u0ؖEglKSn0akH!mUDMc~W_S?*oeA@[4Y.o7!S5[#Ys·r-~\kYѲ >^XͥHcedzjвGj  IqE493=뺳s+Q#FqYX?4E~J}#1F> VWޠOމli;YeZҖgv'i0a[D %>/$%`5~W`GqLDĜgeCPPON=HT-M{YT02 -쿣=f)L|dZ< y_)'C 4iELXZ:l2{{-LJ6B")R[&W KI +dw_4[lR<M|[@.d1 ZUȅW^S#^AIN DQ$Uڦs@G!D{bGBUp@]x('? ᘭ6Fx"v7G˽+E -UQSϱi]SM$c,'yi5|gj@=Rfe gnk_ЬCPz,+gFJ@YBAƹ9+ot9 ga wƠO#í/WXd}*%5/0=v_[2I `G7=:,ҟס~8UY 0<Jg•{ uF_V*#q—6_DE8Hcf%8`/M γI*PbGbkؗ/$$Q@P >, g9'ZbďE=k]݂jX:!Sq00w 3^.TSL&)J5 A/."VTAWX 7'׭kmL!p?srl*ft䈔m>DG V H9gi.;PDXG+ӥ i'3#l(Ŝ6ʫyȆ{%aNB['+Yp1hM H ^SҮ3](N>O&VJl,0?˃7ɳH_U[%R2W2TI;F b @tuM/]zM6P9NBoSV ~B4ˋl=@ޮYR|8t\3">3C8LA^:q;R]:::Ϟ]sdٳ43MFn[e&XY= O&8BkaIR:)`N]0^5pn #AwX)`Ӗ~C BFMP< Ӵ>Zfu,ǹ(\'2:`S\hX0}\"byQ< '.4/ 'k8yAN(6SQgBlp oɴ_wEi݂^EBZ!y!¤'oiryD(βAŒIVKKZQԄX:jCw6sKhG޹B^L8Flp\y*`W7,aޕ T&=K8" icta9 M"Ȁ/Yx`nc;ul,\=mcEsm.J}5ESItp6qf{YX$=h4S5Cze S71=#pa񣆀ٱOi 5c0HhSEW1Ŵϗihg//z6D )f"&U舡v2."$3w/C,twAX7m= ?cpՖ-v/l%˸LA՞ɦ& t>e8ۉh4M= $vXM|@7N|+\u- ΧmNrcvW gQ=^ͨjL_ɫײv:',0*wu0&AγyL O6ܦZMz&d1RPGp0ܧ6p-RnK(tez?|*I/Ƒ<#J`JpT{&?ȏ_?ݖK&pmwʄ_dpp7i8Bm+讋W_|"B Z$bC.Z?/ °v@r;0t;whQFkN6怛*2Iag_"5~|i]4SvxTuʈ/Ҳe?͜/ڤ֢Ѳ/kVByp1vQks}Xp%->R֛5u`PZ+BaΏBW Dl1#p#lLMdCuފpSbڻ} f|G}:qO#RP94FzM2u]z.o_?Abܶ,vҏaU@ek4E "ƃԉr#K]}{27l_ H kǧ&Vb!ajuG+Ǵ֖ԛ}qNM!U!9^gv5 Hkt8XolKNJHDS7dp Li/ JR6 .;&PuqW,ҁpllPʢ?ҍ ;Lva1#}A,Q:) Ac@k@;|HۥG`>S6D%lsM" l+o1\O!zTg5Y8W|HB<}[/UsgY#tw^I4ntmw,*+ \m0F-b4Gf hq!MT#$)oGyC7`3Z6A6f;W>6sF\a@ŘNh ;|pٱvY}XPePq˅⺞#]_փVU|E &F0{Hx>A[2*=Kص+r sh4'3ResnGA $Qԃv/a|SO%y`p=_՚ԽR#EYTQFqnmHki3ls6׌}?oHGإ^ 9iLϣS]hb 7rRkڎ6aNC!vRbc>I:Omw6M0 $H|-yuXş7RX_L6]'z <ټ0;%94 !h h()Kdl85-vPApjYVD_}Zz)bYʁoDegY'̼qUpum)dGxVQn'i$Xl:P }vR-MZ4dLJ:Ǫٹ#' ^Ziłv덐 JBa= FK/Dl MZtmmAkWG'˫jqZ iFy-Њ_W-J ە<>@)5-3#ELSL֮,RyQ 6nD҉ز@CR>3$3#:Q<8LRtƜ;6(<ɉW/B+d9)_R\nG}S x:+>޲ߛ%BJ q1BsY}!yЁP}jyZN^dDێP|KKZ~1M0ȂFټēMQ43M]" TݙhwŞsƂL'K!'1RՁ4ǭwL7!H,`.*jp@Eg-EJЋjigi(\R :gM k F*r`|Yg4fd\fFME $1z4Vjx&8mCҊlE!-dTY_8}% 7{\>0{K:35\ŘsH dd:{kN <{GOmV#{C~a sx +SSe]vYE`&SD6=eÎ 9ثʜ_֦S߹\Kk*kUe#+ #esڞu156*ФY-c|lJ.OK榜 [j^RyOsMS5 '6cW7:tH'ǫ6V69()﫳kb,v?'HH(2i=oKw+jlm}xdt_ڶa)[m1]\zD Hukz,TF#5ZO z(pϾO]ֵ=/H[ȠS_$%q]M]Cޮqsģwa h8Рdw.NI;Z7a wy퍇\ڿ)`u=K ϕX~vkGH22f|0^biST%:ӥ1*&ZS<^ϭb.The"9i7|1})y+pսl fN^}"11v!dgC$= cL!Gqn;*\z贍f2X 2W=X<BᒊKN,, Υ!v!|^_̂\*>3%ɿއ 6$̼(C|u B!܌ z֔ 1,^':_|R9#rc#3E%ILlwjirXفj0|9N| f O[EN_Ϲb!U Ou1ȓY܌'vyZq fuuFDSѳZe{eWϠ;Fҏd/8\lsRs΢Y@=3EM#f[YjPXT-8i0ȫ s1o4\~@eYQg:4>.t)H+n ڙ@@1R$У2g09b itNQ,t(UI@@x3z) uP*cP?`RGS7s_]V`_/fMpSQ|=DQor).%*2 4K:w{ݫ@Aԏ' 00Qb~σt$PĦe06Y-wUa=(e$| xXfA+:_jqsZ*Xe@$IR)(!4* &]mgR-66J0YyQh"Lʘ(:A^yu{=JWVH520e4fAkKS(Z гr`$v^(.F8=;st*ZfBv\9% mg5h %Cij%lUZ0>o!t,߰KB]UL0(V,IsgKm]HVY% f\<$'-G `WJл/QAP%Sy}_yqMF0 عLUgF%aQ&Y.2>Gu+u 2)Z1}#%j^Ɯ3r5uUn8HLBTEQU(ui1?NodqlW=h`|fƁ?ЄC}ZcLʉ8\"3]̫宛 +ƐiBqwq<x,q\ZFBH Vwb`"*Q]RJ4~qmV\aloT`uKj$#UB8K}pmM_P~DNwy]#׀)Ǥ3M-6*yJ]N!fp4ۖlDžzOvК=gvl)/hhޖ8R񛘚! 9wN>rc;+Pԯ^O,LO5oR"YO%vg1*1)=[s2_D(.%qԦ.*ܮ^y@AnĉcFbzJmڼx*pQ^JDtmWVda=kR ##A(j7'ѿNFr]t< n`=Bqh~8_uG#>Te"1ί`Lg!c[v(l[O1+ $|Lpbzc`1nUL_d09G[G !i&!ܲdQ9g]B _:ncqlh bx|p n&{"ma9Y!G|,j3V$z<F_b4;咁):~5 r5c*Z~Zjk6tX|DϪCٰ&PF H AMB\!^\7U@ VV޶\ewpT+l4=ʴ:"i8u$'$)wyRKG!b?O`r=a axW aA`'{bKّVxPc4p !cCVNj5G676ϼBĺ QI(NuW=LGcjeFQd?ܤ@2JK[/6VLhPA8}: o6ۘApsOix`萒fuS _Aq  H\r"Dܥ(RA{ǭ_@ܾCٔvju<6@?PvL+Q &=?jg? ]\Z+qLgҟOwXk3h*-^ g` rW?A6e(l~ ezC :jK[HK?v%"/}by'a\U(oGNaWNHUHNې ƶSڄ⺚g gOMdC)K:/;R߮{jb KOiwͼ]ywc90n DtǭNNSuFgw8NrJ5?q! ,c-kvۆWqz50+G[bO}G|.jW$x6vcT'in\ 7_n`|"`ӫ0*`χ ĠjtO t2AvK8$.l2x8eN2-^;015W%Q9)Dte5Fg>#s0QV}D O sJG?#k$%K7&̗݉/~Zis Dv"#jK\0^^ɘ&2dS.19-bfuaILzmRc~o? Sy@d6WYqRMYB9D"h,ĸF@k P30<ə+exH05Ky1[0S`}4/?6a.Uxi [va7U<|*Q*CCo*xG[~g\ [}h\PT]'76e{Vɽ:K ̈ /D[m<.g[d1(;/+eAżFG FDsb]R?* >}+|2]̻u?&2bPTpdGL5_$H[qἵu~4sܬt|5%pNd R+(`{}T?}Z.М0 uJMSls^H駾 NNu  6|$e>송kW$΅`i_%;kěW66  42 !}}qx*oU k@;C=+ 5['+?oa*Rʹq&\u1(Z2lBZE*iVKܴejfPeGl񞅡04UFC׵Ӗa0!1K}_WyrW3+) f(SXD)vʢ&K=m~0 ~`VVõv.LLxVGW;$1C= +5#}򺓪tq*VH7}0Q ~1零,}y=Rr,Ӻ*WJk$Ho""J:fёf9)Sx{G>XʪKEO ͌(H^yldƃr$:>.Q3K~ő .m䖟BGs1 Q0eU ! oa` ,8}(Ty'gƸF,=IEsJ͚资YwӳLcA hx*}Æ"Hb}m3sa67~D!"}gc?]꺸 `UM1%W+dʧ'#SxBW*h9#V)DbsʩFI2ܑo=+T^F5<|:b*%ga:ԕ;MXt;zO$k0V^+` jr\KN}yGsj\Q-s/s_-B@Dp:a@x!,+ w[H'-4 bv J޾`V˽s~P{@Ͻ^w Omt%Z*h +,WR>ḯ;_,b|?BB#,Tzt/"5c$l b':D@#Eha6£myhdq'xvތ7zuZbn:r`zW''Z@[HA}vϗ|E .H5|$;LU+ҏs߈GZ]aN[$٦#Ku`j.XT)uؤgnj`՘M?| rD<Мc&)z{ mkq #)=g1%M"@GjqEFv4F^}KQ-m:FS;+E+^/^3<_7gUoZ]||]-NG'I5\X"脑&3*C1fJ }賢´ObDʏHRcsrgI=9)FQۤ*N@Xt=5c(r?,*8T(c`'RE`AZ+Khuc<ǿtHLF҉em*": #efqnِv7ED#iY&YgGΤ*rpXUZUeچE;v%5+#o^ݼ|z+r;K $#HVFr͂:Zт' Cdb\"RU£׏lFE7 b t# Fdj%Ӡ@C ss\}(ex9ʟȲъǣ'Pז9tO0|!(5EunVrP^hMߒ+Ȫi>mIB#cuvd=5v^SBl "P,FDPjWXx'I zIU {\%4Ӝ܋C~:"+Ye?O]՘c{co9i z#lVOu-i!(=R@8 B(8>VD#ىZ5~0tt -G$ xƆ<,Ʃ@9ȇFF@Vw_JBe=h&\0kJȡF 3Jj?avEOI=Oh[F}L[rxKe}VH؂tLa̖5pKsj@%&4!8ȪI۵SjxAbxC_RNS*s \ѡ((\oG&^0ZV#OqokZ cx`̜BM4Md/IB(3A# WH$);brmo>c+^μ6(Xjܭ[uV>פl}6iJH4d[wmU0#T Ns ]^e$U?hA* 9= &_t` iY=|\#?K2 -.GP Sha PxaHzY穙;䬢J<4mc}mYomHj^An2}0jv֩7Kq_ʳ9$^4 !Ȩ|W8ut\Ģފ/% zJg"?|5se * 橎T؄\HS7HBȓR &?;֝jq(uݗL\F1n xPݏ8b~`YY118."7VYZ"':ϯXMXFN*C_=Vi d d3K Hwx&St|c4.KuƆ2`nO!ɂEjvYiOîAg|#4+bJ! 0?dg<͡\X ~s$ԋ /J|Fadz# Pvx=HU4!t;W ƝjU@HGZq^+ġÿ2Օ'jh)~L8CMj\>hUz$")oO@[8dVe@+y}ް$~rFPRu+SBMKcw*/h:kX'^__loYP3̐>Pss4tdq#+po1}zp-優ةpp!Fq/mEӉ)H>0 YZEpi/data/occup.rda0000644000175100001440000000045412531361106013520 0ustar hornikusers]J@'Uh"= D&"]br16%b>| }L30vfv401(P{jK9)a|`GrI A>7PګPo/8'޽cS"!.RME}?1vA'HW׿]GƒkOH~n-FO,ij>ߖ)+T9>s K--K[7" 5nWxV.]}Q7Epi/data/brv.rda0000644000175100001440000001346012531361106013201 0ustar hornikusersBZh91AY&SYgtr7yw{;jEx^^%٥ qzbn5OHL"iЇhFhD&~=Ƙ(SSMj{LzdFMi5?QSOjzi=M=TUJeD@h=@%jhCQ?J~Se3Q@P=M$RJ"F zh@PiF=56)a43CHCɩdi14 (#iAiz#4zM4z &Ɉ6i=#M2  24)aG!dP224z4h42dɣ4 4d@2.{ICI!!Аkp9n^sqsq]7R8qLe%2!)I`I33) LJ6[bHHA$33p\\\sp\'9B.qns7 \#.rkKprHK(s\ s89s9'ĔPR;%! !!BBHHBI !HBBBeX컻..˻˻컲,..˲.,˻f˲˻..B(vp)SAIubxo7l:?pM[k}=$NՠJFzLMj/Vn(PD:cz d{6<{Tj;Dkb."= +Vғ3>B"{R n,ƪ2d~ n+w l NK)Z)C"?C  s be(>*}4+uKW@4W;N`uLpҜ+<P`z8VK4if~ZDg0/#>>cԉʥ]I*)?J_9,֛C%kFzm6EyWR*E%?wdzGl6 '_;u"QxQTs{N,:߾sIۿ:c=$21keֶn6P]䗱;*yO,e1=!_lmʸG <8C'\Vc3v.b> q7َue0y qpUKY4NV+|Uҩ&&BP T$-Ţ 'u2lB&`E D"`d(Q@]mmk鈓E1AFb1#F 6ƢWoZ[m HB:xV nݻv۷nfUe84QWv1[Yd?#

  • A!hPBpi$KI! $ ;~+0PĒd I@B=*a` `^a))7WqyL::1p.!s&>";@U-5~ o;H5\ 6l@-}ƶ^ l'q@a>΃eϑ̍ək"Wt;^SWN@E8uU\PsIqq3';<\8q+`8p6v7<7ěf 61Q'J9vu 0]Tf$;BY+(%8S]Z((T]88888:~YeYe6dI$I$I$ɠ7wF.T PQjihE4m6 m@lmE)iV00/^z,,v|Hm6 m@lmd mqѱkdYeYf (E4K m@lmd TSM4E)ib,W]u]I$I$I$I$I%V˗.\UUUUUUUUUUUUUUUUUUrxVT]u`,I$I$I$I$Iz׿vUUUUtDI$I$I$I$e|N!au]u I$I$I$I$b( 95wbAፕ6 .4gqQ·5> c8|?PbxNu[Me327\ldESQMgcw.k44`3 A0PFݕѺUQ:+_)]1!\3B( ӳ:+\J(I'D'YHChceڹn;\_WmxL#HVFENZdҿ1+#ҵ":&_od?NZ~;YC u08Ķٽa]A҇*M3yvH|y[2h C ͅ =zٓo\)jTYgm7ΝS%缠f 1$n?pl*"7wǼ F& "G;aeX]QAtu:[D`\a\79{ќGή$h9M6|So1#H LKuc:s. J.|eTCF_|g,"}l~Yo9\+CIIdTKA&lvsS @ NZe XhS14?g<;}OOKMGaG;:VKKX$2;ut%dQGqj15uaMVHW%6Cc}Mpͣ*b+Bq,2Ȩ36H4(){ZG5d4~ a6bmQ 6gVjlتJFe-_FmkTۆbq6}miz(TZyE#J?$ a_SAwؒ@Juϖl I$ԅ@*V. aS1wHQq9Te#2'}.\5D2z7{Z_;D@F X pPE a3ik!HË܎a|6'Cӯ㺣ԚP{Du0\^O|tW!LTJ~BrXhħlD*;2Ce1fyVa7:Dd]eM]^;sɚsL,5GB.&1~**X;12f UUf U8E'M7ah-@4 4 6ya r j'!V\kv=t=%q97!Ep|ԶڅM8mVi2Ͽ:˹{K,'FuylWnFZf}Z2VBI/'լ63ݗ½ļta5spclhYHY;%6@@0ۼe.-AqZ h.JP[3XCTN^8hڍi5mmmET[dQ&Lmx$j( /1 b174pM 38X(iE$Y$ Q̃J&C9$lq+HYӘZ8y1]p $I I$H$I =(`sh]G%'"NGU7ӭAK500d陛oVG3))qc"ٗ! yb8.QkNsݟv~꒜FLfr|MNWIThyukE.p Epi/data/Y.dk.rda0000644000175100001440000017662712531361106013234 0ustar hornikuserswEq]e :f6+& `VTLP6cBr!Ð0sN }ưUVӪ;}W\_xEUW+}]W]RVV}eەmC;n_ve;?l ޹eeT, BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( _* BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( BP( ;,QVvNuww1>7[ jp0x5G= `D2xr'<O3x3 i,6xAˤ2s :+3h<̠2 :/*3h뼸̠2^emu^VfyyA[emWu.3h ::*3h ::.3h ::)3h ::-3h :: } Zm Zm ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::ESA[N? ZmFOAm? :Ett0h ::=Ωf/ B}P( P( [7BP( # BVpP( [BPX( ­gBP(nBPZ( ­wBP(n BUeBP(nw Bp+P( [݅BP( v Bp+P( [BP( V( ­`wP( BPip0x5e/6xAO5x5x v7[`WtNw6g?6 cMA```Ak 2Xkp68$ 6Q >cI 4{ 77x/3x Z'E}2(DOt4_Of?HOt>)DgN'EF }6(DOt:EF }>۠Ot>iFɌM;E}A':E}6_Of?HOt>)DgWOt>ѹO%="6(DOtEF }>ϠOt>96Ofl!?3(D >)D O%=ROt>ݠOtn#dSI>k >)D >ѹO%="}sA':E}6O}>)DgOOt>ѹ*}B>)D[ >ѹ*}:E}S-EFISI>E >)D}RՕݠOtE}SZG}SN':-Ot>ѹ*}E}S2O n#GDOt6(DOt:}R՝A':EmPN':Et *)RN':EmPN':}RT#OME}SήEFISI>E6(DOt}RՓ<֠OtV}SN':}G}SN':}SmDT?pA':E}A':}RT#O@':k >)D n#"4(DE}SMKISI)DOt4(Dۈ>b*'`N'E}A':}RT#O@':Ot>)Dۈ>M^fPN':Ot>)DG}SN':mOt>ѹ*}v5(DOtZEFISI>E >)De:}RՏ٠OtE}S2G}SN':G}SmDT?A':E}A':}RT#O@':7}SN':FI@Ot>ѹɠOt>>Jx)Ug]h/epA348@` lzm2<ߠe8}R~}S2O >ѹO G}SN':OtnDI':{}SN':mۨ>NRN':}S%DϐOt>)DoP%DcE}SNߠۨ> >)D nD΋Ot>ݠOt/'r}SN':7}>{dA':E}sA':Q}"H':}SN': nD푢Ot>ӠOt/'b}SN':}>{cPN':EbPmTA':E}6O"RN':-Ot>DwOt>YS%DS%}Ot>)DgN'Q}"sOt6(DOt:Q}RT#O@':G}SN':ۈ>N֠Ot6(DOt:KISI)DOt6(Dۈ>b*'&Ot>)DgWOtn#GDOtV}SN':}ۈ>IkPN': >)DR}RT#E>)D >)D6O؟JzD ŠOt>ݠۈ>b*'E}SM}Reg}SZOt>)D&G}SN':}SmDT?LOt>Ӡۈ>b*'A':E}smDT&/3(DA':E}sR}RT#E>)DA':EFISI>}SN':-Otn#GDOtE}S2ۊ>GlPN':}Ot>)DgV}RT#E>)D >)D6O؟JzD ݠOt>۠ۈ>b*' >)D] n#j A':EdPN':EjS(+;R?٥f\ާg S! ξzW?8܇p_7rUSVT :PFȯj w)u'p8CPyx:<=с:\ɟDX{nC=Uuq?>js<VN\9* Kt}$3GD>h'oWx0+A sw|L+ƟxP"^htnw.grp=O2]GCz+QUh'(g=v%?d]!/ǽ{w-w>c5~'C>w "ӽ?1k=\tÐnb8y µ߇tˑnk/4@绁C' g{)ꅊr<Q<}OןX^W { \o>?Fg|~b58?՝r7c\EXjr jg {0 wGza22<^HL1G:߱hP+s< EvgAېS>v;[7e Dd'~SNfjD~>ҟ ֣=wD?!][w,; n4]uL {#H?]F7Q8>gvDy#' (ȕ~ RAOYOP^'wߌ|EtGy|pcF ;.⥖CTƣɃ>il_m pG.kɡ[ &WI,w*Q/& G"uBQk{oM?pu_(­\W ?d-r,zpf7g95^:f^tf,@ x>i?< ǎx>_ n>xC>>֌y xw%W@[!m^x~f_TߞX'}r`QBC^@#SOx#A}zrt:DDqp{ރὔNSϿ{@}g\Y~dA~a?Np/w1oϫCx~xn& yOqIw*{> w A8vM> ;roi 0+1ʝ MmE9Z<ފ|])VAe3<5n_?>^a%9dWlg{͂{A=9>C:9]f][W3}ྀ]< BOA;حj~SW`f5Uw}ejXg'<߈ _U$#ΎX~ƸT?c%K-c0^ձ,ߣ[U 5 z!woo"ʥ?<3|e)WIKB7ސ7[TQq M?z ݉nbyA>~__ rik\?!^Dz#< COI{F,&#W;r^}; WO.ީW( yo/~z5垏|/|g?2 N)h,"cX),_3QwW|Sw>pO+Ox} { =u65Kr 'g ]`|Em/Bz7꣕?-@n{#~h/a@=l5o.[kg!tY]]_,|[jF-OpWcgx> 6g|ӯ)ߓ7&t9|CH.9|,ԍ o d~1{Yc ovAz0{Q>9x LYg:mP|]]~~9ߗ]/~Ǽ~ QqK0U&/$w:?)_5rXg)/*MVԓP L~LuxO?_ {uo ]"rzCs? p]O+~^<k8Tu|Wu{ |zį=%o[Xs/r{>Y33_Gw7p= yOAmD>=i6Bׁ?rf%qxgsȳ?3H] wDh Axom/H_:p{}vG| 8hd:|_jwю'*zɯA_]ߣQqQ%ҏӋ>?BփZ%9gW@: ɐS=r;s?RdW ìW\>UrJ,xRe/:Ǡ>!N3pC" fyFT^Dxd'=,{ 'sj>9sxFxo9B:ޥҝt ; {>XF*O|L k!;r 띌ҜoF=Y<'!yt<[0⾪t7s$9;<{=YzJ'%1ܽx&΁ jog{֓O!|K_[~B&r8?x'k oB+|=םk' %wo^9\5P"xw)75_ _#|y!z)X7"?:pp;.@es,\~z.Hgp?z#A)߱}'_׉|t=^y3h6)x v3uqV7<6F`j5 qA84IDn+5y~߇{ oU7"ɐ+: _\ڟZRW :E<ʯ*K X?1'>n w%zun(?`^$kS$yz>*'!o?G|G#r'r6C;d_Gd__fӏ"qx3[xdW}@:mߗzq'@Է+)D8w0n^<R/c|rbq>{r|vL?y'M;ʕbyj R`rIr}&9pc%6c oFȕ<r&C|&goEwBHȯmڣn[zkY6;~s5`q7P{Kh: _(Q/ A9E'5??ЭjC!Mcρ},]^ zOF:OR ףwv刧3 ϯ-Ļ}eEyf,;8{ G>ue߷Ao|uqzTE?wSпU%_w&|+ʙ "[&\ِ+:rApoʹr_5<.'z&1dV% P*b}a<3J+~Wl"o<˿t/Bގ __>xQpH韸D9cx}}fG}fA/s(=}3KE:$w$}rp.-@Ƹry*tE@9ܫ 7t=x㺈w<]-&.`] _~nBqG:Ðn˾H96vn:r8_r"F|7u_ߎ|OpuUp^qbҭ= e#R~7,:OOM7[p8;(Vϑ<>ʗx0?L1@+ ʙrF8;)<ug: CPC=ovWW]៾-}{x|q^z{Ͻ{rT.u,Sc\|)tǣ~\[QSPn7-7ܫQ_~[\OKӓg ~;oC>?L@9/o#6pj=gկk64W|"ߕ\Xˇj?BK%PeV kyA9#ެ#Qpyy)x>5:WWGG9P!;x^1<oxf!ˑN~/~ Y?.oz$%Afj~E{纡s;B|M{%/WtOq_yׂýnDb\8? xE:U##wu9C(',9u"STC>V/ӿ_O+YX; x(UwsSH?:3vG\??w\r (z VI5"^T2#*\Op{Qϧg!;열 t&?OweϽS w Ɲ =s*9?6MHos/餾C>@^X'ڟqOAZr;>As_\|/p_v).5݀=W&gXzk羞k~:ooNA6zQ_n|[ ߏ-i5/Ai5znZ}5~x G3[u_{n(g[h_>VN[;eM<_%X ͣۂsҐkVOp&#΍ykx㸯^E{6#N{T{ WTmF!qH`Qo\X3^Qe6ބhw?ݽr' |` YڍXoP8\_~@OwWOF~#UGz%¸ "O56?nqCX H'ߝQ&羠䋸.ÃP>ՄzWmw9|cٯՐN"]QNRW<-ԫzQCg]|o`mwC.<Bs!j"\D}yNoq:g//g%4Ǥ=|'>??א_oxߤ8lOMN $d<ϔQT60YO)xth/!5r$?A}Կ:N{$^ Vmɕoyn<-(WH㮕cZ!~+B|'Ѵ&vE ix@<_ ܫwu9¯9V VNx^;Z\࿀(1#?gq=x&۷߇\'O;9xu;^zI߀PƷ\C~phW xY!m ,nF8[.tzW j.{|zfĿ؟c?伪;}zpǠ92 v.Y Ώ6XtΣ c滊Ss)-+rx<PZCpGAslDYϳDXx p*Wk!j@g]\?PnE;$rF~jnBƸSWu|B~Ohu5q^>!_ݕ;NE=yNAv ϫO<r}9eA_Av3C{61`vWү~$)ԗS-?9*S?~{NSN1LA*ȝ=?OS3!Wi|r^4E;-H7u 9&Y̧Oq9W`;˵s_s0ӆSm7Uu(5xM.mP9;}SWO8k@~~UnE+hvN..[}W h_o. Y=n;S_pFp{?n0¿y~󳕜_I{ùv<8^uOOۿxS5ا]]9?>V|˩O/{#+_}hoOO⾮0!g>#N^x hw,X|UO8PޮoY.yvwt@S"E}!gD'A7GIΛ%3=$L~e3ӿ:~#܀NrSS$}SØυ`26Hh+׻[y}s5ߖwǍ$A4E,wiHcp} ~cڿ+p=w}9 /<*9Xs+h k/C%/:|p/<yG 3yY<2gp:׻Lx2v"_<_ !P;|~ B[AG/:cx.`<ܗmKp\_vEcr/t9; %!;<]hwO*ucw!xA ::]T%G(W\x)1U.(v!Wt 䊮Cul - {~y`Vh\7!'wE'+ w!B⹓i(S\R5zG: @So2pIJ=AE&}9~\?wp?q䫑~hۛv ,%NYQ*3(_h_WyP޳p{ߧmx 9^E"ԅ?k$$ƸJnxr'7#$'FѧP sZG侤p$&i/,%亂lcPĝLL Hmgo㾨]ڳe rmԷ!fn> r5q=eDHq i6tsu>ws5ܗ\es!+Sop|RZr0X ٷyjw/p!xN죹> _ݔ>Gp~j(`~į~  b?l:4Dهe}w<ڻEx5= OM@;!;nw)uӟ%{t xFd~܁?KE >x/xp]$x"7yE̊vKvuߏ+ >z 骮x}ঝsG/z~(g~<Ӈ!o8 ;'KNF| ʭc9`yXWR#Ǿb?C=N1; 39^r>%>\wK)ڃHueh0sE;=㿈pߗ׀gp?tU 'usOJx @ȥs >ݎc?țLr>+{c@Kk+|uxy,x9 5_NMGx5P9Ԣ U_U_/êPuL _g-|a9ș??9둧C,alg[ !pͳ<P{3CЎ/On<>%/[yۑ~;$n0yw;sL-ՒW&o>ՔD4|C{ik#>6r= W@zYx4<Ǵ(3-zfͧyܧ<73/CՏ#4ә"K=1O=SJ}Y^snɈos`~<?z96~wjĻ4^_cP Ȱe?Q{_ݽ#/<|Koj9!~{i彅ig6!'x+y\OsUw<~AGE.Aq?iw*HKunBO~/!혇@^u?幛@9P_Ejέb?P3X>eUygY7<8Rjr?z= 5m(wG}~ ry{n#B+ $llj`r9! 20u4c\s?F< nߓPIJ$%Gԟ//y'9a7[9D;'InF;ׇgb$h'=.kS?Go~+^ȿ}0tVKW_3 9C9\tvBFS5FWo< jG;;>?kaZ+ >U|ˠ /JG:;M{ikKsU~ڙrp݌sOqT_.G\]Hs_X2[(=h/!4uW>Cm bk<vss%c;Gwuqc h/Lug#\q{!Or~(gOB|w?h)'Z%V=ʸc pG rzW|BoQE|噆Q!:W~RKP/pz9r)ޟF>a- tﳾ}&Ոh[V#PޠK܇Nm>Ǒ_זi}>s^|F;P\go}f΃7qi{/4K)?5^ /[7:\\aՏާGS7W=Y<_yZuX.931`fUO_Ӹ^2k'>X'+/HGaN$ ~?Z&,#n?np`qvXW-V}kց{2mpgp᜕jȑ-=<'xw8O߹D~n}8i~e$3ewǸݏGromE­AC-qjOG>paCޣN|P( r;FtcUq<_{t!B #`{/Bnu, ]ӈ-z1TwS^kR {ȥ/t8ȫFCp.⇴mA;DO+BGl#L(S8k$'b?~ g'%)Mex݈=ú/r=> M݃ɟN~zN8.ݴ&0m%@>;Q9~/= OUQ~iJ;Xxprum\/hֻhۭ ^hsQs47^tÓ纞CB~nl)y~XE+-[Zǹd,/=;2EfL~M<41'GQώ;3doe7!ݧ~<[j{h<#GylnྡҽReH,yspwM?w~,ϻd?d=FWܧ>9K/.": .v@Q cgysHr<*m樿|#⊴)9seg< y߀OYYa7FcR8 Ͽ=^C(=GKwѮJ%WQu::Whu:r=ɋY0 >`E2Iuq}EB=kUpϢ=[0xvk<8qx^c }:X"M_w{C/|0:p~u,k{^>x9X}Nԓ1ƽc/p>yڹH'lWmGH|O^K>7uԟ7rȥ^1p{'y{p<_3W ,.H,ϰ{ _q]eK.ëW Z/zC1WP<Ǭ8N|N&dxGSOT A?y(4vYȑ} o~{gǐo#~~e_D>'Џ3w;\bs..xtKៜ~ $gv']iPۮEmҽw[Wץu&k@ky;Ņ-) 6&ڛl 4quM6pᷨ pq|-WoDմsR鯢]U#ʛrއ-EXW=1YvLs_7?ѹx4`p??sCh7k0*H|;j{| `hO?^tzw)`8+(C v E? h?Ϳ}_|/Xi?YGLwf+h4k]3 rs/eCp>$[xY:M,-7Ӿ7x ^(PO{t|J=n\}C܏mDGWqCy~GFVV:O3>i W߄£.<'"|x&z)(; ݈&8@>5r`\TS!z>q>o_0W*cO~pq+u_Ë}tc]U^h߀紂.糃Fˠ(^sq-GJoF<q G;)OY yӟa\F:i{=e(ԏ;x3|K3m?S}aY*/8|j.b*UQ6xR"/Qp5_ ij<乨c~]y| ɷ S(_i#G* ig7Ex%MǸ 'ϫO-dȭ&݌)NDZG=TqK{x/~w#H* n 鯽 kW݌W Ώ!~xKyob΃/t^Nqk]̦݃im7(MqY^ =QO|?JCzyqH=oy #ྐྵ חÍc9}-l/~AT>e}p 78 Yޛ>~ N?Up3?s_vOkӴÜ_=P~n]x/A8g>Cz"\KO{%QAsnp`5x~b8OB f:>gώ/AW5.W1H߸>f i G/ӿxnb"_>-Fy)9 wT !otӈ/#t yRx .<ʣxF%kI5p~B ԞtA]~sʡ__@9a,G,?c0v#; o㾩`.u ?dh7y4.b-oӿ=2 ᛹n׼y?nӃO;w|vrC5^wXcυ=u_Xuug¿~*~:  j϶Hg|pɓ0r_ڭONu}YΘ~8J3 0c^ }}pip?O?d.cH_wE{7nk X|M龨tY?G;:/|D{B-v~)88 ί>>H?Oș/78sx_wܑ/?rr׻z"s-7(z7ӿFBx\P,gΜ;WPX \<^"ԓ>ҹW>%r/1~,b^ G!3yGqIԳF'p]5]|N;&O\xea\s@ya꿎qOBy}8r܏Y~fr |z4;/f §+%DiNO}?t|ޯ?rW!_@^b'RO +IOMDhOv чhh(GPОh}(onw}>BO 9coF5G)(_n)yBK{{{ F>ƿ;AZ>(wq>b:ǧ?D@_h7֐XOGQK޿ Wۛ~e -|,B$M ]'uy7H-RcmZx%vj9㫅yMOC6&wD;s!|ȧՍD6;|xm=OlYkvBռnxsԅ Y^کCtpap[}9/p6ϕ><:ix2 L\X} _SF~tv {5waαƺϯ8(- 5~~??bz O{pyN3K?oEcio|sЯH~ 9[X f<{;(}"sn(ȟ_Nȟ}rF?hi_!\g}y_{WyRԃZAh\st?0vGW bQq*|G1ɯE|יB(%C;<n@9CI OGjHevyz:𴫩ؿ xk>:+(x`+B >(9nrU=@"= Ҵam+>t=ȗIT8]!~߶'ߺ[B-m| f{o /Mo;ƹ9ý>ۯϐikO[#\dXR_u=|_E+f7-}<﷈~>=@s|nL]=3=-D:_F96>h%+u9p?'?q?B{(ތ簃Ǻo*Tf]e_΅tk*Ͽy|(OA+A?Ÿ?5꿉v+2ÙAq޷/si&^SL4E|?@_GcYDyO>A{ޅܹszcWy]㜚9SyR'F5v~+iVغ?µ~W{=tٞ;M!5Mol&{:n}W\Ё\Yu-[{:\:U܇ zgw-Z5\Z+{f9t{&SOLq |"휏zJ>' o.?X7N_PcHcO?Ч "ԏ! `}؏7W~}=evqpL|\Io9we$·^fL{9MBS ӈ|;'`|5R?n{z'<֝ |z[#*^B+hwy-/?kYe#%¿X+{sdX'?F?8_ 7 Ψi#r}8~O"~owPBٌ? +qv6=oD/3<7|]#?~wVa<^fex@?Ȳb\NO;S_X"[KwI "w\~͡Y9Ӹ>8f4v "z?5 =g\O FA_(a.կܒyo}g_s?~Ns}kٯ{x<2ny(O~B{?-= y r] rާ}W Ѿez5{UL!K~ y.*8g" /\uߟ9+νtrXJ[7Y g\SOI?'^*|q=*"~ȣF2HT=Gv:k~~,ϿrOE;-'GoPpȯ+W:BP}ߥu.,pçwOA^H;;;7}嬏YeH?<rܻRNԷ%~7q53$K{o.7j> 'oOQ?mJ;\iZB?i~O秜#ў VȳQX ܧHg=ןs^mݛ.{m_3\y}嬕W!M_U{%xoj/9 hq*3y.j9ge&sā8q]s}Jѹ>QsE@6د }Cږ]@ksO{~Ɨ3s?}C$}w0xOw]bo0}O @ ⸼FE;&jr1.vH/2w)X,U~Socx~=W~'w-|?3[2 9Jna\fnwG> r ~OOCs~qǻE{$(kUU]PsQݨ~xE8_fBj6~KH{~qjK_F$"ɟtH/B/?= }Go!JF GnO~kuf >N}O~fލ өǠ>QN /<-|=#kx xԧϏdi-S8K;:S7I4 ȗF}=v>z?꥕"65c{qf\v.{1>/j} wc|}<_wshȽv"­},Ywڀ+ _>G~9{.}| oSlwt~La9&ϡFɞ;w^?#ᴗ?zK7~AX.t<totp \_pÜ_.p<zi_⿌"Ɲ& O}Λ=s7<~z?yL#>}*'=s9nyN( @.kS;B. 0Oo}A7^(,G_ Q?Yn㸴N_/]wMv)¯e5n\M%}IvVr˨ r,k{)j>{;oϥ9_9}5v$'q_7`j9(=}38{t}؁[@,7Sgrm%S/5|Z~Ϩ_v3}7OAXx7#]W7~9^i/hE{hT-Q<䫞Q\?8/|sԛY-2S=P$mr[{#Ǡ^>V^[F-{ÿr;o9 |Luw#\=$¯95?jh<~:\gp+n;EH.vX|/:yq~k-~YAF7py\xw4#|q BbKL3( ܇tb3<]xO̳ q>-thw*߇'ڳ/{F[1;c9 w9!gQC+wYf3sFz5COq:v rop|nEއKЯb>G=_`=d={?s4K^ ,gf]2Y7dy/Hx[̧rpլG7?;D+P|׳|o!}Մ&w8+wyn әzPV=g pQ:.|Av?󴷓9x?[q?}}ʃWH? 5;.W *^z h'i1D0]up?cv={;dAӴ =$p'h_[ܯCV` pys|s{yc=m<lfC|D{x_ݭ\XVG>u;ײߊy_+/ÿ+0;s\܋?5HZSqA{KuxΧ/)ggw+{1g!:Ss u.VqE<Ƨڟ{E|n=႓H%w'?^-scP߳Yg_Ee8{.K{4Y,1M /1N7~o?rrA}GC-c}rߔ=UCcyp" LԇFx1=h.>h1;xbixOq?f<;~ oEe*7V .mЁ zde83!WO3iO<7ܟd?9>Ay>y,Gq=B.v`'ϱSx oz>W'ahJr_Wlۑno ->#Wߴù8os ܿ~"] v#^ނpu\+߆{({r~,KKyo_a>ϓ<c\V4Wy~,%uk\}CNG{Bpz){opE{0Ⱥp\mh; > l gZ? >ǷߗK>Q~`q>_:is> ,ߧ?V`7v'N‡+|C#S3Pj.݁C}9uF+/wŅ|#S{jyb[D;5d!U-w;UfngЎ4'~^hO|GPoڼWY 5ku3n#o?Snatw9ƫOJBQvx6ZAl7{{B+ yMx>S'rҾ^8C/9C{7 93 EH[x }d>{ͻD?0ۣ3 [ShK#~z ʑ^N<idxvx.f@c'{c9Nb=9Kv {Gy<~45H{jދ󡝍4{y=n7Z+. /E7@0xn .F` ?(|, ~D@ߧM(gCzKS8cY>#YD{CB|O79=E F"zByA]hO=Ɏ8\gnxʌ3GfAyҼ:u.o{\^gw<z#\}r 7c3㼻c>N۞i{n /L)/r 2;A4z#p!q7LSy{4[v>nsWHoS~zNzNWN2ьsJ޿!ߛ^cH7pI#JrIb )1nڣh s;!m9Z?@-ݲᛓ{"\9 5iu*>FBU\ccPe+= CSo@'8?z 8`:9Tf᳽̺o{*>%Lpݾ@,..g8ߐ?I/{|_nkxe<< E;.ns53 8ݐԇ9!O,|}jU?sH?xCYLe< a\ `|7|ty?iPU3y^T0>³Yn{^O'!PEo8#|n]E \NY̝ 3Ιp_|<g+E㾎zu_ߓޟa_pV/@0lէx(vp8׺F_ wsl[d 6/xJgz3>` w`9p2l_;܏pa0'G d9lG~7"+҉uE#F(ouvQ<`{r \v ʑ܆x1..ALn3ρxωx.'tG]f>tF{o-HmM|.Dz[eά$9 ܯ^;C2=h;ݓrλWޝ,w/TQ]MelG7wSAp1=!t?v1]vIރ|..?q2K=>ug!W[oOk+ЎO 7E>ʹ'{ 7nO Ӟ0gFÿ_wyN CCM=_gUǺ|k,_p+8u+|g+;Z~>^f:~`SWo0#aH?C?ҋvB2?wS+Q `3C>x廑Ϲ>,(O { xOJn:9R܁LoBe4s2G җ> H{Azq+POޑdw یq?nbWqKOKނvK{9]92ܼW1 _p@s=vq<x}Pr{GUǗ[<D=C}t h"r/L0׳?\xSH,/2砟e[y]|?}j=pPסFɍy( ޺Pj[}>;g%c^[ƥX2\7~Uǹ΂c}(F{}gfY.a)|ԁ}pݲov#8__u}stG_,sG? )x2v,gxtVUE@h7@e^p83B  C>5w r ~Zs~Ag.X #RE{?"_u<-铣X_KU=%s/wg}dxV g*@=W݊Q.U7]~?}~U>߂P xzA F0K_K,7esw ]7] %1| xU_@ {@Q3O{Ph"9zn/A\nB=Ig}B{MGϢ}2g2LҴۜ>ri6}YH}帉~w6t#;垂zI}9Sb}m@8w)R䟺 r8/{%uEH' { \۷vjxno \f3h:8ȷv@ GjqմzW#go9'jýhӞǂ%|k7ww3>Q VN)gp sǠ}rߟ93ϔ#I;s=!ͧy/deӼ6}0{O=LZt e G3${{@o'.F=gi([xno A{/丼ȥu9RDcdu,ss7 L-Rr&yoE`Xq/Aj{乤Vh=lofl>6FM"֖s4ʽq;zG0摟uEߙ޷xy<>(%=)=ykP^o:3>YMh,Iԣd)GySkBIH7.OD)7ImDP_I?9nKHru60q)M6Zr֠[XWkݼ5MHND6΂|.B|K\­p{Vq=}%+2[.O5B{g,۬#;&}?vǴzL{ւMPNxrWui]?v#4ҧA4+7|nx|ٳ>ȑwj4}aMtRKPx'u'h$[Nюnj GOEs䯑^=țhGyYO@6΋_)`HeoלGfgl B6~Fwo{wz=kn# WK;6#>ˬ#ۏPXw-FCX7Hh+7teF;exlss? vvrwa1ڹ(Q>1ixU0Wφxҋ<ߢ,o^tP+?| 釴C^V}}j8?;s aJ,g:idh1Ld`_3~['ܭ!}W#: G=~^;A['H'C{Nh7u>Ե۩]Nn;sɫni:r8_I:'щtO<~L܌r$xG[·r\E2-gCf{knDM%kiOF: S >߮w(=S-ҩaYp/|},wȂ^\~L) t-);1̆ 8NJ nbn &bRmFྡྷ{㾻/i%Ю]v27丯,'OpyE?mgDٳMu-ޯnF'ܜgFV^xQX.#^|<F;%乶eaoC{*~j85}SxrBwp*Laߠ?y_ 0'ac9gw­QYSCQZ$B{Fw|y0P.e:!GFy=PI> ڷG{qd*o>Vlk;q|<3;sλH-wh/_1A{ҥqP!}e;NVԻ/TVA9{w@MT}^fg3~>qɬG Wig ו~Ws?s0k&f~Mџ;E:y{#yxĉYW|z||OzBѾV|~y?APzuV_ᡚW#5Lg9ٛ}vv;[lLj7ۄ3ҷ7}Ѥ8+Sߒ>w$\B}ɱd/hM덗x&gG_P>\;{oމRt3Ӑg "L{sZgz`?@1W!{^K|_9Mw\|.qyeqK`g=.Lh>ո,j1GZf?xQr~aWEbօǺGaa?I{TC!Sr}5KԎ~\3V;?'O-{jyDmr%$g9(|ʗy.M?<}^˜*s?_W:Q.T_ O5>y~NT:U=[Qn Zv/ۨsF|6qz=8YUy3_Ԋ=gU㜫Lc= ;dANn:\x䮪i™+[/>>k>vޗ͙/_iy[)_l˻up֙_}u6zECjzIՉYn4{~|{{_4?>Ӫ<U ϖ|G"uOj>ת~"~cD/ΟCj'F?'?EoЎG4TOP׿kk׺F|5AV3;!?C'W}/`}ʻ`G;?Z_CR?*PxE_UնB(̹\)Rg%7%$'wŽ-j8Q-Wzjߍ|_ѧo|]|_uwg?XZUO*ߊJ_rX-/ޒ?)}ݸJy̓U)߬O#ӱ{6 B'0?z~O{9M7E*?lꚽt0sŎOrIҟzG}pLq^ר{e+Gͬ<_ϫKժOp=:Ưj'}~1HE{^{Qmlb+ztϙY)o>`>9KWJ1>{ŏMowk>H=Ew'>N6A5)<O5)mo=zF/Rik^ D'ɝ~kMC>jS$/NK~'w7fvռ5; /x^+6SW{B՞c>>=Mk*^ 9^צ{~{UQ{NxO ~v\O{r>t ?%H]=Q꿏>Our-89D<|},Y"NOs"EKnv${"ŝo?G7;YRz?]{Ίف:@zu[Ur27-P-YvϣO;sYߏG+q5s©SD~o'|թ;.ar'w}hȹjHW} :_U[mz>||{8z0?Sz`.wCo[׳>dupmQǿ\ut믨0zC 3Ԣt2&_۷J~{Ewj~GV=Qv޳xꋹJ>( 񲒟x1]ZX!#ŷݿ9_]L?(reɏ~G2_rъ{$w^ޠ|l,vjv06++%rK~)>('V;W1q>+l~[gڽPrԈUkjWXϞ[X=Wo{ē88yoΕ<+U|;ZgķP#΀7;YL'Gd6\.9^TBS'9?YM=/ę)EՏ"vE Y)p^G0/πkՅ}UL3ozk=ѕwď]st䲄Un1 wP/9>Xt&r3k{}-?gjocnx=:/7L֭=zs?%aı}αZ|nÕ/ DzQ}@|F<7߆rƺ8uPc v= }_^-Kպo&i;uY!ߩf4ܬ&6?(cR̛P˾ڇ}6@#S~Qz|՞l~y䛜{{|cS{xհ`?jwݧv ,32mQwȇ>YJ[y>!G:7M87sAzn߅S[c-?f3?yU''Lgo\c޿ԿSS~/%5kk渚_̏ 9ďGBIE;zp^~MYY:c^_>zD0zJ#>??NR%\4XE!RDoLvTIR~QvӸRz]?D?u35误z@xm2.圽Aճ| =|-:/hX/O|+ Gnʣa9{hs~/.nCx;77V!{s`n0wK[*=i~f'ɡ2o^T>|"?$ߏU;Uzgk\+3oyT}EEϬ>Ҹ~T4kվA?ܣWvcJ-}iO󊞛C[TIz>@|7){~M)=۩3ZøEfh Kn/8P'߆fyZ|Vξ>&}+w\(>k4o4n(ʷ)xn!ʿsk<7E(߳k}y?S#ǐčg+; ;5 }1'*wz]NA!R=1z^;J5ޏi\T_>v8>zaq_QEƹySŮ,[Q F<`W̐!O35i~*J^[DߙKTO7hRz?ޚҞ JiBxq~ʕ$qc=7ym.KT~$$ٹ)-)?ɒMRS;M_|%>!~7T}ue꣆֎:͵.pƥ4F'*7zSIS!WziUPg4 'jߜX}ıGx>k=_F?cw5jYkWa U_@8G<%>ssƜ)y,v3pKsk&ѻ^tyOGxpOгWkJ4=A6űS;C;E=aS78A1վy~;4n&O=?v ef$M_e>&%='.=ӏ}OUr-iIտh!>c/5WQyUWp 75Ovg/[}}Go}.%SR+wGeUyWg#2Wz+W*?߁S%3[jةgƫrVON{ vf!jpQX" #߻/y~<1O]دtrډ[ּ_ǾyJ*w~eя%.AO|!2 ϢW6RV좞D/>BUσܧ޳Q% ܛ~7{ЈWX٤_|fK~'NZa۵^xO' ZT.F}뿆^o*O3.tr>qd=[KT9wY;Pհ+qoW\g+p~\%߅yV2 z7"\~q@#ZGvZsܞ->-q fjʏP93UxPMic΍z8uzO=~Y_w/؁3hgkTIzsgʚ/Ƨ?2+?&/" Q_q??Cϲax@ۃޑ|PJrK.sȔ\r'd'ct'BO o^bhc{F0Io?U7'ظ_&xGBWlrUo2gyW~ ʁgs?Wyz+^&`U[>|-.&>cDK*Կwo;+&l8O4KonRa?M_;Ѫ-S#;EGAs;KkVe//≖S">Ce=/_W ?O˳˟瞧 ծswGYʷN7|Wqnaw;ħ]J_x"K#/^9| ͻAzfu*LmNoQi>Mڙ'>Bgx7OcU4Coh v0F-zuoӺ~ڮ)w?!{?A߂aƣoy^vVYU<=Z7>+jÿGio8m_:N۩o6FTu~@Z{ )Ҧ}Ip`kzmggmN۱|k~U}=@274n17'KMvUZ:r1l]FY,I7{ պ6?} Cgk^)oC܇F!5gR!=D`oqoW'%d%)I_8zOe gY?O:@//@ 0$V0-mUGowq~QV=6G._YxG3%򑪿|+o{[ o}z¥KWzY,aG\и?屇(J.v|ǖT_#}[p4'4O.DutJ5Xv:vԺzw{Px-kEW~%W+_nz9gˎS{K9job:w~=5>;hTOOIt z^)}~03>tnNƻ0i BTGedE/,|QTzj1;<S>aZ!qqB54/4~k]rTbq>ZUN\<zwkyk^?"O)O 霟=)y xz@OS+/k>VZ{y|1( Jq-q\Bo]SjK~gMJD~m_>k Sկz)EK(r~O?]'.uGlgD:X̛uÏ:dEW?(|OnIʷm.ST>f}6#:ޓY=&ptZ>P=Oq`;ZoLa_ui /}ĹB~jtetAD菤%\]yV.j(zKg8N#$nqxG? 5~OVcSşf>̓#UV\x >Gz U}y9$ϰ'QC OPɇ{`$J\_;AN7cbco }U=7g3]|!:OH=}Oh6)=F`I՛\2^4&^fɛU_t;: ,>:slI9l5<_ӛ|}ws+\ P%+~.q.ݦ%Jc4nſj]5Nc4^bs U?gEǪ.N纟%⯰Ŀ^P0:.QGgX'֠wuX}˄jpY_[KտE3_\>_gLGЋ/N|:B׈pS;^=$y<^ђkt=V,~.ѾT]#9۵E`7F؎M6׸'>0{+I_|B+%{=Пvۻ /|*OUyUW/7$zn֊Oj?f4#v'.@Ŏ%ƾ6P-ZCV\Q}_a{wt%WC[mZ~Ius?{GL=`WTh۲-aQ"F)xqJ;pKMZ_H^6ɩ8^(!V{ŃTo"v[ s +]YNˢyƿo7݇ +5~ػoɺ{ RxW[@l6REo#~/Tn!Y杫} :kҟ>ug᧸_i8v+UC>s⻈{;FsLkɢd8܇Uc8[%|^u.9GAF'e/!ZSt禴8a550$r{pơνF*vC?5j>VTxauL޽$*1kַ|vVj~yPE!_d6'fiO蟖ы|m;oͪgOmSP#ʗ2A_gz|bo ^ IgY8|ģƏz7qzǮ0˿~nZ_Q՗d}#_+z}j2Vq^+oK-[}k)KkCou oܟξPϢG αviNW8i>|;^U&~3旄CEi]Ei=U}!Wa^$zc Cգ_.{,T|kQ!aYC͢]<$Գxm ϵK%͋*fI1:7"u YMq~W罭a #Fd?n'>TN<٤TrgI1GIz^\E|ՏP4QcrɎdg_s'܇$o)d;T?;׿_}@X̛?+|*4Ι^'? 4 ]L"׼~7 P}܃'&@/DGw?>\㒜!yOj2"7k)Q?jRb/`><,9빇1{JEB<ކP-XC wM+~W<(Ͼ0 z.߽0T5npuT A_R;uG]whv}OrD庨 ;.Z{w`~V V]qҗ|Ke\ԒJo[rϳ/®mG2{,/fي?3O]&?Q;AAi9]rc>@t;9q4Z7)=y^qSсQ-<-ďaH|}h /=^9/ov߂UJDh-Iآb<s4u/m#>k;}[*@_k?>r|}~V)O[-:~r>A|MӒ@?FY6i>Jz&?Z1dƞNa?5a}MϸE|&BIG.~6ڤv&AykWiOkH3mԞ {dq)_TQ{E$y|5?Qr-פ yzciā)*?5jUک=п|6o?ܬ:*Z|.]+[$GFW@pI={RFtXvoG:z7yx籓0?@u؅~['~a:^Buby'ku}\տ+[ /R-F{x!vr5of|=> )QDՇ志ߓ/֘SMװGUtz> S1[r J-[Eok5~Q_̓#Į B(Bn@҇hz2}Xw؉*NG~pHq?$,|˾ XM}R>=ͻ*_;ZWW)80~+?Gr08W=z{ڱ^ St 7@r΢$y|,MniMY6ً$o{~M1З69~Eڿ4ŧ4>s8{ӜGKԏ|Փp?&j?)z7J^wAlT׼/O>{ ՛ٚ.exO1S$ct摹C0f_,f6r}8r1I=x)/wz4n_T5)YTT"sp?!?Ws%JFt򗰏.# b0z +߶[oT;T1?cg'szGy׻*߅>B͒oOk|/$O6|TӁx~=&q3Y|)zujoQ*?;GذG^p$7sx;q4F؇tc%s0::BUh3h3iv߯=7|-U_4AF8GsZX? :s=mE뜇~vkħXk9.T ۔c/f]r~\IUE׮Tyu~;Ëg8HD@nCmj<9ױ؇3:)oKH5Y&o.%ro{nGcko8$A'?4H>yɹg݄+ۇĢm^mUOpywUjE?F|^hQ,+V5K?ӫQB#n 5]u޻ƪ.˻;|u7]ZY躱k+h'e;r^{Rr,ů|ۋJo-D зYg2 =晧* mQi=5K?07yMdE8{2ߑ^kBFa'rz +?(ɷBE@p oR悔h hsͣ3!ڗ5k]E-X ~ Iվ̓ͪsg=q>_뤾FFQCq>Zpsz^=KUUhv@5tV!6>"MF +t"#wDnѾ`9WkثI&>}gg_]{עogm}dO&I o4 o%~S?c%w{0`h``'i|?wXr5oi{Z܌%m_5@>q0F_j<EyX3wZ勉!y/h\b2ȁq+XϜT3t+yV,G].>^ >K+Q[_`9R7;'O\{'uGC:[O's;aEף߁5Z˹ZAל ׾o* {w*mo^t~澩Kp6&3A\ܧ8|rU$=zO~_8SrǛ߻t1E$LN x)w! 2%~CG5~?n>"D)7\7ua1[mп&7dh+ZR'ubG`JU_Îv=~7~_O_%.Q]]k ?-5&Թg $j8ώF+%ϠgҦ|vײ)qWgn'U; oa+TrՎE#> ^ },>o wj-3EZ;j4Rч*n{:O{9;>Cy͛x",Zx\2++یyZΐ[՟ -T2pQ.Zh\K{ݭa/?$'uqҺN"i׉9Q;|؃otzV?:k~#ڿiޮ&ժ/jW$c%3T/ EǑ7]߳ǟ lq|O>S/7yD9vM@/A]ݏ]U-+&~GFs5!z!<$RH|p_1DM[:4 yƧߤ5j'J5koS?uK7!,CO7x Z/W]O;=i{ ;U;R(iѷ7j_zM=o?knJfdO`gùF~"w{2PL[MJm?ϝu|jW0oj1Eɼ'ş}\#&> d/®%">_؁dCvL7uzQ}D oߵk 7?y>ri*SR ͕V2*MT}%"~S? OqIѣ>@tcן'bh~խ]N~:窝._'qw7p޶lctiz|W\^{`?[yʭXzѯJ"|bΏOw -yܣpf>k ~Z*ӫoSgj'CEl.(>ܳg sK^q`5jgk|e{_GCد4aK}6F/;ko?D<įnt}GD[zZ>+qte?ue }Y' ިU'!(~숢!54:A+^D#F\:絲ک[rzOWz}6VU>$QZow>Z*yDtcx!'lWh>؇Tyݣ\qS~SSڧg풯]-W$9T<"NrAf_$hG'Az{;eټNd&~g\(>ik#)_x埀z`\z [w;ko8;ǽ`{p?}y砽י`$ŸjQة{yG/:Zc%h;hGha:no:ܙux嗢Rʭ}gFwChȥC(dqY'G8=4zT?5?eT%n=CoWިF< t3s՞IiV v~T}g_fl~?s^9ZC%8!r}CĿV'oJ7^9p<8lN,=TxVo-y]~A.'/))#sIn^8] ]\:/yq;nC.s"ѵӭ_?5 {Pa%~Vעe|.}[6<_m؝ϻWsOR}sNQDg7V{D{2a?u qi2&w;Fnc߆~sw 󗻻Jý@?DO=!që$\zÎ:QnAvmԿKܪ *gj-zPR͗<Is r5{S,לx|ԟXm߃5?^'oL'ΰ3ķDujCH?&[%g~گ|_-oOW,.>牏~w[|q͋߹}h~y?Utv;N"m`vp>|k]? Y̪«˻r!;ߐ\Y, Uҋ5?`_E+Xt-\(<Tn: C=07e?}[EoиUmI *1J1x3ԿWK?r}6Ꮤ/>Ga̷f՗ i|]_Uu9zZљU_D\hoѾNnL,>Ows}ۺE{٥I93X2WìC4L_3'H.O5Op '%".|tC~v+~|eUb2] Gn7UrWٿO`*mM 1⯇O%xEBSQwEOszدE'w!U?@SMaqc^O璽mߧϩ8>?vavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavavav-7f}M/ˮ<{mM#ŸqNidu46xx7|TVv69FddleG]5n~Gsn|e#ï1kd]6|_=r5]kU/[k.}oCuoBۀO Epi/data/DMrand.rda0000644000175100001440000045344012531361106013563 0ustar hornikusers7zXZi"6!X])TW"nRʟXaqjnj-&;QӮeI&9K(kڱ&Kca$WqRc*Ǹ$ܸ>p a#sqPfXx{FxPOS؅x."+k D;9ĝkM(TNV84X+u O:PErLdwG \{9/C3 mӥEJX{% 9ϛuǶ EӃg{`{.]1\VB/P67MZXމKW":o%94Vx2 )!ײ&պ4&趾̭QaSRpo]FJ-?HՈCr(I3)=Eu{BiM+-ZD-Uc,.p48s7Nѽ#{1 HO]E`Q~:[Y/bK-#%,&=S]eЯ3_ļ E2l! 6i5䂦q.Rľ"rϿ$U| l~آ%ԡw+O'2*m BW!`M'z-t3i c7f8ia ~bng L:TX0ew*X*nW|KR)i.z}tm$HI}[K 9p[ŨekE27MXZ r8&Ўg=+n lDte(ƪ i\O6B%=3}9!3TilF %d.:3|qdY־K MinyEC׵-_oĵa-Iv> 8hr#n͜u>ú,G2𸣴<#Ѓƺ>Lf뺽z\[hC7xbQ!N%9Ov I%*MDl>_ M s{H7l8a3=~~P o WFiS ʫR(Ҳ{(#R,C>\b@0;eV"ô '(9O! "g\\-m|RλƓRT9WUS*TZMyz^{K~t=Ӱ]tVua C/$ȸVQy؇DPƲz8pvHP 辥S`x ou.0Tİ3soġW1Yjɚ1)a&|=ND/[32T,_,;zAd;S\<'qbRjQyF/[AT;W"ap׫DM,Fמk^%5]'5 㡚$i$5'\bX"pcBhЄ%#њysPS]\td+dZ*qt݄8K8RrdUXiCk5UpND3n#Ba6ӯXE9`5xfxޝ+1pyN"E?{a;"$ߨÉ hϪxH9ԕ | cɞa0|΃(Cw22CėIl"j2ܫflI Y ku/$'~ "gB :!=.-Tj,`3;-g1:ԵAlf瑊{ફn(M-ih&P*-. [w1:>Ll"L 5:eTzT7S)Iپqy*]4?^n$mu H!hI'0kTL|f \r/>HHӠkrFUXd~l<9q)Wby-mda٬˛>^sB=;T\ٙQDedxwA\TnxeH( T1j`{DGi_,#ݢYz1n!{FP [° 5kA y3o;=>Izl f-ă?ԸUDNNRH (~6#6e]4;a_Nڎb{RX^cEE'G ~lh7oQ}W7}UcnbC ̤aa};Ct :f`F1+c_Ms)Z>ڻɷ}"IN.?;XIm6Zk{Xh)EQFFPb;w;E"dYmReLP`B [=Mk}]|zy K;F[#眖dT` ҷzՑReڊךa m蠌%'b>輭;'r'*-d m3T:ZqN>kP։pF Z OF0ND4ӡdDj0bBC&}\'L*}f4@2k?l X 3k08BCDn?8 n#A?<-JYW7jY 2Cj&*}6]Ôe$&#קշ1u2mPE)&.07 .3iH6Boҹ 9&8-J;5.6vWGc?'MhtKaW]y}^tϓ/k4pGh߱X¢!AQ9ĞUY+mI{ftӵ5-3V ~16:;%}Lgz%4nܽO [C*ْŨD*ؖ,-_h26ͣgT ܔmW^,;䃧0[ur'6cs %~``\+43ݐӑgo*})./6"LJ }#tELndu%\was/=$/Mė7Dϲ;U d댡Dp߮/"juB[6Ӡ5"e>54%`T`*pnl@ O 0VjݝnpeҥF ^W87shi;j" k[LO &]յEY&F'1R$<>P_x{"_FC$]6FPI2edž@2SF߰D$ft 6"\3zk} B3T- ,sܩ#{Iw=J}q\8P;<^6:qжdE. 󵆉h48|/Nn@ TٻE-=LMوVUbRpyt\$RXޞ\Qd<qJX@*(ZNyaZiK-N{fU_dE@y4%%#H|BM,$UM"o2My س*358\#~oz(\ƌ}=÷j\݅+5dn%7)غm% yS .}]ƫbA n q ˊztǾb3AܰPU1v6$ XTeh8fDV{W?6801D3^J@"xhf4!J: /*D汃p%ve?vŃx6J8#*u2dsS;{2#)"tKF%N_5Dh2|2#]~ n<%R] mfzi&q[B%ʛhcB,+ d["vVJ6I`мzi@p.i!{OvD9ݴ!V+8mύ(f߽歏XKU-eC1k--ׯ C@3 77K2ǃhf.A&|9(jُ&ǀ1HtTOn\0rƞ7=3|'YpDs EK/&O g;pu9%'07{SQ\58̡ooZ۸˾Dk'Ofb(0WJ w?& 8PrB)9PT^@3\* vr צm-ԍmmi< 5d]|ٓ lNV6oY b4\؁풭`ϙnnB~ZQ ~"vWt?,`z= Pu%6[}QO5WadՋB{[ŲV`+?Ǔossa儖wnruZFDz! MOPx%|4MmR5/;vuyzL{RkՍ oJ{1RBnE0LzjMӎ֫f`fCз*W% PM?W?ؠb'jC+B !g'P.2rꗍLDW!i^rO\9/kmh~; @g2`9lacڱ/]s8Km-yz8:HL~Fz(. $mEC֭YmύMqpi&R.=*4Aa|/e:ԯ6b}ס&#*+X}z%hlpPX*شTq,ypM e3:M;\AɫsfLIjn[O*7f.IJu+?$+ M&ڕٔ|\j(=C+4v*Ǟd#U;HCTK _f[ns~NgM(=SDݯi[G|7Q#(?bbOҰmI?ci_rXjl Q,1ޢ]e-A,^$*l^fwitms8Pp]s{ շx ]$2N>|Jc`g=-֞zT5 BR ?j.-5ȅM^"s4}@z3;u_go )khun@}-II'rFDnP)OUE‘#f6'.Y 3e߱m D3m{?0nI+*apș|36~Hv vW|h:o};0rYDRfOJE'0^mϲ}08i\&\ɓ\Ԋd {9JD8\߄N$z^~jIiD +yPP!n8mr2 p7P(ELʭ|}H5eCu%0\ʚ[eəC!CO.ZԻ'ܠ&5V ~6s!R_ f)sfŚvyrv[k“wƥ?Ǥ#'W#ϩDw㌕XC=A,%9]}_ R1("Q/Pg}]L&5Muѡj֙":wM͏ˑrR#v{y1'DS⚸H> &.Z>FռE56;.CxȖr9`VypQt͋f7+T\5>'b|Iz0D]OweU ߱a@WLLV6>sT`+ nř~a{q#fy,?W@)K h,?ԱT9VP_if9zZaj.']@zKQ.`OLr H BT:,fHhV((xp\%VVD#?6KiL]~&gFA8Cz>$83}ְ+u|7@xQXW;g)IA&qǟ7!|K} f]U\r/'v̂` ?&(Q~,{xª⌽R*)Σ,߷@ns4CNb6}`RHYrP֫N\ƾq-}BF>kT8|dNQnyH q;WP Pe]lOߡu:cqA>bd]^6zKYEEN"y<&?vN䁡I->̒ZRPS0{H"ΚYyFe5߻zޯðhC8) yrJ8G:bAfN(*0vswG`D0pM_&[)mX-tO&!C[,UZ@>,ſER KKӌ#{/H@B`a9׆w!􍄌ȣߖFiȘj?&U_´3lGQY^,OWHb M9Q0.i5 \]Ӣ|*HLSԔ5(-/&R=7ms'{<6]E.Z=V5M`UNc2D tR2SK#:eAqq-sQ5zvtX9ʀF&⢷ap zjqhu]Yy0Mbѻt'.G:P5q&tkHHpN}a7cP*pbG=Ł0T,:MWfS؇[uxrwjP? ''&AcL;R7hY|ݯMi@Sz w׌\b@o1讧0@[Qiֶlxa}ww J2aCĶS׾x|JaϏJcmEd],'Z½F>ƒtϔ\EtHXP=/ K7)2$Yubݯl D p{BvRAĺ gWm+FrTq2}yʬӐuNb_M)NOU\.Ћח0.֭:YLUA31ǎͿ7Cw}'qjy4ߨTCibrm>NѕގjZu#zBG[ Ń6iV~}~adX]ɗzDn": ס>a"`ԚE"*ͱl.DL`hv: ,/ž:Lz@Rd:u^tq[p&*6HwőT63ux)4w> ߓ'H+'" @4tMo̾hg &g:f,w3YqdAm#H뾚 Yhch8}5o'Ƒ)7,c6E %+(5戬Y"Zܿ,PW,m!Wɵ!;'ZӟKi<So/ff;z&"AjoUkϴ]+"vuwWQ , Sͱ&yɊdUÃp3`fXLBc ["g 'j낵>oG?};ƌmNlϾ& 1UL69s#,Bg9iIpc֡lqXABSoz/f2'o=n%B`ĆnHlNyKhX5Z("j/1ǽ 62`7ş%a،Y |m>[{󒈹ׁWlA30Ϊh fUΣLcka@L'a-Wז*SY PM_.W- j;?Iss+I m\+lQ[WVYKĄyp+RƓe^7E7lf0{Xv@>koŰ{6TRBt됽H::DMly(37;"|Ssw,/˥ =8y ^eFR|(}s,+#5X;R/ t& UP`3[%]q0=ˋ05yOidN_sRf|ix>.}-?WUsZ[_ݲ@(T!Tٺb 01#B8]q@XW2 Py ҈ѽ<1UBuؚej!uB%|2`fPn3~Lm23.L[8A̜uihU2 $;@q+f?D,PDJ@ҫ5L#nMbƘJ)ׄQVYdKP\ ^Ԥ,:m!3י  U-[y+4Qib(l$C"aə zۭ7G0 Ixqhx.(&7⮖$HvQ8vک3v("Iv7܅_jo0g*^%mem%q%pFHS>v#Z1 @cf]U'dAhj](dv,ϣ%2u[3 M cYUG2Ўad1%(GЌ(;p( $lΗy?ߒdIzZ6|U 8\U>Ȯܐ5 鳗'ӹ\_64K%{F5gbj?\H>:{F=hzNj| -qZ c3mTxQkTƚUǻȯHGs3o5BrL ˓)̭9:K6/h{c`k? &aS(n_֯$t}yx a/8`Ԍvq2E0 +E#9ygdzM3;FC[Q$S0<%ے`~0kyAX {|y/DL/{m+0($8 (3Vw+ҩ[=Rc_ly9 zipЂy5ۢwdCף ^\y6b'9$M\\BBgmJna#^уރshX=&UXq_C'edNy&I]}yDgPo~g-#9񈀴|KhdZUyN3|es(;pbq<<ʗRoMQ"copC.m/tsr vroN[byS8|t u?^R3$LQ  c\yf |y.Q9ke3}(*̋^vX֡O@wPCya'+TIoS5nf%Q#Fa[Rzp?Wi+|]CGj}NJpŬc$Ŀ шHSzD"Eup8+]zrN8F3-"$aMʂ[D]̢cĀ)xs9FZC4{{D#pp&"×-vXjb9o0ں  u.dVuan-Ws.Y|T^f*=kzNHr' *@# N>z@[GkH1"r8QsE˗>yO@+i$ h}5̿n=ʏZM J%4(<ϗws;S 'kT"0*ZB; 2%f˵ WxE,.z/v-Dzx%Hg4M|SBKW3 zQDNaMiD;XΟ+Pauݶ>"V+jHqƵفdj/wWh]`dE@޽.!L5ԗQ_8xNjSe963]{+($فV 0!̓6&.("-gxi @65fNTs(3k3OX {MVyE&;rY 4 s 9(Ewsk"K=aoObV%8Hfd/xx*w09h:Yzo z]prS)q+GA䙇G(9&šA2P15 JrA2xgrؠCx7fdr)T]FdODjf&4U& Wt;ɮK{ \4DŽ>n .( hF|u2{ v]8mAn3gFhAb#yЎTp!>J0mx)&(zI`N6|&'X$ًAҶŬCsU`}=SKIIdX2|u.I tE+ =:&&x xz\t} m]Eֱ"~`t3 ,(2_k$1܁8SAYح2Wxr^U´%m-LR(J됝ɐuIx{=s.F,L G=UѰkƬ]/HR`+񎱗N{q/ޝ j{ۀBw0I#clƆL7Ͻ8(fcoZUu2fDF iҼނi͛eY :_)1)O0끄tg貽goT֝hr b4v `e=A$T4_S>OΞ%Z<_k` Vҧ7HEp(I@ k.Jbota8~ץKsu_0JRՂX}-gգa3=;Ѐj2ԃK\6OI+8Gua` G<|)2<4(/Y$Sb[kO,|Q=D J!c%*Et.osU+E,rZm Q/,+RO{5G S@;SM`.\ KaYit8ik}XKF-mmNyD/,8䣱5Y)GePꔇLf^8hKJ&M$m+uxZMuƉ0DÚ8jwGؾjg@v zٲ_%_Pr{$o -:VNv-g{yʯ9N#l][5ʾxß[@zd8YTtj 䱃D|!Kb)6@4vc (NVN{KcL+S,suEs1HxZW4&}81` Vi'8?Bp T#Ut NzT{/T>wüWC@ŎHl:#C&VK^]1Qo1+iTV|V0'p~w?l;DM.r~]r^}F~pa3;mNdžֺmiR~jE2VD(̐le|/'sNuBI~;"94ir5P.VӂYvN1L0ͣO[E-Bx'mR0i@U1C%x6h]!t[]"P!Wk c/jb DFr(O `ˁiU}j@0m"X՞9x4Ȓkef>v@1V;q!pψգԭ9_DnŪ8slYb4ᓭivVѫ'BZS ߯PdYcCÔE8~tVBiҝ啄%WQe!SP$ÈnjC]LEE `Z͂AZ..M"nFt laȄuWtM&f&>j>/ޠp!M [/O9F2]E5)YdxM2#23_<5^.;JA#.*Y1e?A\DElx#y LiO@1Kyi!LQ vt4:ҟHa[`4tz1:4R6FǢ|UO5i<~:c4kޕkY1A묩?e}zxY*j 9vPi 9=hMOFu/rQ\jTH^=ˇ⾁:قe]I&0^*ٙ=ap%(XRXpIʊAqReOc!èj-c;d#XrSJQx' ܜ@ E;r$tPtאca؆,KNYJȷK٦s 쓲w+1,쒴S/B=zmcu-i-о)C,.b+>vv;!E2)SR5qЗ \RNYp D`mզ懌v~.-j礕uB2G%7l?G >d (cn:;tx 4KQ67ƻp+^hb$~sOhJO_$EAPbymqd~!hb]>ܤNloQa&giq}v81bX6rC4l`~ YB׋gHw]z9Ho%f'2~iN^,\Yo\<8H.+ǕU4'bB&@}})v3xjwЭ`R$/D~]A/Gtɷ9r5ˀ!VxْyiŠ7;tA_E2ISHU %+Y7o|CJo%Py_KBuBrʒp5OSr==Uwi֨9'7ǜoN[}XY86oK GD [pS4܇ lOt*7˭,C&0,8GcBM&EWpLݱB@T+ZjxZQekp 9䎈I6JKNQtZ~YNigDҙ3-Op|Գs;˚ENe)bTYHުP`s$V6JZU;]߳hw|?r9 IM.%C~52~ 7aQKCp7 )sJtvɅjkLݺZl$+{p=.P_NeDQc(U6HtQ:ˋ&U, 7\;16 @{H/nh r"q|*O I4Ҟ崟2DlT ]'.FFOp1ua/FZ:I)h*5_ON9 C&r(P%,m:>O^.Ԕ ݳ*Vq%."ފ h:}*UhY;{AܾLyicTRHF&iưkȪxmPt̄ߍ7)Dyjt{_m#i:T9AI4/ܿD¹o>6֚p+(+遱9yr ΍ !I)/Bal}. :W owx\oqH )T)ҙ^q 튓T;Kg-b_7y *"~3H p/g40z`< T d"ӌviWV:na+GԔݚMt'8bSzjo5YE8+1;5^4?ߥtL3? 1v)Tۍ Eb6;=l[#W@[_4wJ5:Qr}ISh[}^o8_ScCv.:O,&[VEIUӅwYB_6L=7B>Z&QdS2Xޝ g 3Qϝ+oB5~s4I+čbYo:q <zLfq/;:(u M}( ŀʤ$| 6cb8Y/, ` ԻA3fR&u%:;u͠l>m$ ,>er1;sJwMHbOJk[meTӐ2|lKjMB,CC{žWyDe%Љ<+- (llie-t1o@H jtD"vmq|tʖsVr0XT+btev~y K酳&̀N|/hiLjv0'5j0 ,Oz<$vM{4"dsYO_t¬G$ۀ神sHK2Ap/^z~sƨOv3iil5ͨz?;; dE>4g0m%Dzۯ׀lc/U0LC>H+9b8A˨i:#Ur2$#Oxg?.oDL~ RL^IFh-' fUc]Za길scBGAF֦PWÎ ߊBQ 3uLj fٸ"/GxƠJ0+D'o9[j6¼nǖm7jFIjaۦGXlm - $U9qT Ź֚JE:2>Z2;4TI CqȖݵĊ7 Ge\wn[\io%;juS$]`ϔ~pPM݈ ᢱG!˘UX깤`5pB V u6{N$[*8ҹb{"\/ۍ0S=ؔJUxv3/(ŝ P4);H8Y4~&0r`t=iM+.l- ,ˊjM򢩪˝{r !!*\~MҳgzEnSE1@Plfʱy}f6f 5 h60{gI^ |0Y/@S*SǝJǾMcisjlśEVۣ8~͍+Ҽ4j/kHd8LRY>A) &+Pz4cJe!0ӴHLNJQMsŋF5`7T?Crh)k-/1֣M+w ?0ѧ-Kൃ@DEFk4d\p#1`B4Ͳ!B1QQ5$o7GMa<|#Q^\%RnPEعZY(%H6uoX#"gwJ_z?3vuRcjh?[JDDɇu6 OgQt VVRh/"W+%!Ãip"cTST;R\14Cj6aEmW<`R7 4!f˂_QZĶn'cɺb7x-#5:[7驐^gJ W#897pPU+yaq^ִ^n&GMT(+$\ة&]\lG3*qIeRr?1H \B\xaY['JdNl{4]Lu VI'!M ;֝AZ^G(aӔQ͵Bj GV[X%L)+`v*0gqhe7~-͗fx_纠|YsI|1q * }kmɲҐ8!LY .3m,* h2~yF] IS@_5 ~Vkqn3W6P k0u `>yuer2!'>St{YM| WkCz9Xnm4YGsy5acEV[T6!f*ZL]s]"dn!z!Zr^A>N:Ϸ]4"Y.>QV7Tظ Z\2D6L-+ԉX [E&C}U1nqUcG#Hdk,LeDXؔc<BVkNX?84k 2f*ꅱAוOc{˛ʶ;nAwy;&},ѡ$zx!:OT)nqX֞6R'AQp>=UQq߫zJp'K<'84H~lگvi=V0h]]Ng'ZIJ.4OnriHɼ—R{ ] <Њ}7erlt EuV?0X]Vq(BV0 Q̳ԟ;6ԁ;{(OҀnT=MM4#0fpoVWp}4뮂ZjA[yJUGM ] )4tn/#o8j4^ZA+\4+qǫ"S*59qfo%Ye) IubCbt\㱏\M(o 3;ڋΒ 6^4=he )+o.1햑yQ`rF8>0M2}:bF d,<{Q<_dO/ @WQ8a`9>5ᖈƶ Ho>U5]{k<- *[{FÜ"I25NmdC Gn&ɎMFy>`U6vY *Ֆڮ. ض 5nQ\0 +Es\V˃i jsH lUt_[YJb#+ӒGto"e6[yj1)$I?}RnG/LF챈.5,cvrc4nZ- i!%]ĆcHO6hC&,+x0w&!j@/)pF1(9M,V+)Q W)=#V[o n8 SM`Lآ`q"B[0DI;ZA~`/Q\v', +M`3 .P*[6YPyd~ңÚ[$X\I )n'ba .⫴ w3wizbh@/H.Lس{ o2I$Ja<^h p2iB`mvcHsݛ;i@f3˃4r}%"w XU7ow34ԏjRdB{TgU;igA Mvekya ;% 65nWnh5QNhr\ ߫6(ޛ^ DŽ8f1mU)fr7,ҠPGdA-8@@z{[;_{ eB|`-QzA 6-g<$sb' a焻hC-lWN@=,1yxAtdZ)Geb-(pgk )bGh֐qﺗ;6\gdHd 2=3eǺ( fxj]Jo=zMAϘMlg9hi{`z| l7Q0 \D Yw'B#I&rC}iGE׵qw!}ϥ0yuyV, +hm |?PQKIt7t+D,8ۿhh+( \<m#lh݂Lv[7Nڪvtmgy9ތk3We{(΋}+^S i;9OX;Id&7TTTz9@b+msCV0vqw;F6ܳF9p^*tRqms`2RlFd"P036Fۀ0EOui۹.2U,=Ʊ#]3][װK !u -T[plf,yBF.(r?2!2rp MtHf.t}Ԥ#AⷷҌ:} O.TA+C#!ofB)H"i1@@$2c (0WH}pZ^9C/BB mkVqXf 3q&]AuDZOJ!Tm1 jd^-)pطz( hAѷ CCkʱ29|HͿT*ƹV6vKRP} 'P% <[l |8__'Ex?| ћ,se.Xjqb$Ġ UHܚ*X?| 0$ 3U%c+hдqK`vv6{|suÆxI-g"Xp`/rq'hz2{0.Ӽs"/_YCۻ}aݱf:5.A|꫿&!G`!:8 LyKMAJƦyQ,0aq҅a$#B?9@J&F11hk*A<}rW4Iڹ*E{}÷)L~h%Lש7cȮĖ\ ); OcP~hD%!e6ֆ[C`DT#!b*G &(ȯH Se 9E,,jgWÄ7`t~ {v N>̃wwv8!L׮ygH@Å٘\F⒖dC) ڤ6]yINQLFBQ+b2lbC}8T{ Dec?:H͖ՠU)me~$1h!3]6U~_3 Zs({ѮP AK³ꐺ%m2) zpZ697TM5$ծt?#拡] V.yFVM ]qҽR0-WT{eN9BV9Ac/MNis>^U67)G(1f:fM;]pi`@z# .jfYZ|dCPzv3Gg; vUsenj\Mf3 !tvT&KT xl~V/0&{sE&a Bv׺16}׼$81i̐J̞=oQh3#*k>#\^Ad>a$9GSG&el9#Ox pas_CΥl |wH*eoɳh2Q=j~G"Y&ł ;}GY:HU۝ k+Y1Em$h=NoD#tXPF_@[v2[5gq x;Y/$P.5`붵w'3̔M<\bǻjbgl%.ܛx5.HvQqn䅤ڴct:n\"Q&0(ZP}.@FA_k0a<H/._yXUkz :> tPP8XGO,%-qsO}wnėIo  0QM=),>4Ϸ{?SgT,QSv<3jMYᱠьvtL^ gԑ(5-%֜jC0N SΒV@JzL_q%`xl9Ub CaD>/% #v&ql+F6(_t3f.;?/3Y YnJ F brqR 5ƿW H{7 .^I܏+HL_oMY?e -9S@UvF@p&wzYm M&j^6 enU|#bTe5V!+60R'!7euEF|F)rtX) 6>+:h'iRR,_E&5yP]y~4Ks]vX}xuԑ_f:).' Y' DL,Ε^; 04-n23 TON_ĒY7b䉂ȟ)|`K23LdAĕA˵'{_i{;|ۼd\VUm s/A7F7D ?AҬODZ -:']#. Ź|P? d=uVї!ƩW&ɍ)&Kaܿ/6bgHOx jc"1 EM6O`ov}Lhѭ&GR>._M8Ej wMq2c-\S$=I14JO>|¯gùY('#[M}Fr*gK3F. jbR^#]ͽ^F#lP>X7J'08c Mֲw9-60F ?ɓ>XrkjtՄ};4 -e@k%#Ϝ%!by"fQD"M0U%8,G~>"`Hߵm];g`&ЪeM9DfLx15ܳłwj3oTt1:mFĽ(тXוJ9IoPѪy."IT|S)~BM1"ES"?&R~uF}YPoQ|C; kU3!&#ͬN\n|3qd(oX H@Q9{uG)a5[)>ԫV _!nZﻵJXڳyP$m=nzDzzAo"lȉ& qH]vo1}ڻ*@N " quK3"`mm44 P T1)aR !ﱀ=V5T0Ή=ٕ^fn㒺M̐͝a;9Jo3ZKM_EjRqA_N#Ҁ4wH!}E8w Q]RxykS(+1nqmb]ൾ#fټ#bfofw]JPZʩ Ўequ!끧wb*[Ag1ﱦl1g(V -q+b;ټ,6f(h|tξԱɇ-u"dQҺ h(Ȃ_O X"7zJwЇAG0L35AuXZJʂoܦ랴g; Th+hxB(h=HMJԿ<. 6xÅ/𵲱!b%^ @m:KY7KTS9'e''b둔50͝BeFQM92sryc e=vQ08;5OT7].'YL{;QUWrQN fΪ(w֫ٲ[r($>L4po-4ЕX5e瀀U23zIRȽcIv#1'M\߃# 37|+PF3B:lRGi4|:9oՔ/"vTQew]ތ-Gg{azj;?Y"k WC4cdR$X9&w^ E{q/tX(MNN'g[ƒgͩz覙S,SulX'`g.e**ޅB{Hn"[F<\s丷0 8X`edsze MW`GʅTrm,?*,o=x8Hs].#M6OB0kI@sTsX'd d)$VB9BCnk$=q`q~rJZM/:ߝEM¥.2SLe9ʍ$~#"BitC0Tl&G7Kӈ<>%6м³oKG;,f; äKjc!jHdZ*'ރ-[z!sQZXhiԽG r9<[wˌJLE3?B_ bQ7(5(5c˪b&IE*W37{Z?oeɼ%pXs=RA{7={:_Y0 yR6,H>֡Ģ#./g=Lfc,Kc$V >Uf‘F; , &{m&Ic"RflE GݣWH^2K/ɔ:zҮRs%8Qw3(}4:A0MMx1vz6 *3>u<_{}-lCpbEa'FHV6r.J {.oL  Hhlh*-b{勇ȕ'=pPN+`qF.Ҡ {Xfك:"[ MU PuhI &##Hx虋9k"urvbE% `Ɣ952zA(7Q=hFzw^H i:=W`l-lzSƚKDS]);x1w,ŠR6n-e<3 ӟTJG3LE]{%Q*tP}ay6(0Χ.i q}e?6~ `4$ٺa;OxJ@Ϳ Ik᬴ e#PD3k_k3oXA'4πwf^2PD}'ǟM.qB2ᩁa3CCf30RU8WVÌ_9ӸJLJ ^5\ou]o5 Dj(OĻi&(}#Bt&O`F1/~Xy26;JBɂ_H.^ 9Y6B@23q _$<';uѲS7]d ,\< ~ m#ZK@j" wDsLYrm HZ  )rJx&~L)]slP@= Katlkϖz^OQ誔Շ Җķ|uARsQ"KSruK$YGTiûV)K\D-Ȯg/XF֬w=Cd.KeD+> ̖cq`| C z hʮmJdyMbAHR@xB P(^9ӧUEΎvwnL m B>֣vx>>ĉփBW=X[jzm-'FbZ2 {͢y˯gPrˍ<}x|=Oy )uD[ Ĵ-G"/,"+?[?=pL7cf{͝yLꡮ9ڛ\1{Rl:ˎ݁^q`ӃjV0R%l@U_/AXik93`i9BaV\Y B28wu?̤铞I\ :Ut uHOCs-oHXDC@c!ݼho.~s!QH*5  `ہO9{X|P3L# So瓶\/S>mF^wع8ؐՇ5'sJ1xvv%๝3~l;~[$TЉ;X-l@1qn?+XHزC>ۗ92rRhW? I[`񬵃/3MbyPɱG؁DvʓRSK;D]ƎfjqZ@ު|=GwXUboD=lX~wVv#FEU R>*"Y!U(D5`J5G$Utv6.3C˯#KsE=-#ȕv1@lO+o:Fxb/!&PZ:䟎av:3R 4*k{!|x^6tM*Opѧ_Ws Ia qW* /qڥå0< c8 EQL` @_Vl[}LY[2P%AGbGaN}Ijd*vq>wec+!A23Vj;od~8Jcʻ΀RY^֧y0xcV8BCݰVe+Sϋwa<1k!S%P{uy; J!N/4 SIy$qD渚~mTkg=б<;(TVrst-2Z1)i/tީ>UաLܿ( ڈ6ˈF{8e8*}bESVab3 Z_b:*ǿGerHlٯB\UBgP Ԍ}BM A  Gex<.0c pA^,ynEŔtq35|sgMVsy3j0+Yj CgՂb"|\즻Q>ݸ("fh! fȝZ^֕Q7/4.߂T0VM:7cGeI`īM!vt6=ڂ!,Wт552IW_Q0#xҬ ^l'oI-ƛsMhHXY٢+NG|ةVWdK3_.S5?]1drX-èFpϪ z=4Q3M}bęn(EÒjBٹ4*Tk4 2".~@ы >O4,<4iÎl;3⵷em9s8mDǘ"Cjm|pd_;z< =$5_+\dC+.ɤ%ƏyCž͎F5~\~ X ܇BX}[#afzJ-S!l5z_v2wz28>:I̥`Dr2B[죐.G0,!3C$+HBZ C^ȒR@8݅MtOa:a g{uE8JD relC/{3sKnZ!8Q 3 cĻ<iCգ Zv#puShfz&?֙/|9@%HnLmBx#4} 5:*ڕX}0twO_~/lN1EB;_RQ2IGNN~(;4c@ђ5&9c.KǎBZa#Cl bo0ǿ}ǘ[ύ|J'й6[ؕIM?b9Kx.Q5"閥)Kz'aT2V:Ԣ28^ u{;.[w+t|EykewQ `Pj4vUcH"SDh\r@HFZہaT ]DLeCGa<oČ0g JW߬M\[m oh*,KU}7HWܓ/WjDJ9+5D\8j}nQ RZsnC25{- t07W{xT77&NO?՚y EC2?E͍*U`ݘ Q2bQ"- ݟϑ_i{&'4<'x TI!-SC2|K0P BiRgkK,MکeZ:tAwz'/ג%Zl1yYC3wz -B7 h 0[+6;ϹH %P^hRZGTv;wsIUۀ%uRrRZ;Ug5'cRGìKur,m4ؤ%փ M1'N_Υ>Gx _ENI!`SJ5d,+_H {85ߗjb'"rHaR+JDLM;p?X25#\G'R31? ҹmtJM\%5bm8S>CS2[̸1#n\U_~2BhV"wa.UN[20O4{E&#EBbQHRr d l!w,ObQUҲ#{߉W(A#cE+LK iaz띮(Q2%p$b֟J#g2cġ;O&v:*FhUQA|Q0}ize,/3t;1ް="t.WVG@ZzXo#@ڛ !ztr}"ztՂH/fL; Aj.NfLՄIPDI_' ʋ%JM6v/2t/v!A!5mՠXh.Qq۟lz,} r70PP#14RipNZ>d\H-\&oE*~Pw Z_@ k7Pc)RGW*r.[.#avs9K1I-;bq4 mݵ >ǻ DޢP_7; 6+ܹHm!H;:؎;z(R(&+O(=a;#[Yjmn1KW>v܌Iړo<:Vՠx/0f YD1RRc53Ƒ40׌q '@$ oz;r3$Q=겸7ڹHBpvazjVO3]/ᵔqȃ 4"I@/(߿ԙ @y@vb8#GyfkM;>|ڎv:_u]XԨ4ĵڍ3jK18vAP10Gr)y3@mn/n&̛npIjH16TƵ1U1?%#'M9Z;dBO,s9mU o'KS Y&ָ4M@]z԰ܒp*eTu5Wkf @pR]+ ^=GE^^)!REbGPc@'<{2 gHIÄs6Q1w.;'c[.o #mhb 9dRû0:),+MD6+?}p`lu8ǁktPx\N#Ă$ p| E.0ӗbhW_B}ƥ'S0JX(;saH&nPBx'6Odn (G^Q**zެ1\qpIq>U5}HlX@  {#D'EQ0g¿-̄oA^AK:Ԛ)fiUWwps)$#-l|6$ PM+rl8]pfTO!H[!h7J[—UÄfqGbdXϱZ='nnaәN9S=;A sFoR6Qlׁ.R<=7HJ8Chl E;XH]t}i>Yt\Is;I޺aF͖8(8#ۘ[fQWP\X*C>$4+Zh;f 5 A.b!]$-=,n:ckW!_ꑾKj]љo؛!'{s(8Rn+f NODEֲHw k"][kc.^x .[Vl5U\ً 镛ތBH`@"v %9AM-ˠ .,w: = 1XM ./ )Dؽ ]2CiS?/8C&o?6i4~7I;|Ipc6DW4ǚ ڋ:G"G5PFHDMqg s,W NIWLP3]Hej󖋸^u|f1PidWSnDxޡ 4#'?a-WRTE@Ae. p)^Au)c Y!ybzUYfP}Ƞ>=RmpasI{SRmME^hk$s`a"fNhqf$w)7YH_Dz5q]]~+fj!JW!$5<$ QCUF)L)'HފJ>aG|`O8'CoXAҘ%_YP=Lr:+-C'36!̡9++Yj1@_:pb176jfKf$Uo{~M}cÜf`g++g-1mY-VK45 ìW{OȔ DRޥ%;P)qQ()Q-|6!°4ݷR!tG Bn8kS(iRܓ?9MSAhzt{%4/f*9C&RV(O{qذXBiS*(X*!T*\s`5o[Z>r@ή/L75 cV,ß\\ZK%Yeo$~8q*5,xD#FCC1˛lJr՛pas퉡W1y+/x\85ۑo[tŋ x^_gs2 :T!.`PU:I<+2dYfמ`9Jtwhp)8ǿǀ?>LW5^ңqTK3?ͦF&xOmrP[s\9!D?^%R~#*NRc>y^;r-VdWi&ck$`YR( 1mZNdh+]>JJ`g `ۯ EEQqSu]l[\ TC xId1Y%1p4QIEǿw3"`HU0#zo]|> a~¾ӥҥ):JAjRοԣm[GMR>kc`'ZG7.׻b/Ԥِ$!z4GAQHGxe5Fl*lĴz9Zn!eR 2X?*A*@f#F8ɕ1VIt3H|Mp9jQt9@(pI0!ta~ȅ0W(yzC&S+ yzŽ+UyJFi!;^БI[ZL=9s2,9(4U?h?*/4jY{:fU$_xh"6q`ϒޏҋl3>+&} ivp)N(M{ 3p lxۓ-EeN' yku@]&UPe'1Z|t(*j罼Y|AEtJbJcgvCoQjgTB%.*47;[q.ǎj$2nݱr"݌;@xaF>T :acSzrN>î2G Aȩg^JSI<ꅝq,]c} foP(+`:+?Q1EaV&@ڸbrO*Qfw"@h168jeQi<낓/JjU9wFo^AttqpUބqd{fA |>2@o4m֩ `7#_Qf8_؅66(v||G!U'@Ch)v-2 Fs>V*ީ9ػ eb$: 'h!WTizڡύ݂PO -`3ǴH*ɝKޔH El_p-Qpk8ddTh d/o`OʖVE,ʘg8ԓ6/wgW^̿].R2B0\iXIʏL]NaD^L؂؍3jE#l8A+ѳ8ftι ǯUď ,C 83P.UQl]3uT ODiu09K=_5Ũ8v% u_t ٨ۚʵý='zަy͂+J }[M9*;5:qo)`1mVI/Mc~*o6Y?8az5mS\F ch@RϛudtU5iڨ-g]chRE5eNn^D[ בM(*RR1WĂ_wTePJvB &?CM1U2Ě{-S)Za0oM12Sr|үgꍥ1`= *C;}oklh: B^Bk%ћ !?oۥM/ dzqҧHy4s  S N'hoXK+V 1ԟ]JK1( 7jBӰz狭 7XEԐ^UZL_ɹcY`м0?p:+=}8 7QOsڝIn-{Zx֐P2A oD;@MBx,>1T&0&Suhd& ;F_HktȡYSTs& .S#( Mr "@TݡSC"HGCK e|HN h&Rvw +<Μje' _H/z g!n,%%{-͇F!t8}X"x-Yy̴ʙä>{py,:y?>{ ne&ܠr3xp)J&.La74Ce@.3 CVESh)%mUԱZOv\/GO֯;X/h28S"O,y➮Tma;S]jywhjhTCzr~=MAm/A(2q~Ot_E; V}hI71sΏwMc HTBd]\b~^pY(0 O?8elON[bP̮SD]&Th撒i3a i[rJn0>Vdkyr0B՘0?ʞ9CCM#π^NׂLh/?ywT2Cq4q^ŭ#=gfW+Z{CK,49,6DT!~u{ĪL7`~3LЏ?<:_~s.kVnD> Ȗa%b(!W/:wھ2)nDi"i,{3~uS!{I8s+-p8:UFffNf.IPDrL](ZcM{YD1/͒asoY6E3q żKAo\0~+2A]-˖}$O "$1ZSЪx ̸/dBK,}I󠇦"_b+8ڛ|z3=V[^)vIʅ(eR\]=b89 (p%R>_Edzg)|Pd6+ Bp"Zm~'׶U@P"N01x9%u%N>妳0[CC6i&j9%bC=7-rnz(f}z;Mz}BOE&s5~=mc8`ܒs}dxTQQ\Oύ'@ Xfӎ1w Hԅ,C6 5Y}SXQK?ޢZ݃hME?SӾk4xp}{5 GU>-5]Gl?Sb CNo}dr4*) pٿR`8c*w}'y]/boj*Qn _E8#1ljO!.]0Wq\"=d~{d]z_TM/'F?#MbWksowJcd)8UxAm r}H*n^nfQ~hЉwR&;LnwM#{O O^0i6̔ך (eolץN~M ,;Ș 1VŸi%c6DVP-E~x1٪lHy20eM'd(S' k@@E$lot\uf1KFWKTŒiV!5-1(z>ۦ/U[{AOL?d;믔M426kz{5\G s6șhAE|UroDbyxCzOq t!PW黓XSuB.-P\:D6m%[z٦0x튭m#3!Ș2@֚;$oU g mDq+b* "@;ݭ+J>Д&WG8mV`FU('ssdf-_ bg*{o:(:eDK]a[O>\w+*49bdu5fYw+bWQ5O(NKp|e tq J^H[yH #nfFv1IӚR?݅ZpN،Ql;-]c}MXAM"7㗬E[:ФI☆_]XjCxöި6]uثLLfRDNqQH GNCJEß~.z3}On#7 ݋ጅQ"z-?L9eeGI,S+?l0>DIm+z}9dg p\1c濲 ap1q%ҩLaxwyY,{NVM䑂SMU>|>:?\w|;-~*AΪʏE:. 7~}V X\#nKyv#6Fwo2Q̮Xg!35#y쀗50 Mb|\'#z_dP98N-{G*|4ҟxY5K!ݩ2oCnv(LrCXY* ]m&螎YF:8<3V. v:H-q`dŹo{gD-zЃl.[ +φXy~4JC?P-̗NXj9ފEY̴!d*(@I^vƋOnx) f=K_ E٨3P Ā(=Mrޟ?MP 2LD4L*Uy] YG,@y* ڰ@&mΟ([G^o E j&6:hHA:mg8M ` BD,43۔-"M)!jvO Iӗ1ۄt,<}N:_痎AtɂxS:Su'":]=6MG2~ۛso'E$)'?XL .h^P(Z%>fӕd~6O}Plm:s$ZPe5uU q Ҭ3vB`f)Ula4e D@O  U (yI(Ro g3rӎ$_CsޠWMl[|ڃj(8sT3rq+i1Jz b{jfȮW4K@ 70uԦ1?E)uD0훚嚫 z{/aTXF,l@4aĐ:?0<8qR@[_}p2BR怙Ω@P&/oݷk4^N4 KB7^Ҿ%7;85BILQI'k%rICn㝥~dȲ1&mH&NOtn_{ę!'4#|ZSq(G 8x}{ JZvkX5D_2KO98Z4|uC41@ T~f΃)2H lN~>?WAkP։k*_c ,_Sf=$W[&N1@5ӗ)c粷\jo^3ey^!RIR,@Ƒ 14P d3V-pQ+NV%ѳwB>_ M3$qT I4́BkUga^S8(ʁf%8[?ʻG88}F/qDGh==IToKg<={Yr."$3I\O[Uф/fМcE&f#JA^H$BsGХGoգ {HuqB 'scEoDHrZ<]mlE~ZK9xxgJIdvv0t25=owͮyH0 z9p^>7M<>? '/`rG!5g%4d-y*Dx#ˌYZDYl5x8voU-ö`l!q:Z=L/'~f<#"D)#An`O=GKdُTNkpPr C|7 Bc{$@w''bɃŽHXyn{^t`fgܷ*U,{ >9ISEcRGVR:V}:̢?!jf@nPޚ3, H ?mF"*j7F -Sb> [8ݳ8sܽ,T#uB/5]ے /kZŽj'(,W>:Z`t) @{vz1S3Uz;LI#J?K/e,:2C'YwW"y5Лt0Ͼz`ׇa˨f~asI,!Rw L'8\.\ :ppG߯FH ]S̛<݇fߤaý灕 <.NIIR35 MA@br}u_Y7v%%Z<[RL5V)о v0+7"DB_|HF. 'g8 ^ULя ;Kly,:|B%IoLڋ@i/_''ѕEټ0ڶ5R#ѢN>\ƭB)!?6V3U̘`藗ȍ+eƵ9nB ^$MrWg !lٵY*Cq(/ֺz91`A`pvֹIKL}c,tSt,nnsNWTR4CfT@x^H@6C=`׻|.u epC7)Kԑ8'ڨ~f`Bnz Jc6E'Z|/Vyޝ Yhˈ{2Fꨄ=tIZfGkj4t,H)zZA9C W4T泠_bT3RJw{hcNH ./* '<X!!RA&t u{2 DXBZ)m9i1jy,f ~7}ɽt'{B=HQSW:3i-KB̥͗5$ s'^z'1vjw)n\1\f}3 ]+k}փT$rH[ 8@Oq֤0ۊ'A.1K %VwnntI7r9 xrŚ,c d+s;V\]Ͱy~צsX*t`~TYe@O4RS= Y|Di"W%#&V'\K W~9C&vh`e?E/_'J'OJ3/jό!hَ3XUoY cy"µNs`T,JhM*-"VvvW=,͍p ٦5c!۸ !u䕡l,^x^ Yq PS1m'N"J ձ]g˨O_قzkL 5[:%Zx:|,L4i$XJ}|}Or'4!]WdrNzƼlh0QimVNX l/[p8kstouU_@ mI>jb~sj8Ky-@fg`:cߟ#.m\}9\La Ͼ=lYcJM+p8fŗr,*c5ެ "5=řxΧ[y$ӾCX} 0 ?) eh'ҧ$ JQ13[R nKlSޓsS5Eeh˿=пDf =@ŷ~m* [ O['}qЫ렾by tتVE/1+ 1fA\M -.KR Th;q)]9C%(|%BBӨa'R@ .tӑ|3O樉3?;'@g\U7kh|30PѳVj8]ϝAj!`왿J΀7p脦VJ~tc]仴<8݁K\@lq$` Kc\$b4^QeYR,ZMuvܸsiF /hO.BX/z]^6o֫9 Q ʀmγ*m$3\cGR2B<)/piE6vY5ps\<?lntH0]{$lj,*8Åf`:eftUa]mxVc$B#Gex_k;(UX%gHd~UigLjuDNOH7\qd7̤B$/(^IwY1{d5N2#؅P6(S@IsvӋ6b@t..0W(JN%fۅGfĘ%! vB"dk-"zf*DRG3yR?`b3l~up|su"oqXfs(XbUxyO^<Ӏ? htK\}j- U$2ǞYT)Wtf1 &sK9]FZ#(3P(p3 yOnIfSY+ѫXG'b¤PzWM&$͙6r_ë p{~HݐnLK7j?]GŦfLcŔ8q[NzveF!9͘e@ ٽp7՞b[!I"@ dxqke*v>g8!k`Ѱe_tUy;DEkM_24.%޳*%qY\b~j!T328纑w#\3 A/.nN -@)srZȸ&ێ8 dlxGb׀:CIbG)YGe Tau#>F_!yòa!"=4T1QT &ky[kSjP2Sjt0p5[x"S $&P=ƀ2CUQ1n(ձ3J1b; ]HEߋ{yW"tnb'x!t᪍J6<-ZvMcd/ e ү]!no!5?AgNҀI)dwx;xF{R?asWi4'K/KykϊVx$~G9ߖrzۀ !iJP>U'~TVIXgͱrQ rOl*7 Ka"(n MU#:^˲ۣy}y Ɣ'܉lUL&DZޡb>xiP*|71Td4ь5Fp9BJA6Ӂo@ʦ F/] 3SX_o#xs!1teW\݇`c9bqjBwNn~)Hr"Cߢ] xiʰV6_Gōi:30Xo ;(U^xb;i0c ^BX iOD'(~k w&y UQ+"jrr{{Pđ6`<7rsݏf @ȸֶ.aklS@PٞV;H6b{F98.jRTY ®qsG^AjlbADIńA)gxTXز-QּMUx~g ;NE8b:1׹78k#ټd/ŸV+mxFubq摍/tغ~j}$^<{;$`_/=fa-vM댢8$eW܈=t6[?y)rTxec}tY;l:2n~}t$CuH&:S*S*Ħ"B+B5~hi0Ds]cʹ^/yW>JΌ"`tpD= tIA ~x@2dx u~<\`Z>s)]A1nP % lF5`\$8뜗}5~O%&jOp><.h4qu6rHWQiyTGK'tn Vl| I)c(oB!\&STǗIEͿCH7yrjA5sNmCv\ƎFҳdS"$y8zbx}v)jgp!O@C(n܋O?Fr̗q{iBU4 0d \c IY }:ܢ(ɞ)hyԫ_* qGFiy;ZnaI6yƴwS[zf?nŎI1')ׄ_H:Zg$i*uf%I,t=E+mc@9s uix<UAbU0im`ïXoo:eC=Bygp6&L 9O7_ׯu! $Ӂ}+`Dwx{NGLSڛչ@Q(f>zj4K9pt65ve榋/;oɤ*>B;[ߐDSp^]_E(ˡa 0Ga0#(A55ܧ9ϝ 8dJ\v/GJAb>% HnZDh>pETʲ8`bz8? 6>ME‰,~ܶ:yZWq}g@Vblv~O ʞȗm'&^-Rx5m;9o70(Ƿ0[BHX MN 1$U&:j9 UD R6bh%lPEyºB?-7I܁V+eY32U#祣 7Ye1ysnGYBOyO§ېiBo 3m'94p~Okh,D?ެI%m/C*K;_ƍ2cҬtĆ$[ԕ68#;i}QIzIG ?\C3{J 9Bmk/Txѽ|)%Wd5 @T0޻ѡ %+mLTռC{$KNlr}z '@9ҽ4 n?lL_ @]rΊTes$mĚH-/4uwzt06zD,eYWip¾֜ۢ;|'q<4[3k ]=4q38{~E\mXW?Uq, t ]Oh1+yNdDw݇>Bm{b߲6]Glnb#SV5#Tj4 "Zt~uxC[u@8ʑ]xdBf1*HgC|Fu*`PtW$zZe*Npw!|@▌6 [X![ oljEk^ZdfޟH T? F HgW5qS,ʨT`(zɫ c;X>؄ڪ撬5-x\KMu<;-́1Ma, 99h4F@gbn>ʡv jF>5Af? {-Oel t8ȸ/_eABcQtygzmѓX@գK(a:?#L '91nM7z]nՌx1Hdjzǘhpm31 [h!AL9W >,⏅6u]~د_|HK׹lߜl^\dv!=/J#I9ߩ؎<6M;n4i$|샨 M"#{ Qǂk=`J9ρ"\J!7YAKA-xr mk**}{W+^V_ȅ+ /~}U?\f9ʒ![d Vv'|v챂8a2 y&XEY/I_;fP4EIV 4^i=׵L"Za#mڶ%Arz' ߦ/x]SeX e+*Lۭ Zұ(Lr Arq j=^ /pCa <[tlc${{k跤7HC8pC}m5Pp# |_.m5H AT 5O')ynrmGt}BЃUA#!N_f5 w)Q3!׉ Jn V)Dm FمE%TC5E ci'/T9٩gDhKb1ah7Wᅛ(o?S;(i|lwҤ:ZdʆYg1۳Y̙S1m(Ԣ*v[%v-ed^B͉15GjR?'E|ѰN+ŕVcH p$7C1A;qv_ iqxb*(2<jNYyc/6&l\|Ud+b[f:]jLۨULq#PЈ01.eKs[< N-hOvOU<^ Y4![sU[@KGժy\Zb 3f(x' MuZVe!h`S38E]+\<}Ai:@CA56ibWf e҅!<+X*$#VmO~Թv(RLJ@P?XCz EhZ9)DFs=,,)r9PIc$ABПё  G[X5cUiwFu7̼{RZf!aXS9x#z%_(EMנNM(w I6;FjE]$aQh,YCl{=1[,bVz阹je{hNvTCJ]6BJ]o _j .IoYvXUmuP>ds'l tu}_rDXv0}2lqKڱ,[ Y^lӳ^B x_][]R*whѲHwQ;ɐF(,g o!Q5a(3|֥me%=9ԢV ?;=" #H̵h(ʔLbIs%fφ]'5c# *Fe ytÁbmy_VӴ\$Ȝ9s' .zg.eW υbztlҧ6݅pr&*3+^q*t2Mٱt**; B^K*wdN;$Q2<7mp)elүVn UibjbJޢl F+XX; o1ʂ*gſc"=E|1G~ :.;T}(%gg<;ջ2l|R+$M5,%\ Sx)^ 4nZ#['7q&rT#I"1Ro^mN';MIDO`wmAd9^8ؖ"[Fb I^|g ґwJQ1k= 7rmS2ͶO %$pfwC>Q2(%Ka*nKUasMڱWe\ğ=)pCCפ$ۏLݎ* $\s$daT(TfKB^8hLul}REL>ڞwE~o@V0ƴ{80pyl%Zfb5<=yH4 "rK=W&_[&dy̕Og+<2H3Kۀ5u2o^`6vHpT0>m::af[ё|`yeҴ 1 ؠ?ZJi^Gfhu9Gns UnOadp8RBX {zAD54t"\Pfy:5^+(he4C8̳ 90d0@nxG˫۽/G/rP^Bj h9uι:% &g} LsMY~q>oľIoV؆9)vx.59b`Cl<ˢpj8e0 >?Blcf9t~?|>ݹ4Æ`,H}(Vh9*$Q-#;d^ZD.7߽>hgL_m~`niJe_l3$fsy-v a1ExDWƟ`M?J'4I+uR{jU[h.9hߩ <St`LR:FyPVc\|[0_3\ 0%g"#a>g% >z&$a`4jN]à5<~Zz䌠 %fݵn(ޥ)#MlNj (ar^>4ShGKO@ ^s#eS7Bedv2]?{mkb_#>&2rxȥ}Tܜw{|W\)deF#o@H^c+l?,(5.[Z]w1VfDuG_*F几ԪQ(8CR]E3Elz$LieV~[7ι /ӗaI:`^ {{zSŋ[hHT4֙zd%7Ǭ2%I Dٗ>\bպf]{K<Wv6gޤr{rf뉛٨qkR7M`q8%kmyk5X?] _{,#!]j?2Ƶ+\j"rGċuM6T 0Uc I9ecV g;u \ͬOk:]ypTA=~s|t!?/1 a :.]с3CiBb;_o* t{Q|A NM4-]y' 0|ܺ௵*t;7f;$Qfdn};^ٙf3rV9kr]zVR N7>-)Ԡy(yؚxf8dhf<.{o/d2_)gj1̈&7WI_4V@D8TBYUeE7{Z1)!^-3 ޕ%걄 jC?^>i6-<`!.=0QKxv,;L b92/'gBfuǑ ^$d" -tAS7;֕|2h<8<INLUH3b]?i{p {hh{ۚࠕ%iXW߾BJeDD&xe!>ޛ̳lO2= :'@:zt/ 2Ei .lQD;ڬ rkXot2z/wƂ{ `6Jն&!vbYѰ-PA9, /<k~H6tBhZe̯:^R>B /.9=;;(+mѐ d5ւ;o}a^D,]@sIdcZ("3(v RgiJ(4sؐ03&]$6XcJI$+iq*SV1+XAׇ}Rc+$ *k8`Lନjh®(,y#|g}?lDh3mP0HL.;6p`=;J~"HCh{ܴDݰ TT#0NOFdP6q7|FR>hdGNԽY5dz/l-6[>RM %NM,F-3RW)USTQL,Np Sܜ5*Բ"F/O!d_Jw9V{Փw#fҌʹ/J3=_9M~ :,(=O$@6kcD}˥f;Ɖ0,86'^ݨ:K@ 9p'|Y(mVh'Ixʿ8:dP:XFż/ؿ_6fR P9\S $j8Y[\! d1qWbDe$2.BF}" (N=#i:8K,pڞ]rn<c *5 Z}f:9쟀>zķ-9ha o}aɩA,yP$脡-q̭']->EW5ewuaH\jr? \Lu4#t+(T/eeqP1v?<ͺr.Gg1C)D~\Kt( x;nG$..+)Oo~˴ouB[X%&6ƿo1; y-i4Dɘ7rM;3΅ƕ QP5( J55=pFL >&$m]40F5VQM]Cгqz_VتPmp_3ZEH$IĤ\Mt ƁRg*j 4bU1f1LR\fӽS(fhzs$lEaG.߾n7BiAT­dQjbu,>IB_5fu`p&L+L/ȫ{3 f=.53f~dt\ 2=\ q#(x|o%-t2})e鿤WĹ3$4ǩm^&cRU ؒSiHiH+ZDeWSҎIR5r$i=jmE l2&mУ]qjՖH BXәS-W !`_B# o1#,2z5x$APkdX 1WfSؔ )\<B14+ih;L"6IO+-0UY^NxgOXM?c!ò/]'pI"J3eF19Aq ՌoKD#~t#FAc ue>uL'=Z̦JClfrf̣j',cݤ^%e~a'-8]$&{535ۯRH ~hPkqz66CG ?y֨SרbTqg6 <_m~W?aM6oLـ$t#"&2>}<0ہe2}TIͷzds[̪@;z!PB˧p "FTU EO~HHoG~+6xح1}ZB)&12_ԵF(d(Öα3؛2i݅&R%҇bo2 ͹Q\ Y >sBP1o*)`r";Z˔b׵~jT+KA@iMd6?Ea; s7+{Xe%R OVUy)q+ oϞì۵/BLETt_[Uw>pD WRE,[ ;C$A.]!|v#ci/xD"qZV@iC7FڸBFC, JmxЩb$X q!cX g ZRG-8/j ;7*a[VD VuIAx3I,cu"͹XXG7Op\Ӈfu:ǯ7nnKϡEs7xY&,4k+U&xo mKxˋ 8-nБ8bnN)SE} ] a#:*F 4w /ULu5N)<Τ7DC%kǎ#RW!$ĴAYYguRi\5P9yVB(W]/^ŎwmH%D,:1;f 61 d(wz/USߝ[53lpT0|9FGفhYZHm)8>j:j(6)'3{sgn#^<* *"4OI(JtyUy{)8".TT ;xyW[ޞ6/; r 8 +h8zڵZd3!z/d®'@uR@dKVI0!ƠStCs3' BF[GL4-L)!tdLv wM%4Qc2{3fVBj$%yT[qǴk4KϟXqyzfvR1^\4o־Ǹ69gVgϊ`kA !)9*ˍda;Id7A>K ]PviS?⃐+7)j@RYeo*s-:i}$H$zLOe{ tZZȢ9_2.ra-G 񝑗XnI&Bmsqa OC4X<~|gw)IӓJ@dm"U2eL|T:5I}iz{N!C-g\+hۏ~$}{-T uߍ 8BI5 ujKw!d[]ћb3/q t `ܚkJ:v_Kzbt%f4pT, QŘXn ]QcCD)\$|)Xmwöқ]zn2{ˇG}b`/pbRŊI֫J'/R*cu[G>(A.q(mÕ9rK0sQhd }qO.k&^G)}ŤWA\?Z,|3g BJg]#|Wǭ {tSXh;D ,c)\Xiϴ,=< :*#GR 딚/2B߷#]kFD<ϊCG@*|qhdAJJ>b abҟg40>PVcUg7VsCJFBM@'#XG,Hf {4}B!+jF]XveB{E~Z zT,3Şg܊ZA TWlݔ(| 5V@ZЅG!6ŭ0]~ 0}ޝ&)"g{1Uѷjq J~h=x%:,P:Xc!Ati[ǠvũiaPY`Be0{8ԹWB+Tκ5aV 36ZB6F״GXjXC+ttj|gӀ[6Hz9k1Ξ?IwNUE&՜ zt]=6e|ô[_y芰X XY4ܠsTȌ51&*ԗE zNLY-#gpW}3GkD< lhunب9_e =Hx=\69ƶڣe⚟[oN-Z ]hT;CbE| ZDM0um܀5RIAO),܇–VzԦ5{D'cĄO!zuՀ禃E1%sMo~'u0`3aٹEA$E2IlzZbN+%,jyÓhXG9l)?Q\IBrVUUsXCDsoà'N7fzDy n]a7w BkI]_7<ػ["~a }p0ΈaoB8|'J Ce;|llޤRq\?È0fj'{A5 sP6WwvD#ܘ/|V-q JK]1D7Uk#AJ\O Iu.v_v_o &|ߕo!CU@ km8^Kn'`9X( orV1e0{a<||lD u&^=HU[;^xq*HZ/[nM߁Z.{&1ol4,U>pf%̱Ijs@\k1j͛'mjW*!)84r/X_'= PLbU pbR7ͺ8U@nˬ\UBᣓ%v-MdwOIJ;,,fP:14-Qg>95hz0~d䳭lH1j\߽u2d,3ǴiHxxO*1S0l.塐ҙ3*3/pW]>uiH6fnvo)֧s⺀+8z@LyDդnP|(6"cE Xqbbg\Nizx MB^fn]ήtY֓"ZE-/)@ ^Q/ʫ)94i/Z]?b8;Lm.U,~߻?P̶9"*`MQ"9!=M{RٴɈawrXM=%uf+5wEVy22U8F؆<C=H{"eȇfU&G1ziLF8B7S]K&(C9f3?#_Ş/C`+'41@ĥfiv7 dX^aC{DL>eVDI v> ,RH`P&Z;+X2 yaEgs RqYYHy2Ѷ_Lm0z.2|Yj  )Ge}oU; DB̶2IeRv)XLQI2F,\VFi9;=]ZjMl ?+mMJɈ;}Q&+JӺ=vw˄FYS@`Jf ߙ1R?).وhEҰ5*<^\e(R)+V/ Cq# K& h!Z)0Vc,3Fjr1' +Wlgm01Z`bWM^3a~\W-Zvg34] ?MA'|GjqkW~7֠i/VdՁ͗.i>_bjk2DtNfx%RZU#BW(6jnq bW*.W_ ak1D'YIhnzR>nqۻ".k䰞Ok]-Pv׉?"_r=t\C. 213j.ar ΒӉYϡ Z"GD)48 f`ayFmd8v؛*{i)ۨ4cMp"֡/sQ~`zvߝlOv*;L1vIg ;Q#;_wN|6"aj]MP|yz Rzʄcn 彪Tc_5ؽȲ8"H%c6qt*f*#`iWچ}S`.G:MeL4WM\ruU,i 9'| kvhmL`(p Sg20h~0C.H1 >lNncԕŻ8uFdWuZ Jp%M'>K)4=kyJk{lsa񴊱(< k>b+ƚ A/P? ?az 3X7KA(vS@qgd b#ZKEׅqoG<}/' ^[[SX2fx܋ƒ4H)Ӝ>v<[I4/l߱gH|rqod^hM[%Pf?@6/4 q!XaR;]hݸ@S bB*#@ڠSN,4)PRVجEqW%%ڠ :IZQx+ry ^ 78ZJЊ/9L4nq&a~<գw@$Cu+U.)NtdE"k?~+S3,!Ä.avԸu4>wF^`~ժ-pRqvK|d͠! uI}o@T@XGy6XS)HV >fP`g6/=#@1a,)IiQԑMBm{PהDщI(N]qzmݍUsȜGITiN^'Z!m@W><J-к2.]}{MSygO մF|@0b:|Àxcf7gާ! V'j4ܤ leTlb}բ$2%ozNiMS<[(HJ`9.+8r6i RY> ]zgEuhz .2SWKG5aXP`dlz*Rw$>TY*~>}@c5.SzTd_=ƔAĔl !Θ`K]MخZ5߹<_sfVq?Vjl$b͊E>7bDP:UY{QX\ \fb{ '@έ|+D6n_^.6ݩ^WC>Ҡ2]ֈ54Duɰп:YrybҚ255Z͈W]p`mZg^<]J2 w%R㥬>SK\|+`:)_iAܘ;$p RnFn?\^Et0&R}pwH7r.\V`ǧ 4\ hVYHF `ǹM"p]^@;B : r=P^<4VnsAxZkvY;EqyD痒4 KC!q bEPzs)$4|5pmI˓Գ;),5]zJ2נ4hH#߬ G=2V.]",@"w G%@ k# XE㲖CzjL #Ήpup<pa Mv=(B9 kHVBuuEе)U7^l+.H#٧Ϗ{@u+P/8|7| '>aR!*+Ux*ա-)[S?72j.W+㒋+u`-*Y]L])-?PD8;`:Oh7++,V491pt9W=G.#>$:\f1Nia\_0K2RX `^S%!vXZXi䘀AŠtsp^*݌&UFIMu7D%CϿxT b܍߼ c!ϣ=)xDq;M:.aF<ܳeiDA& ;Z93,6@SdZW9 \y0]L) 1e&b3o|ФIzޓ>KWE)>蘆ԔDVgX;cT~On|U`6| YO|[ҿNYw8ڜ]Zs?a] T6j,@,M q]VR[pz.'F!ѩi4Hh+m0k'*d{A5wV S4찊 {&pIK`Oe/; U- TO 9O!3a,4{/ߡ[dOVJݨUiC1msY^ h [#%J7).P`?-lK!9]!\Hj $c &D"GƲnA(¨E‹!̬PF223UI0be2mo]qa`{@O\u+i 4)FdWpHrH9aRy_d ρ9siľ& W'A2M߁ y~QgOG$i{(,#~,yc_DٛYcik'֙OW]dl%XpԾ˚{ _tI{6YWU 8$H9e>c9Ү`ѰHpߤ/@˗  "$OD1J cVe"ż |yȞh&/,;ߟU ё0#~$@F{o~0wN][F;L:HmS,3GcNC񐄈ww\κ"v2Bƺfޮ8fv|‰`q3&էB&#hճ˛j˨a{YTiMiŀVfuh\Bc?n.xfX Q3-;G,tSߔ*5,ޒBmHRY6g̦5Lz߾U_)fCM ͨTDڈZ)Aغ|b#8ov;7^|rErbR(}SRRU/м߁$|MEarJeccyO1fP5s]xYF ^9TQ3$I?'#\j䶘_t@Y<!F/࿴ |B2f%ќ08!I+'[dfeVb:IOZ*r]>X ܘ~8C%=J?S3;ᕪ,&Fv'?@DKTeEA}-E47=}b y7l(YWv;bDK}3ԯNhEE~1#Xg,,3EskW{8#%ss?YݸW ̋(Qooo&~w 4꒠0Ӊ}Fxwl 2EqUnlTcn>g⹛5u 5a>(,ob]/<4҆+ypzKc`<>"2?(v )ٲYX]B?mU۸|ע'/5vޗ )cAL$Eq ᯉr^]t w7zJwٵ يR uOѷ+8u ge:ee|qz(*f";!JKي'%_Wn#I/-7OkcI!\;fdN[I%]E|@1\ljde:qY݄îZl9 kmJg^9F:f=u[3aJZ KWrlR&?ūgu^T䫴`\)He&#ʞVll"[!ѿ&h]$q`Z3p,t˼kw-,7q U?|J#⡾^f<ϦԑTPh+(-1pUL @k/>:굔%Ww9o]5᦭)378""@ p  Y{mW ˼Q\@=S 2ԟiLv|HU)oS%zPxjIA>xo@m8 : .nXfEl,lU*qB!CHJ?e?W/4RXf#O㥇p;p],\ t=NѲ da <8i"v' zr%_5[cuas00A"Yt˜w|ZR+ q B1tC GHv8w5gʕ?ʿnsma"k#ٳil 0:xRlq0qW_#KEqsFXvg3~[dl)VIȞl euZ\\`f*iW'h|0]}uf{CaTSpjؓtʀxGZ@U#N锬~>Qlꭍ.+xb+O@1l9"{$^,|o~hXk!3)Q-5ejW>ħ6銌VlkwZ(lCIwQ\r¤*2C9{k-em M#K;9rZ5tjRAcN$RBqJ7dLJ;܀S !v'7:Jg:zmNX$e/`l5@Zs|RUmKYd&_kt$[B+ jXf9VAfE'ݭH4-HYؔÞq~P2{Y6`W{fCO;EԿZCZۉgaa+;dA\59[i-k49˔PUc2B}S6^[tVU,-R/YΨl4U(jg#+с,Ȑ ۍlNyItȏeM5 Hнr/hgW|w[7<=;Փ,U'YD 0͇ٔAZa|u+D1܈4 M(k1t4"<5{|]okV.Q%VRtߛ=ed~V4'{-)p sУ_H/Nz7AL(66xU,ȤfsD&^#"q1Ϥ2&lq~@:N(l:[s#OcQ)H;,%/6ih;t˼6v^ 6y_AnK;yQ>iJ R1\9Y]R MNy}n0Sip`~;bKdXVv-턧IAm!>,(T0V[wxc thmXmq¬? )ƶ7QmMG(,azBpYU#nTF-ְ`:Cgqj6sYV*ǕӴ712LƵF,j "MlXC֑8 Tiay5pPtx6. `Xpzz?azb3&n}$dcy(,c8;l&@fZٳBx_t3Գ{Gk ґ1eהpoO&(4lfq3ƿB6 N 7$ 謹Ό3~a;:^tygІlRf?%{"^PKpJ19,DF;*!{}E1 mzC7"Z]xm-TnѮ|\r=tۍ@4m_>m(odYWBOAYAUPJ Ќ49P<@ CgԼ13(.nta*}o=lgqN|= ;XҖp~| 3[O"-bY:0᢫|dXf %ǯQq[- ( dL(9.r۷_O>ү i W$3F&jIv!Jc}^=ap$jT@]~ۤ nPqlᬺ='zo$z?u$Hc9st[`SGO|u@Ȁ|?;)=iP&%iOJ`Y#+NNˣovhu-a^tkiRptCiqLtRV?@1}N@gW4xxB+AkV2]|W-{I ;[EJz ϑҶWyˋOZA (Pp) ,Z&zbt0::SRQM]`nY! 0cb`ոYe%ч!Kֵ|rM)*6$ . M sY,̔`8؆fz&ի)_;*q2bv up@n-6w%V7B(M~?G#fJC䬽)@r|:OU?dL%#(kZ+mɧK Iud©އfϬ|} t! lS n o@#Ófr\l>NՁ6w%>agå2"m]:/iv7x+W LoUX}w bew ~;^17V#A]eAmwBԪK2Ga:G ,< "Tz3kL(N|urhqݷe࿬4m|)$\y B}hyGRvu67T&B6lI׵cǺ4^aH:#D 7|gnXv6·:ʁQ~I;s rz^)uuٵJŊvBA`|Onds0w@ͼɊA_n4ă4ei3vE C_Hr6 GDK=.,C+ x+7eºsf.٤䜘Tq_ʭjm_dW_q4Z؃.'P;hjNPπ(٬,~w7e|%ZuINd9CL5w Wǧy?@!suT ~5})Koq-bn!O8%wp%Zк%OFD}B$}Af/&C&ڠ6|1N64ko뾯5S",.D4^ssluj|#³-\ЄVt"[AnA 5#Ex O{3)k6zFZY ?qyYVכ?sT+ʠΩgr+#kr ~/%q+˳j[HigrUv:S;ɇak{F#T v"vc?؄*ԌT]Fŗ^%WZJbBQ  3.QKtw9DՕAU`赮 ms ]4ӳl$:ĹlHOKs 3[+7I:{Zc"&#YcV+~6}[SɊg{*'ȻGT~ gJj^߀Gl(uGnR1Z/,rռ`IA"]2ĦooQ+-b*RҀlvFJj򸆜0*ft+k]y%E (ш(_Bu*Z a-%Sսԍ5P=Ml0LJϣR6a>aYj)| #vqEbٌ>8>(Cfή(QHE7yn0{nӾ SJKRW@jtfaqVѾ>@ ]C*>6цr#P^M%bs),F+ZioűeBz@A5gc E>&8?fS27|,~ɒk7=n/ Y)+%6$J.~g蕷Q3O-!֔5R&!$9Wb*4b }o:,}ajLCe!|٪ bE. ?+`䝪iqɨ#)zr9p~~J5X'qd؎Fjg&?j,I/Tdj.X4Etd` Դz^?Ux;]HJ='am!Ix*Fn-fS!5x&}GN6b*k/^'(/J73AZxLA˯Jk,@'`5 $W<@#MT_#]!w2% }N_Bd0Y}H`*%oL4s`!ਔk _lI` O9T\YHV :D.z>w<<8;'cE jH-MbzL\Xf[+tX1X7TԵԱ lUͲ$m &?L,#6n^rsBц'!VE_هJ{|}d0;II6 .䃔eB 1w:n76ߒj]a!:;V@֚dqyr-OfAz )4Y.h!u0A7'H6X SEk2yLx<+, LNg[Z6tko^()1'\%6X8@t;foR+KïNZ#upәg H0 EW!IRfi{a=L4JXz iGcJ2 n]:Z N%ms*մ\df!BV)+\*Cste0ssA3fSAT&iZm1@ŒVj) w$cPK:QE%Uv(&KV&L xMPp'bc ꝍć.>FoynE`7+E ]%k %и,[' @ai%F EKvv>&&%^xv@N e}E?|w(oHfۣ"]L^$o:-sW'ۢG G>y; &~ 퐚fk0ƠS*(4@%.@Ap747ak%nbdq\u&A/7n}qHFZmS/Ѹ-hW%鰚mnX7(\>;>O-髞56s7Ctw1NIؐ|yb!GHf{L|\mv8 ^/~, YHdݗ[‚somCr\f`۲)\hn&bް=تE ӫSlTWB 1g:ex04T2Xr@Wc>]Zύ~" % bVkcz CU큗?պqxdFJ2͇Ko:>sk-JG F'_ySx|<[z83c@ ը%4T^e֫ .(laoЌihLPVN).\91RΛsl|l SoxA0IAQ,y杛 5%X*cOw;Ђnf[+( hg ~FV~CS!PC EY4-H"i9] zGzS|jZzR~YK(VEu֯p>b_*{h) 9G/P XBk?e7 3#qN)@O&T*rp[ Z 7m~?ɩqJW&"C* usʀ*jBZsܒD@JwiʹU+λǢq7O<[! u|,ZiΉ!䖘Qə6|+DF÷IeG]j()@ի:t# a?Qߓ) Mo#%x< 5`@.Pn B ~KbptE<# <1ea@Zk1k\2Rm#it(|b^= J!7*Vyxڶ@}N|-LJ۴m=Q!y :~zʜiԚ7jf%U۔eea]>K=hH<7 vb@~!Æ'Lkc`oћ/&>^z i kŜPPR3V47K.PZ[rvKjUϳ7wubl^@-gLq71!_ w~>"g~m%bLY(%0yr][cЭMFR7$GvXMASдSz:O[ ܪ*D1)Gus3E[LDgԆDhq~ɠ;5( fmc+e:mꩭLwdjA[qԨ☏/,pA;k1>0Nf[:b2|VpvKHP'9qSE?vth5~؉:+"P'Ah˷Rybϊ{K0ie6*V&!_q#4G5U0! Bs1-ve(SK-1sy{6Gb/ƣoK>ad@Tv)Mu駋Zp:RFn+ߑI}Ţdbo:]ڣ&?is:LraD-Ldc}ILALVGns_LW"ջˆ,Stz|<,SCt^ a7d4W=A ꣅ'P;Bp"8w ^G,\-Fwe[僒 h޷2#Gwɟ\sA#׈tj.*~_d8U;g_gEVo }bd午?IHMs֧mA\HlCW('BJvGERpJ<s[7ti U$2|Zg+_w#ڲ!V; cږ0vo3NVHVj T"`6+ N BYKEsjJce*~ahtv[Z̗M2e8|`jPZřyH!IhD9Ey#Ol7"Ā$C )f.ůs(ad+,ήt\YHsqѝsn=NLV]9*̀ }|b aE -QPȒ^la>X"@r_O㙓}ff" Ě ڄN #Eܾ`RUE%0BxYG:4"M#|U))m>䬷p] e 3rq!'0ˆD3dp+= \1mLmSFmtFuKGP 'oI i Z-U&[[ts@%w6r4;-vuW ߕVkxVKZ-}p%>,J`^TRg蹺+by:0П2VOTuU vHV 3Ϫres䓿ho"u@k0`>:vraH%mjO#,>yJzZ 'I´̲] 5dQDI) 2=@KvHӠّTeN6%DƁ%ЭMsBӾ,.8-}` Rl1@oL%XhVuT`(s&he%%m#= D!W-9^e'f?Uv#aI}KbHE3r3{Co9+$Tj' ⇋5UN}U]W4^j֔D'"24ש0zFޝId3+,I/l~vԺ"k.HBZݞTzy U@׹䍏ƴ+Bq,0#Rxph!0;B{G%3+ĖcsJvܭ h nNvdӌ&W$/usZC ,뜥^zkkZ"B/sJT?!22(BXΕ~PNl$7JZi+xvN6E'Y bcԋ܇Hg.O$[{P5Ob)zJ/sϽ e}up͑/Xz(+>D2]7sѫ!B&62a4}ިz$J(HOjT^3"a= ύ QGOU;ˁПܸw$~-^{ZvvŬ8Qu1fvA Nt^blӌg(s+*>|*oo&)ZԆdN^痧4J/T'?'<< ֢E_@khEaĘ)~(⋀6K%iH>}q=_aX\#x*'j̩ьaNwl dϛq]g`&jʸGf_`\ya4GlJ btzJVd?\~SP(?ȋ8JGӤ @;N.C 1hFKv*4OGt~W̅: lRT#B/7(`Md$(Fg1+z7=~ ǡNG9(Dp$ҵ -aI~ {63PyC؉R̰_;.Kς ,_B9Yfx5[TbPt "mR盿>VpoRXC˰-4VG.aYzѶu[]2ѩ &p--) +:̻*"}a 9qRƾ*<;)L6;O){pz`z]*:QYJLάʅ8yq]&$=b -Z1V%% Ϙd(Qc&A|I[S^E,{ ѳ[4_i EPI3ƫͭ+qh%X%5wBT, cgd+c2{><6è{C؛DGp;WkݙrmmlFfkw~U^4ף(\>뻒eʶ,_!Ƒ(1OIaئzv 7y.8G°z&MWR8/>VH[J"=ih xS1 lUGa\/#-eزM' 2h`C@`kbݦ`JmֺkSHIޥ+0ڃ?zxME2:7 F@ϽF&d\Ku()'j˒/25%=@ =5t}خ2B3NqG'`*2Va ]j\Bb@P4e{Ԁ  "Vm-w&bz wcrC˯kHfӔg\nU!<2@DudAb4a(8,³XA2n!5`fI<Z1B%I/ dz2A1p0#/br?<5@LxRTnSt'fwh}-b@eRe%1/_Zyp3ƣxyڀE 3HyjDmȢږ ]}P|@Ӫ%K৊(ͨ)Ao!(=q]ā'PAjK˞+P.5NeM ?q?A&R'+yj(i\z 8-YJ u+&RGSP'[DEVb顛M(B*cѵ!BB*$_- !T3 {QR^!AjX]rTqo+[|QBߠ<Vhy@V(Ireb4[p`At+0򞋼LS'VLkLmĨMJ~i\1۵hv}l=b ߍĺE7BrC!,gE7& 7ISiܶ$?Ly,# 3E2b>[R󊝜a ٦{_=C}YZ.J4T郝N6 S~?2x;(QkGJl4mkdKD,c1plܽ1'Z֋QJMz]GrUL&hԃFʱY`%>V dُqIP6\gyKd8)}}h׫WL>T\*\W/$\t$ҍv8?RrWH|ҏ&lZ4-)s2Lg@9#!8ZL~*”EKυr0d@V+/=")f[hZA<69o‰|3:6mgvM68 Nza=VXVio3<ǴIh nt0$^2EnV$2(4}FgDk!*=bҘe:(cig,ʫ^sI'Fa>ج}|j'[κ i>лX 2.ߑe*| PR=u8;?lq~&Txd)<"rQXu}\7 TFMFNRLAq[pLx,>C[2V%jz,|$PoxωxE"Bׂ ,s=.,7?X@`\-r8!87N$,H;2B"[>ҩl# sC{/ /wb٪.LG!ok| ;j-RzAH!:UN]f``YٰF ֌R`G UDe0Q_#@*PEjENQ碤;2`}_;xdV,gb7&+b"c\pʖd6b~`M;_}VG)QD{['BL70XjΚ7yO]vnz{#$>Cy^hy@6)it .u.Hݑ\8լ7Qܠ+U] K+<l9C{qnuaH0e%cZ/^oHI5Rb͉(8F6hW}omͥgY\=NFCF⿩g&@8=.JDH)-Ni8؆KGT;Vm+NjSYǛ_QÂWoS> 35Mjo?ƪrq`0qkZ qHo2vB tخf%)lԲ&3D^ּ+`x+!m8'WxW--%<׊iJxH}%jE$\n%tͨg-bĜ,DGWʒӳ^+Sd঱dɡDzȶưv7`j7%pJAsF1B-+@-+F&A~ʥ[ TB:KPŨ]ʦ@l.b?(6ȬK. +}+j 3ގ oϮ%PO]5SVрȩ17Qěr`[TI=ff<}6Yzޘ o +n oT̺+GH6ju'qFƕb†D#y)W%\]9un$c)RA( 5jFVJAatj!<{tBơyʂKFfGӗ/Mǖ5b\9j٠n3pzJMn< 1u ![,@ョgۃi-`A2+ l-똅ɒT}]98'r`Pjw+ngou"ٸ?9qvtO &C(}X2b5Gٛzr8' JvgB+NE;,Y($ JT 5c|\h{#| Ly%űIo8tL0S&ؾ)!J|ltCٯmRRרTq= L3KoX' AlyFm>·xW,]B092W(LCDMoӾ>4mb2SrX UX`4v41[;G|ZH ݱ!Zk'$ٞ܏`BS,2Ql1(#9-1KH\obm(As;Oa<|Ҕ4 Q=(X~N`S˵jKi? ]ckqt* Aek'eSVFLH&MCb0u - ؐAS:T#ݰԅ=FXm;x:4u7ƓgYwI@rHZTG46l7,q$F8ya#O9 pzkהZ9Mb:b0,S%rɽ:΁@~$։wTcRζw"օE #o( bjHB)MUU#A/(B];Ep"' #BfZA~S~D{7ǴM$U7K}:yR$:)6y˱ D}9נOV &(O;Onls*Kp+yŕ 61P跞`%4ӥ_ ^ g_ty(: Im 1MLkj"ҵ`93?|2Kw~eSI>o2.hnbOwUzȼ Y֧sp㏌T׭)zXrD-/F/ohAsŁ.D{s~ 3NIu=| j=|3_x37[Z[ՎUxK3a.RBaWR}u?y nlR|GcJ;$JO1x«O_] |M&_l I蟱3څx P Q07|abGF7VO =#-b\394}Rs)ǿ&5[r-ariBZom6!ueA(wQR)?J7roF‚aWB%g>eE_"i5AI7 NJVb#[| eM9`NN .!)ALE\l5klv !$N|NR lҞ2 +e0T6r]j,+p]?1V,?q,W&rNh>ﵳ|zDASOޢAJL3DY *.f3Rq:ZS@8ʜf]Zj2pc~Q&a<”z?sj;f7ϤoѿK 7R's-5ݭ(!׷;N1K5CҴX'Y!@HKoб(d}y,Ox`aUC?`23aZ0Ked;fwrͪӗ$SKN=p~,Y`4BCS~p,aBU:Za+6"h)8]oV6TQqdٖr1?`"2@s9|Aơ߃z-;Ǻ ڴP3hWfn:ti0ĮR$hN̏{ࢵ+ e,'!HgC}m}|=ݯ@RN;lɅ{YQjw?Ik|(v3PTg:/>֧a$urчha!דMmx&J[=U&Vp~4#^.pA6Q ķ!IvŅV^XU6:[//͔ݼ\v)! \MDD1++Sᘱ~30<8O; \bJ[CгB/bM84+]iݏx!/E\>аMˉ]CGdć0b=U*d\ktcng2hzB$6"i(o;ڹs=sH8$zzacvP3mWFPlb}E 4D=w l^%* Nv:^IhNfO^%Lp)^ZCmo#*սkh-^[v\w,X.+?KcA9-3yqC(nӟ#mQˁI*X1{${Ə!P܂FFփ劉XZAsi,)G`mܵN?)cK9ِ{X h;@KP_kX X+,IIϦKH8ujNu dEY#Z dJEs><>_b'Zi}|بNyD;~9#Ê{ Bѭ}kzwTnW,8[܁2@״AKag9`t)-e{*@!ưUॿQޜ[H$7=W;C$@6AOl~E1~nK$8 sz6$hDZ7^˖F|s^;^~tLlKvY] T髛2?x4v pYT%WPΗ|e~ +O7|ϲ^3qE-_nY"+Iaa"hj Iyl 5KeV\Lڦ=v2l{SQ01$J#<'OB! IIkCFإ в6>L c΍NBMlOd90? {/YCwZp#xLAc1XDaq%+|Dٲ k 9{G{R"nI u;",5.GFmE}ņi7 B}u xD ]b(͟E&4o=>)ػ0ƏЗʡGc2"f[x]=X/MʷKPQ82FTj<6i3}>gW2[Opv~Jӂi5D=4^h_`ݑ^P+!r7.NeaPwC퐐٦c n)1[P\M9s4VnxDcDz6I)˟6'oT|&jtzYx- f0[dxIJtFP}FNk 쌵>ڶO.>!%ĵ~H0ؚ0!N{[ AMqaf<3o tI f'NQOmVgZ>8pݯ@\ }R-R̼W/ u޵cc.7,OYKʱR]%wL^Y m8r6? e6]iL>W{ (;r Φ3z\"/Z3UJ|zb%:< FE_zD@ 45gJ⑗9TS(#0izĀ1K4_$?*}>mPfL@QGx^2|rjdR-(/fASV๵w$g10R^f^DWpFs#.kRpVk.{Ps+ )\ǺihC6%&WXF%1 !ׂT.>5y?O NxYi!JGĸRc0=@t +MzH (;e_.طPV߯?}r11O*ߟP8%g]&e =cF6HŮ;q{*׻BSF_v=ysmA'XYozLwrwu57_$? _5)zefw(",O[ ~5Uw!bs ժFç79i8|"*"hWu߁.[corEs%].A2/(3`o ғqƳNI];1݆љya!13gWs 0ث,ˇ 7G ]{7_?\)g v;׬%&> "b <6Z= i/&fI4T )-ndA1*7AWg`RF KA CSmQ[$4F˷Fp](4Kg͇ .xξSR}bK:{GFPʣ(A x`ސy9;C>Z/5{82]G+#|F (9Nr&#[Ҧ ]NkDb77ja3d9X NF爕'v/k$|5ȱۿYh/M&?x>dƶKHgc_ Z|`s!HK񣊘+}$qf>!8f[s"`2Aס y2_.. ~x)^!8gwU e]ˣ A5i3(Hw7#`d4$ ؚl"ڐ5FR!̝q'#x1c܊CҖ v1( I{gh۰WS k5̕g- 6k/R{LML%rQzE:xM+̲oOA{r$]35UT;ٛCvGE!ZB4Aؼ+.EcãVWX F>įK_CBÓ 6^}X]ZZ[S=b7AQG n<}m,IyEK rܻ̀TLv{~c?UAG!1VV;Yb@rqQ^ے ]9=& S+ذj˴aVǃYfna'#bHy.LC}biO꼢N̛k0wH h8y`wuGK,kf0,y6ܽ1gU*y%^˝|&Y]WaM=k_Da%ٹ}R 5M{2@k$r?I_REw0PSM2R<1  sTp"&=oKZ,z*e185/ڏ=jM{pc&D~~3%x?XVfDC9<> %; v_%<$uLÃ^a]>Þm/&[`*!+ʺLϤ wXGȇ mj*}`-Qp )cn'@tE @i.arOt(-VzC(/|pTyJ?4'61N JnRLNp}OY[!mz"IeMsdLG,Z_I+'_GzXkCFع>z( y˧P$Hde"vdLj^J5tӿ"xQ\3~5Lf.=l|^4g'L=Թ;P W(Ϩ8}ӿ qN=K!z /mWLX i~ꮞӄmzk2?SbMk $<\bmpS~|WK~8 @qe ?/+Ms:}14:u;Kxe_=RN{xB}ꕥ~51zQX*8.u;U\oDr5#!m2/qF`e+[US |46ؼ;|i+em IhM7p[̀9qVEP?icOz'VޖbVkv܂Á GEnfa o m[b]KEAҕ[H./Zf;I<[)&0őmO]G<./Ђ^v GI ;4FBt9W͹"1z 7B.%I.ms CE௺U^x?.RIKB͊ g$nZXt%ȣPyDhQx9kW (s{F7*:R0CuAf`` !ء0}4+-DDӑ}/Ad91 NvYZ5e .;P)"Et&< [=SʤfQq w6Ct%24dxzIOu4SNTF,pD!k!׵ELxau"gt~,'66X((nR Iý9?, \S󔄔M9Ό&nl EdKi6,9YL f@s- FÆixո4ydyM>nJՀw|]I;2B`4rY'vNy .겻8JeA\YjAW|Vˑv [im=kh+["{_auoA7,ͪ3;3fSFem[U]l=UkI|wyhLsWrILml쁉JFo8aqٮ4ڴ@UCJ=ٛOVdWVў93Vt*wLa8%b_ XO->9eFN虱W}w7(1Zߥ,!iM?yGk4/f*Ps4Oߎv@9Թ6[f]5|8jƒLqf%{fAIMph^{44Z~ۓfS^ZIAd\X|k+nf܌e%d$OCJzGCBt_2Nc1߸&heXDuLlt93ڇ 0q8 /oCN}-a#psJh!KРx&~v3WQ{yCI7Cso-Qnn}%Ҳ"+0E}G+щv5d˙,H_F@wNB˰aHAwb'l%ɚҖy޷qE7dHcVUކ0KA9ov=O,m02Gp3hMy>]RҢ4"6 "Qz2$wmEҽy6Q%hrO% bvn[qr 4&D~2gUֱ]goRw`2극&qM0-brT+GQbb:HUL?r'vrkq mtp:Μ6-fY+N45._sݼDZV:5( [1]] < :<$= %ɍ"/r.iӄxBZsf iq "*f|ݮe4Uը-z:EqnE"=mn {?`S|Xf$\ZR5b[輲-gBpD)ÑYKR{!Hgy ZlNRoAsʐ4롰Z\H!%RR!$\O͆#}C~wSg~quw끙/X/o.ױxyaS`OQi6%7ڲL樑1"7sRBzd9E4w /cUY{ƪH6" ByҼ:/kO_V=?a㇌0w~A)lR͕|C r]^9Rv`NVSuyG 0.Ba?z Tk~ Fݼ!BH6^6w!rL,õ˅ VVp[Ȏ,t?F9G2~PöMy $f[Dzyol91/vdvW}D-nď~@HǤ0W _,Ub'@J/X?=E>~Qvv }$\J2aChQ:@&45~ǥ \Bs9T><.&vCi6(nPk )fV+V#/7dӶbv؅# -_wR,gv\rfab ,@L|("W;6-L/z.(QUa3 '1PÇt:WC 9(㽵%8CUd::x>i,l3,:کC_Wl#ݻW$e;PIPG~ .zr|+ynBvJ]ѓ)jc)YI4v+m Db!=IѮȼ΂./G>Ir&T:4Q03(Hܗ g&#|t[TR)ljO".S6o* ZXw qOQUw&5USNt+CG*QqʲZ,[ H`U{ZYB' o#7lWf\XEznX(sq1KxzԶzt ލT?q&?OcQ:ᇾ֩q]uF<.D;QK $zv-Pv^{!k<@Zp ]JlorE oPߕ4P1m^(Uߘ 4nL%R э|N^|}ECy2 =:xhY/k560;QOϭي` YS@_^^l(n08w9ήBaQȡLhޠj0kW{.fʬֲ($O^ tVCRHH)[>8Ų PG=`ӵ.ҋÝ.*L;UvB. 1-Ǽ'B ܅4 TU'HO5XN[]WtkOg_< XХo1::wd$ %YHJ k&d\mp"3X \"mBW2ĝIFySd4 -Fr;]xquhB;|ug٘lQrb$|[ &9JqX#~LB 5 B P ^2+r5>hYH*y{?D΄١XxWI%?M YEGM H9:Q>F Q~&A™ ^3锖jBG;ڨ >O _Y#Edi&uL< \d\7hxdc=}$;@Щ:woxt4r2=qNF4AzgٜӢm]+`KʓUy6K[Z: ԯ3t\KGFDݹ}2:$f@*_s[ j*6%z1R#Y^a$l|\ ;-{|7< 9CJ+#iQ>ic͹P%k DCRY ULlS=g6?pq~քW;T-T}؇Uy<5o?\V'# {^rQn ]?HYx#lۣ 4@7e(7jdVF[l\ɠ?o@-'3{q Kuz. |_ߞ9@|՛UIv8D2-ʰ3YmO VS=C'G_c zM]\vke5G7C%@tt$+-}8'%>zdGm&A{Gg_=d=Qz\6y=G􋾪^I7o cxEI" 'RI{!+{ȡN97 m=7My˜Ś>{Iboll%Um&տ,)d:/OcDۻH*չ w7p$`.94A%n;(h }_:ٱ1ю,W֨{Yȓ#'nE@HB IOA?$({/wvImybCu'߉v&変HJj\촽4zKǢvbYbo7S4 6" % VP6JhW֡}Gj)*k6~eΠYvcڔ2Zmk ;~^@nRHΎ/34KøqS6i|Zd|i9|ȕ{Q,=}ҪI#֨m̮N29ߤ5o N_:9uD%#ZPmWNFgs! {:Zhb7{gV \|2Ī#s'ERt# ;^hW1HZu@cnعt vF9ij^Jv#v:ZdYNU\yV>X?Wkw51!N꺫}ڂ7/cp =:> ;~)_%@M2aĢ$%̋}@]4 QZ{dsF w8NRx\LH@SZ݋ Y/= xq4Y,m{/kn. F6υE0 i6Q7pCt\Ǩbd]<]~/#g)劊M̜)_foD*5A'[Ͳx"b?|Y*Y ?0EN تǴ4بaaؙ ! _?EutBHr*gG`uWzÑҢC9\~XD Q+D^yaޯ'9>>N@g+p+J|4}Aϗ\mbo-U[*i/ :F!ww(+}'?T]0郞د!U$n 0bՓ\ϛ3[U+7;\U[X /S[D#0y4dď\{2e``~"G@*Ay4H :4 G.QKIḼHlERs\m1((dX G*֌JWL|`L'BnNOw0u^_Qv6U"aײg<AJu[$g(a_r`!3ʞ P_JN#߳[j^@ TȸޮW²0n}ƇLX]T;Nv0"ȯ05^z!p OXκ|&ʪhXt pv`B EqՏSwQH.p^=˰ [/֮{6{8ZGET \haV0wFW%-eS4M=.=xA*q_\xvSMui V_jHwn2r=܌Q _]^RܫmgeC'_NNb9kwtpje,m <k|G}D$ޔh( YLϡ.wc]KAݒG]֑ Y6=odȁSvU>)6Pǀ`4ލٶOҸ@6igy6&xɂzHG0?S|VYƬ26Ҷ~]:`$`[jaK:+2٧gLs%:y}Id焵c{N#JKcXM]yڽ$Obx pv+tgH\mGӉl8'@Bs[_q6Acr{!M݊H"BGzㅱﴬfv(  k{w.x(vKWkWcR!xJzY|GoYzVBlP(ryI5FHfP*M{.]Q2z8Yn- or8-T!4JQ'Yn ixN ^Қ+w`X_ $"*!AB趢b#V} Ѹ#[$XsqeWL 1/LR,>QX<^nrF_Uncea0< ( ߏiٴF Lefy _D(?(j -L\20$u>QKeRi u̷d 誷|9}{sa}ގF- %nuKCE 8&]zĜT凉&!w5O:(.vZ҄@ ϰ|k 5$je^T `1rOv5=$̊Û<p^UOR{0'SX?*4Uql|ˆt@FپEvDDSa"a seƚYlmij-ꉇm= l\mfUQdLp7[֮g+[{ BDZ^0\Ckxg*lBOYS6l=LOӁ>Ň-*PƾX8& uƝMY,eTtY; S)jX\iwFwotiW iKad'ydEiVBO i.l#KSYyU._&aww",S֩{\}24,$[{)믻2Rok7}; b7OEE[42Ѵ$f^EB3VWE#^65p[g&(Ak~Bk#63 ޡ3bzƷfm6[/t!FEM $fwvJBP/$!] WxJmmxi"<~Ի+|tH o ŝ(L`[Q??Moas2̛Y@*#3#Ma` \aP65X/S%"3#S(M%(Bo`8ahWEdP fYӣ6mB2ceUS!B.3k2V~xc^iTIb3S5͉eOD])Aiud}ε 3Ǔv&iZYDZ RPLh#.v5-!RFRAiđ]Z&s-z@;4)@02a9J=EYY/wFxPiZ^#,9RhST%HX¹+OL$,!7](/'W$ElZ/ aǀv2W-> +e"ɩ%{o[}dwL BRqHQV$84.aw^MaLTr'\05.6~mP&ֆ7h-'3ğ R"^Xg, N3MlM9 ɞV>PB}i* .kc);Oёksow_7V a h/1Ayr_F*8Ea<3l vm42Wa>YoލcAIg$n}W !OIJnq.! IYv#+eqi64_7XAha#w0N蛽T-lz?M]7a T_xܽ-K!SB;̭=p ~ټD\+g9ծ$GNt#cvm]Xotg)cEG!(+7&v`k ̯9Aovnkqyۏy&N@c/-..脳%7cm64r}ܾV޴=>ܲ,VbtƂ'F&+V0I%q{h FvW˲;;<]mJK @%]RWWwW~m 0gO|Nk ,$auPY,;\O"2\{}Sh]?q&lƣHl^&`oxQݡU͘1H8|3]D~%(6{I:ku '盀܍| fBthS a ,~?fKuL]EF6Q6;.ZAI =' JT$TS&B"tuRI+BȗFO;u3/z>VcİZ"^elvIuynwb6SQJol=,/Se:@$8e'*dR\fmI¦V_O5Rkޓ'*  Nfikc^Eb8u=ΖdXb"m{e]3lG, Ͷ)C9}GpӲ'!&:0gX)| M+0^IAuQ*afRBVA~0n1n"-|^;NPl8H2?.P3Q,:CkТveta=WxH0o`c <9 n}3fivV9XNUx:̸Y\ FelF׺ij&` ֐{D㛺6 tyon2*0}pg|QTM?j-Flj]Q_PmkU\a:%^XC%FMfFj8MuCE,>Ʀ ƋZa hvfjP1:(}}}- .nqoȡpEldq5l5 ]PE};p;yzgzFW~r `|Od HlaW83<7&0\]c-^_(.̘ , w6 ˄UĂMTǽt<Ռl6VI 6ȜT8nnf*/6̿KB-QYMiPjq jc b͞k+`j+?.ylD\h^b9E p!fCQͥ(GS|7:J3|Qɒh ,a.tlvqa:s^Q@r[=I^Ge(QaK`)7;p ۶uull:y6M%+T>>鄂Qzq@+59qgCJ|S;T"ō!ˮ=X mcA7-'zbMy p([~U 2W^\#n6kRGltbJ7./(9F XypwY@Gg:Xa/G,٣H32{:vn38C+Pҗ:g>.I @_n}8T%rqh#Z KJ[̖qw2_&2UH5[dQR*.Gޣޔk6U3e =VZ9rhh.bM4|lZqSqTrNۿ 9a]EÌ}WkL;|'ϫ&}kt;RwHDuQïRs}Q0RO0G@AZRK5[.j9ݎ@̮ugkֽh-[)ZWD} 8)lW)Cy/ГEx~)kND,,C;vJѨ@#C7]pŰ !)JVZ}ypOuiU=tmExq- J?+G;0Ʒ^"QÝXFUv(%ԁ.+ PTs@ ̥*fi.|~s4g $^FyN\Qjwk냂1Ts?T$n&Ns:LuIsCã󦜻L;ю V}GEUc/G.]uS nbáWa7aֲ.A gYDВXx\I+c9tdbsQ<Ɔ_Xc34b2+GM~{}jpYi餓ͭTK2F>b1jre4 gD8,qd4Xlr_8\r#![xrFA,A+4BE ~^-z nvPY'?l">WS,t=;S JsJۃ4l䆯y96kOui-*Y"s68E1;V_Ng/VRvf''nPOUr"g0Nq#'T8ɡwm70hRx 6U= \E8RY꽪-п-ۜ0D ӠFe|H+ KBp Z7x bAoڡAv/ϝ'X'ZJX~ޫ$r'}_OV DV|9 󽆹 {A$E KA~ E8oTu]KruS g<=D8W<~NͶHw Ǯ:i"i?ڽà` 5;pJ=e:gtBsBVK7g45aXIRG]}vxg( % 0k枤 dN a(M&^-@75!ٴ[`&юַPw֔s[i>ZZK*q@cc/ *({JwTvt3D;~nCݾ9b>TEv7EoՄ'){rӛ! ^OEMZYhE6->vq~YTZa!};{FAwǑ/RkZ~ՖN/TkN,Xݙ3s2LA&OꎧAWi_1,>!O/G$ O}o/iRaokVNED02Tȭdi>"{y;XjMWdUDJ)^JrKǾCj2/}oFYV$`Ԉ8M ,Hxau/o-R{F?~4'Mh R[kfD#h10BN &`<{d~D.Nfag4ܙ[ݭKI `1*θX֫n)~q@)G0(϶[v)VπЃՎQ$P -X Q iwQm,Z`iL@8=Fym4yk7L.!D?vs+9CZ3EIB}״,6꾙ECP") 4 N9G!xQ̽8F[N,ťKbFE迁P@㏷ Ty f4T_Zz\ـ0{"ӚҳN֛5#+Է8~YR o \7^%0HG)(a#F3[_ .aeL'(Dbu ഡrOOe $8nm(]F{Lrtfa0k@ݤpK WG6 @Cw*d/m}QcvEcС-ׁ|Q;{ρ%˽TJ{MH|Y"j#{ J`r"11ևsA̕^*.,ED lZC!nփ 92pAlϟ& !kZ VH#MX%@슓hK 턓pAlxG$p9R:]1[4_iՒ gƫ/g߅Æ՗# s[ RY gVd1BcxHmK絖lj~wiKw]Kb=;蒍x`/[_ӇWZO@ - va#'\⟨ s"@0GXGXۂ>hKG5BΨІXNrk"JkgY #=i/{/W5оr,U(3x  9A705v}% h*ȔDAƀFݘtu*uAfrBĆS5(37'c˺h]ޜmQ&w3j?qyW 'ʨI ?pzJzM%P*U6{ g=jC짍. @FA~Ə?c>G聁~V6<<$8b#aY&Jtը2ߩG;B;© ANю;Zwj#F Ú`oylu gs)«/~)%PI#CQ}U/&VkS z!(aGj,_T#*R)5ͣ9SA/z_u- /pdna>-_:Qb`kH"9eؾc]bM\bEwͱzJj'ݧwеuJp3ux il2L LJUT?b ?!aLr؂#`xr]Q˙}5lMSSR: Uj8Z/@@\]sȍ[DGԷ,^,ʄ8 x,'h*l`L*+~>]vS_eރj{Z}.rأ$I)}(ܕVjgj )ߢpL~;ryJB7F&G046 O"`Hjh!N1``` `]Sxu66گc㎕w RG{1].N#_Y]r ?;z'.ܹ;`1_t]z2QT/k8Bvh!+6ҕր8%s12J79ӏbdz55Z |;Q JԞcW9mvY0!*/W xmұ"bS!_rNxw=?0W$ՙW R[Qoͫ6f~e<_Bi]RJw f?r6uLet`gNhBA,BY+:^C4R]U^p(q+W$yKuN =YcޢARt*C!uA XRe6=DbבsfcxPE㘦(h-`$Fjj;QN`[b|73;sӊ$;t󏧌a-nܜ/!U aUq&:/hEI^9\(ցºEճ] 2x4lGk`a4SWuVˏDBG+ޑK,&mIIjP.n g Z۹J\؏azHF`]bĦl:1˒.OQ[$:m0$sS;Oǽ˱$~rES"YRY#XB.M? k̗Nַ ͷ&y!O/UdvUػD_аRvb ka BXy$'%9F3[8.ߚ']6I3e߾MVk-`ޱE_KI ʣ` MުRƜICI26Z`_{>7K= ʝ|<4{pm.i}?A)7#c} NiM*wj(?2ѻT"RWkɦVxa&">L]׊oyF {J^Uט{N=wH g@Ŋ[S2:uHO'~rU W:=/:rǁuQ{R稪'гAXm[׳DR]Jg|R{}.Wƺ&Zu/!Ѐ3nfz2tAQ[,)OVS6&g 8g65n;2[xXU Ŷ错GgVE1)J09~RwFW0LoiA"JԢƆ7:+yޙ(gݨhVuVN;(ZTOHOkTYWjo-#e 5结%k=~uGP7ޔ4M4?w>ѡaN pDWaH? -=7/qQ{"X+*g/<_YVSK4ӿ<)w˦jcۯҰ=С$rkf.eCdhZd,3PѨW+;s{/[Fpi&?O?شӐ*Kif~f^cϪԍׄxuxż^aש&uU},Xqk +č-m.r}@]Z3_އqӂ LmHVPEXkm%rMzp)0[B[  Gn*_07'1ɕܼKTC~~N}ŽxE;c^͗3A`CP7 .G @\+EwAIv5 2 4 f'N !y|!^eOǛ -3%dCZm}VqFhAMahEZnnH Vm]|E, yw.LIF(t^u.3A \c.x+^%FjAjIi6ұY@% Ac`bV/kSJ?f };=l3 Sh~ T*cv_k BsqGK4jzK3z+қT&Lja15^ 4YBIBYD$)EuP$iw))A]+9B"PL&qI]߃j!bGS/2P恟աRmZsd&ĒЮt |H{tC1Y?C/tj_;l>y>1j#VWwKLB@Es{"]k_*E'IAƛyL@S?Y#t857"3H~aZ|xt 'CJ NX.UWv0vdOʹ `Jfo_^0!hQ'b[]Y6 21BurmX@MJ 2xH1i/Ram,npYt UFAMAe$Xݻ,үUVÌ+&v~vj {NyZ`IwI:xJ9MSr}8LZ[Zv܈@߀P mR%ըÄH~8Ͱ@  &J^3ȏ eߟO}U&]riG\/b] gSUSqB bȂ|'aC\C8ԮtP=E85WN+l46BLGO*Xh]=;2Q- +l}sA=\:FX8;$8G)>y=Ƿ=RT`e~/4YSˏiXF5@x>'i~̙~YP򺊭idϕo X{FpMǧ4yK'wF L!QRte̳/oc d!}bvt `~Sv"״&`٬E]i[t|-ZC;G׉?Î;q~1jO|yJ1U`3VɅrt'q1a Jk*S9_$óμˍ\.LǼ.3^bX2q%pgm00gCRj#Kޅ|w:@N6LGyلHeunWZVu̷2;NgQ jKQHwYK܄$W+mvm,`'G" DrՉ%͘ǹ#**a;mv2VM/ qHa/}ZǔXX0z\RR KY/!];lV9:TZ{ p pe8_eu7AAk9rhU?brÍOAijB}lBckHAX30W*UP)ش6Y N6PRfR-Z)KNs펝?)cH3b (q)^wC[voQg~݅g +# ⫯x>4ln},LOI0wbDvXurPHk͓.qҐQ4}A\Vw1 ߵ r 6wc}\y ˝v5\;di,*#Zkz64vSf'$ SMc30|C e)BEY[X(0ySlS>6IR@s|YqMy4TD`6yX6L$ 6kS s4t<~yyNAy~rHT\z_tDٽBxUKHr`W#8Cnn&78Pߗj%v#C,(b*L)8HT:SO $|v24QdHt )NٷEӠ^ tZYVJyq␊"Uɚvۛ1k?Xʻ]Vg3imefJ7$q+r|rJk^S(mOUf(gR㦥tmא3MKs}xuzlwƓemg_bT)~Ve١,[0%-z78zCW{NI,F#=DZQ5 }ҕ^@ NQP+ a3{>J[H4ǤjdkO1p 57tU؜MASpWo o 'PW&dû8庿Zw‎cϕt8&'!֜aHBm3QzC&`!. #` ޘzJs7-|em?C?u{ }&`.URy.sI?>ц|6>BXjD, {\|고hؔ.y/p5XϸrZR5vbKK!%u7Gzx oꀕ£XaCb;#_O:4NKR4ж⌁e]d 9H&ʆǯi̓ܞ̻vɂPN{L^,ijd^ȟ )W&0'y@dr72$"ߏelHl0AM)M֯"D!llfG^3V_/bct+li}m,x ww)`u y|D2`~ waMܰA*~ž~ To &_/Z֙߉nNT$ AD׽hۙf \q܃&Ve*o8m9߱K'nS*ǹ`aB_ ZpC* PD)ɣ΁[HO|C~j$wȊ{(<*fHgC1@)T4E npaE~\(,VS r-,2:%5t:u%f% fᾮ@ L|7Y |!bv37>Ɉїf &r`Ŕ劣bQŝ 0CO% B&^u]B9hi+nB[yc'rjBI@KU?taM0:{E7ktB>QkfG<Kq;w>MhQ x|snRPǫh2<`iZ8,.8f֥Hƈ$;cM\ߔ##O:#3Auh8}v^Vut@IW`GӚу͹=i$xRP\V]x_ ,岓w9İT%KIkx^L7ߪFύIѰ[HT([x䖳.R~Dѯۘzqmf0gzT JwŐyK*>`v& *Vq}^JtY8mB7w P"VjoޛCoÖy{8(=`SJ]p{+z&F{[P^j[$¶Uq ɾeFĠ<}C`Vzb=rb~2~ySy(l;$_|j#uZ<Q忚d$X4<\G~)~mxjj[GxM]e}(ٸ7V.}YʨX(;3& ~kԹi3`(u;O VͣV3׬G?2{&[r͵FeNTDt I?,LBj!3sY_\ @h؊K:WRYk9l4>"oU/̟T==Ҋ BkFH 2~kǡT+G(Վ۶yofBRNM2Xa|z `#X{J=>ĴI*) 7I)O ge[ؔh+xln\1?#։Ua0ڐ)6E `»9}r=/3  ' VN'>xe-KoSGU+g(40&QQn!jXsNJ4 YUɢ/ǦM l& ʮmtԩ"D.Re!`2_R3ܡ6\$ӪKga*G B0+;{[lIi,-6nD7p/0ᠥsZ87RP6\32J𤯄cLfz=~9q~>/J#`[w|J2lx`kX#ڂw{BweHXkS@1>8iYKc *PV$OZVZשf}snl'Q eVFxNh–,dO6Q#BzJvwYHBL-'"kCy1*%棒}1!}KғYu0JM:eQ-t$My2;9-7]pAi}&өݫn }zJ>ԘR3.RoTS+:"˾>d1G_srQAҍG~iT0Ӑ1+~;(U s =--j3D Ǒa!ˠi:CAO:`0U55 i]pn"E\`ݪr3Ѡ7,hT?JN l@̐>m H.RL3gPM_+16_g] |KtSQGDs^hR\uWBcy*c^"O3jJBZn&meKɇE(e49, $JP3f)wrZWQN6ո 9sY4F_wm(K&2]$8|1J?PM-Y"!3 'T)ɪ_:N9`gp@$,eU#O7!ʉKgnT:<7Ӭ]W! AhV@dF PYHE: b3)V3T$,+܍1rf}Qk΀Qb*\L!*;һ JG@LLٱ9i`"0<>Rt='Y~͞i[5 !]@N3)MA5Wj+=iTx6E]TP ЙyTmQDQNW[xsDA2tNIAi)LOE%B,$ɿ/0fq ߪqOe^㸐(3~40RId$LMT!9yϘXq-"uko1\)D~JyL,t֟ښ{DЕxVj5qmB弐j+ad71p?ɼpKFْ*;Bن6v]1 Z"{Kn t]U٫XIFTg8~$7Ĭ(hԉ׷P]J%GyaF>_Q6<PǬkauwƒg7@{7gIg>yHƱZ2s"nAq!O x[eB wt83}8G$Ad 0ؤi HMd΄=S5qwsI2_OUZ'Cz hX%zSAp㖶} gH3ӨOeq_bj9̴=3D#>:`h=FOri'6S@4I\3bls; ѓ&mUT "hW̭vٵGe~h2NmW al"ݱES:=e.S z=/4/z<ң lyl6QЎ~ʪ j,3C~OUF*%09셖-@Hs,6c\ae hEFL2d1n3ơc=zc#M] r=>>6/Y5Ib_zU=/a2Js 7m6~M%gf @>mg^9.5=ʗ؊JWaGv|347) 5[&%#pC0M`*8έcH͒knĎ9h߭NnjGal;;156aa&٪d5,*mz2P J`lTg'oR"D-Ճ߬kW&| g6^WMh$Ì'amF)W N[sPlj^_ ~º!JRa.\r֊ XitkYsbu9'e迩s7SCޣ0¶/@RNUyv;H@j#SOWYU(c~|opo7B :ܯ7inEJ9jTxcfUK:4=BvC3E1;@[ء`_s>x/ceѸ_%IvtVL[@U+fV&wpe kr?: *!ߡ[a< TBb aivޥwA91P ~5sMI Uֳ.Us%JVէnQJtvݕ ~~h1JJēf`uE vhy >MF(/LnEwE$-e,_ŲήvΨ ޶AUS2Hż)0K=yg=QA3&64"99wmn1]EEeĉX]Z^&! 'ܽ4v83Ҳ^.z^)3l]b8f0QEkq*.8Oa8YpyՅ&OG$pb4KP ~G&ul0rj (eNh)]3S*J{t 9=ǯcsoK3O7"ݶOCu >\gH*%cYǹ)A3'H柟Õ 6\f s!ٲ6^z(9d6Yʯ9tGo{VOx.SC*hޒwOVo,ݵҚw-$pXu5tt {K+P G(yg=V,&^Hӆ4 4jg:GA!zdq^!E}CS&%eFًZ i\Y~Q KA];^En=b%MS-Tj>TWeT>u03lGTOAX,6kϙTCHM>V&ZS2&Ԙ^+WōsC Esԯ{w7T wfP -*p9=_'Z*g;jD^#UkjUmn`wۊuMio7b&{kͅ9>2kt>8SйF Ӱ\+(ys%D?躽$_2wM#Q[`bȩub]jbQ- 96tkb접=W5qx_4xMc ta?Cڌ.u+:TCG@@(!wY9P@:6*ٗ!T m-|"G$E=Uuz + G9Y:әai-@>3VVڪհ0pjo/OKDh4+I@¬YoR?b̞EYx[ 5#WA;EvGO؎/߷K_UTP:7VO8FʃE9>ao;@2Az%iB‹rfwu$d^uFWۃ:9nGMoŬlv/ůL? Qu^yįRv\疝Tx6܍uctx]n`QlX 1>nd!w'o\@c*Yq4lCĄ^rrNʹJw}R >VE9VL;=Aq͒s&tgp*#+0~It׏!Aq'%oַNXv5bxa e v m0A*=Ո'&p-cAL% h kEm~UZ.!YɬT"xG`zo<8$/H,2@):ixcHAb2H|E#,&B9V%HcǕÈ$_ P|zJO Y/06*w%Լ<%x𳏫ß7-(Hbj5b֍5w=/24Pg%vsNk\XCzxC&rYun.S"UVib'ZAT}ש].Bx4.v~_4tHV"xF(3=|uV*~|j("K~=@AE.UpM{Hx+bj$'0x91YEG^ô_(lMId#t]Y_X//upPnpIZ?̥aF|! `h*ZkIk{1mזWC!JV)U'z$8SbF9Ż-4 = fI{ _ . utr~+4oEFk%Qzf|1Ǻ"$d `a'.b7#a乤nqϗxtӸXH. E&R9XyWa-J'LDeW#1c%ry⌊}V'Q*D]2jc܍w<ùò7R$EB|^Lv^Pb$wߍ!גB0U6Vm8{I+ˀdo1xKMsfgJ@`Yygndh3 {r)?iJ9;8ȩxl~+&wϮܽ"YOt@;Bu#8,7mnɞҸ88'Af#q^79.͕+ n!i[ UX"pױ`gF#RaNc0sYa B1ucW{dgۍ/C-y.i奦SemC*"QOga)4#aV#oǫ;[c0ҴKcCܷY#RДFߊ?!9dM*@Z^$9؝Jy #b10f#+Ǎ -S'ߥo*}fskzhd 1~k,:n%Յ9|\xf33?l]ޡv~ȵ<k/fٗ)Fr*\ӥ4:^bJU8c~^jѕN 17y0AL=NqSi7S OM.H( ڱ!_ɎנMoFQl.e*W'5>vhMOzKQaī-k<OD]A0y:u#31rBa*{r,2AP/*vH|fQa uPI #+ÃF17aB5㠶RZ74Ì/+L)  UXfB6@H:,5]󅥪h y.%Xg-ip\4>{LK*B_߽''yx1b}x'ݵ:ПӵUʠ7"-mpblئ(ʦV|-vWA3hPܠ$i$HA?@"F9-.n+3 ghGf__!1)@VVNq\傹dǃQ3|"Ľd`SC`0R?L$O^YC!wYnِI}ⲫ"9DPH4 Q_9*pOqhv߲n;w2ɼ=Hs20[SJ1§K_g>2 <'Q6n\sCA4Y"ۦw?nJrPLY/j$ uaYqkWd_ O%#O{wԁfyT(xDk-6o<6N1m3~O\6 <@K\j~YLW/sJ$5='߳Q&*;Yb|'A`dQh+G`[k%נּPx[R,BC9CA?て7`~M[65meTl+nӠHP_[21!eO2g8ӁG4. AemB18C=f?waFA@b 6|?.[2kF3H7 N`Xg+w:֧/ṑ] s_Α2`X[yv).h9(u:wݔjs {S5''a0&;.*g(AʝRyE[C%5PoVE)fBHk*4)oI蛖HC 1uߋem%!|0UZW"cC E72Srmܴeȕ4H,i,1^}G,z7Q.$e>*dKԹ*~3 ^bAj]";VPj@6sk{Ս R_z74 z SlxKSm7"!oVa׭ )\DTP܇U]QxRb6!\Q-E'y&A7~&#;[tl~d?"p9 H0bBsPO dك<v`Q~~um(F`;A4ݼMݰVυ4o9fQ1@ff~-{Y:0"o3?-\U?~ 9Eg&JtUBs}D!#+%!d+t~g{ ~TLu%HeRXVeWဍ2b=k]z3^uŕ.v`zEdADЭ{ 0N+Ƃu|\!He$m zBI]wb¦ a^ܛ Q0_ңx4Ƨ]z/K`"uiZJ_+:Q!IEnS &GF!*<_&i*p՝fAH\ң~pSD^%B]eaYcWUNc/‹5Ɓ-$Wf\ ?1K0[ʯ9~ d&`CM(țbiKWP=)b*r_½`vSj3HnXa l'S0OUa<‰ňRKF́7`sO߬ͺ">rq?=:atq+}{03I}iڪ!G_s˘U$giH߇n>)X/9Lx8>0u~})zEAEͫ'"`l+!y$!L…{/!#m֨XF0ƍ. V*GCW$ݟm<]یT~7kxvjn[-f B劒x*s%8pT3"EKM*w%YU Zv}@:pIkPccG*re.)B%Wz\·t$nfvlqŏ^wH~TNR 9hv&wypA, K_Nɗ}*Ri{N s4QZǍ,~_@.-378 y4&و9+/ \6ɛYf~;=5&R2b'w^߀}z[ tٔo֩E(ˆ:g&KxBjX\ Rj.TnKk!] '$ \ bSA[RR( Ⱦ|پ=̎5_=>Y&9!9b-p;gԭW٨"*{O~ @.h>3Z^& ?E)b"=&G= Ux eZ>2FU gzh7Ekq3>?#%oKFSڥvR W)澰3 # ϗ뮽Ъ(6}0<EcvK$߿aYmk>T PUh}%7L ?WN)R$+=ׯk0_9Nw4)/w(vTol5Qw+BAtf +,EtІ Bg o/ir#"zQ$ۛH}xS*<| .gv]ch?^Tdl",K(HCbP/Vܠ󮻁A_|dO1& +M@)7(LYgb}pUP:1󶀯Ҡo kXZ,;d2j7U>[pL-̞DMPƪuY0¹'lO֘ u{ňa~-)h1#hzϝg۲9},#wg֪J%>naMF+^.d9g-TtYQfo._{¥\#f}u *』Z_ܣ%L2 3*+b¦޹z[7ށD!AQVHnhlcnxyIbьv7)$;a@QD~,>Π_:﷬$Y‡w*p-w j +]6'ҙbdO**\m%g&7l?g.5$U 3v<tS t^'͚?R?2bk4d[E'tr'.Þ=؉NjRj$Bd,k%B']̒4 Yҙ 0rE0dEsd [Cy6؛!žxEɑb,lB 5?Y - I1h?#=N2ѐV@ P{ L@t'Y|G񠶌_SC87<A,6B O̅ۑg]0RJ"G|h`Mn9/FU-Te;q=ݨR+/f0yJh~P *k9a.>Ơḟ/gKcaMv(ke+¸BbG{n2:򝘎ݩk211evu$?p ׭|WNu`7 fL=Uhx@#FS^+( Ia.QPьI= BXkl׿ץ KgoI#0pM̎|D!+*l0 N><Pi]>D((*Th$"ݷ3Q axϖ͌ﯧu,Í>M7&5)8ݙ߰O/Rn|ϕ+fCTK2aEuaX>6&?++*LShřALiAyG6٧=ND?o4n9_$ bʹHFTѨU&cqPc.H71Ggo#x`7 `OR$2rns]!!6#VaDbe eיClI+Y|6; Mšc6xWDBT~1HɄ?T{B[٠n<D |ˌ:Ê=D;%c.A"r@q+f GbJF.&1Lng"$=5",O1Gm'[aKe R4Y2?P Z]*֘ \' V&<},@]TYchW%q#Ro( }@&6{E V(K ~y NrPA.vbݰݲ3-Mn% uPħ>VA`F>?ýr"'*Rz[?T 1J4~ߒL Wkf9Z[e@n5G YrV@X59˾|UёVj `v%-rnꄸ[V5ұc0yLD';fn _7 ̾y_uԆ[{ÐQ.wiY!i$ O hoAfj ND^3 I"޻UӰ;}Y%yw YB ק`C!QxƪF|#p2 7Ny^NJ.{w4ݣoɩW4fJ.#4pS8bR!kJE#c)&l^jDKV1C\0 0 YZEpi/data/gmortDK.rda0000644000175100001440000003406412531361106013762 0ustar hornikusers7zXZi"6!X&7])TW"nRʟXaqjnj-&j=%aq=Xe#dʜW woxu2 Uؠc'6,:Ck83d0f.g[IW0Gb\M uJs{c锼p-K31s݂YP`f(d9~>4?&Y70bn2J B}+ EQߨݖi#8o̅%7yQ[qLXXMa\vsO#y&V3+w'~'#wkdC71B,W(e0 dWIʿA)ggLKϸ 6l{@V OϜy=C"dwxs})H4 ,0"o|w'ײgA%Z-a{jfcu/rM A>enjH7sAu/zp .eyc÷|m6Qe೓ZQցmڞ"us'KsQ 4_'<^$ʗlj]㍽r<#0n wŠh>d>Ld@E_6x뽂H2'h5$@ u.Eu;?ee 6C >rtJT#ui1-^Ԟ裯2J![sžܺ[c%׬׺ETlnfٵzASl!Ͷa,T}d@;hqT]7qk^o 6d= M/5&bѭP+.Lg6})< zQ$vď]> ` z# 'oaɥKAɤ.˔:mQ0}T.V}пr ҋuZ~XZ!h*S\Y;f=}`N/Ւp ]JXvy@z/í:$ָ݀B$g | ?j?ÜfIsk1׊Z6'FF=A$>ƕ" T1 *3<+\]5չ #[+'W0bsBdp p4)u"\҉9y?Ȱ+ȠU=yW ^,IZ< Q\rQbG7[2~n1ַxaf{vUH_A5=BQ1D#c~EOzQE^y{}0T0z|*L! wLAٵץ廷fɱ2m~XHM$L3FSmf>Ձw@BI6!A$4k7ԢBf< t\g? feLG(u#4"x*vx5c0䊢d!MĮUJ]OPVڲQ"aΤ\[Zec:iT}6B زq|ZkqTO7>fK\ֵ{bPLV&U%z@41 IH_"% 𙫺 O"rC,^D&ۏR+DLJp)A_Dmm>\taJ{:30~$$(dn_b޸9 2|;ȟSVFlg%y|{%(^JtT:wGmTmx(;`~^ PF~f~H|3qiN*OGP kjY[Z'+ dG!M].>6 qP !rc}s̆[z>;Act YؚM`>"}j =قJ"8DbjQr!]2+apqଷw*K#/U"u]dB% Yj,VbִJZoZ -ȟK.\uwHvGu2%Y j L>Twբ:a]5M­ZpiP( @qQ8 FOGX/ަgP])z3x_:kF+<멘喇o]+|f׈%s+_A>~yEFGmQZ <PzÂ*eGAi Ͷy'I5 Wt$))ކo-z4Z1=biV*v&1ޓGB }O,%RC0go4-Dd.K:IM fke&4V>CO1w b7c5eD*ٗNfjg> ]pR껾1 bR{9a@0OA F0U_{IE5 62)6Za|>^Hiqxt4,bKOtA/" Zl腋3٭ٷV9\B;T_L,c*ۙ_sutf:q_G=`k #e %BB٦+ʍ`z|EM9fMT:*y=:~70+&F["T(P#1[+wy6º{VqHK%bq }#`F9<%I"!~\ y{+$^뭯opUDK,jSD @HoKq̆Oe56$}'DA݋~r2>fF'sv ų;ke/3Ȭ6 $`Nƹ;֪5É$2[~ пV.^?Ą.LHD U̘cmqi@ g6:.S`kG ujgւ^7rʝC`17|GnQbFcZ'`GHU%_u(S@#C0/HPN 6y@|uX5n Йαl\G Qp;_x ~@ eaP$N`8핇%WVbq8޲;n] # JUYVsYDu)I;:J * J@K CMK: '9ߚ9\Rb8%u|ˑqYbuE?Ӂ֦J \$3TA{?8enk P6Nr!:ZsZ*iVM)Pdj0h(z/\4@veTJxݏ.֑E>~Sh k ÿ3^T#jTw9J<'!VC{SsWFGi۠9sFU3^kS[ :H׉Ljм){ڽ0jy &埄?Lo:UgTړzUh"Z gG/S5D5;fXj|Q]Ђf4d76՜]fɦ&VwrUHgHSpZ ^3֎ӊ:G3T3-Mmq`s%q=Z[澦Ep 6B!r!融7l[aIQƯ)@fvtpD'Jx&;pkl'Si,)0 R24:Q1 Ɲ9e5/_~SkMn*tg kym1⸺q8=^S*mTi!#H㴾OؤlT〬cI7nqv}wrmiٲi)^ƴ J=1 ,ٷTRAtZ" $=`ŭ{My$c9ݖVҁ#h,qT̤>\wyf?ghċp WSݔ](Zh܌@Ň\;w̜J}˴Vh}7\r 6f狗լ^eAN0. gfJ0:;MH"EVyqG[nhʹV׊7( w|VU6k4K*[& r>xdsQ?0Jܝ?#폲*wJidfk* (Y?o`I9jq,`BP)]ibb]ލ_E9bmɾܼQ AӘY8GU]`<+/|Af?+ Kql:q-5qr'l~]=VPgL)!oZjy{">IU94{Aex4A,0↋bpH##阢#΢aE,5KGpO͸=0}_46fd^nϹ.ښ*#5V:yt=?K~[k?l6J n6y"&4 AR4b.bV5<pə@;5a]kh)3ش[Qu{ڇZDejByԫXyFz&:+Dz afo,.Kè͜"_Diy(MA? }j53yA·599whZ4\E,q휧,L~iN|, ;ϑ5S)#G!MzM K ğ^)׉!d|Jv|8=6R Ɇ{Gs=)/3ؔ;X6FF'upȶ3]WRHA +$a>gFVf\G8-:xkXcI(PDDEaW&r"&EaK"-+3V>Mb9 "4Dȃ;xiiG4oJ wW?;hrTsVzbeЙe{S!TJ;q:ҜڥŖN$Hzrx֧U%Q5^Ȱ&z?@VE+mPk ͭ͆}ñN@]Jٯv~!_U@DV0;L|N٢ #gf&0YFf;l~`e͊hmZ̉$)Fk\4QRdM_r' {Tz!kiQm(n+j0ܑ`,q^/UxKS'.Q'qZv}@_R -&?ikLh_TR_7YBI$[j-xv8I m&b n5~x@c@ۜQ8J"?0cOgR1wF-7QS`VUYyѮ!&z=Ň#4aWÿɉ}r[^+F6¤սmRE|+2isR垦*([Sx}^>DVKٕ>Ajj2ǩ Hט&«N(m1`EIbBECs Ȃ՘ozuVk4w&('~45GrE>W˵;- o7:%%US1 znAcftkh(XJ2e~aT-ӷꎙhg^f^;qP2߶^p8 -6rHBU_NGF!`(m\ ɀm(闧~+% \6>wx[FWkO`ez"KlO>a/WiVEQBK|9RpcH_&bu.c|:G].7Qm͈x'-F%>D>»X0^]Nм>꽥x(PP6z)|jꆠoLq VZ: CeΊbpa,}6lgIݠ(*f7觪OO&S{jY"][wXj29<_An;j I^Sfgkb[͖p|ԲڟOJl-:5׷^ڧ׸3Pܢ$`{[7 dWV(_Ge _x-km wy4G}$3Bts_tϰQH)6%hOz`ݮ5{v=5;=07.u{A~*%V%LoWiG;qAI/S`Y<ھv }`T@"H澑aU ˶r&hVqeDd [ 吊,;:oL]cԖdķãP×`C9YtR|?&<ހ_cf!`_ʊx'{ϛ.u0 8Cm|v!SF(6ҚU-۱>8auVhA#egY+OZ/kbZ0˫.=٪K}{l7;CވcqGt/BfhRDj8^βEac9r&4NC'*ڌInaC1E.?*1 "%P7>CqrЫvwrz~|,;3cЮ|R`1 AnIYL]}= 0Ű.Ș2x$ v תC3%1|Q+‰n :2ʅRa.l͘亶T5x t! 0Ћw8s<ҹrB@l[\ cDlQ~f-!&F@h,a|3+C0R? d7)*}*XVN]krgH /g/ghmS739@ֽ8ˑ=ᙗScm+g:$B'7/4#b'7(."d5^Ĵ lr9?ȁelo㴱-3qI[\ ڧb wP>qq4i%EP]oN:'AxZ7~X݇ԌPa0&&d81Yֻ_!֥Rc07X~U-m9W^}ಈ&⏍4=޲(+: ߊs&=Quax~ WW |L ;cbUdR_9PuwT+E`{\ΤR~Zn loNxQӥ/^OӜ_=d=$7r[: ^$xosNF8B|PogoK`d -~ޏ+u DCO[e:^-)1Yֹ먬t!Hf˰Fu#ժre1Du\u*y͙E.W:qc,6*l?c.,¬+Fv߰QFY MNx,")҅aQ\hŐo!/}AgEQzćRَ';mSDwH[[wS0:nsr9$Ǽswx_$uGӗdp5D1X֙ƅ38,ٜ1gUgJ{tVo Tj%dLTXEMS>:ϭir5ayCAv a-GEԥ=+[@IF2 'Ќ<#ƈx ؛ƝNhK[}sH`c'?t_a`A&`gI?J9RtM(RdFB5&#n vKtCo91sZ5II>u*s\& 8e9y9OrR>{b~oUqo&~ H-wvpE,h˚mXҙ䇓!rdWsB}^Kss+MpIȩӜ K:9${TdC8؅[pӣPչГ]!eorO¼zI6lju6-#ay01+/'\Gvy^Æ% 3 3qZ]E\GcB0U2 ߳k9hV^0`i}̵ Cipy?>qKF`D(Ky9W۠\ڕhY|!+ ?ATAԼTf? )MRHyN~WȜ #y:gZT\.W,A`qO.Oqj`c>-(kw 1P\ȢQTix2m4Tsd|6-v=6k4[j) 3bl7+<+354:-TзűrǛd@BR ^Zj ~3ni&\u~ :Mf e\M# nt@1wK&z%o]Y=^W x-.9u٫]M72B8ymn_묎4D%Zy`[##;AS}5-[K0kmZyqdČ GĘ@E u\[jaåǨ/.ԿõcP% )3Ros0K'u ac4ʭc=rߺ,q`uR=V;s9N8!X[ 0r xPExCIh,cJڻ~/6D@4W㋓sXeh}ôi,=$:JA+*R# * zކXJwOeiy$:L۵H@Qt6SY(D2/F~wG/ U]'oߌۺ$Gy_yכ1_?Sϙ: kꃑѴ(367{#I,_5g\[1"'m;Iڗ #&;nos}#i `Mܰ3c5:سV|r]Y-R O3Hc+_oau0R&b80paS*Ke#ۏD%!y(UoN )Ƿ.-*!x+_Q$Dف$SHb[cSTcxO:T&WDycnQ'RXiJ6o7g]|Ec̟v5H'|먗ASrvC~J9NPp}*>0 YZEpi/data/B.dk.rda0000644000175100001440000001425212531361106013166 0ustar hornikusersBZh91AY&SY]g;p )U@^hJ:TdA ɠт4zM24Sh  &=I&&&C4m?=uShad4`& * h4 F 4@hA$?TSCe=hGi4zhh4=@)'l`= =M3SMizP@4)骕OSʛF0FiFl(ROTz@4)IMSm@A@ښ@4h @ UM4@h?q|߉ehر1yUqW/L!{d2T+:9- Yz)#5Q---jFr`hӷ#ڣ[ro(ir1;s@MEZ|٠Q;OTpvdocb(3}nkp;"ǚq.OW-4_3)u5 ~!E5L'uYX)sdzB L[1(? $8NBMl|9@ELb.kZsM[ξ|X:aT Λ ʰLtj5 Pˋxy6 '3a^f:1烧X?$MĻ9]EBB!(wxC/k&kW>fX`HN,ξgFW2 >h?=ggDk7 S#i Ԝ^H^im%2jv&E5p $Lr'?JvP:ĘoQ`ί6vr[y+5`6 }L[r:::2#aLnc1jsPtVH)eij-.q`Ǝ\Jd6`3UMKftSx2Җ Ud kUCXm8SC@Y $]H dam}SwҫO&*): YFR(*i ߂qX-!Amƶm60byQLXy wr TR$I\Lu5j Α.G҉ u|qIb&F.V)Y |@*S\aCcQ:Hp0%B yF]jGP~8QC˰Rjƈ"{RqRY5"p ]|>+!ƣn(5g|(f_WЇ3 4r&yuۥalH)G | 0rqiĘ߈%{CX3gNeKw$v#Zb_iz 2HYz&HxGT$f<]I9 30'M,r-KknfRϖVM}9RJӶSM)bG2g86DrKTA!dV] Dlh! sL R)lj rKLK=o,/Fh_ufg6ΌYe꯬'A}㌓6VNk ܨpTVbәT^}o ERlH]1yQB^ROkEFğ5bE5}CJ2&6P*;ʃ&ӓ-P_+lv($DeFL<9揸6=eǠ@vE⬆w۱u)eq,`VbY5z :m+ZɇLC# vN;' hJLvMAyA*7Vꍲc굴fӃѵ˓rW:=ǽdi!$-`O0מ΅bDLIe \[Y5S]Se!MՀ4\+$ni~Rf)"R cSYiЀš0ЊI-5Bd ،<3@-’\i-& NRr.)]Mbݏ :#Npw+\NQmKjp^Ȧ۔AiJqw& ptHav\`(h=QHP{fU k{v 3 jmh&7 &8l,(@B(`mcaQG. \,.h*=!Ytjy9,X0ft_[~P8악6ɔjc#e68W'Vq۝FVU6Ye<ΛN7g.)%0^jjn;Ne2 mc]h+veOFґc;Z^4[u; &سzFZ'%vi;5/*<4'uTus?Ew]{4>=/}n/iqg/ɤέ+Jjd)JV&h8 A `pXp%\WZҒ.8 ,K.8 ,`@8 s@8 p2d=kZҠj ~  @8 p2\7  UVI$I$I$I$I$I$I$I$I$I$I$I$I$I3ZRh4I$I<|IUU*ʪ>UUUUxUUUUUUUUUUUUbJiUUUUUwUOO1Zֵ\Rs)JRAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAdAh 4@h 4@h 4@h 4RF+Uuuuh nuX,TذjZ*I( %Vg""  $>ﭠD" BI$D 4K+6r"R)#"kZ""il`_,kZ)J`:.ea!3vdLʐIa1iI$匰UDH1a6&v>T h[I%ôgxI'fCS!DUUQ$Q$q1c 6kde"kU)JS+wUUUw|馻kZi͛6lݷMmhֵjTDΨy皅U^F{=8PwwuUU")UA{UU]-a$vUT8(v jN4,]E K}{{{{{333@ܠpeUW80I@ߋ[r8Y^>h'C]`g8r!iIlq% d^%4~LN_+'\w $t L'*Oljcmjqߕ2{ka+};i<{WD䁧Ѷצ.7jHo1'afõ4'z}kWէnevPC=n 5qTE9tڼU zO,OL&fEXx-( h+ qo}f?Q! 9N'$8BԭFG+gʗxQ|G v?9t>@hES;Ϣ)e^&jr>$ 6źSi%N@l*-\Pz -y+X+!*EX$xk9Rp>HX-kklB^]drlUkyZVK>Z|p_5jmK_JOeJh&f:p`(n8 _2]u$pv+Y A֬|*<З:,[P \TRh }Y߀ܱ)c1!(Br{\ܩB|aly3޸ĺ)JŷRŃw2!ϸa+qs(q"}\o@ ^e!ˏݣBPj Yo$Eό5==מ5/#"3+f~>T"鍇H~L%SWF!zUiCfHYގ, iQb#qSԀqҀ>3Q5Cg#5g a1=elm޺-@IY$&C9=T(Gr{]%1h1\-acE󅏱\$uCj=3I="J/&Y.3 ]a )Jt 9ڲc5T`L(Ev^ϼ55:BxEob3s6WV|<}Ɛtõ""id61Gmtor3[Oe  28rj$=kAzDNlCTni<'\,{9^Pj&m&v~ rm4|\tǿ¸L^/-O-C$F44t~Xt'=)!ܺ$Dм߸cV sxNj}ͬ$T=SZ2+7Ad_.^oo ]`'P4%T)\s>$6g)Cmy`$6Ң6{b^0 ׿,]yM.~t&"@i(t1Ef^KbQ"1:+PcӲu̖X"-%mhU=:`d_U8sJH8.no#1 N$Ix0 &G=F׋ *$EZ ތ ׎8$%XXE9! 1XS9EMvA]l%Tj? F#ɝӽ9O[Z_0Suk#W|cvMʂ 3DY|rxAFlUHu C#`vяݍ&Ȭ ?=vnb$/醼ÞXHq^_S)7dV‚XliǑv12A*x k5ՠ@Ϟ@A[rԷhS:%DXT:ޜ :뇀uյ࿑%D6Xfru9B{0V3_D'kUV @?I`"=b  BӕMg<$/"[ʝ)TOߑG5*3{C@T'"v57-N}A{\'Ⓚ9V4x\1 viyk0p|/e {ri_*$u=2wξ뫃Q\ '[.vW/( x=hkܐ5-e/-EQZ_ !V©]xJ0 `@gHZE4#FIϫx³Tigf5=u4;A3CFV^iFmXIh>fުHOm[[Yߕ0p멵10az栕Uȹ0Ҁ⿉QDsrҟRZ؄uЧdpDG (+yXrJ ;9SB ٸIi5Jt0`H$\JLbٺ`,iPo-?=QAj&K]l$rZw.}s[y4cwJ|)pA)6^4YqO e}wATƭ -o 1k9>@ BȊF"ŀ#"u\Yt2]|0( *4uǛg-Yb}܀iFDrG Px3|;ULV]eN<ѭ~SRt;6_SÜ$d~K雉X}e-1s>)xjNjII,-sb'^e$j2! 9,)&V^#BeTSa P*.vZ!ߖ6oߘB& $+3W"DC-_M**10ڏވ:; F${-J!C1ȂJ0 _/F~zlZj/Wokϰw8snZs#(|xRFk@(P(6R4k <:n4x3fo5L hޑ&ŊWAE3y߶R2D1՚ x Bp8.G8یMBa Fe=h7%;(.=w2_Bӳ SXm"u>3+'sSV)e2?p:_VUp\ѿKg4-4;SNfxuw5Mj wt1)fWL5)]>A$GlB+{ֺ:@KRרВ`t'fpNme%]̉jVףGR' "(_ 5n8l0.?*?c0{A2(YX[+PlZ,< @6wq5;3s*uuG5@K>mHK#&p.AguXhz ~r`8)[::3Pכ pmF[赉o -i٩h`K.PyyQeWR"mm)C7!/ՇQyx4NJ{ՄWֵ'AVzCVYg_z!##=~mH݃^;ٳg1O*@f2'ptjv^"&zeI*fnr Ph'w% JH$*Br,jg¨8L\Q!(5~UYilH@PLLJ"`2yM71NĔcW'wúsrNw+'b%]YFeR_0" Z"^% `QYK5O(#JlV{C:n+-Y}iQskaFoAЛ"]j'47hp_Q2Iv'b#K N\PQ%{Rn} oo˴8i|L! !Y,}>[ I{-Epiס=n!6C6l2aS8eSb1-Sun"!oI0yKdGFf.6FNv 򤉌1;[}~ qK~6Ae9=b@{b\̊Ts QI [ A]?2kt(h<6t>70SDg'p>C>NK&]{}On,l\#E)u5[ uH1$ȢF^ φXZ-N7቏V $&X *i6Wd. }UudwF/g(Z)Es ZWNaʣBj0Zps&%u 3RsŹl>w]01L֑Ro*Gݛĸg!g:|Ǎ.uYTĜy7rS/` G:ZPD;!>pv;T{5Iǎ{K[՛ϫ=wpqqߟJ8% }Z zzoZtIB>nҕA3  JKݒT 0aЁC/d=EP_1ӇSPi}mDE5 ħl"P-Snd'E`ZtHSeMzl'-&íE&>7xJEdV9?iY$Z|'3 D3WnLE8Ү:Ѯ;;q1!5FHCt(иqp3Ja//P(2gѯ!@FͻgOȶK$dA80a#ʧdeө)U5{B6]~` 31IVRV?sD_-~]}1撩Ђukn*cG>|lb4+dpGP ڻ=-]EۏDZe\c۸) ڳMvpt,7ܢdPƱ-ES!e|&җ#|›EOӚzvd*g`3sΛԍXly쵥TEk+V]u&ƒ2H۲ ͚eA{m`R zr5lUnu#ss\R?yFn+e H4O[#i ~TS*)hziKѳɴ\1KpFިU6ь)hг Cި.ZT})KճH_⭖zsfdtwf?"F,% 3HY*] *宁 יi gM]ңzԮ' K@>TIXIZAtN<&)~1-# `ƁIP$J:@KcQU^kڊ'm ' HR y̞l9n+1ܼz ?C})[ ~pR͛N@ׅcB2b; ?'STs !#PMC׃I +;y؎0`5 iIqq.g:-4@7i L D9iv8p)`"`nQb2dɸZ 8iLRݽ wk!q%є'`^L1 JsBTUmD&SEL" S<5v~^ Wapk1%^Jcϥڡ?jY.VdɉT"^]|eYlk0 ZXQӚ|:GX~UO\l#2<\z"4DbLUߣA`0:L:[&is1\-כպu!X]|Fa<}4ŎG%SS !.>mcĞ|dXƽ"9^S^wK>Gbcq}RI_"c%DsO7;_ռn`n{:ǵLb΅kA̲ ])孽:#v1mo}(I_8MΛ z~y(R{ǃE ȼxG=v,٨K؈{kf֩_DsMw|Do,YtޖhP_GQ)O!T3k\6.P7 {\2X.~2wn}/Q:MU$II1k9 S.} u,Nc9~UthFǘ4ß*<닙\xp7=7G4p"RN?{%^=ZOTc ~ȤG%'\;9W֎ƺXI j8 4+ Ƃź*BxXN<&:1A<$є %fɦ£4Oƣ&F}AEJXBkwp~ECXH _:Ń9j "*T_ //iљ d,eDPȂY+_,늆L o2F@Tolf\9U0bfjdNJɍ,†)d9"(:L0s*<`षa/tx[w:JAB;IY),0ƒ,Q{T1|9.GTn]w#+&'$.|54DؙX{}g$F$x v!/ OЎX(9At7p[@ۅAAh:w5}~Qs MbSljҎ9 X"WV~!!&E2uX{\c$sJglXwoߠ=i13|I\@uq|jQ051]PUDGJgvͅ a)]J^4ܓWx5aY~Dq/ +xFLW@Cpf.0$V^%d*)Ҧs[@..pAk6Y* })Nf _4 Y "$<)>PeUrx5`<~nvq0Qj ] -3<D2[4|:Qq^^5^X|1m:]c}Ռ맕4=#CܬA<^~uU^o*X&kbHjh/ v9 (2>e:zTclAN2QXOѣ /0iz-Kct(J zs'BlWMC(w'C2TL zA2eLeg~NvUcyB1Q;׼x] xAQj:ڞvsHM9v`NX3m'rߏK<}j|C8pLNן/[!۠ 9ek8|ά!&K+0Mɂ(0; n,$ntMri_"7$dܢm,7J%ƟwE)qGf%Ϯ)ܘ 5(vpm"oCO}d[T9Ŀӑ@o`|sfHz@/z$L_H%9S^θzOcgvt[FaCN!c*GcIl@ܖeSv0̴\7C''f쌘FVk#f}IadzpT<5$(\B8"N{MRHy4e0^goun6a|o_uݝ삜_C. faWSص8(p&f3[&l]ѧޮދ'j'fsh }ߩ# `8Vܷ:ȝ \qB)c"ֶU5= tRlۓ*?O}'׵MWƌ gqL#LVYu-u . xe'ɂ`}n`ehJtu0t@1A * Xp?UvegxHt}) :64\Ok֢C*'΅G=d|`6Jt|lҰ\cVߦDP5z8H<*3Yf u3y/կ]\3b=T|/@rhąKFV|P KWj0i*c8]Mmmfơϖāl .FA[m&;LD'}-Y@Ts/\(븍+GKl@H{yձ""ox+T`Sz)d =A/<ܢ-ƗlRN 玢;΂>Oy ^ccZZʻ>rBcp (#N[R;$^YV: =sxS4ydF1~ٽfhvN/v z&RkL Du 4DVe8+A{ ,0}tK{1r&f~ Ж:Z'lwd^$Y>0 YZEpi/data/DMconv.rda0000644000175100001440000001735412531361106013604 0ustar hornikusers7zXZi"6!X])TW"nRʟXaqjnj-&;QAFS,[Q $;DxhXX܊01N1ͮBTكUH*Zآx]1 埕֜1 {FS銗'LI@.a`8ܠPjSeRjowebl>6 ?^Wh?i:P;eY6.|P+r٨tfV]! }d)2< `sAHM8qEun-,쫰szX=rUKYať Yֵ2ȏ@m" x2<%Q$ۯ/)PT JMԠc44|h➐~Xk+.g2ұINmbouT9~xZQMLDɼODo;RyMScT}-~%1:`{xS6l{?_fж; qi|{3@hD9VOv̥9.*<ʃQ8˚UQm|=wm0ȱD>V`/9=pY!DžQb~%Ԗ }pi j쏪.SKd:_h 2'}X]w[Q%rr@baynC; :f~,1 + =7+6-cQ`MhWꊊ2 /"*]mVGyp} #X1 aB7jo2CX/Yϼ8yh\#c 5hFn %[:R&DjQ|Z ,m#Jb,PI!aނH+`oU+,X6@(UMgVzk1{.11ELgnqs(`l5nPi_"+VU71{6W J}{ v95aQ 5StQ]luݧ@qqq蓢+S̹h#F盎a:ݚ9~AeE πh{'|O.vK<'JH 5y{p~>YXw^x'!ҽuO-g6֯/dWP^=Οܯ^РS+$O^}13MoTUW.^f=_nPkc`F3kh/qO*Zܝ;E+ھ>[-r y[k+#YeC|L.R in(8u8mCC-_i#L[k,0dpt.JǂyOZ9f鵃od4uY c/9@ wtn:8"01J,&wJ/Qӣ,JM{ѐ;}#a3P)6?;(#}hb` OKaGtkV#* MG|27jl=6ߝl觭K hS8G8!y4\j'\۞8L%9 p%/R˝rAI+r=vKN< vӥK69%ē 5.Xo@?!JhՆ `(+ksj %&3D`R(_ tM.FRBL!yޟ9ttگlˡYz+3hs'99E]VT۬sdugW]FpUqoD 3a O-s?9S)v|7:0>C|'kÐZq#eG#VV07%6zhUznV `[ZPiRpG?kGyr*w r.o,؅A9N8 FP }Q'/%rz&^H,8"`3=pʟ>-3k".5mfuőwPszoLJ` 8^qÑpQn5~J @T`-W$iHC6GY$6̑5ԘSzVzJ5'XwśtdQ0asoxcUXڥWhQLͽrQH 9'Z`W~U0J3RDQm@B,!+(YȘB?qv)+ D]h!rV'x!_osaff`uʁJM=O'wR[ 5UJ-<j=?k;&vY^NB6{{Ԃr.C2;-kƥbȼܺ4'ܩθ*|5gN)+B 1PKڢ{:C q᧗`^iF~"CnmzEڨ)3U\7&P{5XA[{QO<{#&W[WJP'z? i"L2?^Mr6L B նB,/t { V?$# H%QYa̡l"pF=WI˼w`^a,B bTNS79Zx)r ^ yɷ_OE)_Bє[z)}]<ǁ%c & ,ô/^]@j4+qFʴgX/Dyh &B}6]Xke9TH`8E+84^`OI1*&%7uZ )6OE{x)CSތd"N;f)*.KAE7BjFLt] ;aumL ǝ\%Y[5zbdIp\Du4OK#QyXo^qpbz?&霱\y?K yƾ BߪS$gPOʥ]M6"|+ؗƉrhYj?QǛvFjKJF\FX7I6o#;ti)qYM[e-yW>nwe8 Zݟѯk.MuIWJʐ:zN?=XS,:)z+. <_Je-[w=o@蔊k"t?8yx9W8c+WTrUbz$zUDVYO ~ zH㹙GؘyD H;EE!{] ..,#Z`\Va VzQ&⼢g-r^*+̢DGh%3b4fu,r`u]a#yudtuh;n;Kj8ZAn }V?"VtJZ )Z(+0L8|{%s$9HBGjUg ɁmPpq*#!{=!kg̼;"j =O; 7Q)vQJOpK.q!| $UtІ;lýIkg)j=mڒJDZn#X-mϔ&,g U$Ӧ[o͈Qp }=@~X[񿑁넑AѬS+OOH ATdO,JsjT݂ {~&7M斐wȎbҜC݁5* #WJB^Bfh4D,8b&=;m~zp  $dxڸl"(Vb*WrͩC &{0sʉϜiF.SНAAC锩_l/e)(IJoFE,9,@ʶ9!%WeN DPB=^JA[ҙj "D Gj/E#bjv^i |SWrRWUaAα}BsaL(AU88o1O=dJ(#8 ggz U8?\2CXmv)iÓemRȁݱeqRf=^a1N]sTTL<IPƕ⿛owk(g\ ~+R[Ku?Ta@p)^&Qd(BB(ugqCo6T70y슢#^4yu䊗؅ƶDTBIvV Uq}1 El׺X꒎ՉANC!N3@`K!'6GX7ox7ѫ)9ؘ_{N9>\*=ܼ@~BZ3-;_}V53'^*w^(Y3kϋQU䜖@"rd2ӡ](u8<٘m% A!<խL ՗Y;PRK_xFK3DI’IeeP yD+ Gf/%BnC\ކї$}+(lZS­B?X@K6,>;hx {Ο'$Si5`UY!_"Nl' As+ { 1ɉ.K;͢Oʿ}YdJpl-S cxO,IܐI:)"mgЖwJ!8l΄CQKŋܒm4gaJXZ.I!nl?$!m@KJ`lށH}TpZ+U+>\u70MywR/̄^3e9|r 5$`+(#e4 v~xo>2r rcZ (^ՌwNCOD}܎1,ra06}6ֳŧ$wU3;0YM_1xu2'Jӻh[oʧs~G!t~In{@+:#"-be4`, g񘇆zezTU^ϛNVX,sc~k@Fm`[%}`5k+UZ0OJO&|ʘGS뙤hV0lBQ`#ȮdM vmFSb\+6*:ejiqZ9fExhsb^(b8A(#Xpfcooq'C@pNIF6 ;2|FyVEqf/֪ YIv"ں~"Jux+e4x" L=Ɯۀt+@N.mN $c6eO7aDZF>œ//v}'\4t:W˻{Da^_+λ>d$߱N6 Ajc4TnJueN%3?+ThFGBD8x|ٙu/a&mS_VAKXe}+R0 YZEpi/data/DMlate.rda0000644000175100001440000031110012531361106013546 0ustar hornikusers7zXZi"6!Xu])TW"nRʟXaqjnj-&;Qcj:^Qm0^?_ aٶ"Z3z5X?y(wS_ǯ6m?R+PR|$FJmbN)ذQ(g<1HX(u^"A2yR!giԙg!,bey ǥWb .sc[kbnwK?b~Q>f~1W7qʖ|!(t^LW//pO ҃qVN8R\tŤegW>ODhvGc~v ]o:D-cMP7]7.X8mCx< 7F$hI)`6>vO1ZJEFx|tW Z9ASli_LpC}rcuc؊JG, ,z E66|0|cl.5؎,0W!oGUſ/rr 6[=4GEBxw__}dvŐ>[{VE`Rf/xD? '_v6bR%cvH魋dU+ P E7AaJ|#3'm8Aȵ`1,ᆼ0748 8% W [<1MGG\"'Ίhh j[J%[q9kbd5*Yl28\Գ&Ď*-~>$U{ [ SĶ %H}]S 1Wi\={[dxf4f> }1Km@ؖCE)N-X6T.]!jK83RF{#XMccG֯.}uKۤ84BMGE?2L1_X~)ӒxkL_W]ZY _ ިtJY--Ȕy/CP&PA/%U!.)64B4/1OIWI֝o Q|afcMtY,gH퉕b|,LJ%. JK9+쬇QϢ3!>'1b~/3f)t$MgPrjn펈Ŝ']%\gtHWzysc2G)%f|@MjmS4~&N"BZ愞jgɸCmvM"lfDxJcLy4nPaA}3:pz{7:kKL͗YuYTN< P9PHL˙8ABv^R 7tЈLk[s#C D g,`(cAW:Z%g] TwG9c[ !.$ +FlO,E}X_cJP".",ܿrT^Y,~ET-s ! y1DG7Rj+)9WJaamSq/uorDL9;HXf/!hϣ۵hny7/3rQQĀvo` ro*ξWH6L.w++xFSG;L/cz g{>u $u)p6-|oA,@6D  J`p@ =d-%oOD|soRNQތtѽ"'cڲ^bBD?\eZ}lܪٞIB:p9x jl ]VJ 0g~c gb?CBEF)9e|x ] f cMGIzup4ج{75g2PzoNoKn]2hF6 0)*~@Q Za{ksoVf@Fu#%SBHBcXp#,`&Yfۼ; &tPѵ.$u?,S>y<^tq1Pk#8X}E[,5t </R @x]^Z H&ZlԠ9H<ݰ~-+\'A5O5z7FOyqjLn#Z-AA:L#~*Z[vȀBfcuLz|$W4дJ|^74|_W쫣F~0VUNF*H|NHWv$gn-'/2ڳ伊àeB#nJt>B{1PSmv6h*toy5P뎖Mmh"2S`Ù[ѽw3[aԡ8!)@Y9h$ֳ.L z/1D _Be7 E5K9!tT!"s9.Z6yQW/8 Ͳ(ZI@KgiuJbB5ndJybBӍACI N!$M"YDKX \o:?g;̩w$~M%6m a $w) __#t⠬#ޒ0jKSGoB拼XcbvĉҎ,ί)N.#ڶ S]q9ɟQ/ p^؟WED׏EITTFRutr!`OIH\?+Z" nb5S8P_ kXNz8H@nТ/49ŽoŵÖT\8^1!'OJ#9ǯ=pqS6ڟnڅ}Y\xhί7/*zCOtZ%τМ'һN}*Oim R1(ٺn+9 .`>cN.eSf{ŽEeJ{1 rӠ"ct4g2t@ɚ._~Mvcs&)6  Ֆ q$ l0q*Oi) Ɨn92+3(W!qd=^3GrߥdZ 4C]0RȷN^hƉ `=7(̒ܖ^X85c, k3Ѣ_Gs5v&?͋$A88!.KR[oHcULd@G;-7QeFα(3Ȥ}t \,>3I&B,z&\g6S4weD%X~rwcVq4v#}EcVebӺ;*-jQbVhG,Z#azeG=v}V dg^a9k: G\|@:A+I|Sls[v2 X9=FEGVRUj !vʇw'Y_xwPY <]x>@9'QOWAD #9E=J$%) 66έi4[hq$I%դsnLwQDz+$aP"@JYt5s <`ׄݾ|O 7-/,ܹ0L.TeX}Kd<2Ԝe6jbi4MnҾ\-LjxuH,4 QMeF M[N]rY  =T/8VۻG,G&C/-o]flgc.d$yERwԕd4uTUWmFh jl7߆UUq{msNilLm\kKus~o0Ɓub\R?e]]:_#AݤRt&Ⱦy#wlnM;I~.G{ Di|?b}⊘5޽^^w"G 11 )+r0ߛ +nYtu4L`[٥=ih,Q@N0m1SWCэsݏ-1I{-@-olA mo'\pO[8wT{6c)/nszlb0.M0吊OݹN?࠻m=rghE 0%R@U3Z؇;m-0u aWJk+WB>5)kbX9?V;TXU%JPCAC:{kh!XF qf=-Y @3q}: B[QHi:<ft~mM{sZJʨ )'>3?!l[Mm5D7/RZ.M3֟uj{\sm&R3ҥOyТR0lq5'~yR7"iO`ҟAPo ütH و][Gc:d k17(q*c9>)%ES>-*'p!7k7zRJ1kwDm}CcQ5e+PiibR [&t-L=7"M]8_\yYt8a~s1 6tQRe2UEM6."cM%FX"-e0'B,6N*h%c?7--F3'eezM[]'v4WkSY3di ?֦mD >=rĊ7_`^[#ŵ_Y> @ :lFNg],JܿJ!%j;Oߟ7^C0Vg]O{3D+A]q]mD:..Y;̉^٣?'Pd ؄X~#tn)ȟ M|:Fقk^緳B(=dVQb$8$yV~De-.Z,q/lW9޺;<-Ųp@;~PZܼ!WYQ]kDJm&7i%]-OFkO[o8^Š+Qe&M=} ~ScH]kR`} EeaV[3fKnYj*|BAFf86M;K/%Nߗ|k =S' @54smݲaFh0B={!lQYa3`9rGiǞ΅34m_? c;$s-]Cr"oi٢0#A[p<8<8i>%xn]ڍ5%Id0g`xU@cOa e[\O/MC QHF?Aȶ&=N~/teC2}m7 ǓgzQma DfLA@nm}\Myin$y+ 7=f=qK7ԲoVC,`KĔb3R%dٙ?P*)OuD&LRmvtp ET/0rdhy 9ו`آqS">˺WO1 Gܴbޭx;2T?1qݰ:"LKQr:dklEgjTrJΤ(.eiU\܍ 5.ƝQ+U?Cdjj +)]ٹz8v#kZwveڛ<&\DӄcA NLP{4 ^z˴ѱJAS0 Ѻn{ X맱C|mCʙ?m- uߜ*Mv4*(…IJV8u(p S\JޡVogАa:^0ŀ^JAV#a} {PC H:Ƈߣ>*=cI6m2?oBybibWH)h] |p桷G(vD隑vuψu4Hn9>0~w \sPܡ*'[MƎb. P[6T܂'))vƫN0V\xV&x $#oO;4Z,8pGWJUԕYcVVh^}j"C7 fߎmp,hyi4"%yh4`=3*|B9f1OaanP M}^k.3P@T-RX^r^\;n(H4rҬ!H1J@j-K?RG$뜀(Tai!-lJZ'!)dcᦘ)j"m2Ǽ ~v["΃-"D[,B $Y? i)&QֲH\;vjBk o\9co70q&۷N\Z$06JP MR?: ę ?ЪЋ@olșp\fDf!]=~SW&uJι}h]P#du(;D:T-f:׫S>n [au1gW*O޶<3&sGv ;@ +S9'thmgQֶF_/u}XEmMڅ^.5o쮩H5(dxK沉 Bܜ^31fKf:cl|&M 龬Ė^cUS-%^ ^ ЯxCS?B`!u❻"ܡTVBOQ-iV4<އQS"Nm#FW: 1jOY _Vܹ`‘QkFsI`ACVt'cEE]g㏕Cz϶XSJݓ /VЭcS>JgǼ ПW,;\̳zphŸL- VVŽy(^ΑGJ>yiH~%=5(B9]Y^Y< !:3#(fRp!QK0oŠ1P'TE%gY\i:ާM0M#"63.4@-ٱݱh{>U:*KpqcsumC>dKԘ,4h1YT(@@XH"@/7#u6 R^5eSf*J9 lcsA bIjI]w:ʽ7_wV3- ,]»YJcIa|U|ȩ/y.sr;rҗ9lۚ&gIxV5ͳyciӄ-;JGx&Yw*V{R?wU]r!IhI%9M [% jP몏N ׫N&T (㺬1*[2Veީ#YnNz%GI2hi*anl=ڛ2[>n#:YHP!OF"F~htp.Վn53E.#& 5YṟCLԉaܱj%|d۔Ivү[0b寘B|@vs* U nVG4MpAMMM_W=A3 !&1lN͒Ti "Dę7E-DW/L~_9C|O vƆYr$8Lq;Q8jdN\ݰ Ճ?|lX{uxNl#fpnKSk+ϑ?S7=ڢ(VoaIߞ*>NpHebh>au%C3)l9S EMn\ 'tE-7kCQ]aA$ֽES ''K?>)@sFޅaNz2yV%8tT\C:n%-a6xy'ʇ3 4^5#$j+{r9_0; -rvI{k]溏RY :Й8`)'.7S`O)r+g,DL "0IDOڇrЈp]K=23&@rԚ=\ ohR $ú646gKݾ>i\-8y 2@;pc03AoVx`Я*U\&D&r;%xWQ+~$2ݘC3`hZxI&FO #K>ckP=j~%O|$fע+0d$|[,f{"ZE[mC~`KT32brm&\w%5*ÒfUp4zOG6)JT8!Z [7kC+ZmVk|<#Yg{lˆS>6[Y/-]QjL']'i|AGdkT45%KV&i\no.u* _:C彏Un%r.,5-\Z)[T"'kˤdIG6ri1y vUڗiwRfEJ7AeCPmy}-UJRAw k~3f\=/|:~yjж^ Tl~[`GS`,z;߿XIلFy\wEJv R3WX  )Yz\ArbL_´-p`i- CAg'%*w"=}}3[ )\bib'RybNhm52@ws/xtzۚd`jɉ=NC;˖Cr&-J}|Z]jC0kN\2JfuАrb¤xFߝ)Z1vFqyR5lj /]Q)=fryZFrVIic N)>wg7?.li5zc1qS3F#kֈ#KM:bMRsT:MzU8x5wM2w* :-phf0˗6 T]Yi=a>(5lX_pH)'d*ո؏Ajbr퓠`FRzB2ho) 'y}Mxz#9P16YIBII4AQhX(V+R PB8Oo .kv6ih18`[oygHߒRtN{sU&{E-[|[a!4n2hF$pitP:c _Ӯ_f#h\<-7D@v`zc& L Xb[[ >p"xv]rDDsA^wڄ#Tz-PP}DP]\asN):&dIjTn/GH(7!?Z֣'+qiƢ8)H9E o=\_rQx;wJvL}’)VkF:Wak/WSE{PCĎ*n լ|Ơ}n% HEȿk;[3&5h8!BiDwa{f_C6/:+X]!aJhJ-R)Pa8vb2h9Bn?dd?㥍"B=-fAW(O.mWZ-pзJ+@_ ]KI{$>'+s/炪#oS m[YD 9'L1hINZUZ FX|/dl\7/ip΂C \lvD\d#xAPT ˒ Gّ%;zP 6 )KE6h=X Co$#25!nt50TCvRNw,)wOah\zL avKTktρ꣬6 ҫC897pTsN,>* HX?n &s/:nsO#K`P=lpW0!a99r!ݪ\6whbScBҖEz<{Vi t*ΜlS4{'>Y4z㻦wg.7}X{.8(@hNb`&+ +WYGA#MI`!l }63(Ѽ0FJaH'ōg'\UnJ~e$ Ub>~! 4aKqLL @*LG zۅF%4҇pY^5O sD%6g֐A2IBjrdJR+I4YWFM/]D"6 C4~"urٵ+kbpG-2rQZK,&kL Gj_scݩbLQQA ~@2ն"% f3xOJW{HX!G+6$ˆ%95u?;`&$L_Go$ em3dV\ Ŧg bKSJ=3|ZVg7$ȁF∕Lk+EU~W4 ;{I>⅟k*c;G:~mY (\|VvWMѕ)x}F+ Ac ыY4o!=VbeӁE,JaCB슄(,w W-{ WiWsů7uc(-Hey D1b~U ,hi/ U J6)o(o |PVa}Q%ـ&89$3}Q圀x|Ykt>r롗dę1cK6z8;gX=Ѹ3 F;**k_܈>p&ݎH=&CSe[^f )Ti{Gi1ؗOFrz/4ݵv}ƐPxqVK+15ƥtϔ4 ORX$bC-Zg1&Oa nG2KK|p8--aV1l  5jp4 Ji̝-+)л٠ⲶK$o#1Ls{.?9o}(}ߺaJX5Be)sgWCʤh'k }h3Rr{.6tC~s^ KK9OD3XBS1.] \ š q.udG/1?}/~?vޅ ݳⱏ'qoWtpx^'N2 Gb˺Jd=K)Z[ָ+EorӘ)p<펼% ^,M[pmk೽Tp-诲9IXs^99.1igS剳p [RF!k2 5Ŀ|\.V N2T uV`\ KK6BOj*9)6ăX5k zūL 1;H!.> m&cOJU1ٚ@Sng0*O!FZ@Th` _.vpfWZu@?NSc-I#JZECTcǘϚh(tm([Dّr@8Qр๴R3LI}):s^:+06>a3[}gcyP7єWuW YATYdJi}́ ;_8M>紩=mgjMőKii(O @hAq[Ү+4dF4TWc {Ɠ=M̝`lr`~+1'-bF8{{=h$z;bZe[6yaXMIx*uē FcRɢz-3_v[ؖG%g?l AƐM׸M|q˵9޴+'M5_a"ǥ'NP"H 2!SU bF׿Mx *z*!^ jX^9KM}Qx} @Mb1b'ľۯA} Ym5CX6-V w ؘuRu& WBx%I߿U+3fiJjo}k--qJ8j'ǰmS1v隷Q ΜPnQ&TWzǜR)6G<@PMMNS88] '(Ы-N(KGyKx&RQ;?ڮ>>`h - Fbm)XԱd;^Me.J jCwOv| >-gg8h:D:|j?(UB;McBV% U]Ki X6AUE=86 0n`-јpQ"UI4?u-qF[Q^QѠݍ8I2LP^?M"(Rz+!d0q3*G};?4[`Fش=N woLVޗҴlJ p7+G 8{ƶ1$,q=XX2W E &v q= W3r*Cmd8ŭ|K'H%f珹#\!p%%2McŦJwVO 1:Ӽ}šy'D5*:`k"c9O4D#nyNi)=峂`Qp[*ډaq䲤&ҨgׁND. Y!H Ĕ %p c-k-q\۫>mEts90&/L`1\Fct#2ZN#,}Gs8= @doa-u Bڣӈ)۠C`y='\"G57J$QBKa=dsBKlGަ(A'A^!u=:ɑp8Һ%Bc_MM)VsMЛWkʓtdaf>bk {O?Ȁw%(-~YM5wcCP ai ;knkR5CA0-CK̐uf!Qs 6`z\㗗>wlu +[K{s{;}&N&83SpnvELUlAEJR1Q-|OamxDTjqdSg. % m,;!B5!/xj)Sr7z ejm- į[2¦)ñf0(zw=Qΰg*wBvʺz>lt;g^ ]fW8`#*MTޟ_!Ԉ nk[%h/o] (?,򞔅}\8&VH7F˸x%'^-8R9ʀF0nGL8n~ "4e1]}W# mgm.\`"-WD 7Qۈܷr$pAOfA҃rr CiFVs%VeP,KfF]nO}6X.*ViD<rΞ"2%v'39ei HѪ@U_?I LζMfdwa3[? |j^Ddx+~rc. 6qD{ zZ|UE-ݎJc*h0 .99~yl\{{YAһ/xt* ]'ۻXv-Dc]wc oZAObÖjwK Y$wl [m4ĿL˅/{BlD,{vA)OFupC]6OpO5ϦF2W;A,X ZL_sρn:`զ_ n+S"u'Xαd4()Lep]N0mVKeYe#f"5dܤE)2̽j=IQqe0ˬv0 ѾFd=Q6I}ˀvmJ0nI#/?-A~dnEдxpd]O}my)_L#nG:eYB.S旦?X;:0J9jStb/Ht4cpn'M>h3xy= a@ޭiW @Dz&ѯf~[}+p8IF&9U q=Gу Pw(\/5;"G$g=t ݉k;0Xb) 2jXz/'l-"8LA .ϻ Fʢyj7KL6:J2bNxM߃21ݢY?5!mt^o}aJYpH徯,e GZ+ɡ(qQبaM lA+c+N)V8XV \Ye2b2+ðՉc(#yV4wZ-ʋNTFEPmq1J^=ZnHז2O?!|p6v6hj7ٲB1zp83 Rͩ [qSqDs d/+OuKP̌ 9dAZH[`^5{4$Ut&Qgc1;U}e>);c6֒%3;+:vFCtYޚ77$itL0_iI ȃ~mǥbߓ*f SotFDMÄo:9L) :3Ac}‡ʡZ8P׶b AHD8ݓ͏O bՌ.# M{cD\k#0/^61Q+C0H߾l"1tE#|GP^6E@4獩 Mdgf8dty(ea̰YAyYW])/xQ O,R#Y]xP>H}$Tݧ+ 򋾺+(E%V,M dC΅ܻXU`4 Jw܆+7mLw4:I)}'΅au4 .+lfr]绱0oNe9[&^@[̓(W(ZX-Y휠/a eaO\&HPgƌx97ӭS偀]qiV &evACE$FR}bG޾(d~p-dW{l C]aGQzk)VF105?`7 Zupx4@iq>=#I9)^^ 0'א%CPecKJEQy=!Ԍkš}Z]i p3ˀ%E m1u!K3^W\K83#N3?_@ t 셨snBOR0^$֦ ZV+fҲ2cJVRJYn7Hڼ_IK8re%^@Mm;<ųu{X|}VYƖ@W(*PEȚ) ?i @fafV>mm WasvU0yИ [)H"$,, mD=B$pjjiJ\t2uxէ@Y-.ViC=JsSD@䒣Joo+壸P:`K4O|y<mn*\;ȱ;!?϶'̸ڃqp=&mhfBf]hYuR,iNdF(LicfVD6# 3iA W<602F@@_LMϞ;4r\)xg 1qibhoWJV/8|ߠaF &)-}tP܅qkP|*88L^ϜsY0UDv#yƈWFpc- $0o9:v,N/Zu(ҔVuazS)A'kA;*e^ M%ЯeWW2<{Ў>G9l/ôokqjkϯ37minT-&%bUkZ} g ?/I;K7_z E=R" 7橕zf)^!Mq-\aU!?93ʡ6v.^RbU=ĮIs1aY7<ȯÖ#A(6>C0' w !]JXL}; =W+g5@|)VR?&쁧i^|Xh6.LrO{Q O` 'a /\gZu']! G%t )Irܥ0gp-jB푟I{Wf}r-mVcȂnQ^v>[Z-;=&bl\rTp)n{'"2Lrdz8a}gjS6۪Q =BJt9$WT,P=~id*\!޸ud|Xt+re}֝yӊ/AsʐܑVcgďVy cd}zMsY|F( zXJA +?@3wXArȏ[:=Uݽ9s UeVXaeݢ`J_};mbM!BM)Sk"ڡ'[Y}!PE #"(7,jǎ~#BfTx: SqV\jD>es=gW7߃ADA[֟RN GG_ڌw3eVDT`ȴZJ4 `V"ЫUc=boe: -F fwB- ư嶎PCGtV#z{!b' YԯkF:cIn9q8Ls T-]xIDdh7!]u5 8->k2ĦF;M O Wڢj!%SX$gO0mC$$EP9t wqˑž‘ +eA>odɃ1l+9Ȁ(f%`4=^-2) ѷOk>w?ZW_$kj v.x>{T%<5;54h]PTDҌ63[!G;)l oR90c$yL.l֠MՌb~.-9Uw"d,@@$-)\2.7g(q)8RHMOhDͤPM\ԢSd%ظ/KB4J%Y,M2-Ӛ=|_dKe'nqE/?xeE8 GVZ1q{75W/EJr&1SNs"ņ=dpnOFv"BCIKd|?4Qbe+j$iN&ڱ(z]sbFj}Rjy]`5O;~q8?:J=A{[xO[}9#*9; 74P^i$0 * ȐxR}' Ž/,-f P-mf.؛}o^2X045TG&D?&zn<{ߑJ21v>qt+ˈ+m-r0R~]yD/I~ڒ~wrBZR)#d&"d֭W36yMNIT$:GaI|-O=LWEZ3WA·"%Yx 6.[,oS{ä*ry6P֬|bpſx{OQo[xMҙꉒ}%bпc@BLhe\~z֘y/'֙1:swbBQ(ѫoH;vwxUrХEoq!)7 HiJ׹|JNiBT@ݙR:OjũA>9cVӻ9W9r}MH]3[OY:Yȫu8yD:S&_AljP,dZj^6>@F %;c !qE#>+o>1A,ۛNp!s"\Ih_(p*:Pk2< \bʱ2jY!q[ g:,dxuN^jE1&N21u+/COE\8^wFG!1| :,e_MDIK0X1[*2˜8;ߜ[ViIf^خ LԂrjEzK:ECVDYrɺc!P5Mh/֐L<|W'KzQJ U Vhrwv&~34RXi8#\`7>}f*}##ewx璯 `69++\ׅ ݡyW5JE/\B|vRL+S|I_us1?i3W"WviWjw# ^fBu1hEX mD& |7@JQKp͒؇Q}o=/wI!Q$ xmeiӡb*%GM}8 GFLwW=}Bw1B-vd{IKŃZ~:g yw "'/|PɝZey'2 &O=kHsh#%-+>Zyo+ sN=?S 8ûf =B).k=q]3sEYpbd{cSTaZFr FS{_aV8̄.ytm9jU)-*h44r丈[5ʴF됌7}AVvqsxc=7kg2FҀLGoGCH]?='q#Iؓ[:  %`˟<+3n>7 B/D"ny 09^a^BKbX(S_a-bΛ̔xr=[3y:4R^GB߿::M~e(sH3Chg>,:#!ܳVT\廗sy٢@S!xzšEI1YCx,춫}qj P!j8Nt JM!y}⡥rVQR_%T Sn[+:Zb_3ͬ<+)1`ʖ".x;b\R a=,Eb0P׳GԜcjrSs4'| u !LiesT^osA2T)#=Lz ͣsBBK)Oʛ5xv-Ga~;[ 489uI'ȳw%{2 i_%K"azB(Acw猶5n+Vrγ6KjWYX5 MW*g%_e35;) ƕze@?=U7_j_]BRJ |yk\S{u/3ļ_]̀WN>X̦k7hD$g!>Yp:tRyzWYAϻ?^Jf8ݽ"mܙ<-,{Mn$i[{z=CX2-'E 㱀r5%L$Nf§\E6^6ĝ#-2lZ&_;2)JI^o0nǗOsE2O,D& @lQO+T!S4/LX=pb)Ȥevmiwb^(lg vfl.|Bu3L_7G7RzI"-P\]B eDrzW[Qd nsI&}5lES9\a{DyΙ. z5 Jʡ%GgY"L/N =}O;Y0&;xda zIЖ׺LqG Qnp9(f!fϾ~핰-F8ԯ`ߞQ3j77`}mlh8t=GY:iF p &[J"iS(l\Y kWqМ)V uJ.5,ω*_&( T$\P Ψ)71A/JApޜ]n.z&*JtRqS*0C."MGY1< ˦nrU%/$E0j|D>/'c6ڜ1Q Yu} 9zdnT'm, &]ek$u_+,:PZWghO)+kypDÆ9&P}l׿b(1eeCYt#*2\fpp`Ts/NxH[9Z|69ݶwwhA <|.=->u^NjĽ+l+djS5θIrw%d$j9yc㳗HLS Ǩ^$"%.49eIӚ3nԞT'fԴ2pUH#n0>/jVpÛ*G,LQ>' !(- N|.7caͪr;5usIx&m2gо,_ ŭoc=$foFcptN7i/hp[te`uƏ``$+6GT|Bex+1ņAa}&EBxŧv{xL'ŭ+S.Qd xdBkgdys8"4Nn,Er]lK`6i^K2c0R%+YY|% swDn|l${dQH'/.zv )|dji!ݻݭԈ4YUBa R]B'5^ i|N^q_-"H پ)Sڦ$pӮ>hF~e9Pl#+WqzyT1z*t<:BhWHM1kW`ggge_ +` }H5? v)N?"iErARoyf̺jΚV?5~ֱվ׫ZÊjc'߸o跀hLmWs ~sB]JWc FcUh5|X8;V X٫֮'4brLW`9 d^ :G$AEcmlk-_ N`Vz.|؈n{έ;KAaaW}їڵ8 P jխ{ؑnjG1"E0j_sY45p؋}P>VzOCf$ky;`/Qny3V]%42>/`Wԣw':+ g·Kl\ g0EF}aM{Z/g3`yAumw*@rf#>g)k_sGD+ණJ+mBXVLfs!-;l#~u8ϲ(sfab~IٿcƸ}#lZ`!B!9৊/=@播4(H<zFc[8dCD}żJ 4r5GL7{.'406&UTSKxi7sZqc 4}yٔl:RQ] -̉GK,/b'1op,nE=%! ċR4XH5cњޥnd>'}<vIT>SR|Uԛmy2MJ6y ? ޗLeH8B_xp'lWiPSQ5J&БhG7 g8q[Ǭ+d.tɨxPxLD-#:0Jr[з9{iXt T`7+؆x@ fPF-≳9iV1 B뷟>w105G+{LH4 aIFe`z} LJiO U"%NgMܽsB&$v/p\1KG[܀}+TG;ydцw#$[56t l{2 GG  - өI UqH=wv$PX}jEn-xB55V:^6]Ef %ub6w~2OZCd?"mDz2i̚^㶔5E2/,PG3>WK%uJSOL>8OK[1)}`T l$[|f ɺ@e24{^\-T숩f:oٗڈc9JpX+ysS1W@!r`l&\b6h;KSI+WWxVj~B;P iV[ ͔Hu\+U^,)F ɚLZ9=?ێ̸=Mq?B"waFAO ݫ 5m׼l%M:>nZ-_g$Rޢ  _&vD F-ٖIEd }M)VĻqq\12uJ>b.G91aGZp等vzWi2 #ISͿbU WcOmleH}C+aXI/+8 %vusp6c1WpJBfp4cӘ-+Jh__Y:$v~JWI%0 B/> pW-Z̐[7'2!ϥimb0`GkΝǷƠ[Aa2 +˸)ww D d=3U7 D&p}+ <N­l ai6nVl3Exrqq 1NI߲!WE,894HWڲ9ynuAcy!ś;bsPvZ%?ϊ̃leg[1Dw+;FJ Wl]V:8ɐm7\d!PuzO=JS͊`@*:oUK'b.XCB{a25B)ͬaDSJT:FbKB~pΠ?=xɨ$29n]+UgZ`la|b0 @F7=nsb&Mu.nu](=$/ڲ>XSMpj>ۙ9t7)?K!e<wqžS+onpҋibמlSr7JD;?Z8c#o=qkF:M‚=|c䭽o4Ңi~ޮw h`Xsm̝ܤ)P<ܱM Gx$BR)ɔŠRLO}Qg΋Dɵ$ b1G"I, aKE \裲#C\cO17~灘lh Z=Kۙ܋Ɋ]@U6]CL%@ISrw\k4D5.k&]9pߦ4XڿnAH͍뺆xCNwLvS8; 8 @&Q1SFx6:N rY41.: Nns( .n hέM\|P)}`K͐/K@`m=*X Ab3og D펟C]m*. zT:i[f D-gGfF7raC%i\oPU+TdPkAdVuK 's~A@Vuܚ@FȆ拊b rN;*Ϛ b'}_d{ l#<){eЦZf, ,i*Fam{XNDwʨH(x7(Xsr6c'߭j JH o/ez=L6>j꿊Gɜ;Nίe^z֬nnD Hb(+bCZ`JqW.GJ <jn!:˷ccP` B̔Ų)EG-o5Nꢶǐ4LOiB4=w1 XObo%iWȮ ^=L !|CV}D`}$F__Vc{myGX wcSͼŭsJEqٖd3Y:4]iJ ͷj0O ά=}ᦈ4nhξ*jl+]J@Zon+=cp@uhMeZZFK ) :%_>Gbz`oz, 4/DfUbM|*v؞p!( 2m>b¤GdN_T<>Fzz't {¾NH\*P<5wh'38ZXxآBݞBTWP8څ0}Dֆm燮~K//x_x4wKV݇J-W8 D`qyzޡZ֧"$fn#9B*y 4c{W hl40Uj|gƛtNָr yʃCv/aC<](}0~ ew߈wQg); ̫\u,zS"c#Wݳ}M^Q(¦Y0j$:oU#VT +SrVmWX W6/N0yNptR8ÛtdO&Ҷۚ!ޚ]M@Qy6R8:ӈ4e|I^as峡E ~({̥Z9<!΄V$ +,5Y|h:1)e$;E έ *ɉ[qi< )Dp=E4JE Za ْZEV1w clpaBFv4$LK9ZaɿʋC? V]t!D@N}@ǹ:9u͂}L_W|h U5Lw UI FVϽeQi <(汩 +\7W0R.e <AS.v~J'I,KwM'!>~hXm,U9/hYveyu[ ؓ%ϷN#k(n9j6J-3}u]xI\N)On|9.:*q;QgGV݄n3 H x;`^8٤0g4$yz\'sǚ]3ʨ/ɄBbf iFg{1xwSECe\:7xBR92E.$wj@^aؿppљH )fmh5h,O_'$SD%M1g_|ݿWCJd HRvY&VS/JV?l&.ۡ+upJ<_j]ՆGXHQϧ|ng{u9O;Z+-߹x[/ +T:6 }IK|DsK+e1mkBUp,][oE*SGѦlgWIMH榡'loK74I:zp,,/DfUOGiHKOdY,boagzE]5^MߍB\0Wt>7 E94Cty(7Ձ]И.]Q;'DT'xlA%u*\"wd{Щ3#"xQ+zvZL 7ps[XtT=:OEx''[c9r1spϘﹼ"bPٱ2Ik~Q5JQlQAt5Zp1V;nI@$]jb2j!Ʋ;Z=t) AUeY ǯ)Ft ^մ.w"rϘd9 M{J?E7Ar~#^'+sy^ P9f߃Yfq؉ ΪVza4MSp O߽av5~6 ٤ %vgkӯ!J #`,|fbU8nuX?#vF^uVO=P2FjK-Iz 씡HcWz |YnC*ed헨1^?mn@ lI0ɬ }ZŅl@\g:u@3qqR)gp|8'd6bUٞ:Q/2-!gzĮkӺ nUH|Z䞧mf5b6]ǂ"xi]I վ@DU)s澺S/0 biOZwUH z0]@F4zbĶ +uo aowa8b$+{z .R'u> jD,#$ZƟ,$EYbg<{a`O''98R<LA~=7}svV7)* =LkZcW-1m3|1&s4..v0hP>JD0xv9bf1ūNSjQo2Y8'<Q/⨵~^)-$:ܰ{~A\*WrIsjy"[r%4&R=P-`&/xk^zgB"' U}L^p)b7uB  vteAzjC$Y{2!\^.?E.Un+pqDu=.-g<]&mN"uE4T ]~4_`y\dZ0d<ŰJޫjgP^UPG$jŠ;A曲s9`KS#c_X&'><6;:nj뿵eRNuϜ6R&zlV1 | 'mOgg4bzu&` Bt=ǩjh'\ eH(1LTr/b*POnMN]vS"㗛ba**E8H>m :<y]hxS&A{;g}k U}6,0ݖb(4Ns { J&iB>"Ȑ<`BC}{5Rzuq϶vNp8%g'Wt {@7{BOSx0^MBE>PdGKq }/z8Z]h{ c,Ƞu0,| xnkO"RUx1jt-|7@:# w ,QqHhI8Ẕ́FCH1ZG4&)3S>Hڪ7?Ddn]l~{p:d }%Ԑ?6LW@p=@>x<(IV`{h>*;UA jS=Y1wR`=>?`X3w=Xɦ[й*Uu-Fp:Orԋ1t5ꑔv %%Q%HyĂ$ X5f; >OeQ˘Ȍr!1sz# ʑo' ^ƼHYz _2ϙl͈8sdnzM "~/x{|h1jf<>ѱwZ?gF7Y`IE;טtM.8b:!^[]FR'?ߙUcO;LrGYgER,)ջpq;?b[NSq?&e fb\ ׏!1٤HK#tc@*'BX I6aQJxu 8R!-Zz49EDImm~Jbd剖R˹<96q-Meͻg_f_ߍuxi -IBqW&Ge:~8ɦk5 ڜ(7gܠwk(IMV,7A|w#zlT~RH%*m +I17EH!o -/ƟUVPzAW\|6gLzXGˢ@ X5Ю2(KvCe Q=kX`*]^μ!K̷Ԝq[Zrh*F3p {(m}Jy'7J\CýPp,A+K)b\ kp2JV[/oePR@* &&AA+L.}#{&{T,nnYԍBs\;ά1583i^L[]JOA\]SF8 ԨRG/B_9呱Jj E g!UEFwQ]Ͱy% -IU%4 +ͮo`ȐOLT,*poN*rAs5۱|r5/%t3.r,iH!l. ѱ(kAA,!}F+DIAɗ}X::UFLs[|IS1aM^IkגP"dS*衜f.on ?oL3ﺳ/5TRVҌ ~zϖHk WBұJVkh|!$C 4UZ-)v;poGҏ@cvmR~,އkM8o Kʊk4o\G<𾀋 d=\EJ{'TH\D:@_/fErnyKpUt+OEJ_51O?_ӿ9Ipf9f/ bVQ}wE%!ܸ )HhJʥ&~b;ss)3b#&JHi}䉩 mzEjs/41M"^6j:\:wG*nQW}Ȝ'%e?:Qe870;ݸ,Wy=vڅ ltT)wl r&?=ٓGzFsVCPVA ҄W1FvWf|{X[y>︃M]t@x(tJ}Px">i}k VVmial^ױ~:NihvsL'Oj# >ݓRd-| `| yPzgx !4`u,<Sgp_>:d'ZU{md0W4bg%=lfk*$s0E vvZ"I^6xR\_?pǯLAm9 qnbr/whJ7iP`yAi͝,8K6 n˨ :M \Qsϋm:IchRs +6d?S.ASWmti㙌wi )Qn5& _#,8nŎ]ۨt*fիbF/H7P{Zegx,_ǂ",4jZvZ>zBϮrKq05ߦ_zc@:v)7OXd? _W.֣ğ~EݸKV[Yjl٘ + zjE:^ s#խ[qbqsT?g$'e_u,؅] nle^ M3Vs( !:$٬ +aB47y҆/>W%1h[wIF'MxNijĪ8#Z:p [9'hEED".z*9f}/hZ' Lk8'5o0FPba$_Gx3 k %NHe4P=dPH2Lo` } "?Sx1&jPWJ/J?E6Cܱ &Ap- f, Rp>-Ƃdu}"9N{@-T;stE4b$ e+[9< 3CK6PV1a#Sf$E;(}eqXېCKEvuB(drƪQʇͺ!gS[ZeFcb]KLHR[A&[kCQ}.S;1qζx~='ₚAb\QkQwͻ"ѵ3lÙ--z4!j=D]L 3@%[ rϨ>AZ"khb7c tVF94~c!?[ɿ'1K2C /z;9d-gfi>U6NHOl5)!΅snw2Te Rp%Ⱦ<);jLll$]Y1La֝r+! };#m`4`Y3:YhL煀XT9P[ܡld`H&ɩn4v \y[=.fꦶPK *"Pu4 W~ \ ߩsDYzk+LHuKf ٓnpP/Og|@QS _zZBBj @Ln`x1;+#O`5 ˸D)1G: F@HYB ]E^ ݎmPɬT#V=…L˶}IX*1=|s98`㨤c"XE$4raЄ|Az\?x8zYg&g:;Cs͏=7šTzV,Q=*o(?D1G -++󛳏n1nf!w&Ҭ(&h 0)- \ٞ:C6 A@jE$̟=v+(4oBai#x+ ŵxj 2,K7Vv8fa~)n@jH m7ȪbQP;LW~z("S||K ?Ez˹?,zpi_%j@eV0@z4F0948}0{KsR|8, `4ەJTR͹.ڌ&NY_x8ͩէZ;PPX7rGDS4 )(S(oOwjrNMb;+XaInKUڊn7gz5 IMz~8pAvXԇn5;Ya^*ן 6 3Ŭ8Atɋ@E4Ϳ", mcXuklf_(jsDв9'I ,(fX#kIkAφIמq dJiKNV>o)Ҥo|a@*:n6JyX|uܩe6|labc=ꆫtkggJ}"3F8!2 nSC17%By"ZR3<43}*! 4Rm_B=#ʍg )kT6! pj /7_A08ػ6fz(wElIn)Z)5=mJѕ܏g3B}2K1XiRÃF mDX;`ct3Hpb踪w9ގ3ۓYzl 9X[j = @m ̷+>^\ uXSp&|.ӌ, `)'xCs ~ D +W1g>_ Li_E@O^iSPt5gESyPNs*Jՙ6eJnHSG6so3G9ٮm>2{&=yWeE^"L)s}w< :3^a |])mI98a/cX$?Kp!!T0~0d/FU2N'82au~dY-d?#ǵrsa_,TPxsF))'1pev#Lj=@Z.(6wtM^,;A^4L a+>׶_! E4BƠ^ce<[h&4|ޥ(KNO8\σi/]ifDI b܊Dk)VbTaqxaLpB>s,uQьwm3Bi߮n]$ qbi9K_&.3w܍&4•9SD[WsKQLaJnT3)Ly\dmY% >~>唹nF̤z}6{Q*A#}+P?S:bp٦` ,9>!fvTԼgy]["sPWood~Yt.;(Ah ě fӀ;mLb=˂-D$U=W/8F! Ďϲ OD|snAP<`p1x.?XI5E:VC9#;|9$rJꋑAT3L{y MYNQTwkwt`+8(y I$Fy}AvjrV¹Rm9MqWy}\/^]Kbnf7*N!2ݹmLQC@LDORb\3S0$n ѪO^gAGB URq':IR{Ԙ>BW Lkw~!\;.b wػn[ "BG˸5g1dl7xn"ѨeDmJ@tIR`;{TE܍ۢx -Bo"&BK$|m 9YJ*x#CD3qi]1kۃ)=Xk1F<=X+ *eN \aVlf:aզe:9z  K@PZQ./)qɽm*ѫĥKfN2boZOyl$u̇`K8,F'hrr!!_jڷ+?8ǣ撽[XC7O/n*M}"ǰd,jPc'\ydss+]Uit~k} ś3!-G>`1/l_Mb3(o8<?rnUK8?aO5~K϶V1ݨp9?ayCK*Čcϸuct ׶`}h;؁>qYVk+]'A9! ~񹙒k{NJiq-n \-;}>BG&|?rҔE8sȡzp ƔFFӅu=wBaRRK ( Jh_Ӗ^abSas^gMT)0xNd8V-) °an _#gau =限͈gJLl,LݞkvE,I NI(^p^J:s.ׂ|LuyPm֌ 6:Je}kfK.0-Jڡk$ȿ]S(s_EO$mH[t] [ :Uo՗Lϙ+IJLl!uDl'q@9cu[jӡgWO+45SrF@rGݟzogw1R0Yb㾹w(}wp zy=!Pw(f` 0նrJ'*pC!ۥbycĢN. YSyzJeS_}:̬8vZA{i2kEbD]џ=?>,5'Ղ~*4O4}`e_ ^l?Az4 ,XxP\,ϻd;~4!!x|TP_31Vyd~DS Om@|,vD"Ii\ h7 .>?EHԹfͨwk#ATl|.cat_TV6ra*WPN `B_y"~we7NU+mӷaLPv};5K %*ZI_ZZӫ?XD&)1[FHcwt&Ah.1͗:Wt˽ B^,:nOe]zxLK l48iOo)A;gajغǗT]&Y1"I5@k3_4+ >y[_o v'abvV@N wQ\POdsȴC9ʃĉjJgO^_=KQ"ʃ{<ƝxI6_p=k_ מ\c)5?(f~%}_1p( IMj'y6Gs#դaA3ۊI6PI6yqFI^;GmF҂rz5VZ*wUzdcԣvz»r%0p%?L@1Y/t+eJ"L7F|wmLZ tV!xee֒P|Gf #"M4:qL\K2"[+w))D[)ħxs f|3i!FD-bܼ?~cU{.r/r aWE|*}kJ;v P̗rߏz21B<l'nX;a+KvLf8S,&uN` V o0SB$4:Xu"QÇ)U.6\4X\4C4h BٶtҼ"& @?h,$\eJrׇeilI]6"Yx6]+Twr@cUruo$뉊q0zБ+{2wbTAb7nY?AGwW'7j:15>8 1+,]5eztͳG)h24-$g7;I~ߓlFRM +6b33A2`ȣ"9f8ptx?5(zyP<WeP 6`3U^EGHӰY"c* ,3-͏AђNf\.}oAYNdC]''v?c QE^ ׭z:%ټ2mPͶ^f% ;i<7?$>4QΑ&(^oU>rZ4SbtYcy]Ý%o?(LW2\\<(5z4}뙢Ur@7;^Dh)]Ɓ]YScGKԑ!B|0O}=xmeǻi0w/A!.(,vːU.- "-ϓ$G8r~@#4Afb3p˃ gj.l$H 3 YO.[łm`,!}OsG\$Xꇂ@ӇRb}id#(~#Q\R IGvٮ5 sF=~DϮ]B? izLḒcgk02v\+) al7(KL9QLޒ7 .RbT5?χ}1jZwt/vH~$!1SqRz$!c4{1wsi9~`eh~8 L;<+gqkf%2#̘3Uj40]šO,\9}Zi(A7J/wFƎ+gi#{FU CL`KܖxN&*m_>=jc6fe;ʺL Wkd pj 3d=rn0-Eo3% @갇k|3Y |oKDbܩaEe9ķĢs "ocפ31ߓ OBFn86d.{Lxߠ][GVVx[Ä,[tb(d Eby0sVζBK.zUǞ}$]YpX8p qH+WHGT_<;f147hcω"!UPװW:XXW xET_Pu3!?tow:2F̶!s> .˒GELeVd?z-vFP*Q=׾P -Sx [[̐EyǪˉ 4;:q ůœ 18n[^˺&bƭ ,=Re2Q ! ^m`J'uV Q> !R_m>W! `T"ls2aB١K`FEKKuiI7/UnESeD:여tuQhbNLvH$·{WrSn<4]9OUB_?qW*@k#i 2XlbZT帿B!4\|:]NsĩZr gn/.nYyB 1/}asmZ[++iN' ԿIDYM0 cq?lpeKV uUǹ[7nF9Jy@).nl>4|7k缧tu5V܏ɍN-R&.&;z _tŠs&(B 0rcE2<7sӛipX0QǏb۸? ϙPoWQY<+ZW]qJ*D3= aBrYQU(bNomO?.o-Sϵ[~i<*qmWHN;U'9Nt!UJ/IO&#/izkmB/ ibC/xW@~zo6X'Z* _ I.ǥ u9S WEVbeCQg!ȷʎ~(99F칸_L@0R <,Ә1,Fš8 WX9;b4ǷqApfK1)ٔiL%c9Q);98q@bDb="8o0])ZiIg3FL k<"X`JL5Gm(Bh =m% BwxxN^ >4+͜ੵglwZIԆЕiX7.%l,ނ7}#i%Ct,#/k(V 鿈wYg8K{(SHJ"N:,MBbW#)0-{Do3)S(V Nӛh{f#DmU8^ ;҂Nkn H/Gd*xjb27Ճ@L0od6*Ғ \*UEȢM@% ÐE<%5f39\3Wiא(^<"ܟPű@" n5kZ"\y{"O<>,"9'"go>\ O?hXѲ, .h#eH̿iZ|Q:AK6+t[z85>>SnPj͘b{=Gm~gUs$M7;NE([`DİD˾W*;Kj)Þ::\@S~]bz_]6}iO>UBy6njTid׵Ch,|zmU GRo>L@8M2]z9H^A2D); /%y*74c̱}PbI<4 4$_o470HpWh-c F[и iJmB 5*;XȈmI&6io܊/UojΦ`O {ߖg@Я㸩n99d(j 8m+7])??FN)[?=?*k3̑6 40ZYxQa]Q|$~,{RNK}'`mlE/o ‘KD@~q4Ϡ}DnVtqoJX桥 3|- TRݡ %ɅV7O._Ln:ogp+*_sˋdKpr,>'G JPdbY5`{? FhR8#uF)A#~zDLe}81($ N)3mkϭV槶4D y˦E -lZD0ˉKs3d޽ XSP>LJމ4"iш;|Đs\G+!_b^-'AS;f#:IARC$ro6, !dJSdب46hѷ%oQaM ɼ,dE_ʯLo:Hm`-m%*V8@Fo'ʛT@ީ9+?fant1w "rW`x|ހ~"`s֕4ZMVycw_)E).?\u܂ $DKDG9Aɨx@'M>:jbi#mD-_논"g,/Lƚ&GB1D/0%_HEY>X8BSr IdySi.Iiv1K0cv=d)Z`3)|n \*=r8{1B/i-~LI?KsBuHq7~'} 86<,pE{/k/Nl .0$BEV v+]|PzQk=E,%Ħ:Q+OB44\¿vl k~xmM (7DH8=\ԏX/jɎ_F1hL%N5z88 hza'ĭc`z#Fltu3{7 @BbHtWv) EAjK" 143H!Wr|yFBKboL (W덇Ⱦҧqaո7NͮYyjTUV+3L} t^5kJ-PT:*Y$19EdD4"BO怛a4Ǻ'REٖ.ӌ̋zT8v+ +8B zM 1/*/q(X>h;yM" 4+mX*`1$B)j=z/ Vԇ<] 53 }dlQ\U{H4~䩻 e爾?YFZmg}Uqz +powVÁ,YhwυG>'e֋ BN&0Z[Y".-AA5;ؕa""'s(7s=(ι6!: IVMz.g}\brEB#-m)%}JL{:#R愮E0 ޏ:-t$3fմ0 c={;r0nT~@@@4%e)x=E  `hR]*ou/73',B`ގDH}H=QBsO=H}:+Hu&(/G9 MѺmLHGd |HFϾak}R+^=.RA[`z|/DZLaΐR9vS;;hSwT.L.A('jZa JL|)8qL%ŹvFj'sLwޮC>. ߨ |*8mv6gKLa3OVLeO":tDաASC+ AbagRe @ljTX2;ر6iAGY#:8<58j2S.<%hT7n_&|cV~#-2m&2 [&e놤ºqg}G0zR9≢(~WRyn\EO aEf^ʂ1xwϷ7A֔vc\2j6A:BOt~4UAD9B\jGQV:)I}-0 Ox.,9FO.xaYWw4̍Mً9 6}np}t@C^1P@ )< S`zW{5\zf)ƛoz>&dYM(P=`~ {n$AI]PQ3y7ݛ91*H^qͰ% GEw+k10SxA'>a^HcG]Fg1ZR0AKS'ijU %Bۊ"'_dT,֑l-}٘O{W9OV* ]FrD9,;wdۘO\NP‰~z*Z~f8!,ݽФWԥ+;:7D3-:3 LS)"jY[PҮ{w,2:m*ӴԽ 7˙[ [pz:9s(Q`,kv3%7^/V5d \h̡A;*eB D GAv?@޿j%YjňB@"4]+4!2bu̲l^$M;K7qCXQ /89Br.Huqo](<84 q|[zcGܫf}2WnuJQȥmK}CX,`9yQ- SMűwTeՔY(tCnZ#JѾ0ItTWm {BSlc]vH\A]r*̊r6);B[ 9x)qyT84`Ix%,+BGjIگT鄾KAp.Y6n9T4$[wc2`D)vG}}:Vӣtt8s @x'. ҹ @{#]C6dLҋ-G*+'gA t56q aqM@ d䚈h$LSLg3,{c?*; :8[:˔'+ t[td$0ڛ_Qj{gɁZ>ЎK '[ V: D^&FQ?<kd+be>PxY>?ś=r5;$aj|@dEޅjՅ>_aH-"{ 92X{oU*}zd퐰+P܁bvRJS୘F2+J>E4F o3wyi_m{C-KH76#Ul)3-6 3 F`. 軓%N]w[u;]r|Vfoi:tqSwDM(\Ěʴ,*lſx !^RwG:!^$PBD7n阕 -3:V=|Σ&Tf0s/^k=(fXFa&SR ;}p\S't-4 )vÏQ ;Hzva Lrs}Y'qG\L8Y1G@*@P#5v "rFdϓ''{Rry;LŰ]0 d'oQ[1߁' J #!T-pbisSȎ'PKv37I8fˆ>J@j./ao]X#Ǚ(ns%lKXoՇX?fpT' \fپ{bC%F%sf@4ncTߣp5aɭ !re tW|J=1$cˤ}Ok]|1S8҈EhSZgRZ3A7K~hkvF/E3zt@'JwY=Ʈi@@:#tB $W7 ۱L_Dp~ 3NP:%K/V]$MpL8P08ꇞH2_1#W:'}G*bԪ)!QO4߾.5laS?LaTD*ē )p51URY8[JeoՅPpm>W(K%A(h d1m7Aȅ hz.&Km;@2&`,\ ;v2^P1^󜾦9v? zfǾmg̷vs-7WEg;AR=/5Jx1WcQbf֍*" Na=rN, @7[_0*^r yȖ ?U`JT!bh>'#03 :||dk42_ZnF\,OˎEh%)ÿ8R Qi1!&lxEYluq^=:dW&'2Qfï}M) -9cJmhD!i0 ,j`d2B@N] J(їnoWW \HL d5S* WsCe;餷?Z,b8? !(DE|jܼ^(H5w}A' 9pqW^^hI/ >3Y>ӗӥ~3V%V=q 7C`܌_ w@yc Ace*܆ ]R3V-fv5co4YvL?ӆ>6.>B+6vh;lG;^)Z_ņƔOVU(@G.A5%n5A9Q#dڂ|XKR~+> IH Fgm@*Z*Aܕ*hcɟ_Cːgl@i`&nUnq`@9=&":Y+䠧^ۇ^% R| e'b*z,2#!OPc?Ke;\)ed I+ 1Wϔc]Xx: *DZwzD WaՈ8@L[{uPGWc6rfO{ݭx6ʳhLeuA|jh%lO'. N.gգ;ybt/ϥhG!a !2|p*&Z=eH$ <ԁs I̊)E;:HK?rGsa,펫^:m9sد%ȫU{pW]9$=1ׂf+I:0٢uQ\J(}gc,bfZ_m0YE}g>aNz, * vciK!$ /y7ɲƏZD "z5y.i\=$ֶ*Lu=Q"a[ Wa> lh@=˜Z;H|p&M򈹽Sb[`ziĤF SWh!e[ $ߍWPKw>a/k8$R^Jj7X'ՐEڽH=fmҎ- oEHҽYIҤ2f{`RE1Uk ź8QILt_YUUdS8 65Ga^*7~DhGi7!8@0 %5:Xd9Fmwkô VSb\ڛ !3r`:_tAVU6 M}/mw2*yc=zǵ1aF^jtTK C~2 Gg]?Ste}Bqpw$qujt\;Z|^^Ы m[|T}7!"MxGT%mJ9GN pƂXRO }Cf\ǰ '~27٤kJքƃXs BNMߡeMӗXqdɝ?AA0حG)I:x\x>\߰q6xmkQ9K2"VbߔD7l/@ Ddd+:.867Fx_*{[WN".f"GýCoM!la2fBK T1'Ӽ7)SA$_%bY]v;Sr\IoƵ yq|nKvU=Ymm(ޑ2Q_#3bXf> h-qG O2_uB+㚨GݲܜA)80-`ezVSp#n^q)Qf#v;@v0nvӪ@3[]n#;+x<܇rtn ."(ToEވE yo7pQퟚky伃ҫ m_QEi^V](ωؔ2[oG4MPF"V/,4ďaL,k֏oC{ ] (URY3ޙx3  ycPiZŋkI;KW2IjͿQLE 3ױ\IgΞk(&l棬 1>uqW\rYU?,.@ǐ9'Ճs}?gAWVv{autR Ruς# 0;CR >n D15,LQtjЊL |o3 pMd\t:\7Ijq{P T<׊QoK'P\8:F o)´&oCfV55iR):_P"ZSaEhäUu(ݭ̬>F [He  ieөCp$`49ri<^ I8$5CӢy8Htxα^\]F]I4~C;㨫X q=(bo],zJ/_*dii>@'l^@nχժkeUӪ v0z79Gܺ,b v ENwDZv مTG"gDg%`4d1Mr:0Iw][S{0\RX>$eT 9+=uԎۋ;z7ϩqģH -QO5Y˶iR]!FfmQqN2o;qp/LH/pJ<\B%.T,qĉb3F9)u!46nb b5ZoY\풂wxd{Bطg%ڈr]ls9tYb} hEP.(N`AYUq0 P5RMxD׀I2Pv_MMEª G&~4W;UY)䬐C@c3O0C5:F$X;f_B/*u{_x#P KB%r̔QMx/ lwM?k~D\CbAalx9ˀ+6JɏDwlTWeVYj7P5AheVؽ3L=M.Xp ~轟h4=K*5 R4#r Ii9F|GC0>)i?3 =[XXIJoO<_ /3jSP.0DY͓*q k-#@'l$]rAZ\ 0x=,#%nH㼐B6A%sFtgK9<0xօm^yg9I8i~aDPAk]wq@H#ͅ+؛s ]f~q] 6_]AviU=@*H9bK{gh"UwhSK)N෇1C$=_g$}&67oBK rQ4Z#Ti/?? 3&'(t_|%䲽ʑž(ϦJ W~ޓŹ¢ppo!a0~2z9w=Y+;uF U ozkQ]LcΩDW޽pL?W:SlLnٯh2[k=VTm&CX^5[@ۏrs KÐ7%ɤÌIY=Ě bpM@W>zTc.d^TN茢Z;KG.p|Q>n& :-<ѯp8<-Vb^Җ+$iP68ʕaEH `NgC_6"yfB}ˍE\Hgu*< t&EKhMgESI[څȴ`5Br%vL1~J_?.m!&3Z)\*+&T7#[M&STk>KnCՐ$:`p?Jī|br28Yu?"1(#E1jk9~nwX6{z$[gazJjX`Q+/v(2d(k `/5ap͏f0 k9*vPz@ 1W#K5O&+G&N6|]_OZ ye=cx3rT:Өd3s҆; ]AN=VpDT 5#p0 [( יQLv'`HF#d9(i+ӷ{>6g#aDstߝGqh0{^iIr’I7-*3lҡ"ZJ?|r2dLP&3?.@5 e\J.0b#upl2͆TJyS;Pŕjpž$guVֵ,3x;(ö"_%V(s5\iKۡߦ(07yq(]nMԱ,@poly!V,/Υ$5'Ah: >T~ =jI+mqbXd)EJN?wd9h'&ץMm.b(& ߼a%) D$:nj7 NT] GB'O+cVcFT(wߝM Bw̷sHoOT/J'k PbGe"]S}S΄r ⋖nBsarX.1X5XTG1%V#1[*)"сH/5e%s8)ݧ۴Q 3.;@'YZiOn4JJ֣E֋%þ6o,RUwT}q0HzC aI <Չ#˞3㕥¬\61T{`h'QQ^ۖ#Vן~ _ؽ'gM@|bap"`mLx}VB_db GA6uW+馃 8y0,7Z[I+QbJ|@9jW12 $L@kQfOAMeA)<&|zAR~GeC%1E_o$Y2oߴ7{_Vb8lR[3#QoCda " W `ԝY?(6>q1>Ze'dvRlBg'5ń1+jDyBvwTRpYs$9|{Zu3 `|2̦ԒplB}ߙ:W7ߧ)MXEY$8U@jzcF/ߢݱmjm^U(9>W8oKr ,f bOq\?ѡT(.l=f`qe~ &bkkzT-`hՓo0YS!Uupu)pL$Xj>q^ըR !31ꩁIUSڋ18*09 wQ򿙸~ʓmCWy`}kZ<; ;7bT&&6I>bo]n9ϽGO WN*lβ) \Ǹ/LIqbY_o]_IU ~W[O \jT2nD'Q(d4qys ἧx$3?H^3{Uqzdn}zInlBŖ(x:ޖ~@ft|  5RnSR?H%.D-i)l,&XI2nJ M]jUkE /#, &K Ө1F }_м^XYIw4xS"lxhE u3!>9AlOr:h|_O0]=ў"ns2U7w?Oo'i_QJ݈zϨS?DQJ@X&YȞT[^51ٍçK*[jskuGZx ٩Cb8nv*aO}n+)n ׌2yч u>63{4YH|&&kPj,1v(aLjrRCl%J Xy;dܥڨ H"&^%짼[7"x|.* X<;M :׭+p}?AwͱS5AW7 $THip-ONۺ-W<†I|yZ2K.pVߔ-׽v0B- ^#ҠU.l\!>'1N5 ԆWn۪;Gv&vI;2dVH9N A [nA 7JC=t@^`;{뻫ؒۜ})V{ Ie6~ >˰3Df{˪<ӱ?TVTo1YDhܨ?Ea1'֬q\C1[O*D桊ISWyhCZ âY8&Eo!X4Mwً?PѱbN ssU*9<-]^@ hxiH)y`9b[wb) s r'KO8SG8"< {P(oˎqSHw *_ӱsj|̽v4/ߌy{V P[!qjhGDcz-x[e4A>cQw"c2p8g{6~j(c )zÁidiKV>cSShltd?E) nMI~y :Ӥ PSݬnv'AS+ں;[#~W팒 y|Z ԚVkַ zdhNFS_D(7E#uҒq#nөU._wRl;܏]`G:R^awQRֺ&^72=)lIEq5-췈޿vAG1ޛ+2=Q/ԑNvRSiXF(ldL`n]aaQI;>Y'Jv*6O Ed:d?bޕ"?!slL4|ꨇEBB-Ob ND+Pլi}\/ڮʜM6] cPxkz%?,nhB(^;=:,ng3͓?r%Pr8rk24B?//O ׵n7C[\7:Ix}f 63 oDySIBqƲQn\dmlqC6m|YFyb!}bIf͔>FB1'>l\L`eT\7'8/ӏ?fW1c$0#!@qŻ'W9U/SP>RȅWM^gIF6%$1: u1[R:3EGP?tEewH2B6,Q<,aԌ%xM# Z F_׺)Sh)ўI5)k7#k[U|G*py1Fχx& %ףdEM#܏WNp/Xf(K!9+?Oj3!\)j-%"Ŕ imGe7QXmڈ}?uYx79gY*n-̚K ̲bm) 1IRs/x[Ywn9qfe隐+ɍ}ěcm^J1:~20; Zb)DM4Γ`Xy[s^ZUoT[%aΩ,T.H#i $.az%gƄDհ+͎EM6ʜjB^-^p|p%qһR':oMzYjmL {lC2p#AW}ezMK3 i>触w6K G K!au|^B3'DX/4HݐYƶ>Λ BEOiߖq)Ǖq_mbXtМۊ/3T"i#}LcUmyşO\Nr0oǽo@p4!׍Nȼ:b{J@=}R;ZAz-/ND=Hp6@-( ^Hm !9mcFNb OW;a_/toG;~KXJwIOKrBk6`K(U5-={F܈ :fjW=^^rZ䱞!=OHų6߾I^;[5U. JA bAX/hr{|>t6ZOuydjbګєd֮ /H`;Ke]͋ɭ'bY2xv1o51ƀ&Zp@2:Z΂D6\ a£'~ضQ~4= YZ {}9J~lxB%cW_ [I  TtQ׾J6ҖL%4pTz؟ӬBG&֔xfk M%HnڞK Zƻ?m.bjz~Am}R_eJoj-xrji7;^~& |YM'Z kBoWZq]8=LYdKOW_bnf~ !DB1]Lo# ~r6^I3gz$US$eZ\}<-Է!1!K^CU̸?;oMHѼn;|cAyIʸ$8S_v1::s]_hAM)CqP? SY 4 1+QGX^?= t))֗?9X[Jln(jB1mih[E2.C5cӏiX]}UE6Rfsx2Q,8BI:kv T.Ō@8fLXp參eڊum%g3q!g^=</w&Y swxLhQ/M}wi STU3LO+99{Ԃ>@Z$:ܧ0pOp34 M7Z knDũ (Cv_o$1)65l$^]@2:3:gtmF[ FDF9-`Bz IU(U peTqk҄]6[rYPV1ugE QZ nBrbHj.E VHSj(>6Mij7   "=@'0K 1Qdz$q Cߢ_3p<Uh܃ܓ [ p +]rܩcGMZiw+> | пY2#m<9x|_.YOm+$0G,+Wm1A󋃃tmU7HUǩR *XBΞyxhMkք^SBg++΂!", uqmh},G?,3ƀRрHw#iHjfRA4?։tTz$euǺ"c^ ⴚ..&~ٿnCb;Q?GeA7,nJomlԋ+OZjPe ooGDggZr}1UBij| ir*9Ob;߈TS˯A '!*C-i8EdV,%N3~첥){v c#w˂N<sx\ *q`U`nd~)?AB FC^Z-xhܰ$ǧCev+2P)":Ԯ'i T ?Ud6p0s2/č^J!xȝ=j}8m?G 7喷p<{y2}]Au_۱,ؖ9]]$c$Ccj>GʵݵxYֲt٦P7-*JQ>{t6貞"G2I'ʌ gvXPTCCb #Wfݪ{7,&z0P6]JӍW%^-)b?Cᭋ*O'oQZ2vd,42ӣDڃJ⺪/@o9%LCnWGRHN50=˂xaICʃc,:8hj;LNq2g2b|Rgiyjeh5U ^t 1?t@`~"SaA2;s=Hr9[Nیm~wRwS1(ֻ SjaI#͂Lmf=VB-ވ\V/@Gn!KF 9t 7&tԹy̴ !{=si>WOYn!I T5Δqƌsjs}_FH;5 X,5\*HZ_GҮ!@5TvEkjNluS ֡P>2[ۨi|mi.пRrJ NʺK],iJ(QѺ4Z8f#0L'.a{R 0|U\ME_̍L h Wnٴ1ʉ0ih"=RpD>[$ԓZhT5in T±nq"+D7ia@JgWdg /:quL vLg}Z9$RL_=/qۛtQLHn9~*qC1>ۊ6oKY륳ﰚ.<ܷY7_!V(ԞuI&F&<2."($plfޯ*{@ZÍ%OdؙݕWjd fM2o-%{MBQٚww`GbGi$xЂK#Ӓ<20?z7Ƀq*əkD )8>QNF鼗E5:%"{ #R"G5‚ز+/mQѮN=N2eW8Vim i$č7!x?~Νh|p<1>d N9VNO㠶#@!p"5cqb)m'~ nyl>XbZv@ju& -kJeqYhV:ԲO73N ]C_"3sԔC0 ?ȍnAJ~ VWQ$x1?RVouMmHZJ΀n RzDڙG-T}wzs:c˹ a`@K:YCwf0NbܖsZ]UF;E7@Ni6\ȹn`B"Ujp6Dж̔#1 IG@]'㰲Q)䬦!3s=\/bф~2:&czնBhkk2 3.#cpL eZȆVmw5=[Dg .פjm3~ tX{22V1{P0IM'2 ;2qicί|8\F=rri(ϓO$ BQ! #)h[d$뷻R"o)fMfmޓq#XY ** kn.Ws)U'.?u?;%KDib1KC]U +U1_q 6%zpʏl$#B 4hM}irR\6Ba g.@ YaB'U?)-Ď{g}F6Dr&S$cyή74{rJ.?SZC!J5'$Oo 7f@I4L:or?ȴf|CޏZRoQs}Ş8U$)iHyޞJY1:-MeHHw\wR ݩ-' [Ѿn6qНAy%Fؚ]tbѷ/bq E ՒNRu\݄%mqGgH:LU#!(FmU3GnVQG&u>=e%7f0\cJP Rzn^I[ޏB c<2Ht*@o6#%-JDٴg*%WBu3Xx=ޗ2e輀u>D{E\\'a =|KOtozG c>wSC-/1( dsOYǛG([HJ[͓l=^L/, K) {WM`)Y>a֦c^[(@d Y%aT6Yt^V6[/H$&3s7d@8f{" 5P炗X톎L+4 L@ T |FNm&Vvq%Uc}e1u3@d33|ec ? <3ߩGۤZUКA4]MAu]P0.+YL R c$G%7WG1D'bvVA妑 H-PޤΜPҾsŴ҃@o;~b [P^MkN!jIdBmL%A1cɄuŽg*d\#,aoiVAW TS mQ qha><%r-#~w&$s*9JCV~<'p<9#L"qqgAmpfJJA֮4RDX 4,Lø(z.z+;)f쵕joqoYMq~wa=k[\yp^TOLrh1<h㏋koy'xo_,-U<[;G] [0PL 5ArE.hh>|V De~L Fb20&͍p*[bf{[8`׃u4S3wi4Jy~1JJ9@$B0[$oS>';ݴhj(@(p< m#00pC[6BD-(,ҙXFRƄmR4t.lEC'v=ܷh뤕p>@k'0:@,:wDG ccuH1 =|2i^ovƨnUG[A3c0;%BxOR"ҟ!Yn eqٻBJOұb_r* UJX`~Y1S>RЏV qJj&R(]_m3!;wH)5*RQ>\m _ 3Z<14̵2Y(7[1ں|D2,lyj퓖'6: r eA{$3K[=Ђ;ѳ"79t@F`srWk|B4GÈ" X/d$r|9],g=yWHl=iw=! ;P,+K/ Ĭq9}ѵ. ,g?h]9PM*h㓾eL.[ݬBT8`Ҩ~ݡ1E&Цb mJR)k"#%L`{([v( /ڜS7ܕ+:9 G$Y<9]7А.c* (yٝП#rX[6PD+^^t\V_O%R6@[NH׿]12 lH[ԭ 9۔OZp=8a ~$yyNNP>ԫUrE>>j.gꁈ&E 6 ]!D^'ExYt>;= HMē4uFdZEШ8Paoazd!TJUGBS Ng{~D 91a]Z w@ '>(o9;l|~h!{I+6w!VC[/b\VJWf?]sDL$g1Y0B%c אz}m!0 `gDg#^=QݦC|f*,}?0p'0W% .ct`:L{e =oƥ>EK):xX ŪerE뗧&r&e$TnYONʼ%n!Ca4&hh}^$W"w}&a$|'RM%yd{bIYTy :׫ȑsq} Y5f\>%%wLH`@PW;>Dx%{۔8gl(q_>R%9Kn 硡 !y؎ͻk+[(齻&)by@,s(%IF⴨ZV+ɏMuP,VN$Ƭǫ{(EX^+zՒ#TFP( ?[.6wt6$3O9þ%vL=㗬+,'X;j~ >WTuCu9*x6IDTH5B;ޟnwzTl{X)2V=|*ld|{zW fOQȜv _㵆."Ey.EwB6&3AF蔏}(RLY9ؕ2aJJ*ȕ34KuDh};G?Z$y!Pk׿0U 4!:;vmfu0uI=ڤOy˴sM1莴Xkh'?!zuJAcT2% .[E_,LD^Z+j>6~QZȝPN?٧eR|v.ӈAR.pyᾟ^zѴNfOu mMpx@,xxI?+aVcZy\@'5Ḳ!4Uz6x7 u} Tz!y ۆ>oiϴQIk?%25&2x@챻N2cFgXP'84U_yɊ4vAq[X! rQk-Iӕ5l)6( -j|VʂUJ Yh- @l#๼y1Q T'i]%tRgwcv- Z7%mf}!".t/"aV] 4yNVc&FLyfp6<#uVV9+MET—*^aT3K1@.x{oXA*MiiBu9^vX)-m@T~ģY-}GQTTܿa#^  E`$34=-uo(o"Cfh˜ʔIOʚL[yh3<4ZoƷE&=\q2/`~ŭ轨 ur¸q5;s56~@&P?3;C.CAn*rruF<`gI(w%,׳%&-*CjL幃DΞ+3opҮ/5ލ/ɫ VEl.yzp 5s@=bf0f0HgI{c -}{I~^Sq_l]/>~. H'}W|6{;ԑר`TF[{V es+ҠEx,MN9.U:I!煅4MA CGp<fh6.ZF(-;}F ixvkYK}ٰ1BJq'ǓK?_+7D\vec ޜi]=gICb?zAjG-aA'7Pl5rdW0)`r28;kҒ/EQg4s9AqX .5Th QgMy4?kM9PESYhl#JV\GqQ2<\jۂTy JfKJ ?zq9/Nll|.M&Rx[m s 5md ʵ9mBHqdx6o}-jMa}ٺ c:?G v Ӌ®  ܿ"@7 Fw>zʩRQů2@m}jL.wT%U=qS2JML>ʕ)5J;n7~0aG+WGՑ/ura C^=а# Sޅza&IOf2"̑_D2|Ү:5x2 )2NBi1Xe Q-Ofó7|kàp{p6zAـ}.R:=ˌ|>fto{b8!u;\d Hq) }\F?/kK->>~M[ը3g O݈8엎BҶ`RSiۋK$-P3geQK"A{g LHY<c _^)wh)92e+f' 3#ҥ曕F`(ܽIn4 A'\S;XkdF}"'F)ͺyyԬO?h+nkR&OM͗G63x-,D/n[NsiƣWܿbZȂ½9⏭IN8wk|&[Iqa=о)#WNg\, kCK웦|ӧ nmD6Ы t͟q,H؈"FW54v"  `=rl 6 *;с0'%zpYFP}yx*)S GLuT ['k4#B1~4cjq)Z96WkI+3A8Wvެ/nAzKi 쓖2VYR5xixNۺ@lb\/ztB!tƸ @H ?׶~ wMͲom%Hկuj@O2b }wLPkf~ *~2M{e8d'[kڦ1'[e:Jf_`(5TΌE5nfH9oF[N thTRqNFE`luz|u|CBGI$Cy@gZ{Ʊ~οea_ϥ&nU#Ssumebް/ⵠV׮pY6e$-3Zb6-,B冭̆-P@v1v<ԸE O=F"SՔe6hҠEl`;5ئ.B<{!4^1ٿcS?-]`$1P" Ikc^k^/F@ߦ7ozƠdUt̴/HF 5t{>B"DE``bľ{ <$0N& q#K^9[ \ZWq.GHoRd~;Ix(hDd>ŭ_-VW^H̋$w?N"Pg%acc $tJQj|nRN%XPnK*E͵:D,Q4a0ie+F/=IinCaƠy+Ư։{aF F;D}E0z]q*@i\ؘ*%p8wpZibf9#UئON|5@a;Ѻ1 IǕ$3`旒ni=@K"J8Lc]h wދ{L9"?ʶAG ?YEC Qj?ih͘Nղ?P 4 ®z̿f%~j@^'aȺMM2{A3iv)˜FKJeNX@zJwo$,[BG{*M?%It ,FiƵ#6, |V2ݮ /!ʁĥ:"bo*+rN@||44 phi &FC:6 y$۝lļ'O0V= -WB(V6 rЙ}?LLhϕ\RԺ҈ e5A}Ĭq2!5{2gO @\- 0 &>ަ((ц5ϲXȩfeXp hMkWz}~a`G8{tBTTx >:N'?ys 4#*/RM|Aas낿HDj4GߌR yțF$Ϡ-[jdHf}Gs]y]%]PhZrPa _c`g'XuDpcЍ #A.2MC䈤+/]Bf$ CA/.`O(9/H]Snd\{%U!\P;PWROry=D҅?Dj"a 0d]I9y/V5*"=V19k֫ 0Ewk$HNXeEp!C<{ Nh"ȃzGԹc sgv70aibwvCfKHsO^v\T@n,Wx (0B9ro 2qט )`/Qia%)L "#Ӎ~Ş\&|cijK>&z&@`1ﱍ=v $JU#2 "bZ"LAHdXY;$D߼=1T|{y0s.TEMHݹAX,hoC&⌹AL A= wK&k:i`(߮i+($W@+Mpi..+X(mGfx@&P#m2bu-7cƝs/kFTf܈%r8]rB'Ϙ2w k:!. MgjeqrnXWMQ7=Ѱ#Ӕi)ʽˆif^sX %x^SL^ AWdWGmӛ:>l]oQИӢkޗ[(XtdK>7[NviEUL3N h+ӏfWtQ3oT}*Oj!^_|j#1D}mD?R}YLb 呹Dg:Ff>]R:E4aWmz1WB mZwF9ŞVuM+peFJhȢ|Plb=!2nz󪠔a1$E{wt"x ]-#~c8'e B8t:j6X:5@#*;jF]O <\عxzp1id0X9<6&_(k@^A͓5,ٿK w4zT鮙biHhşl(QR~QW%Z/MX^H5xs=Q EnXS&݋w W{(k^G(78d?Ř$~ƛTJ (/'D6Fb+)FpںU&Y/=ԝ+Py4J""@@)>, 4H:+~\iW-6 eR)++p x"qL^u}u(^ ]#1n/gIspٔOjҮOJaYIRcOG/f Mxꦚ Ǝ\o3Lxw{mPFPՅ̡5 d/#̡FM0hs+V҅FGS޾¦Ui4ք1p+z^?MOJՎ&}ARZby*w&^NG1&G9DD@Q~>Ȭ4"L?bSmm78KD2+hsc[[Ֆg U:N}E#AZ -3~,x-h%|$hd;Y7Ir)F8 âJE$utik]f j6$z3.Gl#vyYY!ڽB̦ѶkxCCLQZ9D0'ݴAaVE)^y)@aTT7QBD\T"h/Q ޸H ߈84 c+u珋1dbXUQu*6UpNeux-je0s߂ΗhL|"apE9AZ{Yb].]dm^mՂuF?~;l|<}]Us}pI\nãdiE*-; q`ᰵ2H:=kCۉ\heTPl"<WN1sJr0^:FM;QwiϘUvɝ3riU'z E 8H61 oGBML\L?]"*8> úL 璏VGw.= km`-*%,eU,gBzsU?X6wE|S0Z0/-DU{;-:&Ha^Vʪpab w5q)k:b`?`-!`҈N%]N1Ij4)+$si|TnQ+<"k`1B1?n=h(lj}V_<|iVHcyq 6FqT˟%: }ogrGSHn@6[ ujp/;oujfKTF1m WOeẄ́ kG6}MtwzZLEi? A#2K [ء<3).1'R^AmrvzB]Jo$FpɈ:ޭyfÃyDdXÑ&dZ.#0Iq!Gn^)7\}/ݴ칲=FjFp@bp%*}͍5B 9qK'63,X/\w<#c4|֓#m'pl㉊Ibmw{W,;"ܭA08֨hz}O)r!qN JW# ☿+4s cA܄].Tce M4&/L+h_s|.X A7zPSKd 2:"+1K%rӼ;[6D!Ȧ$V [tr:m ̦-~Ok~ܱ al}5ꯓҶ\ꠈ#LF^4Zonf3oȂ|@`:fU+D@y[ZJe/Ɍ'T΀;?h:? 9dL (%#K^MWߍl`#ֆ*b'W}45[qWvO#ѹsYOH9mnڗ_n Q.6搝ʳf!2E=w2E3$Tc!G|Io6c`.g:HS="e*؏ɷaV?8w!ݭT":9k0TTBK9X|7Q%Y:t-yz1`&h#vbr{;(\/gD pA*F zIظ`AAl_){i/?HhzO_BB?9&G&喜ٙJ͞5i|LLRtN,p,j!G۳x~#~ua:\ QM1.lXa3z7@ɴ+P?ýՒϮeq):\Tv=ץn U˫|3~"񾣦g`cdwq>M%.\$-zdL.|S|A?ϹYAdQ{xM1zDC5OyB -rxFY7u;?zrk|9`Zeȴ })Yh`Bk^#2|#B".VM{/GRPeUpc6xB_1bA:om#>V4~1U\GpZHdP;m{)"1$@u֥Jm*9ڪkBd7>cQ.FO@ ;9l4?@|>Ec{ b$YQ$-GR[D894)fE}k'e09X2 _E9+pDm~ADEBY7xSM~t- )4{WW[ih拌>a呴gV7 DAqrmlD_4azRu-^qՙ3,:G]B/H֖o՚2_6yg@a>[92kXDk zW;=AQ:"_ O.=RHU,Ѷ sV",gF`{MlG`60´hJRIYTUiǮo߄dkJfrv}1>ٲ$29W64>HŐPU rr4iL_Ɨ 540K~\ZRQo H'wk|Ciᯜ;݄j+=o:AʿS8{J/$BHfFUTс0Qð$ ʋT-PFyCBG AJ*)$okq,H̖Rl֫s~c}L$%gY9v#eg<9uI`tdrONic*:$mnh</&jҠȑ%j n-+]ٙ5iXȿmyJjZt2{{&2].ݣg#`s؞J?N_ `wd]hܚȕWFpڢf T,E܍ ћj2{Ev/IA=_a8TBsWC p%C7RU '#etT0 zK1!' J1_е:ޅZMBF}NcWDνJFPڦVP~VTo#]Q%'.wR<0Y؛ʁs +|VecZ5{/TV躕b$++툾ɪuL$NJ9d%!ߑ;\K8@4p(  J-iA*Ӂ B5&D5MAxeѬ(wI []ao`wcZ<[MdB}21mK[-@޶to\N(S4UԢ;:m-icop\j6"vjw;>

    ʎ"mWp Cf,6ff@2O$ݴvM}pjz-[a+!#IkqD7YEE`GBZ>(pQpgX|1Ua4# $ވ+Z1+ EBӶt"KN Tg˳˝>xAY h$Oz)K۫:vZp<WYz@S0 ( ˺" 8WPN.W& I\8]J0 YZEpi/R/0000755000175100001440000000000012576333004011211 5ustar hornikusersEpi/R/expand.data.r0000644000175100001440000000436212531361077013572 0ustar hornikusersexpand.data <- function(fu, formula, breaks, data) { Nsubject <- nrow(fu) ## The model matrix to be merged up to the expanded data if (!missing(formula)) { covariate.frame <- data.frame(model.matrix(formula,data)[,-1]) cov.names <- names(covariate.frame) covariate.frame$id <- 1:Nsubject } else { covariate.frame <- NULL cov.names <- character(0) } ## 1-responses for the survival intervals Nbreak <- length(breaks) ILENGTH <- function(x) { pmax(pmin(x[2], breaks[-1]) - pmax(x[1], breaks[-Nbreak]), 0) } well.mat <- -matrix(apply(fu[,c(1,2), drop=FALSE], 1, ILENGTH), nrow=Nbreak-1) ## For the sake of the stability of the fitting procedure, each record ## with a 1-response is further split into separate records for each ## follow-up interval: id.vec <- c(diag(Nbreak-1)) well.mat <- matrix(apply(well.mat, 2, "*", id.vec), nrow=Nbreak-1) well.id <- rep(1:Nsubject, each=Nbreak-1) valid.cols <- apply(well.mat!=0, 2, any) well.mat <- well.mat[,valid.cols, drop=FALSE] #Remove cols that are all zero well.id <- well.id[valid.cols] ## 0-responses for the event intervals is.case <- !is.na(fu[,3]) # Observed to become ill fu.cases <- subset(fu, is.case) ill.mat <- -matrix(apply(fu.cases[,c(2,3), drop=FALSE], 1, ILENGTH), nrow=Nbreak-1) ill.id <- which(is.case) ## The dataframe for analysis is one observation per survival interval ## (well.mat) and one per event interval (ill.mat): rates.frame <- as.data.frame(t(cbind(well.mat, ill.mat))) rates.names <- paste("(", breaks[-Nbreak],",",breaks[-1],")", sep="") names(rates.frame) <- rates.names rates.frame$y <- rep(c(1,0), c(ncol(well.mat), ncol(ill.mat))) rates.frame$id <- c(well.id, ill.id) ## Merge the covariates on to the model matrix for the baseline if (!is.null(covariate.frame)) { model.frame <- merge(rates.frame, covariate.frame, by="id") } else { model.frame <- rates.frame } model.frame[["id"]] <- NULL #Remove id variable return( list( rates.frame = model.frame[,rates.names, drop=FALSE], cov.frame = model.frame[, cov.names, drop=FALSE], y = model.frame[, "y", drop=TRUE ] ) ) } Epi/R/clear.R0000644000175100001440000000056112531361077012426 0ustar hornikusers# Clear the workspace of all objects whose names don't start with a full stop clear <- function() { env <- as.environment(1) to.go <- ls(env, all.names=FALSE) continue <- TRUE while (continue) { nxt <- search()[[2]] # bit of a botch if (substr(nxt, 1, 8)!="package:") detach() else continue <- FALSE } remove(list=to.go, envir=env) } Epi/R/clogistic.R0000644000175100001440000001500112531361077013313 0ustar hornikuserssplitMatrix <- function (x, f, drop=FALSE) { lapply(split(seq_len(nrow(x)), f, drop = drop), function(ind) x[ind, , drop = FALSE]) } fixEvent <- function(event) { ### Convert outcome in clogit model to 0/1 binary coding if (any(is.na(event))) stop("Event contains missing values") if (is.logical(event)) { status <- is.numeric(event) } else if (is.numeric(event)) { status <- if (max(event) == 2) event - 1 else event temp <- (status == 0 | status == 1) if (!all(temp)) { warning("If outcome is numeric then it must be coded 0/1 or 1/2") } } else if (is.factor(event)) { if (nlevels(event) != 2) stop("If outcome is a factor then it must have 2 levels") status <- event == levels(event)[2] } return(as.integer(status)) } isInformative <- function(Xsplit, ysplit, strata) { ## Identify which observations are informative in a conditional ## logistic regression. is.homogeneous <- function(x) { all(x==x[1]) } y.bad <- sapply(ysplit, is.homogeneous) X.bad <- sapply(Xsplit, function(x) { all(apply(x, 2, is.homogeneous)) }) is.informative <- vector("list", length(ysplit)) for (i in seq(along=is.informative)) { canuse <- (!y.bad[i]) && (!X.bad[i]) is.informative[[i]] <- rep(canuse, length(ysplit[[i]])) } return(unsplit(is.informative, strata)) } fitClogit <- function(X, y, offset, strata, init, iter.max, eps, toler.chol) { ## Safe wrapper around the C function "clogit" that ensures all ## arguments have the correct type and storage mode. y <- fixEvent(y) if (!is.matrix(X)) { X <- as.matrix(X) } if (!is.double(X)) { X <- matrix(as.double(X), nrow(X), ncol(X)) } if (is.null(offset)) { offset <- rep(0, nrow(X)) } offset <- as.double(offset); ## Split into strata Xsplit <- splitMatrix(X, strata, drop=TRUE) ysplit <- split(y, strata, drop=TRUE) osplit <- split(offset, strata, drop=TRUE) info <- isInformative(Xsplit, ysplit, strata) if (!any(info)) { stop("There are no informative observations") } ans <- .Call("clogit", Xsplit, ysplit, osplit, as.double(init), as.integer(iter.max), as.double(eps), as.double(toler.chol), PACKAGE="Epi") ans$informative <- info return(ans) } clogistic <- function (formula, strata, data, subset, na.action, init, model = TRUE, x = FALSE, y = TRUE, contrasts = NULL, iter.max=20, eps=1e-6, toler.chol = sqrt(.Machine$double.eps)) { ## User interface, edited version of glm call <- match.call() if (missing(data)) data <- environment(formula) mf <- match.call(expand.dots = FALSE) m <- match(c("formula", "data", "subset", "na.action", "offset", "strata"), names(mf), 0L) mf <- mf[c(1, m)] mf$drop.unused.levels <- TRUE mf[[1L]] <- as.name("model.frame") mf <- eval(mf, parent.frame()) mt <- attr(mf, "terms") Y <- model.response(mf, "any") if (is.null(Y)) stop("missing outcome") if (length(dim(Y)) == 1L) { nm <- rownames(Y) dim(Y) <- NULL if (!is.null(nm)) names(Y) <- nm } X <- if (!is.empty.model(mt)) model.matrix(mt, mf, contrasts) else stop("Invalid model matrix") offset <- as.vector(model.offset(mf)) if (!is.null(offset)) { if (length(offset) != NROW(Y)) stop(gettextf("number of offsets is %d should equal %d (number of observations)", length(offset), NROW(Y)), domain = NA) } strata <- model.extract(mf, "strata") if (is.null(strata)) stop("argument 'strata' missing") contrasts <- attr(X, "contrasts") if (attr(mt, "intercept") > 0) { X <- X[,-1, drop=FALSE] } if (missing(init)) init <- rep(0, ncol(X)) if (iter.max < 0) stop("'iter.max' must be non-negative") if (eps <= 0) stop("'eps' must be positive") if (toler.chol <= 0) stop("'toler.chol' must be positive") if (eps < toler.chol) stop("'toler.chol' must be smaller than 'eps'") fit <- fitClogit(X = X, y = Y, offset = offset, strata=strata, init=init, toler.chol=toler.chol, eps=eps, iter.max=iter.max) if (fit$flag <= 0) { stop("Information matrix is not positive definite") } else if (fit$flag == 1000) { warning("Iteration limit exceeded") } nvar <- length(init) which.sing <- if (fit$flag < nvar) { diag(fit$var)==0 } else { rep(FALSE, nvar) } fit$coefficients[which.sing] <- NA fit$flag <- NULL ## Add back in parameter names cfnames <- colnames(X) names(fit$coefficients) <- cfnames dimnames(fit$var) <- list(cfnames, cfnames) fit$n <- sum(fit$informative) if (model) { fit$model <- mf } else { ## Without model frame this cannot be interpreted fit$informative <- NULL } fit$na.action <- attr(mf, "na.action") if (x) fit$x <- X if (!y) fit$y <- NULL fit <- c(fit, list(call = call, formula = formula, terms = mt, contrasts = contrasts, xlevels = .getXlevels(mt, mf))) class(fit) <- c("clogistic") fit } coef.clogistic <- function(object,...) { object$coefficients } vcov.clogistic <- function(object, ...) { object$var } print.clogistic <- function (x, digits = max(options()$digits - 4, 3), ...) { ## Print method for clogistic objects, edited from print.coxph cat("\nCall: ", deparse(x$call), "\n\n", sep="\n") savedig <- options(digits = digits) on.exit(options(savedig)) coef <- coef.clogistic(x) se <- sqrt(diag(vcov.clogistic(x))) if (is.null(coef) | is.null(se)) stop("Input is not valid") coefmat <- cbind(coef, exp(coef), se, coef/se, signif(1 - pchisq((coef/se)^2, 1), digits - 1)) dimnames(coefmat) <- list(names(coef), c("coef", "exp(coef)", "se(coef)", "z", "p")) cat("\n") prmatrix(coefmat) logtest <- -2 * (x$loglik[1] - x$loglik[2]) if (is.null(x$df)) df <- sum(!is.na(coef)) else df <- round(sum(x$df), 2) cat("\n") cat("Likelihood ratio test=", format(round(logtest, 2)), " on ", df, " df,", " p=", format(1 - pchisq(logtest, df)), ", n=", x$n, sep = "") cat("\n") invisible() } Epi/R/detrend.R0000644000175100001440000000057712531361077012774 0ustar hornikusersdetrend <- function( M, t, weight=rep(1,nrow(M)) ) { Thin.col <- function ( X, tol = 1e-06) # Function to remove lin. dep. columns from a matrix { QR <- qr(X, tol = tol, LAPACK = FALSE) X[, QR$pivot[seq(length = QR$rank)], drop = FALSE] } # Now detrend the matrix using the weighted inner product. Thin.col( projection.ip( cbind( 1, t ), M , orth = TRUE, weight = weight ) ) } Epi/R/lexis.R0000644000175100001440000005231512531361077012470 0ustar hornikusersLexis <- function(entry, exit, duration, entry.status=0, exit.status=0, id, data, merge=TRUE, states, tol=.Machine$double.eps^0.5, keep.dropped=FALSE ) { nmissing <- missing(entry) + missing(exit) + missing(duration) if (nmissing > 2) stop("At least one of the arguments exit and duration must be supplied") only.exit <- missing( entry.status ) && !missing( exit.status ) ## If data argument is supplied, use it to evaluate arguments if (!missing(data)) { if (!missing(entry)) { entry <- eval(substitute(entry), data, parent.frame()) } if (!missing(exit)) { exit <- eval(substitute(exit), data, parent.frame()) } if (!missing(duration)) { duration <- eval(substitute(duration), data, parent.frame()) } entry.status <- eval(substitute(entry.status), data, parent.frame()) exit.status <- eval(substitute(exit.status), data, parent.frame()) if (!missing(id)) { id <- eval(substitute(id), data, parent.frame()) } if (merge) { data <- as.data.frame(data) } } ## Check for missing values in status variables wh.miss <- any(is.na(entry.status)) + 2*any(is.na(exit.status)) if ( wh.miss > 0 ) stop("Missing values in ", switch( wh.miss, "entry status", "exit status", "entry AND exit status" ) ) ## Adjust entry status mode according to exit status if( only.exit ) { if( is.logical( exit.status ) ) entry.status <- FALSE if( is.character( exit.status ) ) exit.status <- factor( exit.status ) if( is.factor( exit.status ) ) { entry.status <- factor( rep( levels(exit.status)[1], length(exit.status)), levels=levels(exit.status), labels=levels(exit.status) ) cat("NOTE: entry.status has been set to", paste( '"', levels(exit.status)[1], '"', sep='' ), "for all.\n" ) } if( is.numeric( exit.status ) ) entry.status <- rep( 0, length( exit.status ) ) } ## Convert character states to factors if( is.character(entry.status) ) entry.status <- factor(entry.status) if( is.character( exit.status) ) exit.status <- factor( exit.status) ## Check compatibility of entry and exit status if (is.factor(entry.status) || is.factor(exit.status)) { if (is.factor(entry.status) && is.factor(exit.status)) { if (!identical(levels(entry.status),levels(exit.status))) { all.levels = union(levels(entry.status),levels(exit.status)) entry.status <- factor( entry.status, levels=all.levels ) exit.status <- factor( exit.status, levels=all.levels ) cat("Incompatible factor levels in entry.status and exit.status:\n", "both lex.Cst and lex.Xst now have levels:\n", all.levels, "\n") } } else { stop("Incompatible classes for entry and exit status") } } else { if (mode(entry.status) != mode(exit.status)) { stop("Incompatible mode for entry and exit status") } } ## If entry is missing and one of the others is given as a list of length ## one, entry is assumed to be 0 on this only timescale. if( nmissing==2 ) { if( !missing(exit) ) { if( length(exit)>1 ) stop("If 'entry' is omitted, only one timescale can be specified.") else { entry <- exit entry[[1]] <- 0*entry[[1]] cat( "NOTE: entry is assumed to be 0 on the",names(exit),"timescale.\n") } } else if( !missing(duration) ) { if( length(duration)>1 ) stop("If 'entry' is omitted, only one timescale can be specified") else { entry <- duration entry[[1]] <- 0*entry[[1]] cat( "NOTE: entry is assumed to be 0 on the",names(duration),"timescale.\n") } } else stop("Either exit or duration must be supplied.") } ## Coerce entry and exit lists to data frames if(!missing(entry)) { entry <- as.data.frame(entry) if (is.null(names(entry))) stop("entry times have no names") if (any(substr(names(entry),1,4) == "lex.")) stop("names starting with \"lex.\" cannot be used for time scales") } if(!missing(exit)) { exit <- as.data.frame(exit) if (is.null(names(exit))) stop("exit times have no names") if (any(substr(names(exit),1,4) == "lex.")) stop("names starting with \"lex.\" cannot be used for time scales") } if(!missing(duration)) { duration <- as.data.frame(duration) if (is.null(names(duration))) stop("duration have no names") if (any(substr(names(duration),1,4) == "lex.")) stop("names starting with \"lex.\" cannot be used for time scales") } if (missing(entry)) { ## Impute entry entry <- exit - duration } if (missing(duration)) { ## Impute duration full.time.scales <- intersect(names(entry), names(exit)) if (length(full.time.scales) == 0) { stop("Cannot calculate duration from entry and exit times") } duration <- exit[,full.time.scales[1]] - entry[,full.time.scales[1]] } if (missing(exit)) { all.time.scales <- names(entry) } else { ## We dont need the exit times but, if they are supplied, we must ## make sure they are consistent with the entry and duration. all.time.scales <- unique(c(names(entry), names(exit))) ## Fill in any missing entry times entry.missing <- setdiff(all.time.scales, names(entry)) if (length(entry.missing) > 0) { entry <- cbind(entry, exit[,entry.missing, drop=FALSE] - duration) } ## Check that duration is the same on all time scales dura <- exit - entry[,names(exit),drop=FALSE] if (missing(duration)) { duration <- dura[,1] #BxC# apply( dura, 1, mean, na.rm=TRUE ) # Allows for timescales with missing values } ok <- sapply(lapply(dura, all.equal, duration), isTRUE) # ok <- sapply(lapply(dura, all.equal, duration), # function(x) identical(FALSE,x) ) if (!all(ok)) { stop("Duration is not the same on all time scales") } } # Taken care of by the code that detects whether lex.du <= tol # ## Check that duration is positive # if (any(duration<0)) { # stop("Duration must be non-negative") # } ## Make sure id value - if supplied - is valid. Otherwise supply default id if (missing(id)) { id <- 1:nrow(entry) } else if (any(duplicated(id))) { ##Fixme: check for overlapping intervals ##stop("Duplicate values in id") } ## Return a data frame with the entry times, duration, and status ## variables Use the prefix "lex." for the names of reserved ## variables. if( is.data.frame( duration ) ) duration <- duration[,1] lex <- data.frame(entry, "lex.dur" = duration, "lex.Cst" = entry.status, "lex.Xst" = exit.status, "lex.id" = id ) #### Addition by BxC --- support for states as factors # Convert states to factors if states are given if( !missing( states ) ) #is.character( states ) ) { # This as.character-business is necessary because we cannot assume # that the values of states are 1,2, etc. st.lev <- sort( unique( as.character( c(lex$lex.Cst,lex$lex.Xst) ) ) ) lex$lex.Cst <- factor( as.character(lex$lex.Cst), levels=st.lev, labels=states ) lex$lex.Xst <- factor( as.character(lex$lex.Xst), levels=st.lev, labels=states ) } if (!missing(data) && merge) { duplicate.names <- intersect(names(lex), names(data)) if (length(duplicate.names) > 0) { stop("Cannot merge data with duplicate names") } lex <- cbind(lex, data) } ## Drop rows with short or negantive duration for consistency with splitLexis short.dur <- lex$lex.dur <= tol if ( any(short.dur) ) { warning("Dropping ", sum(short.dur), " rows with duration of follow up < tol\n", if( keep.dropped ) " The dropped rows are in the attribute 'dropped'\n", if( keep.dropped ) " To see them type attr(Obj,'dropped'),\n", if( keep.dropped ) " to get rid of them type attr(Obj,'dropped') <- NULL\n", if( keep.dropped ) " - where 'Obj' is the name of your Lexis object" ) lex <- subset(lex, !short.dur) if( keep.dropped ) attr(lex,"dropped") <- subset(data, short.dur) } ## Return Lexis object attr(lex,"time.scales") <- all.time.scales attr(lex,"time.since") <- rep( "", length(all.time.scales) ) breaks <- vector("list", length(all.time.scales)) names(breaks) <- all.time.scales attr(lex,"breaks") <- breaks class(lex) <- c("Lexis", class(lex)) return(lex) } is.Lexis <- function(x) { inherits(x, "Lexis") } check.time.scale <- function(lex, time.scale=NULL) { ## Utility function, returns the names of the time scales in a Lexis object ## lex - a Lexis object ## time.scale - a numeric or character vector. The function checks that ## these are valid time scales for the Lexis object. ## Return value is a character vector containing the names of the requested ## time scales all.names <- timeScales(lex) if (is.null(time.scale)) return(all.names) nscale <- length(time.scale) scale.names <- character(nscale) if (is.character(time.scale)) { for (i in 1:nscale) { if (is.null(lex[[time.scale[i]]])) stop(time.scale[i], " is not a valid time scale name") } } else if (is.numeric(time.scale)) { if (any(time.scale > length(all.names)) || any(time.scale < 1)) stop(time.scale, " not valid time scale column number(s)") time.scale <- all.names[time.scale] } else { stop("invalid type for time scale") } return(time.scale) } valid.times <- function(x, time.scale=1) { # A utility function that returns a data.frame / Lexis object with # rows with missing timescales removed x[complete.cases(x[,check.time.scale(x,time.scale)]),] } plot.Lexis.1D <- function(x, time.scale=1, breaks="lightgray", type="l", col="darkgray", xlim, ylim, xlab, ylab, ...) { ## x Lexis object ## time.scale name of time scale to plot if (length(time.scale) != 1) stop("Only one time scale allowed") x <- valid.times(x,time.scale) time.entry <- x[,time.scale] time.exit <- x[,time.scale] + x$lex.dur id <- x$lex.id if (missing(xlim)) xlim <- c(min(time.entry), max(time.exit)) if (missing(ylim)) ylim <- range(id) if (missing(xlab)) xlab <- time.scale if (missing(ylab)) ylab <- "id number" plot(time.entry, id, type="n", xlab=xlab, ylab=ylab, xlim=xlim, ylim=ylim, ...) if (type=="b" || type=="l") { segments(time.entry, id, time.exit, id, col=col, ...) } if (type=="b" || type=="p") { points(time.exit, id, col=col, ...) } ## Plot break points brk <- attr(x,"breaks")[[time.scale]] abline(v=brk, col=breaks, ...) } points.Lexis.1D <- function(x, time.scale, ...) { x <- valid.times(x,time.scale) time.exit <- x[,time.scale] + x$lex.dur points(time.exit, x$lex.id, ...) } lines.Lexis.1D <- function(x, time.scale, type="l", col="darkgray", breaks="lightgray", ...) { x <- valid.times(x,time.scale) time.entry <- x[,time.scale] time.exit <- x[,time.scale] + x$lex.dur id <- x$lex.id segments(time.entry, id, time.exit, id, col=col, ...) ## Plot break points brk <- attr(x,"breaks")[[time.scale]] abline(v=brk, col=breaks, ...) } plot.Lexis.2D <- function(x, time.scale, breaks="lightgray", type="l", col="darkgray", xlim, ylim, xlab, ylab, grid=FALSE, col.grid="lightgray", lty.grid=2, coh.grid=FALSE, ...) { if (length(time.scale) != 2) stop("Two time scales are required") x <- valid.times(x,time.scale) time.entry <- time.exit <- vector("list",2) for (i in 1:2) { time.entry[[i]] <- x[,time.scale[i]] time.exit[[i]] <- x[,time.scale[i]] + x$lex.dur } if (missing(xlim) && missing(ylim)) { ## If no axis limits are given, set the plotting region to be ## square, and adjust the axis limits to cover the same time interval. ## All life lines will then be at 45 degrees. opar <- par(pty="s") on.exit(par(opar)) min.times <- sapply(time.entry, min) max.times <- sapply(time.exit, max) xywidth <- max(max.times - min.times) xlim <- min.times[1] + c(0, xywidth) ylim <- min.times[2] + c(0, xywidth) } else if (missing(xlim)) { xlim <- c(min(time.entry[[1]]), max(time.exit[[1]])) } else if (missing(ylim)) { ylim <- c(min(time.entry[[2]]), max(time.exit[[2]])) } if (missing(xlab)) xlab <- time.scale[1] if (missing(ylab)) ylab <- time.scale[2] plot(time.entry[[1]], time.entry[[2]], type="n", xlab=xlab, ylab=ylab, xlim=xlim, ylim=ylim, ...) # Set up the background grid(s): if (!missing(grid)) { if (is.logical(grid)) { if (grid) { vgrid <- pretty(xlim) hgrid <- pretty(ylim) } } else if (is.list(grid)) { vgrid <- grid[[1]] hgrid <- grid[[length(grid)]] } else if (is.numeric(grid)) { vgrid <- grid - min( grid ) + min( pretty( xlim )[pretty(xlim)>=par("usr")[1]] ) hgrid <- grid - min( grid ) + min( pretty( ylim )[pretty(ylim)>=par("usr")[3]] ) } else stop( "'grid' must be either logical, list or a numeric vector" ) # and plot the grid: abline( v=vgrid, h=hgrid, col=col.grid, lty=lty.grid ) box() } if (!missing(grid) & coh.grid) { # Make the 45-degree grids as fine as the finest grid on the axes for (yy in c(hgrid-diff(range(hgrid)),hgrid)) abline( yy-min(vgrid), 1, col=col.grid, lty=lty.grid ) for (yy in c(vgrid-diff(range(vgrid)),vgrid)) abline( min(hgrid)-yy, 1, col=col.grid, lty=lty.grid ) } # End of explicitly requested background grid(s) (PHEW!) if (type=="b" || type=="l") { segments(time.entry[[1]], time.entry[[2]], time.exit[[1]], time.exit[[2]], col=col, ...) } if (type=="b" || type=="p") { points(time.exit[[1]], time.exit[[2]], col = col, ...) } if (type != "n") { ## Plot break points brk <- attr(x,"breaks")[time.scale] abline(v=brk[[1]], h=brk[[2]], col=breaks, ...) } } points.Lexis.2D <- function(x, time.scale, ...) { x <- valid.times(x,time.scale) time.exit <- vector("list",2) for (i in 1:2) { time.exit[[i]] <- x[,time.scale[i]] + x$lex.dur } points( time.exit[[1]], time.exit[[2]], ...) } lines.Lexis.2D <- function(x, time.scale, col="darkgray", ...) { x <- valid.times(x,time.scale) time.entry <- time.exit <- vector("list",2) for (i in 1:2) { time.entry[[i]] <- x[,time.scale[i]] time.exit[[i]] <- x[,time.scale[i]] + x$lex.dur } segments(time.entry[[1]], time.entry[[2]], time.exit[[1]], time.exit[[2]], col=col, ...) } ### Plotting generic functions plot.Lexis <- function( x = Lexis( entry=list(Date=1900,Age=0), exit=list(Age=0) ), time.scale=NULL, type="l", breaks="lightgray", ...) { time.scale <- check.time.scale(x, time.scale) if (length(time.scale) > 2) time.scale <- time.scale[1:2] # Save the timescale(s) for use in subsequent calls options( Lexis.time.scale = time.scale ) if (length(time.scale) == 1) plot.Lexis.1D(x, time.scale=time.scale, type=type, breaks=breaks, ...) else if (length(time.scale) == 2) plot.Lexis.2D(x, time.scale=time.scale, type=type, breaks=breaks, ...) } lines.Lexis <- function(x, time.scale=options()[["Lexis.time.scale"]], ...) { time.scale <- check.time.scale(x, time.scale) if (length(time.scale) > 2) time.scale <- time.scale[1:2] if (length(time.scale) == 1) lines.Lexis.1D(x, time.scale=time.scale, ...) else if (length(time.scale) == 2) lines.Lexis.2D(x, time.scale=time.scale, ...) } points.Lexis <- function(x, time.scale=options()[["Lexis.time.scale"]], ...) { time.scale <- check.time.scale(x, time.scale) if (length(time.scale) > 2) time.scale <- time.scale[1:2] if (length(time.scale) == 1) points.Lexis.1D(x, time.scale=time.scale, ...) else if (length(time.scale) == 2) points.Lexis.2D(x, time.scale=time.scale, ...) } PY.ann <- function (x, ...) UseMethod("PY.ann") PY.ann.Lexis <- function( x, time.scale=options()[["Lexis.time.scale"]], digits=1, ... ) { if( !inherits(x,"Lexis") ) stop( "Only meaningful for Lexis objects not for objects of class ", class(x) ) wh.x <- x[,time.scale[1]] + x[,"lex.dur"]/2 if( two.scales <- length(time.scale)==2 ) wh.y <- x[,time.scale[2]] + x[,"lex.dur"]/2 else wh.y <- x[,"lex.id"] text( wh.x, wh.y, formatC(x$lex.dur,format="f",digits=digits), adj=c(0.5,-0.5), srt=if(two.scales) 45 else 0, ... ) } ### Generic functions ### Methods for data.frame drop Lexis attributes, so we need a Lexis ### method that adds them again subset.Lexis <- function(x, ...) { y <- subset.data.frame(x, ...) attr(y,"breaks") <- attr(x, "breaks") attr(y,"time.scales") <- attr(x, "time.scales") attr(y,"time.since") <- attr(x, "time.since") return(y) } merge.data.frame <- function(x, y, ...) { if (is.Lexis(x)) merge.Lexis(x, y, ...) else if (is.Lexis(y)) merge.Lexis(y, x, ...) else base::merge.data.frame(x, y, ...) } merge.Lexis <- function(x, y, id, by, ...) { if (!missing(id)) { if (!is.character(id) || length(id) != 1 || !(id %in% names(y))) { stop("id must be the name of a single variable in y") } if (any(duplicated(y[[id]]))) { stop("values of the id variable must be unique in y") } y$lex.id <- y[[id]] } else if (missing(by)) { by <- intersect(names(x), names(y)) if (length(by)==0) { stop("x and y have no variable names in common") } } z <- base::merge.data.frame(x, y, ...) attr(z,"breaks") <- attr(x, "breaks") attr(z,"time.scales") <- attr(x, "time.scales") attr(z,"time.since") <- attr(x, "time.since") class(z) <- c("Lexis", "data.frame") return(z) } ## Extractor functions entry <- function(x, time.scale = NULL, by.id = FALSE ) { time.scale <- check.time.scale(x, time.scale) wh <- x[,time.scale[1]] == ave( x[,time.scale[1]], x$lex.id, FUN=if( by.id ) min else I ) if (length(time.scale) > 1) { res <- as.matrix(x[wh, time.scale]) if( by.id ) rownames( res ) <- x$lex.id[wh] return( res ) } else { res <- x[wh, time.scale] if( by.id ) names( res ) <- x$lex.id[wh] return( res ) } } exit <- function(x, time.scale = NULL, by.id = FALSE ) { time.scale <- check.time.scale(x, time.scale) wh <- x[,time.scale[1]] == ave( x[,time.scale[1]], x$lex.id, FUN=if( by.id ) max else I ) if (length(time.scale) > 1) { res <- as.matrix(x[wh, time.scale]) + x$lex.dur[wh] if( by.id ) rownames( res ) <- x$lex.id[wh] return( res ) } else { res <- x[wh, time.scale] + x$lex.dur[wh] if( by.id ) names( res ) <- x$lex.id[wh] return( res ) } } dur <- function(x, by.id=FALSE) { if( by.id ) return( tapply(x$lex.dur,x$lex.id,sum) ) else return( x$lex.dur ) } status <- function(x, at="exit", by.id = FALSE) { at <- match.arg(at, c("entry","exit")) wh <- x[,timeScales(x)[1]] == ave( x[,timeScales(x)[1]], x$lex.id, FUN=if(by.id) switch(at, "entry"=min, "exit"=max) else I ) res <- switch(at, "entry"=x$lex.Cst, "exit"=x$lex.Xst)[wh] if( by.id ) names( res ) <- x$lex.id[wh] res } timeScales <- function(x) { return (attr(x,"time.scales")) } timeBand <- function(lex, time.scale, type="integer") { time.scale <- check.time.scale(lex, time.scale)[1] breaks <- attr(lex, "breaks")[[time.scale]] time1 <- lex[[time.scale]] band <- findInterval(time1, breaks) ##Check that right hand side of interval falls in the same band abrk <- c(breaks, Inf) tol <- sqrt(.Machine$double.eps) if (any(time1 + lex$lex.dur > abrk[band+1] + tol)) { stop("Intervals spanning multiple time bands in Lexis object") } type <- match.arg(type, choices = c("integer","factor","left","middle", "right")) if (type=="integer") { return(band) } I1 <- c(-Inf, breaks) I2 <- c(breaks, Inf) labels <- switch(type, "factor" = paste("(", I1, ",", I2, "]", sep=""), "left" = I1, "right" = I2, "middle" = (I1 + I2)/2) if(type=="factor") { return(factor(band, levels=0:length(breaks), labels=labels)) } else { return(labels[band+1]) } } breaks <- function(lex, time.scale) { time.scale <- check.time.scale(lex, time.scale)[1] return(attr(lex, "breaks")[[time.scale]]) } transform.Lexis <- function(`_data`, ... ) { save.at <- attributes(`_data`) ## We can't use NextMethod here because of the special scoping rules ## used by transform.data.frame y <- base::transform.data.frame(`_data`, ...) save.at[["names"]] <- attr(y, "names") attributes(y) <- save.at y } Epi/R/ncut.r0000644000175100001440000000074012531361077012350 0ustar hornikusersncut <- function( x, breaks, type="left" ) { # Sorting to get the opportunity to call the function recursively. breaks <- sort( breaks ) # Get the indices, but fix the 0 indices to produce NAs: fi <- findInterval( x, breaks ) fi[fi==0] <- length( breaks ) + 1 switch( toupper( substr( type, 1, 1 ) ), "L" = breaks[fi], "R" = -ncut( -x, -breaks ), "M" = ( breaks[fi] - ncut( -x, -breaks ) ) / 2 ) } Epi/R/Life.lines.R0000644000175100001440000000555212531361077013335 0ustar hornikusersLife.lines <- function( entry.date = NA, exit.date = NA, birth.date = NA, entry.age = NA, exit.age = NA, risk.time = NA ) { # A function allowing any three of the arguments to be specified # and yet returns enty age and -time and exit age and -time. # Check if any variable is supplied with class if( conv <- any( inherits( entry.date, "Date" ), inherits( exit.date, "Date" ), inherits( birth.date, "Date" ), inherits( entry.age , "difftime" ), inherits( exit.age , "difftime" ), inherits( risk.time, "difftime" ) ) ) { # Convert "Date" and "difftime" to years if( inherits( entry.date, "Date" ) ) entry.date <- as.numeric( entry.date ) / 365.35 + 1970 if( inherits( exit.date, "Date" ) ) exit.date <- as.numeric( exit.date ) / 365.35 + 1970 if( inherits( birth.date, "Date" ) ) birth.date <- as.numeric( birth.date ) / 365.35 + 1970 if( inherits( entry.age , "difftime" ) ) entry.age <- as.numeric( entry.age ) / 365.35 if( inherits( exit.age , "difftime" ) ) exit.age <- as.numeric( exit.age ) / 365.35 if( inherits( risk.time, "difftime" ) ) risk.time <- as.numeric( risk.time ) / 365.35 # Convert to numeric class( entry.date ) <- "numeric" class( exit.date ) <- "numeric" class( birth.date ) <- "numeric" class( entry.age ) <- "numeric" class( exit.age ) <- "numeric" class( risk.time ) <- "numeric" } # Find out which three items are supplied. # wh <- (1:6)[!is.na( list( entry.date, entry.age, exit.date, exit.age, birth.date, risk.time ) )] # Matrix of relevant quantities. # LL <- rbind( entry.date, entry.age, exit.date, exit.age, birth.date, risk.time ) # Matrix giving the three constraints among the six quantities: # M <- rbind( c( -1, 1, 0, 0, 1, 0 ), c( 0, 0, -1, 1, 1, 0 ), c( 0, 1, 0, -1, 0, 1 ) ) # Now in principle we have that M %*% LL = 0. # Partitioning M=(A1|A2), t(LL)=(t(x1),t(x2)) # this gives A1 %*% x1 = -A2 %*% x2 # Check if there is sufficient information # if( qr( M[,-wh[1:3]] )$rank < 3 ) cat( "Insufficient information to display life lines" ) # Then do the calculation # A1 <- M[, wh[1:3]] A2 <- M[,-wh[1:3]] x1 <- LL[wh[1:3],] x2 <- -solve( A2 ) %*% A1 %*% x1 LL[-wh[1:3],] <- x2 LL <- data.frame( t(LL) ) attr( LL, "Date" ) <- conv # Convert to dates and difftimes if( conv ) { LL[,c(1,3,5)] <- ( LL[,c(1,3,5)] - 1970 ) * 365.25 LL[,c(2,4,6)] <- LL[,c(2,4,6)] * 365.25 class( LL[,1] ) <- class( LL[,3] ) <- class( LL[,5] ) <- "Date" class( LL[,2] ) <- class( LL[,4] ) <- class( LL[,6] ) <- "difftime" } LL } Epi/R/twoby2.R0000644000175100001440000000700512531361077012566 0ustar hornikuserstwoby2 <- function( exposure, outcome, alpha = 0.05, print = TRUE, dec = 4, conf.level = 1-alpha, F.lim = 10000 ) # What is the limit for trying the # Fisher.test { if( !missing( conf.level ) ) alpha <- 1 - conf.level if( inherits( exposure, c( "table", "matrix" ) ) ) tab <- exposure else tab <- table( exposure, outcome ) tab <- tab[1:2,1:2] a <- tab[1, 1] b <- tab[1, 2] c <- tab[2, 1] d <- tab[2, 2] bin.ci <- function( x, n ) { # Confidence interval for proportion based on Taylor-expansion of # the log-odds --- surprisingly good coverage. ef <- exp( qnorm(1-alpha/2)/sqrt(x*(n-x)/n) ) p <- x / n c( x/n, p/(p+(1-p)*ef), p/(p+(1-p)/ef) ) } rr <- (a/(a + b))/(c/(c + d)) se.log.rr <- sqrt((b/a)/(a + b) + (d/c)/(c + d)) lci.rr <- exp(log(rr) - qnorm( 1-alpha/2 ) * se.log.rr) uci.rr <- exp(log(rr) + qnorm( 1-alpha/2 ) * se.log.rr) or <- (a/b)/(c/d) se.log.or <- sqrt(1/a + 1/b + 1/c + 1/d) lci.or <- exp(log(or) - qnorm( 1-alpha/2 ) * se.log.or) uci.or <- exp(log(or) + qnorm( 1-alpha/2 ) * se.log.or) # Computing the c.i. for the probability difference as method # 10 from Newcombe, Stat.Med. 1998, 17, pp.873 ff. pr.dif <- ci.pd( a, c, b, d, alpha=alpha, print=FALSE )[5:7] pd <- pr.dif[1] lci.pd <- pr.dif[2] uci.pd <- pr.dif[3] as.pval <- 1 - pchisq( log( or )^2 / sum( 1/tab[1:2,1:2] ), 1 ) # If the numers are too large we don't bother about computing Fisher's test Fisher <- ( sum( tab ) < F.lim ) ft <- if( !Fisher ) NA else fisher.test( tab, conf.level=1-alpha ) # We need row and colum names for annotating the output if( is.null( rownames( tab ) ) ) rownames( tab ) <- paste( "Row", 1:2 ) if( is.null( colnames( tab ) ) ) colnames( tab ) <- paste( "Col", 1:2 ) tbl <- cbind( tab[1:2,1:2], rbind( bin.ci( a, a+b ), bin.ci( c, c+d ) ) ) colnames( tbl )[3:5] <- c(paste( " P(", colnames( tab )[1], ")", sep=""), paste( 100*(1-alpha),"% conf.", sep="" ), "interval") if( print ) cat("2 by 2 table analysis:", "\n------------------------------------------------------", "\nOutcome :", colnames( tab )[1], "\nComparing :", rownames( tab )[1], "vs.", rownames( tab )[2], "\n\n" ) if( print ) print( round( tbl, dec ) ) if( print ) cat( "\n" ) rmat <- rbind( c( rr, lci.rr, uci.rr ), c( or, lci.or, uci.or ), if( Fisher) c( ft$estimate, ft$conf.int ), c( pd, lci.pd, uci.pd ) ) rownames( rmat ) <- c(" Relative Risk:", " Sample Odds Ratio:", if( Fisher) "Conditional MLE Odds Ratio:", " Probability difference:") colnames( rmat ) <- c(" ", paste( 100*(1-alpha),"% conf.", sep="" ), "interval" ) if( print ) print( round( rmat, dec ) ) if( print ) cat( if( Fisher ) "\n Exact P-value:", if( Fisher ) round( ft$p.value, dec ), "\n Asymptotic P-value:", round( as.pval, dec ), "\n------------------------------------------------------\n") invisible( list( table = tbl, measures = rmat, p.value = c(as.pval,if( Fisher )ft$p.value) ) ) } Epi/R/rateplot.R0000644000175100001440000001551012531361077013172 0ustar hornikusersrateplot <- function( rates, which = c("ap","ac","pa","ca"), age = as.numeric( dimnames( rates )[[1]] ), per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE, a.grid = grid, p.grid = grid, c.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), a.lim = range( age, na.rm=TRUE ) + c(0,diff( range( age ) )/30), p.lim = range( per, na.rm=TRUE ) + c(0,diff( range( age ) )/30), c.lim = NULL, ylim = range( rates[rates>0], na.rm=TRUE ), at = NULL, labels = paste( at ), a.lab = "Age at diagnosis", p.lab = "Date of diagnosis", c.lab = "Date of birth", ylab = "Rates", type = "l", lwd = 2, lty = 1, log.ax = "y", las = 1, ann = FALSE, a.ann = ann, p.ann = ann, c.ann = ann, xannx = 1/20, cex.ann = 0.8, a.thin = seq( 1, length( age ), 2 ), p.thin = seq( 1, length( per ), 2 ), c.thin = seq( 2, length( age ) + length( per ) - 1, 2 ), col = par( "fg" ), a.col = col, p.col = col, c.col = col, ... ) { # Remove 0 rates, in order to avoid warnings rates[rates==0] <- NA # then do the plots for( i in 1:length( which ) ) { if( toupper( which[i] ) == "AP" ) Aplot( rates, age = age, per = per, a.grid = a.grid, ygrid = ygrid, col.grid = col.grid, a.lim = a.lim, ylim = ylim, a.lab = a.lab, ylab = ylab, at = at, labels = labels, type = type, lwd = lwd, lty = lty, col = col, log.ax = log.ax, las = las, p.ann = p.ann, xannx = xannx, p.col = p.col, cex.ann = cex.ann, p.thin = p.thin, p.lines = TRUE, c.lines = FALSE, ... ) if( toupper( which[i] ) == "AC" ) Aplot( rates, age = age, per = per, a.grid = a.grid, ygrid = ygrid, col.grid = col.grid, a.lim = a.lim, ylim = ylim, a.lab = a.lab, ylab = ylab, at = at, labels = labels, type = type, lwd = lwd, lty = lty, col = col, log.ax = log.ax, las = las, c.ann = c.ann, p.ann = p.ann, xannx = xannx, c.col = c.col, p.col = p.col, cex.ann = cex.ann, c.thin = c.thin, p.lines = FALSE, c.lines = TRUE, ... ) if( toupper( which[i] ) %in% c("APC","ACP") ) Aplot( rates, age = age, per = per, a.grid = a.grid, ygrid = ygrid, col.grid = col.grid, a.lim = a.lim, ylim = ylim, a.lab = a.lab, ylab = ylab, at = at, labels = labels, type = type, lwd = lwd, lty = lty, col = col, log.ax = log.ax, las = las, c.ann = c.ann, p.ann = p.ann, xannx = xannx, c.col = c.col, p.col = p.col, cex.ann = cex.ann, c.thin = c.thin, p.thin = p.thin, p.lines = TRUE, c.lines = TRUE, ... ) if( toupper( which[i] ) == "PA" ) Pplot( rates, age = age, per = per, grid = grid, p.grid = p.grid, ygrid = ygrid, col.grid = col.grid, p.lim = p.lim, ylim = ylim, p.lab = p.lab, ylab = ylab, at = at, labels = labels, type = type, lwd = lwd, lty = lty, col = col, log.ax = log.ax, las = las, ann = a.ann, xannx = xannx, cex.ann = cex.ann, a.thin = a.thin, ... ) if( toupper( which[i] ) == "CA" ) Cplot( rates, age = age, per = per, grid = grid, c.grid = c.grid, ygrid = ygrid, col.grid = col.grid, c.lim = c.lim, ylim = ylim, c.lab = c.lab, ylab = ylab, at = at, labels = labels, type = type, lwd = lwd, lty = lty, col = col, log.ax = log.ax, las = las, ann = a.ann, xannx = xannx, cex.ann = cex.ann, a.thin = a.thin, ... ) } } Epi/R/cal.yr.R0000644000175100001440000000312312531361077012525 0ustar hornikuserscal.yr <- function( x, format = "%Y-%m-%d", wh = NULL ) { cl.typ <- c("Date","POSIXct","POSIXlt","date","dates","chron") # Check if the input is a data frame and convert if( inherits( x, "data.frame" ) & is.null(wh) & missing(format) ) { # Indicator of where a date-type variable is wh <- sapply( x, inherits, cl.typ ) # The positions wh <- (1:length(wh))[wh] } if( inherits( x, "data.frame" ) & is.null(wh) & !missing(format) ) { # Indicator of where the character variables are wh <- sapply( x, is.character ) # The positions wh <- (1:length(wh))[wh] } if( inherits( x, "data.frame" ) & is.vector(wh) ) { if( is.character(wh) ) wh <- match( wh, names(x) ) # Convert the dates or the character variables for( i in wh ) { if( is.character(x[,i]) ) x[,i] <- cal.yr( x[,i], format=format ) else x[,i] <- cal.yr( x[,i] ) } return( x ) } # Finally, down to business --- converting a vector to decimal years: # Check if the input is some kind of date or time object if( any( inherits( x, cl.typ ) ) ) x <- as.Date( as.POSIXct( x ) ) else if( is.character( x ) ) x <- as.Date( x, format = format ) else if( is.factor( x ) ) x <- as.Date( as.character( x ), format = format ) else stop( "\nInput should be a data frame, a character vector, a factor or ", "some kind of date or time object:\n", "Date, POSIXct, POSIXlt, date, dates or chron" ) res <- as.numeric( x ) / 365.25 + 1970 class( res ) <- c("cal.yr","numeric") return( res ) } Epi/R/splitLexis.R0000644000175100001440000000775612531361077013515 0ustar hornikuserssplit.lexis.1D <- function(lex, breaks, time.scale, tol) { time.scale <- check.time.scale(lex, time.scale) ## Entry and exit times on the time scale that we are splitting time1 <- lex[,time.scale, drop=FALSE] time2 <- time1 + lex$lex.dur ## Augment break points with +/- infinity breaks <- sort( unique( breaks ) ) I1 <- c(-Inf, breaks) I2 <- c(breaks,Inf) ## Arrays containing data on each interval (rows) for each subject (cols) en <- apply(time1, 1, pmax, I1) # Entry time ex <- apply(time2, 1, pmin, I2) # Exit time NR <- nrow(en) NC <- ncol(en) ## Does subject contribute follow-up time to this interval? ## (intervals shorter than tol are ignored) valid <- en < ex - tol dur <- ex - en; dur[!valid] <- 0 # Time spent in interval ## Cumulative time since entry at the start of each interval time.since.entry <- rbind(0, apply(dur,2,cumsum)[-NR,,drop=FALSE]) cal.new.entry <- function(entry.time) { sweep(time.since.entry, 2, entry.time, "+")[valid] } old.entry <- lex[, timeScales(lex), drop=FALSE] new.entry <- lapply(old.entry, cal.new.entry) ## Status calculation aug.valid <- rbind(valid, rep(FALSE, NC)) last.valid <- valid & !aug.valid[-1,] any.valid <- apply(valid,2,any) new.Xst <- matrix( lex$lex.Cst, NR, NC, byrow=TRUE) new.Xst[last.valid] <- lex$lex.Xst[any.valid] n.interval <- apply(valid, 2, sum) new.lex <- Lexis("entry" = new.entry, "duration" = dur[valid], "id" = rep(lex$lex.id, n.interval), "entry.status" = rep(lex$lex.Cst, n.interval), "exit.status" = new.Xst[valid]) ## Update breaks attribute and tranfer time.since attribute breaks.attr <- attr(lex, "breaks") breaks.attr[[time.scale]] <- sort(c(breaks.attr[[time.scale]], breaks)) attr(new.lex, "breaks") <- breaks.attr attr(new.lex, "time.since") <- attr(lex, "time.since") return(new.lex) } splitLexis <- function(lex, breaks, time.scale=1, tol= .Machine$double.eps^0.5) { ## Advise the uninformed user... if( inherits(lex,"stacked.Lexis") ) stop( "It makes no sense to time-split after stacking ---\n", "split your original Lexis object and stack that to get what you want.\n") ## Set temporary, unique, id variable lex$lex.tempid <- lex$lex.id lex$lex.id <- 1:nrow(lex) ## Save auxiliary data aux.data.names <- setdiff(names(lex), timeScales(lex)) aux.data.names <- aux.data.names[substr(aux.data.names,1,4) != "lex."] aux.data <- lex[, c("lex.id","lex.tempid", aux.data.names), drop=FALSE] ## Check for NAs in the timescale ts <- check.time.scale(lex, time.scale) ts.miss <- any(is.na(lex[,ts])) if( ts.miss ) { na.lex <- lex[ is.na(lex[,ts]),] lex <- lex[!is.na(lex[,ts]),] cat( "Note: NAs in the time-scale \"", ts, "\", you split on\n") } ## If states are factors convert to numeric while splitting factor.states <- is.factor( lex$lex.Cst ) if( factor.states ) { state.levels <- levels( lex$lex.Cst ) nstates <- nlevels( lex$lex.Cst ) lex$lex.Cst <- as.integer( lex$lex.Cst ) lex$lex.Xst <- as.integer( lex$lex.Xst ) } ## Split the data lex <- split.lexis.1D(lex, breaks, time.scale, tol) ## Reinstitute the factor levels if( factor.states ) { lex$lex.Cst <- factor( lex$lex.Cst, levels=1:nstates, labels=state.levels ) lex$lex.Xst <- factor( lex$lex.Xst, levels=1:nstates, labels=state.levels ) } ## Put the NA-rows back if( ts.miss ) lex <- rbind( lex, na.lex[,colnames(lex)] ) ## Save attributes lex.attr <- attributes(lex) ## Merge lex <- merge.data.frame(lex, aux.data, by="lex.id") ## Restore attributes attr(lex,"breaks") <- lex.attr$breaks attr(lex,"time.scales") <- lex.attr$time.scales attr(lex,"time.since") <- lex.attr$time.since class(lex) <- c("Lexis", "data.frame") ## Restore id variable lex$lex.id <- lex$lex.tempid lex$lex.tempid <- NULL return(lex) } Epi/R/effx.r0000644000175100001440000002541112531361077012331 0ustar hornikusers## Program to calculate effects ## Michael Hills ## Improved by Bendix Carstensen and Martyn Plummer ## Post Tartu 2007 version June 2007 ## Addition allowing a TRUE/FALSE as binary outcome ## and possibility or relative risk for binary outcomes and rate ## difference for failure outcomes, BxC, Ocitober 2012 effx<-function(response, type="metric", fup=NULL, exposure, strata=NULL, control=NULL, weights=NULL, eff=NULL, alpha=0.05, base=1, digits=3, data=NULL) { ## stores the variable names for response, etc. rname<-deparse(substitute(response)) ename<-deparse(substitute(exposure)) if (!missing(strata)) { sname<-deparse(substitute(strata)) } ## The control argument is more complex, as it may be a name or ## list of names if(!missing(control)) { control.arg <- substitute(control) if (length(control.arg) > 1) { control.names <- sapply(control.arg, deparse)[-1] } else { control.names <- deparse(control.arg) } } ## Match the type argument type <- match.arg(type, c("metric", "failure", "count", "binary")) ## Check for missing arguments if (missing(response)) stop("Must specify the response","\n") if (missing(exposure)) stop("Must specify the exposure","\n") if (type == "failure" && missing(fup)) { stop("Must specify a follow-up variable when type is failure") } ## performs a few other checks if(rname==ename)stop("Same variable specified as response and exposure") if (!missing(strata)) { if(rname==sname)stop("Same variable specified as response and strata") if(sname==ename)stop("Same variable specified as strata and exposure") } ## If data argument is supplied, evaluate the arguments in that ## data frame. if (!missing(data)) { exposure <- eval(substitute(exposure), data) response <- eval(substitute(response), data) if (!missing(strata)) strata <- eval(substitute(strata), data) if (!missing(control)) control <- eval(substitute(control), data) if (!missing(fup)) fup <- eval(substitute(fup), data) if (!missing(weights)) { weights <- eval(substitute(weights), data) } } ## Now check validity of evaluated arguments if(is.logical(response)) response <- as.numeric(response) if(!is.numeric(response)) stop("Response must be numeric, not a factor") if (!missing(weights) && type != "binary") { stop("weights only allowed for a binary response") } if (!missing(strata) && !is.factor(strata)) stop("Stratifying variable must be a factor") if(type=="binary") { if( is.null(eff) ) eff<-"OR" if( !(eff %in% c("OR","RR") ) ) stop( "Only RR and OR allowed for binary response" ) response <- as.numeric(response) tmp<-(response==0 | response==1) if(all(tmp,na.rm=TRUE)==FALSE) stop("Binary response must be logical or coded 0,1 or NA") } # If a count is given we are actually using the fup if(type=="count") fup<-is.na(response)*1 if(type=="failure") { if( is.null(eff) ) eff<-"RR" response <- as.numeric(response) tmp<-(response==0 | response==1) if(all(tmp,na.rm=TRUE)==FALSE) stop("Failure response must be logical or coded 0,1 or NA") } ## If exposure is an ordered factor, drops the order. if(class(exposure)[1]=="ordered") { exposure<-factor(exposure, ordered=F) } ## Fix up the control argument as a named list if (!missing(control)) { if (is.list(control)) { names(control) <- control.names } else { control <- list(control) names(control) <- control.names } } ## prints out some information about variables cat("---------------------------------------------------------------------------","\n") cat("response : ", rname, "\n") cat("type : ", type, "\n") cat("exposure : ", ename, "\n") if(!missing(control))cat("control vars : ",names(control),"\n") if(!missing(strata)) { cat("stratified by : ",sname,"\n") } cat("\n") if(is.factor(exposure)) { cat(ename,"is a factor with levels: ") cat(paste(levels(exposure),collapse=" / "),"\n") exposure <- Relevel( exposure, base ) cat( "baseline is ", levels( exposure )[1] ,"\n") } else { cat(ename,"is numeric","\n") } if(!missing(strata)) { cat(sname,"is a factor with levels: ") cat(paste(levels(strata),collapse="/"),"\n") } if(type=="metric")cat("effects are measured as differences in means","\n") if(type=="binary") { if( eff=="OR" | is.null(eff))cat("effects are measured as odds ratios","\n") if( eff=="RR" )cat("effects are measured as relative risk","\n") } if(type=="failure") { if( eff=="RR" | is.null(eff))cat("effects are measured as rate ratios","\n") if( eff=="RD" )cat("effects are measured as rate differences","\n") } cat("---------------------------------------------------------------------------","\n") cat("\n") ## translates type of response and choice of eff into family if ( type=="metric") family<-gaussian if ( type=="binary") family<-binomial(link=logit) if ( type=="failure" | type=="count") family<-poisson(link=log) if ( !is.null(eff) ) { if (type=="binary" & eff=="RR") family<-binomial(link=log) if (type=="failure" & eff=="RD") family<-poisson(link=identity) } ## gets number of levels for exposure if a factor if(is.factor(exposure)) { nlevE<-length(levels(exposure)) } ## labels the output if(is.factor(exposure)) { cat("effect of",ename,"on",rname,"\n") } else { cat("effect of an increase of 1 unit in",ename,"on",rname,"\n") } if(!missing(control)) { cat("controlled for",names(control),"\n\n") } if(!missing(strata)) { cat("stratified by",sname,"\n\n") } ## no stratifying variable if(missing(strata)) { if(type=="metric") { if(missing(control)) { m<-glm(response~exposure,family=family) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response~1,family=family,subset=!is.na(exposure)) } else { m<-glm(response~.+exposure,family=family, subset=!is.na(exposure),data=control) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response~.,family=family, subset=!is.na(exposure),data=control) } res<-ci.lin(m,subset=c("Intercept","exposure"),alpha=alpha) res<-res[,c(1,5,6)] } if(type=="binary") { if(missing(control)) { m<-glm(response~exposure,family=family,weights=weights) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response~1,family=family,subset=!is.na(exposure),weights=weights) } else { m<-glm(response~.+exposure,family=family, subset=!is.na(exposure),data=control,weights=weights) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response~.,family=family, subset=!is.na(exposure),data=control,weights=weights) } res<-ci.lin(m,subset=c("Intercept","exposure"),Exp=TRUE,alpha=alpha) res<-res[,c(5,6,7)] } if (type=="failure" | type=="count") { if (missing(control)) { m<-glm(response/fup~exposure,weights=fup,family=family) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response/fup~1,weights=fup,family=family, subset=!is.na(exposure)) } else { m<-glm(response/fup~.+exposure,weights=fup,family=family, data=control) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response/fup~.,weights=fup,family=family, subset=!is.na(exposure),data=control) } res<-ci.exp(m,subset=c("Intercept","exposure"),alpha=alpha,Exp=(eff=="RR")) } res<-signif(res,digits) colnames(res)[1]<-c("Effect") if(is.factor(exposure)) { ln <- levels(exposure) rownames(res)[2:nlevE]<-paste(ln[2:nlevE],"vs",ln[1]) } aov <- anova(mm,m,test="Chisq") print( res[-1,] ) cat("\nTest for no effects of exposure on", aov[2,3],"df:", "p-value=",format.pval(aov[2,5],digits=3),"\n") invisible(list(res,paste("Test for no effects of exposure on", aov[2,3],"df:","p-value=",format.pval(aov[2,5],digits=3)))) } ## stratifying variable if(!missing(strata)) { sn <- levels(strata) nlevS<-length(levels(strata)) if(type=="metric") { if(missing(control)) { m<-glm(response~strata/exposure,family=family) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response~strata+exposure,family=family) } else { m <-glm(response~strata/exposure + .,family=family, data=control) cat("number of observations ",m$df.null+1,"\n\n") mm <-glm(response~strata+exposure + .,family=family, data=control) } res<-ci.lin(m,subset=c("strata"),alpha=alpha)[c(-1:-(nlevS-1)),c(1,5,6)] } if(type=="binary") { if(missing(control)) { m<-glm(response~strata/exposure,family=family,weights=weights) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response~strata+exposure,family=family,weights=weights) } else { m <-glm(response~strata/exposure + .,family=family, data=control,weights=weights) cat("number of observations ",m$df.null+1,"\n\n") mm <-glm(response~strata+exposure + .,family=family, data=control,weights=weights) } res<-ci.exp(m,subset=c("strata"),alpha=alpha)[c(-1:-(nlevS-1)),] } if (type=="failure" | type=="count") { if(missing(control)) { m<-glm(response/fup~strata/exposure,weights=fup,family=family) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response~strata+exposure,weights=fup,family=family) } else { m <-glm(response/fup~.+strata/exposure,weights=fup,family=family,data=control) cat("number of observations ",m$df.null+1,"\n\n") mm<-glm(response/fup~.+strata+exposure,weights=fup,family=family,data=control) } res<-ci.exp(m,subset=c("strata"),alpha=alpha)[c(-1:-(nlevS-1)),] } res<-signif(res,digits) colnames(res)[1]<-c("Effect") if(is.factor(exposure)) { ln<-levels(exposure) newrownames<-NULL for(i in c(1:(nlevE-1))) { newrownames<-c(newrownames, paste("strata",sn[1:nlevS],"level",ln[i+1],"vs",ln[1])) } } else { newrownames<-paste("strata",sn[1:nlevS]) } rownames(res)<-newrownames aov<-anova(mm,m,test="Chisq") print( res ) cat("\nTest for effect modification on", aov[2,3],"df:","p-value=",format.pval(aov[2,5],digits=3),"\n") invisible(list(res,paste("Test for effect modification on", aov[2,3],"df:","p-value=",format.pval(aov[2,5],digits=3)))) } } Epi/R/N2Y.r0000644000175100001440000000423712531361077012014 0ustar hornikusersN2Y <- function( A, P, N, data=NULL, return.dfr=TRUE ) { # Make local versions of variables if a dataframe is supplied if( !is.null(data) ) { A <- if( !missing(A) ) eval( substitute(A), data, parent.frame() ) else data$A P <- if( !missing(P) ) eval( substitute(P), data, parent.frame() ) else data$P N <- if( !missing(N) ) eval( substitute(N), data, parent.frame() ) else data$N } # Derive the interval lengths from supplied data A.int <- unique( diff(sort(unique(A))) ) P.int <- unique( diff(sort(unique(P))) ) # Check if something is fishy if( length(A.int)!=1 ) stop( "Non-uniform age interval lengths:\n", A.int ) if( length(P.int)!=1 ) stop( "Non-uniform period interval lengths:\n", P.int ) if( A.int!=P.int ) stop( "Unequal age and period interval lengths:\n", "age: ", A.int, ", period: ", P.int ) # Put population prevalence data in a table Ntab <- xtabs( N ~ A + P ) # Devise a table for the risk times Ydim <- c(dimnames(Ntab),list(wh=c("lo","up"))) # note one less age and period category Ytab <- array( NA, dim=sapply(Ydim,length), dimnames = Ydim )[-dim(Ntab)[1],-dim(Ntab)[2],] # How manu age and period classes na <- nrow(Ytab) np <- ncol(Ytab) for(a in 1:na) for(p in 1:np) { Ytab[a,p,"up"] <- Ntab[a ,p]/3 + Ntab[a+1,p+1]/6 if( a > 1) Ytab[a,p,"lo"] <- Ntab[a-1,p]/6 + Ntab[a ,p+1]/3 else Ytab[a,p,"lo"] <- Ntab[a ,p]/2 + Ntab[a ,p+1]/2 - Ytab[a,p,"up"] } # Remember to check the follow-up time Ytab <- Ytab * A.int # Convert to a data frame if required (the default) if( return.dfr ) { ## If a dataframe is required as return value Ytab <- data.frame(expand.grid(dimnames(Ytab)), Y=c(Ytab)) ## Retrieve the numerical values of left endpoints of intervals Ytab$A <- as.numeric(as.character(Ytab$A)) Ytab$P <- as.numeric(as.character(Ytab$P)) ## Compute the correct midpoints from the supplied data Ytab$A <- Ytab$A + A.int * (1 + (Ytab$wh == "up"))/3 Ytab$P <- Ytab$P + P.int * (1 + (Ytab$wh == "lo"))/3 Ytab <- Ytab[, c("A","P","Y")] } Ytab } Epi/R/contr.orth.R0000644000175100001440000000040712531361077013437 0ustar hornikuserscontr.orth <- function( n ) { if( is.numeric( n ) && length( n )==1 ) levs <- 1:n else { levs <- n n <- length( n ) } Z <- contr.sum( n ) L <- 1:n - mean(1:n) contr <- Z - L%*%( ( t(L) %*% L )^(-1) ) %*% ( t(L) %*% Z ) contr[,1:(n-2)] } Epi/R/stattable.R0000644000175100001440000003440412531361077013326 0ustar hornikusersstat.table <- function(index, contents=count(), data, margins=FALSE) { ## Get names of indices, using either user-supplied names, or by ## deparsing. Some of this code is stolen from the list.names() ## function in table() index.sub <- substitute(index) index <- if (missing(data)) eval(index) else eval(index.sub, data) deparse.name <- function(x) if(is.symbol(x)) as.character(x) else "" if (is.list(index)) { if (is.call(index.sub)) { ## List constructed in the call to stat.table index.names <- names(index.sub) fixup <- if (is.null(index.names)) seq(along = index.sub) else index.names == "" dep <- sapply(index.sub[fixup], deparse.name) if (is.null(index.names)) index.labels <- dep else { index.labels <- index.names index.labels[fixup] <- dep } index.labels <- index.labels[-1] } else { ## List constructed outside the call to stat.table index.labels <- if (!is.null(names(index))) { names(index) } else { rep("", length(index)) } } } else { ## A single vector index.labels <- deparse.name(index.sub) } ## Coerce index to list of factors if (!is.list(index)) index <- list(index) index <- lapply(index, as.factor) ## Coerce contents to an expression representing a list of function calls contents <- substitute(contents) if (!identical(deparse(contents[[1]]), "list")) { contents <- call("list", contents) } ## Check that functions in the contents list are valid valid.functions <- c("count","mean","weighted.mean","sum","quantile", "median","IQR","max","min","ratio","percent","sd") table.fun <- character(length(contents) - 1) for (i in 2:length(contents)) { if (!is.call(contents[[i]])) stop("contents must be a list of function calls") FUN <- deparse(contents[[i]][[1]]) if (!FUN %in% valid.functions) stop(paste("Function",FUN,"not permitted in stat.table")) else table.fun[i-1] <- FUN } ## Label the contents by default with the function call ## But if user has supplied a label use that instead. stat.labels <- sapply(contents, deparse)[-1] content.names <- names(contents) if (!is.null(content.names)) { for (i in 2:length(content.names)) { if (nchar(content.names[i]) > 0) stat.labels[i-1] <- content.names[i] } } ##Define the allowed tabulation functions count <- function(id){ if (missing(id)) { id <- seq(along=index[[1]]) } y <- tapply(id, INDEX=subindex, FUN=function(x) length(unique(x))) y[is.na(y)] <- 0 return(y) } mean <- function(x, trim=0, na.rm=TRUE) { tapply(x, INDEX=subindex, FUN = base::mean, trim=trim, na.rm=na.rm) } weighted.mean <- function(x,w,na.rm=TRUE) { tapply(x, INDEX=subindex, FUN=stats::weighted.mean, w=w, na.rm=na.rm) } sum <- function(...,na.rm=TRUE) { tapply(..., INDEX=subindex, FUN = base::sum, na.rm=na.rm) } quantile <- function(x, probs, na.rm=TRUE,names=TRUE,type=7,...) { if (length(probs) > 1) stop("The quantile function only accepts scalar prob values within stat.table") tapply(x, INDEX=subindex, FUN = stats::quantile, probs=probs, na.rm=na.rm,names=names,type=type,...) } median <- function(x, na.rm=TRUE) { tapply(x, INDEX=subindex, FUN = stats::median, na.rm=na.rm) } IQR <- function(x, na.rm=TRUE) { tapply(x, INDEX=subindex, FUN= stats::IQR, na.rm=na.rm) } max <- function(..., na.rm=TRUE) { tapply(..., INDEX=subindex, FUN = base::max, na.rm=na.rm) } min <- function(..., na.rm=TRUE) { tapply(..., INDEX=subindex, FUN = base::min, na.rm=na.rm) } ratio <- function(d,y,scale=1, na.rm=TRUE) { if (length(scale) != 1) stop("Scale parameter must be a scalar") if (na.rm) { w <- (!is.na(d) & !is.na(y)) tab1 <- tapply(d*w, INDEX=subindex, FUN=base::sum, na.rm=TRUE) tab2 <- tapply(y*w, INDEX=subindex, FUN=base::sum, na.rm=TRUE) } else { tab1 <- tapply(d, INDEX=subindex, FUN=base::sum, na.rm=FALSE) tab2 <- tapply(y, INDEX=subindex, FUN=base::sum, na.rm=FALSE) } return(scale*tab1/tab2) } percent <- function(...) { x <- list(...) if (length(x) == 0) stop("No variables to calculate percent") x <- lapply(x, as.factor) n <- count() ## Work out which indices to sweep out sweep.index <- logical(length(subindex)) for (i in seq(along=subindex)) { sweep.index[i] <- !any(sapply(x,identical,subindex[[i]])) } if (!any(sweep.index)) { return(100*n/base::sum(n, na.rm=TRUE)) } else { margin <- apply(n,which(sweep.index),base::sum, na.rm=TRUE) margin[margin==0] <- NA return(100*sweep(n, which(sweep.index), margin,"/")) } } sd <- function (..., na.rm = TRUE) { tapply(..., INDEX=subindex, FUN = stats::sd, na.rm=na.rm) } ##Calculate dimension of the main table, excluding margins n.dim <- length(index) tab.dim <- sapply(index, nlevels) ##Sort out margins if (length(margins) == 1) margins <- rep(margins, n.dim) else if(length(margins) != n.dim) stop("Incorrect length for margins argument") ##Create grid of all possible subtables. fac.list <- vector("list", n.dim) for (i in 1:n.dim) { fac.list[[i]] <- if (margins[i]) c(0,1) else 1 } subtable.grid <- as.matrix(expand.grid(fac.list)) ##Fill in the subtables ans.dim <- c(length(contents)-1, tab.dim + margins) ans <- numeric(prod(ans.dim)) for (i in 1:nrow(subtable.grid)) { ##in.subtable is a logical vector indicating which dimensions are ##in the subtable (i.e. which have not been marginalized out) in.subtable <- as.logical(subtable.grid[i,]) llim <- rep(1,n.dim) + ifelse(in.subtable,rep(0,n.dim),tab.dim) ulim <- tab.dim + ifelse(in.subtable,rep(0,n.dim),rep(1, n.dim)) subindex <- index[in.subtable] if (length(subindex) == 0) { ## Marginalizing out all dimensions subindex <- list(rep(1, length(index[[1]]))) } subtable.list <- if(missing(data)) ##eval(contents, parent.frame()) eval(contents) else eval(as.expression(contents), data) for (j in 1:length(subtable.list)) { ans[array.subset(ans.dim,c(j,llim),c(j,ulim))] <- subtable.list[[j]] } } ans <- array(ans, dim=ans.dim) ans.dimnames <- lapply(index, levels) names(ans.dimnames) <- index.labels for (i in 1:length(index)) { if (margins[i]) ans.dimnames[[i]] <- c(ans.dimnames[[i]], "Total") } dimnames(ans) <- c(list("contents"=stat.labels), ans.dimnames) attr(ans, "table.fun") <- table.fun class(ans) <- c("stat.table", class(ans)) return(ans) } array.subset <- function(dim,lower,upper) { ##Returns a logical array of dimension dim for which elements in the range ##[lower[1]:upper[1], lower[2]:upper[2],...] are TRUE and others FALSE ##Check validity of arguments (but assume everything is an integer) ndim <- length(dim) if (length(lower) != ndim || length(upper) != ndim) { stop("Length of lower and upper limits must match dimension") } if (any(lower > upper) || any(lower < 1) || any(upper > dim)) { stop("Invalid limits") } ##The math is easier if we index arrays from 0 rather than 1 lower <- lower - 1 upper <- upper - 1 N <- prod(dim) ans <- rep(TRUE, N) for (i in 1:N) { l <- i - 1 for (d in 1:ndim) { k <- l %% dim[d] #k is the index of the ith element in dimension d if (k < lower[d] || k > upper[d]) { ans[i] <- FALSE break } l <- l %/% dim[d] } } return(array(ans, dim)) } split.to.width <- function(x,width) { ## Splits a string into a vector so that each element has at most width ## characters. If width is smaller than the length of the shortest word ## then the latter is used instead x.split <- strsplit(x,split=" ")[[1]] width <- max(c(width,nchar(x.split))) y <- character(0) imin <- 1 n <- length(x.split) for (i in 1:n) { cum.width <- if(i==n) { Inf } else { sum(nchar(x.split[imin:(i+1)])) + (i - imin + 1) } if (cum.width > width) { y <- c(y,paste(x.split[imin:i], collapse=" ")) imin <- i + 1 } } return(y) } pretty.print.stattable.1d <- function(x, width, digits) { ##Pretty printing of 1-D stat.table if (length(dim(x)) != 2) stop("Cannot print stat.table") ncol <- nrow(x) col.width <- numeric(ncol+1) col.header <- vector("list",ncol+1) n.header <- integer(ncol+1) print.list <- vector("list",ncol+1) ##First column col.header[[1]] <- split.to.width(names(dimnames(x))[2], width) n.header[1] <- length(col.header[[1]]) col1 <- format(c(col.header[[1]],dimnames(x)[[2]]), justify="left") col.header[[1]] <- col1[1:n.header[1]] print.list[[1]] <- col1[-(1:n.header[1])] col.width[1] <- nchar(col.header[[1]][1]) ##Other columns for (i in 2:(ncol+1)) { col.header[[i]] <- split.to.width(dimnames(x)[[1]][i-1], width) n.header[i] <- length(col.header[[i]]) this.col <- formatC(x[i-1,],width=width, digits=digits[attr(x,"table.fun")[i-1]], "f") this.col <- format(c(col.header[[i]],this.col),justify="right") col.width[i] <- nchar(this.col[1]) col.header[[i]] <- this.col[1:n.header[i]] print.list[[i]] <- this.col[-(1:n.header[i])] } ## table.width <- sum(col.width) + ncol + 3 max.n.header <- max(n.header) cat(" ",rep("-",table.width)," \n",sep="") for(i in 1:max.n.header) { cat(" ") for(j in 1:length(print.list)) { if (i <= n.header[j]) { cat(col.header[[j]][i]) } else { cat(rep(" ", col.width[[j]]),sep="") } if (j==1) cat(" ") else cat(" ") } cat(" \n") } cat(" ",rep("-",table.width)," \n",sep="") for (i in 1:length(print.list[[1]])) { cat(" ") if (pmatch("Total",print.list[[1]][i],nomatch=0)) { ##Add a blank line before the total cat(rep(" ",col.width[1]+1)," ",rep(" ",sum(col.width[-1])+ncol), " \n ",sep="") } for (j in 1:length(print.list)) { cat(print.list[[j]][i]) if (j == 1) { cat(" " ) } else { cat(" ") } } cat(" \n") } cat(" ",rep("-",table.width)," \n",sep="") return(invisible(x)) } pretty.print.stattable.2d <- function(x, width, digits) { ##Pretty printing of 2-Dimensional stat.table if (length(dim(x)) != 3) stop("Cannot print stat.table") nstat <- dim(x)[1] ncol <- dim(x)[3] nrow <- dim(x)[2] col.width <- numeric(ncol+1) col.header <- vector("list",ncol+1) n.header <- integer(ncol+1) print.list <- vector("list",ncol+1) ##First column col.header[[1]] <- split.to.width(names(dimnames(x))[2], width) n.header[1] <- length(col.header[[1]]) col1 <- format(c(col.header[[1]],dimnames(x)[[2]]), justify="left") col.header[[1]] <- col1[1:n.header[1]] print.list[[1]] <- col1[-(1:n.header[1])] col.width[1] <- nchar(col.header[[1]][1]) ##Other columns for (i in 2:(ncol+1)) { col.header[[i]] <- split.to.width(dimnames(x)[[3]][i-1], width) n.header[i] <- length(col.header[[i]]) this.col <- matrix("", nrow=nstat,ncol=nrow) for (j in 1:nstat) { z <- x[j,,i-1] this.col[j,] <- formatC(z, width=width, format="f", digits=digits[attr(x,"table.fun")[j]]) ## this.col[j,] <- formatC(z, width=width, digits=digits, ## format=ifelse(identical(round(z),z),"d","f")) } this.col <- format(c(col.header[[i]],this.col),justify="right") col.width[i] <- nchar(this.col[1]) col.header[[i]] <- this.col[1:n.header[i]] print.list[[i]] <- this.col[-(1:n.header[i])] } ##Correct first column for multiple stats if (nstat > 1) { pl1 <- print.list[[1]] print.list[[1]] <- rep(paste(rep(" ",col.width[1]),collapse=""),nstat*nrow) print.list[[1]][1 + nstat*((1:nrow)-1)] <- pl1 } table.width <- sum(col.width) + ncol + 3 max.n.header <- max(n.header) cat(" ",rep("-",table.width)," \n",sep="") ## Supercolumn header super.header <- names(dimnames(x))[3] npad <- sum(col.width[-1]) + ncol + 1 - nchar(super.header) if (npad >= 0) { cat(" ",rep(" ",col.width[1])," ",sep="") cat(rep("-",floor(npad/2)),sep="") cat(super.header) cat(rep("-",ceiling(npad/2))," \n",sep="") } ## Headers for(i in 1:max.n.header) { cat(" ") for(j in 1:length(print.list)) { if (i <= n.header[j]) { cat(col.header[[j]][i]) } else { cat(rep(" ", col.width[[j]]),sep="") } if (j==1) cat(" ") else cat(" ") } cat(" \n") } cat(" ",rep("-",table.width)," \n",sep="") ## Body of table blank.line <- function() { cat(" ",rep(" ",col.width[1]+1)," ",rep(" ",sum(col.width[-1])+ncol), " \n",sep="") } for (i in 1:length(print.list[[1]])) { if (pmatch("Total",print.list[[1]][i],nomatch=0)) { ##Add a blank line before the total blank.line() } cat(" ") for (j in 1:length(print.list)) { cat(print.list[[j]][i]) if (j == 1) { cat(" " ) } else { cat(" ") } } cat(" \n") if (nstat > 1 && i %% nstat == 0 && i != length(print.list[[1]])) { ##Separate interleaved stats blank.line() } } cat(" ",rep("-",table.width)," \n",sep="") return(invisible(x)) } print.stat.table <- function(x, width=7,digits,...) { fun.digits <- c("count"=0,"mean"=2,"weighted.mean"=2,"sum"=2,"quantile"=2, "median"=2,"IQR"=2,"max"=2,"min"=2,"ratio"=2,"percent"=1, "sd"=2) if (!missing(digits)) { if (is.null(names(digits))) { if (length(digits) > 1) stop("digits must be a scalar or named vector") else fun.digits[1:length(fun.digits)] <- digits } else { fun.digits[names(digits)] <- digits } } if (length(dim(x)) == 2) pretty.print.stattable.1d(x, width, fun.digits) else if (length(dim(x)) == 3) pretty.print.stattable.2d(x, width, fun.digits) else NextMethod("print",...) } ## Satisfy QA checks by defining these functions. But if we never ## export them they can't be used directly. count <- function(id) { } ratio <- function(d, y, scale=1, na.rm=TRUE) { } percent <- function(...) { } Epi/R/factorize.R0000644000175100001440000000547112531361077013333 0ustar hornikusers# The factorize method factorize <- function (x, ...) UseMethod("factorize") # Default method is just the Relevel method factorize.default <- Relevel.default # The Lexis version of this Relevel.Lexis <- factorize.Lexis <- function (x, states=NULL, print=TRUE, ... ) { # Is this really a Lexis object if( !inherits(x,"Lexis") ) stop( "First argument must be a Lexis object" ) # If lex.Cst and lex.Xst are not factors, make them: if( !is.factor(x$lex.Cst) | !is.factor(x$lex.Xst) ) { Cst <- factor(x$lex.Cst) Xst <- factor(x$lex.Xst) } else # just use the factors as they are { Cst <- x$lex.Cst Xst <- x$lex.Xst } # - but amend them to have the same sety of levels all.levels = union(levels(Cst), levels(Xst)) Cst <- factor(Cst, levels = all.levels) Xst <- factor(Xst, levels = all.levels) # A table of actually occurring levels and their names tCX <- table(Cst) + table(Xst) all.levels <- names( tCX[tCX>0] ) # If states are not given, just return factors with reduced levels if( is.null(states) ) { x$lex.Cst <- factor( Cst, levels = all.levels ) x$lex.Xst <- factor( Xst, levels = all.levels ) } # If new state names are given as a list it implies merging of them if( !is.null( states ) & is.list( states ) ) { x$lex.Cst <- Relevel( Cst, states, ... ) x$lex.Xst <- Relevel( Xst, states, ... ) if( print ) { # Construct translation table between old and grouped states to print tC <- table( Cst, x$lex.Cst ) tX <- table( Xst, x$lex.Xst ) cC <- matrix( colnames(tC), nrow(tC), ncol(tC), byrow=T ) cX <- matrix( colnames(tX), nrow(tX), ncol(tX), byrow=T ) cC[tC==0] <- "" cX[tX==0] <- "" print( data.frame( type=rep( c("lex.Cst","lex.Xst"), c(nrow(tC),nrow(tX)) ), old=c(rownames(tC),rownames(tX)), new=c( apply( cC, 1, paste, collapse="" ), apply( cX, 1, paste, collapse="" ) ) ) ) } } # If states is a character vector we assume that it's just new names if( !is.null( states ) & is.character( states ) ) { if( length( states ) != nlevels(Cst) ) stop( "Second argument is a vector of length ", length(states), ", but it should be the joint no. of states, ", length(all.levels), "\ncorresponding to ", all.levels ) levels( Cst ) <- levels( Xst ) <- states x$lex.Cst <- Cst x$lex.Xst <- Xst if( print ) { cat( "New levels for lex.Xst and lex.Cst generated:\n" ) print( data.frame( old=all.levels, new=levels(x$lex.Cst) ) ) } } # If states is a numeric vector we assume that it's just reordering if( !is.null( states ) & is.numeric( states ) ) { x$lex.Cst <- Relevel( Cst, states ) x$lex.Xst <- Relevel( Xst, states ) } return( x ) } Epi/R/apc.fit.R0000644000175100001440000003122012531546026012657 0ustar hornikusersapc.fit <- function( data, A, P, D, Y, ref.c, ref.p, dist = c("poisson","binomial"), model = c("ns","bs","ls","factor"), dr.extr = c("weighted","Holford"), parm = c("ACP","APC","AdCP","AdPC","Ad-P-C","Ad-C-P","AC-P","AP-C"), npar = c( A=5, P=5, C=5 ), scale = 1, alpha = 0.05, print.AOV = TRUE ) { dist <- match.arg(dist) model <- match.arg(model) drtyp <- match.arg(dr.extr) parm <- toupper(match.arg(parm)) if(!missing(data)) { if (length(match(c("A", "P", "D", "Y"), names(data))) != 4) stop("Data frame ", deparse(substitute(data)), " has columns:\n", names(data), "\nmust have variables:\n", "A (age), P (period), D (cases) and Y (person-time)") data <- data[,c("A","P","D","Y")] data <- data[complete.cases(data),] A <- data$A P <- data$P D <- data$D Y <- data$Y } else { nm <- logical(4) nm[1] <- missing(A) nm[2] <- missing(P) nm[3] <- missing(D) nm[4] <- missing(Y) if (any(nm)) stop("Variable", if (sum(nm) > 1) "s", paste(c(" A", " P", " D", " Y")[nm], collapse = ","), " missing from input") if( diff(range( lv <- sapply( list(A = A, P = P, D = D, Y = Y), length) ) ) != 0 ) stop( "\nLengths of variables (", paste(paste(names(lv), lv, sep = ":"), collapse = ", "), ") are not the same." ) } med <- function(x, y) { # Computes where the median number of ys is on the x scale o <- order(x) a <- y[o] names(a) <- x[o] return( as.numeric(names(a[cumsum(a)/sum(a) > 0.5][1])) ) } p0 <- ifelse(missing(ref.p), med(P, D), ref.p) c0 <- ifelse(missing(ref.c), med(P - A, D), ref.c) ref.p <- !missing(ref.p) ref.c <- !missing(ref.c) if( is.list(npar) & length(npar)<3 ) stop("npar as a list should have length 3! \n") if( !is.list(npar) & length(npar)!=3 ) { npar <- rep(npar, 3)[1:3] names(npar) = c("A","P","C") cat("NOTE: npar is specified as:") print( npar ) } if( is.null(names(npar)) ) names(npar) <- c("A", "P", "C") lu <- paste(formatC(c(alpha/2, 1 - alpha/2) * 100, format = "f", digits = 1), "%", sep = "") proj.ip <- function(X, M, orth = FALSE, weight = rep(1, nrow(X))) { if (nrow(X) != length(weight)) stop("Dimension of space and length of weights differ!") if (nrow(X) != nrow(M)) stop("Dimension of space and rownumber of model matrix differ!") Pp <- solve(crossprod(X * sqrt(weight)), t(X * weight)) %*% M PM <- X %*% Pp if (orth) PM <- M - PM else PM } Thin.col <- function(X, tol = 1e-06) { QR <- qr(X, tol = tol, LAPACK = FALSE) X[, QR$pivot[seq(length = QR$rank)], drop = FALSE] } detrend <- function(M, t, weight = rep(1, nrow(M))) { Thin.col(proj.ip(cbind(1, t), M, orth = TRUE, weight = weight)) } if (is.list(model)) { if (!all(sapply(model, is.function))) stop("'model' is a list, but not all elements are functions as they should be.") if ((lmod <- length(model)) < 3) stop("'model' is a list, with", lmod, "elements, it should have three.") if (is.null(names(model))) names(model) <- c("A", "P", "C") MA <- model[["A"]](A) MP <- model[["P"]](P) MC <- model[["C"]](P - A) Rp <- model[["P"]](p0) Rc <- model[["C"]](c0) } else { if (model == "factor") { MA <- model.matrix(~factor(A) - 1) MP <- model.matrix(~factor(P) - 1) MC <- model.matrix(~factor(P - A) - 1) Rp <- MP[abs(P - p0) == min(abs(P - p0)), , drop = FALSE][1, ] Rc <- MC[abs(P - A - c0) == min(abs(P - A - c0)), , drop = FALSE][1, ] } if (model == "ns") { knl <- is.list(npar) MA <- if (knl) Ns(A, knots = npar[["A"]] ) else Ns(A, knots = quantile( rep(A,D), probs=(0:npar["A"]+0.1)/(npar["A"]+0.2) ) ) MP <- if (knl) Ns(P, knots = npar[["P"]] ) else Ns(P, knots = quantile( rep(P,D), probs=(0:npar["P"]+0.1)/(npar["P"]+0.2) ) ) MC <- if (knl) Ns(P - A, knots = npar[["C"]] ) else Ns(P-A, knots = quantile( rep(P-A,D), probs=(0:npar["C"]+0.1)/(npar["C"]+0.2) ) ) Rp <- ns(p0, knots = attr(MP,"knots"), Boundary.knots = attr(MP,"Boundary.knots")) Rc <- ns(c0, knots = attr(MC,"knots"), Boundary.knots = attr(MC,"Boundary.knots")) Knots <- list( Age = sort(c(attr(MA,"knots"), attr(MA,"Boundary.knots"))), Per = sort(c(attr(MP,"knots"), attr(MP,"Boundary.knots"))), Coh = sort(c(attr(MC,"knots"), attr(MC,"Boundary.knots")))) } if (model %in% c("bs", "ls")) { deg <- switch(model, ls = 1, bs = 3) knl <- is.list(npar) if (knl) nk <- sapply(npar, length) MA <- if (knl) bs(A, knots = npar[["A"]][-c(1,nk[1])], Boundary.knots = npar[["A"]][ c(1,nk[1])], degree = deg) else bs(A, df = npar[["A"]], degree = deg) MP <- if (knl) bs(P, knots = npar[["P"]][-c(1,nk[2])], Boundary.knots = npar[["P"]][ c(1,nk[2])], degree = deg) else bs(P, df = npar[["P"]], degree = deg) MC <- if (knl) bs(P - A, knots = npar[["C"]][-c(1, nk[3])], Boundary.knots = npar[["C"]][c(1, nk[3])], degree = deg) else bs(P - A, df = npar[["C"]], degree = deg) Rp <- bs(p0, knots = attr(MP,"knots"), Boundary.knots = attr(MP,"Boundary.knots"), degree = attr(MP,"degree")) Rc <- bs(c0, knots = attr(MC,"knots"), Boundary.knots = attr(MC,"Boundary.knots"), degree = attr(MC,"degree")) Knots <- list(Age = sort(c(attr(MA,"knots"),attr(MA,"Boundary.knots"))), Per = sort(c(attr(MP,"knots"),attr(MP,"Boundary.knots"))), Coh = sort(c(attr(MC,"knots"),attr(MC,"Boundary.knots")))) } } if (tolower(substr(dist, 1, 2)) == "po") { m.APC <- glm(D ~ MA + I(P - p0) + MP + MC, offset = log(Y), family = poisson) Dist <- "Poisson with log(Y) offset" } if (tolower(substr(dist, 1, 3)) %in% c("bin")) { m.APC <- glm(cbind(D, Y - D) ~ MA + I(P - p0) + MP + MC, family = binomial) Dist <- "Binomial regression (logistic) of D/Y" } m.AP <- update(m.APC, . ~ . - MC) m.AC <- update(m.APC, . ~ . - MP) m.Ad <- update(m.AP, . ~ . - MP) m.A <- update(m.Ad, . ~ . - I(P - p0)) m.0 <- update(m.A, . ~ . - MA) AOV <- anova(m.A, m.Ad, m.AC, m.APC, m.AP, m.Ad, test = "Chisq") attr(AOV, "heading") <- "\nAnalysis of deviance for Age-Period-Cohort model\n" attr(AOV, "row.names") <- c("Age", "Age-drift", "Age-Cohort", "Age-Period-Cohort", "Age-Period", "Age-drift") A.pt <- unique(A) A.pos <- match(A.pt, A) P.pt <- unique(P) P.pos <- match(P.pt, P) C.pt <- unique(P - A) C.pos <- match(C.pt, P - A) MA <- cbind(1, MA) if (!mode(drtyp) %in% c("character", "numeric")) stop("\"dr.extr\" must be of mode \"character\" or \"numeric\".\n") if (is.character(drtyp)) wt <- if (toupper(substr(drtyp, 1, 1)) == "W") D else rep(1, length(D)) if (is.numeric(drtyp)) wt <- drtyp Rp <- matrix(Rp, nrow = 1) Rc <- matrix(Rc, nrow = 1) xP <- detrend(rbind(Rp, MP), c(p0, P), weight = c(0, wt)) xC <- detrend(rbind(Rc, MC), c(c0, P - A), weight = c(0, wt)) MPr <- xP[-1,,drop=FALSE] - ref.p * xP[rep(1, nrow(MP)),,drop=FALSE] MCr <- xC[-1,,drop=FALSE] - ref.c * xC[rep(1, nrow(MC)),,drop=FALSE] if (length(grep("-", parm)) == 0) { if (parm %in% c("ADPC", "ADCP", "APC", "ACP")) m.APC <- update(m.0, . ~ . - 1 + MA + I(P - p0) + MPr + MCr) drift <- rbind( ci.exp(m.APC, subset = "I\\(", alpha = alpha), ci.exp(m.Ad , subset = "I\\(", alpha = alpha) ) rownames(drift) <- c("APC", "A-d") if (parm == "ADCP") m.APC <- update(m.0, . ~ . - 1 + MA + I(P - A - c0) + MPr + MCr) if (parm == "APC") { MPr <- cbind(P - p0, MPr) m.APC <- update(m.0, . ~ . - 1 + MA + MPr + MCr) } if (parm == "ACP") { MCr <- cbind(P - A - c0, MCr) m.APC <- update(m.0, . ~ . - 1 + MA + MPr + MCr) } Age <- cbind(Age = A.pt, ci.exp(m.APC, subset = "MA", ctr.mat = MA[A.pos,,drop=FALSE], alpha = alpha))[order(A.pt),] Per <- cbind(Per = P.pt, ci.exp(m.APC, subset = "MPr", ctr.mat = MPr[P.pos,,drop=FALSE], alpha = alpha))[order(P.pt),] Coh <- cbind(Coh = C.pt, ci.exp(m.APC, subset = "MCr", ctr.mat = MCr[C.pos,,drop=FALSE], alpha = alpha))[order(C.pt),] colnames(Age)[-1] <- c("Rate", lu) colnames(Per)[-1] <- c("P-RR", lu) colnames(Coh)[-1] <- c("C-RR", lu) Type <- paste("ML of APC-model", Dist, ": (", parm, "):\n") Model <- m.APC } else { adc <- update(m.0, . ~ . - 1 + MA + I(P - A - c0)) adp <- update(m.0, . ~ . - 1 + MA + I(P - p0)) drift <- ci.exp(adc, subset = "I\\(") rownames(drift) <- "A-d" xP <- cbind(1, P - p0, MPr) xC <- cbind(1, P - A - c0, MCr) lP <- cbind(P - p0, MPr) lC <- cbind(P - A - c0, MCr) if (parm == "AD-C-P") { rc <- update(m.0, . ~ . - 1 + xC, offset = predict(adc, type = "link")) rp <- update(m.0, . ~ . - 1 + xP, offset = predict(adc, type = "link")) A.eff <- ci.exp(adc, subset = "MA", ctr.mat = MA[A.pos,], alpha = alpha) C.eff <- ci.exp( rc, subset = "xC", ctr.mat = xC[C.pos,], alpha = alpha) P.eff <- ci.exp( rp, subset = "xP", ctr.mat = xP[P.pos,], alpha = alpha) Model <- list( adc, rc, rp ) } else if (parm == "AD-P-C") { rp <- update(m.0, . ~ . - 1 + xP, offset = predict(adp,type = "link")) rc <- update(m.0, . ~ . - 1 + xC, offset = predict(rp,type = "link")) A.eff <- ci.exp(adp, subset = "MA", ctr.mat = MA[A.pos,], alpha = alpha) P.eff <- ci.exp(rp, subset = "xP", ctr.mat = xP[P.pos,], alpha = alpha) C.eff <- ci.exp(rc, subset = "xC", ctr.mat = xC[C.pos,], alpha = alpha) Model <- list( adp, rp, rc ) } else if (parm == "AC-P") { ac <- update(m.0, . ~ . - 1 + MA + lC) rp <- update(m.0, . ~ . - 1 + xP, offset = predict(ac,type = "link")) A.eff <- ci.exp(ac, subset = "MA", ctr.mat = MA[A.pos,], alpha = alpha) C.eff <- ci.exp(ac, subset = "lC", ctr.mat = lC[C.pos,], alpha = alpha) P.eff <- ci.exp(rp, subset = "xP", ctr.mat = xP[P.pos,], alpha = alpha) Model <- list( ac, rp ) } else if (parm == "AP-C") { ap <- update(m.0, . ~ . - 1 + MA + lP) rc <- update(m.0, . ~ . - 1 + xC, offset = predict(ap,type = "link")) A.eff <- ci.exp(ap, subset = "MA", ctr.mat = MA[A.pos,], alpha = alpha) P.eff <- ci.exp(ap, subset = "lP", ctr.mat = lP[P.pos,], alpha = alpha) C.eff <- ci.exp(rc, subset = "xC", ctr.mat = xC[C.pos,], alpha = alpha) Model <- list( ap, rc ) } Age <- cbind(Age = A.pt, A.eff)[order(A.pt),] Per <- cbind(Per = P.pt, P.eff)[order(P.pt),] Coh <- cbind(Cph = C.pt, C.eff)[order(C.pt),] colnames(Age)[-1] <- c("A.eff", lu) colnames(Per)[-1] <- c("P.eff", lu) colnames(Coh)[-1] <- c("C.eff", lu) Type <- paste("Sequential modelling", Dist, ": (", parm, "):\n") } res <- list(Type = Type, Model = Model, Age = Age, Per = Per, Coh = Coh, Drift = drift, Ref = c(Per = if ( parm %in% c("APC","ADPC","Ad-P-C","AP-C") ) p0 else NA, Coh = if ( parm %in% c("ACP","ADCP","Ad-C-P","AC-P") ) c0 else NA ), Anova = AOV) # If a spline model is used, add a "Knots" component to the apc-object if (model %in% c("ns", "bs")) res <- c(res, list(Knots = Knots)) res$Age[, -1] <- res$Age[, -1] * scale if (print.AOV) { print(res$Type) print(res$Anova) } # Print warnings about reference points: if( !ref.p & parm %in% c("APC","ADPC") ) cat( "No reference period given:\n", "Reference period for age-effects is chosen as\n", "the median date of event: ", p0 ) if( !ref.c & parm %in% c("ACP","ADCP") ) cat( "No reference period given:\n", "Reference period for age-effects is chosen as\n", "the median date of birth for persons with event: ", c0 ) class(res) <- "apc" invisible(res) } Epi/R/ROC.R0000644000175100001440000002211312531361077011760 0ustar hornikuserssteplines <- function( x, y, left = TRUE, right = !left, order = TRUE, ... ) { # A function to plot step-functions # # Get the logic right if right is supplied... left <- !right # ... right! n <- length( x ) if( any( order ) ) ord <- order(x) else ord <- 1:n dbl <- rep( 1:n, rep( 2, n) ) xv <- c( !left, rep( T, 2*(n-1) ), left) yv <- c( left, rep( T, 2*(n-1) ), !left) lines( x[ord[dbl[xv]]], y[ord[dbl[yv]]], ... ) } interp <- function ( target, fv, res ) { # Linear interpolaton of the values in the N by 2 matrix res, # to the target value target on the N-vector fv. # Used for placing tickmarks on the ROC-curves. # where <- which( fv>target )[1] - 1:0 int <- fv[where] wt <- ( int[2] - target ) / diff( int ) wt[2] <- 1-wt t( res[where,] ) %*% wt } ROC.tic <- function ( tt, txt = formatC(tt,digits=2,format="f"), dist = 0.02, angle = +135, col = "black", cex = 1.0, fv, res ) { # Function for drawing tickmarks on a ROC-curve # for (i in 1:length(tt)) { pnt <- interp ( tt[i], fv, res ) x <- 1-pnt[2] y <- pnt[1] lines( c( x, x+dist*cos(pi*angle/180) ), c( y, y+dist*sin(pi*angle/180) ), col=col ) text( x+dist*cos(pi*angle/180), y+dist*sin(pi*angle/180), txt[i], col=col, adj=c( as.numeric(abs(angle)>=90), as.numeric( angle <= 0)), cex=cex ) } } ROC <- function ( test = NULL, stat = NULL, form = NULL, plot = c( "sp", "ROC" ), PS = is.null(test), # Curves on probability scale PV = TRUE, # sn, sp, PV printed at "optimality" point MX = TRUE, # tick at "optimality" point MI = TRUE, # Model fit printed AUC = TRUE, # Area under the curve printed grid = seq(0,100,10), # Background grid (%) col.grid = gray( 0.9 ), cuts = NULL, lwd = 2, data = parent.frame(), ... ) { # First all the computations # # Name of the response rnam <- if ( !missing( test ) ) deparse( substitute( test ) ) else "lr.eta" # Fit the model and get the info for the two possible types of input if( is.null( form ) ) { if( is.null( stat ) | is.null( test ) ) stop( "Either 'test' AND 'stat' OR 'formula' must be supplied!" ) lr <- glm( stat ~ test, family=binomial )#, data=data ) resp <- stat Model.inf <- paste("Model: ", deparse( substitute( stat ) ), "~", deparse( substitute( test ) ) ) } else { lr <- glm(form, family = binomial, data = data) resp <- eval( parse(text = deparse(form[[2]])), envir=lr$model ) Model.inf <- paste("Model: ",paste(paste(form)[c(2,1,3)], collapse=" ")) } # Form the empirical distribution function for test for each of # the two categories of resp. # First a table of the test (continuous variable) vs. the response and # adding a row of 0s so that we have all points fro the ROC curve m <- as.matrix( base::table( switch( PS+1, test, lr$fit ), resp ) ) m <- addmargins( rbind( 0, m ), 2 ) # What values of test/eta do the rows refer to fv <- c( -Inf, sort( unique( switch( PS+1, test, lr$fit ) ) ) ) # How many rows in this matrix nr <- nrow(m) # Calculate the empirical distribution functions (well, cumulative numbers): m <- apply( m, 2, cumsum ) # Then the relevant measures are computed. sns <- (m[nr,2]-m[,2]) / m[nr,2] spc <- m[,1] / m[nr,1] pvp <- m[,2] / m[,3] pvn <- (m[nr,1]-m[,1]) / ( m[nr,3]-m[,3] ) res <- data.frame( cbind( sns, spc, pvp, pvn, fv ) ) names( res ) <- c( "sens", "spec", "pvp", "pvn", rnam ) # AUC by triangulation auc <- sum( (res[-1,"sens"]+res[-nr,"sens"])/2 * abs(diff(1-res[,"spec"])) ) # Plot of sens, spec, PV+, PV-: if ( any( !is.na( match( c( "SP", "SNSP", "SPV" ), toupper( plot ) ) ) ) ) { # First for probability scale if ( PS ) { plot( 0:1, 0:1, xlim=0:1, xlab="Cutpoint for predicted probability", ylim=0:1, ylab=" ", type="n" ) if( is.numeric( grid ) ) abline( h=grid/100, v=grid/100, col=col.grid ) box() for ( j in 4:1 ){ steplines( fv, res[,j], lty=1, lwd=lwd, col=gray((j+1)/7)) } text( 0, 1.01, "Sensitivity", cex=0.7, adj=c(0,0), font=2 ) text( 1, 1.01, "Specificity", cex=0.7, adj=c(1,0), font=2 ) text( 0, m[nr,2]/m[nr,3]-0.01, "PV+", cex=0.7, adj=c(0,1), font=2 ) text( 0 + strwidth( "PV+", cex=0.7 ), m[nr,2]/m[nr,3]-0.01, paste( " (= ", m[nr,2],"/", m[nr,3], " =", formatC( 100*m[nr,2]/m[nr,3], digits=3 ), "%)", sep=""), adj=c(0,1), cex=0.7 ) text( 1, 1-m[nr,2]/m[nr,3]-0.01, "PV-", cex=0.7, adj=c(1,1), font=2 ) } # then for test-variable scale else { xl <- range( test ) plot( xl, 0:1, xlim=xl, xlab=paste( deparse( substitute( test ) ), "(quantiles)" ), ylim=0:1, ylab=" ", type="n" ) if( is.numeric( grid ) ) abline( h=grid/100, v=quantile( test, grid/100 ), col=col.grid ) box() for ( j in 4:1 ){ steplines( fv, res[,j], lty=1, lwd=lwd, col=gray((j+1)/7))} text( xl[1], 1.01, "Sensitivity", cex=0.7, adj=c(0,0), font=2 ) text( xl[2], 1.01, "Specificity", cex=0.7, adj=c(1,0), font=2 ) text( xl[1], m[nr,2]/m[nr,3]-0.01, "PV+", cex=0.7, adj=c(0,1), font=2 ) text( xl[1] + strwidth( "PV+", cex=0.7 ), m[nr,2]/m[nr,3]-0.01, paste( " (= ", m[nr,2],"/", m[nr,3], " =", formatC( 100*m[nr,2]/m[nr,3], digits=3 ), "%)", sep=""), adj=c(0,1), cex=0.7 ) text( xl[2], 1-m[nr,2]/m[nr,3]-0.01, "PV-", cex=0.7, adj=c(1,1), font=2 ) } } # Plot of ROC-curve: if ( any( !is.na( match( "ROC", toupper( plot ) ) ) ) ) { plot( 1-res[,2], res[,1], xlim=0:1, xlab="1-Specificity", ylim=0:1, ylab= "Sensitivity", type="n", ...) if( is.numeric( grid ) ) abline( h=grid/100, v=grid/100, col=gray( 0.9 ) ) abline( 0, 1, col=gray( 0.4 ) ) box() lines( 1-res[,"spec"], res[,"sens"], lwd=lwd ) # Tickmarks on the ROC-curve if ( !is.null(cuts) ) { ROC.tic( cuts, txt=formatC( cuts, digits=2, format="f" ), fv=fv, res=res, dist=0.03, cex=0.7) } # Plot of optimality point if (MX) { mx <- max( res[,1]+res[,2] ) mhv <- which( (res[,1]+res[,2])==mx )[1] mxf <- fv[mhv] abline( mx-1, 1, col=gray(0.4) ) ROC.tic( mxf, txt=paste( rnam, "=", formatC( mxf, format="f", digits=3 ) ), fv=fv, res=res, dist=0.03, cex=0.7, angle=135 ) } # Model information if (MI) { crn <- par()$usr text(0.95*crn[2]+0.05*crn[1], 0.07, Model.inf, adj=c(1,0.5),cex=0.7) cf <- summary(lr)$coef[,1:2] nf <- dimnames(cf)[[1]] text(0.95*crn[2]+0.05*crn[1], 0.10, paste("Variable\ \ \ \ \ \ est.\ \ \ \ \ (s.e.) \ \ \n", paste(rbind(nf, rep("\ \ \ \ ",length(nf)), formatC(cf[,1],digits=3,format="f"), rep("\ \ \ (",length(nf)), formatC(cf[,2],digits=3,format="f"), rep(")",length(nf)), rep("\n",length(nf))), collapse=""), collapse=""), adj=c(1,0), cex=0.7 ) } # Print the area under the curve if (AUC) { crn <- par()$usr text( 0.95*crn[2]+0.05*crn[1], 0.00, paste( "Area under the curve:", formatC( auc, format="f", digits=3, width=5 ) ), adj=c(1,0), cex=0.7 ) } # Predictive values at maximum if (PV) { if(!MX) { mx <- max(res[,1]+res[,2]) mhv <- which((res[,1]+res[,2])==mx) mxf <- fv[mhv] } ROC.tic(mxf, fv=fv, res=res, txt= paste( "Sens: ", formatC(100*res[mhv,1],digits=1,format="f"), "%\n", "Spec: ", formatC(100*res[mhv,2],digits=1,format="f"), "%\n", "PV+: ", formatC(100*res[mhv,3],digits=1,format="f"), "%\n", "PV-: ", formatC(100*res[mhv,4],digits=1,format="f"), "%", sep="" ), dist=0.1, cex=0.7, angle=-45 ) } } invisible( list( res=res, AUC=auc, lr=lr ) ) } Epi/R/ci.mat.R0000644000175100001440000000045012531361077012510 0ustar hornikusersci.mat <- function( alpha=0.05, df=Inf ) { ciM <- rbind( c(1,1,1), qt(1-alpha/2,df)*c(0,-1,1) ) colnames( ciM ) <- c("Estimate", paste( formatC( 100* alpha/2 , format="f", digits=1 ), "%", sep="" ), paste( formatC( 100*(1-alpha/2), format="f", digits=1 ), "%", sep="" ) ) ciM } Epi/R/effx.match.r0000644000175100001440000001531612531361077013427 0ustar hornikusers## Program to calculate effects for matched case-control studies ## Michael Hills ## Improved by BxC and MP ## Post Tartu 2007 version June 2007 effx.match<-function(response, exposure, match, strata=NULL, control=NULL, base=1, digits=3, alpha=0.05, data=NULL) { ## stores the variable names for response, etc. rname<-deparse(substitute(response)) ename<-deparse(substitute(exposure)) if (!missing(strata))sname<-deparse(substitute(strata)) ## The control argument is more complex, as it may be a name or ## list of names if(!missing(control)) { control.arg <- substitute(control) if (length(control.arg) > 1) { control.names <- sapply(control.arg, deparse)[-1] } else { control.names <- deparse(control.arg) } } ## If data argument is supplied, evaluate the arguments in that ## data frame. if (!missing(data)) { exposure <- eval(substitute(exposure), data) response <- eval(substitute(response), data) match <- eval(substitute(match),data) if (!missing(strata)) { strata <- eval(substitute(strata), data) } if (!missing(control)) control <- eval(substitute(control), data) } ## performs a few other checks if(rname==ename)stop("Same variable specified as response and exposure") if (!missing(strata)) { if(rname==sname)stop("Same variable specified as response and strata") if(sname==ename)stop("Same variable specified as strata and exposure") } if(!is.numeric(response))stop("Response must be numeric, not a factor") if(!missing(strata)&!is.factor(strata))stop("Stratifying variable must be a factor") tmp<-(response==0 | response==1) if(all(tmp,na.rm=TRUE)==FALSE) stop("Binary response must be coded 0,1 or NA") if(class(exposure)[1]=="ordered") { exposure<-factor(exposure, ordered=F) } ## Fix up the control argument as a named list if (!missing(control)) { if (is.list(control)) { names(control) <- control.names } else { control <- list(control) names(control) <- control.names } } ## prints out some information about variables cat("---------------------------------------------------------------------------","\n") cat("response : ", rname, "\n") cat("exposure : ", ename, "\n") if(!missing(control))cat("control vars : ",names(control),"\n") if(!missing(strata)) cat("stratified by : ",sname,"\n") cat("\n") if(is.factor(exposure)) { cat(ename,"is a factor with levels: ") cat(paste(levels(exposure),collapse=" / "),"\n") cat( "baseline is ", levels( exposure )[base] ,"\n") exposure <- Relevel( exposure, base ) } else { cat(ename,"is numeric","\n") } if(!missing(strata)) { cat(sname,"is a factor with levels: ") cat(paste(levels(strata),collapse="/"),"\n") } cat("effects are measured as odds ratios","\n") cat("---------------------------------------------------------------------------","\n") cat("\n") ## gets number of levels for exposure if a factor if(is.factor(exposure)) { nlevE<-length(levels(exposure)) } else { nlevE<-1 } ## labels the output if(is.factor(exposure)) { cat("effect of",ename,"on",rname,"\n") } else { cat("effect of an increase of 1 unit in",ename,"on",rname,"\n") } if(!missing(control)) { cat("controlled for",names(control),"\n\n") } if(!missing(strata)) { cat("stratified by",sname,"\n\n") } ## no stratifying variable if(missing(strata)) { if(missing(control)) { m<-clogit(response~exposure+strata(match)) cat("number of observations ",m$n,"\n\n") } else { m<-clogit(response~.+exposure+strata(match), subset=!is.na(exposure),data=control) cat("number of observations ",m$n,"\n\n") mm<-clogit(response~.+strata(match), subset=!is.na(exposure),data=control) } res<-ci.lin(m,subset=c("exposure"),Exp=TRUE,alpha=alpha)[,c(5,6,7)] res<-signif(res,digits) if(nlevE<3) { names(res)[1]<-c("Effect") } else { colnames(res)[1]<-c("Effect") if(is.factor(exposure)) { ln <- levels(exposure) rownames(res)[1:nlevE-1]<-paste(ln[2:nlevE],"vs",ln[1]) } } print(res) if(missing(control)) { chisq<-round(summary(m)$logtest[1],2) df<-round(summary(m)$logtest[2]) p<-round(summary(m)$logtest[3],3) cat("\n") cat("Test for no effects of exposure: ","\n") cat("chisq=",chisq, " df=",df, " p-value=",format.pval(p,digits=3),"\n") invisible(list(res,paste("Test for no effects of exposure on", df,"df:","p=",format.pval(p,digits=3)))) } else { aov <- anova(mm,m,test="Chisq") cat("\nTest for no effects of exposure on", aov[2,3],"df:", "p-value=",format.pval(aov[2,5],digits=3),"\n") invisible(list(res,paste("Test for no effects of exposure on", aov[2,3],"df:","p=",format.pval(aov[2,5],digits=3)))) } } ## stratifying variable if(!missing(strata)) { sn <- levels(strata) nlevS<-length(levels(strata)) if(missing(control)) { m<-clogit(response~strata/exposure+strata(match)) cat("number of observations ",m$n,"\n\n") mm<-clogit(response~strata+exposure+strata(match)) } else { m <-clogit(response~strata/exposure + . +strata(match), data=control) cat("number of observations ",m$n,"\n\n") mm <-clogit(response~strata+exposure + . +strata(match), data=control) } res<-ci.lin(m,Exp=TRUE,alpha=alpha,subset="strata")[c(-1:-(nlevS-1)),c(5,6,7)] res<-signif(res,digits) colnames(res)[1]<-c("Effect") if(is.factor(exposure)) { ln<-levels(exposure) newrownames<-NULL for(i in c(1:(nlevE-1))) { newrownames<-c(newrownames, paste("strata",sn[1:nlevS],"level",ln[i+1],"vs",ln[1])) } } else { newrownames<-paste("strata",sn[1:nlevS]) } rownames(res)<-newrownames aov<-anova(mm,m,test="Chisq") print( res ) cat("\nTest for effect modification on", aov[2,3],"df:","p-value=",format.pval(aov[2,5],digits=3),"\n") invisible(list(res,paste("Test for effect modification on", aov[2,3],"df:","p-value=",format.pval(aov[2,5],digits=3)))) } } Epi/R/apc.frame.R0000644000175100001440000000506712531361077013202 0ustar hornikusersapc.frame <- function( a.lab, cp.lab, r.lab, rr.lab = r.lab / rr.ref, rr.ref = r.lab[length(r.lab)/2], a.tic = a.lab, cp.tic = cp.lab, r.tic = r.lab, rr.tic = r.tic / rr.ref, tic.fac = 1.3, a.txt = "Age", cp.txt = "Calendar time", r.txt = "Rate per 100,000 person-years", rr.txt = "Rate ratio", ref.line = TRUE, gap = diff(range(c(a.lab,a.tic)))/10, col.grid = gray( 0.85 ), sides = c(1,2,4) ) { cp <- min( c(cp.tic,cp.lab) ) - max( c(a.lab,a.tic) ) - gap xl <- c(min( c(a.lab,a.tic) ), max( c(a.lab,a.tic) ) + gap + diff( range( c(cp.lab,cp.tic) ) ) ) yl <- range( c(r.lab,r.tic) ) rrtck <- outer( c(0.5,1,1.5,2:9), 10^(-5:5), "*" ) # Empty plot frame plot( NA, xlab="", xlim=xl, xaxt="n", xaxs="i", ylab="", ylim=yl, yaxt="n", yaxs="i", log="y" ) # Grid lines abline( h=c(r.tic,outer( c(0.5,1,1.5,2:9), 10^(-5:5), "*" )), v=c(a.tic,cp.tic - cp), col=col.grid ) # Reference line for the RR=1 if ( ref.line ) segments( min(c(cp.lab,cp.tic))-cp, rr.ref, max(c(cp.lab,cp.tic))-cp, rr.ref ) # Close it nicely off: box() # Axis construction (tickmarks, labels and annotation) if ( 1 %in% sides ) { axis( side=1, at=a.lab ) axis( side=1, at=a.tic, labels=NA, tcl=par("tcl")/tic.fac ) axis( side=1, at=cp.lab - cp, labels=cp.lab ) axis( side=1, at=cp.tic - cp, labels=NA, tcl=par("tcl")/tic.fac ) axis( side=1, at=mean( a.lab ), labels=a.txt, line=1, tcl=0 ) axis( side=1, at=mean( cp.lab - cp ), labels=cp.txt, line=1, tcl=0 ) } if ( 2 %in% sides ) { axis( side=2, at=r.lab, labels=paste( r.lab ) ) axis( side=2, at=r.tic, labels=NA, tcl=par("tcl")/tic.fac ) mtext( side=2, r.txt, line=2.5, las=0 ) } if ( 3 %in% sides ) { axis( side=3, at=a.lab ) axis( side=3, at=a.tic, labels=NA, tcl=par("tcl")/tic.fac ) axis( side=3, at=cp.lab - cp, labels=cp.lab ) axis( side=3, at=cp.tic - cp, labels=NA, tcl=par("tcl")/tic.fac ) axis( side=3, at=mean( a.lab ), labels=a.txt, line=1, tcl=0 ) axis( side=3, at=mean( cp.lab - cp ), labels=cp.txt, line=1, tcl=0 ) } if ( 4 %in% sides ) { axis( side=4, at=c(rr.ref,rr.lab*rr.ref), labels=paste( c(1,rr.lab) ) ) axis( side=4, at=c(rr.ref,rr.tic*rr.ref), labels=NA, tcl=par("tcl")/tic.fac ) mtext( side=4, rr.txt, line=2.5, las=0 ) } # Return the offset for the cohort/period and the RR-factor. options( apc.frame.par = c("cp.offset"=cp,"RR.fac"=rr.ref) ) invisible( c("cp.offset"=cp,"RR.fac"=rr.ref) ) } Epi/R/Ns.r0000644000175100001440000000503612562636173011770 0ustar hornikusers#------------------------------------------------------------------------------- # A wrapper for ns that automatically takes the smallest and largest knots # as boundary knots without further ado, but also allows cenering # around a reference and detrending by means of projection Ns <- function( x, ref = NULL, df = NULL, knots = NULL, intercept = FALSE, Boundary.knots = NULL, detrend = FALSE ) { ## Check sensibility of arguments if( !is.null(ref) ) { if( !is.vector(ref) ) stop( "Argument 'ref' must be a scalar, but it is a ", class(ref), "." ) if( is.vector(ref) & length(ref)>1 ) stop( "Argument 'ref' must be a scalar, but has length ", length(ref), "." ) if( intercept ) { warning( "ref= specified, hence intercept=TRUE is ignored") intercept <- FALSE } } ## Detrending required? if( any(detrend>0) ) ## covers both logical and vector { if( any(detrend<0) ) stop( "Some elements of weight are <0, e.g. no", (ww <- which(detrend<0))[1:min(5,length(ww))], "." ) if( !(length(detrend) %in% c(1,length(x))) ) { warning( "Weights in inner product diagonal matrix set to 1") weight <- rep(1,length(x)) } else weight <- if( is.numeric(detrend) ) detrend else rep(1,length(x)) detrend <- TRUE } if( detrend & intercept ) { warning( "detrend= specified, hence intercept=TRUE is ignored") intercept <- FALSE } ## Here is the specification of the spline basis ## df= specified if( !is.null(df) ) MM <- ns( x, df = df, intercept = (intercept & is.null(ref)) ) else ## knots= specified { if( is.null( Boundary.knots ) ) { if( !is.null( knots ) ) { knots <- sort( unique( knots ) ) ok <- c(1,length(knots)) Boundary.knots <- knots[ok] knots <- knots[-ok] } } MM <- ns( x, knots = knots, Boundary.knots = Boundary.knots, intercept = (intercept & is.null(ref)) ) } ## Reference point specified ? if( !is.null(ref) ) { MM <- MM - ns( rep(ref,length(x)), knots = attr(MM,"knots"), Boundary.knots = attr(MM,"Boundary.knots") ) } ## Detrending required ? if( detrend ) { DD <- detrend( MM, x, weight=weight ) ## NOTE: detrend does not preserve attributes for( aa in c("degree","knots","Boundary.knots","intercept","class") ) attr( DD, aa ) <- attr( MM, aa ) attr( DD, "detrend" ) <- TRUE attr( DD, "proj.wt" ) <- weight MM <- DD } return( MM ) } Epi/R/Termplot.R0000644000175100001440000000341412562641313013144 0ustar hornikusersTermplot <- function( obj, plot = TRUE, xlab = NULL, ylab = NULL, xeq = TRUE, yshr = 1.0, alpha = 0.05, terms = NULL, max.pt = NULL ) { # max.pt suppiled no.max <- missing( max.pt ) # Extract the curves to plot zz <- termplot( obj, se=TRUE, plot=FALSE, terms=terms ) nt <- length( zz ) for( i in 1:nt ) { # Thin the number of points in each returned term if( no.max ) max.pt <- nrow( zz[[i]] ) if( is.numeric(max.pt) & (nrow(zz[[i]]) > max.pt) ) zz[[i]] <- zz[[i]][round(seq(1,nrow(zz[[i]]),,max.pt)),] # Compute the estimate and the c.i. on log-scale zz[[i]] <- cbind( zz[[i]][,1], exp(as.matrix(zz[[i]][,2:3])%*%ci.mat(alpha=alpha)) ) } # Labels if( is.null(xlab) ) xlab <- names( zz ) if( is.null(ylab) ) ylab <- rep("",nt) ## Compute ranges of y and x xw <- sapply( zz, function(x) diff(range(x[,1 ])) ) yl <- sapply( zz, function(x) range(x[,2:4]) ) mr <- max( apply( yl, 2, function(x) exp(diff(log(x)))) ) yl <- apply( yl, 2, function(x) exp(mean(log(x))+c(-1,1)*log(mr)/2*yshr)) if( plot ) { ## Plot the effects side by side par( mfrow=c(1,nt), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 )#, bty="n", las=1 ) if( xeq ) ## Plot the terms so that x- and y-axes have the same extent { # Margins and total width in inches mw <- sum(par("mai")[c(2,4)]) tw <- par("pin")[1] # Widths of each plot, approx. at least pw <- (tw-nt*mw)*xw/sum(xw)+mw layout( rbind(1:nt), widths=pw ) } for( i in 1:nt ) matplot( zz[[i]][,1], zz[[i]][,2:4], xlab=xlab[i], xaxs="i", xlim=range(zz[[i]][,1]), ylab=ylab[i], yaxs="i", ylim=yl[,i], log="y", type="l", lty=1, lwd=c(5,2,2), col="black" ) } ## Return the extracted terms invisible( zz ) } Epi/R/foreign.R0000644000175100001440000000355312531545751013000 0ustar hornikusers# The msdata method msdata <- function (obj, ...) UseMethod("msdata") msdata.Lexis <- function( obj, time.scale = timeScales(obj)[1], ... ) { tr.mat <- tmat(obj) # Essentially a msdata object is a stacked Lexis object with other variable names tmp <- stack.Lexis( factorize.Lexis(obj) ) lv <- c( match(timeScales(obj),names(tmp)), grep("lex\\." ,names(tmp)) ) # The transitions that we refer to are extracted from lex.Tr: ss <- strsplit( as.character(tmp$lex.Tr), "->" ) # The resulting dataframe is created by renaming columns in the stacked Lexis object data.frame( id = tmp$lex.id, from = sapply( ss, FUN=function(x) x[1] ), to = sapply( ss, FUN=function(x) x[2] ), trans = as.integer( tmp$lex.Tr ), Tstart = tmp[,time.scale], Tstop = tmp[,time.scale] + tmp$lex.dur, time = tmp$lex.dur, status = as.integer( tmp$lex.Fail ), tmp[,-lv] ) } # The etm method etm <- function (obj, ...) UseMethod("etm") etm.data.frame <- function (obj, ...) { etm::etm( data=obj, ... ) } etm.Lexis <- function( obj, time.scale = timeScales(obj)[1], cens.name = "cens", s = 0, t = "last", covariance = TRUE, delta.na = TRUE, ... ) { dfr <- data.frame( id = obj$lex.id, from = as.character(obj$lex.Cst), to = as.character(obj$lex.Xst), entry = obj[,time.scale], exit = obj[,time.scale] + obj$lex.dur, stringsAsFactors = FALSE ) dfr$to <- with( dfr, ifelse( from==to, cens.name, to ) ) etm::etm( data = dfr, state.names = levels( obj$lex.Cst ), tra = tmat(obj,mode="logical"), cens.name = cens.name, s = s, t = t, covariance = covariance, delta.na = delta.na ) } Epi/R/contr.diff.R0000644000175100001440000000057512531361077013401 0ustar hornikuserscontr.diff <- function(n) { if (is.numeric(n) && length(n) == 1) levs <- 1:n else { levs <- n n <- length(n) } contr <- array(0, c(n, n), list(levs, levs)) contr[col(contr) == row(contr)] <- 1 contr[row(contr) - col(contr) == 1] <- -1 if (n < 2) stop(paste("Contrasts not defined for", n - 1, "degrees of freedom")) contr } Epi/R/ci.cum.R0000644000175100001440000000524112554144544012521 0ustar hornikusersci.cum <- function( obj, ctr.mat = NULL, subset = NULL, intl = 1, alpha = 0.05, Exp = TRUE, ci.Exp = FALSE, sample = FALSE ) { # First extract all the coefficients and the variance-covariance matrix cf <- COEF( obj ) vcv <- VCOV( obj ) # Check if the intervals matches ctr.mat if( length( intl ) == 1 ) intl <- rep( intl, nrow( ctr.mat ) ) if( length( intl ) != nrow( ctr.mat ) ) stop( "intl must match ctr.mat" ) # Workaround to expand the vcov matrix with 0s so that it matches # the coefficients vector in case of (extrinsic) aliasing. if( any( is.na( cf ) ) ) { vM <- matrix( 0, length( cf ), length( cf ) ) dimnames( vM ) <- list( names( cf ), names( cf ) ) vM[!is.na(cf),!is.na(cf)] <- vcv cf[is.na(cf)] <- 0 vcv <- vM } if( is.character( subset ) ) { sb <- numeric(0) for( i in 1:length( subset ) ) sb <- c(sb,grep( subset[i], names( cf ) )) subset <- sb # unique( sb ) } # If subset is not given, make it the entire set if( is.null( subset ) ) subset <- 1:length( cf ) # Exclude units where aliasing has produced NAs. # Not needed after replacement with 0s # subset <- subset[!is.na( cf[subset] )] cf <- cf[subset] vcv <- vcv[subset,subset] if( is.null( ctr.mat ) ) { ctr.mat <- diag( length( cf ) ) rownames( ctr.mat ) <- names( cf ) } if( dim( ctr.mat )[2] != length(cf) ) stop( paste("\n Dimension of ", deparse(substitute(ctr.mat)), ": ", paste(dim(ctr.mat), collapse = "x"), ", not compatible with no of parameters in ", deparse(substitute(obj)), ": ", length(cf), sep = "")) # Finally, here is the actual computation of the estimates ct <- ctr.mat %*% cf vc <- ctr.mat %*% vcv %*% t( ctr.mat ) # If a sample is requested replace the eatimate by a sample if( sample ) ct <- t( mvrnorm( sample, ct, vc ) ) # If Exp was requested, we take the exponential of the estimates # before we cumulate the sum if( Exp ) { ct <- exp( ct ) vc <- ( ct[,1] %*% t(ct[,1]) ) * vc } # Here is the cumulation matrix cum.mat <- 1 - upper.tri( diag(ct[,1]) ) # Multiply columns of the matrix with interval lengths cum.mat <- t( intl * t( cum.mat ) ) # This is then multiplied to the coefficients ct <- cum.mat %*% ct if( sample ) return( ct ) else { vc <- cum.mat %*% vc %*% t( cum.mat ) se <- sqrt( diag( vc ) ) if( !ci.Exp ) { cum <- cbind( ct, se ) %*% ci.mat( alpha=alpha ) return( cbind( cum, "StdErr"=se ) ) } else { cum <- exp( cbind( log(ct), se/ct ) %*% ci.mat( alpha=alpha ) ) return( cbind( cum, "Erf"=exp( qnorm(1-alpha/2)*se/as.vector(ct) ) ) ) } } } Epi/R/plotEst.R0000644000175100001440000000726312531361077013000 0ustar hornikusersget.ests <- function( ests, ... ) { # If a model object is supplied, extract the parameters and the # standard errors # if( inherits( ests, c("glm","coxph","clogistic","gnlm","survreg") ) ) ests <- ci.exp( ests, ... ) else if( inherits( ests, c("lm","gls","lme","nls","polr", "mer","MIresult","mipo") ) ) ests <- ci.lin( ests, ... )[,-(2:4)] ests } plotEst <- function( ests, y = dim(ests)[1]:1, txt = rownames(ests), txtpos = y, ylim = range(y)-c(0.5,0), xlab = "", xtic = nice( ests[!is.na(ests)], log=xlog ), xlim = range( xtic ), xlog = FALSE, pch = 16, cex = 1, lwd = 2, col = "black", col.txt = "black", font.txt = 1, col.lines = col, col.points = col, vref = NULL, grid = FALSE, col.grid = gray(0.9), restore.par = TRUE, ... ) { # Function to plot estimates from a model. # Assumes that ests is a p by 3 matrix with estimate, lo and hi as # columns OR a model object. # Extract the estimates if necessary # ests <- get.ests( ests, ... ) # Is it likley that we want a log-axis for the parameters? # mult <- inherits( ests, c("glm","coxph","gnlm") ) if( missing(xlog) ) xlog <- mult # Create an empty plot in order to access the dimension so that # sufficient place can be made for the text in the margin # plot.new() mx <- max( strwidth( txt, units="in" ) ) oldpar <- par( mai=par("mai") + c(0,mx,0,0) ) if( restore.par ) on.exit( par( oldpar ) ) # Set up the coordinate system witout advancing a frame # plot.window( xlim = xlim, ylim = ylim, log = ifelse( xlog, "x", "") ) # Draw a grid if requested # if( !is.logical( grid ) ) abline( v = grid, col = col.grid ) if( is.logical( grid ) & grid[1] ) abline( v = xtic, col = col.grid ) # Draw a vertical reference line # if( !missing( vref ) ) abline( v = vref ) # Draw the estimates with c.i. s # linesEst( ests, y, pch=pch, cex=cex, lwd=lwd, col.points=col.points, col.lines=col.lines ) # Finally the x-axis and the annotation of the estimates # axis( side=1, at=xtic ) mtext( side=1, xlab, line=par("mgp")[1], cex=par("cex")*par("cex.lab") ) axis( side=2, at=txtpos, labels=txt, las=1, lty=0, col.axis=col.txt ) invisible( oldpar ) } pointsEst <- linesEst <- function( ests, y = dim(ests)[1]:1, pch = 16, cex = 1, lwd = 2, col = "black", col.lines = col, col.points = col, ... ) { # Function to add estimates from a model to a drawing. # Assumes that ests is a p by 3 matrix with estimate, lo and hi as # columns. # Extract the estimates if necessary # ests <- get.ests( ests, ... ) # Cut the confidence interval lines to fit inside the plot # before drawing them. # xrng <- if( par("xlog") ) 10^par("usr")[1:2] else par("usr")[1:2] segments( pmax(ests[, 2],xrng[1]), y, pmin(ests[, 3], xrng[2]), y, lwd = lwd, col=col.lines ) # Then the point estimates on top of the lines. # points( ests[, 1], y, pch = pch, cex = cex, col=col.points ) invisible() } nice <- function( x, log = F, lpos = c(1,2,5), ... ) { # Function to produce nice labels also for log-axes. # if( log ) { fc <- floor( log10( min( x ) ) ):ceiling( log10( max( x ) ) ) tick <- as.vector( outer( lpos, 10^fc, "*" ) ) ft <- max( tick[tickmax(x)] ) tick <- tick[tick>=ft & tick<=lt] if( length( tick ) < 4 & missing( lpos ) ) tick <- nice( x, log=T, lpos=c(1:9) ) if( length( tick ) > 10 & missing( lpos ) ) tick <- nice( x, log=T, lpos=1 ) tick } else pretty( x, ... ) } Epi/R/crr.Lexis.r0000644000175100001440000000253712531536633013260 0ustar hornikuserscrr.Lexis <- function( obj, mod, quiet=FALSE, ... ) { # Model formula to be transmitted md <- mod # Outcome variable fc <- as.character( mod[2] ) # Censoring levels cn <- unique( as.character(obj$lex.Xst)[obj$lex.Xst==obj$lex.Cst] ) # The competing causes (the remaining levels) cc <- setdiff( levels(obj$lex.Xst), union(fc,cn) ) # No l.h.s. side of formula when deriving model matrix mod[2] <- NULL # Remember no intercept term cv <- model.matrix( mod, data=obj )[,-1] # Then do it M <- crr( ftime = obj$lex.dur, fstatus = obj$lex.Xst, failcode = fc, cencode = cn, cov1 = cv, ... ) # A table of the no of transitions N <- with( obj, table( Relevel( lex.Xst, c(fc,cc,cn) ) ) ) names( N ) <- paste( rep( c("Event:"," comp:"," cens:"), c(length(fc),length(cc),length(cn)) ), names(N) ) # add model an table to the resulting object M <- c( M, list( model.Lexis = md, transitions = cbind(N) ) ) # remember the class attribute (lost by doing "c") class( M ) <- "crr" # print overview if desired if( !quiet ) cat( "crr analysis of event", paste('"',fc,'"',sep=''), "\n versus", paste('"',cc,'"',sep=''), "\n with", paste('"',cn,'"',sep=''), "as censoring.\n" ) M } Epi/R/float.R0000644000175100001440000000666612531361077012461 0ustar hornikusers"float" <- function(object, factor, iter.max = 50) { float.variance <- function(V, tol=1.0e-3, iter.max = 50) { ## Calculate floated variances for variance matrix V, which is ## assumed to represent a set of treatment contrasts m <- nrow(V) if (!is.matrix(V) || ncol(V) != m || m == 1) stop ("V must be a square matrix of size 2 x 2 or more") evals <- eigen(V, only.values=TRUE)$values if(any(evals < 0)) stop("V not positive definite") ## Starting values from Easton et al (1991) R <- V - diag(diag(V)) V00 <- sum(R)/(m * (m-1)) V10 <- apply(R, 1, sum)/(m-1) fv <- c(V00, V00 - 2 * V10 + diag(V)) for(iter in 1:iter.max) { w <- 1/fv S <- sum(w) w1 <- w[-1]/S ##Augment data matrix V10 <- as.vector(V %*% w1) V00 <- as.vector(1/S + t(w1) %*% V %*% w1) ##Calculate new estimates fv.old <- fv fv <- c(V00, V00 - 2 * V10 + diag(V)) ## Check convergence if(max(abs(fv.old - fv)/fv) < tol) break } if (iter == iter.max) warning("Floated variance estimates did not converge") Vmodel.inv <- S * (diag(w1) - w1 %*% t(w1)) evals <- 1/(eigen(V %*% Vmodel.inv, only.values=TRUE)$values) divergence <- sum(1/evals - 1 + log(evals))/2 return(list(variance=fv, error.limits=sqrt(range(evals)), divergence=divergence)) } if (is.null(object$xlevels)) { stop("No factors in model") } if (missing(factor)) { i <- 1 factor <- names(object$xlevels)[1] } else { i <- pmatch(factor, names(object$xlevels)) if (is.na(i)) { stop(paste("Factor",i,"not found in model")) } } xcontrasts <- object$contrasts[[i]] xlevels <- object$xlevels[[i]] xname <- names(object$xlevels)[i] nlevels <- length(xlevels) ## Extract the coefficients and variance matrix for a single factor ## from object if (nlevels <= 2) { stop ("Floated variances undefined for factors with less than 3 levels") } ## Get contrast matrix C <- if (is.matrix(xcontrasts)) { xcontrasts } else { get(xcontrasts, mode="function")(xlevels) } if (qr(C)$rank < nlevels - 1) { stop ("Impossible to reconstruct treatment contrasts") } ## Get coefficients and variance matrix if(is.null(cnames <- colnames(C))) cnames <- 1:(nlevels-1) contr.names <- paste(xname, cnames, sep="") coef <- coef(object)[contr.names] V <- vcov(object)[contr.names, contr.names] ## Convert to treatment contrast parameterization if (identical(xcontrasts, "contr.treatment")) { V.tc <- V coef.tc <- c(0, coef) } else { D.inv <- cbind(rep(-1,nlevels-1), diag(nlevels-1)) S <- D.inv %*% cbind(rep(1, nlevels), C) S <- S[,-1] ## coefficients coef.tc <- c(0, S %*% coef) ## If we find a baseline level (implicitly defined ## by having a row of zeros in the contrast matrix) ## then adjust the coefficients is.base <- apply(abs(C), 1, sum) == 0 if (any(is.base)) coef.tc <- coef.tc - coef.tc[is.base] ## variance matrix V.tc <- S %*% V %*% t(S) } names(coef.tc) <- xlevels float.out <- float.variance(V.tc, iter.max = iter.max) var <- float.out$var names(var) <- xlevels ans <- list(coef=coef.tc, var=var, limits=float.out$error.limits, factor=factor) class(ans) <- "floated" return(ans) } Epi/R/cutLexis.R0000644000175100001440000002535312531361077013146 0ustar hornikusers doCutLexis <- function(data, cut, timescale, new.scale=FALSE ) { ## new.scale is a character constant with the name of the new timescale ## Code each new interval using new variable lex.cut: ## 0 = unchanged interval (cut occurs after exit) ## 1 = first part of split interval ## 2 = second part of split interval (or cut occurs before interval) cut[is.na(cut)] <- Inf #If a cut time is missing, it never happens ## First intervals (before the cut) in.1 <- entry(data, timescale) ex.1 <- pmin(cut, exit(data, timescale)) ## Create Lexis object for first intervals lx.1 <- data lx.1$lex.dur <- ex.1 - in.1 lx.1$lex.cut <- ifelse(cut < exit(data, timescale), 1, 0) if( new.scale ) lx.1[,"lex.new.scale"] <- NA ## Second intervals (after the cut) in.2 <- pmax(cut, entry(data, timescale)) ex.2 <- exit(data, timescale) ## Create Lexis object for second intervals lx.2 <- data lx.2$lex.dur <- ex.2 - in.2 lx.2$lex.cut <- 2 if( new.scale ) lx.2[,"lex.new.scale"] <- in.2 - cut ## Update entry times lx.2[, timeScales(data)] <- exit(data) - lx.2$lex.dur return(rbind(lx.1, lx.2)) } setStatus.default <- function(data, new.state) { data$lex.Xst[data$lex.cut == 1] <- new.state[data$lex.cut == 1] data$lex.Cst[data$lex.cut == 2] <- new.state return(data) } setStatus.numeric <- function(data, new.state, precursor.states=NULL, progressive=TRUE) { if (!is.numeric(new.state)) { stop("If lex.Cst, lex.Xst are numeric, new.state must be numeric too") } data$lex.Xst[data$lex.cut == 1] <- new.state[data$lex.cut == 1] data$lex.Cst[data$lex.cut == 2] <- new.state exit.state <- data$lex.Xst[data$lex.cut == 2] is.precursor <- exit.state %in% precursor.states if (progressive) { is.precursor <- is.precursor | (exit.state < new.state) } data$lex.Xst[data$lex.cut == 2][is.precursor] <- new.state[is.precursor] return(data) } setStatus.factor <- function( data, new.state, precursor.states=NULL, progressive=TRUE) { if (!is.character(new.state)) { stop("new.state must be a character vector, but it is ",str(new.state)) } current.states <- levels(data$lex.Cst) new.states <- setdiff(new.state,current.states) new.states <- new.states[!is.na(new.states)] ## Modify factor levels if necessary if (length(new.states) > 0) { all.states <- c(current.states, sort(new.states)) new.order <- match( c(intersect(precursor.states,current.states), new.states, setdiff(current.states,precursor.states)), all.states ) levels(data$lex.Cst) <- all.states levels(data$lex.Xst) <- all.states } data$lex.Xst[data$lex.cut == 1] <- new.state[data$lex.cut == 1] data$lex.Cst[data$lex.cut == 2] <- new.state exit.state <- data$lex.Xst[data$lex.cut==2] is.precursor <- exit.state %in% precursor.states if (progressive) { if (is.ordered(data$lex.Xst)) { is.precursor <- is.precursor | (exit.state < new.state) } else { warning("progressive=TRUE argument ignored for unordered factor") } } data$lex.Xst[data$lex.cut==2][is.precursor] <- new.state[is.precursor] # Reorder factor levels sensibly if (!progressive & length(new.states)>0){ data$lex.Cst <- Relevel( data$lex.Cst, new.order ) data$lex.Xst <- Relevel( data$lex.Xst, new.order ) } return(data) } # Added by BxC match.cut <- function( data, cut ) { if( sum(!is.na(match(c("lex.id","cut","new.state"),names(cut))))<3 ) stop( "The dataframe supplied in the cut= argument must have columns", "'lex.id','cut','new.state', but the columns are:\n", names( cut ) ) else { if( length( unique( cut$lex.id ) ) < nrow( cut ) ) stop( "Values of 'lex.id' must be unique in the 'cut' dataframe" ) else zz <- merge( data[,"lex.id",drop=FALSE], cut, all.x=TRUE ) if( is.factor ( data$lex.Cst ) ) zz$new.state <- as.character(zz$new.state) if( is.numeric( data$lex.Cst ) ) zz$new.state <- as.numeric(zz$new.state) return( zz ) } } # End of addition / change cutLexis <- function(data, cut, timescale = 1, new.state = nlevels(data$lex.Cst)+1, new.scale = FALSE, split.states = FALSE, progressive = FALSE, precursor.states = NULL, count = FALSE) { if (!inherits(data, "Lexis")) stop("data must be a Lexis object") if( count ) return( countLexis( data=data, cut=cut, timescale=timescale ) ) if( inherits( cut, "data.frame" ) ){ zz <- match.cut( data, cut ) cut <- zz$cut new.state <- zz$new.state } else if (length(cut) == 1) { cut <- rep(cut, nrow(data)) } else if (length(cut) != nrow(data)) { stop("'cut' must have length 1 or nrow(data) (=", nrow(data), "),\n --- but it has length ", length(cut),".") } timescale <- check.time.scale(data, timescale) if (length(timescale) > 1) { stop("Multiple time scales") } ## If we want to add a new timescale, construct the name if( is.logical(new.scale) ) { if( new.scale ) scale.name <- paste( new.state[1], "dur", sep="." ) } else { scale.name <- new.scale new.scale <- TRUE } if (missing(new.state)) { new.state <- data$lex.Cst #Carry forward last state } else if (length(new.state) == 1) { new.state <- rep(new.state, nrow(data)) } else if (length(new.state) != nrow(data)) { stop("'new.state' must have length 1 or nrow(data) (=", nrow(data), "),\n --- but it has length ", length(new.state)) } if (progressive) { if (is.factor(data$lex.Cst) && !is.ordered(data$lex.Cst)) { stop("progressive=TRUE invalid for unordered factors") } if (any(data$lex.Xst < data$lex.Cst)) { stop("Lexis object is not progressive before splitting") } } lx <- doCutLexis( data, cut, timescale, new.scale=TRUE ) if (is.factor(data$lex.Cst)) { lx <- setStatus.factor(lx, new.state, precursor.states, progressive) } else if (is.numeric(data$lex.Cst)) { lx <- setStatus.numeric(lx, new.state, precursor.states, progressive) } else { lx <- setStatus.default(lx, new.state) } ## Remove redundant intervals lx <- lx[lx$lex.dur > 0,] ## Remove the lex.cut column lx <- lx[,-match("lex.cut",names(lx))] ## Update the states visited after the cut if( split.states & is.factor( data$lex.Cst ) ) { post.states <- setdiff( levels(data$lex.Cst), precursor.states ) tmp.Cst <- as.character( lx$lex.Cst ) tmp.Cst <- ifelse( !is.na(lx$lex.new.scale) & lx$lex.new.scale>0 & tmp.Cst %in% post.states, paste( tmp.Cst,"(",new.state,")",sep="" ), tmp.Cst ) tmp.Xst <- as.character( lx$lex.Xst ) tmp.Xst <- ifelse( !is.na(lx$lex.new.scale) & tmp.Xst %in% post.states, paste( tmp.Xst,"(",new.state,")",sep="" ), tmp.Xst ) all.levels <- unique( c(tmp.Cst,tmp.Xst) ) ## put all the new levels after the old ones xtr.levels <- setdiff( all.levels, levels(lx$lex.Cst) ) new.levels <- c( levels(lx$lex.Cst), xtr.levels ) lx$lex.Cst <- factor( tmp.Cst, levels=new.levels ) lx$lex.Xst <- factor( tmp.Xst, levels=new.levels ) } ## Include the new timescale if( new.scale ) { ## Rename the new timescale variable names(lx)[match("lex.new.scale",names(lx))] <- scale.name ## The timescales' position among columns - used to reorder columns tn <- c( match( attr( data, "time.scales" ), names( lx ) ), ncol(lx) ) oth <- setdiff( 1:ncol(lx), tn ) ## Reorder columns (lx will then lose attributes) and sort rows lx <- lx[order(lx$lex.id,lx[,timescale]),c(tn,oth)] ## Update the attributes new.br <- c( attr( data, "breaks" ), list(NULL) ) names( new.br )[length(new.br)] <- scale.name attr( lx, "time.scales" ) <- c( attr( data, "time.scales" ), scale.name ) attr( lx, "time.since" ) <- c( attr( data, "time.since" ), names(table(new.state)) ) attr( lx, "breaks" ) <- new.br attr( lx, "class" ) <- attr( data, "class" ) } else { # Remove the new timescale and sort rows lx <- lx[order(lx$lex.id,lx[,timescale]),-match("lex.new.scale",names(lx))] # and transfer all the other attributes attr( lx, "time.scales" ) <- attr( data, "time.scales" ) attr( lx, "time.since" ) <- attr( data, "time.since" ) attr( lx, "breaks" ) <- attr( data, "breaks" ) attr( lx, "class" ) <- attr( data, "class" ) } lx } countLexis <- function(data, cut, timescale = 1) { if (!inherits(data, "Lexis")) stop("data must be a Lexis object") if( inherits( cut, "data.frame" ) ){ zz <- match.cut( data, cut ) cut <- zz$cut new.state <- zz$new.state } else if (length(cut) == 1) { cut <- rep(cut, nrow(data)) } else if (length(cut) != nrow(data)) { stop("'cut' must have length 1 or nrow(data) (=", nrow(data), "),\n --- but it has length ", length(cut),".") } timescale <- check.time.scale(data, timescale) if (length(timescale) > 1) { stop("Multiple time scales not meaningful") } lx <- doCutLexis(data, cut, timescale) ## Update status variables lx$lex.Xst[lx$lex.cut == 1] <- lx$lex.Cst[lx$lex.cut == 1] + 1 lx$lex.Cst[lx$lex.cut == 2] <- lx$lex.Cst[lx$lex.cut == 2] + 1 lx$lex.Xst[lx$lex.cut == 2] <- lx$lex.Xst[lx$lex.cut == 2] + 1 ## Remove redundant intervals lx <- lx[lx$lex.dur > 0,] ## Remove the lex.cut column lx <- lx[,-match("lex.cut",names(lx))] ## Retain the attributes attr( lx, "breaks" ) <- attr( data, "breaks" ) attr( lx, "time.scales" ) <- attr( data, "time.scales" ) attr( lx, "class" ) <- attr( data, "class" ) return(lx[order(lx$lex.id,lx[,timescale]),]) } Epi/R/contr.2nd.R0000644000175100001440000000037112531361077013146 0ustar hornikuserscontr.2nd <- function( n ) { if( is.numeric(n) && length(n) == 1 ) levs<- 1:n else { levs <- n n <- length(n) } if( n<3 ) stop( "Contrasts not defined for ", n-2, " degrees of freedom" ) outer( 1:n, 3:n-1, FUN=function(x,y) pmax( x-y, 0 ) ) } Epi/R/boxes.MS.R0000644000175100001440000003666512531361077013014 0ustar hornikuserstbox <- function( txt, x, y, wd, ht, font=2, lwd=2, col.txt=par("fg"), col.border=par("fg"), col.bg="transparent" ) { rect( x-wd/2, y-ht/2, x+wd/2, y+ht/2, lwd=lwd, border=col.border, col=col.bg ) text( x, y, txt, font=font, col=col.txt ) invisible( c( x, y, wd, ht ) ) } dbox <- function( x, y, wd, ht=wd, font=2, lwd=2, cwd=5, col.cross=par("fg"), col.border=par("fg"), col.bg="transparent" ) { rect( x-wd/2, y-ht/2, x+wd/2, y+ht/2, lwd=lwd, border=col.border, col=col.bg ) ch <- ht*2/3 segments( c(x , x-ch/3), c(y+ch/2, y+ch/6), c(x , x+ch/3), c(y-ch/2, y+ch/6), lwd=cwd, col=col.cross ) invisible( c( x, y, wd, ht ) ) } fillarr <- function( x1, y1, x2, y2, gap=2, fr=0.8, angle=17, lwd=2, length=par("pin")[1]/30, ... ) { fr <- 1-gap/sqrt((x1-x2)^2+(y1-y2)^2) if( !missing(fr) ) if( fr > 1 ) fr <- fr/100 for( a in 1:angle ) arrows( x1 + (x2-x1)*(1-fr)/2, y1 + (y2-y1)*(1-fr)/2, x2 - (x2-x1)*(1-fr)/2, y2 - (y2-y1)*(1-fr)/2, angle=a, lwd=lwd, ... ) } std.vec <- function( a, b ) { l <- sqrt(a^2+b^2) if( l==0 ) return( c(0,0) ) else return( c(a/l,b/l) ) } boxarr <- function (b1, b2, offset = FALSE, pos = 0.45, ...) { d <- std.vec(b2[1] - b1[1], b2[2] - b1[2]) dd <- d * offset x1 <- b1[1] - dd[2] y1 <- b1[2] + dd[1] w1 <- b1[3] h1 <- b1[4] x2 <- b2[1] - dd[2] y2 <- b2[2] + dd[1] w2 <- b2[3] h2 <- b2[4] hx1 <- x1 + ifelse((y2-y1) != 0, (x2-x1) * ((h1/2)/abs(y2-y1)), sign(x2-x1) * w1/2) vx1 <- x1 + ifelse((x2-x1) != 0, (x2-x1) * ((w1/2)/abs(x2-x1)), 0) hx2 <- x2 + ifelse((y1-y2) != 0, (x1-x2) * ((h2/2)/abs(y1-y2)), sign(x1-x2) * w2/2) vx2 <- x2 + ifelse((x1-x2) != 0, (x1-x2) * ((w2/2)/abs(x1-x2)), 0) hy1 <- y1 + ifelse((y2-y1) != 0, (y2-y1) * ((h1/2)/abs(y2-y1)), 0) vy1 <- y1 + ifelse((x2-x1) != 0, (y2-y1) * ((w1/2)/abs(x2-x1)), sign(y2-y1) * h1/2) hy2 <- y2 + ifelse((y1-y2) != 0, (y1-y2) * ((h2/2)/abs(y1-y2)), 0) vy2 <- y2 + ifelse((x1-x2) != 0, (y1-y2) * ((w2/2)/abs(x1-x2)), sign(y1-y2) * h2/2) if( abs(vy1-y1) < h1/2 ) { bx1 <- vx1 by1 <- vy1 } else { bx1 <- hx1 by1 <- hy1 } if( abs(vy2-y2) < h2/2 ) { bx2 <- vx2 by2 <- vy2 } else { bx2 <- hx2 by2 <- hy2 } fillarr( bx1, by1, bx2, by2, ... ) invisible( list( x = bx1*(1-pos)+bx2*pos, y = by1*(1-pos)+by2*pos, d = d ) ) } wh.no <- function( tt, i, j ) { ## Utility to count the number of non-NA off diagonal elements with ## row0 ) arrowtext[a] <- formatC( D[i,j], format="f", digits=0, big.mark="," ) else arrowtext[a] <- "" if( show.R & R[i,j]>0 ) arrowtext[a] <- paste( if( !is.null(arrowtext[a]) ) paste( arrowtext[a], DR.sep[1], sep="" ), formatC( R[i,j], format="f", digits=digits.R, big.mark="," ), if( length(DR.sep) > 1 ) DR.sep[2], sep="" ) } else if( !is.null(txt.arr) ) arrowtext[a] <- txt.arr[a] if( !is.null(arrowtext[a]) ) text( arr$x-arr$d[2], arr$y+arr$d[1], arrowtext[a], adj=as.numeric(c(arr$d[2]>0,arr$d[1]<0)), font=font.arr[a], col=col.txt.arr[a] ) } } # Redraw the boxes with white background to remove any arrows for( i in subset ) tbox( pl.nam[i], xx[i], yy[i], wd[i], ht[i], lwd=lwd[i], col.bg=par("bg") ) # Then redraw the boxes again for( i in subset ) tbox( pl.nam[i], xx[i], yy[i], wd[i], ht[i], font=font[i], lwd=lwd[i], col.txt=col.txt[i], col.border=col.border[i], col.bg=col.bg[i] ) # Finally create an object with all information to re-draw the display MSboxes <- list( Boxes = data.frame( xx = xx, yy = yy, wd = wd, ht = ht, font = font, lwd = lwd, col.txt = col.txt, col.border = col.border, col.bg = col.bg, stringsAsFactors=FALSE ), State.names = pl.nam, Tmat = tt, Arrows = data.frame( lwd.arr = lwd.arr, col.arr = col.arr, pos.arr = pos.arr, col.txt.arr = col.txt.arr, font.arr = font.arr, offset.arr = offset.arr, stringsAsFactors=FALSE ), Arrowtext = arrowtext ) class( MSboxes ) <- "MS" invisible( MSboxes ) } boxes.MS <- function( obj, sub.st, sub.tr, cex=1.5, ... ) { if( !inherits(obj,"MS") ) stop( "You must supply an object of class 'MSboxes'" ) n.st <- nrow( obj$Boxes ) n.tr <- nrow( obj$Arrows ) if( missing(sub.st) ) sub.st <- 1:n.st if( missing(sub.tr) ) sub.tr <- 1:n.tr # First setting up the plot area, and restoring the plot parameters later opar <- par( mar=c(0,0,0,0), cex=cex ) on.exit( par(opar) ) plot( NA, bty="n", xlim=0:1*100, ylim=0:1*100, xaxt="n", yaxt="n", xlab="", ylab="" ) # Exercise the subsets by putting the relevant colors to "transparent" obj$Boxes[-sub.st,c("col.txt", "col.border", "col.bg")] <- "transparent" obj$Arrows[-sub.tr,c("col.arr", "col.txt.arr")] <- "transparent" # Then draw the boxes b <- list() for( i in 1:n.st ) b[[i]] <- with( obj$Boxes, tbox( obj$State.names[i], xx[i], yy[i], wd[i], ht[i], font=font[i], lwd=lwd[i], col.txt=col.txt[i], col.border=col.border[i], col.bg=col.bg[i] ) ) # and the arrows for( i in 1:n.st ) for( j in 1:n.st ) { if( !is.na(obj$Tmat[i,j]) & i!=j ) { a <- wh.no( obj$Tmat, i, j ) arr <- with( obj$Arrows, boxarr( b[[i]], b[[j]], offset=(!is.na(obj$Tmat[j,i]))*offset.arr, lwd=lwd.arr[a], col=col.arr[a], pos=pos.arr[a], ... ) ) with( obj$Arrows, text( arr$x-arr$d[2], arr$y+arr$d[1], obj$Arrowtext[a], adj=as.numeric(c(arr$d[2]>0,arr$d[1]<0)), font=font.arr[a], col=col.txt.arr[a] ) ) } } # Redraw the boxes with "bg" background to remove any arrows crossing for( i in sub.st ) with( obj$Boxes, tbox( obj$State.names[i], xx[i], yy[i], wd[i], ht[i], font=font[i], lwd=lwd[i], col.txt=par("bg"), col.border=par("bg"), col.bg=par("bg") ) ) # Then redraw the boxes again for( i in sub.st ) with( obj$Boxes, tbox( obj$State.names[i], xx[i], yy[i], wd[i], ht[i], font=font[i], lwd=lwd[i], col.txt=col.txt[i], col.border=col.border[i], col.bg=col.bg[i] ) ) # Done! invisible( NULL ) } Epi/R/ccwc.R0000644000175100001440000001236212531361077012261 0ustar hornikusersccwc <- function(entry=0, exit, fail, origin=0, controls=1, match=list(), include=list(), data=NULL, silent=FALSE) { # Check arguments entry <- eval(substitute(entry), data) exit <- eval(substitute(exit), data) fail <- eval(substitute(fail), data) origin <- eval(substitute(origin), data) n <- length(fail) if (length(exit)!=n) stop("All vectors must have same length") if (length(entry)!=1 && length(entry)!=n) stop("All vectors must have same length") if (length(origin)==1) { origin <- rep(origin, n) } else { if (length(origin)!=n) stop("All vectors must have same length") } # Transform times to correct scale t.entry <- as.numeric(entry - origin) t.exit <- as.numeric(exit - origin) # match= argument marg <- substitute(match) if (mode(marg)=="name") { match <- list(eval(marg, data)) names(match) <- as.character(marg) } else if (mode(marg)=="call" && marg[[1]]=="list") { mnames <- names(marg) nm <- length(marg) if (!is.null(mnames)) { if (nm>1) { for (i in 2:nm) { if (mode(marg[[i]])=="name") mnames[i] <- as.character(marg[[i]]) else stop("illegal argument (match)") } } else { for (i in 2:nm) { if (mode(marg[[i]])=="name") mnames[i] <- as.character(marg[[i]]) else stop("illegal argument (match)") } mnames[1] <= "" } } names(marg) <- mnames match <- eval(marg, data) } else { stop("illegal argument (match)") } m <- length(match) mnames <- names(match) if (m>0) { for (i in 1:m) { if (length(match[[i]])!=n) { stop("incorrect length for matching variable") } } } # include= argument iarg <- substitute(include) if (mode(iarg)=="name") { include <- list(eval(iarg, data)) names(include) <- as.character(iarg) } else if (mode(iarg)=="call" && iarg[[1]]=="list") { ni <- length(iarg) inames <- names(iarg) if (ni>1) { if (!is.null(inames)) { for (i in 2:ni) { if (mode(iarg[[i]])=="name") inames[i] <- as.character(iarg[[i]]) else stop("illegal argument (include)") } } else { for (i in 2:ni) { if (mode(iarg[[i]])=="name") inames[i] <- as.character(iarg[[i]]) else stop("illegal argument (include)") } inames[1] <= "" } } names(iarg) <- inames include <- eval(iarg, data) } else { stop("illegal argument (include)") } ni <- length(include) inames <- names(include) if (ni>0) { for (i in 1:ni) { if (length(include[[i]])!=n) { stop("incorrect length for included variable") } } } # create group codes using matching variables grp <- rep(1,n) pd <- 1 if (m>0) { for (im in 1:m) { v <- match[[im]] if (length(v)!=n) stop("All vectors must have same length") if (!is.factor(v)) v <- factor(v) grp <- grp + pd*(as.numeric(v) - 1) pd <- pd*length(levels(v)) } } # Create vectors long enough to hold results nn <- (1+controls)*sum(fail!=0) pr <- numeric(nn) sr <- numeric(nn) tr <- vector("numeric", nn) fr <- numeric(nn) nn <- 0 # Sample each group if (!silent) { cat("\nSampling risk sets: ") } set <- 0 nomatch <- 0 incomplete <- 0 ties <- FALSE fg <- unique(grp[fail!=0]) for (g in fg) { # Failure times ft <- unique( t.exit[(grp==g) & (fail!=0)] ) # Create case-control sets for (tf in ft) { if (!silent) { cat(".") } set <- set+1 case <- (grp==g) & (t.exit==tf) & (fail!=0) ncase <- sum(case) if (ncase>0) ties <- TRUE noncase <- (grp==g) & (t.entry<=tf) & (t.exit>=tf) & !case ncont <- controls*ncase if (ncont>sum(noncase)) { ncont <- sum(noncase) if (ncont>0) incomplete <- incomplete + 1 } if (ncont>0) { newnn <- nn+ncase+ncont sr[(nn+1):newnn] <- set tr[(nn+1):newnn] <- tf fr[(nn+1):(nn+ncase)] <- 1 fr[(nn+ncase+1):newnn] <- 0 pr[(nn+1):(nn+ncase)] <- (1:n)[case] pr[(nn+ncase+1):(newnn)] <- sample((1:n)[noncase], size=ncont) nn <- newnn } else { nomatch <- nomatch + ncase } } } if (!silent) { cat("\n") } res <- vector("list", 4+m+ni) if (nn>0) { res[[1]] <- sr[1:nn] res[[2]] <- map <- pr[1:nn] res[[3]] <- tr[1:nn] + origin[map] res[[4]] <- fr[1:nn] } if (m>0) { for (i in 1:m) { res[[4+i]] <- match[[i]][map] } } if (ni>0) { for (i in 1:ni) { res[[4+m+i]] <- include[[i]][map] } } names(res) <- c("Set", "Map", "Time", "Fail", mnames, inames) if (incomplete>0) warning(paste(incomplete, "case-control sets are incomplete")) if (nomatch>0) warning(paste(nomatch, "cases could not be matched")) if (ties) warning("there were tied failure times") data.frame(res) } Epi/R/summary.Lexis.r0000644000175100001440000000540512531361077014162 0ustar hornikuserssummary.Lexis <- function( object, simplify=TRUE, scale=1, by=NULL, Rates=FALSE, ... ) { # If we have a by argument find out what to do if (!is.null(by)) { if (is.character(by)) { if (!all(by %in% names(object))) stop("Wrong 'by' argument: '", paste(by,collapse="','"), "' - must be name(s) of variable(s) in the Lexis object") else return(lapply(split(object, object[, by]), summary.Lexis, by = NULL, simplify = simplify, scale = scale, Rates = Rates, ...)) } else { if (length(by) != nrow(object)) stop("Wrong length of 'by' argument:", length(by), "must be same length as rows of the Lexis object:", nrow(object) ) else return(lapply(split(object, by), summary.Lexis, by = NULL, simplify = simplify, scale = scale, Rates = Rates, ...)) } } # Table(s) of all transitions (no. records) tr <- trans <- with( object, table(lex.Cst,lex.Xst) ) # Remove diagonal, i.e. records with no transition for( i in intersect(rownames(trans),colnames(trans)) ) tr[i,i] <- 0 # Margins added trans <- addmargins(trans) tr <- addmargins(tr) # Sum omitting the diagonal trm <- tr[,ncol(tr)] # Compute person-years in each Cst-state pyrs <- with( object, addmargins( tapply( lex.dur,lex.Cst,sum,na.rm=TRUE), FUN=function(x) sum(x,na.rm=TRUE) ) )/scale pers <- with( object, c( tapply( lex.id, lex.Cst, function(x) length(unique(x)) ), length(unique(lex.id)) ) ) # Amend the table of records with column of events and person-years trans <- cbind( trans, trm, pyrs, pers ) # Annotate the table nicely colnames( trans )[ncol(trans)-2:0] <- c(" Events:","Risk time:"," Persons:" ) colnames( trans )[ncol(tr)] <- " Records:" names( dimnames( trans ) ) <- c("From","\nTransitions:\n To") # Make the rates and annotate the table nicely rates <- sweep( tr, 1, pyrs, "/" ) colnames( rates )[ncol(rates)] <- "Total" names( dimnames( rates ) ) <- c("From", paste("\nRates", if( scale != 1 ) paste(" (per ",scale,")",sep=""), ":\n To", sep="") ) if( simplify ) { trans <- trans[!is.na(pyrs),] rates <- rates[!is.na(pyrs),] } if( nrow(trans)==2 ) trans <- trans[1,,drop = FALSE] res <- list( Transitions=trans, Rates=rates[-nrow(rates),,drop=FALSE] ) if( !Rates ) res <- res[1] class( res ) <- "summary.Lexis" res } print.summary.Lexis <- function( x, ..., digits=2 ) { print( round( x$Transitions, digits ) ) if( length(x) == 2 ) print( round( x$Rates , digits ) ) } Epi/R/gen.exp.R0000644000175100001440000001372412531361077012711 0ustar hornikusers# Acronyms: # dop: date of purchase # dpt: dose per time # amt: amount # dur: duration use.amt.dpt <- function( purchase, push.max = Inf, breaks, lags = NULL, lag.dec = 1 ) { do.call( "rbind", lapply( split( purchase, purchase$id ), function(set) { np <- nrow(set) if( np==1 ) return( NULL ) set <- set[order(set$dop),] # Compute length of exposure periods drug.dur <- set$amt / set$dpt # Put the exposed period head to foot new.start <- min( set$dop ) + c(0,cumsum(drug.dur[-np])) # Move them out so that the start of a period is never earlier than # the dop exp.start <- new.start + cummax( pmax(set$dop-new.start,0) ) # Compute the pushes push.one <- exp.start - set$dop # Revise them to the maximally acceptable push.adj <- pmin( push.one, push.max ) # Revise the starting dates of exposure exp.start <- exp.start - push.one + push.adj # Revise the durations to be at most equal to differences between the # revised starting dates drug.dur <- pmin( drug.dur, c(diff(exp.start),Inf) ) # Compute the end of the intervals exp.end <- exp.start + drug.dur # Intervals in the middle not covered by the drug exposures - note # also that we make a record for the last follow-date followed.by.gap <- c( exp.start[-1]-exp.end[-length(exp.end)] > 0, TRUE ) # To facilitate dfR <- rbind( data.frame( id = set$id[1], dof = exp.start, dpt = set$dpt ), data.frame( id = set$id[1], dof = exp.end[followed.by.gap], dpt = 0 ) ) dfR <- dfR[order(dfR$dof),] # We now compute the cumulative dose at the end of the interval using # interval length and dpt: dfR$cum.amt <- with( dfR, cumsum( c(0, diff(dof)*dpt[-length(dpt)]) ) ) return( dfR ) } ) ) } use.only.amt <- function( purchase, pred.win = Inf, breaks, lags = NULL, lag.dec = 1 ) { # Compute the cumulative dose at all purcase dates and at the last # (unknown) future expiry date, computed based on previous # consumption. The resulting data frame has one more line per person # than no. of purchases. do.call( "rbind", lapply( split( purchase, purchase$id ), function(set) { np <- nrow(set) if( np==1 ) return( NULL ) set <- set[order(set$dop),] # The points to include in the calculation: # All dates after pred.win before last purchase, # but at least the last two purchase dates, wp <- ( set$dop > pmin( max(set$dop)-pred.win, sort(set$dop,decreasing=TRUE)[2] ) ) # Cumulative amount consumed at each dop cum.amt <- cumsum(c(0,set$amt)) # Average slope to use to project the duration last purchase avg.slp <- diff(range(cum.amt[c(wp,FALSE)]))/ diff(range(set$dop[wp])) # Purchase dates and the date of last consumption dof <- c( set$dop, set$dop[np]+set$amt[np]/avg.slp ) return( data.frame( id = set$id[1], dof = dof, cum.amt = cum.amt ) ) } ) ) } gen.exp <- function( purchase, id="id", dop="dop", amt="amt", dpt="dpt", fu, doe="doe", dox="dox", breaks, use.dpt = ( dpt %in% names(purchase) ), lags = NULL, push.max = Inf, pred.win = Inf, lag.dec = 1 ) { # Make sure that the data fames have the right column names wh <- match( c(id,dop,amt), names(purchase) ) if( any( is.na(wh) ) ) stop("Wrong column names for the purchase data frame") names( purchase )[wh] <- c("id","dop","amt") wh <- match( c(id,doe,dox), names(fu) ) if( any( is.na(wh) ) ) stop("Wrong column names for the follow-up data frame") names( fu )[wh] <- c("id","doe","dox") if( use.dpt ) { # This is to allow dpt to be entered as numerical scalar common for all if( is.numeric(dpt) ) { if( length(dpt) > 1 ) stop( "If dpt is numeric it must have length 1" ) purchase$dpt <- dpt } else names( purchase )[match(c(dpt),names(purchase))] <- "dpt" tmp.dfr <- use.amt.dpt( purchase, lags = lags, push.max = push.max, lag.dec = lag.dec ) } else tmp.dfr <- use.only.amt( purchase, lags = lags, pred.win = pred.win, lag.dec = lag.dec ) # Merge in the follow-up period for the persons tmp.dfr <- merge( tmp.dfr, fu, all=T ) # Interpolate to find the cumulative doses at the dates in breaks do.call( "rbind", lapply( split( tmp.dfr, tmp.dfr$id ), function(set) { # All values of these are identical within each set (=person) doe <- set$doe[1] dox <- set$dox[1] # The first and last date of exposure according to the assumption doi <- min(set$dof) doc <- max(set$dof) # Get the breakpoints and the entry end exit dates breaks <- sort( unique( c(breaks,doe,dox) ) ) xval <- breaks[breaks>=doe & breaks<=dox] dfr <- data.frame( id = set$id[1], dof = xval ) dfr$tfi <- pmax(0,xval-doi) dfr$tfc <- pmax(0,xval-doc) dfr$cdos <- approx( set$dof, set$cum.amt, xout=xval, rule=2 )$y for( lg in lags ) dfr[,paste( "ldos", formatC(lg,format="f",digits=lag.dec), sep="." )] <- approx( set$dof, set$cum.amt, xout=xval-lg, rule=2 )$y dfr } ) ) } Epi/R/Icens.R0000644000175100001440000000620012531361077012375 0ustar hornikusersIcens <- function(first.well, last.well, first.ill, formula, model.type=c("MRR","AER"), breaks, boot=FALSE, alpha=0.05, keep.sample=FALSE, data) { ## Create follow-up matrix containing three event times fu.expression <- substitute(cbind(first.well, last.well, first.ill)) fu <- if (missing(data)) { eval(fu.expression) } else { eval(fu.expression, data) } ## Check consistency of arguments missing.f1 <- is.na(fu[,1]) missing.f2 <- is.na(fu[,2]) if (any(missing.f1 & missing.f2)) { stop("You must supply at least one of \"first.well\" and \"last.well\"") } if (any(fu[,1] > fu[,2], na.rm=TRUE) | any(fu[,2] > fu[,3], na.rm=TRUE)) { stop("Some units do not meet: first.well < last.well < first.ill" ) } ## Fill in any gaps fu[,1][missing.f1] <- fu[,2][missing.f1] fu[,2][missing.f2] <- fu[,1][missing.f2] ## Recensor cases that fall after the last break point is.censored <- fu[,3] > max(breaks) is.censored[is.na(is.censored)] <- FALSE fu[is.censored,3] <- NA exp.dat <- expand.data(fu, formula, breaks, data) model.type <- match.arg(model.type) if (missing(formula)) { fit.out <- with(exp.dat, fit.baseline(y, rates.frame)) lambda <- coef(fit.out) } else { fit.out <- switch(model.type, "MRR"=with(exp.dat, fit.mult(y, rates.frame, cov.frame)), "AER"=with(exp.dat, fit.add(y, rates.frame, cov.frame))) lambda <- coef(fit.out$rates) } beta <- if (is.null(fit.out$cov)) numeric(0) else coef(fit.out$cov) params <- c(lambda,beta) if (boot) { nboot <- ifelse (is.numeric(boot), boot, 100) boot.coef <- matrix(NA, nrow=nboot, ncol=length(lambda) + length(beta)) colnames(boot.coef) <- names(params) for (i in 1:nboot) { subsample <- sample(nrow(fu), replace=TRUE) exp.dat <- expand.data(fu[subsample,], formula, breaks, data[subsample,]) if (missing(formula)) { sim.out <- with(exp.dat, fit.baseline(y, rates.frame, params)) boot.coef[i,] <- coef(sim.out) } else { sim.out <- switch(model.type, "MRR"=with(exp.dat, fit.mult(y, rates.frame, cov.frame, params)), "AER"=with(exp.dat, fit.add(y, rates.frame, cov.frame, params))) boot.coef[i,] <- switch(model.type, "MRR"=c(coef(sim.out[[1]]), coef(sim.out[[2]])), "AER"=coef(sim.out[[1]])) } } ci.quantiles=c(0.5, alpha/2, 1 - alpha/2) boot.ci <- t(apply(boot.coef,2,quantile,ci.quantiles)) lower.ci.lab <- paste("lower ", formatC(100 * alpha/2, format="f", digits=1),"%", sep="") upper.ci.lab <- paste("upper ", formatC(100 * (1-alpha/2), format="f", digits=1),"%", sep="") colnames(boot.ci) <- c("median", lower.ci.lab, upper.ci.lab) fit.out$boot.ci <- boot.ci if (keep.sample) { fit.out$sample <- boot.coef } } class( fit.out ) <- "Icens" attr( fit.out, "model" ) <- model.type return( fit.out ) } Epi/R/pctab.R0000644000175100001440000000070212531361077012426 0ustar hornikuserspctab <- function( TT, margin=length( dim( TT ) ), dec=1 ) { nd <- length( dim( TT ) ) sw <- (1:nd)[-margin[1]] rt <- sweep( addmargins( TT, margin, list( list( All=sum, N=function( x ) sum( x )^2/100 ) ) ), sw, apply( TT, sw, sum )/100, "/" ) if( dec ) print( round( rt, dec ) ) invisible( rt ) } Epi/R/simLexis.R0000644000175100001440000002641412531361077013142 0ustar hornikusers# First the utility functions ###################################################################### lint <- function( ci, tt, u ) { # Makes a linear interpolation, but does not crash if all ci values are # identical, but requires that both ci and tt are non-decreasing if( any( diff(ci)<0 ) | any( diff(tt)<0 ) ) stop("Non-icreasing arguments") c.u <- min( c( ci[ci>u], max(ci) ) ) c.l <- max( c( ci[ciu], max(tt) ) ) t.l <- max( c( tt[ci1 ) stop( "More than one lex.Cst present:\n", cst, "\n" ) # Expand each person by the time points prfrm <- nd[rep(1:nr,each=np),] prfrm[,tS] <- prfrm[,tS] + rep(time.pts,nr) prfrm$lex.dur <- il <- min( diff(time.pts) ) # Poisson-models should use the estimated rate at the midpoint of the # intervals: prfrp <- prfrm prfrp[,tS] <- prfrp[,tS]+il/2 # Make a data frame with predicted rates for each of the transitions # out of this state for these times rt <- data.frame( lex.id = prfrm$lex.id ) for( i in 1:length(Tr[[cst]]) ) { if( inherits( Tr[[cst]][[i]], "glm" ) ) rt <- cbind( rt, predict( Tr[[cst]][[i]], type="response", newdata=prfrp ) ) else if( inherits( Tr[[cst]][[i]], "coxph" ) ) rt <- cbind( rt, predict( Tr[[cst]][[i]], type="expected", newdata=prfrm ) ) else if( is.function( Tr[[cst]][[i]] ) ) rt <- cbind( rt, Tr[[cst]][[i]](prfrm) ) else stop( "Invalid object supplied as transition, must be either\n", "glm(poisson) or coxph object fitted to a Lexis object or\n", "a function that takes a Lexis object as argument and returns\n", "average rates for each record in the same units as lex.dur.") } names( rt )[-1] <- names( Tr[[cst]] ) # Then find the transition time and exit state for each person: xx <- match( c("lex.dur","lex.Xst"), names(nd) ) if( any(!is.na(xx)) ) nd <- nd[,-xx[!is.na(xx)]] merge( nd, do.call( "rbind", lapply( split( rt, rt$lex.id ), sim1, time.pts ) ), by="lex.id" ) } ###################################################################### get.next <- function( sf, tr.st, tS, tF ) { # Produces an initial Lexis object for the next simulation for those # who have ended up in a transient state. # Note that this exploits the existence of the "time.since" attribute # for Lexis objects and assumes that a character vector naming the # transient states is supplied as argument. if( nrow(sf)==0 ) return( sf ) nxt <- sf[sf$lex.Xst %in% tr.st,] if( nrow(nxt) == 0 ) return( nxt ) nxt[,tS] <- nxt[,tS] + nxt$lex.dur wh <- tF for( i in 1:length(wh) ) if( wh[i] != "" ) nxt[nxt$lex.Xst==wh[i],tS[i]] <- 0 nxt$lex.Cst <- nxt$lex.Xst return( nxt ) } ###################################################################### chop.lex <- function( obj, tS, cens ) { # A function that chops off all follow-up beyond cens since entry for # each individual # Entry times on 1st timescale zz <- entry( obj, 1, by.id=TRUE ) # Merge with the revised exit times on this timescale ww <- merge( obj, data.frame( lex.id = as.numeric(names(zz)), cens = zz+cens ) ) # Only retain records with an entry time prior to the revised exit time ww <- ww[ww[,tS[1]] < ww$cens,] # Revise the duration according the the revised exit time x.dur <- pmin( ww$lex.dur, ww[,"cens"]-ww[,tS[1]] ) # Change lex.Xst to lex.Cst for those with shortened follow-up ww$lex.Xst[x.dur0] nt <- length(tt) warning("\nSome initiators start in a absorbing state\n", "Initiator states represented are: ", paste( rbind( names(tt), rep(":",nt), paste(tt), rep(" ",nt) ), collapse="" ), "\n", "Transient states are: ", paste( names( Tr ), coll=" " ) ) if( nrow(nxt)==0 ) stop( "\nNo initiators in transient states!" ) } # Then we update those who are in a transient states and keep on doing # that till all are in absorbing states or censored while( nrow(nxt) > 0 ) { nx <- do.call( "rbind", lapply( split( nxt, nxt$lex.Cst ), simX, Tr, time.pts, tS ) ) sf <- rbind( sf, nx ) nxt <- get.next( nx, tr.st, tS, tF ) } # Doctor lex.Xst levels, fix values for the censored sf$lex.Xst <- factor( sf$lex.Xst, levels=levels(sf$lex.Cst) ) sf$lex.Xst[is.na(sf$lex.Xst)] <- sf$lex.Cst[is.na(sf$lex.Xst)] # Nicely order the output by persons, then times and states nord <- match( c( "lex.id", tS, "lex.dur", "lex.Cst", "lex.Xst" ), names(sf) ) noth <- setdiff( 1:ncol(sf), nord ) sf <- sf[order(sf$lex.id,sf[,tS[1]]),c(nord,noth)] rownames(sf) <- NULL # Finally, supply attributes attr( sf, "time.scales" ) <- tS attr( sf, "time.since" ) <- tF chop.lex( sf, tS, max(time.pts) ) } ###################################################################### nState <- function ( obj, at, from, time.scale = 1 ) { # Counts the number of persons in each state of the Lexis object 'obj' # at the times 'at' from the time 'from' in the time scale # 'time.scale' # Determine timescales and absorbing and transient states tS <- check.time.scale(obj,time.scale) TT <- tmat(obj) absorb <- rownames(TT)[apply(!is.na(TT),1,sum)==0] transient <- setdiff( rownames(TT), absorb ) # Expand each record length(at) times tab.frm <- obj[rep(1:nrow(obj),each=length(at)), c(tS,"lex.dur","lex.Cst","lex.Xst")] # Stick in the corresponding times on the chosen time scale tab.frm$when <- rep( at, nrow(obj) ) + from # For transient states keep records that includes these points in time tab.tr <- tab.frm[tab.frm[,tS] <= tab.frm$when & tab.frm[,tS]+tab.frm$lex.dur > tab.frm$when,] tab.tr$State <- tab.tr$lex.Cst # For absorbing states keep records where follow-up ended before tab.ab <- tab.frm[tab.frm[,tS]+tab.frm$lex.dur <= tab.frm$when & tab.frm$lex.Xst %in% absorb,] tab.ab$State <- tab.ab$lex.Xst # Make a table using the combination of those in transient and # absorbing states. with( rbind( tab.ab, tab.tr ), table( when, State ) ) } ###################################################################### pState <- function( nSt, perm=1:ncol(nSt) ) { # Compute cumulative proportions of persons across states in order # designate by 'perm' tt <- t( apply( nSt[,perm], 1, cumsum ) ) tt <- sweep( tt, 1, tt[,ncol(tt)], "/" ) class( tt ) <- c("pState","matrix") tt } ###################################################################### plot.pState <- function( x, col = rainbow(ncol(x)), border = "transparent", xlab = "Time", ylim = 0:1, ylab = "Probability", ... ) { # Function to plot cumulative probabilities along the time scale. matplot( as.numeric(rownames(x)), x, type="n", ylim=ylim, yaxs="i", xaxs="i", xlab=xlab, ylab=ylab, ... ) lines.pState( x, col = col, border = border, ... ) } ###################################################################### lines.pState <- function( x, col = rainbow(ncol(x)), border = "transparent", ... ) { # Function to plot cumulative probabilities along the time scale. # Fixing the colors: nc <- ncol(x) col <- rep( col , nc )[1:nc] border <- rep( border, nc )[1:nc] # Just for coding convenience when plotting polygons pSt <- cbind( 0, x ) for( i in 2:ncol(pSt) ) { polygon( c( as.numeric(rownames(pSt)) , rev(as.numeric(rownames(pSt))) ), c( pSt[,i ], rev(pSt[,i-1]) ), col=col[i-1], border=border[i-1], ... ) } } Epi/R/Lexis.lines.R0000644000175100001440000000631012531361077013533 0ustar hornikusersLexis.lines <- function( entry.date = NA, exit.date = NA, birth.date = NA, entry.age = NA, exit.age = NA, risk.time = NA, col.life = "black", lwd.life = 2, fail = NA, cex.fail = 1, pch.fail = c(NA,16), col.fail = col.life, data = NULL ) { ## Get variables from data argument, if supplied, or from parent ## frame if not. entry.date <- eval(substitute(entry.date), data) entry.age <- eval(substitute(entry.age ), data) exit.date <- eval(substitute(exit.date ), data) exit.age <- eval(substitute(exit.age ), data) risk.time <- eval(substitute(birth.date), data) birth.date <- eval(substitute(birth.date), data) fail <- eval(substitute(fail ), data) # If fail is numeric make it logical if( is.numeric( fail ) ) fail <- ( fail > 0 ) # Complete the information on lifelines XX <- Life.lines( entry.date = entry.date, entry.age = entry.age, exit.date = exit.date, exit.age = exit.age, risk.time = risk.time, birth.date = birth.date ) # Expand lwd.life/col.life/pch.fail/col.fail/cex.fail # Np <- nrow( XX ) if( length( col.life )==1 ) col.life <- rep( col.life, Np ) else if( length( col.life )!=length(fail) ) stop("col.life must have length 1 or length(fail)" ) if( length( lwd.life )==1 ) lwd.life <- rep( lwd.life, Np ) else if( length( lwd.life )!=length(fail) ) stop("lwd.life must have length 1 or length(fail)" ) if( length( col.fail )==1 ) col.fail <- rep( col.fail, Np ) else { if( length( col.fail )==2 ) col.fail <- col.fail[fail+1] } if( length( col.fail )!=length(fail) ) stop("col.fail must have length 1,2 or length(fail)" ) if( length( pch.fail )==1 ) pch.fail <- rep( pch.fail, Np ) else if( length( pch.fail )==2 ) pch.fail <- pch.fail[fail+1] if( length( pch.fail )!=length(fail) ) stop("pch.fail must have length 1,2 or length(fail)" ) if( length( cex.fail )==1 ) cex.fail <- rep( cex.fail, Np ) else if( length( cex.fail )==2 ) cex.fail <- cex.fail[fail+1] if( length( cex.fail )!=length(fail) ) stop("cex.fail must have length 1,2 or length(fail)" ) # Was XX returned as a Date-object? # If so make a numerical version i LL, otherwise just a copy. # if( attr( XX, "Date" ) ) { LL <- data.frame( lapply( XX, unclass ) ) LL[,c(1,3,5)] <- LL[,c(1,3,5)] / 365.25 + 1970 LL[,c(2,4,6)] <- LL[,c(2,4,6)] / 365.25 } else LL <- XX # Find age and date ranges in the current plot. # date <- par( "usr" )[1:2] age <- par( "usr" )[3:4] # Plot the lifelines segments( LL[,1], LL[,2], LL[,3], LL[,4], lwd=lwd.life, col=col.life ) # If there are any non-NAs for pch.fail then blank out the space # where they go before plotting the symbols if( any( !is.na(pch.fail) ) ) points( LL[!is.na(pch.fail),3], LL[!is.na(pch.fail),4], pch=16, col="white", #par()$bg, cex=cex.fail[!is.na(pch.fail)] ) points( LL[,3], LL[,4], pch=pch.fail, col=col.fail, cex=cex.fail ) # Return the untouched version of the completed dataframe # invisible( data.frame( XX, fail=fail ) ) } Epi/R/Pplot.R0000644000175100001440000000346512531361077012444 0ustar hornikusersPplot <- function( rates, age = as.numeric( dimnames( rates )[[1]] ), per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE, p.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), p.lim = range( per, na.rm=TRUE ) + c(0,diff(range(per))/30), ylim = range( rates[rates>0], na.rm=TRUE ), p.lab = names( dimnames( rates ) )[2], ylab = deparse( substitute( rates ) ), at = NULL, labels = paste( at ), type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y", las = 1, ann = FALSE, cex.ann = 0.8, xannx = 1/20, a.thin = seq( 1, length( age ), 2 ), ... ) { # Plot the frame if( ann ) p.lim <- p.lim + c(0,diff( range( age ) ) * xannx ) matplot( per, t(rates), type="n", xlim=p.lim, ylim=ylim, xlab=p.lab, ylab=ylab, log=log.ax, las=las, yaxt=if( !is.null( at ) ) "n" else "s" ) if( !is.null( at ) ) axis( side=2, at=at, labels=labels, yaxt="s", las=las ) # and the grid if required if( !missing( p.grid ) | !missing( grid ) ) { if( is.logical( p.grid ) & p.grid[1] ) p.grid <- nice( per, log=par("xlog") ) abline( v=p.grid, col=col.grid ) } if( !missing( ygrid ) | !missing( ygrid ) ) { if( is.logical( ygrid ) & ygrid[1] ) ygrid <- nice( rates[!is.na(rates)], log=par("ylog") ) abline( h=ygrid, col=col.grid ) } box() # then the curves matlines( per, t(rates), lwd=lwd, lty=lty, col=col, type=type, ... ) # annotate them if required (every second by default ) if( ann ) { nr <- nrow( rates ) nc <- ncol( rates ) text( rep( per[nc], nr )[a.thin], rates[,nc][a.thin], paste( "", age[a.thin] ), adj=c(0,0.5), cex=cex.ann, col=if( length(col)==1 ) col else col[a.thin] ) } } Epi/R/lls.R0000644000175100001440000000172112531361077012131 0ustar hornikuserslls <- # A function that expands the functionality of ls() function( pos = 1, pat = "", all=FALSE, print=TRUE ) { # First a function that returns length/dim when you ask for it dimx <- function(dd) if (is.null(dim(dd))) length(dd) else dim(dd) # A vector of object names lll <- ls( pos=pos, pattern=pat, all.names=all ) # Are there any objects at all? if( length(lll) > 0 ) { obj.mode <- obj.clas <- obj.size <- character(0) # Then find mode, class, name and dimension of them and return it for(i in 1:length(lll)) { obj.mode[i] <- eval( parse(text = paste( "mode(", lll[i], ")"))) obj.clas[i] <- paste( eval( parse(text = paste("class(", lll[i], ")"))), collapse=" " ) obj.size[i] <- paste( eval( parse(text = paste( "dimx(", lll[i], ")"))), collapse=" " ) } dfr <- data.frame( name=lll, mode=obj.mode, class=obj.clas, size=obj.size, stringsAsFactors=FALSE ) print( invisible( dfr ), right=FALSE ) } } Epi/R/mh.R0000644000175100001440000001034512531361077011745 0ustar hornikusers# Mantel-Haenszel estimate and test mh <- function(cases, denom, compare = 1, levels = c(1, 2), by = NULL, cohort = !is.integer(denom), confidence = 0.9) { ndim <- length(dim(cases)) edgin <- names(dimnames(cases)) edgen <- paste("Dimension", 1:ndim) if (is.null(edgin)) edges <- edgen else edges <- ifelse(edgin == "", edgen, edgin) if (is.null(edges)) edges <- rep("", ndim) if(length(dim(denom)) != ndim) { stop("Cases and Pyrs arrays of unequal dimension") } if(is.numeric(compare)) { comp <- as.integer(compare) if(comp < 1 || comp > ndim) { stop("Illegal argument: compare") } } else { comp <- (1:ndim)[edges == compare] if(length(comp) != 1) { stop("Illegal argument: compare") } } if(!is.null(by)) { if (!is.numeric(by)) { mtch <- match(by, edges) if (any(is.na(mtch))) { stop("Illegal argument: by") } by <- (1:ndim)[mtch] } if (any(by < 1 | by > ndim | by == comp)) { stop("Illegal argument: by") } } gtxt <- vector("character", 3) gtxt[1] <- edges[comp] gtxt[2] <- dimnames(cases)[[comp]][levels[1]] gtxt[3] <- dimnames(cases)[[comp]][levels[2]] ctxt <- edges[-c(comp, by)] if (length(ctxt) == 0) ctxt <- as.null() others <- (1:ndim)[ - comp] select <- function(a, el) { b <- a[el] ifelse(is.na(b), 0, b) } d1 <- apply(cases, others, select, el = levels[1]) d2 <- apply(cases, others, select, el = levels[2]) if(length(d1) == 0 || length(d2) == 0) { stop("Illegal argument: levels") } y1 <- apply(denom, others, select, el = levels[1]) y2 <- apply(denom, others, select, el = levels[2]) d <- d1 + d2 y <- y1 + y2 if (cohort) { qt <- ifelse(y>0, (d1 * y2)/y, 0) rt <- ifelse(y>0, (d2 * y1)/y, 0) ut <- ifelse(y>0, d1 - ((d * y1)/y), 0) vt <- ifelse(y>0, (d * y1 * y2)/(y^2), 0) } else { s1 <- d1 + y1 s2 <- d2 + y2 t <- s1 + s2 qt <- ifelse(t>1, (d1 * y2)/t, 0) rt <- ifelse(t>1, (d2 * y1)/t, 0) ut <- ifelse(t>1, d1 - ((d * s1)/t), 0) vt <- ifelse(t>1, (d * y * s1 * s2)/((t - 1) * (t^2)), 0) } if(!is.null(by)) { if(length(by) < ndim - 1) { nby <- match(by, others) q <- apply(qt, nby, sum) r <- apply(rt, nby, sum) u <- apply(ut, nby, sum) v <- apply(vt, nby, sum) } else { q <- qt r <- rt u <- ut v <- vt } } else { q <- sum(qt) r <- sum(rt) u <- sum(ut) v <- sum(vt) } rr <- q/r se <- sqrt(v/(q * r)) ch <- (u^2)/v ef <- exp( - qnorm((1 - confidence)/2) * se) if (cohort) ty <- "Rate ratio" else ty <- "Odds ratio" res <- list(groups = gtxt, control = ctxt, type=ty, q=q, r=r, u=u, v=v, ratio = rr, se.log.ratio = se, cl.lower = rr/ef, cl.upper = rr * ef, chisq = ch, p.value = 1 - pchisq( ch, 1)) class(res) <- "mh" res } print.mh <- function(m) { cat("\n") if (!is.null(m$control)) cat("\nMantel-Haenszel comparison for: ") else cat("Comparison for: ") cat(m$groups[1], " (", m$groups[2], "versus", m$groups[3], ")\n") if (!is.null(m$control)) cat("controlled for:", m$control, "\n") cols <- c(m$type, "CL (lower)", "CL (upper)", "Chisq (1 df)", "p-value") nr <- length(m$ratio) if (is.array(m$ratio)) { dnt <- dimnames(m$ratio) size <- dim(m$ratio) nw <- length(dnt) } else { rn <- names(m$ratio) if (length(rn) > 1) dnt <- list(names(m$ratio)) else dnt <- list("") size <- nr nw <- 1 } dno <- vector("list", nw+1) so <- vector("numeric", nw+1) dno[[1]] <- dnt[[1]] dno[[2]] <- cols so[1] <- size[1] so[2] <- 5 if (nw > 1) for (i in 2:nw) { dno[[i+1]] <- dnt[[i]] so[i+1] <- size[i] } s1 <- size[1] tab <- cbind(m$ratio, m$cl.lower, m$cl.upper, m$chisq, m$p.value) # as.matrix(m$ratio, nrow=s1), # as.matrix(m$cl.lower, nrow=s1), # as.matrix(m$cl.upper, nrow=s1), # as.matrix(m$chisq, nrow=s1), # as.matrix(m$p.value, nrow=s1) ) print(array(tab, dim=so, dimnames=dno)) if (nr > 1) { Q <- sum(m$q) R <- sum(m$r) cat("\nOverall Mantel-Haenszel estimate of", m$type, ":", format(Q/R)) h <- sum(((m$q*R-m$r*Q)^2)/m$v)/(Q*R) df <- sum(m$v>0)-1 cat("\nChi-squared test of heterogeneity:", format(h), "(",df," df), p =", format(1-pchisq(h, df)), "\n") } cat("\n") } # Power calculations mh.power <- function(mh, ratio, alpha=0.05) { n.se <- log(ratio)/mh$se.log.ratio pnorm(n.se - qnorm(1-alpha/2)) } Epi/R/fit.baseline.R0000644000175100001440000000065012531361077013702 0ustar hornikusersfit.baseline <- function(y, rates.frame, start) { if (missing(start)) { ## Get starting values from logistic regression model glm.out.init <- glm(y~., family=binomial, data=rates.frame) mu.init <- fitted(glm.out.init, type="response") glm(y~-1 + ., family=binomial(link=log), data=rates.frame, mustart=mu.init) } else { glm(y~-1 + ., family=binomial(link=log), data=rates.frame, start=start) } } Epi/R/print.Icens.r0000644000175100001440000000020012531361077013562 0ustar hornikusersprint.Icens <- function( x, digits=4, scale=1, ... ) { emat <- summary.Icens( x, scale=scale ) print( round( emat, digits ) ) } Epi/R/NArray.R0000644000175100001440000000146212531361077012535 0ustar hornikusersNArray <- function( x, cells=NA ) { if( !is.list(x) ) stop("Argument must be a (named) list." ) array( cells, dimnames=x, dim=sapply( x, length ) ) } ZArray <- function( x, cells=0 ) NArray( x, cells=cells ) larray <- function( data=NA, dim, dimnames ) { if( is.list(data) ) return( array(data=NA,dim=sapply(data,length), dimnames=data) ) else if( is.list(dim) ) return( array(data=data,dim=sapply(dim,length), dimnames=dim) ) else if( is.list(dimnames) ) return( array(data=data,dim=sapply(dimnames,length), dimnames=dimnames) ) else if( !missing(dimnames) ) return( array(data=data,dim=length(data), dimnames=dimnames) ) else return( array(data=data,dim=length(data)) ) } Epi/R/print.floated.R0000644000175100001440000000160312531361077014107 0ustar hornikusers"print.floated" <- function(x, digits=max(3, getOption("digits") - 3), level = 0.95, ...) { K <- qnorm((1+level)/2) n <- length(x$coef) mat <- matrix("", n, 4) ci.mat <- matrix(0, n, 2) cm <- x$coefmat cat("Floating treatment contrasts for factor ", x$factor, "\n\n") mat[,1] <- names(x$coef) se <- sqrt(x$var) ci.mat[, 1] <- x$coef - K * se ci.mat[, 2] <- x$coef + K * se mat[,2] <- format(x$coef, digits=digits) mat[,3] <- format(se, digits=digits) ci.mat <- format(ci.mat, digits=digits) mat[,4] <- paste("(", ci.mat[,1], ",", ci.mat[,2], ")", sep="") dimnames(mat) <- list(rep("", n), c("Level", "Coefficient", "Std. Error", "95% Floating CI")) print(mat, quote=FALSE) cat("\nError limits over all contrasts: ", paste(format(c(0.99, x$limits), digits=2)[-1], collapse=","),"\n") } Epi/R/ftrend.R0000644000175100001440000000520312531361077012620 0ustar hornikusers"ftrend" <- function(object, ...) { if(length(object$xlevels) == 0) { stop("No factors in model") } xname <- names(object$xlevels)[1] if (!identical(object$contrasts[[1]], "contr.treatment")) { stop(paste("Treatment contrasts must be used for variable", xname)) } xlevels <- object$xlevels[[1]] nlevels <- length(xlevels) coefnames <- paste(xname, xlevels, sep="") ncoef <- length(coef(object)) if (!all(coefnames %in% names(coef(object)))) { stop("The model must not have an intercept term") } index1 <- match(coefnames, names(coef(object))) index2 <- (1:ncoef)[-index1] m <- length(index1) ncov <- length(index2) ## Centre the covariates according to Greenland et al (weighted mean = 0) X0 <- model.matrix(object) if (!is.null(object$weights)) { mu <- -apply(X0, 2, weighted.mean, object$weights )[index2] } else { mu <- -apply(X0, 2, mean)[index2] } mu.full <- rep(0, ncoef) mu.full[index2] <- mu X <- sweep(X0, 2, mu.full, "+") ## Information matrix with centred covariates if (!is.null(object$weights)) { J <- crossprod(X, sweep(X, 1, object$weights, "*")) } else { ## linear models J <- crossprod(X,X) } J11 <- J[index1, index1] J12 <- J[index1, index2] J21 <- J[index2, index1] J22 <- J[index2, index2] ## Variance matrix V <- solve(J) V11 <- V[index1, index1] V12 <- V[index1, index2] V21 <- V[index2, index1] V22 <- V[index2, index2] cal.V <- function(mu) { one <- as.matrix(rep(1,m)) mu <- as.matrix(mu) return(V11 - one %*% t(mu) %*% V21 - V12 %*% mu %*% t(one) + matrix(1, m, m) * (t(mu) %*% V22 %*% mu)[1,1]) } f <- function(mu) { V.mu <- cal.V(mu) # lambda is current vector of floating variances D <- sum(diag(V.mu)/lambda) - c(determinant(V.mu)$modulus) + sum(log(lambda)) - m S <- (1/sum(diag(J11)) + t(mu) %*% solve(J22) %*% mu)[1,1] grad1 <- - t(1/lambda) %*% V12 grad2 <- + sum(1/lambda) * t(mu) %*% V22 grad3 <- - t(mu) %*% solve(J22)/S attr(D,"gradient") <- 2 * (grad1 + grad2 + grad3) H1 <- V22 * sum(1/lambda) H2 <- -solve(J22)/S b <- solve(J22) %*% mu/S H3 <- 2 * b %*% t(b) attr(D, "hessian") <- 2 * (H1 + H2 + H3) return(D) } ## Initial value of lambda lambda <- diag(V[index1,index1]) ## Do the minimization nlm.out <- nlm(f, rep(0,ncov), check.analyticals=TRUE, ...) mu2 <- nlm.out$estimate ## Calculate parameter values and their covariance matrix ## if the covariates are appropriately centred coef <- coef(object)[index1] - c(crossprod(mu + mu2, coef(object)[index2])) return(list(coef=coef, vcov=cal.V(mu2))) } Epi/R/Relevel.R0000644000175100001440000000537412531361077012745 0ustar hornikusers # The levels method is already defined (in the utils package) # and hence imported in the NAMESPACE file levels.Lexis <- function( x ) { union( levels(x$lex.Cst), levels(x$lex.Xst) ) } # The Relevel method Relevel <- function (x, ...) UseMethod("Relevel") # The factor method is the default method Relevel.default <- Relevel.factor <- function( x, ref, first=TRUE, collapse="+", ... ) { # Function that collapses multiple sets of levels of a factor # if( !is.factor(x) ) { argnam <- deparse( substitute(x) ) f <- factor( x ) cat( "WARNING: ", argnam, "has been converted to a factor with levels:\n", levels( f ) ) } else f <- x # This is a copy of the relevel function from the base package: # relev <- function (x, ref, ...) { lev <- levels(x) if ( is.character( ref ) ) ref <- match(ref, lev) if ( any( is.na( ref ) ) ) stop( "any values in ref must be an existing level" ) nlev <- length( lev ) if ( any( ref < 1 ) || any( ref > nlev ) ) stop( paste( "ref=", paste( ref, collapse="," ), ": All elements must be in 1:", nlev, sep="" ) ) factor(x, levels = lev[c(ref, seq(along = lev)[-ref])]) } # If called with a non-list argument assume reshuffling of levels # if( !is.list( ref ) ) fnew <- relev( f, ref ) # If called with a list collapse levels in each list element. # if( is.list( ref ) ) { fnew <- f newnames <- levels( f ) uninames <- character( length( ref ) ) for( s in 1:length(ref) ) if ( is.character( ref[[s]] ) ) ref[[s]] <- match( ref[[s]], levels(f) ) # Check for replicates in levels to be grouped if( any( (tt<-table(unlist(ref))) > 1 ) ) stop("Factor level(s) ", levels( f )[as.numeric(names(tt)[tt>1])], " has been allocated to more than one new level.") for( s in 1:length(ref) ) { uninames[s] <- if( is.null( names( ref ) ) ) { paste( levels( f )[ref[[s]]], collapse=collapse ) } else if( names( ref )[s]=="" ) { paste( levels( f )[ref[[s]]], collapse=collapse ) } else names( ref )[s] newnames[ref[[s]]] <- rep( uninames[s], length( ref[[s]] ) ) } levels( fnew ) <- newnames if( !is.null( first ) ) { if( !first ) fnew <- factor( fnew, c( levels( f )[-unlist( ref )], uninames ) ) if( first ) fnew <- factor( fnew, c( uninames, levels( f )[-unlist( ref )] ) ) } } # This is in order to merge levels with identical names # factor( fnew, levels=levels(fnew) ) } Epi/R/contr.cum.R0000644000175100001440000000056612531361077013255 0ustar hornikuserscontr.cum <- function(n) { if (is.numeric(n) && length(n) == 1) levs <- 1:n else { levs <- n n <- length(n) } contr <- array(0, c(n, n), list(levs, levs)) contr[col(contr) <= row(contr)] <- 1 if (n < 2) stop(paste("Contrasts not defined for", n - 1, "degrees of freedom")) contr <- contr[, -1, drop = FALSE] contr } Epi/R/ci.lin.R0000644000175100001440000001643112575535340012523 0ustar hornikusers# The coef() methods in nlme and lme4 do something different # so we make a workaround by specifying our own generic methods COEF <- function( x, ... ) UseMethod("COEF") COEF.default <- function( x, ... ) coef( x, ... ) VCOV <- function( x, ... ) UseMethod("VCOV") VCOV.default <- function( x, ... ) vcov( x, ... ) # Then we can get from these methods what we want from lme, mer etc. COEF.lme <- function( x, ... ) nlme::fixed.effects( x ) COEF.mer <- function( x, ... ) lme4::fixef( x ) COEF.lmerMod <- function( x, ... ) lme4::fixef( x ) # The vcov returns a matrix with the wrong class so we strip that: VCOV.lme <- function( x, ... ) as.matrix(vcov( x )) VCOV.mer <- function( x, ... ) as.matrix(vcov( x )) VCOV.lmerMod <- function( x, ... ) as.matrix(vcov( x )) # For the rest of the non-conforming classes we then just need the methods not defined COEF.crr <- function( object, ... ) object$coef VCOV.crr <- function( object, ... ) object$var COEF.MIresult <- function( object, ... ) object$coefficients VCOV.MIresult <- function( object, ... ) object$variance COEF.mipo <- function( object, ... ) object$qbar VCOV.mipo <- function( object, ... ) object$t COEF.polr <- function( object, ... ) summary(object)$coefficients VCOV.gnlm <- function( object, ... ) object$cov VCOV.rq <- function( object, ... ) summary(object, cov=TRUE)$cov ci.lin <- function( obj, ctr.mat = NULL, subset = NULL, subint = NULL, diffs = FALSE, fnam = !diffs, vcov = FALSE, alpha = 0.05, df = Inf, Exp = FALSE, sample = FALSE ) { # First extract all the coefficients and the variance-covariance matrix cf <- COEF( obj ) vcv <- VCOV( obj ) # Workaround to expand the vcov matrix with 0s so that it matches # the coefficients vector in case of (extrinsic) aliasing. if( any( is.na( cf ) ) ) { if( inherits( obj, c("coxph") ) ) { # aliased parameters are only NAs in coef, but omitted from vcov wh <- !is.na(cf) cf <- cf[wh] vcv <- vcv[wh,wh] } else if( inherits( obj, c("clogistic") ) ) { cf[is.na(cf)] <- 0 } else { vM <- matrix( 0, length( cf ), length( cf ) ) dimnames( vM ) <- list( names( cf ), names( cf ) ) vM[!is.na(cf),!is.na(cf)] <- vcv cf[is.na(cf)] <- 0 vcv <- vM } } # Function for computing a contrast matrix for all possible # differences between a set of parameters. all.dif <- function( cf, pre=FALSE ) { nn <- length( cf ) nr <- nn * ( nn - 1 ) / 2 nam <- names( cf ) # Work out the indexes of parameter pairs to compare # xx <- numeric( 0 ) for( j in 2:nn ) xx <- c(xx, j:nn ) ctr <- cbind( rep( 1:(nn-1), (nn-1):1 ), xx ) # Now for the annotation: # Find out how large a proportion of rownames are identical i <- 1 while( all( substr( nam, 1, i ) == substr( nam[1], 1, i ) ) ) i <- i+1 # If a factor name is given, then use this, otherwise the identical part # of the parameter names if( is.character( pre ) ) { prefix <- pre pre <- TRUE } else { prefix <- substr( nam[1], 1, i-1 ) } rn <- paste( if( pre ) prefix else "", substring( nam[ctr[,1]], i ), "vs.", substring( nam[ctr[,2]], i ) ) # Finally, construct the contrast matrix and attach the rownames cm <- matrix( 0, nr, nn ) cm[cbind(1:nr,ctr[,1])] <- 1 cm[cbind(1:nr,ctr[,2])] <- -1 rownames( cm ) <- rn cm # end of function for all differences } # Were all differences requested? # if( diffs ) { if( is.character( subset ) ) { if ( inherits( obj, "lm" ) & length( grep( subset, names( obj$xlevels ) ) )>0 ) { # The case of factor level differences we find the relevant # subset of parameters by reconstructing names of parameters wf <- grep( subset, af <- names( obj$xlevels ) ) # All factor levels fn <- obj$xlevels[[af[wf]]] # Reconstruct names of relevant parameter names pnam <- paste( af[wf], fn, sep="" ) # Find them in the parameter vector wh <- match( pnam, names( coef( obj ) ) ) # Get the relevant subset, and stick in 0s for NAs cf <- coef( obj )[wh] cf[is.na( cf )] <- 0 vcv <- vcov( obj )[wh,wh] vcv[is.na( vcv )] <- 0 names( cf ) <- rownames( vcv ) <- colnames( vcv ) <- paste( subset, ": ", fn, sep="" ) } else { subset <- grep( subset, names( cf ) ) cf <- cf[subset] vcv <- vcv[subset,subset] } } else { cf <- cf[subset] vcv <- vcv[subset,subset] } ctr.mat <- all.dif( cf, pre=fnam ) } if( !diffs ) { if( is.character( subset ) ) { sb <- numeric(0) for( i in 1:length( subset ) ) sb <- c(sb,grep( subset[i], names( cf ) )) subset <- sb # unique( sb ) } if( is.character( subint ) ) { sb <- 1:length(cf) for( i in 1:length(subint) ) sb <- intersect( sb, grep(subint[i],names(cf)) ) subset <- sb # unique( sb ) } if( is.null( subset ) & is.null( subint ) ) subset <- 1:length( cf ) # Exclude units where aliasing has produced NAs. # Not needed after replacement with 0s # subset <- subset[!is.na( cf[subset] )] cf <- cf[subset] vcv <- vcv[subset,subset] if( is.null( ctr.mat ) ) { ctr.mat <- diag( length( cf ) ) rownames( ctr.mat ) <- names( cf ) } if( dim( ctr.mat )[2] != length(cf) ) stop( paste("\n Dimension of ", deparse(substitute(ctr.mat)), ": ", paste(dim(ctr.mat), collapse = "x"), ", not compatible with no of parameters in ", deparse(substitute(obj)), ": ", length(cf), sep = "")) } # Finally, here is the actual computation if( sample ) { # mvrnorm() returns a vector if sample=1, otherwise a sample x # length(cf) matrix - hence the rbind so we always get a row # matrix and res then becomes an nrow(ctr.mat) x sample matrix res <- ctr.mat %*% t( rbind(mvrnorm( sample, cf, vcv )) ) } else { ct <- ctr.mat %*% cf vc <- ctr.mat %*% vcv %*% t( ctr.mat ) se <- sqrt( diag( vc ) ) ci <- cbind( ct, se ) %*% ci.mat( alpha=alpha, df=df ) t0 <- cbind( se, ct/se, 2 * ( pnorm( -abs( ct / se ) ) ) ) colnames(t0) <- c("StdErr", "z", "P") res <- cbind(ci, t0)[, c(1, 4:6, 2:3), drop=FALSE] if( Exp ) { res <- cbind( res[,1:4 ,drop=FALSE], exp( res[,c(1,5,6),drop=FALSE] ) ) colnames( res )[5] <- "exp(Est.)" } } # Return the requested structure if( sample ) invisible( res ) else if( vcov ) invisible( list( est=ct, vcov=vc ) ) else res } # Handy wrapper ci.exp <- function( ..., Exp=TRUE, pval=FALSE ) { if( Exp ) ci.lin( ..., Exp=TRUE )[,if(pval) c(5:7,4) else 5:7 ,drop=FALSE] else ci.lin( ..., Exp=FALSE )[,if(pval) c(1,5,6,4) else c(1,5,6),drop=FALSE] } # Wrapper for predict.glm ci.pred <- function( obj, newdata, Exp = NULL, alpha = 0.05, df = Inf ) { if( !inherits( obj, "glm" ) ) stop("Not usable for non-glm objects") # get prediction and se on the link scale zz <- predict( obj, newdata=newdata, se.fit=TRUE, type="link" ) # compute ci on link scale zz <- cbind( zz$fit, zz$se.fit ) %*% ci.mat( alpha=alpha, df=df ) # transform as requested if( missing(Exp) ) { return( obj$family$linkinv(zz) ) } else { if( Exp ) { return( exp(zz) ) } else if( !Exp ) return( zz ) } } Epi/R/fit.mult.r0000644000175100001440000000260212531361077013140 0ustar hornikusersfit.mult <- function(y, rates.frame, cov.frame, start) { if (missing(start)) { ## Fit model without covariates to get initial rates estimates glm.out.rates <- fit.baseline(y, rates.frame) ## Initial values for iterative fitting lambda <- coef(glm.out.rates) beta <- rep(0, ncol(cov.frame)) } else { lambda <- start[1:ncol(rates.frame)] beta <- start[ncol(rates.frame) + 1:ncol(cov.frame)] } niter <- 1 cy <- 1 - y while(TRUE) { ## covariates model off <- log(-as.matrix(rates.frame) %*% lambda) glm.out.cov <- glm(cy ~ -1 + offset(off) + ., family=binomial(link=cloglog), data=cov.frame, start=beta, maxit=100) beta <- coef(glm.out.cov) ## rates model wgt <- exp(as.matrix(cov.frame) %*% beta) temp.rates.frame <- wgt * rates.frame glm.out.rates <- glm(y ~ -1 + ., family=binomial(link=log), data=temp.rates.frame, start=lambda, maxit=100) lambda <- coef(glm.out.rates) ## Check convergence ## Convergence <==> deviances are equal TOL <- max(glm.out.cov$control$epsilon, glm.out.rates$control$epsilon) dev1 <- glm.out.cov$deviance dev2 <- glm.out.rates$deviance if (abs(dev1 - dev2)/(0.1 + abs(dev1)) < TOL) break else niter <- niter + 1 } return(list( rates=glm.out.rates, cov=glm.out.cov, niter=niter)) } Epi/R/Wald.R0000644000175100001440000000100412531361077012220 0ustar hornikusersWald <- function( obj, H0=0, ... ) { rl <- ci.lin( obj, ..., vcov=TRUE ) beta <- rl$est vcov <- rl$vcov if( missing( H0 ) ) H0 <- beta*0 if( length(H0) != length(beta) ) stop( "H0 has length ", length(H0), " but the set of selected paramteters has length ", length(beta), ":\n", paste(round(beta,options()[["digits"]]),collapse=" ") ) chi <- t( beta-H0 ) %*% solve( vcov, beta-H0 ) df <- length(beta) p <- 1 - pchisq( chi, df ) c( "Chisq"=chi, "d.f."=df, "P"=p ) } Epi/R/plotevent.r0000644000175100001440000000217112531361077013417 0ustar hornikusersplotevent <- function(last.well,first.ill,data) { subsetdata <- data[!is.na(data[,first.ill]),c(last.well,first.ill)] subsetdata$n <- seq(1,dim(subsetdata)[1]) plot(c(subsetdata[,1], subsetdata[,2]),rep(0,2*nrow(subsetdata)), bty="n", yaxt="n", type="n", xlim=c(round(min(subsetdata[,1],subsetdata[,2],na.rm=T)),round(max(subsetdata[,1],subsetdata[,2],na.rm=T))), ylim=c(-2, max(subsetdata[,3])), xlab="Time",ylab="Conversions", main=paste("Times between ",last.well," and ",first.ill,"",sep="")) mtext(seq(0,nrow(subsetdata),5)[-1],side=2,at=seq(0,nrow(subsetdata),5)[-1],las=1,line=0) mtext("Eq Cl",side=2,at=-2,las=1, padj=0,col="blue",font=2) segments(subsetdata[,1],subsetdata[,3],subsetdata[,2],subsetdata[,3],lwd=1) left <- unique(subsetdata[,1]) right <- unique(subsetdata[,2]) names(left) <- rep("0",length(left)) names(right) <- rep("1",length(right)) MM <- sort(c(left,right)) type <- as.numeric(names(MM)) type2 <- c(type[-1],0) diff <- type-type2 int <- MM[diff<0|diff>0] mat <- matrix(int,length(int)/2,2,byrow=TRUE) d <- mat[,1] - mat[,2] segments(mat[,1][d!=0],-2,mat[,2][d!=0],-2,lwd=3,col="blue") } Epi/R/ci.pd.R0000644000175100001440000000604512531361077012340 0ustar hornikusersci.pd <- function( aa, bb=NULL, cc=NULL, dd=NULL, method = "Nc", alpha = 0.05, conf.level = 0.95, digits = 3, print = TRUE, detail.labs = FALSE ) { # Computes the approximate c.i. for the probability difference # Optional methods: # -- "AC", Agresti and Caffo, Am Statistician (2000), # -- "Nc", method 10 from Newcombe, Stat.Med. 17, (1998), pp.873 ff. if ( !(method %in% c("AC", "Nc") ) ) stop( paste('Method', method, 'unsupported: Only "Nc" and "AC" supported') ) # Fix the confidence level if( missing( alpha ) ) alpha <- 1 - conf.level if( missing( conf.level ) ) conf.level <- 1 - alpha # Allow various forms of vector and matrix input prefix <- "" if( is.vector( aa ) & length( aa ) > 1 ) prefix <- names( aa ) if( length( dim( aa ) ) == 2 ) { bb <- aa[1,2] cc <- aa[2,1] dd <- aa[2,2] aa <- aa[1,1] } if( length( dim( aa ) ) == 3 ) { prefix <- paste( if( is.null( dimnames( aa ) ) ) 1:dim(aa)[3] else dimnames( aa )[[3]], ": ", sep="" ) bb <- aa[1,2,] cc <- aa[2,1,] dd <- aa[2,2,] aa <- aa[1,1,] } if( length( dim( aa ) ) > 3 ) stop( "Maximal array dimension (3) exceeded!" ) # Function to give roots in a 2nd degree polynomial # (Polyroot does not work on vectors of coefficients) pol2 <- function( Aye, Bee, Sea ) { Dee <- Bee^2 - 4 * Aye * Sea lo <- ifelse( Dee >= 0, ( -Bee - sqrt( Dee ) ) / ( 2 * Aye ), NA ) hi <- ifelse( Dee >= 0, ( -Bee + sqrt( Dee ) ) / ( 2 * Aye ), NA ) cbind( lo, hi ) } # Put the data in the right form x1 <- aa n1 <- aa+cc p1 <- x1/n1 x2 <- bb n2 <- bb+dd p2 <- x2/n2 pd <- x1/n1 - x2/n2 z <- qnorm( 1-alpha/2 ) zz <- z^2 if ( method == "AC" ) { x1.1 <- x1+1 n1.2 <- n1+2 x2.1 <- x2+1 n2.2 <- n2+2 p1.1 <- x1.1/n1.2 p2.1 <- x2.1/n2.2 pd.1 <- p1.1 - p2.1 SE.4 <- sqrt( p1.1 * ( 1-p1.1) /n1.2 + p2.1 * ( 1-p2.1) /n2.2 ) res <- cbind( n1, p1, n2, p2, pd, pd.1 - z*SE.4, pd.1 + z*SE.4 ) } else if ( method == "Nc" ) { A1 <- 1 + zz / n1 B1 <- -2*x1/n1 - zz / n1 C1 <- ( x1 / n1 )^2 r1 <- pol2( A1, B1, C1 ) A2 <- 1 + zz / n2 B2 <- -2*x2/n2 - zz / n2 C2 <- ( x2 / n2 )^2 r2 <- pol2( A2, B2, C2 ) dlt <- sqrt( ( x1/n1 - r1[,1] )^2 + ( x2/n2 - r2[,2] )^2 ) eps <- sqrt( ( x1/n1 - r1[,2] )^2 + ( x2/n2 - r2[,1] )^2 ) res <- cbind(n1, p1, n2, p2, pd, pd-dlt, pd+eps ) } colnames( res ) <- c("n1","p1","n2","p2", "diff",paste( alpha/2 *100,"%",sep=""), paste((1-alpha/2)*100,"%",sep="") ) rownames( res ) <- prefix if( detail.labs ) rownames( res ) <- paste( prefix, ": ", aa, "/(", aa, "+", cc, ") - ", bb, "/(", bb, "+", dd, ")", sep="" ) if( print ) print( round( res, digits ) ) invisible( res ) } Epi/R/Cplot.R0000644000175100001440000000441212531361077012420 0ustar hornikusersCplot <- function( rates, age = as.numeric( rownames( rates ) ), per = as.numeric( colnames( rates ) ), grid = FALSE, c.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), c.lim = NULL, ylim = range( rates[rates>0], na.rm=TRUE ), at = NULL, labels = paste( at ), c.lab = names( dimnames( rates ) )[2], ylab = deparse( substitute( rates ) ), type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y", las = 1, xannx = 1/20, ann = FALSE, cex.ann = 0.8, a.thin = seq( 1, length( age ), 2 ), ... ) { # First convert the age-period table to an age-cohort table rt <- as.table( rates ) dimnames( rt ) <- list( age = age, per = per ) rtf <- data.frame( rt ) rtf$age <- as.numeric( as.character( rtf$age ) ) rtf$per <- as.numeric( as.character( rtf$per ) ) ac <- tapply( rtf$Freq, list( rtf$age, rtf$per-rtf$age ), mean ) coh <- as.numeric( colnames( ac ) ) if( is.null( c.lim ) ) c.lim <- range( coh, na.rm=TRUE ) + c(0,diff( range( coh ) )/30) * ann # Plot the frame if( ann ) c.lim <- c.lim - c(diff( range( coh ) ) * xannx,0) matplot( coh, t(ac), type="n", xlim=c.lim, ylim=ylim, xlab=c.lab, ylab=ylab, log=log.ax, las=las, yaxt=if( !is.null( at ) ) "n" else "s" ) if( !is.null( at ) ) axis( side=2, at=at, labels=labels, yaxt="s", las=las ) # and the grid if required if( !missing( c.grid ) | !missing( grid ) ) { if( is.logical( c.grid ) & c.grid[1] ) c.grid <- nice( coh, log=par("xlog") ) abline( v=c.grid, col=col.grid ) } if( !missing( ygrid ) | !missing( grid ) ) { if( is.logical( ygrid ) & ygrid[1] ) ygrid <- nice( rates[!is.na(rates)], log=par("ylog") ) abline( h=ygrid, col=col.grid ) } box() # then the curves matlines( coh, t(ac), lwd=lwd, lty=lty, col=col, type=type, ... ) # annotate them if required (every second by default ) if( ann ) { nr <- nrow( ac ) nc <- ncol( ac ) # Find the cohorts for the last rates in each age-class c.end <- rev( per )[1] - age text( c.end[a.thin], rates[,ncol(rates)][a.thin], paste( "", age[a.thin] ), adj=c(0,0.5), cex=cex.ann, col=if( length(col)==1 ) col else col[a.thin] ) } } Epi/R/fit.add.r0000644000175100001440000000117212531361077012710 0ustar hornikusersfit.add <- function(y, rates.frame, cov.frame, start) { ## Modify covariate values rates.sum <- apply(rates.frame, 1, sum) cov.frame <- sweep(cov.frame, 1, rates.sum, "*") model.frame <- cbind(rates.frame, cov.frame) if (missing(start)) { glm.out <- fit.baseline(y, rates.frame) mu.inits <- predict(glm.out, type="response") glm.out <- glm(y~-1 + ., family=binomial(link=log), data=model.frame, mustart=mu.inits, maxit=100) } else { glm.out <- glm(y~-1 + ., family=binomial(link=log), data=model.frame, start=start, maxit=100) } return(list(rates=glm.out)) } Epi/R/as.Date.cal.yr.R0000644000175100001440000000014312531361077014002 0ustar hornikusersas.Date.cal.yr <- function( x, ... ) { structure( round( ( x - 1970 ) * 365.25 ), class="Date" ) } Epi/R/projection.ip.r0000644000175100001440000000163012532105776014164 0ustar hornikusersprojection.ip <- function( X, M, orth = FALSE, weight=rep(1,nrow(X)) ) # Generate the projection of M on span(X) w.r.t the inner # product =sum( x*w*y). # Avoids computing the entire projection matrix # X %*% inverse( X'WX ) %*% (XW)' by first computing # inverse( X'WX ) %*% (XW)'M # (which is (p x p) %*% (p x n) %*% (n x k), i.e. (p x k) ) # and then premultiplying X (n x p) hence avoiding making # a n x n matrix underway (note that n is large, p is small). # Note multiplication by W (diagional matrix) is done by # vector multiplication using the recycling facility of R. { if( nrow(X) != length(weight) ) stop( "Dimension of space and length of weights differ!" ) if( nrow(X) != nrow(M) ) stop( "Dimension of space and rownumber of model matrix differ!" ) Pp <- solve( crossprod( X * sqrt(weight) ), t( X * weight ) ) %*% M PM <- X %*% Pp if (orth) PM <- M - PM else PM } Epi/R/Lexis.diagram.R0000644000175100001440000000742312531361077014033 0ustar hornikusersLexis.diagram <- function( age = c( 0, 60), alab = "Age", date = c( 1940, 2000 ), dlab = "Calendar time", int = 5, lab.int = 2*int, col.life = "black", lwd.life = 2, age.grid = TRUE, date.grid = TRUE, coh.grid = FALSE, col.grid = gray(0.7), lwd.grid = 1, las = 1, entry.date = NA, entry.age = NA, exit.date = NA, exit.age = NA, risk.time = NA, birth.date = NA, fail = NA, cex.fail = 1.1, pch.fail = c(NA,16), col.fail = rep( col.life, 2 ), data = NULL, ... ) { # Function to plot a Lexis-diagram # # BxC, 2002, revsions in 2005 ## Get variables from data argument, if supplied, or from parent ## frame if not. entry.date <- eval(substitute(entry.date), data) entry.age <- eval(substitute(entry.age ), data) exit.date <- eval(substitute(exit.date ), data) exit.age <- eval(substitute(exit.age ), data) risk.time <- eval(substitute(birth.date), data) birth.date <- eval(substitute(birth.date), data) fail <- eval(substitute(fail ), data) # First expand intervals to both dimensions # int[1:2] <- c( int, int)[1:2] lab.int[1:2] <- c(lab.int,lab.int)[1:2] # Plot the diagram # plot( NA, xlim=date, xaxt="n", xaxs="i", xlab=dlab, ylim=age, yaxt="n", yaxs="i", ylab=alab, ... ) axis( side=1, at=seq( date[1], date[2], lab.int[2] ), las=las ) axis( side=2, at=seq( age[1], age[2], lab.int[1] ), las=las ) box( col="white" ) # par("fg") ) # Then the required grids # if ( age.grid ) { abline( h = seq( age[1], age[2], int[1] ), col=col.grid, lwd=lwd.grid ) } if ( date.grid ) { abline( v = seq( date[1], date[2], int[2] ), col=col.grid, lwd=lwd.grid ) } ages <- seq( age[1], age[2], min( int ) ) dates <- seq( date[1], date[2], min( int ) ) if ( coh.grid ) { segments( rep( date[1], length( ages ) ), ages, pmin( date[1] + ( age[2] - ages ), date[2] ), pmin( ages + ( date[2] - date[1] ), age[2] ), col=col.grid, lwd=lwd.grid ) segments( dates, rep( age[1], length( dates ) ), pmin( dates + ( age[2] - age[1] ), date[2] ), pmin( age[1] + ( date[2] - dates ), age[2] ), col=col.grid, lwd=lwd.grid ) } # Check if data for lifelines is supplied and plot lifelines if so # if( sum( !is.na( list( entry.date, entry.age, exit.date, exit.age, birth.date, risk.time ) ) ) > 2 ) { LL <- Lexis.lines( entry.date = entry.date, exit.date = exit.date, birth.date = birth.date, entry.age = entry.age, exit.age = exit.age, risk.time = risk.time, col.life = col.life, lwd.life = lwd.life, fail = fail, cex.fail = cex.fail, pch.fail = pch.fail, col.fail = col.fail, data = data ) invisible( LL ) } } Epi/R/zzz.R0000644000175100001440000000012012531361077012164 0ustar hornikusers.onLoad <- function(lib, pkg) { library.dynam("Epi", pkg, lib, local=FALSE) } Epi/R/apc.plot.R0000644000175100001440000001242512531361077013062 0ustar hornikusersplot.apc <- apc.plot <- function( x, r.txt="Rate", ... ) { if( !inherits( x, "apc" ) ) stop( "Argument must be an apc-object" ) # Determine the ranges of the horizontal axes a.lab = nice( x$Age[,1] ) cp.lab = nice( c(x$Per[,1],x$Coh[,1]), high=0.1 )[-1] # The necessary range of the two vertical axes r.rg <- range( x$Age[,-1] ) rr.rg <- range( rbind( x$Per[,-1], x$Coh[,-1] ) ) # Align the RR with the rates on an integer power of 10 rr.ref <- 10^floor( log10(r.rg[2])-log10(rr.rg[2]) ) # Find the tic-marks for the two vertical axes r.tic <- nice( r.rg, log=T, lpos=1:9 ) rr.tic <- nice( rr.rg, log=T, lpos=1:9 ) # Expand to cover it all r.tic <- sort( unique( c( r.tic, rr.tic*rr.ref ) ) ) rr.tic <- r.tic/rr.ref # Find the places for labels r.lab <- nice( r.tic, log=T, lpos=c(1,2,5) ) rr.lab <- nice( rr.tic, log=T, lpos=c(1,2,5) ) r.lab <- r.lab[ r.lab>min( r.tic) & r.labmin(rr.tic) & rr.lab0], na.rm=TRUE ), at = NULL, labels = paste( at ), a.lab = names( dimnames( rates ) )[1], ylab = deparse( substitute( rates ) ), type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y", las = 1, c.col = col, p.col = col, c.ann = FALSE, p.ann = FALSE, xannx = 1/20, cex.ann = 0.8, c.thin = seq( 2, length( age ) + length( per ) - 1, 2 ), p.thin = seq( 1, length( per ), 2 ), p.lines = TRUE, c.lines = !p.lines, ... # arguments passed on to matlines() ) { # Plot the frame if( p.ann ) a.lim <- a.lim + c(0,diff( range( age ) ) * xannx) if( c.ann ) a.lim <- a.lim - c( diff( range( age ) ) * xannx,0) matplot( age, rates, type="n", xlim=a.lim, ylim=ylim, xlab=a.lab, ylab=ylab, log=log.ax, las=las, yaxt=if( !is.null( at ) ) "n" else "s" ) if( !is.null( at ) ) axis( side=2, at=at, labels=labels, yaxt="s", las=las ) # and the grid if required: if( !missing( a.grid ) | !missing( grid ) ) { if( is.logical( a.grid ) & a.grid[1] ) a.grid <- nice( age, log=par("xlog") ) abline( v=a.grid, col=col.grid ) } if( !missing( ygrid ) | !missing( ygrid ) ) { if( is.logical( ygrid ) & ygrid[1] ) ygrid <- nice( rates[!is.na(rates)], log=par("ylog") ) abline( h=ygrid, col=col.grid ) } box() # What lines were required? if( !missing( c.lines ) & missing( p.lines ) ) p.lines <- !c.lines # Period curves: if( p.lines ){ matlines( age, rates, type=type, lwd=lwd, lty=lty, col=p.col, ... ) # annotate them if required (every second by default): if( p.ann ) { nr <- nrow( rates ) nc <- ncol( rates ) text( rep( age[nr], nc )[p.thin], rates[nr,][p.thin], paste( "", per[p.thin] ), adj=c(0,0.5), cex=cex.ann, col=if( length(p.col)==1 ) p.col else p.col[p.thin] ) } } # Cohort curves: if( c.lines ){ # First convert the age-period table to an age-cohort frame rt <- as.table( rates ) dimnames( rt ) <- list( age = age, per = per ) rtf <- data.frame( rt ) rtf$age <- as.numeric( as.character( rtf$age ) ) rtf$per <- as.numeric( as.character( rtf$per ) ) ac <- tapply( rtf$Freq, list( rtf$age, rtf$per-rtf$age ), mean ) matlines( age, ac, type=type, lwd=lwd, lty=lty, col=c.col, ... ) # annotate them if required (every other by default): if( c.ann ) { nr <- nrow( rt ) nc <- ncol( rt ) # Find the ages, cohorts and rates where the cohort curves starts a.min <- c( rev( age ), rep( age[1], nc-1 ) ) p.min <- c( rep( per[1], nr-1 ), per ) c.min <- p.min - a.min r.min <- c(rt[nr:1,1],rt[1,2:nc]) text( a.min[c.thin], r.min[c.thin], paste( "", c.min[c.thin] ), adj=c(1,0.5), cex=cex.ann, col=if( length(c.col)==1 ) c.col else c.col[c.thin] ) } } } Epi/R/stack.Lexis.R0000644000175100001440000000377112531361077013536 0ustar hornikusers# Functions to facilitate analysis of multistate models # The stack method is already defined (in the utils package) # and hence imported in the NAMESPACE file stack.Lexis <- function( x, ... ) { ## Function to stack obervations for survival analysis ## Make sure that lex.Cst and lex.Xst are factors with identical levels x <- Relevel( x ) ## Same covariates xx <- data.frame( cbind( x, lex.Tr="", lex.Fail=FALSE ) )[NULL,] tm <- tmat.Lexis( x ) for( fst in levels(factor(x$lex.Cst)) ) for( tst in levels(factor(x$lex.Xst)) ) if( !is.na(tm[fst,tst]) ) { tr = paste( fst, "->", tst , sep="" ) zz <- x[x$lex.Cst==fst,] xx <- rbind( xx, data.frame( zz, lex.Tr=tr, lex.Fail=(zz$lex.Xst==tst) ) ) } xx$lex.Tr <- factor(xx$lex.Tr) ## Reshuffle the variables wh.om <- match( "lex.Xst", names(xx) ) wh.rl <- match( c("lex.Tr","lex.Fail"), names(xx) ) xx <- xx[,c(1:wh.om,wh.rl,(wh.om+1):(wh.rl[1]-1))] attr(xx,"breaks") <- attr(x, "breaks") attr(xx,"time.scales") <- attr(x, "time.scales") class( xx ) <- c("stacked.Lexis","data.frame") xx } subset.stacked.Lexis <- function(x, ... ) { y <- subset.data.frame(x, ...) attr(y,"breaks") <- attr(x, "breaks") attr(y,"time.scales") <- attr(x, "time.scales") class(y) <- c("stacked.Lexis","data.frame") return(y) } transform.stacked.Lexis <- function(`_data`, ... ) { save.at <- attributes(`_data`) ## We can't use NextMethod here because of the special scoping rules ## used by transform.data.frame y <- base::transform.data.frame(`_data`, ...) save.at[["names"]] <- attr(y, "names") attributes(y) <- save.at y } # The tmat method tmat <- function (x, ...) UseMethod("tmat") tmat.Lexis <- function( x, Y=FALSE, mode="numeric", ... ) { zz <- table(x$lex.Cst,x$lex.Xst) class(zz) <- "matrix" if( Y ) { diag(zz) <- summary( x, simplify=FALSE )[[1]][1:nrow(zz),"Risk time:"] } else diag(zz) <- NA zz[zz==0] <- NA if( mode != "numeric" ) zz <- !is.na(zz) zz } Epi/R/summary.Icens.r0000644000175100001440000000140712531361077014135 0ustar hornikuserssummary.Icens <- function( x, scale=1, ... ) { if( attr( x, "model" ) == "MRR" ) { if( is.null( x$rates ) ) { class( x ) <- "glm" emat <- ci.lin( x ) } else { rate.est <- ci.lin( x$rates ) rate.est[,-(3:4)] <- rate.est[,-(3:4)] * scale emat <- rbind( cbind( rate.est, RR=NA )[,c(1:4,7,5:6)], ci.lin( x$cov, Exp=T ) ) } } if( attr( x, "model" ) == "AER" ) { rate.est <- ci.lin( x$rates ) rate.est[,-(3:4)] <- rate.est[,-(3:4)] * scale emat <- rate.est } if( length( x ) == 4 ) { b.est <- x[["boot.ci"]] colnames( b.est ) <- c( "Boot-med", "lo", "hi" ) emat <- cbind( emat, b.est ) } emat } Epi/vignettes/0000755000175100001440000000000012576333004013020 5ustar hornikusersEpi/vignettes/sim-Lexis.rnw0000644000175100001440000014272412531361102015423 0ustar hornikusers\SweaveOpts{results=verbatim,keep.source=TRUE,include=FALSE,eps=FALSE,prefix.string=sL} %\VignetteIndexEntry{Simulation of multistate models with multiple timescales: simLexis} \documentclass[a4paper,twoside,12pt]{report} %---------------------------------------------------------------------- % General information \newcommand{\Title}{Simulation of\\ multistate models with\\ multiple timescales:\\ \texttt{simLexis} in the \texttt{Epi} package} \newcommand{\Tit}{Multistate models with multiple timescales} \newcommand{\Version}{Version 2.2} \newcommand{\Dates}{\today} \newcommand{\Where}{SDC} \newcommand{\Homepage}{\url{http://BendixCarstensen.com/Epi}} \newcommand{\Faculty}{\begin{tabular}{rl} Bendix Carstensen & Steno Diabetes Center, Gentofte, Denmark\\ & {\small \& Department of Biostatistics, University of Copenhagen} \\ & \texttt{bxc@steno.dk}\\ & \url{http://BendixCarstensen.com} \\[1em] \end{tabular}} %---------------------------------------------------------------------- % Packages %\usepackage[inline]{showlabels} \usepackage[T1]{fontenc} \usepackage[latin1]{inputenc} \usepackage[english]{babel} \usepackage[font=it,labelfont=normalfont]{caption} \usepackage[colorlinks,urlcolor=blue,linkcolor=red]{hyperref} \usepackage[ae,hyper]{Rd} \usepackage[dvipsnames]{xcolor} \usepackage{makeidx,Sweave,floatflt,amsmath,amsfonts,amsbsy,enumitem,verbatim,dcolumn,needspace} \usepackage{booktabs,longtable,rotating,graphicx,verbatim,fancyhdr,datetime,afterpage} % \usepackage{times} \renewcommand{\textfraction}{0.0} \renewcommand{\topfraction}{1.0} \renewcommand{\bottomfraction}{1.0} \renewcommand{\floatpagefraction}{0.9} % \usepackage{mslapa} \definecolor{blaa}{RGB}{99,99,255} \DeclareGraphicsExtensions{.pdf,.jpg} %---------------------------------------------------------------------- % The usual usefuls % \input{c:/util/tex/useful.tex} \providecommand{\pmat}[1]{\text{\rm P}\left\{#1\right\}} \providecommand{\dif}{{\,\mathrm d}} % Simple insertion of figures \newcommand{\rwpre}{sL} \newcommand{\insfig}[3]{ \begin{figure}[h] \centering \includegraphics[width=#2\textwidth]{\rwpre-#1} \caption{#3} \label{fig:#1} \end{figure}} %---------------------------------------------------------------------- % Layout of pages \oddsidemargin 1mm \evensidemargin 1mm \topmargin -5mm \headheight 8mm \headsep 5mm \textheight 240mm \textwidth 165mm %\footheight 5mm \footskip 15mm \renewcommand{\topfraction}{0.9} \renewcommand{\bottomfraction}{0.9} \renewcommand{\textfraction}{0.1} \renewcommand{\floatpagefraction}{0.9} \renewcommand{\headrulewidth}{0.1pt} \setcounter{secnumdepth}{4} \setcounter{tocdepth}{4} %---------------------------------------------------------------------- % Here is the document starting with the titlepage \begin{document} %---------------------------------------------------------------------- % The title page \setcounter{page}{1} \pagenumbering{roman} \pagestyle{plain} \thispagestyle{empty} \vspace*{0.05\textheight} \flushright % The blank below here is necessary in order not to muck up the % linespacing in the title if it has more than 2 lines {\Huge \bfseries \Title }\ \\[-1.5ex] \noindent\textcolor{blaa}{\rule[-1ex]{\textwidth}{5pt}}\\[2.5ex] \large \Where \\ \Dates \\ \Homepage \\ \Version \\[1em] \normalsize Compiled \today,\ \currenttime\\ \normalsize \vfill \Faculty % End of titlepage % \newpage %---------------------------------------------------------------------- % Table of contents \tableofcontents %---------------------------------------------------------------------- % General text layout \raggedright \parindent 1em \parskip 0ex \cleardoublepage %---------------------------------------------------------------------- % General page style \pagenumbering{arabic} \setcounter{page}{1} \pagestyle{fancy} \renewcommand{\chaptermark}[1]{\markboth{\textsl{#1}}{}} \renewcommand{\sectionmark}[1]{\markright{\thesection\ \textsl{#1}}{}} \fancyhead[EL]{\bf \thepage \quad \rm \leftmark} \fancyhead[ER]{\sl \Tit} \fancyhead[OR]{\rm \rightmark \quad \bf \thepage} \fancyfoot{} %---------------------------------------------------------------------- % Here comes the substance \chapter{Using \texttt{simLexis}} \section{Introduction} This vignette explains the machinery behind simulation of life histories through multistate models implemented in \texttt{simLexis}. In \texttt{simLexis} transition rates are allowed to depend on multiple time scales, including timescales defined as time since entry to a particular state (duration). This therefore also covers the case where time \emph{at} entry into a state is an explanatory variable for the rates, since time at entry is merely time minus duration. Thus, the set-up here goes beyond Markov- and semi-Markov-models, and brings simulation based estimation of state-occupancy probabilities into the realm of realistic multistate models. The basic idea is to simulate a new \texttt{Lexis} object \cite{Plummer.2011,Carstensen.2011a} as defined in the \texttt{Epi} package for \R, based on 1) a multistate model defined by its states and the transition rates between them and 2) an initial population of individuals. Thus the output will be a \texttt{Lexis} object describing the transitions of a predefined set of persons through a multistate model. Therefore, if persons are defined to be identical at start, then calculation of the probability of being in a particular state at a given time boils down to a simple enumeration of the fraction of the persons in the particular state at the given time. Bar of course the (binomial) simulation error, but this can be brought down by simulation a sufficiently large number of persons. An observed \texttt{Lexis} object with follow-up of persons through a number of states will normally be the basis for estimation of transition rates between states, and thus will contain all information about covariates determining the occurrence rates, in particular the \emph{timescales} \cite{Iacobelli.2013}. Hence, the natural input to simulation from an estimated multistate model will typically be an object of the same structure as the originally observed. Since transitions and times are what is simulated, any values of \texttt{lex.Xst} and \texttt{lex.dur} in the input object will of course be ignored. This first chapter of this vignette shows by an example how to use the function \texttt{simLexis} and display the results. The subsequent chapter discusses in more detail how the simulation machinery is implemented and is not needed for the practical use of \texttt{simLexis}. \section{\texttt{simLexis} in practice} This section is largely a commented walk-trough of the example from the help-page of \texttt{simLexis}, with a larger number of simulated persons in order to minimize the pure simulation variation. When we want to simulate transition times through a multistate model where transition rates may depend on time since entry to the current or a previous state, it is essential that we have a machinery to keep track of the transition time on \emph{all} time scales, as well as a mechanism that can initiate a new time scale to 0 when a transition occurs to a state where we shall use time since entry as determinant of exit rates from that state. This is provided by \texttt{simLexis}. \subsection{Input for the simulation} Input for simulation of a single trajectory through a multistate model requires a representation of the \emph{current status} of a person; the starting conditions. The object that we supply to the simulation function must contain information about all covariates and all timescales upon which transitions depend, and in particular which one(s) of the timescales that are defined as time since entry into a particular state. Hence, starting conditions should be represented as a \texttt{Lexis} object (where \texttt{lex.dur} and \texttt{lex.Xst} are ignored, since there is no follow-up yet), where the time scale information is in the attributes \texttt{time.scale} and \texttt{time.since} respectively. Thus there are two main arguments to a function to simulate from a multistate model: \begin{enumerate} \item A \texttt{Lexis} object representing the initial states and covariates of the population to be simulated. This has to have the same structure as the original \texttt{Lexis} object representing the multistate model from which transition rates in the model were estimated. As noted above, the values for \texttt{lex.Xst} and \texttt{lex.dur} are not required (since these are the quantities that will be simulated). \item A transition object, representing the transition intensities between states, which should be a list of lists of intensity representations. As an intensity representation we mean a function that for given a \texttt{Lexis} object that can be used to produce estimates of the transition intensities at a set of supplied time points since the state represented in the \texttt{Lexis} object. The names of the elements of the transition object (which are lists) will be names of the \emph{transient} states, that is the states \emph{from} which a transition can occur. The names of the elements of each of these lists are the names of states \emph{to} which transitions can occur (which may be either transient or absorbing states). Hence, if the transition object is called \texttt{Tr} then \verb+TR$A$B+ (or \verb+Tr[["A"]][["B"]]+) will represent the transition intensity from state \texttt{A} to the state \texttt{B}. The entries in the transition object can be either \texttt{glm} objects, representing Poisson models for the transitions, \texttt{coxph} objects representing an intensity model along one time scale, or simply a function that takes a \texttt{Lexis} object as input returns an estimated intensity for each row. \end{enumerate} In addition to these two input items, there will be a couple of tuning parameters. The output of the function will simply be a \texttt{Lexis} object with simulated transitions between states. This will be the basis for deriving sensible statistics from the \texttt{Lexis} object --- see next section. \section{Setting up a \texttt{Lexis} object} As an example we will use the \texttt{DMlate} dataset from the \texttt{Epi} package; it is a dataset simulated to resemble a random sample of 10,000 patients from the Danish National Diabetes Register. We start by loading the \texttt{Epi} package: <>= options( width=90 ) library( Epi ) print( sessionInfo(), l=F ) @ % First we load the diabetes data and set up a simple illness-death model: <>= data(DMlate) dml <- Lexis( entry = list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit = list(Per=dox), exit.status = factor(!is.na(dodth),labels=c("DM","Dead")), data = DMlate ) @ % This is just data for a simple survival model with states ``DM'' and ``Dead''. Now we cut the follow-up at insulin start, which for the majority of patients (T2D) is a clinical indicator of deterioration of disease regulation. We therefore also introduce a new timescale, and split the non-precursor states, so that we can address the question of ever having been on insulin: <>= dmi <- cutLexis( dml, cut = dml$doins, pre = "DM", new.state = "Ins", new.scale = "t.Ins", split.states = TRUE ) summary( dmi ) str(dmi) @ % $ We can show how many person-years we have and show the number of transitions and transition rates (per 1000), using the \texttt{boxes.Lexis} function to display the states and the number of transitions between them: <>= boxes( dmi, boxpos = list(x=c(20,20,80,80), y=c(80,20,80,20)), scale.R = 1000, show.BE = TRUE ) @ % \insfig{boxes}{0.8}{Data overview for the \textrm{\tt dmi} dataset. Numbers in the boxes are person-years and the number of persons who begin, resp. end their follow-up in each state, and numbers on the arrows are no. of transitions and rates (transition intensities) per 1000 PY.} \section{Analysis of rates} In the \texttt{Lexis} object (which is just a data frame) each person is represented by one record for each transient state he occupies, thus in this case either 1 or 2 records; those who have a recorded time both without and with insulin have two records. In order to be able to fit Poisson models with occurrence rates varying by the different time-scales, we split the follow-up in 6-month intervals for modeling: <>= Si <- splitLexis( dmi, 0:30/2, "DMdur" ) dim( Si ) print( subset( Si, lex.id==97 )[,1:10], digits=6 ) @ % Note that when we split the follow-up each person's follow up now consists of many records, each with the \emph{current} values of the timescales at the start of the interval represented by the record. In the modelling we must necessarily assume that the rates are constant within each 6-month interval, but the \emph{size} of these rates we model as smooth functions of the time scales (that is the values at the beginning of each interval). The approach often used in epidemiology where one parameter is attached to each interval of time (or age) is not feasible when more than one time scale is used, because intervals are not classified the same way on all timescales. We shall use natural splines (restricted cubic splines) for the analysis of rates, and hence we must allocate knots for the splines. This is done for each of the time-scales, and separately for the transition out of states ``DM'' and ``Ins''. For age, we place the knots so that the number of events is the same between each pair of knots, but only half of this beyond each of the boundary knots, whereas for the timescales \texttt{DMdur} and \texttt{tIns} where we have observation from a well-defined 0, we put knots at 0 and place the remaining knots so that the number of events is the same between them and beyond the last: <>= nk <- 5 ( ai.kn <- with( subset(Si,lex.Xst=="Ins"), quantile( Age+lex.dur , probs=(1:nk-0.5)/nk ) ) ) ( ad.kn <- with( subset(Si,lex.Xst=="Dead"), quantile( Age+lex.dur , probs=(1:nk-0.5)/nk ) ) ) ( di.kn <- with( subset(Si,lex.Xst=="Ins"), c(0,quantile( DMdur+lex.dur, probs=(1:(nk-1))/nk ) )) ) ( dd.kn <- with( subset(Si,lex.Xst=="Dead"), c(0,quantile( DMdur+lex.dur, probs=(1:(nk-1))/nk ) )) ) ( ti.kn <- with( subset(Si,lex.Xst=="Dead(Ins)"), c(0,quantile( t.Ins+lex.dur, probs=(1:(nk-1))/nk ) )) ) @ % We then fit Poisson models to transition rates, using the wrapper \texttt{Ns} from the \texttt{Epi} package to simplify the specification of the rates: <>= library( splines ) DM.Ins <- glm( (lex.Xst=="Ins") ~ Ns( Age , knots=ai.kn ) + Ns( DMdur, knots=di.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="DM") ) DM.Dead <- glm( (lex.Xst=="Dead") ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="DM") ) Ins.Dead <- glm( (lex.Xst=="Dead(Ins)") ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + Ns( t.Ins, knots=ti.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="Ins") ) @ % Note the similarity of the code used to fit the three models, is is mainly redefining the response variable (``to'' state) and the subset of the data used (``from'' state). \section{The mortality rates} This section discusses in some detail how to extract ad display the mortality rates from the models fitted. But it is not necessary for understanding how to use \texttt{simLexis} in practice. \subsection{Proportionality of mortality rates} Note that we have fitted separate models for the three transitions, there is no assumption of proportionality between the mortality rates from \texttt{DM} and \texttt{Ins}. However, there is nothing that prevents us from testing this assumption; we can just fit a model for the mortality rates in the entire data frame \texttt{Si}, and compare the deviance from this with the sum of the deviances from the separate models: <>= with( Si, table(lex.Cst) ) All.Dead <- glm( (lex.Xst %in% c("Dead(Ins)","Dead")) ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + lex.Cst + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = Si ) round( ci.exp( All.Dead ), 3 ) @ From the parameter values we would in a simple setting just claim that start of insulin-treatment was associated with a slightly more than doubling of mortality. The model \texttt{All.dead} assumes that the age- and DM-duration effects on mortality in the ``DM'' and ``Ins'' states are the same, and moreover that there is no effect of insulin duration, but merely a mortality that is larger by a multiplicative constant not depending on insulin duration. The model \texttt{DM.Dead} has 8 parameters to describe the dependency on age and DM duration, the model \texttt{Ins.Dead} has 12 for the same plus the insulin duration (a natural spline with $k$ knots gives $k-1$ parameters, and we chose $k=5$ above). We can compare the fit of the proportional hazards model with the fit of the separate models for the two mortality rates, by adding up the deviances and d.f. from these: <>= what <- c("null.deviance","df.null","deviance","df.residual") ( rD <- unlist( DM.Dead[what] ) ) ( rI <- unlist( Ins.Dead[what] ) ) ( rA <- unlist( All.Dead[what] ) ) round( c( dd <- rA-(rI+rD), "pVal"=1-pchisq(dd[3],dd[4]+1) ), 3 ) @ % Thus we see there is a substantial non-proportionality of mortality rates from the two states; but a test provides no clue whatsoever to the particular \emph{shape} of the non-proportionality. To this end, we shall explore the predicted mortalities under the two models quantitatively in more detail. Note that the reason that there is a difference in the null deviances (and a difference of 1 in the null d.f.) is that the null deviance of \texttt{All.Dead} refer to a model with a single intercept, that is a model with constant and \emph{identical} mortality rates from the states ``DM'' and ``Ins'', whereas the null models for \texttt{DM.Dead} and \texttt{Ins.Dead} have constant but \emph{different} mortality rates from the states ``DM'' and ``Ins''. This is however irrelevant for the comparison of the \emph{residual} deviances. \subsection{How the mortality rates look} If we want to see how the mortality rates are modelled in \texttt{DM.Dead} and \texttt{Ins.Dead} in relation to \texttt{All.Dead}, we make a prediction of rates for say men diagnosed in different ages and going on insulin at different times after this. So we consider men diagnosed in ages 40, 50, 60 and 70, and who either never enter insulin treatment or do it 0, 2 or 5 years after diagnosis of DM. To this end we create a prediction data frame where we have observation times from diagnosis and 12 years on (longer would not make sense as this is the extent of the data). But we start by setting up an array to hold the predicted mortality rates, classified by diabetes duration, age at diabetes onset, time of insulin onset, and of course type of model. What we want to do is to plot the age-specific mortality rates for persons not on insulin, and for persons starting insulin at different times after DM. The mortality curves start at the age where the person gets diabetes and continues 12 years; for persons on insulin they start at the age when they initiate insulin. <>= pr.rates <- NArray( list( DMdur = seq(0,12,0.1), DMage = 4:7*10, r.Ins = c(NA,0,2,5), model = c("DM/Ins","All"), what = c("rate","lo","hi") ) ) str( pr.rates ) @ % For convenience the \texttt{Epi} package contains a function that computes predicted (log-)rates with c.i. --- it is merely a wrapper for \texttt{predict.glm}: <<>>= ci.pred @ So set up the prediction data frame and modify it in loops over ages at onset and insulin onset. Note that we set \texttt{lex.dur} to 1000 in the prediction frame, so that we obtain rates in units of events per 1000 PY. <>= nd <- data.frame( DMdur = as.numeric( dimnames(pr.rates)[[1]] ), lex.Cst = factor( 1, levels=1:4, labels=levels(Si$lex.Cst) ), sex = factor( 1, levels=1:2, labels=c("M","F")), lex.dur = 1000 ) for( ia in dimnames(pr.rates)[[2]] ) { dnew <- transform( nd, Age = as.numeric(ia)+DMdur, Per = 1998+DMdur ) pr.rates[,ia,1,"DM/Ins",] <- ci.pred( DM.Dead, newdata = dnew ) pr.rates[,ia,1,"All" ,] <- ci.pred( All.Dead, newdata = dnew ) for( ii in dimnames(pr.rates)[[3]][-1] ) { dnew = transform( dnew, lex.Cst = factor( 2, levels=1:4, labels=levels(Si$lex.Cst) ), t.Ins = ifelse( (DMdur-as.numeric(ii)) >= 0, DMdur-as.numeric(ii), NA ) ) pr.rates[,ia, ii ,"DM/Ins",] <- ci.pred( Ins.Dead, newdata = dnew ) pr.rates[,ia, ii ,"All" ,] <- ci.pred( All.Dead, newdata = dnew ) } } @ % $ So for each age at DM onset we make a plot of the mortality as function of current age both for those with no insulin treatment at those that start 1, 3 and 5 years after, thus 4 curves (with c.i.). These curves are replicated with a different color for the simplified model. <>= par( mar=c(3,3,1,1), mgp=c(3,1,0)/1.6, las=1 ) plot( NA, xlim=c(40,82), ylim=c(5,300), bty="n", log="y", xlab="Age", ylab="Mortality rate per 1000 PY" ) abline( v=seq(40,80,5), h=outer(1:9,10^(0:2),"*"), col=gray(0.8) ) for( aa in 4:7*10 ) for( ii in 1:4 ) matlines( aa+as.numeric(dimnames(pr.rates)[[1]]), cbind( pr.rates[,paste(aa),ii,"DM/Ins",], pr.rates[,paste(aa),ii,"All" ,] ), type="l", lty=1, lwd=c(3,1,1), col=rep(c("red","limegreen"),each=3) ) @ % \insfig{mort-int}{0.9}{Estimated mortality rates for male diabetes patients with no insulin (lower sets of curves) and insulin (upper curves), with DM onset in age 40, 50, 60 and 70. The red curves are from the models with separate age effects for persons with and without insulin, and a separate effect of insulin duration. The green curves are from the model with common age-effects and only a time-dependent insulin effect (the classical time-dependent variable approach).} From figure \ref{fig:mort-int} we see that there is a substantial insulin-duration effect which is not accommodated by the simple model with only one time-dependent variable to describe the insulin effect. Note that the simple model (green curves) for those on insulin does not depend in insulin duration, and hence the mortality curves for those on insulin are just parallel to the mortality curves for those not on insulin, regardless of diabetes duration (or age) at the time of insulin initiation. This is the proportional hazards assumption. Thus the effect of insulin initiation is under-estimated for short duration of insulin and over-estimated for long duration of insulin. This is the major discrepancy between the two models, and illustrates the importance of being able to accommodate different time scales, but there is also a declining overall insulin effect by age which is not accommodated by the proportional hazards approach. Finally, this plot illustrates an important feature in reporting models with multiple timescales; all timescales must be represented in the predicted rates, only reporting the effect of one timescale, conditional on a fixed value of other timescales is misleading since all timescales by definition advance at the same pace. For example, the age-effect for a fixed value of insulin duration is a misnomer since it does not correspond to any real person's follow-up. \section{Input to the \texttt{simLexis} function} In order to simulate from the multistate model with the estimated transition rates, and get the follow-up of a hypothetical cohort, we must supply \emph{both} the transition rates and the structure of the model \emph{as well as} the initial cohort status to \texttt{simLexis}. \subsection{The transition object} We first put the models into an object representing the transitions; note this is a list of lists, the latter having \texttt{glm} objects as elements: <>= Tr <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = DM.Dead ), "Ins" = list( "Dead(Ins)" = Ins.Dead ) ) @ % Now we have the description of the rates and of the structure of the model. The \texttt{Tr} object defines the states and models for all transitions between them; the object \verb|Tr$A$B| is the model for the transition intensity from state \texttt{A} to state \texttt{B}. \subsection{The initial cohort} We now define an initial \texttt{Lexis} object of persons with all relevant covariates defined. Note that we use \texttt{subset} to get a \texttt{Lexis} object, this conserves the \texttt{time.scale} and \texttt{time.since} attributes which is needed for the simulation (the usual ``\texttt{[}'' operator does not preserve these attributes when you select columns): <>= str( Si[NULL,1:9] ) ini <- subset(Si,FALSE,select=1:9) str( ini ) ini <- subset(Si,select=1:9)[NULL,] str( ini ) @ % We now have an empty \texttt{Lexis} object with attributes reflecting the timescales in multistate model we want to simulate, so we must now enter some data to represent the persons whose follow-up we want to simulate through the model; we set up an initial dataset with one man and one woman: <>= ini[1:2,"lex.id"] <- 1:2 ini[1:2,"lex.Cst"] <- "DM" ini[1:2,"Per"] <- 1995 ini[1:2,"Age"] <- 60 ini[1:2,"DMdur"] <- 5 ini[1:2,"sex"] <- c("M","F") ini @ % \section{Simulation of the follow-up} Now we simulate 5000 of each of these persons using the estimated model. The \texttt{t.range} argument gives the times range where the integrated intensities (cumulative rates) are evaluated and where linear interpolation is used when simulating transition times. Note that this must be given in the same units as \texttt{lex.dur} in the \texttt{Lexis} object used for fitting the models for the transitions. <>= Nsim <- 500 system.time( simL <- simLexis( Tr, ini, t.range = 12, N = Nsim ) ) @ % The result is a \texttt{Lexis} object --- a data frame representing the simulated follow-up of 10,000 persons (5000 identical men and 5000 identical women) according to the rates we estimated from the original dataset. <>= summary( simL, by="sex" ) @ % \subsection{Using other models for simulation} \subsubsection{Proportional hazards Poisson model} We fitted a proportional mortality model \texttt{All.Dead} (which fitted worse than the other two), this is a model for \emph{both} the transition from ``DM'' to ``Death'' \emph{and} from ``Ins'' to ``Dead(Ins)'', assuming that they are proportional. But it can easily be used in the simulation set-up, because the state is embedded in the model via the term \texttt{lex.Cst}, which is updated during the simulation. Simulation using this instead just requires that we supply a different transition object: <>= Tr.p <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = All.Dead ), "Ins" = list( "Dead(Ins)" = All.Dead ) ) system.time( simP <- simLexis( Tr.p, ini, t.range = 12, N = Nsim ) ) summary( simP, by="sex" ) @ % \subsubsection{Proportional hazards Cox model} A third possibility would be to replace the two-time scale proportional mortality model by a one-time-scale Cox-model, using diabetes duration as time scale, and age at diagnosis of DM as (fixed) covariate: <>= library( survival ) Cox.Dead <- coxph( Surv( DMdur, DMdur+lex.dur, lex.Xst %in% c("Dead(Ins)","Dead")) ~ Ns( Age-DMdur, knots=ad.kn ) + I(lex.Cst=="Ins") + I(Per-2000) + sex, data = Si ) round( ci.exp( Cox.Dead ), 3 ) round( ci.exp( All.Dead ), 3 ) @ % Note that in order for this model to be usable for simulation, it is necessary that we use the components of the \texttt{Lexis} object to specify the survival. Each record in the data frame \texttt{Si} represents follow up from \texttt{DMdur} to \texttt{DMdur+lex.dur}, so the model is a Cox model with diabetes duration as underlying timescale and age at diagnosis, \texttt{Age-DMdur}, as covariate. Also note that we used \texttt{I(lex.Cst=="Ins")} instead of just \texttt{lex.Cst}, because \texttt{coxph} assigns design matrix columns to all levels of \texttt{lex.Cst}, also those not present in data, which would give \texttt{NA}s among the parameter estimates and \texttt{NA}s as mortality outcomes. We see that the effect of insulin and the other covariates are pretty much the same as in the two-time-scale model. We can simulate from this model too; there is no restrictions on what type of model can be used for different transitions <>= Tr.c <- list( "DM" = list( "Ins" = Tr$DM$Ins, "Dead" = Cox.Dead ), "Ins" = list( "Dead(Ins)" = Cox.Dead ) ) system.time( simC <- simLexis( Tr.c, ini, t.range = 12, N = Nsim ) ) summary( simC, by="sex" ) @ \section{Reporting the simulation results} We can now tabulate the number of persons in each state at a predefined set of times on a given time scale. Note that in order for this to be sensible, the \texttt{from} argument would normally be equal to the starting time for the simulated individuals. <>= system.time( nSt <- nState( subset(simL,sex=="M"), at=seq(0,11,0.2), from=1995, time.scale="Per" ) ) nSt[1:10,] @ % We see that as time goes by, the 5000 men slowly move away from the starting state (\texttt{DM}). Based on this table (\texttt{nSt} is a table) we can now compute the fractions in each state, or, rather more relevant, the cumulative fraction across the states in some specified order, so that a plot of the stacked probabilities can be made, using either the default rather colorful layout, or a more minimalistic version (both in figure \ref{fig:pstate0}): <>= pM <- pState( nSt, perm=c(1,2,4,3) ) head( pM ) par( mfrow=c(1,2), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( pM ) plot( pM, border="black", col="transparent", lwd=3 ) text( rep(as.numeric(rownames(pM)[nrow(pM)-1]),ncol(pM)), pM[nrow(pM),]-diff(c(0,pM[nrow(pM),]))/5, colnames( pM ), adj=1 ) box( col="white", lwd=3 ) box() @ % \insfig{pstate0}{1.0}{Default layout of the \textrm{\tt plot.pState} graph (left), and a version with the state probabilites as lines and annotation of states.} A more useful set-up of the graph would include a more through annotation and sensible choice of colors, as seen in figure \ref{fig:pstatex}: <>= clr <- c("limegreen","orange") # expand with a lighter version of the two chosen colors clx <- c( clr, rgb( t( col2rgb( clr[2:1] )*2 + rep(255,3) ) / 3, max=255 ) ) par( mfrow=c(1,2), las=1, mar=c(3,3,4,2), mgp=c(3,1,0)/1.6 ) # Men plot( pM, col=clx ) lines( as.numeric(rownames(pM)), pM[,2], lwd=3 ) mtext( "60 year old male, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) # Women pF <- pState( nState( subset(simL,sex=="F"), at=seq(0,11,0.2), from=1995, time.scale="Per" ), perm=c(1,2,4,3) ) plot( pF, col=clx ) lines( as.numeric(rownames(pF)), pF[,2], lwd=3 ) mtext( "60 year old female, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) @ % \insfig{pstatex}{1.0}{\textrm{\tt plot.pState} graphs where persons ever on insulin are given in orange and persons never on insulin in green, and the overall survival (dead over the line) as a black line.} If we instead wanted to show the results on the age-scale, we would use age as timescale when constructing the probabilities; otherwise the code is pretty much the same as before (Figure \ref{fig:pstatey}): <>= par( mfrow=c(1,2), las=1, mar=c(3,3,4,2), mgp=c(3,1,0)/1.6 ) # Men pM <- pState( nState( subset(simL,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) plot( pM, col=clx, xlab="Age" ) lines( as.numeric(rownames(pM)), pM[,2], lwd=3 ) mtext( "60 year old male, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:19/20, labels=FALSE ) axis( side=4, at=1:19/20, labels=FALSE, tcl=-0.4 ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) # Women pF <- pState( nState( subset(simL,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) plot( pF, col=clx, xlab="Age" ) lines( as.numeric(rownames(pF)), pF[,2], lwd=3 ) mtext( "60 year old female, diagnosed 1990, aged 55", side=3, line=2.5, adj=0, col=gray(0.6) ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) axis( side=4, at=1:9/10, labels=FALSE ) axis( side=4, at=1:19/20, labels=FALSE, tcl=-0.4 ) axis( side=4, at=1:99/100, labels=FALSE, tcl=-0.3 ) @ % Note the several statements with \texttt{axis(side=4,...}; they are nesessary to get the fine tick-marks in the right hand side of the plots that you will need in order to read off the probabilities at 2006 (or 71 years). \insfig{pstatey}{1.0}{\textrm{\tt plot.pState} graphs where persons ever on insulin are given in orange and persons never on insulin in green, and the overall survival (dead over the line) as a black line.} \subsection{Comparing predictions from different models} We have actually fitted different models for the transitions, and we have simulated Lexis objects from all three approaches, so we can plot these predictions on top of each other: <>= PrM <- pState( nState( subset(simP,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) PrF <- pState( nState( subset(simP,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) CoxM <- pState( nState( subset(simC,sex=="M"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) CoxF <- pState( nState( subset(simC,sex=="F"), at=seq(0,11,0.2), from=60, time.scale="Age" ), perm=c(1,2,4,3) ) par( mfrow=c(1,2), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( pM, border="black", col="transparent", lwd=3 ) lines( PrM, border="blue" , col="transparent", lwd=3 ) lines( CoxM, border="red" , col="transparent", lwd=3 ) text( 60.5, 0.05, "M" ) box( lwd=3 ) plot( pF, border="black", col="transparent", lwd=3 ) lines( PrF, border="blue" , col="transparent", lwd=3 ) lines( CoxF, border="red" , col="transparent", lwd=3 ) text( 60.5, 0.05, "F" ) box( lwd=3 ) @ % \insfig{comp-0}{1.0}{Comparison of the simulated state occupancy probabilities using separate Poisson models for the mortality rates with and without insulin (black) and using proportional hazards Poisson models (blue) and Cox-models with diabetes duration as timescale and age at diabetes diagnosis as covariate (red).} From figure \ref{fig:comp-0} it is clear that the two proportional hazards models (blue and red curves) produce pretty much the same estimates of the state occupancy probabilites over time, but also that they relative to the model with separately estimated transition intensities overestimates the probability of being alive without insulin and underestimates the probabilities of being dead without insulin. However both the overall survival, and the fraction of persons on insulin are quite well in agreement with the more elaborate model. Thus the proportional hazards models overestimate the relative mortality of the insulin treated diabetes patients relative to the non-insulin treated. Interestingly, we also see a bump in th estimated probabilities from the Cox-model based model, but this is entirely an artifact that comes from the estimation method for the baseline hazard of the Cox-model that lets the (cumulative) hazard have large jumps at event times where the risk set is small. So also here it shows up that an assumption of continuous underlying hazards leads to more credible estimates. \chapter{Simulation of transitions in multistate models} \section{Theory} Suppose that the rate functions for the transitions out of the current state to, say, 3 different states are $\lambda_1$, $\lambda_2$ and $\lambda_3$, and the corresponding cumulative rates are $\Lambda_1$, $\Lambda_2$ and $\Lambda_3$, and we want to simulate an exit time and an exit state (that is either 1, 2 or 3). This can be done in two slightly different ways: \begin{enumerate} \item First time, then state: \begin{enumerate} \item Compute the survival function, $S(t) = \exp\bigl(-\Lambda_1(t)-\Lambda_2(t)-\Lambda_3(t)\bigr)$ \item Simulate a random U(0,1) variate, $u$, say. \item The simulated exit time is then the solution $t_u$ to the equation $S(t_u) = u \quad \Leftrightarrow \quad \sum_j\Lambda_j(t_u) = -\log(u)$. \item A simulated transition at $t_u$ is then found by simulating a random draw from the multinomial distribution with probabilities $p_i=\lambda_i(t_u) / \sum_j\lambda_j(t_u)$. \end{enumerate} \item Separate cumulative incidences: \begin{enumerate} \item Simulate 3 independent U(0,1) random variates $u_1$, $u_2$ and $u_3$. \item Solve the equations $\Lambda_i(t_i)=-\log(u_i), i=1,2,3$ and get $(t_1,t_2,t_3)$. \item The simulated survival time is then $\min(t_1,t_2,t_3)$, and the simulated transition is to the state corresponding to this, that is $k \in \{1,2,3\}$, where $t_k=\min(t_1,t_2,t_3)$ \end{enumerate} \end{enumerate} The intuitive argument is that with three possible transition there are 3 independent processes running, but only the first transition is observed. The latter approach is used in the implementation in \texttt{simLexis}. The formal argument for the equality of the two approaches goes as follows: \begin{enumerate} \item Equality of the transition times: \begin{enumerate} \item In the first approach we simulate from a distribution with cumulative rate $\Lambda_1(t)+\Lambda_2(t)+\Lambda_3(t)$, hence from a distribution with survival function: \begin{align*} S(t) & = \exp\bigl(-(\Lambda_1(t)+\Lambda_2(t)+\Lambda_3(t))\bigr) \\ & = \exp\bigl(-\Lambda_1(t)\bigr)\times \exp\bigl(-\Lambda_2(t)\bigr)\times \exp\bigl(-\Lambda_3(t)\bigr) \end{align*} \item In the second approach we choose the smallest of three independent survival times, with survival functions $\exp(-\Lambda_i), i=1,2,3$. Now, the survival function for the minimum of three independent survival times is: \begin{align*} S_\text{min}(t) & = \pmat{\min(t_1,t_2,t_3)>t} \\ & = \pmat{t_1>t} \times \pmat{t_2>t} \times \pmat{t_3>t} \\ & = \exp\bigl(-\Lambda_1(t)\bigr)\times \exp\bigl(-\Lambda_2(t)\bigr)\times \exp\bigl(-\Lambda_3(t)\bigr) \end{align*} which is the same survival function as derived above. \end{enumerate} \item Type of transition: \begin{enumerate} \item In the first instance the probability of a transition to state $i$, conditional on the transition time being $t$, is as known from standard probability theory: $\lambda_i(t)/\bigl(\lambda_1(t)+\lambda_2(t)+\lambda_3(t)\bigr)$. \item In the second approach we choose the transition corresponding to the the smallest of the transition times. So when we condition on the event that a transition takes place at time $t$, we have to show that the conditional probability that the smallest of the three simulated transition times was actually the $i$th, is as above. But conditional on \emph{survival} till $t$, the probabilities that events of type $1,2,3$ takes place in the interval $(t,t+\dif t)$ are $\lambda_1(t)\dif t$, $\lambda_2(t)\dif t$ and $\lambda_1(t)\dif t$, respectively (assuming that the probability of more than one event in the interval of length $\dif t$ is 0). Hence the conditional probabilities \emph{given a transition time} in $(t,t+\dif t)$ is: \[ \frac{\lambda_i(t)\dif t}{\lambda_1(t)\dif t+\lambda_2(t)\dif t+\lambda_3(t)\dif t}= \frac{\lambda_i(t)}{\lambda_1(t)+\lambda_2(t)+\lambda_3(t)} \] --- exactly as above. \end{enumerate} \end{enumerate} \section{Components of \texttt{simLexis}} This section explains the actually existing code for \texttt{simLexis}, as it is in the current version of \texttt{Epi}. <>= options( keep.source=TRUE ) @ % The function \texttt{simLexis} takes a \texttt{Lexis} object as input. This defines the initial state(s) and times of the start for a number of persons. Since the purpose is to simulate a history through the estimated multistate model, the input values of the outcome variables \texttt{lex.Xst} and \texttt{lex.dur} are ignored --- the aim is to simulate values for them. Note however that the attribute \texttt{time.since} must be present in the object. This is used for initializing timescales defined as time since entry into a particular state, it is a character vector of the same length as the \texttt{time.scales} attribute, with value equal to a state name if the corresponding time scale is defined as time since entry into that state. In this example the 4th timescale is time since entry into the ``Ins'' state, and hence: <<>>= cbind( attr( ini, "time.scale" ), attr( ini, "time.since" ) ) @ % \texttt{Lexis} objects will have this attribute set for time scales created using \texttt{cutLexis}. The other necessary argument is a transition object \texttt{Tr}, which is a list of lists. The elements of the lists should be \texttt{glm} objects derived by fitting Poisson models to a \texttt{Lexis} object representing follow-up data in a multistate model. It is assumed (but not checked) that timescales enter in the model via the timescales of the \texttt{Lexis} object. Formally, there are no assumptions about how \texttt{lex.dur} enters in the model. Optional arguments are \texttt{t.range}, \texttt{n.int} or \texttt{time.pts}, specifying the times after entry at which the cumulative rates will be computed (the maximum of which will be taken as the censoring time), and \texttt{N} a scalar or numerical vector of the number of persons with a given initial state each record of the \texttt{init} object should represent. The central part of the functions uses a \texttt{do.call} / \texttt{lapply} / \texttt{split} construction to do simulations for different initial states. This is the construction in the middle that calls \texttt{simX}. \texttt{simLexis} also calls \texttt{get.next} which is further detailed below. <<>>= simLexis @ % \subsection{\texttt{simX}} \texttt{simX} is called by \texttt{simLexis} and simulates transition-times and -types for a set of patients assumed to be in the same state. It is called from \texttt{simLexis} with a data frame as argument, uses the state in \texttt{lex.Cst} to select the relevant component of \texttt{Tr} and compute predicted cumulative intensities for all states reachable from this state. Note that it is here the switch between \texttt{glm}, \texttt{coxph} and objects of class \texttt{function} is made. The dataset on which this prediction is done has \texttt{length(time.pts)} rows per person. <<>>= Epi:::simX @ % As we see, \texttt{simX} calls \texttt{sim1} which simulates the transition for one person. \subsection{\texttt{sim1}} The predicted cumulative intensities are fed, person by person, to \texttt{sim1} --- again via a \texttt{do.call} / \texttt{lapply} / \texttt{split} construction --- and the resulting time and state is appended to the \texttt{nd} data frame. This way we have simulated \emph{one} transition (time and state) for each person: <<>>= Epi:::sim1 @ % The \texttt{sim1} function uses \texttt{lint} to do linear interpolation. \subsection{\texttt{lint}} We do not use \texttt{approx} to do the linear interpolation, because this function does not do the right thing if the cumulative incidences (\texttt{ci}) are constant across a number of times. Therefore we have a custom made linear interpolator that does the interpolation exploiting the fact the the \texttt{ci} is non-decreasing and \texttt{tt} is strictly monotonously increasing: <<>>= Epi:::lint @ \subsection{\texttt{get.next}} We must repeat the simulation operation on those that have a simulated entry to a transient state, and also make sure that any time scales defined as time since entry to one of these states be initialized to 0 before a call to \texttt{simX} is made for these persons. This accomplished by the function \texttt{get.next}: <<>>= Epi:::get.next @ \subsection{\texttt{chop.lex}} The operation so far has censored individuals \texttt{max(time.pts)} after \emph{each} new entry to a transient state. In order to groom the output data we use \texttt{chop.lex} to censor all persons at the same designated time after \emph{initial} entry. <<>>= Epi:::chop.lex @ \section{Probabilities from simulated \texttt{Lexis} objects} Once we have simulated a Lexis object we will of course want to use it for estimating probabilities, so basically we will want to enumerate the number of persons in each state at a pre-specified set of time points. \subsection{\texttt{nState}} Since we are dealing with multistate model with potentially multiple time scales, it is necessary to define the timescale (\texttt{time.scale}), the starting point on this timescale (\texttt{from}) and the points after this where we compute the number of occupants in each state, (\texttt{at}). <<>>= nState @ % \subsection{\texttt{pState}, \texttt{plot.pState} and \texttt{lines.pState}} In order to plot probabilities of state-occupancy it is useful to compute cumulative probabilities across states in any given order; this is done by the function \texttt{pState}, which returns a matrix of class \texttt{pState}: <<>>= pState @ % There is also a \texttt{plot} and \texttt{lines} method for the resulting \texttt{pState} objects: <<>>= plot.pState lines.pState @ % \bibliographystyle{plain} \begin{thebibliography}{1} \bibitem{Carstensen.2011a} B.~Carstensen and M.~Plummer. \newblock Using {L}exis objects for multi-state models in {R}. \newblock {\em Journal of Statistical Software}, 38(6):1--18, 1 2011. \bibitem{Iacobelli.2013} S.~Iacobelli and B.~Carstensen. \newblock {{M}ultiple time scales in multi-state models}. \newblock {\em Stat Med}, 32(30):5315--5327, Dec 2013. \bibitem{Plummer.2011} M.~Plummer and B.~Carstensen. \newblock Lexis: An {R} class for epidemiological studies with long-term follow-up. \newblock {\em Journal of Statistical Software}, 38(5):1--12, 1 2011. \end{thebibliography} \addcontentsline{toc}{chapter}{References} \end{document} Epi/vignettes/Follow-up.rnw0000644000175100001440000003624112531361102015431 0ustar hornikusers\SweaveOpts{results=verbatim,keep.source=TRUE,include=FALSE} %\VignetteIndexEntry{Follow-up data with the Epi package} \documentclass[a4paper,twoside,12pt]{article} \usepackage[english]{babel} \usepackage{booktabs,rotating,graphicx,amsmath,verbatim,fancyhdr,Sweave} \usepackage[colorlinks,linkcolor=red,urlcolor=blue]{hyperref} \newcommand{\R}{\textsf{\bf R}} \renewcommand{\topfraction}{0.95} \renewcommand{\bottomfraction}{0.95} \renewcommand{\textfraction}{0.1} \renewcommand{\floatpagefraction}{0.9} \DeclareGraphicsExtensions{.pdf,.jpg} \setcounter{secnumdepth}{1} \setcounter{tocdepth}{1} \oddsidemargin 1mm \evensidemargin 1mm \textwidth 160mm \textheight 230mm \topmargin -5mm \headheight 8mm \headsep 5mm \footskip 15mm \begin{document} \raggedleft \pagestyle{empty} \vspace*{0.1\textheight} \Huge {\bf Follow-up data with the\\ \texttt{Epi} package} \noindent\rule[-1ex]{\textwidth}{5pt}\\[2.5ex] \Large Summer 2014 \vfill \normalsize \begin{tabular}{rl} Michael Hills & Retired \\ & Highgate, London \\[1em] Martyn Plummer & International Agency for Research on Cancer, Lyon\\ & \texttt{plummer@iarc.fr} \\[1em] Bendix Carstensen & Steno Diabetes Center, Gentofte, Denmark\\ & \small \& Department of Biostatistics, University of Copenhagen\\ & \normalsize \texttt{bxc@steno.dk} \\ & \url{www.pubhealth.ku.dk/~bxc} \end{tabular} \normalsize \newpage \raggedright \parindent 3ex \parskip 0ex \tableofcontents \cleardoublepage \setcounter{page}{1} \pagestyle{fancy} \renewcommand{\sectionmark}[1]{\markboth{\thesection #1}{\thesection \ #1}} \fancyhead[OL]{\sl Follow-up data with the \texttt{Epi} package.} \fancyhead[ER]{\sl \rightmark} \fancyhead[EL,OR]{\bf \thepage} \fancyfoot{} \renewcommand{\headrulewidth}{0.1pt} <<>>= library(Epi) print( sessionInfo(), l=F ) @ \section{Follow-up data in the \texttt{Epi} package} In the \texttt{Epi}-package, follow-up data is represented by adding some extra variables to a dataframe. Such a dataframe is called a \texttt{Lexis} object. The tools for handling follow-up data then use the structure of this for special plots, tabulations etc. Follow-up data basically consists of a time of entry, a time of exit and an indication of the status at exit (normally either ``alive'' or ``dead''). Implicitly is also assumed a status \emph{during} the follow-up (usually ``alive''). \begin{figure}[htbp] \centering \setlength{\unitlength}{1pt} \begin{picture}(210,70)(0,75) %\scriptsize \thicklines \put( 0,80){\makebox(0,0)[r]{Age-scale}} \put( 50,80){\line(1,0){150}} \put( 50,80){\line(0,1){5}} \put(100,80){\line(0,1){5}} \put(150,80){\line(0,1){5}} \put(200,80){\line(0,1){5}} \put( 50,77){\makebox(0,0)[t]{35}} \put(100,77){\makebox(0,0)[t]{40}} \put(150,77){\makebox(0,0)[t]{45}} \put(200,77){\makebox(0,0)[t]{50}} \put( 0,115){\makebox(0,0)[r]{Follow-up}} \put( 80,105){\makebox(0,0)[r]{\small Two}} \put( 90,105){\line(1,0){87}} \put( 90,100){\line(0,1){10}} \put(100,100){\line(0,1){10}} \put(150,100){\line(0,1){10}} \put(180,105){\circle{6}} \put( 95,110){\makebox(0,0)[b]{1}} \put(125,110){\makebox(0,0)[b]{5}} \put(165,110){\makebox(0,0)[b]{3}} \put( 50,130){\makebox(0,0)[r]{\small One}} \put( 60,130){\line(1,0){70}} \put( 60,125){\line(0,1){10}} \put(100,125){\line(0,1){10}} \put(130,130){\circle*{6}} \put( 80,135){\makebox(0,0)[b]{4}} \put(115,135){\makebox(0,0)[b]{3}} \end{picture} \caption{\it Follow-up of two persons} \label{fig:fu2} \end{figure} \section{Timescales} A timescale is a variable that varies deterministically \emph{within} each person during follow-up, \textit{e.g.}: \begin{itemize} \item Age \item Calendar time \item Time since treatment \item Time since relapse \end{itemize} All timescales advance at the same pace, so the time followed is the same on all timescales. Therefore, it suffices to use only the entry point on each of the time scale, for example: \begin{itemize} \item Age at entry. \item Date of entry. \item Time since treatment (\emph{at} treatment this is 0). \item Time since relapse (\emph{at} relapse this is 0).. \end{itemize} In the \texttt{Epi} package, follow-up in a cohort is represented in a \texttt{Lexis} object. A \texttt{Lexis} object is a dataframe with a bit of extra structure representing the follow-up. For the \texttt{nickel} data we would construct a \texttt{Lexis} object by: <<>>= data( nickel ) nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd %in% c(162,163) )*1, data = nickel ) @ The \texttt{entry} argument is a \emph{named} list with the entry points on each of the timescales we want to use. It defines the names of the timescales and the entry points. The \texttt{exit} argument gives the exit time on \emph{one} of the timescales, so the name of the element in this list must match one of the neames of the \texttt{entry} list. This is sufficient, because the follow-up time on all time scales is the same, in this case \texttt{ageout - agein}. Now take a look at the result: <<>>= str( nickel ) str( nicL ) head( nicL ) @ The \texttt{Lexis} object \texttt{nicL} has a variable for each timescale which is the entry point on this timescale. The follow-up time is in the variable \texttt{lex.dur} (\textbf{dur}ation). There is a \texttt{summary} function for \texttt{Lexis} objects that list the numer of transitions and records as well as the total follow-up time: <<>>= summary( nicL ) @ We defined the exit status to be death from lung cancer (ICD7 162,163), i.e. this variable is 1 if follow-up ended with a death from this cause. If follow-up ended alive or by death from another cause, the exit status is coded 0, i.e. as a censoring. Note that the exit status is in the variable \texttt{lex.Xst} (e\textbf{X}it \textbf{st}atus. The variable \texttt{lex.Cst} is the state where the follow-up takes place (\textbf{C}urrent \textbf{st}atus), in this case 0 (alive). It is possible to get a visualization of the follow-up along the timescales chosen by using the \texttt{plot} method for \texttt{Lexis} objects. \texttt{nicL} is an object of \emph{class} \texttt{Lexis}, so using the function \texttt{plot()} on it means that \R\ will look for the function \texttt{plot.Lexis} and use this function. <>= plot( nicL ) @ The function allows a lot of control over the output, and a \texttt{points.Lexis} function allows plotting of the endpoints of follow-up: <>= par( mar=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) plot( nicL, 1:2, lwd=1, col=c("blue","red")[(nicL$exp>0)+1], grid=TRUE, lty.grid=1, col.grid=gray(0.7), xlim=1900+c(0,90), xaxs="i", ylim= 10+c(0,90), yaxs="i", las=1 ) points( nicL, 1:2, pch=c(NA,3)[nicL$lex.Xst+1], col="lightgray", lwd=3, cex=1.5 ) points( nicL, 1:2, pch=c(NA,3)[nicL$lex.Xst+1], col=c("blue","red")[(nicL$exp>0)+1], lwd=1, cex=1.5 ) @ The results of these two plotting commands are in figure \ref{fig:Lexis-diagram}. \begin{figure}[tb] \centering \label{fig:Lexis-diagram} \includegraphics[width=0.39\textwidth]{Follow-up-nicL1} \includegraphics[width=0.59\textwidth]{Follow-up-nicL2} \caption{\it Lexis diagram of the \texttt{nickel} dataset, left panel the default version, the right one with bells and whistles. The red lines are for persons with exposure$>0$, so it is pretty evident that the oldest ones are the exposed part of the cohort.} \end{figure} \section{Splitting the follow-up time along a timescale} The follow-up time in a cohort can be subdivided by for example current age. This is achieved by the \texttt{splitLexis} (note that it is \emph{not} called \texttt{split.Lexis}). This requires that the timescale and the breakpoints on this timescale are supplied. Try: <<>>= nicS1 <- splitLexis( nicL, "age", breaks=seq(0,100,10) ) summary( nicL ) summary( nicS1 ) @ So we see that the number of events and the amount of follow-up is the same in the two datasets; only the number of records differ. To see how records are split for each individual, it is useful to list the results for a few individuals: <<>>= round( subset( nicS1, id %in% 8:10 ), 2 ) @ The resulting object, \texttt{nicS1}, is again a \texttt{Lexis} object, and so follow-up may be split further along another timescale. Try this and list the results for individuals 8, 9 and 10 again: <<>>= nicS2 <- splitLexis( nicS1, "tfh", breaks=c(0,1,5,10,20,30,100) ) round( subset( nicS2, id %in% 8:10 ), 2 ) @ If we want to model the effect of these timescales we will for each interval use either the value of the left endpoint in each interval or the middle. There is a function \texttt{timeBand} which returns these. Try: <<>>= timeBand( nicS2, "age", "middle" )[1:20] # For nice printing and column labelling use the data.frame() function: data.frame( nicS2[,c("id","lex.id","per","age","tfh","lex.dur")], mid.age=timeBand( nicS2, "age", "middle" ), mid.tfh=timeBand( nicS2, "tfh", "middle" ) )[1:20,] @ Note that these are the midpoints of the intervals defined by \texttt{breaks=}, \emph{not} the midpoints of the actual follow-up intervals. This is because the variable to be used in modelling must be independent of the consoring and mortality pattern --- it should only depend on the chosen grouping of the timescale. \section{Splitting time at a specific date} If we have a recording of the date of a specific event as for example recovery or relapse, we may classify follow-up time as being before of after this intermediate event. This is achieved with the function \texttt{cutLexis}, which takes three arguments: the time point, the timescale, and the value of the (new) state following the date. Now we define the age for the nickel vorkers where the cumulative exposure exceeds 50 exposure years: <<>>= subset( nicL, id %in% 8:10 ) agehi <- nicL$age1st + 50 / nicL$exposure nicC <- cutLexis( data=nicL, cut=agehi, timescale="age", new.state=2, precursor.states=0 ) subset( nicC, id %in% 8:10 ) @ (The \texttt{precursor.states=} argument is explained below). Note that individual 6 has had his follow-up split at age 25 where 50 exposure-years were attained. This could also have been achieved in the split dataset \texttt{nicS2} instead of \texttt{nicL}, try: <<>>= subset( nicS2, id %in% 8:10 ) agehi <- nicS2$age1st + 50 / nicS2$exposure nicS2C <- cutLexis( data=nicS2, cut=agehi, timescale="age", new.state=2, precursor.states=0 ) subset( nicS2C, id %in% 8:10 ) @ Note that follow-up subsequent to the event is classified as being in state 2, but that the final transition to state 1 (death from lung cancer) is preserved. This is the point of the \texttt{precursor.states=} argument. It names the states (in this case 0, ``Alive'') that will be over-witten by \texttt{new.state} (in this case state 2, ``High exposure''). Clearly, state 1 (``Dead'') should not be updated even if it is after the time where the persons moves to state 2. In other words, only state 0 is a precursor to state 2, state 1 is always subsequent to state 2. Note if the intermediate event is to be used as a time-dependent variable in a Cox-model, then \texttt{lex.Cst} should be used as the time-dependent variable, and \texttt{lex.Xst==1} as the event. \section{Competing risks --- multiple types of events} If we want to consider death from lung cancer and death from other causes as separate events we can code these as for example 1 and 2. <<>>= data( nickel ) nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd > 0 ) + ( icd %in% c(162,163) ), data = nickel ) summary( nicL ) subset( nicL, id %in% 8:10 ) @ If we want to label the states, we can enter the names of these in the \texttt{states} parameter, try for example: <<>>= nicL <- Lexis( entry = list( per=agein+dob, age=agein, tfh=agein-age1st ), exit = list( age=ageout ), exit.status = ( icd > 0 ) + ( icd %in% c(162,163) ), data = nickel, states = c("Alive","D.oth","D.lung") ) summary( nicL ) @ Note that the \texttt{Lexis} function automatically assumes that all persons enter in the first level (given in the \texttt{states=} argument) When we cut at a date as in this case, the date where cumulative exposure exceeds 50 exposure-years, we get the follow-up \emph{after} the date classified as being in the new state if the exit (\texttt{lex.Xst}) was to a state we defined as one of the \texttt{precursor.states}: <<>>= nicL$agehi <- nicL$age1st + 50 / nicL$exposure nicC <- cutLexis( data = nicL, cut = nicL$agehi, timescale = "age", new.state = "HiExp", precursor.states = "Alive" ) subset( nicC, id %in% 8:10 ) summary( nicC, scale=1000 ) @ Note that the persons-years is the same, but that the number of events has changed. This is because events are now defined as any transition from alive, including the transitions to \texttt{HiExp}. Also note that (so far) it is necessary to specify the variable with the cutpoints in full, using only \texttt{cut=agehi} would give an error. \subsection{Subdivision of existing states} It may be of interest to subdivide the states following the intermediate event according to wheter the event has occurred or not. That is done by the argument \texttt{split.states=TRUE}. Moreover, it will also often be of interest to introduce a new timescale indicating the time since intermediate event. This can be done by the argument \texttt{new.scale=TRUE}, alternatively \texttt{new.scale="tfevent"}, as illustrated here: <<>>= nicC <- cutLexis( data = nicL, cut = nicL$agehi, timescale = "age", new.state = "Hi", split.states=TRUE, new.scale=TRUE, precursor.states = "Alive" ) subset( nicC, id %in% 8:10 ) summary( nicC, scale=1000 ) @ \section{Multiple events of the same type (recurrent events)} Sometimes more events of the same type are recorded for each person and one would then like to count these and put follow-up time in states accordingly. Essentially, each set of cutpoints represents progressions from one state to the next. Therefore the states should be numbered, and the numbering of states subsequently occupied be increased accordingly. This is a behaviour different from the one outlined above, and it is achieved by the argument \texttt{count=TRUE} to \texttt{cutLexis}. When \texttt{count} is set to \texttt{TRUE}, the value of the arguments \texttt{new.state} and \texttt{precursor.states} are ignored. Actually, when using the argument \texttt{count=TRUE}, the function \texttt{countLexis} is called, so an alternative is to use this directly. \end{document} Epi/MD50000644000175100001440000002203612576452270011332 0ustar hornikusers517f6211f22acaf9b2a2d8548d9387b2 *CHANGES 45fffc3ca16b80dbe0a76c305d7e2c5e *DESCRIPTION ff88a8b07bbeb1389faef9bde0e743e1 *NAMESPACE fac3c7f01ab0bd6930cf3cbea20e6bcc *R/Aplot.R 75d172080863bd6e3b2286a0c94b0d34 *R/Cplot.R 6a1c4f4cbbf509d1f3c40b9f0adb6399 *R/Icens.R d802fc697f55ab0ef5ccd45e51776e46 *R/Lexis.diagram.R c6b992622881e60fb82ee4b8c3357c9d *R/Lexis.lines.R 05c38381cc48ab25b681e8615ac31ea8 *R/Life.lines.R a25e4901b0899a6b00285713117e3f21 *R/N2Y.r 8743609003b32036a7a1d02fb4b8e17b *R/NArray.R 1d3f55ffad7833ae4615bdde4c7308c2 *R/Ns.r e9f582b5dc17d07bf2df96de74441963 *R/Pplot.R b1c0f04443499205645ad578a3dd8573 *R/ROC.R 0a7bbd37e75920b54fd0fbe00a86511d *R/Relevel.R 0e3e3d23b8ab79dcf3046828190462b2 *R/Termplot.R 28a0ec0c8584e22759b516ff69e5bd78 *R/Wald.R 563f0b2d90a3776765207cc61a31e134 *R/apc.fit.R 3c53b3d667196c204fab811d2231ccd5 *R/apc.frame.R 40d04e6ce1304d51df6911621fe28b52 *R/apc.plot.R 8ce5a4c989947cb9d93becdecfde642c *R/as.Date.cal.yr.R c231a1067a4cc2fc9af0dc4b0d2c6792 *R/boxes.MS.R 11d3966379eacdc164f2d50c4da8bb70 *R/cal.yr.R 6988e76eb64f004a8c5029c23f8603af *R/ccwc.R d5171eb23f0b431a7cc89b69d03308a6 *R/ci.cum.R 1e69aa59a2367037c3a054bfa1a2759e *R/ci.lin.R 6f80c7b2b2120068cd16c043fbc29db3 *R/ci.mat.R 886f87cbd08266fa281e2ed7b3b3c253 *R/ci.pd.R acab8b478be5a44a36561e65d70f2b78 *R/clear.R 89f2fe2a79bba0565efc02fd4aaeca9a *R/clogistic.R d365bc4739ebb104b0318c1c9ee226fd *R/contr.2nd.R bcd4142d3bf3e4517397387fe43fdf95 *R/contr.cum.R 8064804ee2b1cfa0cea2b44a58106b0a *R/contr.diff.R 8ffc3eabb90b6b9b710109015779d853 *R/contr.orth.R 84ac435b69e71e6b8844d267570c6d28 *R/crr.Lexis.r 281380e913564ab522664f2255b2e8a8 *R/cutLexis.R 14270f90ed00f4f043286d50e2de9f26 *R/detrend.R a86250cce524f9fa2215c0c0cac4c6e7 *R/effx.match.r 9b46438b1c6fdc926ac1a253a85096aa *R/effx.r 822e02862de39625e5ed9ef6f84bdf39 *R/expand.data.r 4d820fe91c42ef5fe52ad7527b94031e *R/factorize.R 67ce5a28408f42c7b65084195897b995 *R/fit.add.r 44eec3e5b106ee3f518beed49b4e0f9b *R/fit.baseline.R 8ffaebb81a92649b137ff8a4911841da *R/fit.mult.r 7c7059bf47c6421d6412a4bc53fc5950 *R/float.R 13802c8e189c421e30299f7ac4874c66 *R/foreign.R da7b5d41fe7876ef6bab01839b613939 *R/ftrend.R f0f84fc26294b1cb3016a9e23974c545 *R/gen.exp.R 17ecf26621bdf10b41fd2acc0b62d9b4 *R/lexis.R 9c575049aa6c3841e7e92f563a6fc450 *R/lls.R 79d6e0b02a2c4e98fbbfcd936b21d377 *R/mh.R 9e48e47769874a34f63a2e2d4e6ffffc *R/ncut.r 2a44a66ac4fe7eccab191f94957265e2 *R/pctab.R bb1ce8ea65f95b7e1720c2686e4de799 *R/plotEst.R 57eecdd415b7d0f7dfad39825644add5 *R/plotevent.r c0229c2819d977a8c557a22dea1dd5fa *R/print.Icens.r cca51283f637927702fbe217367011eb *R/print.floated.R 961858aa39320463dffa6154c70c87f6 *R/projection.ip.r 0c2a2e493c190c4e74587b5127e9bef6 *R/rateplot.R 81f0477e83c6261b74bf8e6f1d1ec296 *R/simLexis.R 358b6fa60093d8bbee969a76a88797c0 *R/splitLexis.R e08261ab194f4aca8502ee249afd309e *R/stack.Lexis.R fb143d532001643d3f74fbd2e114e976 *R/stattable.R 889282ea37a5a9d9bf7155d790cd9036 *R/summary.Icens.r ce8c23fd028541b00472f792246e39de *R/summary.Lexis.r 88983ba8314a37910993d469a982d800 *R/twoby2.R 497daef89f1ea705cd2c755132bec69d *R/zzz.R c947b8fc9fdeac01d3e4bcb3d04e3dc8 *build/vignette.rds b9d3112271b9545896c98ec6406f5f02 *data/B.dk.rda 666e336a1aefb9c4298abb83a81a3300 *data/DMconv.rda e200a06eee9305b2fa2c59af5982d62b *data/DMlate.rda e8f6f529b77cb3a860b9d53f5f65c3bb *data/DMrand.rda ba4f4ad111ab2f488d1373c1cfcb7398 *data/M.dk.rda 7dda71830cede85dbfcbc4629ca31892 *data/N.dk.rda 7a458e4dee088bf6808e1e553532e590 *data/S.typh.rda 5fa4742e7db7dadb4b4be081ff296a24 *data/Y.dk.rda 5420c7c0ac8a7abd672203ae3f77b8fc *data/bdendo.rda 20661de22cca3c2724775faec39fe825 *data/bdendo11.rda ccc912355c96834cacc675ff5e8c0e55 *data/births.rda 2c17f06d2737d1dc3d2aaf1821013c9f *data/blcaIT.rda c902acbb18655da273e13654014be570 *data/brv.rda 27a20f2f644259b9d295a0486071f6c9 *data/diet.rda f9b5f0bcba4b20da2393194711e43d1b *data/ewrates.rda 8f51a96ef03eb3d5f8c723e58e3a8f29 *data/gmortDK.rda 2f3b8fc48d21966281153d98079cec92 *data/hivDK.rda 480bd25e6150c55fe17db41d6eb00007 *data/lep.rda b5911d05263d3e9efe5e4e99eaa6a76e *data/lungDK.rda cb139c31c1fb0421232caf88181ec5ac *data/mortDK.rda deb94384c7380312f9b33f75cf6d8559 *data/nickel.rda 4640a31484934cccc1d626104af1365f *data/occup.rda 404cc2c826ccdfb5b5edbe9834561e02 *data/testisDK.rda 1953ddd7d750051c5682fa08b11cb777 *data/thoro.rda e0f7d0bbeb4f050e41a55dd412548816 *inst/CITATION acae1b4099b6e046c314f51aaa0327ce *inst/doc/Follow-up.R d9c94a943d90f4e94e08c8386779143c *inst/doc/Follow-up.pdf a6978ca7d45a578a4fb047fb92eeed73 *inst/doc/Follow-up.rnw 34f7af56ce20ebc622cc30256a597e54 *inst/doc/index.html 82484f2ce4b2c1dfcde893b123ee9a9e *inst/doc/sim-Lexis.R 06d082afb26bdff3b7784d2157dd6dc8 *inst/doc/sim-Lexis.pdf 9b30014e5a5454c1cea4f9d2637f94ee *inst/doc/sim-Lexis.rnw 317bb6ebeaec5e7376b609d7e382c166 *man/B.dk.Rd 3abc5c20e62c874d70dcb2688ad2cce5 *man/DMconv.Rd 362200b221355a7bcbcd1c7c8df5243f *man/DMlate.Rd 38f9ae52c47f70d01f46eb437fca0f16 *man/Icens.Rd fe9e6ea0934ec19bf1a69ced3e2e1a08 *man/Lexis.Rd c97dabafce248e4d47c5b18b6f04efe0 *man/Lexis.diagram.Rd 2e71ca58213788c8a358708e776e2112 *man/Lexis.lines.Rd b4b2ca144feacece204f86bc6640d51a *man/Life.lines.Rd daf66f950320e836b8ce1d2bd37cdc41 *man/M.dk.Rd 6ae7494a426801b9944c37190c09b3ee *man/N.dk.Rd f9faa39904b30f3c191c250c42f3f6e4 *man/N2Y.Rd 424aecfdd664b3123ad4815880aa3761 *man/NArray.Rd 89eb7c53ca156854f981749d81fff890 *man/Ns.Rd 335b75739b8a25293690da804cd5e522 *man/ROC.Rd 5fa418e7a462df9892e7781ef5027412 *man/Relevel.Rd bb2162d557dfb7685edac64ac3213b6c *man/S.typh.Rd 9351888a37017068f2c9ac8b843c846d *man/Termplot.Rd b4879df831de32e9e298b7b3d90389a9 *man/Y.dk.Rd d99521bbb38bd98eac3acebf9b83582c *man/apc.fit.Rd 8e42054ad19c34f2bf77210cfafc560e *man/apc.frame.Rd 92b663829915395cdabf3e5d37cdd2b4 *man/bdendo.Rd 968ba8cef65153e9c9c521dd1541123e *man/bdendo11.Rd d74a4f6e66ce91c73cd2817bb690446a *man/births.Rd 8dc11840302a388e4f26892335d5d888 *man/blcaIT.Rd 63c1de8406186f3a692a7091a0bba2a7 *man/boxes.MS.Rd 18d942d375c5d5f6899291bf9cd1fe11 *man/brv.Rd a1a09c9591d54235cc026e44ca4ddad8 *man/cal.yr.Rd effba2c17ade00f0afd10184a073d34c *man/ccwc.Rd c47967c97d376b54706caacce489a9a2 *man/ci.cum.Rd 909d557dcade1d5adb6ceda22712b00e *man/ci.lin.Rd e7477402aa4746d653a0c72b2239d185 *man/ci.pd.Rd 128c0b1d00a69e41d131a6f74a1bae23 *man/clogistic.Rd cf5e5a6e18e07b7bb8d70dc0417e6166 *man/contr.cum.Rd 24343adc886e90c75f7af178201bd6cd *man/crr.Lexis.rd b6ece2eb3b57ea902b737e87db9d9fb3 *man/cutLexis.Rd a1ab8c14b721360ba0cb17da598bfa84 *man/detrend.Rd 386d0a4aa3515cf754ef458e1f32089c *man/diet.Rd 64dd6599bb830e98f4717b1a34ee12ab *man/effx.Rd 3c3cc3b1ecabece6b7709c1b147bab4e *man/effx.match.Rd 0dc62e726cdff6694774fab66595ee81 *man/ewrates.Rd eb0c50c4a2572fd514c475358165fa57 *man/expand.data.rd 344adb137962cfa8fc7c2cf2858de3a3 *man/fit.add.Rd 3b44fed4ae70541c965c4cfbed966a68 *man/fit.baseline.rd a318bd705eddc9d721e59c95a6932ef0 *man/fit.mult.Rd bca8b8c3452180e63d4d22885b04e3ce *man/float.Rd a00c7d3fce9cf363ccb950996276da76 *man/foreign.Lexis.Rd e5a57a203cb91e9680dedc9023779e59 *man/ftrend.Rd 0b34f125847915dde69f22e1b3759a3c *man/gen.exp.Rd cbbc2a23f902d83ba2527b27b5ed3adb *man/gmortDK.Rd d9f1d31e109d6058a2160ca0aa49bf81 *man/hivDK.Rd 9c3b059921d728298ccff73298b4dd31 *man/lep.Rd ec0e27968d4ee35f390161e49abd903c *man/lines.apc.Rd c17abc408d69d11bb660d92788056f77 *man/lls.Rd 661ec298ffcd0f39cf55c5d033e04fd1 *man/lungDK.Rd 3c462c4ce7ca1ce4b8c6fef50b3c7623 *man/merge.Lexis.Rd 4c26c9edf5d64b0af3e63ad791b2a280 *man/merge.data.frame.Rd 34c530c36a3a1a7447ff8eea58f42084 *man/mh.Rd 2ecfec2d86e80b9bbcc2c3a253348edd *man/mortDK.Rd 0dbb7c541b3ebd70a1cd104dbf0df25d *man/ncut.Rd dec4748ef3ff7c520df1075ec8296b25 *man/nice.Rd 05bd25340716d0805cbc7eb433896206 *man/nickel.Rd 0e0ff2e0894523b3878213d03afcc8cf *man/occup.Rd fb7ba7ea4cc2a9a67529348a4d971a4f *man/pc.lines.Rd 86cac5433077a16960bca5d5865586a4 *man/pctab.Rd 50c0516a536004d7f4ce91ef1bbfd8c9 *man/plot.Lexis.Rd d30b27f4c3ef397de514614ba3e6ba3e *man/plot.apc.Rd 43909fc8f0b297bbc879237717e18d4b *man/plotEst.Rd b0047a7bab6a20b153485db9bd338394 *man/plotevent.rd feb2228ef38635fcbf9083253c2f6d21 *man/projection.ip.rd a04f5841de6a7a9cf9a21e5caa8e54a5 *man/rateplot.Rd 9fee82808de1916808de45242ebafd78 *man/simLexis.Rd a76a901889d88cb7e0301de3c8d07680 *man/splitLexis.Rd c146b743be57cba543822ae2f613b08b *man/stack.Lexis.Rd eaad8ae22bd68a18750a94352f65f9c3 *man/start.Lexis.Rd 4f43436fc863747dad4fcdd566948039 *man/stattable.Rd 73cf4597fcb4a9d019bda47431b095be *man/stattable.funs.Rd 864cfa7d8bad6bcf53dae6f53df45df4 *man/subset.Lexis.Rd b89f3f488011bd32983b467915dd4813 *man/summary.Lexis.rd 14711d23ae0b89d9d22b9f3b07211093 *man/testisDK.Rd e3446824b09ea4ad8e8a0ddfc1987eef *man/thoro.Rd 6ea9cf64475187fa2f402275c40573a7 *man/time.band.Rd 2edb93539fa7b9f47a3083b624443f9d *man/time.scales.Rd b827f35f4206cd67af318cc526d98f2f *man/transform.Lexis.Rd 02fc311541fae16a5d3a580a04925050 *man/twoby2.Rd 3b649b94df7f0c0863bb4ef0a7129855 *src/chinv2.c c21af4e77e577fae093bb3dfc6cbe9a9 *src/cholesky2.c 33be867717f019d03821e58b662a94c4 *src/chsolve2.c ce9e73f4028463cf8b84a7783f282ac3 *src/clogit.c a6978ca7d45a578a4fb047fb92eeed73 *vignettes/Follow-up.rnw 9b30014e5a5454c1cea4f9d2637f94ee *vignettes/sim-Lexis.rnw Epi/build/0000755000175100001440000000000012576333004012107 5ustar hornikusersEpi/build/vignette.rds0000644000175100001440000000042612576333004014450 0ustar hornikusersuN0$-mQ%I0TXZ82l= 3.0.0), utils Imports: cmprsk, etm, splines, MASS, survival Suggests: mstate, nlme, lme4 Description: Functions for demographic and epidemiological analysis in the Lexis diagram, i.e. register and cohort follow-up data, in particular representation and manipulation of multistate data - the Lexis suite of functions, which includes interfaces to mstate, etm and cmprsk packages. Also contains functions for Age-Period-Cohort modeling and a function for interval censored data and some useful functions for tabulation and plotting, as well some epidemiological datasets. License: GPL-2 URL: http://BendixCarstensen.com/Epi/ NeedsCompilation: yes Packaged: 2015-09-16 18:33:40 UTC; bendix Author: Bendix Carstensen [aut, cre], Martyn Plummer [aut], Esa Laara [ctb], Michael Hills [ctb] Maintainer: Bendix Carstensen Repository: CRAN Date/Publication: 2015-09-17 07:50:48 Epi/man/0000755000175100001440000000000012576333004011563 5ustar hornikusersEpi/man/Lexis.lines.Rd0000644000175100001440000000447712531361107014257 0ustar hornikusers\name{Lexis.lines} \alias{Lexis.lines} \title{Draw life lines in a Lexis diagram.} \description{ Add life lines to a Lexis diagram. } \usage{ Lexis.lines( entry.date = NA, exit.date = NA, birth.date = NA, entry.age = NA, exit.age = NA, risk.time = NA, col.life = "black", lwd.life = 2, fail = NA, cex.fail = 1, pch.fail = c(NA, 16), col.fail = col.life, data = NULL ) } \arguments{ \item{entry.date, entry.age, exit.date, exit.age, risk.time, birth.date}{Numerical vectors defining lifelines to be plotted in the diagram. At least three must be given to produce lines. Not all subsets of three will suffice, the given subset has to define life lines. If insufficient data is given, no life lines are produced.} \item{col.life}{Colour of the life lines.} \item{lwd.life}{Width of the life lines.} \item{fail}{Logical of event status at exit for the persons whose life lines are plotted.} \item{cex.fail}{The size of the status marks at the end of life lines.} \item{pch.fail}{The status marks at the end of the life lines.} \item{col.fail}{Colour of the marks for censorings and failures respectively.} \item{data}{Data frame in which to interpret values.} } \value{ If sufficient information on lifelines is given, a data frame with one row per person and columns with entry ages and dates, birth date, risk time and status filled in. Side effect: Life lines are added to an existing Lexis diagram. Lexis.lines adds life lines to an existing plot. } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com} } \examples{ Lexis.diagram( entry.age = c(3,30,45), risk.time = c(25,5,14), birth.date = c(1970,1931,1925.7), fail = c(TRUE,TRUE,FALSE) ) Lexis.lines( entry.age = sample( 0:50, 100, replace=TRUE ), risk.time = sample( 5:40, 100, r=TRUE), birth.date = sample( 1910:1980, 100, r=TRUE ), fail = sample(0:1,100,r=TRUE), cex.fail = 0.5, lwd.life = 1 ) } \keyword{ hplot } \keyword{ dplot } \seealso{ \code{\link{Lexis.diagram}}, \code{\link{Life.lines}} } Epi/man/cutLexis.Rd0000644000175100001440000001676412531361107013664 0ustar hornikusers\name{cutLexis} \alias{cutLexis} \alias{countLexis} \title{ Cut follow-up at a specified date for each person. } \description{ Follow-up intervals in a Lexis object are divided into two sub-intervals: one before and one after an intermediate event. The intermediate event may denote a change of state, in which case the entry and exit status variables in the split Lexis object are modified. } \usage{ cutLexis( data, cut, timescale = 1, new.state = nlevels(data$lex.Cst)+1, new.scale = FALSE, split.states = FALSE, progressive = FALSE, precursor.states = NULL, count = FALSE) countLexis( data, cut, timescale = 1 ) } \arguments{ \item{data}{A \code{Lexis} object.} \item{cut}{A numeric vector with the times of the intermediate event. If a time is missing (\code{NA}) then the event is assumed to occur at time \code{Inf}. \code{cut} can also be a dataframe, see details.} \item{timescale}{The timescale that \code{cut} refers to. Numeric or character.} \item{new.state}{The state to which a transition occur at time \code{cut}. It may be a single value, which is then applied to all rows of \code{data}, or a vector with a separate value for each row} \item{new.scale}{Name of the timescale defined as "time since entry to new.state". If \code{TRUE} a name for the new scale is constructed. See details.} \item{split.states}{Should states that are not precursor states be split according to whether the intermediate event has occurred.} \item{progressive}{a logical flag that determines the changes to exit status. See details.} \item{precursor.states}{an optional vector of states to be considered as "less severe" than \code{new.state}. See Details below} \item{count}{logical indicating whether the \code{countLexis} options should be used. Specifying \code{count=TRUE} amounts to calling \code{countLexis}, in which case the arguments \code{new.state}, \code{progressive} and \code{precursor.states} will be ignored. } } \value{ A \code{Lexis} object, for which each follow-up interval containing the cutpoint is split in two: one before and one after the cutpoint. An extra time-scale is added; the time since the event at \code{cut}. This is \code{NA} for any follow-up prior to the intermediate event. } \note{ The \code{cutLexis} function superficially resembles the \code{splitLexis} function. However, the \code{splitLexis} function splits on a vector of common cut-points for all rows of the Lexis object, whereas the \code{cutLexis} function splits on a single time point, which may be distinct for each row, modifies the status variables, adds a new timescale and updates the attribute "time.since". This attribute is a character vector of the same length as the "time.scales" attribute, whose value is '""' if the corresponding timescale is defined for any piece of follow-up, and if the corresponding time scale is defined by say \code{cutLexis(obj,new.state="A",new.scale=TRUE)}, it has the value "A". } \details{ The \code{cutLexis} function allows a number of different ways of specifying the cutpoints and of modifying the status variable. If the \code{cut} argument is a dataframe it must have columns \code{lex.id}, \code{cut} and \code{new.state}. The values of \code{lex.id} must be unique. In this case it is assumed that each row represents a cutpoint (on the timescale indicated in the argument \code{timescale}). This cutpoint will be applied to all records in \code{data} with the corresponding \code{lex.id}. This makes it possible to apply \code{cutLexis} to a split \code{Lexis} object. If a \code{new.state} argument is supplied, the status variable is only modified at the time of the cut point. However, it is often useful to modify the status variable after the cutpoint when an important event occurs. There are three distinct ways of doing this. If the \code{progressive=TRUE} argument is given, then a "progressive" model is assumed, in which the status can either remain the same or increase during follow-up, but never decrease. This assumes that the state variables \code{lex.Cst} and \code{lex.Xst} are either numeric or ordered factors. In this case, if \code{new.state=X}, then any exit status with a value less than \code{X} is replaced with \code{X}. The Lexis object must already be progressive, so that there are no rows for which the exit status is less than the entry status. If \code{lex.Cst} and \code{lex.Xst} are factors they must be ordered factors if \code{progressive=TRUE} is given. As an alternative to the \code{progressive} argument, an explicit vector of precursor states, that are considered less severe than the new state, may be given. If \code{new.state=X} and \code{precursor.states=c(Y,Z)} then any exit status of \code{Y} or \code{Z} in the second interval is replaced with \code{X} and all other values for the exit status are retained. The \code{countLexis} function is a variant of \code{cutLexis} when the cutpoint marks a recurrent event, and the status variable is used to count the number of events that have occurred. Times given in \code{cut} represent times of new events. Splitting with \code{countLexis} increases the status variable by 1. If the current status is \code{X} and the exit status is \code{Y} before cutting, then after cutting the entry status is \code{X}, \code{X+1} for the first and second intervals, respectively, and the exit status is \code{X+1}, \code{Y+1} respectively. Moreover the values of the status is increased by 1 for all intervals for all intervals after the cut for the person in question. Hence, a call to \code{countLexis} is needed for as many times as the person with most events. But also it is immaterial in what order the cutpoints are entered. } \author{Bendix Carstensen, Steno Diabetes Center, \email{bxc@steno.dk}, Martyn Plummer, IARC, \email{plummer@iarc.fr} } \seealso{ \code{\link{splitLexis}}, \code{\link{Lexis}}, \code{\link{summary.Lexis}}, \code{\link{boxes.Lexis}} } \examples{ # A small artificial example xx <- Lexis( entry=list(age=c(17,24,33,29),per=c(1920,1933,1930,1929)), duration=c(23,57,12,15), exit.status=c(1,2,1,2) ) xx cut <- c(33,47,29,50) cutLexis(xx, cut, new.state=3, precursor=1) cutLexis(xx, cut, new.state=3, precursor=2) cutLexis(xx, cut, new.state=3, precursor=1:2) # The same as the last example cutLexis(xx, cut, new.state=3) # The same example with a factor status variable yy <- Lexis(entry = list(age=c(17,24,33,29),per=c(1920,1933,1930,1929)), duration = c(23,57,12,15), entry.status = factor(rep("alpha",4), levels=c("alpha","beta","gamma")), exit.status = factor(c("alpha","beta","alpha","beta"), levels=c("alpha","beta","gamma"))) cutLexis(yy,c(33,47,29,50),precursor="alpha",new.state="gamma") cutLexis(yy,c(33,47,29,50),precursor=c("alpha","beta"),new.state="aleph") ## Using a dataframe as cut argument rl <- data.frame( lex.id=1:3, cut=c(19,53,26), timescale="age", new.state=3 ) rl cutLexis( xx, rl ) cutLexis( xx, rl, precursor=1 ) cutLexis( xx, rl, precursor=0:2 ) ## It is immaterial in what order splitting and cutting is done xs <- splitLexis( xx, breaks=seq(0,100,10), time.scale="age" ) xs xsC <- cutLexis(xs, rl, precursor=0 ) xC <- cutLexis( xx, rl, pre=0 ) xC xCs <- splitLexis( xC, breaks=seq(0,100,10), time.scale="age" ) xCs str(xCs) } \keyword{survival} Epi/man/bdendo.Rd0000644000175100001440000000410712531361107013303 0ustar hornikusers\name{bdendo} \alias{bdendo} \docType{data} \title{A case-control study of endometrial cancer} \description{ The \code{bdendo} data frame has 315 rows and 13 columns. These data concern a study in which each case of endometrial cancer was matched with 4 controls. Matching was by date of birth (within one year), marital status, and residence. } \format{ This data frame contains the following columns: \tabular{rl}{ \code{set}: \tab Case-control set: a numeric vector \cr \code{d}: \tab Case or control: a numeric vector (1=case, 0=control) \cr \code{gall}: \tab Gall bladder disease: a factor with levels \code{No} \code{Yes}. \cr \code{hyp}: \tab Hypertension: a factor with levels \code{No} \code{Yes}. \cr \code{ob}: \tab Obesity: a factor with levels \code{No} \code{Yes}. \cr \code{est}: \tab A factor with levels \code{No} \code{Yes}. \cr \code{dur}: \tab Duration of conjugated oestrogen therapy: an ordered factor with levels \code{0} < \code{1} < \code{2} < \code{3} < \code{4}. \cr \code{non}: \tab Use of non oestrogen drugs: a factor with levels \code{No} \code{Yes}. \cr \code{duration}: \tab Months of oestrogen therapy: a numeric vector. \cr \code{age}: \tab A numeric vector. \cr \code{cest}: \tab Conjugated oestrogen dose: an ordered factor with levels \code{0} < \code{1} < \code{2} < \code{3}. \cr \code{agegrp}: \tab A factor with levels \code{55-59} \code{60-64} \code{65-69} \code{70-74} \code{75-79} \code{80-84} \cr \code{age3}: \tab a factor with levels \code{<64} \code{65-74} \code{75+} \cr } } \source{ Breslow NE, and Day N, Statistical Methods in Cancer Research. Volume I: The Analysis of Case-Control Studies. IARC Scientific Publications, IARC:Lyon, 1980. } \examples{ data(bdendo) } \keyword{datasets} Epi/man/ci.cum.Rd0000644000175100001440000000753712575470210013244 0ustar hornikusers\name{ci.cum} \alias{ci.cum} \title{ Compute cumulative sum of estimates. } \description{ Computes the cumulative sum of parameter functions and the standard error of it. Optionally the exponential is applied to the parameter functions before it is cumulated. } \usage{ ci.cum( obj, ctr.mat = NULL, subset = NULL, intl = 1, alpha = 0.05, Exp = TRUE, ci.Exp = FALSE, sample = FALSE ) } \arguments{ \item{obj}{A model object (of class \code{lm}, \code{glm}, \code{coxph}, \code{survreg}, \code{lme},\code{mer},\code{nls},\code{gnlm}, \code{MIresult} or \code{polr}). } \item{ctr.mat}{ Contrast matrix defining the parameter functions from the parameters of the model. } \item{subset}{ Subset of the parameters of the model to which \code{ctr.mat} should be applied. } \item{intl}{ Interval length for the cumulation. Either a constant or a numerical vector of length \code{nrow(ctr.mat)}. } \item{alpha}{ Significance level used when computing confidence limits. } \item{Exp}{ Should the parameter function be exponentiated before it is cumulated?} \item{ci.Exp}{ Should the confidence limits for the cumulative rate be computed on the log-scale, thus ensuring that exp(-cum.rate) is always in [0,1]?} \item{sample}{Should a sample of the original parameters be used to compute a cumulative rate?} } \details{ The purpose of this function is to compute cumulative rate based on a model for the rates. If the model is a multiplicative model for the rates, the purpose of \code{ctr.mat} is to return a vector of rates or log-rates when applied to the coefficients of the model. If log-rates are returned from the model, the they should be exponentiated before cumulated, and the variances computed accordingly. Since the primary use is for log-linear Poisson models the \code{Exp} parameter defaults to TRUE. The \code{ci.Exp} argumen ensures that the confidence intervals for } \value{ A matrix with 4 columns: Estimate, lower and upper c.i. and standard error. If \code{sample} is TRUE, a sampled vector is reurned, if \code{sample} is numeric a matrix with \code{sample} columns is returned, each column a cumulative rate based on a random sample from the distribution of the parameter estimates. } \author{ Bendix Carstensen, \url{http://BendixCarstensen.com} } \seealso{ See also \code{\link{ci.lin}} } \examples{ # Packages required for this example library( splines ) library( survival ) data( lung ) par( mfrow=c(1,2) ) # Plot the Kaplan-meier-estimator plot( survfit( Surv( time, status==2 ) ~ 1, data=lung ) ) # Declare data as Lexis lungL <- Lexis( exit=list("tfd"=time), exit.status=(status==2)*1, data=lung ) summary( lungL ) # Cut the follow-up every 10 days sL <- splitLexis( lungL, "tfd", breaks=seq(0,1100,10) ) str( sL ) summary( sL ) # Fit a Poisson model with a natural spline for the effect of time. # Extract the variables needed D <- status(sL, "exit") Y <- dur(sL) tB <- timeBand( sL, "tfd", "left" ) MM <- ns( tB, knots=c(50,100,200,400,700), intercept=TRUE ) mp <- glm( D ~ MM - 1 + offset(log(Y)), family=poisson, eps=10^-8, maxit=25 ) # Contrast matrix to extract effects, i.e. matrix to multiply with the # coefficients to produce the log-rates: unique rows of MM, in time order. T.pt <- sort( unique( tB ) ) T.wh <- match( T.pt, tB ) Lambda <- ci.cum( mp, ctr.mat=MM[T.wh,], intl=diff(c(0,T.pt)) ) # Put the estimated survival function on top of the KM-estimator matlines( c(0,T.pt[-1]), exp(-Lambda[,1:3]), lwd=c(3,1,1), lty=1, col="Red" ) # Extract and plot the fitted intensity function lambda <- ci.lin( mp, ctr.mat=MM[T.wh,], Exp=TRUE ) matplot( T.pt, lambda[,5:7]*10^3, type="l", lwd=c(3,1,1), col="black", lty=1, log="y", ylim=c(0.2,20) ) } \keyword{models} \keyword{regression} Epi/man/blcaIT.Rd0000644000175100001440000000127612531361107013212 0ustar hornikusers\name{blcaIT} \alias{blcaIT} \docType{data} \title{Bladder cancer mortality in Italian males} \description{ Number of deaths from bladder cancer and person-years in the Italian male population 1955--1979, in ages 25--79. } % \usage{data(blcaIT)} \format{ A data frame with 55 observations on the following 4 variables: \tabular{rl}{ \code{age}: \tab Age at death. Left endpoint of age class \cr \code{period}: \tab Period of death. Left endpoint of period \cr \code{D}: \tab Number of deaths \cr \code{Y}: \tab Number of person-years. } } % \source{ % Reference to a source... % } % \references{ % Reference to a publication... % } \examples{ data(blcaIT) } \keyword{datasets} Epi/man/N.dk.Rd0000644000175100001440000000141512531361107012641 0ustar hornikusers\name{N.dk} \alias{N.dk} \docType{data} \title{Population size in Denmark} \description{ The population size at 1st January in ages 0-99. } \usage{data(N.dk)} \format{ A data frame with 7200 observations on the following 4 variables. \describe{ \item{\code{sex}}{Sex, 1:males, 2:females} \item{\code{A}}{Age. 0:0, 1:1, ..., 98:98, 99:99+} \item{\code{P}}{Year} \item{\code{N}}{Number of persons alive at 1st January year \code{P}} } } \source{ \url{http://www.statistikbanken.dk/statbank5a/SelectTable/omrade0.asp?SubjectCode=02&PLanguage=1&ShowNews=OFF} } \examples{ data(N.dk) str(N.dk) with(N.dk,addmargins(tapply(N,list(P,sex),sum),2)) with(subset(N.dk,P==max(P)),addmargins(tapply(N,list(A,sex),sum))) } \keyword{datasets} Epi/man/lls.Rd0000644000175100001440000000324012531361107012637 0ustar hornikusers\name{lls} \alias{lls} \alias{clear} \title{Functions to manage and explore the workspace } \description{These functions help you to find out what has gone wrong and to start afresh if needed. } \usage{ lls(pos = 1, pat = "", all=FALSE, print=TRUE ) clear() } \arguments{ \item{pos}{Numeric. What position in the search path do you want listed.} \item{pat}{Character. List only objects that have this string in their name.} \item{all}{Logical. Should invisible objects be printed too - see \code{\link{ls}} to which this argument is passed.} \item{print}{Logical. Should the result be printed?} } \details{\code{lls} is designed to give a quick overview of the name, mode, class and dimension of the object in your workspace. They may not always be what you think they are. \code{clear} clears all your objects from workspace, and all attached objects too --- it only leaves the loaded packages in the search path; thus allowing a fresh start without closing and restarting R. } \value{ \code{lls} returns a data frame with four character variables: code{name}, code{mode}, code{class} and code{size} and one row per object in the workspace (if \code{pos=1}). \code{size} is either the length or the dimension of the object. The data frame is by default printed with left-justified columns. } \author{\code{lls}: Unknown. Modified by Bendix Carstensen from a long forgotten snatch. \code{clear}: Michael Hills / David Clayton.} \examples{ x <- 1:10 y <- rbinom(10, 1, 0.5) m1 <- glm( y ~ x, family=binomial ) M <- matrix( 1:20, 4, 5 ) .M <- M lls() clear() lls() } \keyword{attributes}Epi/man/time.scales.Rd0000644000175100001440000000102312531361107014251 0ustar hornikusers\name{timeScales} \alias{timeScales} \title{The time scales of a Lexis object} \description{ Function to get the names of the time scales of a \code{Lexis} object. } \usage{ timeScales(x) } \arguments{ \item{x}{an object of class \code{Lexis}.} } \value{ A character vector containing the names of the variables in \code{x} that represent the time scales. Extracted from the \code{time.scales} attribute of the object. } \author{Martyn Plummer} \seealso{\code{\link{Lexis}}, \code{\link{splitLexis}}} \keyword{attribute} Epi/man/pc.lines.Rd0000644000175100001440000000273112531361107013564 0ustar hornikusers\name{pc.lines} \alias{pc.points} \alias{pc.lines} \alias{pc.matpoints} \alias{pc.matlines} \alias{cp.points} \alias{cp.lines} \alias{cp.matpoints} \alias{cp.matlines} \title{ Plot period and cohort effects in an APC-frame. } \description{ When an APC-frame has been produced by \code{\link{apc.frame}}, this function draws curves in the period/cohort part of the frame. } \usage{ pc.points( x, y, ... ) pc.lines( x, y, ... ) pc.matpoints( x, y, ... ) pc.matlines( x, y, ... ) cp.points( x, y, ... ) cp.lines( x, y, ... ) cp.matpoints( x, y, ... ) cp.matlines( x, y, ... ) } \arguments{ \item{x}{vector of \code{x}-coordinates.} \item{y}{vector of \code{y}-coordinates.} \item{...}{Further parameters to be transmitted to points, lines, matpoints or matlines used for plotting the three sets of curves.} } \details{Since the Age-part of the frame is referred to by its real coordinates plotting in the calendar time part requires translation and scaling to put things correctly there, that is done by the functions \code{pc.points} etc. The functions \code{cp.points} etc. are just synonyms for these, in recognition of the fact that you can never remember whether it is "pc" pr "cp". } \value{ The functions return nothing. } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com} } \seealso{ \code{\link{apc.frame}}, \code{\link{apc.fit}}, \code{\link{plot.apc}}, \code{\link{lines.apc}} } \keyword{hplot} Epi/man/Lexis.Rd0000644000175100001440000001617012531361107013137 0ustar hornikusers\name{Lexis} \alias{Lexis} \title{Create a Lexis object} \description{ Create an object of class \code{Lexis} to represent follow-up in multiple states on multiple time scales. } \usage{ Lexis( entry, exit, duration, entry.status = 0, exit.status = 0, id, data, merge=TRUE, states, tol=.Machine$double.eps^0.5, keep.dropped=FALSE ) } \arguments{ \item{entry}{a named list of entry times. Each element of the list is a numeric variable representing the entry time on the named time scale. All time scales must have the same units (e.g. years). The names of the timescales must be different from any column name in \code{data}.} \item{exit}{a named list of exit times.} \item{duration}{a numeric vector giving the duration of follow-up.} \item{entry.status}{a vector or a factor giving the status at entry} \item{exit.status}{a vector or factor giving status at exit. Any change in status during follow-up is assumed to take place exactly at the exit time.} \item{id}{a vector giving a unique identity value for each person represented in the Lexis object. Defaults to \code{1:nrow(data)}} \item{data}{an optional data frame, list, or environment containing the variables. If not found in \code{data}, the variables are taken from the environment from which \code{Lexis} was called.} \item{merge}{a logical flag. If \code{TRUE} then the \code{data} argument will be coerced to a data frame and then merged with the resulting \code{Lexis} object.} \item{states}{A vector of labels for the states. If given, the state variables \code{lex.Cst} and \code{lex.Xst} are returned as factors with identical levels attributes equal to \code{states}.} \item{tol}{Numerical tolerance for follow-up time. Rows with duration less than this value are automatically dropped.} \item{keep.dropped}{Logical. Should dropped rows from \code{data} be saved as an attribute with the object for inspection?} } \details{ The analysis of long-term population-based follow-up studies typically requires multiple time scales to be taken into account, such as age, calender time, or time since an event. A \code{Lexis} object is a data frame with additional attributes that allows these multiple time dimensions of follow-up to be managed. Separate variables for current end exit state allows representation of multistate data. Lexis objects are named after the German demographer Wilhelm Lexis (1837-1914), who is credited with the invention of the "Lexis diagram" for representing population dynamics simultaneously by several timescales. The \code{Lexis} function can create a minimal \code{Lexis} object with only those variables required to define the follow-up history in each row. Additional variables can be merged into the \code{Lexis} object using the \code{merge} method for \code{Lexis} objects. The latter is the default. There are also \code{merge}, \code{subset} and \code{transform} methods for \code{Lexis} objects. They work as the corresponding methods for data-frames but ensures that the result is a \code{Lexis} object. } \note{ Only two of the three arguments \code{entry}, \code{exit} and \code{duration} need to be given. If the third parameter is missing, it is imputed. \code{entry}, \code{exit} must be numeric, using \code{\link{Date}} variables will cause some of the utilites to crash. Transformation by \code{\link{cal.yr}} is recommended. If only either \code{exit} or \code{duration} are supplied it is assumed that \code{entry} is 0. This is only meaningful (and therefore checked) if there is only one timescale. If any of \code{entry.status} or \code{exit.status} are of mode character, they will both be converted to factors. If \code{entry.status} is not given, then its class is automatically set to that of \code{exit.status}. If \code{exit.status} is a character or factor, the value of \code{entry.status} is set to the first level. This may be highly undesirable, and therefore noted. For example, if \code{exit.status} is character the first level will be the first in the alphabetical ordering; slightly unfortunate if values are \code{c("Well","Diseased")}. If \code{exit.status} is logical, the value of \code{entry.status} set to \code{FALSE}. If \code{exit.status} is numeric, the value of \code{entry.status} set to 0. If \code{entry.status} or \code{exit.status} are factors or character, the corresponding state variables in the returned \code{Lexis} object, \code{lex.Cst} and \code{lex.Xst} will be (unordered) factors with identical set of levels, namely the union of the levels of \code{entry.status} and \code{exit.status}. } \value{ An object of class \code{Lexis}. This is represented as a data frame with a column for each time scale (with neaes equal to the union of the names of \code{entry} and \code{exit}), and additional columns with the following names: \item{lex.id}{Identification of the persons.} \item{lex.dur}{Duration of follow-up.} \item{lex.Cst}{Entry status (\code{C}urrent \code{st}ate), i.e. the state in which the follow up takes place.} \item{lex.Xst}{Exit status (e\code{X}it \code{st}ate), i.e. that state taken up after \code{dur} in \code{lex.Cst}.} If \code{merge=TRUE} (the default) then the \code{Lexis} object will also contain all variables from the \code{data} argument. } \author{Martyn Plummer with contributions from Bendix Carstensen} \examples{ # A small bogus cohort xcoh <- structure( list( id = c("A", "B", "C"), birth = c("14/07/1952", "01/04/1954", "10/06/1987"), entry = c("04/08/1965", "08/09/1972", "23/12/1991"), exit = c("27/06/1997", "23/05/1995", "24/07/1998"), fail = c(1, 0, 1) ), .Names = c("id", "birth", "entry", "exit", "fail"), row.names = c("1", "2", "3"), class = "data.frame" ) # Convert the character dates into numerical variables (fractional years) xcoh <- cal.yr( xcoh, format="\%d/\%m/\%Y", wh=2:4 ) # See how it looks xcoh str( xcoh ) # Define as Lexis object with timescales calendar time and age Lcoh <- Lexis( entry = list( per=entry ), exit = list( per=exit, age=exit-birth ), exit.status = fail, data = xcoh ) Lcoh # Using character states may have undesired effects: xcoh$Fail <- c("Dead","Well","Dead") Lexis( entry = list( per=entry ), exit = list( per=exit, age=exit-birth ), exit.status = Fail, data = xcoh ) # ...unless you order the levels correctly ( xcoh$Fail <- factor( xcoh$Fail, levels=c("Well","Dead") ) ) Lexis( entry = list( per=entry ), exit = list( per=exit, age=exit-birth ), exit.status = Fail, data = xcoh ) } \seealso{ \code{\link{plot.Lexis}}, \code{\link{splitLexis}}, \code{\link{cutLexis}}, \code{\link{merge.Lexis}}, \code{\link{subset.Lexis}}, \code{\link{transform.Lexis}}, \code{\link{summary.Lexis}}, \code{\link{timeScales}}, \code{\link{timeBand}}, \code{\link{entry}}, \code{\link{exit}}, \code{\link{dur}} } \keyword{survival} Epi/man/DMlate.Rd0000644000175100001440000000373712531361107013226 0ustar hornikusers\name{DMlate} \Rdversion{1.1} \alias{DMlate} \alias{DMrand} \docType{data} \title{ The Danish National Diabetes Register. } \description{ These two datasets each contain a random sample of 10,000 persons from the Danish National Diabetes Register. \code{DMrand} is a random sample from the register, whereas \code{DMlate} is a random sample among those with date of diagnosis after 1.1.1995. All dates are radomly jittered by adding a U(-7,7) (days). } \usage{data(DMrand) data(DMlate)} \format{ A data frame with 10000 observations on the following 7 variables. \describe{ \item{\code{sex}}{Sex, a factor with levels \code{M} \code{F}} \item{\code{dobth}}{Date of birth} \item{\code{dodm}}{Date of inclusion in the register} \item{\code{dodth}}{Date of death} \item{\code{dooad}}{Date of 2nd prescription of OAD} \item{\code{doins}}{Date of 2nd insulin prescription} \item{\code{dox}}{Date of exit from follow-up.} } } \details{All dates are given in fractions of years, so 1997.00 corresponds to 1 January 1997 and 1997.997 to 31 December 1997. } \source{ Danish National Board of Health. } \references{ B Carstensen, JK Kristensen, P Ottosen and K Borch-Johnsen: The Danish National Diabetes Register: Trends in incidence, prevalence and mortality, Diabetologia, 51, pp 2187--2196, 2008. In partucular see the appendix at the end of the paper. } \examples{ data(DMlate) str(DMlate) dml <- Lexis( entry=list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit=list(Per=dox), exit.status=factor(!is.na(dodth),labels=c("DM","Dead")), data=DMlate ) # Cut the follow-up at insulin start, and introduce a new timescale, # and split non-precursor states system.time( dmi <- cutLexis( dml, cut = dml$doins, pre = "DM", new.state = "Ins", new.scale = "t.Ins", split.states = TRUE ) ) summary( dmi ) } \keyword{datasets} Epi/man/mh.Rd0000644000175100001440000000677612531361107012472 0ustar hornikusers\name{mh} \alias{mh} \title{ Mantel-Haenszel analyses of cohort and case-control studies } \description{ This function carries out Mantel-Haenszel comparisons in tabulated data derived from both cohort and case-control studies. } \usage{ mh(cases, denom, compare=1, levels=c(1, 2), by=NULL, cohort=!is.integer(denom), confidence=0.9) } \arguments{ \item{cases}{ the table of case frequencies (a multiway array). } \item{denom}{ the denominator table. For cohort studies this should be a table of person-years observation, while for case-control studies it should be a table of control frequencies. } \item{compare}{ the dimension of the table which defines the comparison groups (can be referred to either by number or by name). The default is the first dimension of the table. } \item{levels}{ a vector identifying (either by number or by name) the two groups to be compared. The default is the first two levels of the selected dimension. } \item{by}{ the dimensions not to be collapsed in the Mantel-Haenszel computations. Thus, this argument defines the structure of the resulting tables of estimates and tests. } \item{cohort}{ an indicator whether the data derive from a cohort or a case-control study. If the denominator table is stored as an integer, a case-control study is assumed. } \item{confidence}{ the approximate coverage probability for the confidence intervals to be computed. }} \value{ A list giving tables of rate (odds) ratio estimates, their standard errors (on a log scale), lower and upper confidence limits, chi-squared tests (1 degree of freedom) and the corresponding p-values. The result list also includes numerator and denominator of the Mantel-Haenszel estimates (q, r), and score test statistics and score variance (u, v). } \section{Side Effects}{ None } \details{ Multiway tables of data are accepted and any two levels of any dimension can be chosen as defining the comparison groups. The rate (odds) ratio estimates and the associated significance tests may be collapsed over all the remaining dimensions of the table, or over selected dimensions only, so that tables of estimates and tests are computed. } \references{ Clayton, D. and Hills, M. : Statistical Models in Epidemiology, Oxford University Press (1993). } \seealso{ \code{\link{Lexis}} } \examples{ # If d and y are 3-way tables of cases and person-years # observation formed by tabulation by two confounders # (named "C1" and "C2") an exposure of interest ("E"), # the following command will calculate an overall # Mantel-Haenszel comparison of the first two exposure # groups. # # Generate some bogus data dnam <- list( E=c("low","medium","high"), C1=letters[1:2], C2=LETTERS[1:4] ) d <- array( sample( 2:80, 24), dimnames=dnam, dim=sapply( dnam, length ) ) y <- array( abs( rnorm( 24, 227, 50 ) ), dimnames=dnam, dim=sapply( dnam, length ) ) mh(d, y, compare="E") # # Or, if exposure levels named "low" and "high" are to be # compared and these are not the first two levels of E : # mh(d, y, compare="E", levels=c("low", "high")) # # If we wish to carry out an analysis which controls for C1, # but examines the results at each level of C2: # mh(d, y, compare="E", by="C2") # # It is also possible to look at rate ratios for every # combination of C1 and C2 : # mh(d, y, compare="E", by=c("C1", "C2")) # # If dimensions and levels of the table are unnamed, they must # be referred to by number. # } \keyword{htest} Epi/man/Y.dk.Rd0000644000175100001440000000315712531361107012661 0ustar hornikusers\name{Y.dk} \alias{Y.dk} \docType{data} \title{Population risk time in Denmark} \description{ Risk time (person-years) in the Danish population, classified by sex, age, period and date of birth in 1-year classes. This corresponds to triangles in a Lexis diagram. } \usage{data(Y.dk)} \format{ A data frame with 13860 observations on the following 6 variables. \describe{ \item{\code{sex}}{Sex. 1:males, 2:females} \item{\code{A}}{One-year age class} \item{\code{P}}{Period} \item{\code{C}}{Birth cohort} \item{\code{Y}}{Person-years} \item{\code{upper}}{Indicator of upper triangle in the Lexis diagram} } } \details{ The risk time is computed from the population size figures in \code{\link{N.dk}}, using the formulae devised in B. Carstensen: "Demography and epidemiology: Age-Period-Cohort models in the computer age", \url{http://biostat.ku.dk/reports/2006/ResearchReport06-1.pdf/}, later published as: B. Carstensen: Age-period-cohort models for the Lexis diagram. Statistics in Medicine, 10; 26(15):3018-45, 2007. } \source{ \url{http://www.statistikbanken.dk/statbank5a/SelectTable/omrade0.asp?SubjectCode=02&PLanguage=1&ShowNews=OFF} } \examples{ data(Y.dk) str(Y.dk) # Compute mean age, period for the triangles attach( Y.dk ) age <- A + (1+upper)/3 per <- P + (2-upper)/3 # Plot a Lexis diagram library( Epi ) Lexis.diagram( age=c(0,10), date=c(1990,2000), coh.grid=TRUE, int=1 ) box() # Print the person-years for males there text( per[sex==1], age[sex==1], formatC( Y[sex==1]/1000, format="f", digits=1 ) ) } \keyword{datasets} Epi/man/effx.Rd0000644000175100001440000000737412531361107013011 0ustar hornikusers\name{effx} \alias{effx} \title{Function to calculate effects} \description{ The function calculates the effects of an exposure on a response, possibly stratified by a stratifying variable, and/or controlled for one or more confounding variables. } \usage{ effx( response, type = "metric", fup = NULL, exposure, strata = NULL, control = NULL, weights = NULL, eff = NULL, alpha = 0.05, base = 1, digits = 3, data = NULL ) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{response}{The \code{response} variable - must be numeric or logical. If logical, \code{TRUE} is considered the outcome.} \item{type}{The type of response\code{type} - must be one of "metric", "binary", "failure", or "count"} \item{fup}{The \code{fup} variable contains the follow-up time for a failure response}. This must be numeric. \item{exposure}{The \code{exposure} variable can be numeric or a factor} \item{strata}{The \code{strata} stratifying variable - must be a factor} \item{control}{The \code{control} variable(s) (confounders) - these are passed as a list if there are more than one.} \item{weights}{Frequency weights for binary response only} \item{eff}{How should effects be measured. If \code{response} is binomial, the default is "OR" (odds-ratio) with "RR" (relative risk) as an option. If \code{response} is failure, the default is "RR" (rate-ratio) with "RD" (rate difference) as an option.} \item{base}{Baseline for the effects of a categorical exposure, either a number or a name of the level. Defaults to 1} \item{digits}{Number of significant digits for the effects, default 3} \item{alpha}{1 - confidence level} \item{data}{\code{data} refers to the data used to evaluate the function} } \details{The function is a wrapper for glm. Effects are calculated as differences in means for a metric response, odds ratios/relatiev risks for a binary response, and rate ratios/rate differences for a failure or count response. The k-1 effects for a categorical exposure with k levels are relative to a baseline which, by default, is the first level. The effect of a metric (quantitative) exposure is calculated per unit of exposure. The exposure variable can be numeric or a factor, but if it is an ordered factor the order will be ignored.} \value{ % ~Describe the value returned % If it is a LIST, use \item{comp1 }{Effects of exposure} \item{comp2 }{Tests of significance} % ... } \references{ www.mhills.pwp.blueyonder.co.uk } \author{Michael Hills} %\note{ ~~further notes~~ } %\seealso{ ~~objects to See Also as \code{\link{~~fun~~}}, ~~~ } \examples{ library(Epi) data(births) births$hyp <- factor(births$hyp,labels=c("normal","hyper")) births$sex <- factor(births$sex,labels=c("M","F")) # bweight is the birth weight of the baby in gms, and is a metric # response (the default) # effect of hypertension on birth weight effx(bweight,exposure=hyp,data=births) # effect of hypertension on birth weight stratified by sex effx(bweight,exposure=hyp,strata=sex,data=births) # effect of hypertension on birth weight controlled for sex effx(bweight,exposure=hyp,control=sex,data=births) # effect of gestation time on birth weight effx(bweight,exposure=gestwks,data=births) # effect of gestation time on birth weight stratified by sex effx(bweight,exposure=gestwks,strata=sex,data=births) # effect of gestation time on birth weight controlled for sex effx(bweight,exposure=gestwks,control=sex,data=births) # lowbw is a binary response coded 1 for low birth weight and 0 otherwise # effect of hypertension on low birth weight effx(lowbw,type="binary",exposure=hyp,data=births) effx(lowbw,type="binary",exposure=hyp,eff="RR",data=births) } \keyword{ models } \keyword{ regression } Epi/man/lines.apc.Rd0000644000175100001440000001001712531361107013721 0ustar hornikusers\name{apc.lines} \alias{lines.apc} \alias{apc.lines} \title{ Plot APC-estimates in an APC-frame. } \description{ When an APC-frame has been produced by \code{\link{apc.frame}}, this function draws a set of estimates from an APC-fit in the frame. An optional drift parameter can be added to the period parameters and subtracted from the cohort and age parameters. } \usage{ \method{lines}{apc}( x, P, C, scale = c("log","ln","rates","inc","RR"), frame.par = options()[["apc.frame.par"]], drift = 0, c0 = median( C[,1] ), a0 = median( A[,1] ), p0 = c0 + a0, ci = rep( FALSE, 3 ), lwd = c(3,1,1), lty = 1, col = "black", type = "l", knots = FALSE, ... ) apc.lines( x, P, C, scale = c("log","ln","rates","inc","RR"), frame.par = options()[["apc.frame.par"]], drift = 0, c0 = median( C[,1] ), a0 = median( A[,1] ), p0 = c0 + a0, ci = rep( FALSE, 3 ), lwd = c(3,1,1), lty = 1, col = "black", type = "l", knots = FALSE, ... ) } \arguments{ \item{x}{If an \code{apc}-object, (see \code{\link{apc.fit}}), then the arguments \code{P}, \code{C}, \code{c0}, \code{a0} and \code{p0} are ignored, and the estimates from \code{x} plotted. Can also be a 4-column matrix with columns age, age-specific rates, lower and upper c.i., in which case period and cohort effects are taken from the arguments \code{P} and \code{C}. } \item{P}{Period effects. Rate-ratios. Same form as for the age-effects.} \item{C}{Cohort effects. Rate-ratios. Same form as for the age-effects.} \item{scale}{Are effects given on a log-scale? Character variable, one of \code{"log"}, \code{"ln"}, \code{"rates"}, \code{"inc"}, \code{"RR"}. If \code{"log"} or \code{"ln"} it is assumed that effects are log(rates) and log(RRs) otherwise the actual effects are assumed given in \code{A}, \code{P} and \code{C}. If \code{A} is of class \code{apc}, it is assumed to be \code{"rates"}.} \item{frame.par}{2-element vector with the cohort-period offset and RR multiplicator. This will typically be the result from the call of \code{\link{apc.frame}}. See this for details.} \item{drift}{The drift parameter to be added to the period effect. If \code{scale="log"} this is assumed to be on the log-scale, otherwise it is assumed to be a multiplicative factor per unit of the first columns of \code{A}, \code{P} and \code{C} } \item{c0}{The cohort where the drift is assumed to be 0; the subtracted drift effect is \code{drift*(C[,1]-c0)}.} \item{a0}{The age where the drift is assumed to be 0.} \item{p0}{The period where the drift is assumed to be 0.} \item{ci}{Should confidence interval be drawn. Logical or character. If character, any occurrence of \code{"a"} or \code{"A"} produces confidence intervals for the age-effect. Similarly for period and cohort.} \item{lwd}{Line widths for estimates, lower and upper confidence limits.} \item{lty}{Linetypes for the three effects.} \item{col}{Colours for the three effects.} \item{type}{What type of lines / points should be used.} \item{knots}{Should knots from the model be shown?} \item{...}{Further parameters to be transmitted to \code{points} \code{lines}, \code{matpoints} or \code{matlines} used for plotting the three sets of curves.} } \details{ The drawing of three effects in an APC-frame is a rather trivial task, and the main purpose of the utility is to provide a function that easily adds the functionality of adding a drift so that several sets of lines can be easily produced in the same frame. } \value{ \code{APC.lines} returns (invisibly) a list of three matrices of the effects plotted. } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com} } \seealso{ \code{\link{apc.frame}}, \code{\link{pc.lines}}, \code{\link{apc.fit}}, \code{\link{apc.plot}} } \keyword{hplot} Epi/man/testisDK.Rd0000644000175100001440000000115412531361107013601 0ustar hornikusers\name{testisDK} \alias{testisDK} \docType{data} \title{Testis cancer incidence in Denmark, 1943--1996 } \description{Number of testiscancer cases and male person-years in the Danish population 1943--1996} \usage{data(testisDK)} \format{ A data frame with 4860 observations on the following 4 variables. \describe{ \item{\code{A}}{Age class, 0,1,2,...,89} \item{\code{P}}{Year, 1943,...,1996} \item{\code{D}}{Number of testis cancer cases} \item{\code{Y}}{Person years} } } \source{The Danish Cancer Registry } \examples{ data(testisDK) head(testisDK) } \keyword{datasets} Epi/man/stack.Lexis.Rd0000644000175100001440000000541612531361107014244 0ustar hornikusers\name{stack.Lexis} \Rdversion{1.1} \alias{stack.Lexis} \alias{tmat} \alias{tmat.Lexis} \title{ Functions to facilitate analysis of multistate models. } \description{ \code{stack.Lexis} produces a stacked object suited for analysis of several transition intensities simultaneously. } \usage{ \method{stack}{Lexis}(x, ...) tmat( x, ... ) \method{tmat}{Lexis}(x, Y=FALSE, mode = "numeric", ...) } \arguments{ \item{x}{A \code{\link{Lexis}} object.} \item{Y}{Logical. Should the risk time be put in the diagonal? This is a facility which is used by \code{\link{boxes.Lexis}}.} \item{mode}{Should the matrix be returned as a numeric matrix with \code{NA}s at unused places or (\code{mode="logical"}) as a logical matrix with \code{FALSE} on the diagonal.} \item{\dots}{Not used.} } \value{ \code{tmat.Lexis} returns a square transition matrix, classified by the levels of \code{lex.Cst} and \code{lex.Xst}, for every transition occurring the entry is the number of transitions occurring and \code{NA} in all oter entries. If \code{Y=TRUE}, the diagonal will contain the risk time in each of the states. \code{stack.Lexis} returns a dataframe to be used for analysis of multistate data when all transitions are modelled together, for example if some parameters are required to be the same for different transitions. The dataframe has class \code{stacked.Lexis}, and inherits the attributes \code{time.scales} and \code{breaks} from the \code{Lexis} object, and so function \code{\link{timeBand}} applies to a \code{stacked.Lexis} object too. The dataframe has same variables as the original \code{Lexis} object, but with each record duplicated as many times as there are possible exits from the current state, \code{lex.Cst}. Two variables are added: \code{lex.Fail}, an indicator of wheter an event for the transition named in the factor \code{lex.Tr} has occurred or not. \code{lex.Tr} is a factor with levels made up of combinations of the levels of \code{lex.Cst} and \code{lex.Xst} that do occur together in \code{x}, joined by a "\code{->}".} \author{ Bendix Carstensen, \email{bxc@steno.dk}, \url{http://BendixCarstensen.com} } \examples{ data(DMlate) str(DMlate) dml <- Lexis( entry=list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit=list(Per=dox), exit.status=factor(!is.na(dodth),labels=c("DM","Dead")), data=DMlate ) dmi <- cutLexis( dml, cut=dml$doins, new.state="Ins", pre="DM" ) summary( dmi ) ls.dmi <- stack( dmi ) str( ls.dmi ) # Check that all the transitions and person-years got across. with( ls.dmi, rbind( table(lex.Fail,lex.Tr), tapply(lex.dur,lex.Tr,sum) ) ) } \seealso{ \code{\link{splitLexis}} \code{\link{cutLexis}} \code{\link{Lexis}} } \keyword{survival} Epi/man/fit.mult.Rd0000644000175100001440000000357312531361107013620 0ustar hornikusers\name{fit.mult} \alias{fit.mult} \title{ Fits a multiplicative relative risk model to interval censored data. } \description{ Utility function. The model fitted assumes a piecewise constant baseline rate in intervals specified by the argument \code{breaks}, and a multiplicative relative risk function. } \usage{ fit.mult( y, rates.frame, cov.frame, start ) } \arguments{ \item{y}{Binary vector of outcomes} \item{rates.frame}{Dataframe expanded from the original data by \code{\link{expand.data}}, cooresponding to covariates for the rate parameters.} \item{cov.frame}{ do., but covariates corresponding to the \code{formula} argument of \code{\link{Icens}}} \item{start}{Starting values for the rate parameters. If not supplied, then starting values are generated.} } \details{ The model is fitted by alternating between two generalized linear models where one estimates the underlying rates in the intervals, and the other estimates the log-relative risks. } \value{ A list with three components: \item{rates}{A glm object from a binomial model with log-link, estimating the baseline rates.} \item{cov}{A glm object from a binomial model with complementary log-log link, estimating the log-rate-ratios} \item{niter}{Nuber of iterations, a scalar} } \references{ B Carstensen: Regression models for interval censored survival data: application to HIV infection in Danish homosexual men. Statistics in Medicine, 15(20):2177-2189, 1996. CP Farrington: Interval censored survival data: a generalized linear modelling approach. Statistics in Medicine, 15(3):283-292, 1996. } \author{ Martyn Plummer, \email{plummer@iarc.fr}, Bendix Carstensen, \email{bxc@steno.dk} } \seealso{ \code{\link{Icens}} \code{\link{fit.add}} } \examples{ data( HIV.dk ) } \keyword{ models } \keyword{ regression } \keyword{ survival } Epi/man/hivDK.Rd0000644000175100001440000000260412531361107013055 0ustar hornikusers\name{ hivDK } \alias{ hivDK } \docType{ data } \title{ hivDK: seroconversion in a cohort of Danish men} \description{ Data from a survey of HIV-positivity of a cohort of Danish men followed by regular tests from 1983 to 1989. } \usage{ data(hivDK) } \format{ A data frame with 297 observations on the following 7 variables. \describe{ \item{\code{id}}{ID of the person} \item{\code{entry}}{Date of entry to the study. Date variable.} \item{\code{well}}{Date last seen seronegative. Date variable.} \item{\code{ill}}{Date first seen seroconverted. Date variable.} \item{\code{bth}}{Year of birth minus 1950.} \item{\code{pyr}}{Annual number of sexual partners.} \item{\code{us}}{Indicator of wheter the person has visited the USA.} } } \source{ Mads Melbye, Statens Seruminstitut. } \references{ Becker N.G. and Melbye M.: Use of a log-linear model to compute the empirical survival curve from interval-censored data, with application to data on tests for HIV-positivity, Australian Journal of Statistics, 33, 125--133, 1990. Melbye M., Biggar R.J., Ebbesen P., Sarngadharan M.G., Weiss S.H., Gallo R.C. and Blattner W.A.: Seroepidemiology of HTLV-III antibody in Danish homosexual men: prevalence, transmission and disease outcome. British Medical Journal, 289, 573--575, 1984. } \examples{ data(hivDK) str(hivDK) } \keyword{ datasets } Epi/man/boxes.MS.Rd0000644000175100001440000003642012531361107013511 0ustar hornikusers\name{boxes.MS} \Rdversion{1.1} \alias{tbox} \alias{dbox} \alias{fillarr} \alias{boxarr} \alias{boxes} \alias{boxes.Lexis} \alias{boxes.matrix} \alias{boxes.MS} \title{ Draw boxes and arrows for illustration of multistate models. } \description{ Boxes can be drawn with text (\code{tbox}) or a cross (\code{dbox}), and arrows pointing between the boxes (\code{boxarr}) can be drawn automatically not overlapping the boxes. The \code{boxes} method for \code{\link{Lexis}} objects generates displays of states with person-years and transitions with events or rates. } \usage{ tbox( txt, x, y, wd, ht, font=2, lwd=2, col.txt=par("fg"), col.border=par("fg"), col.bg="transparent" ) dbox( x, y, wd, ht=wd, font=2, lwd=2, cwd=5, col.cross=par("fg"), col.border=par("fg"), col.bg="transparent" ) boxarr( b1, b2, offset=FALSE, pos=0.45, ... ) \method{boxes}{Lexis}( obj, boxpos = FALSE, wmult = 1.15, hmult = 1.15, cex = 1.45, show = inherits( obj, "Lexis" ), show.Y = show, scale.Y = 1, digits.Y = 1, show.BE = FALSE, BE.sep = c("",""," ",""), show.D = show, scale.D = FALSE, digits.D = as.numeric(as.logical(scale.D)), show.R = is.numeric(scale.R), scale.R = 1, digits.R = as.numeric(as.logical(scale.R)), DR.sep = if( show.D ) c("\n(",")") else c("",""), eq.wd = TRUE, eq.ht = TRUE, wd, ht, subset = NULL, exclude = NULL, font = 2, lwd = 2, col.txt = par("fg"), col.border = col.txt, col.bg = "transparent", col.arr = par("fg"), lwd.arr = 2, font.arr = 2, pos.arr = 0.45, txt.arr = NULL, col.txt.arr = col.arr, offset.arr = 2, ... ) \method{boxes}{matrix}( obj, ... ) \method{boxes}{MS}( obj, sub.st, sub.tr, cex=1.5, ... ) fillarr( x1, y1, x2, y2, gap=2, fr=0.8, angle=17, lwd=2, length=par("pin")[1]/30, ... ) } \arguments{ \item{txt}{Text to be placed inside the box.} \item{x}{x-coordinate of center of box.} \item{y}{y-coordinate of center of box.} \item{wd}{width of boxes in percentage of the plot width.} \item{ht}{height of boxes in percentage of the plot height.} \item{font}{Font for the text. Defaults to 2 (=bold).} \item{lwd}{Line width of the boxborders.} \item{col.txt}{Color for the text in boxes.} \item{col.border}{Color of the box border.} \item{col.bg}{Background color for the interior of the box.} \item{\dots}{Arguments to be passed on to the call of other functions.} \item{cwd}{Width of the lines in the cross.} \item{col.cross}{Color of the cross.} \item{b1}{Coordinates of the "from" box. A vector with 4 components, \code{x}, \code{y}, \code{w}, \code{h}.} \item{b2}{Coordinates of the "to" box; like \code{b1}.} \item{offset}{Logical. Should the arrow be offset a bit to the left.} \item{pos}{Numerical between 0 and 1, determines the position of the point on the arrow which is returned.} \item{obj}{A \code{\link{Lexis}} object or a transition matrix; that is a square matrix indexed by state in both dimensions, and the \eqn{(i,j)}th entry different from \code{NA} if a transition \eqn{i} to \eqn{j} can occur. If \code{show.D=TRUE}, the arrows between states are annotated by these numbers. If \code{show.Y=TRUE}, the boxes representing states are annotated by the numbers in the diagonal of \code{obj}. For \code{boxes.matrix} \code{obj} is a matrix and for \code{boxes.MS}, \code{obj} is an \code{MS.boxes} object (see below).} \item{boxpos}{If \code{TRUE} the boxes are positioned equidistantly on a circle, if \code{FALSE} (the default) you are queried to click on the screen for the positions. This argument can also be a named list with elements \code{x} and \code{y}, both numerical vectors, giving the centers of the boxes.} \item{wmult}{Multiplier for the width of the box relative to the width of the text in the box.} \item{hmult}{Multiplier for the height of the box relative to the height of the text in the box.} \item{cex}{Character expansion for text in the box.} \item{show}{Should person-years and transitions be put in the plot. Ignored if \code{obj} is not a \code{Lexis} object.} \item{show.Y}{If logical: Should person-years be put in the boxes. If numeric: Numbers to put in boxes.} \item{scale.Y}{What scale should be used for annotation of person-years.} \item{digits.Y}{How many digits after the decimal point should be used for the person-years.} \item{show.BE}{Logical. Should number of persons beginning resp. ending follow up in each state be shown?} \item{BE.sep}{Character vector of length 4, used for annotation of the number of persons beginning and ending in each state: 1st elemet precedes no. beginning, 2nd trails it, 3rd precedes the no. ending (defaults to 8 spaces), and the 4th trails the no. ending.} \item{show.D}{Should no. transitions be put alongside the arrows. Ignored if \code{obj} is not a \code{Lexis} object.} \item{scale.D}{Synonumous with \code{scale.R}, retained for compatability.} \item{digits.D}{Synonumous with \code{digits.R}, retained for compatability.} \item{show.R}{Should the transition rates be shown on the arrows?} \item{scale.R}{If this a scalar, rates instead of no. transitions are printed at the arrows, scaled by \code{scale.R}.} \item{digits.R}{How many digits after the decimal point should be used for the rates.} \item{DR.sep}{Character vector of length 2. If rates are shown, the first element is inserted before and the second after the rate.} \item{eq.wd}{Should boxes all have the same width?} \item{eq.ht}{Should boxes all have the same height?} \item{subset}{Draw only boxes and arrows for a subset of the states. Can be given either as a numerical vector or character vector state names.} \item{exclude}{Exclude states from the plot. The complementary of \code{subset}. Ignored if \code{subset} is given.} \item{col.arr}{Color of the arrows between boxes. A vector of character strings, the arrows are referred to as the row-wise sequence of non-NA elements of the transition matrix. Thus the first ones refer to the transitions out of state 1, in order of states.} \item{lwd.arr}{Line withs of the arrows.} \item{font.arr}{Font of the text annotation the arrows.} \item{pos.arr}{Numerical between 0 and 1, determines the position on the arrows where the text is written.} \item{txt.arr}{Text put on the arrows.} \item{col.txt.arr}{Colors for text on the arrows.} \item{offset.arr}{The amount offset between arrows representing two-way transitions, that is where there are arrows both ways between two boxes.} \item{sub.st}{Subset of the states to be drawn.} \item{sub.tr}{Subset of the transitions to be drawn.} \item{x1}{x-coordinate of the starting point.} \item{y1}{y-coordinate of the starting point.} \item{x2}{x-coordinate of the end point.} \item{y2}{y-coordinate of the end point.} \item{gap}{Length of the gap between the box and the ends of the arrows.} \item{fr}{Length of the arrow as the fraction of the distance between the boxes. Ignored unless given explicitly, in which case any value given for \code{gap} is ignored.} \item{angle}{What angle should the arrow-head have?} \item{length}{Length of the arrow head in inches. Defaults to 1/30 of the physical width of the plot.} } \details{ These functions are designed to facilitate the drawing of multistate models, mainly by automatic calculation of the arrows between boxes. \code{tbox} draws a box with centered text, and returns a vector of location, height and width of the box. This is used when drawing arrows between boxes. \code{dbox} draws a box with a cross, symbolizing a death state. \code{boxarr} draws an arrow between two boxes, making sure it does not intersect the boxes. Only straight lines are drawn. \code{boxes.Lexis} takes as input a Lexis object sets up an empty plot area (with axes 0 to 100 in both directions) and if \code{boxpos=FALSE} (the default) prompts you to click on the locations for the state boxes, and then draws arrows implied by the actual transitions in the \code{Lexis} object. The default is to annotate the transitions with the number of transitions. A transition matrix can also be supplied, in which case the row/column names are used as state names, diagnonal elements taken as person-years, and off-diagnonal elements as number of transitions. This also works for \code{boxes.matrix}. Optionally returns the R-code reproducing the plot in a file, which can be useful if you want to produce exactly the same plot with differing arrow colors etc. \code{boxarr} draws an arrow between two boxes, on the line connecting the two box centers. The \code{offset} argument is used to offset the arrow a bit to the left (as seen in the direction of the arrow) on order to accommodate arrows both ways between boxes. \code{boxarr} returns a named list with elements \code{x}, \code{y} and \code{d}, where the two former give the location of a point on the arrow used for printing (see argument \code{pos}) and the latter is a unit vector in the direction of the arrow, which is used by \code{boxes.Lexis} to position the annotation of arrows with the number of transitions. \code{boxes.MS} re-draws what \code{boxes.Lexis} has done based on the object of class \code{MS} produced by \code{boxes.Lexis}. The point being that the \code{MS} object is easily modifiable, and thus it is a machinery to make variations of the plot with different color annotations etc. \code{fill.arr} is just a utility drawing nicer arrows than the default \code{\link{arrows}} command, basically by using filled arrow-heads; called by \code{boxarr}. } \value{The functions \code{tbox} and \code{dbox} return the location and dimension of the boxes, \code{c(x,y,w,h)}, which are designed to be used as input to the \code{boxarr} function. The \code{boxarr} function returns the coordinates (as a named list with names \code{x} and \code{y}) of a point on the arrow, designated to be used for annotation of the arrow. The function \code{boxes.Lexis} returns an \code{MS} object, a list with five elements: 1) \code{Boxes} - a dataframe with one row per box and columns \code{xx}, \code{yy}, \code{wd}, \code{ht}, \code{font}, \code{lwd}, \code{col.txt}, \code{col.border} and \code{col.bg}, 2) an object \code{State.names} with names of states (possibly an expression, hence not possible to include as a column in \code{Boxes}), 3) a matrix \code{Tmat}, the transition matrix, 4) a data frame, \code{Arrows} with one row per transition and columns: \code{lwd.arr}, \code{col.arr}, \code{pos.arr}, \code{col.txt.arr}, \code{font.arr} and \code{offset.arr} and 5) an object \code{Arrowtext} with names of states (possibly an expression, hence not possible to include as a column in \code{Arrows}) An \code{MS} object is used as input to \code{boxes.MS}, the primary use is to modify selected entries in the \code{MS} object first, e.g. colors, or supply subsetting arguments in order to produce displays that have the same structure, but with different colors etc. } \author{Bendix Carstensen} \examples{ par( mar=c(0,0,0,0), cex=1.5 ) plot( NA, bty="n", xlim=0:1*100, ylim=0:1*100, xaxt="n", yaxt="n", xlab="", ylab="" ) bw <- tbox( "Well" , 10, 60, 22, 10, col.txt="blue" ) bo <- tbox( "other Ca", 45, 80, 22, 10, col.txt="gray" ) bc <- tbox( "Ca" , 45, 60, 22, 10, col.txt="red" ) bd <- tbox( "DM" , 45, 40, 22, 10, col.txt="blue" ) bcd <- tbox( "Ca + DM" , 80, 60, 22, 10, col.txt="gray" ) bdc <- tbox( "DM + Ca" , 80, 40, 22, 10, col.txt="red" ) boxarr( bw, bo , col=gray(0.7), lwd=3 ) # Note the argument adj= can takes values outside (0,1) text( boxarr( bw, bc , col="blue", lwd=3 ), expression( lambda[Well] ), col="blue", adj=c(1,-0.2), cex=0.8 ) boxarr( bw, bd , col=gray(0.7) , lwd=3 ) boxarr( bc, bcd, col=gray(0.7) , lwd=3 ) text( boxarr( bd, bdc, col="blue", lwd=3 ), expression( lambda[DM] ), col="blue", adj=c(1.1,-0.2), cex=0.8 ) # Set up a transition matrix allowing recovery tm <- rbind( c(NA,1,1), c(1,NA,1), c(NA,NA,NA) ) rownames(tm) <- colnames(tm) <- c("Cancer","Recurrence","Dead") tm boxes.matrix( tm, boxpos=TRUE ) # Illustrate texting of arrows boxes.Lexis( tm, boxpos=TRUE, txt.arr=c("en","to","tre","fire") ) zz <- boxes( tm, boxpos=TRUE, txt.arr=c(expression(lambda[C]), expression(mu[C]), "recovery", expression(mu[R]) ) ) # Change color of a box zz$Boxes[3,c("col.bg","col.border")] <- "green" boxes( zz ) # Set up a Lexis object data(DMlate) str(DMlate) dml <- Lexis( entry=list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit=list(Per=dox), exit.status=factor(!is.na(dodth),labels=c("DM","Dead")), data=DMlate[1:1000,] ) # Cut follow-up at Insulin dmi <- cutLexis( dml, cut=dml$doins, new.state="Ins", pre="DM" ) summary( dmi ) boxes( dmi, boxpos=TRUE ) boxes( dmi, boxpos=TRUE, show.BE=TRUE ) boxes( dmi, boxpos=TRUE, show.BE="nz" ) boxes( dmi, boxpos=TRUE, show.BE="nz", BE.sep=c("In:"," Out:","") ) # Set up a bogus recovery date just to illustrate two-way transitions dmi$dorec <- dmi$doins + runif(nrow(dmi),0.5,10) dmi$dorec[dmi$dorec>dmi$dox] <- NA dmR <- cutLexis( dmi, cut=dmi$dorec, new.state="DM", pre="Ins" ) summary( dmR ) boxes( dmR, boxpos=TRUE ) boxes( dmR, boxpos=TRUE, show.D=FALSE ) boxes( dmR, boxpos=TRUE, show.D=FALSE, show.Y=FALSE ) boxes( dmR, boxpos=TRUE, scale.R=1000 ) MSobj <- boxes( dmR, boxpos=TRUE, scale.R=1000, show.D=FALSE ) MSobj <- boxes( dmR, boxpos=TRUE, scale.R=1000, DR.sep=c(" (",")") ) class( MSobj ) boxes( MSobj ) MSobj$Boxes[1,c("col.txt","col.border")] <- "red" MSobj$Arrows[1:2,"col.arr"] <- "red" boxes( MSobj ) } \seealso{ \code{\link{tmat.Lexis}} } \keyword{survival} \keyword{hplot} \keyword{iplot} Epi/man/plotEst.Rd0000644000175100001440000001057512531361107013510 0ustar hornikusers\name{plotEst} \alias{plotEst} \alias{pointsEst} \alias{linesEst} \title{ Plot estimates with confidence limits (forest plot) } \description{ Plots parameter estimates with confidence intervals, annotated with parameter names. A dot is plotted at the estimate and a horizontal line extending from the lower to the upper limit is superimposed. } \usage{ plotEst( ests, y = dim(ests)[1]:1, txt = rownames(ests), txtpos = y, ylim = range(y)-c(0.5,0), xlab = "", xtic = nice(ests[!is.na(ests)], log = xlog), xlim = range( xtic ), xlog = FALSE, pch = 16, cex = 1, lwd = 2, col = "black", col.txt = "black", font.txt = 1, col.lines = col, col.points = col, vref = NULL, grid = FALSE, col.grid = gray(0.9), restore.par = TRUE, ... ) linesEst( ests, y = dim(ests)[1]:1, pch = 16, cex = 1, lwd = 2, col="black", col.lines=col, col.points=col, ... ) pointsEst( ests, y = dim(ests)[1]:1, pch = 16, cex = 1, lwd = 2, col="black", col.lines=col, col.points=col, ... ) } \arguments{ \item{ests}{Matrix with three columns: Estimate, lower limit, upper limit. If a model object is supplied, \code{\link{ci.lin}} is invoked for this object first.} \item{y}{Vertical position of the lines.} \item{txt}{Annotation of the estimates. Either a character vector or an expression vector.} \item{txtpos}{Vertical position of the text. Defaults to \code{y}.} \item{ylim}{Extent of the vertical axis.} \item{xlab}{Annotation of the horizontal axis.} \item{xtic}{Location of tickmarks on the x-axis.} \item{xlim}{Extent of the x-axis.} \item{xlog}{Should the x-axis be logarithmic?} \item{pch}{What symbol should be used?} \item{cex}{Expansion of the symbol.} \item{col}{Colour of the points and lines.} \item{col.txt}{Colour of the text annotating the estimates.} \item{font.txt}{Font for the text annotating the estimates.} \item{col.lines}{Colour of the lines.} \item{col.points}{Colour of the symbol.} \item{lwd}{Thickness of the lines.} \item{vref}{Where should vertical reference line(s) be drawn?} \item{grid}{If TRUE, vertical gridlines are drawn at the tickmarks. If a numerical vector is given vertical lines are drawn at \code{grid}.} \item{col.grid}{Colour of the vertical gridlines} \item{restore.par}{Should the graphics parameters be restored? If set to \code{FALSE} the coordinate system will still be available for additional plotting, and \code{par("mai")} will still have the very large value set in order to make room for the labelling of the estimates.} \item{...}{Arguments passed on to \code{ci.lin} when a model object is supplied as \code{ests}.} } \details{ \code{plotEst} makes a news plot, whereas \code{linesEst} and \code{pointsEst} (identical functions) adds to an existing plot. If a model object of class \code{"glm"}, \code{"coxph"}, \code{"clogistic"} or \code{"gnlm"} is supplied the argument \code{xlog} defaults to \code{TRUE}, and exponentiated estimates are extracted by default. } \value{ NULL } \author{ Bendix Carstensen, \email{bxc@steno.dk}, \url{http://BendixCarstensen.com}} \seealso{ ci.lin } \examples{ # Bogus data and a linear model f <- factor( sample( letters[1:5], 100, replace=TRUE ) ) x <- rnorm( 100 ) y <- 5 + 2 * as.integer( f ) + 0.8 * x + rnorm(100) * 2 m1 <- lm( y ~ f ) # Produce some confidence intervals for contrast to first level ( cf <- ci.lin( m1, subset=-1 )[,-(2:4)] ) # Plots with increasing amounts of bells and whistles par( mfcol=c(3,2), mar=c(3,3,2,1) ) plotEst( cf ) plotEst( cf, grid=TRUE, cex=2, lwd=3 ) plotEst( cf, grid=TRUE, cex=2, col.points="red", col.lines="green" ) plotEst( cf, grid=TRUE, cex=2, col.points="red", col.lines="green", xlog=TRUE, xtic=c(1:8), xlim=c(0.8,6) ) rownames( cf )[1] <- "Contrast to fa:\n fb" plotEst( cf, grid=TRUE, cex=2, col.points=rainbow(4), col.lines=rainbow(4), vref=1 ) # etxt <- expression("Plain text, qouted", "combined with maths:"*sqrt(a)*phi[c], f^d*" Hb"*A[1][c], eff^e*" kg/"*m^2) plotEst( cf, txt=etxt, grid=TRUE, cex=2, col.points=rainbow(4), col.lines =rainbow(4), vref=1 ) } \keyword{hplot} \keyword{models} Epi/man/foreign.Lexis.Rd0000644000175100001440000000610212531361107014561 0ustar hornikusers\name{foreign.Lexis} \Rdversion{1.1} \alias{msdata} \alias{msdata.Lexis} \alias{etm} \alias{etm.Lexis} \title{Create a data structures suitable for use with packages mstate, etm. } \description{ The \code{mstate} package requires input in the form of a stacked dataset with specific variable names. This is provided by \code{msdata.Lexis}. The resulting dataframe contains the same information as the result of a call to \code{\link{stack.Lexis}}. The \code{etm} package requires input (almost) in the form of a \code{Lexis} object, but with specific column names etc. This is provided by \code{etm.Lexis}. } \usage{ msdata(obj, ...) \method{msdata}{Lexis}(obj, time.scale = timeScales(obj)[1], ... ) \method{etm}{Lexis}( obj, time.scale = timeScales(obj)[1], cens.name = "cens", s = 0, t = "last", covariance = TRUE, delta.na = TRUE, ... ) } \arguments{ \item{obj}{A \code{\link{Lexis}} object.} \item{time.scale}{Name or number of timescale in the \code{Lexis} object.} \item{cens.name}{Name of the code for censoring used by \code{etm}. It is only necessary to change this if one of the states in the \code{Lexis} object has name "\code{cens}".} \item{s}{Passed on to \code{etm}.} \item{t}{Passed on to \code{etm}.} \item{covariance}{Passed on to \code{etm}.} \item{delta.na}{Passed on to \code{etm}.} \item{\dots}{Further arguments.} } \value{ \code{msdata.Lexis} returns a dataframe with the \code{Lexis} specific variables stripped, and with the following added: \code{id}, \code{Tstart}, \code{Tstop}, \code{from}, \code{to}, \code{trans}, \code{status}, which are used in the \code{mstate} package. \code{etm.Lexis} transforms the \code{Lexis} object into a dataframe suitable for analysis by the function \code{etm} from the \code{etm} package, and actually calls this function, so returns an object of class \code{etm}. } \author{ Bendix Carstensen, \email{bxc@steno.dk}, \url{http://BendixCarstensen.com} } \examples{ data(DMlate) str(DMlate) dml <- Lexis( entry = list(Per=dodm,Age=dodm-dobth,DMdur=0), exit = list(Per=dox), exit.status = factor(!is.na(dodth),labels=c("DM","Dead")), data = DMlate[1:1000,] ) dmi <- cutLexis( dml, cut=dml$doins, new.state="Ins", pre="DM" ) summary( dmi ) # Use the interface to the mstate package if( require(mstate) ) { ms.dmi <- msdata.Lexis( dmi ) # Check that all the transitions and person-years got across. with( ms.dmi, rbind( table(status,trans), tapply(Tstop-Tstart,trans,sum) ) ) } # Use the etm package directly with a Lexis object if( require(etm) ) { dmi <- subset(dmi,lex.id<1000) etm.D <- etm.Lexis( dmi, time.scale=3 ) plot( etm.D, col=rainbow(5), lwd=2, lty=1, xlab="DM duration" ) } } \seealso{ \code{\link{stack.Lexis}}, \code{\link[mstate:msprep]{msdata}}, \code{\link[etm:etm]{etm}} } \keyword{survival} Epi/man/splitLexis.Rd0000644000175100001440000000667112531361107014220 0ustar hornikusers\name{splitLexis} \alias{splitLexis} \title{Split follow-up time in a Lexis object} \description{ The \code{splitLexis} function divides each row of a \code{Lexis} object into disjoint follow-up intervals according to the supplied break points. } \usage{ splitLexis(lex, breaks, time.scale, tol=.Machine$double.eps^0.5) } \arguments{ \item{lex}{an object of class \code{Lexis}} \item{breaks}{a vector of break points} \item{time.scale}{the name or number of the time scale to be split} \item{tol}{numeric value >= 0. Intervals shorter than this value are dropped} } \value{ An object of class \code{Lexis} with multiple rows for each row of the argument \code{lex}. Each row of the new \code{Lexis} object contains the part of the follow-up interval that falls inside one of the time bands defined by the break points. The variables representing the various time scales, are appropriately updated in the new \code{Lexis} object. The entry and exit status variables are also updated according to the rule that the entry status is retained until the end of follow-up. All other variables are considered to represent variables that are constant in time, and so are replicated across all rows having the same id value. } \note{ The \code{splitLexis()} function divides follow-up time into intervals using breakpoints that are common to all rows of the \code{Lexis} object. To split a \code{Lexis} object by break points that are unique to each row, use the \code{cut.Lexis} function. } \author{Martyn Plummer} \examples{ # A small bogus cohort xcoh <- structure( list( id = c("A", "B", "C"), birth = c("14/07/1952", "01/04/1954", "10/06/1987"), entry = c("04/08/1965", "08/09/1972", "23/12/1991"), exit = c("27/06/1997", "23/05/1995", "24/07/1998"), fail = c(1, 0, 1) ), .Names = c("id", "birth", "entry", "exit", "fail"), row.names = c("1", "2", "3"), class = "data.frame" ) # Convert the character dates into numerical variables (fractional years) xcoh$bt <- cal.yr( xcoh$birth, format="\%d/\%m/\%Y" ) xcoh$en <- cal.yr( xcoh$entry, format="\%d/\%m/\%Y" ) xcoh$ex <- cal.yr( xcoh$exit , format="\%d/\%m/\%Y" ) # See how it looks xcoh # Define as Lexis object with timescales calendar time and age Lcoh <- Lexis( entry = list( per=en ), exit = list( per=ex, age=ex-bt ), exit.status = fail, data = xcoh ) # Default plot of follow-up plot( Lcoh ) # With a grid and deaths as endpoints plot( Lcoh, grid=0:10*10, col="black" ) points( Lcoh, pch=c(NA,16)[Lcoh$lex.Xst+1] ) # With a lot of bells and whistles: plot( Lcoh, grid=0:20*5, col="black", xaxs="i", yaxs="i", xlim=c(1960,2010), ylim=c(0,50), lwd=3, las=1 ) points( Lcoh, pch=c(NA,16)[Lcoh$lex.Xst+1], col="red", cex=1.5 ) # Split time along two time-axes ( x2 <- splitLexis( Lcoh, breaks = seq(1900,2000,5), time.scale="per") ) ( x2 <- splitLexis( x2, breaks = seq(0,80,5), time.scale="age" ) ) str( x2 ) # Tabulate the cases and the person-years summary( x2 ) tapply( status(x2,"exit")==1, list( timeBand(x2,"age","left"), timeBand(x2,"per","left") ), sum ) tapply( dur(x2), list( timeBand(x2,"age","left"), timeBand(x2,"per","left") ), sum ) } \seealso{\code{\link{timeBand}}, \code{\link{cutLexis}}, \code{\link{summary.Lexis}}} \keyword{manip} Epi/man/cal.yr.Rd0000644000175100001440000000555112531361107013244 0ustar hornikusers\name{cal.yr} \alias{cal.yr} \alias{as.Date.cal.yr} \title{ Functions to convert character, factor and various date objects into a number, and vice versa. } \description{ Dates are converted to a numerical value, giving the calendar year as a fractional number. 1 January 1970 is converted to 1970.0, and other dates are converted by assuming that years are all 365.25 days long, so inaccuracies may arise, for example, 1 Jan 2000 is converted to 1999.999. Differences between converted values will be 1/365.25 of the difference between corresponding \code{\link{Date}} objects. } \usage{ cal.yr( x, format="\%Y-\%m-\%d", wh=NULL ) \method{as.Date}{cal.yr}( x, ... ) } \arguments{ \item{x}{A factor or character vector, representing a date in format \code{format}, or an object of class \code{\link{Date}}, \code{\link{POSIXlt}}, \code{\link{POSIXct}}, \code{\link{date}}, \code{dates} or \code{chron} (the latter two requires the \code{chron} package). If \code{x} is a data frame, all variables in the data-frame which are of one the classes mentioned are converted to class \code{cal.yr}. See arguemt \code{wh}, though.} \item{format}{Format of the date values if \code{x} is factor or character. If this argument is supplied and \code{x} is a datafame, all character variables are converted to class \code{cal.yr}. Factors in the dataframe will be ignored.} \item{wh}{Indices of the variables to convert if \code{x} is a data frame. Can be either a numerical or character vector.} \item{...}{Arguments passed on from other methods.} } \value{ \code{cal.yr} returns a numerical vector of the same length as \code{x}, of class \code{c("cal.yr","numeric")}. If \code{x} is a data frame a dataframe with some of the columns converted to class \code{"cal.yr"} is returned. \code{as.Date.cal.yr} returns a \code{\link{Date}} object. } \author{ Bendix Carstensen, Steno Diabetes Center \& Dept. of Biostatistics, University of Copenhagen, \email{bxc@steno.dk}, \url{http://BendixCarstensen.com} } \seealso{ \code{\link{DateTimeClasses}}, \code{\link{Date}} } \examples{ # Character vector of dates: birth <- c("14/07/1852","01/04/1954","10/06/1987","16/05/1990", "12/11/1980","01/01/1997","01/01/1998","01/01/1999") # Proper conversion to class "Date": birth.dat <- as.Date( birth, format="\%d/\%m/\%Y" ) # Converson of character to class "cal.yr" bt.yr <- cal.yr( birth, format="\%d/\%m/\%Y" ) # Back to class "Date": bt.dat <- as.Date( bt.yr ) # Numerical calculation of days since 1.1.1970: days <- Days <- (bt.yr-1970)*365.25 # Blunt assignment of class: class( Days ) <- "Date" # Then data.frame() to get readable output of results: data.frame( birth, birth.dat, bt.yr, bt.dat, days, Days, round(Days) ) } \keyword{manip} \keyword{chron} Epi/man/nickel.Rd0000644000175100001440000000233112531361107013312 0ustar hornikusers\name{nickel} \alias{nickel} \docType{data} \title{A Cohort of Nickel Smelters in South Wales} \description{ The \code{nickel} data frame has 679 rows and 7 columns. The data concern a cohort of nickel smelting workers in South Wales and are taken from Breslow and Day, Volume 2. For comparison purposes, England and Wales mortality rates (per 1,000,000 per annum) from lung cancer (ICDs 162 and 163), nasal cancer (ICD 160), and all causes, by age group and calendar period, are supplied in the dataset \code{\link{ewrates}}. } \format{ This data frame contains the following columns: \tabular{rl}{ \code{id}: \tab Subject identifier (numeric) \cr \code{icd}: \tab ICD cause of death if dead, 0 otherwise (numeric) \cr \code{exposure}: \tab Exposure index for workplace (numeric) \cr \code{dob}: \tab Date of birth (numeric) \cr \code{age1st}: \tab Age at first exposure (numeric) \cr \code{agein}: \tab Age at start of follow-up (numeric) \cr \code{ageout}: \tab Age at end of follow-up (numeric) \cr } } \source{ Breslow NE, and Day N, Statistical Methods in Cancer Research. Volume II: The Design and Analysis of Cohort Studies. IARC Scientific Publications, IARC:Lyon, 1987. } \examples{ data(nickel) str(nickel) } \keyword{datasets} Epi/man/time.band.Rd0000644000175100001440000000450112531361107013707 0ustar hornikusers\name{timeBand} \alias{timeBand} \alias{breaks} \title{Extract time band data from a split Lexis object} \description{ The break points of a \code{Lexis} object (created by a call to \code{splitLexis}) divide the follow-up intervals into time bands along a given time scale. The \code{breaks} function returns the break points, for a given time scale, and the \code{timeBand} classifies each row (=follow-up interval) into one of the time bands. } \usage{ timeBand(lex, time.scale, type="integer") breaks(lex, time.scale) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{lex}{an object of class \code{Lexis}} \item{time.scale}{a character or integer vector of length 1 identifying the time scale of interest} \item{type}{a string that determines how the time bands are labelled. See Details below} } \details{ Time bands may be labelled in various ways according to the \code{type} argument. The permitted values of the \code{type} argument, and the corresponding return values are: \describe{ \item{"integer"}{a numeric vector with integer codes starting from 0.} \item{"factor"}{a factor (unordered) with labels "(left,right]"} \item{"left"}{the left-hand limit of the time band} \item{"middle"}{the midpoint of the time band} \item{"right"}{the right-hand limit of the time band} } } \value{ The \code{breaks} function returns a vector of break points for the \code{Lexis} object, or NULL if no break points have been defined by a call to \code{splitLexis}. The \code{timeBand} function returns a numeric vector or factor, depending on the value of the \code{type} argument. } \author{Martyn Plummer} \note{ A newly created \code{Lexis} object has no break points defined. In this case, \code{breaks} will return NULL, and \code{timeBand} will a vector of zeros. } \examples{ data(diet) diet <- cal.yr(diet) diet.lex <- Lexis(entry=list(period=doe), exit=list(period=dox, age=dox-dob), exit.status=chd, data=diet) diet.split <- splitLexis(diet.lex, breaks=seq(40,70,5), "age" ) age.left <- timeBand(diet.split, "age", "left") table(age.left) age.fact <- timeBand(diet.split, "age", "factor") table(age.fact) age.mid <- timeBand(diet.split, "age", "mid") table(age.mid) } \seealso{\code{\link{Lexis}}} \keyword{attribute} Epi/man/Termplot.Rd0000644000175100001440000000643612562641471013676 0ustar hornikusers\name{Termplot} \alias{Termplot} \title{ A wrapper for \code{termplot} that optionally (but by default) exponentiates terms, and plot them on a common log-scale. Also scales x-axes to the same physical scale. } \description{ The function uses \code{\link{termplot}} to extract terms from a model with, say, spline, terms, including the standard errors, computes confidence intervals and transform these to the rate / rate-ratio scale. Thus the default use is for models on the log-scale such as Poisson-regression models. The function produces a plot with panels side-by-side, one panel per term, and returns the } \usage{ Termplot( obj, plot = TRUE, xlab = NULL, ylab = NULL, xeq = TRUE, yshr = 1, alpha = 0.05, terms = NULL, max.pt = NULL ) } \arguments{ \item{obj}{An object with a \code{terms}-method --- for details the the documentation for \code{\link{termplot}}. } \item{plot}{Should a plot be produced?} \item{xlab}{Labels for the \code{x}-axes. Defaults to the names of the terms.} \item{ylab}{Labels for the \code{x}-axes. Defaults to blank.} \item{xeq}{Should the units all all plots have the same physical scale for the \code{x}-axes).} \item{yshr}{Shrinking of \code{y}-axis. By default, the \code{y}-axes have an extent that accommodates the entire range of confidence intervals. This is a shrinking parameter for the \code{y}-axes, setting it to less than 1 will lose a bit of the confidence limits on some of the panels.} \item{alpha}{1 minus the confidence level for computing confidence intervals} \item{terms}{Which terms should be reported. Passed on to \code{\link{termplot}} and eventually \code{\link{predict}}.} \item{max.pt}{The maximal number of points in which to report the terms. If \code{NULL} all unique points from the analysis dataset are reported for each term (this is a feature of \code{\link{termplot}}).} } \value{ A list with one component per term in the model object \code{obj}, each component is a 4-column matrix with $x$ as the first column, and 3 columns with estimae and lower and upper confidence limit. } \author{ Bendix Cartensen } \seealso{ \code{\link{Ns}}, \code{termplot} } \examples{ # Get the diabetes data and set up as Lexis object data(DMlate) DMlate <- DMlate[sample(1:nrow(DMlate),500),] dml <- Lexis( entry = list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit = list(Per=dox), exit.status = factor(!is.na(dodth),labels=c("DM","Dead")), data = DMlate ) # Split in 1-year age intervals dms <- splitLexis( dml, time.scale="Age", breaks=0:100 ) # Model with 6 knots for both age and period n.kn <- 6 # Model age-specific rates with period referenced to 2004 ( a.kn <- with( subset(dms,lex.Xst=="Dead"), quantile( Age+lex.dur, probs=(1:n.kn-0.5)/n.kn ) ) ) ( p.kn <- with( subset(dms,lex.Xst=="Dead"), quantile( Per+lex.dur, probs=(1:n.kn-0.5)/n.kn ) ) ) m2 <- glm( lex.Xst=="Dead" ~ -1 + Ns( Age, kn=a.kn, intercept=TRUE ) + Ns( Per, kn=p.kn, ref=2004 ), offset = log( lex.dur ), family=poisson, data=dms ) # Finally we can plot the two effects: Termplot( m2, yshr=0.9 ) } \keyword{hplot} Epi/man/diet.Rd0000644000175100001440000000474512531361107013005 0ustar hornikusers\name{diet} \alias{diet} \docType{data} \title{Diet and heart data} \description{ The \code{diet} data frame has 337 rows and 14 columns. The data concern a subsample of subjects drawn from larger cohort studies of the incidence of coronary heart disease (CHD). These subjects had all completed a 7-day weighed dietary survey while taking part in validation studies of dietary questionnaire methods. Upon the closure of the MRC Social Medicine Unit, from where these studies were directed, it was found that 46 CHD events had occurred in this group, thus allowing a serendipitous study of the relationship between diet and the incidence of CHD. } \format{ This data frame contains the following columns: \tabular{rl}{ \code{id}: \tab subject identifier, a numeric vector. \cr \code{doe}: \tab date of entry into follow-up study, a \code{\link{Date}} variable. \cr \code{dox}: \tab date of exit from the follow-up study, a \code{\link{Date}} variable. \cr \code{dob}: \tab date of birth, a \code{\link{Date}} variable. \cr \code{y}: \tab - number of years at risk, a numeric vector. \cr \code{fail}: \tab status on exit, a numeric vector (codes 1, 3, 11, and 13 represent CHD events) \cr \code{job}: \tab occupation, a factor with levels \code{Driver} \code{Conductor} \code{Bank worker} \cr \code{month}: \tab month of dietary survey, a numeric vector \cr \code{energy}: \tab total energy intake (KCal per day/100), a numeric vector \cr \code{height}: \tab (cm), a numeric vector \cr \code{weight}: \tab (kg), a numeric vector \cr \code{fat}: \tab fat intake (g/day), a numeric vector \cr \code{fibre}: \tab dietary fibre intake (g/day), a numeric vector \cr \code{energy.grp}: \tab high daily energy intake, a factor with levels \code{<=2750 KCal} \code{>2750 KCal} \cr \code{chd}: \tab CHD event, a numeric vector (1=CHD event, 0=no event) \cr } } \source{ The data are described and used extensively by Clayton and Hills, Statistical Models in Epidemiology, Oxford University Press, Oxford:1993. They were rescued from destruction by David Clayton and reentered from paper printouts. } \examples{ data(diet) # Illustrate the follow-up in a Lexis diagram Lexis.diagram( age=c(30,75), date=c(1965,1990), entry.date=cal.yr(doe), exit.date=cal.yr(dox), birth.date=cal.yr(dob), fail=(fail>0), pch.fail=c(NA,16), col.fail=c(NA,"red"), cex.fail=1.0, data=diet ) } \keyword{datasets} Epi/man/ci.pd.Rd0000644000175100001440000000476312531361107013055 0ustar hornikusers\name{ci.pd} \alias{ci.pd} \title{ Compute confidence limits for a difference of two independent proportions. } \description{ The usual formula for the c.i. of at difference of proportions is inaccurate. Newcombe has compared 11 methods and method 10 in his paper looks like a winner. It is implemented here. } \usage{ ci.pd(aa, bb=NULL, cc=NULL, dd=NULL, method = "Nc", alpha = 0.05, conf.level=0.95, digits = 3, print = TRUE, detail.labs = FALSE ) } \arguments{ \item{aa}{Numeric vector of successes in sample 1. Can also be a matrix or array (see details).} \item{bb}{Successes in sample 2.} \item{cc}{Failures in sample 1.} \item{dd}{Failures in sample 2.} \item{method}{Method to use for calculation of confidence interval, see "Details".} \item{alpha}{Significance level} \item{conf.level}{Confidence level} \item{print}{Should an account of the two by two table be printed.} \item{digits}{How many digits should the result be rounded to if printed.} \item{detail.labs}{Should the computing of probability differences be reported in the labels.} } \details{ Implements method 10 from Newcombe(1998) (method="Nc") or from Agresti & Caffo(2000) (method="AC"). \code{aa}, \code{bb}, \code{cc} and \code{dd} can be vectors. If \code{aa} is a matrix, the elements \code{[1:2,1:2]} are used, with successes \code{aa[,1:2]}. If \code{aa} is a three-way table or array, the elements \code{aa[1:2,1:2,]} are used. } \value{ A matrix with three columns: probability difference, lower and upper limit. The number of rows equals the length of the vectors \code{aa}, \code{bb}, \code{cc} and \code{dd} or, if \code{aa} is a 3-way matrix, \code{dim(aa)[3]}. } \references{ RG Newcombe: Interval estimation for the difference between independent proportions. Comparison of eleven methods. Statistics in Medicine, 17, pp. 873-890, 1998. A Agresti & B Caffo: Simple and effective confidence intervals for proportions and differences of proportions result from adding two successes and two failures. The American Statistician, 54(4), pp. 280-288, 2000. } \author{ Bendix Carstensen, Esa Laara. \url{http://BendixCarstensen.com} } \seealso{ \code{\link{twoby2}}, \code{\link{binom.test}} } \examples{ ( a <- matrix( sample( 10:40, 4 ), 2, 2 ) ) ci.pd( a ) twoby2( t(a) ) prop.test( t(a) ) ( A <- array( sample( 10:40, 20 ), dim=c(2,2,5) ) ) ci.pd( A ) ci.pd( A, detail.labs=TRUE, digits=3 ) } \keyword{distribution} \keyword{htest} Epi/man/subset.Lexis.Rd0000644000175100001440000000173112531361107014440 0ustar hornikusers\name{subset.Lexis} \alias{subset.Lexis} \alias{subset.stacked.Lexis} \title{Subsetting Lexis (and stacked.Lexis) objects} \description{ Return subsets of Lexis objects which meet conditions } \usage{ \method{subset}{Lexis}(x, ...) \method{subset}{stacked.Lexis}(x, ...) } \arguments{ \item{x}{an object of class \code{Lexis}} \item{\dots}{additional arguments to be passed to \code{subset.data.frame}. This will normally be some logical expression selecting a subset of the rows. For details see \code{\link{subset.data.frame}}.} } \details{ The subset method for \code{Lexis} objects works exactly as the method for data frames. The method for \code{stacked.Lexis} objects also shrinks the set of levels for \code{lex.Cst} and \code{lex.Xst} to those actually occurring in the data frame. } \value{ A \code{Lexis} object with selected rows and columns. } \author{Martyn Plummer} \seealso{\code{\link{Lexis}}, \code{\link{merge.Lexis}}} \keyword{manip} Epi/man/ewrates.Rd0000644000175100001440000000172212531361107013522 0ustar hornikusers\name{ewrates} \alias{ewrates} \docType{data} \title{Rates of lung and nasal cancer mortality, and total mortality.} \description{ England and Wales mortality rates from lung cancer, nasal cancer, and all causes 1936 - 1980. The 1936 rates are repeated as 1931 rates in order to accomodate follow up for the \code{\link{nickel}} study. } \usage{data(ewrates)} \format{ A data frame with 150 observations on the following 5 variables: \tabular{rl}{ \code{id}: \tab Subject identifier (numeric) \cr \code{year} \tab Calendar period, 1931: 1931--35, 1936: 1936--40, \ldots \cr \code{age} \tab Age class: 10: 10--14, 15:15--19, \ldots \cr \code{lung} \tab Lung cancer mortality rate per 1,000,000 py. \cr \code{nasal} \tab Nasal cancer mortality rate per 1,000,000 py. \cr \code{other} \tab All cause mortality rate per 1,000,000 py. } } \source{ From Breslow and Day, Vol II, Appendix IX. } \examples{ data(ewrates) str(ewrates) } \keyword{datasets} Epi/man/start.Lexis.Rd0000644000175100001440000000257312531361107014275 0ustar hornikusers\name{start.Lexis} \alias{entry} \alias{exit} \alias{status} \alias{dur} \title{Time series methods for Lexis objects} \description{ Extract the entry time, exit time, status or duration of follow-up from a \code{Lexis} object. } \usage{ entry(x, time.scale = NULL, by.id=FALSE) exit(x, time.scale = NULL, by.id=FALSE) status(x, at="exit" , by.id=FALSE) dur(x, by.id=FALSE) } \arguments{ \item{x}{an object of class \code{Lexis}.} \item{time.scale}{a string or integer indicating the time scale. If omitted, all times scales are used.} \item{by.id}{Logical, if \code{TRUE}, only one record per unique value of \code{lex.id} is returned; either the first, the last or for \code{dur}, the sum of \code{lex.dur}. If \code{TRUE}, the returned object have the \code{lex.id} as (row)nmes attribute.} \item{at}{string indicating the time point(s) at which status is to be measured.} } \value{ The \code{entry} and \code{exit} functions return a vector of entry times and exit times, respectively, on the requested time scale. If multiple time scales are requested, then a matrix is returned. The \code{status} function returns a vector giving the status at entry or exit and \code{dur} returns a vector with the lengths of the follow-up intervals. } \author{Martyn Plummer} \seealso{\code{\link{Lexis}}} \keyword{survival} \keyword{ts} Epi/man/merge.Lexis.Rd0000644000175100001440000000244612531361107014236 0ustar hornikusers\name{merge.Lexis} \alias{merge.Lexis} \title{Merge a Lexis object with a data frame} \description{ Merge additional variables from a data frame into a Lexis object. } \usage{ \method{merge}{Lexis}(x, y, id, by, ...) } \arguments{ \item{x}{an object of class \code{Lexis}} \item{y}{a data frame} \item{id}{the name of the variable in \code{y} to use for matching against the variable \code{lex.id} in \code{x}. } \item{by}{if matching is not done by id, a vector of variable names common to both \code{x} and \code{y}} \item{...}{optional arguments to be passed to \code{merge.data.frame}} } \details{ A \code{Lexis} object can be considered as an augmented data frame in which some variables are time-dependent variables representing follow-up. The \code{Lexis} function produces a minimal object containing only these time-dependent variables. Additional variables may be added to a \code{Lexis} object using the \code{merge} method. } \value{ A \code{Lexis} object with additional columns taken from the merged data frame. } \author{Martyn Plummer} \note{ The variable given as the \code{by.y} argument must not contain any duplicate values in the data frame \code{y}. } \seealso{\code{\link{merge.data.frame}}, \code{\link{subset.Lexis}}} \keyword{array} \keyword{manip} Epi/man/simLexis.Rd0000644000175100001440000003224112556664146013665 0ustar hornikusers\name{simLexis} \alias{simLexis} \alias{nState} \alias{pState} \alias{plot.pState} \alias{lines.pState} \title{Simulate a Lexis object representing follow-up in a multistate model.} \description{Based on a (pre-)\code{Lexis} object representing persons at given states and times, and full specification of transition intensities between states in the form of models for the transition rates, this function simulates transition times and -types for persons and returns a \code{Lexis} object representing the simulated cohort. The simulation scheme accommodates multiple timescales, including time since entry into an intermediate state, and accepts fitted Poisson models, Cox-models or just a function as specification of rates.} \usage{ simLexis( Tr, init, N = 1, lex.id, t.range = 20, n.int = 101, time.pts = seq(0,t.range,length.out=n.int) ) nState( obj, at, from, time.scale = 1 ) pState( nSt, perm = 1:ncol(nSt) ) \method{plot}{pState}( x, col = rainbow(ncol(x)), border = "transparent", xlab = "Time", ylim = 0:1, ylab = "Probability", ... ) \method{lines}{pState}( x, col = rainbow(ncol(x)), border = "transparent", ... ) } \arguments{ \item{Tr}{A named list of named lists. The names of the list are names of the transient states in the model. Each list element is again a named list. The names of the elements of this inner list are the names of the states reachable from the state with name equal to the list. Elements of the intter lists represent transitions. See details.} \item{init}{A (pre-)\code{\link{Lexis}} object representing the initial state of the persons whose trajectories through the multiple states we want to simulate. Must have an attribute "time.since" --- see details. Duplicate values of \code{lex.id} are not sensible and not accepted.} \item{N}{Numeric. How many persons should be simulated. \code{N} persons with covariate configuration of each row in \code{init} will be simulated. Either a scalar or a vector of length \code{nrow(init)}.} \item{lex.id}{Vector of ids of the simulated persons. Useful when simulating in chunks.} \item{t.range}{Numerical scalar. The range of time over which to compute the cumulative rates when simulating. Simulted times beyond this will result in an obervation censored at \code{t.range} after entry.} \item{n.int}{Number of intervals to use when computing (cumulative) rates.} \item{time.pts}{Numerical vector of times since start. Cumulative rates for transitions are computed at these times after stater and entry state. Simulation is only done till time \code{max(time.pts)} after start, where persons are censored. Must start with 0.} \item{obj}{A \code{Lexis} object.} \item{from}{The point on the time scale \code{time.scale} from which we start counting.} \item{time.scale}{The timescale to which \code{from} refer.} \item{at}{Time points (after \code{from}) where the number of persons in each state is to be computed.} \item{nSt}{A table obtained by \code{nState}.} \item{perm}{A permutation of columns used before cumulating row-wise and taking percentages.} \item{x}{An object of class \code{pState}, e.g. created by \code{pState}.} \item{col}{Colors for filling the areas between curves.} \item{border}{Colors for outline of the areas between curves.} \item{xlab}{Label on x-axis} \item{ylim}{Limits on y-axis} \item{ylab}{Label on y-axis} \item{...}{Further arguments passed on to \code{plot}.} } \details{The simulation command \code{simLexis} is not defined as a method for \code{Lexis} objects, because the input is not a \code{Lexis} object, the \code{Lexis}-like object is merely representing a prevalent population and a specification of which variables that are timescales. The variables \code{lex.dur} and \code{lex.Xst} are ignored (and overwritten) if present. The core input is the list \code{Tr} giving the transitions. The components of \code{Tr} represents the transition intensities between states. The transition from state \code{A} to \code{B}, say, is assumed stored in \code{Tr$A$B}. Thus names of the elements of \code{Tr} are names of transient states, and the names of the elements of each these are the names of states reachable from the corresponding transient state. The transition intensities are assumed modelled by either a glm with Poisson family or a Cox-model. In both cases the timescale(s) in the model must be using the names fo the timescales in a Lexis object representng the follow-up in a cohort, and the risk time must be taken from the variable \code{lex.dur} --- see the example. Alternatively, an element in \code{Tr} could be a function that from a data frame produces transition rates, or specifically cumulative transition rates over intervals of length \code{lex.dur}. The pre-\code{Lexis} object \code{init} must contain values of all variables used in any of the objects in \code{Tr}, as well as all timescales - even those not used in the models. Moreover, the attributes \code{time.scales} and \code{time.since} must be present. The attribute \code{time.since} is a character vector of the same length as \code{time.scales} and an element has value \code{"A"} if the corresponding time scale is defined as "time since entry into state \code{A}", otherwise the value is \code{""}. If not present it will be set to a vector of \code{""}s, which is only OK if no time scales are defined as time since entry to a state. Note that the variables pre-\code{Lexis} object \code{init} must have the same mode and class as in the dataset used for fitting the models --- hence the indexing of rows by brackets in the assignment of values used in the example below - this way the variables have their attributes preserved; using \code{init[,"var"] <-} or \code{init$var <-} replaces the variable, whereas \code{init[1:4,"var"] <-} or \code{init$var[1:4] <-} replaces values only and prevents you from entering non-existing factor levels etc. The function \code{\link{Lexis}} automatically generates an attribute \code{time.since}, and \code{\link{cutLexis}} updates it when new time scales are defined. Hence, the simplest way of defining a initial pre-\code{Lexis} object representing a current state of a (set of) persons to be followed through a multistate model is to take \code{NULL} rows of an existing Lexis object (normally the one used for estimation), and so ensuring that all relevant attributes and state levels are properly defined. See the example code. The prevalence function \code{nState} computes the distribution of individuals in different states at prespecified times. Only sensible for a simulated \code{Lexis} object. The function \code{pState} takes a matrix as output by \code{nState} and computes the row-wise cumulative probabilities across states, and leaves an object of class \code{pState}, suitable for plotting. } \value{\code{simLexis} returns a \code{\link{Lexis}} object representing the experience of a population starting as \code{init} followed through the states according to the transitions in \code{Tr}. The function \code{nState} returns a table of persons classified by states at each of the times in \code{at}. Note that this function can easily produce meaningless results, for example if applied to a \code{Lexis} object not created by simulation. If you apply it to a \code{Lexis} object generated by \code{simLexis}, you must make sure that you start (\code{from}) the point where you started the simulation on the correct timescale, and you will get funny results if you try to tabulate beyond the censoring time for the simulation. The resulting object has class \code{"table"}. The result from using \code{pState} on the result from \code{nState} has class \code{c("pState","matrix")}. } \author{Bendix Carstensen, \url{BendixCarstensen.com}.} \seealso{ \code{\link{Lexis}}, \code{\link{cutLexis}}, \code{\link{splitLexis}} } \examples{ data(DMlate) dml <- Lexis( entry = list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit = list(Per=dox), exit.status = factor(!is.na(dodth),labels=c("DM","Dead")), data = DMlate[runif(nrow(DMlate))<0.1,] ) # Split follow-up at insulin, introduce a new timescale, # and split non-precursor states dmi <- cutLexis( dml, cut = dml$doins, pre = "DM", new.state = "Ins", new.scale = "t.Ins", split.states = TRUE ) # Split the follow in 1-year intervals for modelling Si <- splitLexis( dmi, 0:30/2, "DMdur" ) # Define knots nk <- 4 ( ai.kn <- with( subset(Si,lex.Xst=="Ins"), quantile( Age+lex.dur, probs=(1:nk-0.5)/nk ) ) ) ( ad.kn <- with( subset(Si,lex.Xst=="Dead"), quantile( Age+lex.dur, probs=(1:nk-0.5)/nk ) ) ) ( di.kn <- with( subset(Si,lex.Xst=="Ins"), quantile( DMdur+lex.dur, probs=(1:nk-0.5)/nk ) ) ) ( dd.kn <- with( subset(Si,lex.Xst=="Dead"), quantile( DMdur+lex.dur, probs=(1:nk-0.5)/nk ) ) ) ( td.kn <- with( subset(Si,lex.Xst=="Dead(Ins)"), quantile( t.Ins+lex.dur, probs=(1:nk-0.5)/nk ) ) ) # Fit Poisson models to transition rates library( splines ) DM.Ins <- glm( (lex.Xst=="Ins") ~ Ns( Age , knots=ai.kn ) + Ns( DMdur, knots=di.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="DM") ) DM.Dead <- glm( (lex.Xst=="Dead") ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="DM") ) Ins.Dead <- glm( (lex.Xst=="Dead(Ins)") ~ Ns( Age , knots=ad.kn ) + Ns( DMdur, knots=dd.kn ) + Ns( t.Ins, knots=td.kn ) + I(Per-2000) + sex, family=poisson, offset=log(lex.dur), data = subset(Si,lex.Cst=="Ins") ) # Stuff the models into an object representing the transitions Tr <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = DM.Dead ), "Ins" = list( "Dead(Ins)" = Ins.Dead ) ) lapply( Tr, names ) # Define an initial object - note the combination of "select=" and NULL # which ensures that the relevant attributes from the Lexis object 'Si' # are carried over to 'ini' ( Si[NULL,1:9] will lose essential # attributes ): ini <- subset(Si,select=1:9)[NULL,] ini[1:2,"lex.Cst"] <- "DM" ini[1:2,"Per"] <- 1995 ini[1:2,"Age"] <- 60 ini[1:2,"DMdur"] <- 5 ini[1:2,"sex"] <- c("M","F") str(ini) # Simulate 200 of each sex using the estimated models in Tr simL <- simLexis( Tr, ini, time.pts=seq(0,11,0.5), N=200 ) summary( simL ) # Find the number of persons in each state at a set of times. # Note that the times are shirter than the time-span simulated. nSt <- nState( subset(simL,sex=="M"), at=seq(0,10,0.1), from=1995, time.scale="Per" ) nSt # Show the cumulative prevalences in a different order than that of the # state-level ordering and plot them using all defaults pp <- pState( nSt, perm=c(1,2,4,3) ) head( pp ) plot( pp ) # A more useful set-up of the graph clr <- c("orange2","forestgreen") par( las=1 ) plot( pp, col=clr[c(2,1,1,2)] ) lines( as.numeric(rownames(pp)), pp[,2], lwd=2 ) mtext( "60 year old male, diagnosed 1995", side=3, line=2.5, adj=0 ) mtext( "Survival curve", side=3, line=1.5, adj=0 ) mtext( "DM, no insulin DM, Insulin", side=3, line=0.5, adj=0, col=clr[1] ) mtext( "DM, no insulin", side=3, line=0.5, adj=0, col=clr[2] ) axis( side=4 ) # Using a Cox-model for the mortality rates assuming the two mortality # rates to be proportional: # When we fit a Cox-model, lex.dur must be used in the Surv() function, # and the I() constrction must be used when specifying intermediate # states as covariates, since factors with levels not present in the # data will create NAs in the parameter vector returned by coxph, which # in return will crash the simulation machinery. library( survival ) Cox.Dead <- coxph( Surv( DMdur, DMdur+lex.dur, lex.Xst \%in\% c("Dead(Ins)","Dead")) ~ Ns( Age-DMdur, knots=ad.kn ) + I(lex.Cst=="Ins") + I(Per-2000) + sex, data = Si ) Cr <- list( "DM" = list( "Ins" = DM.Ins, "Dead" = Cox.Dead ), "Ins" = list( "Dead(Ins)" = Cox.Dead ) ) simL <- simLexis( Cr, ini, time.pts=seq(0,11,0.2), N=200 ) summary( simL ) nSt <- nState( subset(simL,sex=="M"), at=seq(0,10,0.2), from=1995, time.scale="Per" ) pp <- pState( nSt, perm=c(1,2,4,3) ) plot( pp ) } \keyword{survival} Epi/man/stattable.funs.Rd0000644000175100001440000000332412531361107015005 0ustar hornikusers\name{stattable.funs} \alias{count} \alias{percent} \alias{ratio} \title{Special functions for use in stat.table} \description{ These functions may be used as \code{contents} arguments to the function \code{stat.table}. They are defined internally in \code{stat.table} and have no independent existence. } \usage{ count(id) ratio(d,y,scale=1, na.rm=TRUE) percent(...) } \arguments{ \item{id}{numeric vector in which identical values identify the same individual.} \item{d, y}{numeric vectors of equal length (\code{d} for Deaths, \code{y} for person-Years)} \item{scale}{a scalar giving a value by which the ratio should be multiplied} \item{na.rm}{a logical value indicating whether \code{NA} values should be stripped before computation proceeds.} \item{...}{a list of variables taken from the \code{index} argument to \code{\link{stat.table}}} } \value{ When used as a \code{contents} argument to \code{stat.table}, these functions create the following tables: \item{\code{count}}{If given without argument (\code{count()}) it returns a contingency table of counts. If given an \code{id} argument it returns a table of the number of different values of \code{id} in each cell, i.e. how many persons contribute in each cell.} \item{\code{ratio}}{returns a table of values \code{scale * sum(d)/sum(y)}} \item{\code{percent}}{returns a table of percentages of the classifying variables. Variables that are in the \code{index} argument to \code{stat.table} but not in the call to \code{percent} are used to define strata, within which the percentages add up to 100.} } \author{Martyn Plummer} \seealso{\code{\link{stat.table}}} \keyword{iteration} \keyword{category} Epi/man/thoro.Rd0000644000175100001440000000401112531361107013175 0ustar hornikusers\name{thoro} \alias{thoro} \docType{data} \title{Thorotrast Study} \description{ The \code{thoro} data frame has 2470 rows and 14 columns. Each row represents one patient that have had cerebral angiography (X-ray of the brain) with an injected contrast medium, either Thorotrast or another one (the controls). } \format{ This data frame contains the following columns: \describe{ \item{\code{id}}{Identification of person.} \item{\code{sex}}{Sex, 1: male / 2: female.} \item{\code{birthdat}}{Date of birth, \code{Date} variable.} \item{\code{contrast}}{Group, 1: Thorotrast / 2: Control.} \item{\code{injecdat}}{Date of contrast injection, \code{Date} variable.} \item{\code{volume}}{Injected volume of Thorotrast in ml. Control patients have a 0 in this variable.} \item{\code{exitdat}}{Date of exit from the study, \code{Date} variable.} \item{\code{exitstat}}{Status at exit, 1: dead / 2: alive, censored at closing of study, 20 February 1992 / 3: censored alive at some earlier date.} \item{\code{cause}}{Cause of death. See causes in the helpfile for \code{\link{gmortDK}}.} \item{\code{liverdat}}{Date of liver cancer diagnosis, \code{Date} variable.} \item{\code{liver}}{Indicator of liver cancer diagnosis. Not all livercancers are histologically verified, hence \code{liver >= hepcc + chola + hmang}} \item{\code{hepcc}}{Hepatocellular carcinoma at \code{liverdat}.} \item{\code{chola}}{Cholangiocellular carcinoma at \code{liverdat}.} \item{\code{hmang}}{Haemangisarcoma carcinoma at \code{liverdat}.} } } \source{ M Andersson, M Vyberg, J Visfeldt, B Carstensen & HH Storm: Primary liver tumours among Danish patients exposed to Thorotrast. Radiation Research, 137, pp. 262--273, 1994. M Andersson, B Carstensen HH Storm: Mortality and cancer incidence after cerebral angiography. Radiation Research, 142, pp. 305--320, 1995. } \examples{ data(thoro) str(thoro) } \seealso{\code{\link{mortDK}}, \code{\link{gmortDK}}} \keyword{datasets} Epi/man/lungDK.Rd0000644000175100001440000000361412531361107013236 0ustar hornikusers\name{lungDK} \alias{lungDK} \docType{data} \title{Male lung cancer incidence in Denmark} \description{ Male lung cancer cases and population riks time in Denmark, for the period 1943--1992 in ages 40--89. } \usage{data(lungDK)} \format{ A data frame with 220 observations on the following 9 variables. \tabular{rl}{ \code{A5}: \tab Left end point of the age interval, a numeric vector. \cr \code{P5}: \tab Left enpoint of the period interval, a numeric vector. \cr \code{C5}: \tab Left enpoint of the birth cohort interval, a numeric vector. \cr \code{up}: \tab Indicator of upper trianges of each age by period rectangle in the Lexis diagram. (\code{up=(P5-A5-C5)/5}). \cr \code{Ax}: \tab The mean age of diagnois (at risk) in the triangle. \cr \code{Px}: \tab The mean date of diagnosis (at risk) in the triangle. \cr \code{Cx}: \tab The mean date of birth in the triangle, a numeric vector. \cr \code{D}: \tab Number of diagnosed cases of male lung cancer. \cr \code{Y}: \tab Risk time in the male population, person-years. \cr } } \details{ Cases and person-years are tabulated by age and date of diagnosis (period) as well as date of birth (cohort) in 5-year classes. Each observation in the dataframe correponds to a triangle in a Lexis diagram. Triangles are classified by age and date of diagnosis, period of diagnosis and date of birth, all in 5-year groupings. } \source{The Danish Cancer Registry and Statistics Denmark. } \references{ For a more thorough exposition of statistical inference in the Lexis diagram, see: B. Carstensen: Age-Period-Cohort models for the Lexis diagram. Statistics in Medicine, 26: 3018-3045, 2007. } \examples{ data( lungDK ) # Draw a Lexis diagram and show the number of cases in it. attach( lungDK ) Lexis.diagram( age=c(40,90), date=c(1943,1993), coh.grid=TRUE ) text( Px, Ax, paste( D ), cex=0.7 ) } \keyword{datasets} Epi/man/births.Rd0000644000175100001440000000171712531361107013347 0ustar hornikusers\name{births} \alias{births} \docType{data} \title{Births in a London Hospital} \description{ Data from 500 singleton births in a London Hospital } \usage{data(births)} \format{ A data frame with 500 observations on the following 8 variables. \tabular{rl}{ \code{id}: \tab Identity number for mother and baby. \cr \code{bweight}: \tab Birth weight of baby. \cr \code{lowbw}: \tab Indicator for birth weight less than 2500 g. \cr \code{gestwks}: \tab Gestation period. \cr \code{preterm}: \tab Indicator for gestation period less than 37 weeks. \cr \code{matage}: \tab Maternal age. \cr \code{hyp}: \tab Indicator for maternal hypertension. \cr \code{sex}: \tab Sex of baby: 1:Male, 2:Female. \cr } } \source{ Anonymous } \references{ Michael Hills and Bianca De Stavola (2002). A Short Introduction to Stata 8 for Biostatistics, Timberlake Consultants Ltd \url{http://www.timberlake.co.uk} } \examples{ data(births) } \keyword{datasets} Epi/man/transform.Lexis.Rd0000644000175100001440000000621612531361107015151 0ustar hornikusers\name{transform.Lexis} \alias{transform.Lexis} \alias{Relevel.Lexis} \alias{transform.stacked.Lexis} \alias{factorize} \alias{factorize.Lexis} \alias{levels.Lexis} \title{Transform a Lexis (or stacked.Lexis) objects} \description{ Modify a Lexis object. } \usage{ %transform(`_data`, \dots) \method{transform}{Lexis}( `_data`, \dots) \method{Relevel}{Lexis}( x, states, print = TRUE, \dots ) \method{levels}{Lexis}( x ) \method{factorize}{Lexis}( x, states, print = TRUE, \dots ) \method{transform}{stacked.Lexis}( `_data`, \dots) } \arguments{ \item{_data}{an object of class \code{Lexis}.} \item{x}{an object of class \code{Lexis}.} \item{states}{Names of the factor levels (states) for \code{lex.Cst} and \code{lex.Xst}. Can be a list, in which case some levels are collapsed, see the documentation for \code{\link{Relevel}}. No sanity check for the latter operation is undertaken.} \item{print}{Should a conversion between old and new levels be printed?} \item{\dots}{Additional arguments to be passed to \code{\link{transform.data.frame}} or \code{\link{Relevel}}.} } \details{ The transform method for \code{Lexis} objects works exactly as the method for data frames. \code{factorize} transforms the variables \code{lex.Cst} and \code{lex.Xst} to factors with identical set of levels, optionally with names given in \code{states}, and optionally collapsing states. \code{Relevel} is merely an alias for \code{factorize}, since the function does the same as \code{\link{Relevel}}, but for both the factors \code{lex.Cst} and \code{lex.Xst}. A default sideeffect is to produce a table of old states versus new states if \code{states} is a list. If \code{states} is \code{NULL}, as when for example the argument is not passed to the function, the returned object have levels of \code{lex.Cst}, \code{lex.Xst} (and for \code{stacked.Lexis} objects \code{lex.Tr}) shaved down to the actually occurring values. } \value{ A transformed \code{Lexis} object. The function \code{levels} returns the names of the states (levels of the factors \code{lex.Cst} and \code{lex.Xst}. } \author{Martyn Plummer, Bendix Carstensen} \seealso{\code{\link{Lexis}}, \code{\link{merge.Lexis}}, \code{\link{subset.Lexis}}, \code{\link{subset.stacked.Lexis}}, \code{\link{Relevel}}} \examples{ data( nickel ) nic <- Lexis( data = nickel, id = id, entry = list(age=agein), exit = list(age=ageout,cal=ageout+dob,tfh=ageout-age1st), ## Lung cancer deaths are coded 2 and other deaths are coded 1 exit.status = ( (icd > 0) + (icd \%in\% c(162,163)) ) ) str( nic ) levels( nic ) nit <- transform( nic, cumex = exposure*(agein-age1st) ) str( nit ) ## It is still a Lexis object! summary( nic ) nix <- factorize.Lexis( nic, c("Alive","Lung","Dead")) niw <- factorize.Lexis( nix, c("Alive","Pulm","Mort")) niz <- factorize.Lexis( niw, states=list("Alive",c("Pulm","Mort")), coll=" \n& ") boxes( niw, boxpos=TRUE ) par( new=TRUE ) boxes( niz, boxpos=TRUE ) siw <- stack( niw ) str( siw ) } \keyword{manip} Epi/man/B.dk.Rd0000644000175100001440000000421112531361107012622 0ustar hornikusers\name{B.dk} \alias{B.dk} \docType{data} \title{Births in Denmark by year and month of birth and sex} \description{ The number of live births as entered from printed publications from Statistics Denmark. } \usage{data(B.dk)} \format{ A data frame with 1248 observations on the following 4 variables. \describe{ \item{\code{year}}{Year of birth} \item{\code{month}}{Month of birth} \item{\code{m}}{Number of male births} \item{\code{f}}{Number of female births} } } \details{ Division of births by month and sex is only avaialble for the years 1957--69 and 2002ff. For the remaining period, the total no. births in each month is divided between the sexes so that the fraction of boys is equal to the overall fraction for the years where the sex information is available. There is a break in the series at 1920, when Sonderjylland was joined to Denmark. } \source{ Statistiske Undersogelser nr. 19: Befolkningsudvikling og sundhedsforhold 1901-60, Copenhagen 1966. Befolkningens bevaegelser 1957. Befolkningens bevaegelser 1958. ... Befolkningens bevaegelser 2003. Befolkningens bevaegelser 2004. Vital Statistics 2005. Vital Statistics 2006. } \examples{ data( B.dk ) str( B.dk ) attach( B.dk ) # Plot the no of births and the M/F-ratio par( las=1, mar=c(4,4,2,4) ) matplot( year+(month-0.5)/12, cbind( m, f ), bty="n", col=c("blue","red"), lty=1, lwd=1, type="l", ylim=c(0,5000), xlab="Date of birth", ylab="" ) usr <- par()$usr mtext( "Monthly no. births in Denmark", side=3, adj=0, at=usr[1], line=1/1.6 ) text( usr[1:2] \%*\% cbind(c(19,1),c(19,1))/20, usr[3:4] \%*\% cbind(c(1,19),c(2,18))/20, c("Boys","Girls"), col=c("blue","red"), adj=0 ) lines( year+(month-0.5)/12, (m/(m+f)-0.5)*30000, lwd=1 ) axis( side=4, at=(seq(0.505,0.525,0.005)-0.5)*30000, labels=c("","","","",""), tcl=-0.3 ) axis( side=4, at=(50:53/100-0.5)*30000, labels=50:53, tcl=-0.5 ) axis( side=4, at=(0.54-0.5)*30000, labels="\% boys", tick=FALSE, mgp=c(3,0.1,0) ) abline( v=1920, col=gray(0.8) ) } \keyword{datasets} Epi/man/crr.Lexis.rd0000644000175100001440000000737012531361107013766 0ustar hornikusers\name{crr.Lexis} \alias{crr.Lexis} \title{Fit a competing risks regression model (Fine-Gray model) using a Lexis object) } \description{ Fits a competing risks regression model using a \code{\link{Lexis}} object assuming that every person enters at time 0 and exits at time \code{lex.dur}. Thus is only meaningful for Lexis objects with one record per person, (so far). } \usage{ crr.Lexis( obj, mod, quiet=FALSE, ...) } \arguments{ \item{obj}{A Lexis object; variables in \code{mod} are taken from this.} \item{mod}{Formula, with the l.h.s. a character constant equal to a level of \code{obj$lex.Xst}, and the r.h.s. a model formula interpreted in \code{obj}.} \item{quiet}{Logical indicating whether a brief summary should be printed.} \item{\dots}{Further arguments passed on to \code{\link[cmprsk:crr]{crr}}.} } \details{ This function is a simple wrapper for \code{crr}, allowing a formula-specification of the model (which allows specifications of covariates on the fly), and utilizing the structure of Lexis objects to simplify specification of the outcome. Prints a summary of the levels used as event, competing events and censoring. By the structure of the \code{\link{Lexis}} object it is not necessary to indicate what the censoring code or competing events are, that is automatically derived from the \code{Lexis} object. Currently only one state is allowed as l.h.s. (response) in \code{mod}. } \value{ A \code{\link[cmprsk:crr]{crr}} object (which is a list), with two extra elements in the list, \code{model.Lexis} - the model formula supplied, and \code{transitions} - a table of transitions and censorings showing which transition was analysed and which were taken as competing events. } \author{ Bendix Carstensen, \url{BendixCarstensen.com} } \seealso{ \code{\link[cmprsk:crr]{crr}}, \code{\link{Lexis}} } \examples{ # Thorotrats patients, different histological types of liver cancer # Load thorotrast data, and restrict to exposed data(thoro) tht <- thoro[thoro$contrast==1,] # Define exitdate as the date of livercancer tht$dox <- pmin( tht$liverdat, tht$exitdat, na.rm=TRUE ) tht <- subset( tht, dox > injecdat ) # Convert to calendar years in dates tht <- cal.yr( tht ) # Set up a Lexis object with three subtypes of liver cancer and death tht.L <- Lexis( entry = list( per = injecdat, tfi = 0 ), exit = list( per = dox ), exit.status = factor( 1*hepcc+2*chola+3*hmang+ 4*(hepcc+chola+hmang==0 & exitstat==1), labels=c("No cancer","hepcc","chola","hmang","Dead") ), data = tht ) summary( tht.L ) # Show the transitions boxes( tht.L, boxpos=list(x=c(20,rep(80,3),30), y=c(60,90,60,30,10) ), show.BE=TRUE, scale.R=1000 ) # Fit a model for the Hepatocellular Carcinoma as outcome # - note that you can create a variable on the fly: library( cmprsk ) hepcc <- crr.Lexis( tht.L, "hepcc" ~ volume + I(injecdat-1940) ) hepcc$model.Lexis hepcc$transitions # Models for the three other outcomes: chola <- crr.Lexis( tht.L, "chola" ~ volume + I(injecdat-1940) ) hmang <- crr.Lexis( tht.L, "hmang" ~ volume + I(injecdat-1940) ) dead <- crr.Lexis( tht.L, "Dead" ~ volume + I(injecdat-1940) ) # Compare the effects # NOTE: This is not necessarily a joint model for all transitions. zz <- rbind( ci.exp(hepcc), ci.exp(chola), ci.exp(hmang), ci.exp(dead) ) zz <- cbind( zz[c(1,3,5,7) ,], zz[c(1,3,5,7)+1,] ) rownames( zz ) <- c("hepcc","chola","hmang","dead") colnames( zz )[c(1,4)] <- rownames( ci.exp(chola) ) round( zz, 3 ) } \keyword{survival} Epi/man/nice.Rd0000644000175100001440000000142012531361107012761 0ustar hornikusers\name{nice} \alias{nice} \title{Nice breakpoints} \description{The function calls \code{\link{pretty}} for linear scale. For a log-scale nice are computed using a set of specified number in a decade. } \usage{ nice(x, log = F, lpos = c(1, 2, 5), ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{Numerical vector to} \item{log}{Logical. Is the scale logartimic?} \item{lpos}{Numeric. Numbers between 1 and 10 giving the desired breakpoints in this interval.} \item{\dots}{Arguments passed on to \code{pretty} if \code{log}=FALSE} } \value{A vector of breakpoints.} \author{Bendix Carstensen, \email{bxc@steno.dk}, \url{http://BendixCarstensen.com}} \seealso{pretty} \examples{ nice( exp( rnorm( 100 ) ), log=TRUE ) } \keyword{manip} Epi/man/occup.Rd0000644000175100001440000000333312531361107013161 0ustar hornikusers\name{occup} \alias{occup} \docType{data} \title{ A small occupational cohort } \description{This is the data that is behind the illustrative Lexis diagram in Breslow & Day's book on case-control studies.} \usage{data(occup)} \format{ A data frame with 13 observations on the following 4 variables. \describe{ \item{\code{AoE}}{a numeric vector, Age at Entry} \item{\code{DoE}}{a numeric vector, Date of entry} \item{\code{DoX}}{a numeric vector, Date of eXit} \item{\code{Xst}}{eXit status \code{D}-event, \code{W}-withdrawal, \code{X}-censoring} } } \references{ Breslow & Day: Statistical Methods in Cancer Research, vol 1: The analysis of case-control studies, figure 2.2, p. 48.} \examples{ data(occup) lx <- Lexis( entry = list( per=DoE, age=AoE ), exit = list( per=DoX ), entry.status = "W", exit.status = Xst, data = occup ) plot( lx ) # Split follow-up in 5-year classes sx <- splitLexis( lx, seq(1940,1960,5), "per" ) sx <- splitLexis( sx, seq( 40, 60,5), "age" ) plot( sx ) # Plot with a bit more paraphernalia and a device to get # the years on the same physical scale on both axes ypi <- 2.5 # Years per inch dev.new( height=15/ypi+1, width=20/ypi+1 ) # add an inch in each direction for par( mai=c(3,3,1,1)/4, mgp=c(3,1,0)/1.6 ) # the margins set in inches by mai= plot(sx,las=1,col="black",lty.grid=1,lwd=2,type="l", xlim=c(1940,1960),ylim=c(40,55),xaxs="i",yaxs="i",yaxt="n", xlab="Calendar year", ylab="Age (years)") axis( side=2, at=seq(40,55,5), las=1 ) points(sx,pch=c(NA,16)[(sx$lex.Xst=="D")+1] ) box() # Annotation with the person-years PY.ann.Lexis( sx, cex=0.8 ) } \keyword{datasets} Epi/man/projection.ip.rd0000644000175100001440000000171612562641052014702 0ustar hornikusers\name{projection.ip} \alias{projection.ip} \title{ Projection of columns of a matrix. } \description{ Projects the columns of the matrix \code{M} on the space spanned by the columns of the matrix \code{X}, with respect to the inner product defined by \code{weight}: \code{=sum(x*w*y)}. } \usage{ projection.ip(X, M, orth = FALSE, weight = rep(1, nrow(X))) } \arguments{ \item{X}{ Matrix defining the space to project onto. } \item{M}{ Matrix of columns to be projected. Must have the same number of rows as \code{X}. } \item{orth}{ Should the projection be on the orthogonal complement to \code{span(X)}? } \item{weight}{ Weights defining the inner product. Numerical vector of length \code{nrow(X)}. } } \value{ A matrix of full rank with columns in \code{span(X)} } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com}, with help from Peter Dalgaard. } \seealso{ \code{\link{detrend}} } \keyword{array} Epi/man/S.typh.Rd0000644000175100001440000000421612531361107013236 0ustar hornikusers\name{S.typh} \alias{S.typh} \docType{data} \title{Salmonella Typhimurium outbreak 1996 in Denmark.} \description{ Matched case-control study of food poisoning. } \format{ A data frame with 136 observations on the following 15 variables: \tabular{rl}{ \code{id}: \tab Person identification \cr \code{set}: \tab Matched set indicator \cr \code{case}: \tab Case-control status (1:case, 0:control \cr \code{age}: \tab Age of individual \cr \code{sex}: \tab Sex of individual (1:male, 2:female) \cr \code{abroad}: \tab Within the last two weeks visited abroad (1:yes, 0:no) \cr \code{beef}: \tab Within the last two weeks eaten beef \cr \code{pork}: \tab Within the last two weeks eaten pork \cr \code{veal}: \tab Within the last two weeks eaten veal \cr \code{poultry}: \tab Within the last two weeks eaten poultry \cr \code{liverp}: \tab Within the last two weeks eaten liverpaste \cr \code{veg}: \tab Within the last two weeks eaten vegetables \cr \code{fruit}: \tab Within the last two weeks eaten fruit \cr \code{egg}: \tab Within the last two weeks eaten eggs \cr \code{plant7}: \tab Within the last two weeks eaten meat from plant no. 7 \cr } } \details{ In the fall of 1996 an unusually large number of Salmonella Typhimurium cases were recorded in Fyn county in Denmark. The Danish Zoonosis Centre set up a matched case-control study to find the sources. Cases and two age-, sex- and residency-matched controls were telephone interviewed about their food intake during the last two weeks. The participants were asked at which retailer(s) they had purchased meat. Retailers were independently of this linked to meat processing plants, and thus participants were linked to meat processing plants. This way persons could be linked to (amongst other) plant no 7.} \source{ Tine Hald. } \references{ Molbak K and Hald T: Salmonella Typhimurium outbreak in late summer 1996. A Case-control study. (In Danish: Salmonella typhimurium udbrud paa Fyn sensommeren 1996. En case-kontrol undersogelse.) Ugeskrift for Laeger., 159(36):5372-7, 1997. } \examples{ data(S.typh) } \keyword{datasets} Epi/man/pctab.Rd0000644000175100001440000000222412531361107013137 0ustar hornikusers\name{pctab} \alias{pctab} \title{Create percentages in a table} \description{ Computes percentages and a margin of totals along a given margin of a table. } \usage{ pctab(TT, margin = length(dim(TT)), dec=1) } \arguments{ \item{TT}{A table or array object} \item{margin}{Which margin should be the the total?} \item{dec}{How many decimals should be printed? If 0 or \code{FALSE} nothing is printed} } \value{ A table of percentages, where all dimensions except the one specified \code{margin} has two extra levels named "All" (where all entries are 100) and "N". The function prints the table with \code{dec} decimals. } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com}. } \seealso{ \code{\link{addmargins}} } \examples{ Aye <- sample( c("Yes","Si","Oui"), 177, replace=TRUE ) Bee <- sample( c("Hum","Buzz"), 177, replace=TRUE ) Sea <- sample( c("White","Black","Red","Dead"), 177, replace=TRUE ) A <- table( Aye, Bee, Sea ) A ftable( pctab( A ) ) ftable( pctab( addmargins( A, 1 ), 3 ) ) round( ftable( pctab( addmargins( A, 1 ), 3 ), row.vars=3 ), 1) } \keyword{ manip } \keyword{ methods } \keyword{ array } Epi/man/effx.match.Rd0000644000175100001440000000474412531361107014102 0ustar hornikusers\name{effx.match} \alias{effx.match} \title{Function to calculate effects for individually matched case-control studies} \description{ The function calculates the effects of an exposure on a response, possibly stratified by a stratifying variable, and/or controlled for one or more confounding variables. } \usage{ effx.match(response, exposure, match, strata=NULL, control=NULL, base=1, digits=3, alpha=0.05, data=NULL) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{response}{The \code{response} variable - must be numeric} \item{exposure}{The \code{exposure} variable can be numeric or a factor} \item{match}{The variable which identifies the matched sets} \item{strata}{The \code{strata} stratifying variable - must be a factor} \item{control}{ The \code{control} variable(s). These are passed as a list if there are more than one of them.} \item{base}{Baseline for the effects of a categorical exposure, default 1} \item{digits}{Number of significant digits for the effects, default 3} \item{alpha}{1 - confidence level} \item{data}{\code{data} refers to the data used to evaluate the function} } \details{Effects are calculated odds ratios. The function is a wrapper for clogit, from the survival package. The k-1 effects for a categorical exposure with k levels are relative to a baseline which, by default, is the first level. The effect of a metric (quantitative) exposure is calculated per unit of exposure. The exposure variable can be numeric or a factor, but if it is an ordered factor the order will be ignored. } \value{ % ~Describe the value returned % If it is a LIST, use \item{comp1 }{Effects of exposure} \item{comp2 }{Tests of significance} % ... } \references{ www.mhills.pwp.blueyonder.co.uk } \author{Michael Hills} %\note{ ~~further notes~~ } %\seealso{ ~~objects to See Also as \code{\link{~~fun~~}}, ~~~ } \examples{ library(Epi) library(survival) data(bdendo) # d is the case-control variable, set is the matching variable. # The variable est is a factor and refers to estrogen use (no,yes) # The variable hyp is a factor with 2 levels and refers to hypertension (no, yes) # effect of est on the odds of being a case effx.match(d,exposure=est,match=set,data=bdendo) # effect of est on the odds of being a case, stratified by hyp effx.match(d,exposure=est,match=set,strata=hyp,data=bdendo) # effect of est on the odds of being a case, controlled for hyp effx.match(d,exposure=est,match=set,control=hyp,data=bdendo) } \keyword{ models } \keyword{ regression } Epi/man/stattable.Rd0000644000175100001440000001135312531361107014034 0ustar hornikusers\name{stat.table} \alias{stat.table} \alias{print.stat.table} \title{Tables of summary statistics} \description{ \code{stat.table} creates tabular summaries of the data, using a limited set of functions. A list of index variables is used to cross-classify summary statistics. It does NOT work inside \code{with()}! } \usage{ stat.table(index, contents = count(), data, margins = FALSE) \method{print}{stat.table}(x, width=7, digits,...) } \arguments{ \item{index}{A factor, or list of factors, used for cross-classification. If the list is named, then the names will be used when printing the table. This feature can be used to give informative labels to the variables.} \item{contents}{A function call, or list of function calls. Only a limited set of functions may be called (See Details below). If the list is named, then the names will be used when printing the table.} \item{data}{an optional data frame containing the variables to be tabulated. If this is omitted, the variables will be searched for in the calling environment.} \item{margins}{a logical scalar or vector indicating which marginal tables are to be calculated. If a vector, it should be the same length as the \code{index} argument: values corresponding to \code{TRUE} will be retained in marginal tables.} \item{x}{an object of class \code{stat.table}.} \item{width}{a scalar giving the minimum column width when printing.} \item{digits}{a scalar, or named vector, giving the number of digits to print after the decimal point. If a named vector is used, the names should correspond to one of the permitted functions (See Details below) and all results obtained with that function will be printed with the same precision.} \item{...}{further arguments passed to other print methods.} } \details{ This function is similar to \code{tapply}, with some enhancements: multiple summaries of multiple variables may be mixed in the same table; marginal tables may be calculated; columns and rows may be given informative labels; pretty printing may be controlled by the associated print method. This function is not a replacement for \code{tapply} as it also has some limitations. The only functions that may be used in the \code{contents} argument are: \code{\link{count}}, \code{\link{mean}}, \code{\link{weighted.mean}}, \code{\link{sum}}, \code{\link{quantile}}, \code{\link{median}}, \code{\link{IQR}}, \code{\link{max}}, \code{\link{min}}, \code{\link{ratio}}, \code{\link{percent}}, and \code{\link{sd}}. The \code{count()} function, which is the default, simply creates a contingency table of counts. The other functions are applied to each cell created by combinations of the \code{index} variables. } \value{ An object of class \code{stat.table}, which is a multi-dimensional array. A print method is available to create formatted one-way and two-way tables. } \author{Martyn Plummer} \note{ The permitted functions in the contents list %are overloaded functions that are defined inside \code{stat.table}. They have the same interface as the functions callable from the command line, except for two differences. If there is an argument \code{na.rm} then its default value is always \code{TRUE}. A second difference is that the \code{quantile} function can only produce a single quantile in each call. } \seealso{\code{\link{table}}, \code{\link{tapply}}, \code{\link{mean}}, \code{\link{weighted.mean}}, \code{\link{sum}}, \code{\link{quantile}}, \code{\link{median}}, \code{\link{IQR}}, \code{\link{max}}, \code{\link{min}}, \code{\link{ratio}}, \code{\link{percent}}, \code{\link{count}}, \code{\link{sd}}.} \examples{ data(warpbreaks) # A one-way table stat.table(tension,list(count(),mean(breaks)),data=warpbreaks) # The same table with informative labels stat.table(index=list("Tension level"=tension),list(N=count(), "mean number of breaks"=mean(breaks)),data=warpbreaks) # A two-way table stat.table(index=list(tension,wool),mean(breaks),data=warpbreaks) # The same table with margins over tension, but not wool stat.table(index=list(tension,wool),mean(breaks),data=warpbreaks, margins=c(TRUE, FALSE)) # A table of column percentages stat.table(list(tension,wool), percent(tension), data=warpbreaks) # Cell percentages, with margins stat.table(list(tension,wool),percent(tension,wool), margin=TRUE, data=warpbreaks) # A table with multiple statistics # Note how each statistic has its own default precision a <- stat.table(index=list(wool,tension), contents=list(count(),mean(breaks),percent (wool)), data=warpbreaks) print(a) # Print the percentages rounded to the nearest integer print(a, digits=c(percent=0)) } \keyword{iteration} \keyword{category} Epi/man/brv.Rd0000644000175100001440000000363212531361107012643 0ustar hornikusers\name{brv} \alias{brv} \docType{data} \title{Bereavement in an elderly cohort} \description{ The \code{brv} data frame has 399 rows and 11 columns. The data concern the possible effect of marital bereavement on subsequent mortality. They arose from a survey of the physical and mental health of a cohort of 75-year-olds in one large general practice. These data concern mortality up to 1 January, 1990 (although further follow-up has now taken place). Subjects included all lived with a living spouse when they entered the study. There are three distinct groups of such subjects: (1) those in which both members of the couple were over 75 and therefore included in the cohort, (2) those whose spouse was below 75 (and was not, therefore, part of the main cohort study), and (3) those living in larger households (that is, not just with their spouse). } \format{ This data frame contains the following columns: \describe{ \item{\code{id}}{subject identifier, a numeric vector} \item{\code{couple}}{couple identifier, a numeric vector} \item{\code{dob}}{date of birth, a date} \item{\code{doe}}{date of entry into follow-up study, a date} \item{\code{dox}}{date of exit from follow-up study, a date} \item{\code{dosp}}{date of death of spouse, a date (if the spouse was still alive at the end of follow-up,this was coded to January 1, 2000)} \item{\code{fail}}{status at end of follow-up, a numeric vector (0=alive,1=dead)} \item{\code{group}}{see Description, a numeric vector} \item{\code{disab}}{disability score, a numeric vector} \item{\code{health}}{perceived health status score, a numeric vector} \item{\code{sex}}{a factor with levels \code{Male} and \code{Female} } } } \source{ Jagger C, and Sutton CJ, Death after Marital Bereavement. Statistics in Medicine, 10:395-404, 1991. (Data supplied by Carol Jagger). } \examples{ data(brv) } \keyword{datasets} Epi/man/detrend.Rd0000644000175100001440000000207012531361107013472 0ustar hornikusers\name{detrend} \alias{detrend} \title{ Projection of a model matrix on to the orthogonal complement of a trend. } \description{ The columns of the model matrix \code{M} is projected on the orthogonal complement to the matrix \code{(1,t)}. Orthogonality is defined w.r.t. an inner product defined by the weights \code{weight}. } \usage{ detrend( M, t, weight = rep(1, nrow(M)) ) } \arguments{ \item{M}{ A model matrix. } \item{t}{ The trend defining a subspace. A numerical vector of length \code{nrow(M)} } \item{weight}{ Weights defining the inner product of vectors \code{x} and \code{y} as \code{sum(x*w*y)}. A numerical vector of length \code{nrow(M)}, defaults to a vector of \code{1}s.} } \details{ The functions is intended to be used in parametrization of age-period-cohort models. } \value{ A full-rank matrix with columns orthogonal to \code{(1,t)}. } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com}, with help from Peter Dalgaard. } \seealso{ \code{\link{projection.ip}} } \keyword{array} Epi/man/bdendo11.Rd0000644000175100001440000000100312531361107013435 0ustar hornikusers\name{bdendo11} \alias{bdendo11} \docType{data} \title{A 1:1 subset of the endometrial cancer case-control study} \description{ The \code{bdendo11} data frame has 126 rows and 13 columns. This is a subset of the dataset \code{\link{bdendo}} in which each case was matched with a single control. } \source{ Breslow NE, and Day N, Statistical Methods in Cancer Research. Volume I: The Analysis of Case-Control Studies. IARC Scientific Publications, IARC:Lyon, 1980. } \examples{ data(bdendo11) } \keyword{datasets} Epi/man/ftrend.Rd0000644000175100001440000000476612531361107013345 0ustar hornikusers\name{ftrend} \alias{ftrend} \title{Fit a floating trend to a factor in generalized linear model} \description{ Fits a "floating trend" model to the given factor in a glm in a generalized linear model by centering covariates. } \usage{ ftrend(object, ...) } \arguments{ \item{object}{fitted \code{lm} or \code{glm} object. The model must not have an intercept term} \item{...}{arguments to the \code{nlm} function} } \details{ \code{ftrend()} calculates "floating trend" estimates for factors in generalized linear models. This is an alternative to treatment contrasts suggested by Greenland et al. (1999). If a regression model is fitted with no intercept term, then contrasts are not used for the first factor in the model. Instead, there is one parameter for each level of this factor. However, the interpretation of these parameters, and their variance-covariance matrix, depends on the numerical coding used for the covariates. If an arbitrary constant is added to the covariate values, then the variance matrix is changed. The \code{ftrend()} function takes the fitted model and works out an optimal constant to add to the covariate values so that the covariance matrix is approximately diagonal. The parameter estimates can then be treated as approximately independent, thus simplifying their presentation. This is particularly useful for graphical display of dose-response relationships (hence the name). Greenland et al. (1999) originally suggested centring the covariates so that their weighted mean, using the fitted weights from the model, is zero. This heuristic criterion is improved upon by \code{ftrend()} which uses the same minimum information divergence criterion as used by Plummer (2003) for floating variance calculations. \code{ftrend()} calls \code{nlm()} to do the minimization and will pass optional arguments to control it. } \note{ The "floating trend" method is an alternative to the "floating absolute risk" method, which is implemented in the function \code{float()}. } \value{ A list with the following components \item{coef}{coefficients for model with adjusted covariates.} \item{vcov}{Variance-covariance matrix of adjusted coefficients.} } \references{ Greenland S, Michels KB, Robins JM, Poole C and Willet WC (1999) Presenting statistical uncertainty in trends and dose-response relations, \emph{American Journal of Epidemiology}, \bold{149}, 1077-1086. } \author{Martyn Plummer} \seealso{\code{\link{float}}} \keyword{regression} Epi/man/ROC.Rd0000644000175100001440000000747712531361107012510 0ustar hornikusers\name{ROC} \alias{ROC} %- Also NEED an `\alias' for EACH other topic documented here. \title{Function to compute and draw ROC-curves.} \description{ Computes sensitivity, specificity and positive and negative predictive values for a test based on dichotomizing along the variable \code{test}, for prediction of \code{stat}. Plots curves of these and a ROC-curve. } \usage{ ROC( test = NULL, stat = NULL, form = NULL, plot = c("sp", "ROC"), PS = is.null(test), PV = TRUE, MX = TRUE, MI = TRUE, AUC = TRUE, grid = seq(0,100,10), col.grid = gray( 0.9 ), cuts = NULL, lwd = 2, data = parent.frame(), ... ) } \arguments{ \item{test}{ Numerical variable used for prediction. } \item{stat}{ Logical variable of true status. } \item{form}{ Formula used in a logistic regression. If this is given, \code{test} and \code{stat} are ignored. If not given then both \code{test} and \code{stat} must be supplied. } \item{plot}{ Character variable. If "sp", the a plot of sensitivity, specificity and predictive values against test is produced, if "ROC" a ROC-curve is plotted. Both may be given.} \item{PS}{logical, if TRUE the x-axis in the plot "ps"-plot is the the predicted probability for \code{stat}==TRUE, otherwise it is the scale of \code{test} if this is given otherwise the scale of the linear predictor from the logistic regression.} \item{PV}{Should sensitivity, specificity and predictive values at the optimal cutpoint be given on the ROC plot? } \item{MX}{Should the ``optimal cutpoint'' (i.e. where sens+spec is maximal) be indicated on the ROC curve?} \item{MI}{Should model summary from the logistic regression model be printed in the plot?} \item{AUC}{Should the area under the curve (AUC) be printed in the ROC plot?} \item{grid}{Numeric or logical. If FALSE no background grid is drawn. Otherwise a grid is drawn on both axes at \code{grid} percent.} \item{col.grid}{Colour of the grid lines drawn.} \item{cuts}{Points on the test-scale to be annotated on the ROC-curve. } \item{lwd}{Thickness of the curves} \item{data}{Data frame in which to interpret the variables.} \item{\dots}{Additional arguments for the plotting of the ROC-curve. Passed on to \code{plot}} } \details{ As an alternative to a \code{test} and a \code{status} variable, a model formula may given, in which case the the linear predictor is the test variable and the response is taken as the true status variable. The test used to derive sensitivity, specificity, PV+ and PV- as a function of \eqn{x} is \code{test}\eqn{\geq x}{>=x} as a predictor of \code{stat}=TRUE. } \value{ A list with two components: \item{res}{dataframe with variables \code{sens}, \code{spec}, \code{pvp}, \code{pvn} and name of the test variable. The latter is the unique values of test or linear predictor from the logistic regression in ascending order with -Inf prepended. Since the sensitivity is defined as \eqn{P(test>x)|status=TRUE}, the first row has \code{sens} equal to 1 and \code{spec} equal to 0, corresponding to drawing the ROC curve from the upper right to the lower left corner.} \item{lr}{glm object with the logistic regression result used for construction of the ROC curve} 0, 1 or 2 plots are produced according to the setting of \code{plot}. } \author{Bendix Carstensen, Steno Diabetes Center \& University of Copenhagen, \url{http://BendixCarstensen.com} } \examples{ x <- rnorm( 100 ) z <- rnorm( 100 ) w <- rnorm( 100 ) tigol <- function( x ) 1 - ( 1 + exp( x ) )^(-1) y <- rbinom( 100, 1, tigol( 0.3 + 3*x + 5*z + 7*w ) ) ROC( form = y ~ x + z, plot="ROC" ) } \keyword{manip} \keyword{htest} %\keyword{ROC-curves} %\keyword{sensitivity} %\keyword{specificity} %\keyword{predictive values} Epi/man/Icens.Rd0000644000175100001440000000672412531361107013120 0ustar hornikusers\name{Icens} \alias{Icens} \alias{print.Icens} \title{ Fits a regression model to interval censored data. } \description{ The models fitted assumes a piecewise constant baseline rate in intervals specified by the argument \code{breaks}, and for the covariates either a multiplicative relative risk function (default) or an additive excess risk function. } \usage{ Icens( first.well, last.well, first.ill, formula, model.type=c("MRR","AER"), breaks, boot=FALSE, alpha=0.05, keep.sample=FALSE, data ) } \arguments{ \item{first.well}{Time of entry to the study, i.e. the time first seen without event. Numerical vector.} \item{last.well}{Time last seen without event. Numerical vector.} \item{first.ill}{Time first seen with event. Numerical vector.} \item{formula}{Model formula for the log relative risk.} \item{model.type}{Which model should be fitted.} \item{breaks}{Breakpoints between intervals in which the underlying timescale is assumed constant. Any observation outside the range of \code{breaks} is discarded.} \item{boot}{Should bootstrap be performed to produce confidence intervals for parameters. If a number is given this will be the number of bootsrap samples. The default is 1000.} \item{alpha}{1 minus the confidence level.} \item{keep.sample}{Should the bootstrap sample of the parameter values be returned?} \item{data}{Data frame in which the times and formula are interpreted.} } \details{ The model is fitted by calling either \code{\link{fit.mult}} or \code{\link{fit.add}}. } \value{ An object of class \code{"Icens"}: a list with three components: \item{rates}{A glm object from a binomial model with log-link, estimating the baseline rates, and the excess risk if \code{"AER"} is specfied.} \item{cov}{A glm object from a binomial model with complementary log-log link, estimating the log-rate-ratios. Only if \code{"MRR"} is specfied.} \item{niter}{Nuber of iterations, a scalar} \item{boot.ci}{If \code{boot=TRUE}, a 3-column matrix with estimates and 1-\code{alpha} confidence intervals for the parameters in the model.} \item{sample}{A matrix of the parameterestimates from the bootstrapping. Rows refer to parameters, columns to bootstrap samples.} } \references{ B Carstensen: Regression models for interval censored survival data: application to HIV infection in Danish homosexual men. Statistics in Medicine, 15(20):2177-2189, 1996. CP Farrington: Interval censored survival data: a generalized linear modelling approach. Statistics in Medicine, 15(3):283-292, 1996. } \author{ Martyn Plummer, \email{plummer@iarc.fr}, Bendix Carstensen, \email{bxc@steno.dk} } \seealso{ \code{\link{fit.add}} \code{\link{fit.mult}} } \examples{ data( hivDK ) # Convert the dates to fractional years so that rates are # expressed in cases per year for( i in 2:4 ) hivDK[,i] <- cal.yr( hivDK[,i] ) m.RR <- Icens( entry, well, ill, model="MRR", formula=~pyr+us, breaks=seq(1980,1990,5), data=hivDK) # Currently the MRR model returns a list with 2 glm objects. round( ci.lin( m.RR$rates ), 4 ) round( ci.lin( m.RR$cov, Exp=TRUE ), 4 ) # There is actually a print method: print( m.RR ) m.ER <- Icens( entry, well, ill, model="AER", formula=~pyr+us, breaks=seq(1980,1990,5), data=hivDK) # There is actually a print method: print( m.ER ) } \keyword{ models } \keyword{ regression } \keyword{ survival } Epi/man/Lexis.diagram.Rd0000644000175100001440000001160212531361107014535 0ustar hornikusers\name{Lexis.diagram} \alias{Lexis.diagram} \title{Plot a Lexis diagram} \description{ Draws a Lexis diagram, optionally with life lines from a cohort, and with lifelines of a cohort if supplied. Intended for presentation purposes. } \usage{ Lexis.diagram( age = c( 0, 60), alab = "Age", date = c( 1940, 2000 ), dlab = "Calendar time", int = 5, lab.int = 2*int, col.life = "black", lwd.life = 2, age.grid = TRUE, date.grid = TRUE, coh.grid = FALSE, col.grid = gray(0.7), lwd.grid = 1, las = 1, entry.date = NA, entry.age = NA, exit.date = NA, exit.age = NA, risk.time = NA, birth.date = NA, fail = NA, cex.fail = 1.1, pch.fail = c(NA,16), col.fail = rep( col.life, 2 ), data = NULL, ... ) } \arguments{ \item{age}{Numerical vector of length 2, giving the age-range for the diagram} \item{alab}{Label on the age-axis.} \item{date}{Numerical vector of length 2, giving the calendar time-range for the diagram} \item{dlab}{label on the calendar time axis.} \item{int}{The interval between grid lines in the diagram. If a vector of length two is given, the first value will be used for spacing of age-grid and the second for spacing of the date grid.} \item{lab.int}{The interval between labelling of the grids.} \item{col.life}{Colour of the life lines.} \item{lwd.life}{Width of the life lines.} \item{age.grid}{Should grid lines be drawn for age?} \item{date.grid}{Should grid lines be drawn for date?} \item{coh.grid}{Should grid lines be drawn for birth cohorts (diagonals)?} \item{col.grid}{Colour of the grid lines.} \item{lwd.grid}{Width of the grid lines.} \item{las}{How are the axis labels plotted?} \item{entry.date, entry.age, exit.date, exit.age, risk.time, birth.date}{Numerical vectors defining lifelines to be plotted in the diagram. At least three must be given to produce lines. Not all subsets of three will suffice, the given subset has to define life lines. If insufficient data is given, no life lines are produced.} \item{fail}{Logical of event status at exit for the persons whose life lines are plotted.} \item{pch.fail}{Symbols at the end of the life lines for censorings (\code{fail==0}) and failures (\code{fail != 0}).} \item{cex.fail}{Expansion of the status marks at the end of life lines.} \item{col.fail}{Character vector of length 2 giving the colour of the failure marks for censorings and failures respectively.} \item{data}{Dataframe in which to interpret the arguments.} \item{...}{Arguments to be passed on to the initial call to plot.} } \value{ If sufficient information on lifelines is given, a data frame with one row per person and columns with entry ages and dates, birth date, risk time and status filled in. Side effect: a plot of a Lexis diagram is produced with the life lines in it is produced. This will be the main reason for using the function. If the primary aim is to illustrate follow-up of a cohort, then it is better to represent the follow-up in a \code{\link{Lexis}} object, and use the generic \code{\link{plot.Lexis}} function. } \details{ The default unit for supplied variables are (calendar) years. If any of the variables \code{entry.date}, \code{exit.date} or \code{birth.date} are of class "\code{Date}" or if any of the variables \code{entry.age}, \code{exit.age} or \code{risk.time} are of class "\code{difftime}", they will be converted to calendar years, and plotted correctly in the diagram. The returned dataframe will then have colums of classes "\code{Date}" and "\code{difftime}". } \author{ Bendix Carstensen, \url{http://BendixCarstensen.com} } \examples{ Lexis.diagram( entry.age = c(3,30,45), risk.time = c(25,5,14), birth.date = c(1970,1931,1925.7), fail = c(TRUE,TRUE,FALSE) ) LL <- Lexis.diagram( entry.age = sample( 0:50, 17, replace=TRUE ), risk.time = sample( 5:40, 17, r=TRUE), birth.date = sample( 1910:1980, 17, r=TRUE ), fail = sample( 0:1, 17, r=TRUE ), cex.fail = 1.1, lwd.life = 2 ) # Identify the persons' entry and exits text( LL$exit.date, LL$exit.age, paste(1:nrow(LL)), col="red", font=2, adj=c(0,1) ) text( LL$entry.date, LL$entry.age, paste(1:nrow(LL)), col="blue", font=2, adj=c(1,0) ) data( nickel ) attach( nickel ) LL <- Lexis.diagram( age=c(10,100), date=c(1900,1990), entry.age=age1st, exit.age=ageout, birth.date=dob, fail=(icd \%in\% c(162,163)), lwd.life=1, cex.fail=0.8, col.fail=c("green","red") ) abline( v=1934, col="blue" ) nickel[1:10,] LL[1:10,] } \keyword{hplot} \keyword{dplot} \seealso{ \code{\link{Life.lines}}, \code{\link{Lexis.lines}} } Epi/man/fit.add.Rd0000644000175100001440000000264212531361107013363 0ustar hornikusers\name{fit.add} \alias{fit.add} \title{ Fit an addive excess risk model to interval censored data. } \description{ Utility function. The model fitted assumes a piecewise constant intensity for the baseline, and that the covariates act additively on the rate scale. } \usage{ fit.add( y, rates.frame, cov.frame, start ) } \arguments{ \item{y}{Binary vector of outcomes} \item{rates.frame}{Dataframe expanded from the original data by \code{\link{expand.data}}, cooresponding to covariates for the rate parameters.} \item{cov.frame}{ do., but covariates corresponding to the \code{formula} argument of \code{\link{Icens}}} \item{start}{Starting values for the rate parameters. If not supplied, then starting values are generated.} } \value{ A list with one component: \item{rates}{A glm object from a binomial model with log-link function.} } \references{ B Carstensen: Regression models for interval censored survival data: application to HIV infection in Danish homosexual men. Statistics in Medicine, 15(20):2177-2189, 1996. CP Farrington: Interval censored survival data: a generalized linear modelling approach. Statistics in Medicine, 15(3):283-292, 1996. } \author{ Martyn Plummer, \email{plummer@iarc.fr} } \seealso{ \code{\link{Icens}} \code{\link{fit.mult}} } \examples{ data( HIV.dk ) } \keyword{ models } \keyword{ regression } \keyword{ survival } Epi/man/N2Y.Rd0000644000175100001440000000427412531361107012465 0ustar hornikusers\name{N2Y} \alias{N2Y} \title{ Create risk time (Person-Years) in Lexis triangles from population data. } \description{ Data on population size at equidistant dates and age-classes are used to estimate person-time at risk in Lexis-triangles, i.e. classes classified by age, period AND cohort. } \usage{ N2Y( A, P, N, data = NULL, return.dfr = TRUE) } \arguments{ \item{A}{Name of the age-variable, which should be numeric, corresponding to the left endpoints of the age intervals.} \item{P}{Name of the period-variable, which should be numeric, corresponding to the date of population count.} \item{N}{The population size at date \code{P} in age class \code{A}.} \item{data}{A data frame in which arguments are interpreted.} \item{return.dfr}{Logical. Should the results be returned as a data frame (default \code{TRUE}) or as a table.} } \details{The calculation of the risk time from the population figures is done as described in: B. Carstensen: Age-Period-Cohort models for the Lexis diagram. Statistics in Medicine, 26: 3018-3045, 2007. } \value{A data frame with variables \code{A}, \code{P} and \code{Y}, representing the mean age and period in the Lexis triangles and the person-time in them. If \code{res.dfr=FALSE} a three-way table classified by the left end point of the age-classes and the periods and a factor \code{wh} taking the values \code{up} and \code{lo} corresponding to upper (early cohort) and lower (late cohort) Lexis triangles. } \references{ B. Carstensen: Age-Period-Cohort models for the Lexis diagram. Statistics in Medicine, 26: 3018-3045, 2007. } \author{ Bendix Carstensen, \url{BendixCarstensen.com} } \seealso{ \code{\link{splitLexis}}, \code{\link{apc.fit}} } \examples{ # Danish population at 1 Jan each year by sex and age data( N.dk ) # An illustrative subset ( Nx <- subset( N.dk, sex==1 & A<5 & P<1975 ) ) # Show the data in tabular form xtabs( N ~ A + P, data=Nx ) # Lexis triangles as data frame Nt <- N2Y( data=Nx, return.dfr=TRUE ) xtabs( Y ~ round(A,2) + round(P,2), data=Nt ) # Lexis triangles as a 3-dim array ftable( N2Y( data=Nx, return.dfr=FALSE ) ) } \keyword{Data} Epi/man/plotevent.rd0000644000175100001440000000216412531361107014131 0ustar hornikusers\name{plotevent} \alias{plotevent} \title{ Plot Equivalence Classes } \description{ For interval censored data, segments of times between last.well and first.ill are plotted for each conversion in the data. It also plots the equivalence classes. } \usage{ plotevent(last.well, first.ill, data) } \arguments{ \item{last.well}{ Time at which the individuals are last seen negative for the event } \item{first.ill}{ Time at which the individuals are first seen positive for the event } \item{data}{ Data with a transversal shape } } \details{ last.well and first.ill should be written as character in the function. } \value{ Graph } \references{ Carstensen B. Regression models for interval censored survival data: application to HIV infection in Danish homosexual men.Stat Med. 1996 Oct 30;15(20):2177-89. Lindsey JC, Ryan LM. Tutorial in biostatistics methods for interval-censored data.Stat Med. 1998 Jan 30;17(2):219-38. } \author{ Delphine Maucort-Boulch, Bendix Carstensen, Martyn Plummer } \seealso{ \code{\link{Icens}} } % \examples{ % } \keyword{ models } \keyword{ regression } \keyword{ survival } Epi/man/Life.lines.Rd0000644000175100001440000000404012531361107014034 0ustar hornikusers\name{Life.lines} \alias{Life.lines} \title{ Compute dates/ages for life lines in a Lexis diagram } \description{ Fills out the missing information for follow up of persons in a Lexis diagram if sufficient information is given. } \usage{ Life.lines( entry.date = NA, exit.date = NA, birth.date = NA, entry.age = NA, exit.age = NA, risk.time = NA ) } \arguments{ \item{entry.date, exit.date,birth.date, entry.age, exit.age, risk.time}{Vectors defining lifelines to be plotted in the diagram. At least three must be given to produce a result. Not all subsets of three will suffice, the given subset has to define life lines. If insufficient data is given, nothing is returned and a warning is given.} } \value{ Data frame with variables \code{entry.date}, \code{entry.age}, \code{exit.date}, \code{exit.age}, \code{risk.time}, \code{birth.date}, with all entries computed for each person. If any of \code{entry.date}, \code{exit.date} or \code{birth.date} are of class \code{Date} or if any of \code{entry.age}, \code{exit.age} or \code{risk.time} are of class \code{difftime} the date variables will be of class \code{Date} and the other three of class \code{difftime}. } \examples{ ( Life.lines( entry.age = c(3,30,45), risk.time = c(25,5,14), birth.date = c(1970,1931,1925.7) ) ) # Draw a Lexis diagram Lexis.diagram() # Compute entry and exit age and date. ( LL <- Life.lines( entry.age = c(3,30,45), risk.time = c(25,5,14), birth.date = c(1970,1931,1925.7) ) ) segments( LL[,1], LL[,2], LL[,3], LL[,4] ) # Plot the life lines. # Compute entry and exit age and date, supplying a date variable bd <- ( c(1970,1931,1925.7) - 1970 ) * 365.25 class( bd ) <- "Date" ( Life.lines( entry.age = c(3,30,45), risk.time = c(25,5,14), birth.date = bd ) ) } \seealso{ \code{\link{Lexis.diagram}}, \code{\link{Lexis.lines}} } \keyword{ manip } \keyword{ dplot } Epi/man/float.Rd0000644000175100001440000000726412531361107013164 0ustar hornikusers\name{float} \alias{float} \alias{print.floated} \title{Calculate floated variances} \description{ Given a fitted model object, the \code{float()} function calculates floating variances (a.k.a. quasi-variances) for a given factor in the model. } \usage{ float(object, factor, iter.max=50) } \arguments{ \item{object}{a fitted model object} \item{factor}{character string giving the name of the factor of interest. If this is not given, the first factor in the model is used.} \item{iter.max}{Maximum number of iterations for EM algorithm} } \details{ The \code{float()} function implements the "floating absolute risk" proposal of Easton, Peto and Babiker (1992). This is an alternative way of presenting parameter estimates for factors in regression models, which avoids some of the difficulties of treatment contrasts. It was originally designed for epidemiological studies of relative risk, but the idea is widely applicable. Treatment contrasts are not orthogonal. Consequently, the variances of treatment contrast estimates may be inflated by a poor choice of reference level, and the correlations between them may also be high. The \code{float()} function associates each level of the factor with a "floating" variance (or quasi-variance), including the reference level. Floating variances are not real variances, but they can be used to calculate the variance error of contrast by treating each level as independent. Plummer (2003) showed that floating variances can be derived from a covariance structure model applied to the variance-covariance matrix of the contrast estimates. This model can be fitted by minimizing the Kullback-Leibler information divergence between the true distribution of the parameter estimates and the simplified distribution given by the covariance structure model. Fitting is done using the EM algorithm. In order to check the goodness-of-fit of the floating variance model, the \code{float()} function compares the standard errors predicted by the model with the standard errors derived from the true variance-covariance matrix of the parameter contrasts. The maximum and minimum ratios between true and model-based standard errors are calculated over all possible contrasts. These should be within 5 percent, or the use of the floating variances may lead to invalid confidence intervals. } \value{ An object of class \code{floated}. This is a list with the following components \item{coef}{A vector of coefficients. These are the same as the treatment contrasts but the reference level is present with coefficient 0.} \item{var}{A vector of floating (or quasi-) variances} \item{limits}{The bounds on the accuracy of standard errors over all possible contrasts} } \note{ Menezes(1999) and Firth and Menezes (2004) take a slightly different approach to this problem, using a pseudo-likelihood approach to fit the quasi-variance model. Their work is implemented in the package qvcalc. } \references{ Easton DF, Peto J and Babiker GAG (1991) Floating absolute risk: An alternative to relative risk in survival and case control analysis avoiding an arbitrary reference group. \emph{Statistics in Medicine}, \bold{10}, 1025-1035. Firth D and Mezezes RX (2004) Quasi-variances. \emph{Biometrika} \bold{91}, 65-80. Menezes RX(1999) More useful standard errors for group and factor effects in generalized linear models. \emph{D.Phil. Thesis}, Department of Statistics, University of Oxford. Plummer M (2003) Improved estimates of floating absolute risk, \emph{Statistics in Medicine}, \bold{23}, 93-104. } \author{Martyn Plummer} \seealso{\code{\link{ftrend}}, \code{qvcalc}} \keyword{regression} Epi/man/gmortDK.Rd0000644000175100001440000000303112531361107013412 0ustar hornikusers\name{gmortDK} \alias{gmortDK} \docType{data} \title{Population mortality rates for Denmark in 5-years age groups.} \description{ The \code{gmortDK} data frame has 418 rows and 21 columns. } \format{ This data frame contains the following columns: \tabular{rl}{ \code{agr}: \tab Age group, 0:0--4, 5:5--9,..., 90:90+. \cr \code{per}: \tab Calendar period, 38: 1938--42, 43: 1943--47, ..., 88:1988-92. \cr \code{sex}: \tab Sex, 1: male, 2: female. \cr \code{risk}: \tab Number of person-years in the Danish population. \cr \code{dt}: \tab Number of deaths. \cr \code{rt}: \tab Overall mortality rate in cases per 1000 person-years, i.e. \code{rt=1000*dt/risk} \cr \tab Cause-specific mortality rates in cases per 1000 person-years: \cr \code{r1}: \tab Infections \cr \code{r2}: \tab Cancer. \cr \code{r3}: \tab Tumors, benign, unspecific nature. \cr \code{r4}: \tab Endocrine, metabolic. \cr \code{r5}: \tab Blood. \cr \code{r6}: \tab Nervous system, psychiatric. \cr \code{r7}: \tab Cerebrovascular. \cr \code{r8}: \tab Cardiac. \cr \code{r9}: \tab Respiratory diseases, excl. cancer. \cr \code{r10}: \tab Liver, excl. cancer. \cr \code{r11}: \tab Digestive, other. \cr \code{r12}: \tab Genitourinary. \cr \code{r13}: \tab Ill-defined symptoms. \cr \code{r14}: \tab All other, natural. \cr \code{r15}: \tab Violent. \cr } } \source{ Statistics Denmark, National board of health provided original data. Michael Andersson grouped the causes of death. } \examples{ data(gmortDK) } \seealso{\code{\link{thoro}}, \code{\link{mortDK}}} \keyword{datasets} Epi/man/M.dk.Rd0000644000175100001440000000315112531361107012637 0ustar hornikusers\name{M.dk} \alias{M.dk} \docType{data} \title{Mortality in Denmark 1974 ff.} \description{ Mortality in one-year classes of age (0-98,99+) and period (1974 ff.) in Denmark. } \usage{data(M.dk)} \format{ A data frame with 6400 observations on the following 6 variables. \describe{ \item{\code{A}}{Age-class, 0-98, 99:99+} \item{\code{sex}}{Sex. 1:males, 2:females} \item{\code{P}}{Period (year) of death} \item{\code{D}}{Number of deaths} \item{\code{Y}}{Number of person-years} \item{\code{rate}}{Mortality rate per 1000 person-years} } } \details{ Deaths in ages over 100 are in the class labelled 99. Risk time is computed by tabulation of the risk time in \code{\link{Y.dk}}, except for the class 99+ where the average of the population size in ages 99+ at the first and last date of the year is used.} \source{ \url{http://www.statistikbanken.dk/statbank5a/SelectTable/omrade0.asp?SubjectCode=02&PLanguage=1&ShowNews=OFF} } \examples{ data(M.dk) str(M.dk) zz <- xtabs( rate ~ sex+A+P, data=M.dk ) zz[zz==0] <- NA # 0s makes log-scale plots crash par(mfrow=c(1,2), mar=c(0,0,0,0), oma=c(3,3,1,1), mgp=c(3,1,0)/1.6 ) for( i in 1:2 ) { matplot( dimnames(zz)[[2]], zz[i,,], lty=1, lwd=1, col=rev(heat.colors(37)), log="y", type="l", ylim=range(zz,na.rm=TRUE), ylab="", xlab="", yaxt="n" ) text( 0, max(zz,na.rm=TRUE), c("M","F")[i], font=2, adj=0:1, cex=2, col="gray" ) if( i==1 ) axis( side=2, las=1 ) } mtext( side=1, "Age", line=2, outer=TRUE ) mtext( side=2, "Mortality rate", line=2, outer=TRUE ) } \keyword{datasets} Epi/man/apc.fit.Rd0000644000175100001440000002331712531361107013400 0ustar hornikusers\name{apc.fit} \alias{apc.fit} \title{ Fit an Age-Period-Cohort model to tabular data. } \description{ Fits the classical five models to tabulated rate data (cases, person-years) classified by two of age, period, cohort: Age, Age-drift, Age-Period, Age-Cohort and Age-period. There are no assumptions about the age, period or cohort classes being of the same length, or that tabulation should be only by two of the variables. Only requires that mean age and period for each tabulation unit is given. } \usage{ apc.fit( data, A, P, D, Y, ref.c, ref.p, dist = c("poisson","binomial"), model = c("ns","bs","ls","factor"), dr.extr = c("weighted","Holford"), parm = c("ACP","APC","AdCP","AdPC","Ad-P-C","Ad-C-P","AC-P","AP-C"), npar = c( A=5, P=5, C=5 ), scale = 1, alpha = 0.05, print.AOV = TRUE ) } \arguments{ \item{data}{Data frame with (at least) variables, \code{A} (age), \code{P} (period), \code{D} (cases, deaths) and \code{Y} (person-years). Cohort (date of birth) is computed as \code{P-A}. If thsi argument is given the arguments \code{A}, \code{P}, \code{D} and \code{Y} are ignored.} \item{A}{Age; numerical vector with mean age at diagnosis for each unit.} \item{P}{Period; numerical vector with mean date of diagnosis for each unit.} \item{D}{Cases, deaths; numerical vector.} \item{Y}{Person-years; numerical vector. Also used as denominator for binomial data, see the \code{dist} argument.} \item{ref.c}{Reference cohort, numerical. Defaults to median date of birth among cases. If used with \code{parm="AdCP"} or \code{parm="AdPC"}, the resdiual cohort effects will be 1 at \code{ref.c}} \item{ref.p}{Reference period, numerical. Defaults to median date of diagnosis among cases.} \item{dist}{Distribution (or more precisely: Likelihood) used for modelling. if a binomial model us ised, \code{Y} is assuemd to be the denominator; \code{"binomial"} gives a binomial model with logit link.} \item{model}{Type of model fitted: \itemize{ \item \code{ns} fits a model with natural splines for each of the terms, with \code{npar} parameters for the terms. \item \code{bs} fits a model with B-splines for each of the terms, with \code{npar} parameters for the terms. \item \code{ls} fits a model with linear splines. \item \code{factor} fits a factor model with one parameter per value of \code{A}, \code{P} and \code{C}. \code{npar} is ignored in this case. } } \item{dr.extr}{Character. How the drift parameter should be extracted from the age-period-cohort model. \code{"weighted"} (default) lets the weighted average (by marginal no. cases, \code{D}) of the estimated period and cohort effects have 0 slope. \code{"Holford"} uses the naive average over all values for the estimated effects, disregarding the no. cases.} \item{parm}{Character. Indicates the parametrization of the effects. The first four refer to the ML-fit of the Age-Period-Cohort model, the last four give Age-effects from a smaller model and residuals relative to this. If one of the latter is chosen, the argument \code{dr.extr} is ignored. Possible values for \code{parm} are: \itemize{ \item \code{"ACP"}: ML-estimates. Age-effects as rates for the reference cohort. Cohort effects as RR relative to the reference cohort. Period effects constrained to be 0 on average with 0 slope. \item \code{"APC"}: ML-estimates. Age-effects as rates for the reference period. Period effects as RR relative to the reference period. Cohort effects constrained to be 0 on average with 0 slope. \item \code{"AdCP"}: ML-estimates. Age-effects as rates for the reference cohort. Cohort and period effects constrained to be 0 on average with 0 slope. These effects do not multiply to the fitted rates, the drift is missing and needs to be included to produce the fitted values. \item \code{"AdPC"}: ML-estimates. Age-effects as rates for the reference period. Cohort and period effects constrained to be 0 on average with 0 slope. These effects do not multiply to the fitted rates, the drift is missing and needs to be included to produce the fitted values. \item \code{"Ad-C-P"}: Age effects are rates for the reference cohort in the Age-drift model (cohort drift). Cohort effects are from the model with cohort alone, using log(fitted values) from the Age-drift model as offset. Period effects are from the model with period alone using log(fitted values) from the cohort model as offset. \item \code{"Ad-P-C"}: Age effects are rates for the reference period in the Age-drift model (period drift). Period effects are from the model with period alone, using log(fitted values) from the Age-drift model as offset. Cohort effects are from the model with cohort alone using log(fitted values) from the period model as offset. \item \code{"AC-P"}: Age effects are rates for the reference cohort in the Age-Cohort model, cohort effects are RR relative to the reference cohort. Period effects are from the model with period alone, using log(fitted values) from the Age-Cohort model as offset. \item \code{"AP-C"}: Age effects are rates for the reference period in the Age-Period model, period effects are RR relative to the reference period. Cohort effects are from the model with cohort alone, using log(fitted values) from the Age-Period model as offset. } } \item{npar}{The number of parameters/knots to use for each of the terms in the model. If it is vector of length 3, the numbers are taken as the no. of knots for Age, Period and Cohort, respctively. Unless it has a names attribute with vales "A", "P" and "C" in which case these will be used. The knots chosen are the quantiles \code{(1:nk+0.1)/(nk+0.2)} of the events (i.e. of \code{rep(A,D)}) \code{npar} may also be a named list of three numerical vectors with names "A", "P" and "C", in which case these taken as the knots for the age, period and cohort effect, the first and last element in each vector are used as the boundary knots.} \item{alpha}{The significance level. Estimates are given with (1-\code{alpha}) confidence limits.} \item{scale}{numeric(1), factor multiplied to the rate estimates before output.} \item{print.AOV}{Should the analysis of deviance table for the models be printed?} } \value{ An object of class "apc" (recognized by \code{\link{apc.plot}} and \code{\link{apc.lines}}) --- a list with components: \item{Type}{Text describing the model and parametrization returned} \item{Model}{The model object(s) on which the parametrization is based.} \item{Age}{Matrix with 4 colums: \code{A.pt} with the ages (equals \code{unique(A)}) and three columns giving the estimated rates with c.i.s.} \item{Per}{Matrix with 4 colums: \code{P.pt} with the dates of diagnosis (equals \code{unique(P)}) and three columns giving the estimated RRs with c.i.s.} \item{Coh}{Matrix with 4 colums: \code{C.pt} with the dates of birth (equals \code{unique(P-A)}) and three columns giving the estimated RRs with c.i.s.} \item{Drift}{A 3 column matrix with drift-estimates and c.i.s: The first row is the ML-estimate of the drift (as defined by \code{drift}), the second row is the estimate from the Age-drift model. For the sequential parametrizations, only the latter is given.} \item{Ref}{Numerical vector of length 2 with reference period and cohort. If ref.p or ref.c was not supplied the corresponding element is NA.} \item{AOV}{Analysis of deviance table comparing the five classical models.} \item{Type}{Character string explaining the model and the parametrization.} \item{Knots}{If \code{model} is one of \code{"ns"} or \code{"bs"}, a list with three components: \code{Age}, \code{Per}, \code{Coh}, each one a vector of knots. The max and the min are the boundary knots.} } \references{ The considerations behind the parametrizations used in this function are given in details in a preprint from Department of Biostatistics in Copenhagen: "Demography and epidemiology: Age-Period-Cohort models in the computer age", \url{http://biostat.ku.dk/reports/2006/ResearchReport06-1.pdf/}, later published as: B. Carstensen: Age-period-cohort models for the Lexis diagram. Statistics in Medicine, 10; 26(15):3018-45, 2007. } \author{ Bendix Carstensen, \url{http://BendixCarstensen.com} } \seealso{ \code{\link{apc.frame}}, \code{\link{apc.lines}}, \code{\link{apc.plot}}. } \examples{ library( Epi ) data(lungDK) # Taylor a dataframe that meets the requirements exd <- lungDK[,c("Ax","Px","D","Y")] names(exd)[1:2] <- c("A","P") # Two different ways of parametrizing the APC-model, ML ex.H <- apc.fit( exd, npar=7, model="ns", dr.extr="Holford", parm="ACP", scale=10^5 ) ex.W <- apc.fit( exd, npar=7, model="ns", dr.extr="weighted", parm="ACP", scale=10^5 ) # Sequential fit, first AC, then P given AC. ex.S <- apc.fit( exd, npar=7, model="ns", parm="AC-P", scale=10^5 ) # Show the estimated drifts ex.H[["Drift"]] ex.W[["Drift"]] ex.S[["Drift"]] # Plot the effects fp <- apc.plot( ex.H ) apc.lines( ex.W, frame.par=fp, col="red" ) apc.lines( ex.S, frame.par=fp, col="blue" ) } \keyword{models} \keyword{regression}Epi/man/twoby2.Rd0000644000175100001440000000352412531361107013300 0ustar hornikusers\name{twoby2} \alias{twoby2} \title{Analysis of a two by two table} \description{ Computes the usual measures of association in a 2 by 2 table with confidence intervals. Also produces asymtotic and exact tests. Assumes that comparison of probability of the first column level between levels of the row variable is of interest. Output requires that the input matrix has meaningful row and column labels. } \usage{ twoby2(exposure, outcome, alpha = 0.05, print = TRUE, dec = 4, conf.level = 1-alpha, F.lim = 10000) } \arguments{ \item{exposure}{If a table the analysis is based on the first two rows and first two columns of this. If a variable, this variable is tabulated against} \item{outcome}{as the second variable} \item{alpha}{Significance level} \item{print}{Should the results be printed?} \item{dec}{Number of decimals in the printout.} \item{conf.level}{1-\code{alpha}} \item{F.lim}{If the table total exceeds \code{F.lim}, Fisher's exact test is not computed} } \value{A list with elements: \item{table}{The analysed 2 x 2 table augmented with probabilities and confidence intervals. The confidence intervals for the probabilities are computed using the normal approximation to the log-odds. Confidence intervals for the difference of proportions are computed using method 10 from Newcombe, Stat.Med. 1998, 17, pp.873 ff.} \item{measures}{A table of Odds-ratios and relative risk with confidence intervals.} \item{p.value}{Exact p-value for the null hypothesis of OR=1} } \author{ Mark Myatt. Modified by Bendix Carstensen. } \examples{ Treat <- sample(c("A","B"), 50, rep=TRUE ) Resp <- c("Yes","No")[1+rbinom(50,1,0.3+0.2*(Treat=="A"))] twoby2( Treat, Resp ) twoby2( table( Treat, Resp )[,2:1] ) # Comparison the other way round } \keyword{univar} \keyword{htest} Epi/man/Ns.Rd0000644000175100001440000001006712562623763012447 0ustar hornikusers\name{Ns} \alias{Ns} \title{ Natural splines - (cubic splines linear beyond outermost knots) with convenient specification of knots and possibility of centering and detrending. } \description{ This function is partly for convenient specification of natural splines in practical modelling. The convention used is to take the smallest and the largest of the supplied knots as boundary knots. It also has the option of centering the effects provided at a chosen reference point as well as projecting the columns on the orthogonal space to that spanned by the intercept and the linear effect of the variable. } \usage{ Ns( x, ref = NULL, df = NULL, knots = NULL, intercept = FALSE, Boundary.knots = NULL, detrend = FALSE ) } \arguments{ \item{x}{A variable.} \item{ref}{Scalar. Reference point on the \code{x}-scale, where the resuting effect will be 0.} \item{df}{degrees of freedom.} \item{knots}{knots to be used both as boundary and internal knots. If \code{Boundary.knots} are given, this will be taken as the set of internal knots.} \item{intercept}{Should the intercept be included in the resulting basis? Ignored if any of \code{ref} or \code{detrend} is given.} \item{Boundary.knots}{The boundary knots beyond which the spline is linear.} \item{detrend}{If \code{TRUE}, the columns of the spline basis will be projected to the orthogonal of \code{cbind(1,x)}. Optionally \code{detrend} can be given as a vector of non-negative numbers used to define an inner product as \code{diag(detrend)} for projection on the orthogonal to \code{cbind(1,x)}. The default is projection w.r.t. the inner product defined by the identity matrix.} } \value{ A matrix of dimension c(length(x),df) where either \code{df} was supplied or if \code{knots} were supplied, \code{df = length(knots) - intercept}. \code{Ns} returns a spline basis which is centered at \code{ref}, without the \code{ref=} argument \code{Ns} behaves as \code{Ns}, and so the two will likely be merged. \code{Ns} returns a spline basis which is orthogonal to \code{cbind(1,x)} with respect to the inner product defined by the positive definite matrix \code{diag(weight)} (an assumption which is checked). } \author{ Bendix Carstensen } \note{ The need for this function is priarily from analysis of rates in epidemiology and demography, where the dataset are time-split records of follow-up, and the range of data therefore rarely is of any interest (let alone is meaningful). In Poisson modelling of rates based on time-split records one should aim at having the same number of \emph{events} between knots, rather than the same number of observations. } \examples{ require(splines) require(stats) require(graphics) ns( women$height, df = 3) Ns( women$height, knots=c(63,59,71,67) ) # Gives the same results as ns: summary( lm(weight ~ ns(height, df = 3), data = women) ) summary( lm(weight ~ Ns(height, df = 3), data = women) ) # Get the diabetes data and set up as Lexis object data(DMlate) DMlate <- DMlate[sample(1:nrow(DMlate),500),] dml <- Lexis( entry = list(Per=dodm, Age=dodm-dobth, DMdur=0 ), exit = list(Per=dox), exit.status = factor(!is.na(dodth),labels=c("DM","Dead")), data = DMlate ) # Split in 1-year age intervals dms <- splitLexis( dml, time.scale="Age", breaks=0:100 ) summary( dms ) # Model age-specific rates using Ns with 6 knots n.kn <- 6 ( a.kn <- with( subset(dms,lex.Xst=="Dead"), quantile( Age+lex.dur, probs=(1:n.kn-0.5)/n.kn ) ) ) m1 <- glm( lex.Xst=="Dead" ~ Ns( Age, kn=a.kn ), offset = log( lex.dur ), family=poisson, data=dms ) # Plot estimated curve and knots chosen: nd <- data.frame(Age=40:90,lex.dur=1000) matplot( nd$Age, ci.pred( m1, newdata=nd ), type="l", lwd=c(3,1,1), lty=1, col="black", log="y", ylab="Mortality rates per 1000 PY", xlab="Age (years)", las=1 ) rug( a.kn, lwd=2 ) } \keyword{regression} Epi/man/apc.frame.Rd0000644000175100001440000001135112531361107013703 0ustar hornikusers\name{apc.frame} \alias{apc.frame} \title{ Produce an empty frame for display of parameter-estimates from Age-Period-Cohort-models. } \description{ A plot is generated where both the age-scale and the cohort/period scale is on the x-axis. The left vertical axis will be a logarithmic rate scale referring to age-effects and the right a logarithmic rate-ratio scale of the same relative extent as the left referring to the cohort and period effects (rate ratios). Only an empty plot frame is generated. Curves or points must be added with \code{points}, \code{lines} or the special utility function \code{\link{apc.lines}}. } \usage{ apc.frame( a.lab, cp.lab, r.lab, rr.lab = r.lab / rr.ref, rr.ref = r.lab[length(r.lab)/2], a.tic = a.lab, cp.tic = cp.lab, r.tic = r.lab, rr.tic = r.tic / rr.ref, tic.fac = 1.3, a.txt = "Age", cp.txt = "Calendar time", r.txt = "Rate per 100,000 person-years", rr.txt = "Rate ratio", ref.line = TRUE, gap = diff(range(c(a.lab, a.tic)))/10, col.grid = gray(0.85), sides = c(1,2,4) ) } \arguments{ \item{a.lab}{Numerical vector of labels for the age-axis.} \item{cp.lab}{Numerical vector of labels for the cohort-period axis.} \item{r.lab}{Numerical vector of labels for the rate-axis (left vertical)} \item{rr.lab}{Numerical vector of labels for the RR-axis (right vertical)} \item{rr.ref}{At what level of the rate scale is the RR=1 to be.} \item{a.tic}{Location of additional tick marks on the age-scale} \item{cp.tic}{Location of additional tick marks on the cohort-period-scale} \item{r.tic}{Location of additional tick marks on the rate-scale} \item{rr.tic}{Location of additional tick marks on the RR-axis.} \item{tic.fac}{Factor with which to diminish intermediate tick marks} \item{a.txt}{Text for the age-axis (left part of horizontal axis).} \item{cp.txt}{Text for the cohort/period axis (right part of horizontal axis).} \item{r.txt}{Text for the rate axis (left vertical axis).} \item{rr.txt}{Text for the rate-ratio axis (right vertical axis)} \item{ref.line}{Logical. Should a reference line at RR=1 be drawn at the calendar time part of the plot?} \item{gap}{Gap between the age-scale and the cohort-period scale} \item{col.grid}{Colour of the grid put in the plot.} \item{sides}{Numerical vector indicating on which sides axes should be drawn and annotated. This option is aimed for multi-panel displays where axes only are put on the outer plots.} } \details{ The function produces an empty plot frame for display of results from an age-period-cohort model, with age-specific rates in the left side of the frame and cohort and period rate-ratio parameters in the right side of the frame. There is a gap of \code{gap} between the age-axis and the calendar time axis, vertical grid lines at \code{c(a.lab,a.tic,cp.lab,cp.tic)}, and horizontal grid lines at \code{c(r.lab,r.tic)}. The function returns a numerical vector of length 2, with names \code{c("cp.offset","RR.fac")}. The y-axis for the plot will be a rate scale for the age-effects, and the x-axis will be the age-scale. The cohort and period effects are plotted by subtracting the first element (named \code{"cp.offset"}) of the returned result form the cohort/period, and multiplying the rate-ratios by the second element of the returned result (named \code{"RR.fac"}). } \value{ A numerical vector of length two, with names \code{c("cp.offset","RR.fac")}. The first is the offset for the cohort period-axis, the second the multiplication factor for the rate-ratio scale. Side-effect: A plot with axes and grid lines but no points or curves. Moreover, the option \code{apc.frame.par} is given the value \code{c("cp.offset","RR.fac")}, which is recognized by \code{\link{apc.plot}} and \code{\link{apc.lines}}. } \references{ B. Carstensen: Age-Period-Cohort models for the Lexis diagram. Statistics in Medicine, 26: 3018-3045, 2007. } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com} } \examples{ par( mar=c(4,4,1,4) ) res <- apc.frame( a.lab=seq(30,90,20), cp.lab=seq(1880,2000,30), r.lab=c(1,2,5,10,20,50), a.tic=seq(30,90,10), cp.tic=seq(1880,2000,10), r.tic=c(1:10,1:5*10), gap=27 ) res # What are the axes actually? par(c("usr","xlog","ylog")) # How to plot in the age-part: a point at (50,10) points( 50, 10, pch=16, cex=2, col="blue" ) # How to plot in the cohort-period-part: a point at (1960,0.3) points( 1960-res[1], 0.3*res[2], pch=16, cex=2, col="red" ) } \seealso{ \code{\link{apc.lines},\link{apc.fit}} } \keyword{hplot} Epi/man/mortDK.Rd0000644000175100001440000000301212531361107013242 0ustar hornikusers\name{mortDK} \alias{mortDK} \docType{data} \title{Population mortality rates for Denmark in 1-year age-classes.} \description{ The \code{mortDK} data frame has 1820 rows and 21 columns. } \format{ This data frame contains the following columns: \tabular{rl}{ \code{age}: \tab Age class, 0--89, 90:90+. \cr \code{per}: \tab Calendar period, 38: 1938--42, 43: 1943--47, ..., 88:1988-92. \cr \code{sex}: \tab Sex, 1: male, 2: female. \cr \code{risk}: \tab Number of person-years in the Danish population. \cr \code{dt}: \tab Number of deaths. \cr \code{rt}: \tab Overall mortality rate in cases per 1000 person-years, i.e. \code{rt=1000*dt/risk} \cr \tab Cause-specific mortality rates in cases per 1000 person-years: \cr \code{r1}: \tab Infections \cr \code{r2}: \tab Cancer. \cr \code{r3}: \tab Tumors, benign, unspecific nature. \cr \code{r4}: \tab Endocrine, metabolic. \cr \code{r5}: \tab Blood. \cr \code{r6}: \tab Nervous system, psychiatric. \cr \code{r7}: \tab Cerebrovascular. \cr \code{r8}: \tab Cardiac. \cr \code{r9}: \tab Respiratory diseases, excl. cancer. \cr \code{r10}: \tab Liver, excl. cancer. \cr \code{r11}: \tab Digestive, other. \cr \code{r12}: \tab Genitourinary. \cr \code{r13}: \tab Ill-defined symptoms. \cr \code{r14}: \tab All other, natural. \cr \code{r15}: \tab Violent. \cr } } \source{ Statistics Denmark, National board of health provided original data. Michael Andersson grouped the causes of death. } \examples{ data(mortDK) } \seealso{\code{\link{thoro}}, \code{\link{gmortDK}}} \keyword{datasets} Epi/man/NArray.Rd0000644000175100001440000000207412531361107013245 0ustar hornikusers\name{NArray} \alias{NArray} \alias{ZArray} \title{Set up an array of NAs, solely from the list of dimnames } \description{Defines an array of NAs, solely from the list of dimnames } \usage{ NArray( x, cells=NA ) ZArray( x, cells=0 ) } \arguments{ \item{x}{A (possibly named) list to be used as dimnames for the resulting array} \item{cells}{Value(s) to fill the array} } \details{This is a simple useful way of defining arrays to be used for collection of results. The point is that everything is defined from the named list, so in the process of defining what you want to collect, there is only one place in the program to edit. It's just a wrapper for \code{array}. \code{ZArray} is just a wrapper for \code{NArray} with a different default. } \value{An array with \code{dimnames} attribute \code{x}, and all values equal to \code{cells}. } \author{Bendix Carstensen } \examples{ ftable( NArray( list(Aye = c("Yes", "Si", "Oui"), Bee = c("Hum", "Buzz"), Sea = c("White", "Black", "Red", "Dead") ) ) ) }Epi/man/rateplot.Rd0000644000175100001440000001723012531361107013703 0ustar hornikusers\name{rateplot} \alias{rateplot} \alias{Aplot} \alias{Pplot} \alias{Cplot} \title{ Functions to plot rates from a table classified by age and calendar time (period) } \description{ Produces plots of rates versus age, connected within period or cohort (\code{Aplot}), rates versus period connected within age-groups (\code{Pplot}) and rates and rates versus date of birth cohort (\code{Cplot}). \code{rateplot} is a wrapper for these, allowing to produce the four classical displays with a single call. } \usage{ rateplot( rates, which = c("ap","ac","pa","ca"), age = as.numeric( dimnames( rates )[[1]] ), per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE, a.grid = grid, p.grid = grid, c.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), a.lim = range( age, na.rm=TRUE ) + c(0,diff( range( age ) )/30), p.lim = range( per, na.rm=TRUE ) + c(0,diff( range( age ) )/30), c.lim = NULL, ylim = range( rates[rates>0], na.rm=TRUE ), at = NULL, labels = paste( at ), a.lab = "Age at diagnosis", p.lab = "Date of diagnosis", c.lab = "Date of birth", ylab = "Rates", type = "l", lwd = 2, lty = 1, log.ax = "y", las = 1, ann = FALSE, a.ann = ann, p.ann = ann, c.ann = ann, xannx = 1/20, cex.ann = 0.8, a.thin = seq( 1, length( age ), 2 ), p.thin = seq( 1, length( per ), 2 ), c.thin = seq( 2, length( age ) + length( per ) - 1, 2 ), col = par( "fg" ), a.col = col, p.col = col, c.col = col, ... ) Aplot( rates, age = as.numeric( dimnames( rates )[[1]] ), per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE, a.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), a.lim = range( age, na.rm=TRUE ), ylim = range( rates[rates>0], na.rm=TRUE ), at = NULL, labels = paste( at ), a.lab = names( dimnames( rates ) )[1], ylab = deparse( substitute( rates ) ), type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y", las = 1, c.col = col, p.col = col, c.ann = FALSE, p.ann = FALSE, xannx = 1/20, cex.ann = 0.8, c.thin = seq( 2, length( age ) + length( per ) - 1, 2 ), p.thin = seq( 1, length( per ), 2 ), p.lines = TRUE, c.lines = !p.lines, ... ) Pplot( rates, age = as.numeric( dimnames( rates )[[1]] ), per = as.numeric( dimnames( rates )[[2]] ), grid = FALSE, p.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), p.lim = range( per, na.rm=TRUE ) + c(0,diff(range(per))/30), ylim = range( rates[rates>0], na.rm=TRUE ), p.lab = names( dimnames( rates ) )[2], ylab = deparse( substitute( rates ) ), at = NULL, labels = paste( at ), type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y", las = 1, ann = FALSE, cex.ann = 0.8, xannx = 1/20, a.thin = seq( 1, length( age ), 2 ), ... ) Cplot( rates, age = as.numeric( rownames( rates ) ), per = as.numeric( colnames( rates ) ), grid = FALSE, c.grid = grid, ygrid = grid, col.grid = gray( 0.9 ), c.lim = NULL, ylim = range( rates[rates>0], na.rm=TRUE ), at = NULL, labels = paste( at ), c.lab = names( dimnames( rates ) )[2], ylab = deparse( substitute( rates ) ), type = "l", lwd = 2, lty = 1, col = par( "fg" ), log.ax = "y", las = 1, xannx = 1/20, ann = FALSE, cex.ann = 0.8, a.thin = seq( 1, length( age ), 2 ), ... ) } \arguments{ \item{rates}{A two-dimensional table (or array) with rates to be plotted. It is assumed that the first dimension is age and the second is period.} \item{which}{A character vector with elements from \code{c("ap","ac","apc","pa","ca")}, indication which plots should be produced. One plot per element is produced. The first letter indicates the x-axis of the plot, the remaining which groups should be connected, i.e. \code{"pa"} will plot rates versus period and connect age-classes, and \code{"apc"} will plot rates versus age, and connect both periods and cohorts.} \item{age}{Numerical vector giving the means of the age-classes. Defaults to the rownames of \code{rates} as numeric.} \item{per}{Numerical vector giving the means of the periods. Defaults to the columnnames of \code{rates} as numeric.} \item{grid}{Logical indicating whether a background grid should be drawn.} \item{a.grid}{Logical indicating whether a background grid on the age-axis should be drawn. If numerical it indicates the age-coordinates of the grid.} \item{p.grid}{do. for the period.} \item{c.grid}{do. for the cohort.} \item{ygrid}{do. for the rate-dimension.} \item{col.grid}{The colour of the grid.} \item{a.lim}{Range for the age-axis.} \item{p.lim}{Range for the period-axis.} \item{c.lim}{Range for the cohort-axis.} \item{ylim}{Range for the y-axis (rates).} \item{at}{Position of labels on the y-axis (rates).} \item{labels}{Labels to put on the y-axis (rates).} \item{a.lab}{Text on the age-axis. Defaults to "Age".} \item{p.lab}{Text on the period-axis. Defaults to "Date of diagnosis".} \item{c.lab}{Text on the cohort-axis. Defaults to "Date of birth".} \item{ylab}{Text on the rate-axis. Defaults to the name of the rate-table.} \item{type}{How should the curves be plotted. Defaults to \code{"l"}.} \item{lwd}{Width of the lines. Defaults to 2.} \item{lty}{Which type of lines should be used. Defaults to 1, a solid line.} \item{log.ax}{Character with letters from \code{"apcyr"}, indicating which axes should be logarithmic. \code{"y"} and \code{"r"} both refer to the rate scale. Defaults to \code{"y"}.} \item{las}{see \code{par}.} \item{ann}{Should the curves be annotated?} \item{a.ann}{Logical indicating whether age-curves should be annotated.} \item{p.ann}{do. for period-curves.} \item{c.ann}{do. for cohort-curves.} \item{xannx}{The fraction that the x-axis is expanded when curves are annotated.} \item{cex.ann}{Expansion factor for characters annotating curves.} \item{a.thin}{Vector of integers indicating which of the age-classes should be labelled.} \item{p.thin}{do. for the periods.} \item{c.thin}{do. for the cohorts.} \item{col}{Colours for the curves.} \item{a.col}{Colours for the age-curves.} \item{p.col}{do. for the period-curves.} \item{c.col}{do. for the cohort-curves.} \item{p.lines}{Should rates from the same period be connected?} \item{c.lines}{Should rates from the same cohort be connected?} \item{...}{Additional arguments pssed on to \code{matlines} when plotting the curves.} } \details{ Zero values of the rates are ignored. They are neiter in the plot nor in the calculation of the axis ranges. } \value{ \code{NULL}. The function is used for its side-effect, the plot. } \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com} } \seealso{ \code{\link{apc.frame}} } \examples{ data( blcaIT ) attach(blcaIT) # Table of rates: bl.rate <- tapply( D, list(age,period), sum ) / tapply( Y, list(age,period), sum ) bl.rate # The four classical plots: par( mfrow=c(2,2) ) rateplot( bl.rate*10^6 ) # The labels on the vertical axis could be nicer: rateplot( bl.rate*10^6, at=10^(-1:3), labels=c(0.1,1,10,100,1000) ) # More bells an whistles par( mfrow=c(1,3), mar=c(3,3,1,1), oma=c(0,3,0,0), mgp=c(3,1,0)/1.6 ) rateplot( bl.rate*10^6, ylab="", ann=TRUE, which=c("AC","PA","CA"), at=10^(-1:3), labels=c(0.1,1,10,100,1000), col=topo.colors(11), cex.ann=1.2 ) } \keyword{hplot} Epi/man/contr.cum.Rd0000644000175100001440000000306212531361107013757 0ustar hornikusers\name{contr.cum} \alias{contr.cum} \alias{contr.2nd} \alias{contr.diff} \alias{contr.orth} \title{ Contrast matrices } \description{ Return a matrix of contrasts for factor coding. } \usage{ contr.cum(n) contr.diff(n) contr.2nd(n) contr.orth(n) } \arguments{ \item{n}{A vector of levels for a factor, or the number of levels.} } \details{ These functions are used for creating contrast matrices for use in fitting regression models. The columns of the resulting matrices contain contrasts which can be used for coding a factor with \code{n} levels. \code{contr.cum} gives a coding corresponding to successive differences between factor levels. \code{contr.diff} gives a coding that correspond to the cumulative sum of the value for each level. This is not meaningful in a model where the intercept is included, therefore \code{n} columns ia always returned. \code{contr.2nd} gives contrasts corresponding to 2nd order differences between factor levels. Returns a matrix with \code{n-2} columns. \code{contr.orth} gives a matrix with \code{n-2} columns, which are mutually orthogonal and orthogonal to the matrix \code{cbind(1,1:n)} } \value{ A matrix with \code{n} rows and \code{k} columns, with \code{k}=\code{n} for \code{contr.diff} \code{k}=\code{n-1} for \code{contr.cum} \code{k}=\code{n-2} for \code{contr.2nd} and \code{contr.orth}. } \author{Bendix Carstensen} \seealso{ \code{\link{contr.treatment}} } \examples{ contr.cum(6) contr.2nd(6) contr.diff(6) contr.orth(6) } \keyword{design} \keyword{models} Epi/man/summary.Lexis.rd0000644000175100001440000000472712531361107014700 0ustar hornikusers\name{summary.Lexis} \alias{summary.Lexis} \alias{print.summary.Lexis} \title{ Summarize transitions and risk time from a Lexis object } \description{ A two-way table of records and transitions classified by states (\code{lex.Cst} and \code{lex.Xst}), as well the risk time in each state. } \usage{ \method{summary}{Lexis}( object, simplify=TRUE, scale=1, by=NULL, Rates=FALSE, ... ) \method{print}{summary.Lexis}( x, ..., digits=2 ) } \arguments{ \item{object}{A Lexis object.} \item{simplify}{Should rows with 0 follow-up time be dropped?} \item{scale}{Scaling factor for the rates. The calculated rates are multiplied by this number.} \item{by}{Character vector of name(s) of variable(s) in \code{object}. Used to give a separate summaries for subsets of \code{object}. If longer than than 1, the interaction between that variables is used to stratify the summary. It is also possible to supply a vector of length \code{nrow(object)}, and the distinct values of this will be used to stratify the summary.} \item{Rates}{Should a component with transition rates be returned (and printed) too?} \item{x}{A \code{summary.Lexis} object.} \item{digits}{How many digits should be used for printing?} \item{ ... }{Other parameters - ignored} } \value{ An object of class \code{summary.Lexis}, a list with two components, \code{Transitions} and \code{Rates}, each one a matrix with rows classified by states where persons spent time, and columns classified by states to which persons transit. The \code{Transitions} contains number of transitions and has 4 extra columns with number of records, total number of events, total risk time and number of person contributing attached. The \code{Rates} contains the transitions rates. If the argument \code{Rates} is FALSE (the default), then only the first component of the list is returned. } \author{Bendix Carstensen, \email{bxc@steno.dk}} \examples{ data( nickel ) # Lung cancer deaths and other deaths are coded 1 and 2 nic <- Lexis( data=nickel, entry=list(age=agein), exit=list(age=ageout,cal=ageout+dob,tfh=ageout-age1st), exit.status=factor( (icd > 0) + (icd \%in\% c(162,163)), labels=c("Alive","Other","Lung") ) ) str( nic ) head( nic ) summary( nic ) # More detailed summary, by exposure level summary( nic, by=nic$exposure>5, Rates=TRUE, scale=100 ) } \keyword{survival}Epi/man/DMconv.Rd0000644000175100001440000000217612531361107013242 0ustar hornikusers\name{DMconv} \alias{DMconv} \docType{data} \title{Conversion to diabetes} \description{ Data from a randomized intervention study ("Addition") where persons with prediabetic conditions are followed up for conversion to diabetes (DM). Conversion dates are interval censored. Original data are not published yet, so id-numbers have been changed and all dates have been randomly perturbed. } \usage{data(DMconv)} \format{ A data frame with 1519 observations on the following 6 variables. \describe{ \item{\code{id}}{Person identifier} \item{\code{doe}}{Date of entry, i.e. first visit.} \item{\code{dlw}}{Date last seen well, i.e. last visit without DM.} \item{\code{dfi}}{Date first seen ill, i.e. first visit with DM.} \item{\code{gtol}}{Glucose tolerance. Factor with levels: 1="IFG" (impaired fasting glucose), 2="IGT" (impaired glucose tolerance).} \item{\code{grp}}{Randomization. Factor with levels: 1="Intervention", 2="Control".} } } \source{ Signe Saetre Rasmussen, Steno Diabetes Center. The Addition Study. } \examples{ data(DMconv) str(DMconv) head(DMconv) } \keyword{datasets} Epi/man/merge.data.frame.Rd0000644000175100001440000000124612531361107015151 0ustar hornikusers\name{merge.data.frame} \alias{merge.data.frame} \title{Merge data frame with a Lexis object} \description{ Merge two data frames, or a data frame with a \code{Lexis} object. } \usage{ \method{merge}{data.frame}(x, y, ...) } \arguments{ \item{x, y}{data frames, or objects to be coerced into one} \item{...}{optional arguments for the merge method} } \details{ This version of \code{merge.default} masks the one in the \code{base}. It ensures that, if either \code{x} or \code{y} is a \code{Lexis} object, then \code{merge.Lexis} is called. } \value{ A merged \code{Lexis} object or data frame. } \author{Martyn Plummer} \seealso{\code{\link{Lexis}}} \keyword{ts} Epi/man/Relevel.Rd0000644000175100001440000000236312531361107013450 0ustar hornikusers\name{Relevel} \alias{Relevel} \alias{Relevel.factor} \title{Reorder and combine levels of a factor} \description{ The levels of a factor are re-ordered so that the levels specified by \code{ref} is first and the others are moved down. This is useful for \code{contr.treatment} contrasts which take the first level as the reference. Levels may also be combined. } \usage{ \method{Relevel}{factor}( x, ref, first = TRUE, collapse="+", \dots ) } \arguments{ \item{x}{An unordered factor} \item{ref}{The names or numbers of levels to be the first. If \code{ref} is a list, factor levels mentioned in each list element are combined. If the list is named the names are used as new factor levels.} \item{first}{Should the levels mentioned in ref come before those not?} \item{collapse}{String used when collapsing factor levels.} \item{\dots}{Arguments passed on to other methods.} } \value{ An unordered factor, where levels of \code{x} have been reordered and/or collapsed. } \seealso{\code{\link{Relevel.Lexis}}} \examples{ ff <- factor( sample( letters[1:5], 100, replace=TRUE ) ) table( ff, Relevel( ff, list( AB=1:2, "Dee"=4, c(3,5) ) ) ) table( ff, rr=Relevel( ff, list( 5:4, Z=c("c","a") ), coll="-und-", first=FALSE ) ) } \keyword{manip} Epi/man/ci.lin.Rd0000644000175100001440000001621112557611166013236 0ustar hornikusers\name{ci.lin} \alias{ci.lin} \alias{ci.mat} \alias{ci.exp} \alias{ci.pred} \alias{Wald} \title{ Compute linear functions of parameters with standard errors and confidence limits } \description{ For a given model object the function computes a linear function of the parameters and the corresponding standard errors, p-values and confidence intervals. } \usage{ ci.lin( obj, ctr.mat = NULL, subset = NULL, subint = NULL, diffs = FALSE, fnam = !diffs, vcov = FALSE, alpha = 0.05, df = Inf, Exp = FALSE, sample = FALSE ) ci.exp( ..., Exp = TRUE, pval=FALSE ) Wald( obj, H0=0, ... ) ci.mat( alpha = 0.05, df = Inf ) ci.pred( obj, newdata, Exp = NULL, alpha = 0.05, df = Inf ) } \arguments{ \item{obj}{A model object (of class \code{lm}, \code{glm}, \code{coxph}, \code{survreg}, \code{clogistic}, \code{cch}, \code{lme}, \code{mer}, \code{lmerMod}, \code{gls}, \code{nls}, \code{gnlm}, \code{MIresult}, \code{mipo}, \code{polr}, or \code{rq}). } \item{ctr.mat}{Contrast matrix to be multiplied to the parameter vector, i.e. the desired linear function of the parameters.} \item{subset}{The subset of the parameters to be used. If given as a character vector, the elements are in turn matched against the parameter names (using \code{grep}) to find the subset. Repeat parameters may result from using a character vector. This is considered a facility.} \item{subint}{\code{sub}set selection like for \code{subset}, except that elements of a character vector given as argument will be used to select a number of subsets of parameters and only the \code{int}ersection of these is returned.} \item{diffs}{If TRUE, all differences between parameters in the subset are computed. \code{ctr.mat} is ignored. If \code{obj} inherits from \code{lm}, and \code{subset} is given as a string \code{subset} is used to search among the factors in the model and differences of all factor levels for the first match are shown. If \code{subset} does not match any of the factors in the model, all pairwise differences between parameters matching are returned.} \item{fnam}{Should the common part of the parameter names be included with the annotation of contrasts? Ignored if \code{diffs==T}. If a sting is supplied this will be prefixed to the labels.} \item{vcov}{Should the covariance matrix of the set of parameters be returned? If this is set, \code{Exp} is ignored. See details.} \item{alpha}{Significance level for the confidence intervals.} \item{df}{Integer. Number of degrees of freedom in the t-distribution used to compute the quantiles used to construct the confidence intervals.} \item{Exp}{If \code{TRUE} columns 5:6 are replaced with exp( columns 1,5,6 ). For \code{ci.pred} it indicates whether the predictions should be exponentiated - the default is to make a prediction on the scale of the linear predictor and transform it by the inverse link function; if FALSE, the prediction on the link scale is returned.} \item{sample}{Logical or numerical. If \code{TRUE} or numerical a sample of size \code{as.numeric(sample)} is drawn from the multivariate normal with mean equal to the (\code{subet} defined) coefficients and variance equal to the estimated variance-covriance of these. These are then transformed by \code{ctr.mat} and returned.} \item{pval}{Logical. Should a column of P-values be included with the estimates and confidence intervals output by \code{ci.exp}.} \item{H0}{Numeric. The null values for the selected/transformed parameters to be tested by a Wald test. Must have the same length as the selected parameter vector.} \item{\ldots}{Parameters passed on to \code{ci.lin}.} \item{newdata}{Data frame of covariates where prediction is made.} } \value{ \code{ci.lin} returns a matrix with number of rows and row names as \code{ctr.mat}. The columns are Estimate, Std.Err, z, P, 2.5\% and 97.5\%. If \code{vcov=TRUE} a list with components \code{est}, the desired functional of the parameters and \code{vcov}, the variance covariance matrix of this, is returned but not printed. If \code{Exp==TRUE} the confidence intervals for the parameters are replaced with three columns: exp(estimate,c.i.). \code{ci.exp} returns only the exponentiated parameter estimates with confidence intervals. It is merely a wrapper for \code{ci.lin}, fishing out the last 3 columns from \code{ci.lin(...,Exp=TRUE)}. If you just want the estimates and confidence limits, but not exponentiated, use \code{ci.exp(...,Exp=FALSE)}. \code{Wald} computes a Wald test for a subset of (possibly linear combinations of) parameters being equal to the vector of null values. The selection of the subset of parameters is the same as for \code{ci.lin}. Using the \code{ctr.mat} argument makes it possible to do a Wald test for equality of parameters. \code{Wald} returns a named numerical vector of length 3, with names \code{Chisq}, \code{d.f.} and \code{P}. \code{ci.mat} returns a 2 by 3 matrix with rows \code{c(1,0,0)} and \code{c(0,-1,1)*1.96}, devised to post-multiply to a p by 2 matrix with columns of estimates and standard errors, so as to produce a p by 3 matrix of estimates and confidence limits. Used internally in \code{ci.lin} and \code{ci.cum}. The 1.96 is replaced by the appropriate quantile from the normal or t-distribution when arguments \code{alpha} and/or \code{df} are given. \code{ci.pred} returns a 3-column matrix with estimates and upper and lower confidence intervals as columns. This is just a convenience wrapper for \code{predict.glm(obj,se.fit=TRUE)} which returns a rather unhandy structure. The prediction with c.i. is made in the \code{link} scale, and by default transformed by the inverse link, since the most common use for this is for multiplicative Poisson or binomial models with either log or logit link. } \author{ Bendix Carstensen, \url{BendixCarstensen.com} & Michael Hills \url{http://www.mhills.pwp.blueyonder.co.uk/} } \seealso{See also \code{\link{ci.cum}} for a function computing cumulative sums of (functions of) parameter estimates.} \examples{ # Bogus data: f <- factor( sample( letters[1:5], 200, replace=TRUE ) ) g <- factor( sample( letters[1:3], 200, replace=TRUE ) ) x <- rnorm( 200 ) y <- 7 + as.integer( f ) * 3 + 2 * x + 1.7 * rnorm( 200 ) # Fit a simple model: mm <- lm( y ~ x + f + g ) ci.lin( mm ) ci.lin( mm, subset=3:6, diff=TRUE, fnam=FALSE ) ci.lin( mm, subset=3:6, diff=TRUE, fnam=TRUE ) ci.lin( mm, subset="f", diff=TRUE, fnam="f levels:" ) print( ci.lin( mm, subset="g", diff=TRUE, fnam="gee!:", vcov=TRUE ) ) # Use character defined subset to get ALL contrasts: ci.lin( mm, subset="f", diff=TRUE ) # A Wald test of whether the g-parameters are 0 Wald( mm, subset="g" ) # Wald test of whether the three first f-parameters are equal: ( CM <- rbind( c(1,-1,0,0), c(1,0,-1,0)) ) Wald( mm, subset="f", ctr.mat=CM ) # or alternatively ( CM <- rbind( c(1,-1,0,0), c(0,1,-1,0)) ) Wald( mm, subset="f", ctr.mat=CM ) } \keyword{models} \keyword{regression} Epi/man/fit.baseline.rd0000644000175100001440000000162012531361107014450 0ustar hornikusers\name{fit.baseline} \alias{fit.baseline} \title{ Fit a piecewise contsnt intesity model for interval censored data. } \description{ Utility function Fits a binomial model with logaritmic link, with \code{y} as outcome and covariates in \code{rates.frame} to estimate rates in the inttervals between \code{breaks}. } \usage{ fit.baseline( y, rates.frame, start ) } \arguments{ \item{y}{Binary vector of outcomes} \item{rates.frame}{Dataframe expanded from the original data by \code{\link{expand.data}}} \item{start}{Starting values for the rate parameters. If not supplied, then starting values are generated.} } \value{ A \code{\link{glm}} object, with binomial error and logaritmic link. } \author{ Martyn Plummer, \email{plummer@iarc.fr} } \seealso{ \code{\link{fit.add}} \code{\link{fit.mult}} } \keyword{ models } \keyword{ regression } \keyword{ survival } Epi/man/plot.apc.Rd0000644000175100001440000000342312531361107013570 0ustar hornikusers\name{plot.apc} \alias{plot.apc} \alias{apc.plot} \title{Plot the estimates from a fitted Age-Period-Cohort model} \description{ This function plots the estimates created by \code{\link{apc.fit}} in a single graph. It just calls \code{\link{apc.frame}} after computing some sensible values of the parameters, and subsequently plots the estimates using \code{\link{apc.lines}}. } \usage{ \method{plot}{apc}( x, r.txt="Rate", ...) apc.plot( x, r.txt="Rate", ...) } \arguments{ \item{x}{ An object of class \code{apc}. } \item{r.txt}{ The text to put on the vertical rate axis. } \item{\dots}{ Additional arguments passed on to \code{\link{apc.lines}}. } } \value{ A numerical vector of length two, with names \code{c("cp.offset","RR.fac")}. The first is the offset for the cohort period-axis, the second the multiplication factor for the rate-ratio scale. Therefore, if you want to plot at \code{(x,y)} in the right panel, use \code{(x-res["cp.offset"],y/res["RR.fac"])} \code{=(x-res[1],y/res[2])}. This vector should be supplied for the parameter \code{frame.par} to \code{\link{apc.lines}} if more sets of estimates is plotted in the same graph, however see \code{\link{cp.points}}. } \details{\code{plot.apc} is just a wrapper for \code{apc.plot}.} \author{ Bendix Carstensen, Steno Diabetes Center, \url{http://BendixCarstensen.com} } \seealso{ \code{\link{apc.lines}}, \code{\link{lines.apc}}, \code{\link{apc.frame}}, \code{\link{apc.fit}} } \examples{ data( lungDK ) attach( lungDK ) apc1 <- apc.fit( A=Ax, P=Px, D=D, Y=Y/10^5 ) fp <- apc.plot( apc1 ) apc.lines( apc1, frame.par=fp, drift=1.01, col="red" ) for( i in 1:11 ) apc.lines( apc1, frame.par=fp, drift=1+(i-6)/100, col=rainbow(12)[i] ) } \keyword{hplot} Epi/man/lep.Rd0000644000175100001440000000233012531361107012624 0ustar hornikusers\name{lep} \alias{lep} \docType{data} \title{An unmatched case-control study of leprosy incidence} \description{ The \code{lep} data frame has 1370 rows and 7 columns. This was an unmatched case-control study in which incident cases of leprosy in a region of N. Malawi were compared with population controls. } \format{ This data frame contains the following columns: \tabular{rl}{ \code{id}: \tab subject identifier: a numeric vector \cr \code{d}: \tab case/control status: a numeric vector (1=case, 0=control) \cr \code{age}: \tab a factor with levels \code{5-9} \code{10-14} \code{15-19} \code{20-24} \code{25-29} \code{30-44} \code{45+} \cr \code{sex}: \tab a factor with levels \code{male}, \code{female} \cr \code{bcg}: \tab presence of vaccine scar, a factor with levels \code{no} \code{yes} \cr \code{school}: \tab schooling, a factor with levels \code{none} \code{1-5yrs} \code{6-8yrs} \code{sec/tert} \cr \code{house}: \tab housing, a factor with levels \code{brick} \code{sunbrick} \code{wattle} \code{temp} \cr } } \source{ The study is described in more detail in Clayton and Hills, Statistical Models in Epidemiology, Oxford University Press, Oxford:1993. } \examples{ data(lep) } \keyword{datasets} Epi/man/ccwc.Rd0000644000175100001440000000413412531361107012767 0ustar hornikusers\name{ccwc} \alias{ccwc} \title{Generate a nested case-control study} \usage{ ccwc( entry=0, exit, fail, origin=0, controls=1, match=list(), include=list(), data=NULL, silent=FALSE ) } \arguments{ \item{entry}{ Time of entry to follow-up } \item{exit}{ Time of exit from follow-up } \item{fail}{ Status on exit (1=Fail, 0=Censored) } \item{origin}{ Origin of analysis time scale } \item{controls}{ The number of controls to be selected for each case } \item{match}{ List of categorical variables on which to match cases and controls } \item{include}{ List of other variables to be carried across into the case-control study } \item{data}{ Data frame in which to look for input variables } \item{silent}{ If FALSE, echos a . to the screen for each case-control set created; otherwise produces no output. } } \description{ Given the basic outcome variables for a cohort study: the time of entry to the cohort, the time of exit and the reason for exit ("failure" or "censoring"), this function computes risk sets and generates a matched case-control study in which each case is compared with a set of controls randomly sampled from the appropriate risk set. Other variables may be matched when selecting controls. } \value{ The case-control study, as a dataframe containing: \item{Set}{ case-control set number } \item{Map}{ row number of record in input dataframe } \item{Time}{ failure time of the case in this set } \item{Fail}{ failure status (1=case, 0=control) } These are followed by the matching variables, and finally by the variables in the \code{include} list } \references{ Clayton and Hills, Statistical Models in Epidemiology, Oxford University Press, Oxford:1993. } \author{ David Clayton } \seealso{ \code{\link{Lexis}} } \examples{ # # For the diet and heart dataset, create a nested case-control study # using the age scale and matching on job # data(diet) dietcc <- ccwc( doe, dox, chd, origin=dob, controls=2, data=diet, include=energy, match=job) } \keyword{datagen} Epi/man/clogistic.Rd0000644000175100001440000000656012531361107014035 0ustar hornikusers\name{clogistic} \alias{clogistic} \title{Conditional logistic regression} \description{ Estimates a logistic regression model by maximizing the conditional likelihood. The conditional likelihood calculations are exact, and scale efficiently to strata with large numbers of cases. } \usage{ clogistic(formula, strata, data, subset, na.action, init, model = TRUE, x = FALSE, y = TRUE, contrasts = NULL, iter.max=20, eps=1e-6, toler.chol = sqrt(.Machine$double.eps)) } \arguments{ \item{formula}{Model formula} \item{strata}{Factor describing membership of strata for conditioning} \item{data}{data frame containing the variables in the formula and strata arguments} \item{subset}{subset of records to use} \item{na.action}{missing value handling} \item{init}{initial values} \item{model}{ a logical value indicating whether \emph{model frame} should be included as a component of the returned value} \item{x,y}{ logical values indicating whether the response vector and model matrix used in the fitting process should be returned as components of the returned value. } \item{contrasts}{ an optional list. See the \code{contrasts.arg} of \code{model.matrix.default} } \item{iter.max}{maximum number of iterations} \item{eps}{ Convergence tolerance. Iteration continues until the relative change in the conditional log likelihood is less than \code{eps}. Must be positive. } \item{toler.chol}{ Tolerance used for detection of a singularity during a Cholesky decomposition of the variance matrix. This is used to detect redundant predictor variables. Must be less than \code{eps}. } } \value{ An object of class \code{"clogistic"}. This is a list containing the following components: \item{coefficients}{ the estimates of the log-odds ratio parameters. If the model is over-determined there will be missing values in the vector corresponding to the redundant columns in the model matrix. } \item{var}{ the variance matrix of the coefficients. Rows and columns corresponding to any missing coefficients are set to zero. } \item{loglik}{ a vector of length 2 containing the log-likelihood with the initial values and with the final values of the coefficients. } \item{iter}{ number of iterations used. } \item{n}{ number of observations used. Observations may be dropped either because they are missing, or because they belong to a homogeneous stratum. For more details on which observations were used, see \code{informative} below. } \item{informative}{ if \code{model=TRUE}, a logical vector of length equal to the number of rows in the model frame. This indicates whether an observation is informative. Strata that are homogeneous with respect to either the outcome variable or the predictor variables are uninformative, in the sense that they can be removed without modifying the estimates or standard errors. If \code{model=FALSE}, this is NULL. } The output will also contain the following, for documentation see the \code{glm} object: \code{terms}, \code{formula}, \code{call}, \code{contrasts}, \code{xlevels}, and, optionally, \code{x}, \code{y}, and/or \code{frame}. } \examples{ data(bdendo) clogistic(d ~ cest + dur, strata=set, data=bdendo) } \author{Martyn Plummer} \seealso{\code{\link{glm}}} \keyword{models} Epi/man/ncut.Rd0000644000175100001440000000304512531361107013021 0ustar hornikusers\name{ncut} \alias{ncut} \title{ Function to group a variable in intervals.} \description{ Cuts a continuous variable in intervals. As opposed to \code{cut} which returns a factor, \code{ncut} returns a numeric variable. } \usage{ ncut(x, breaks, type="left" ) } \arguments{ \item{x}{A numerical vector.} \item{breaks}{Vector of breakpoints. \code{NA} will results for values below \code{min(breaks)} if \code{type="left"}, for values above \code{max(breaks)} if \code{type="right"} and for values outside \code{range(breaks)} if \code{type="mid"}} \item{type}{Character: one of \code{c("left","right","mid")}, indicating whether the left, right or midpoint of the intervals defined in breaks is returned.} } \details{ The function uses the base function \code{findInterval}. } \value{ A numerical vector of the same length as \code{x}. } \author{ Bendix Carstensen, Steno Diabetes Center, \email{bxc@steno.dk}, \url{http://BendixCarstensen.com}, with essential input from Martyn Plummer, IARC. } \seealso{ \code{\link{cut}}, \code{\link{findInterval}} } \examples{ br <- c(-2,0,1,2.5) x <- c( rnorm( 10 ), br, -3, 3 ) cbind( x, l=ncut( x, breaks=br, type="l" ), m=ncut( x, breaks=br, type="m" ), r=ncut( x, breaks=br, type="r" ) )[order(x),] x <- rnorm( 200 ) plot( x, ncut( x, breaks=br, type="l" ), pch=16, col="blue", ylim=range(x) ) abline( 0, 1 ) abline( v=br ) points( x, ncut( x, breaks=br, type="r" ), pch=16, col="red" ) points( x, ncut( x, breaks=br, type="m" ), pch=16, col="green" ) } \keyword{manip} Epi/man/expand.data.rd0000644000175100001440000000333212531361107014276 0ustar hornikusers\name{expand.data} \alias{expand.data} \title{ Function to expand data for regression analysis of interval censored data. } \description{ This is a utility function. The original records with \code{first.well}, \code{last.well} and \code{first.ill} are expanded to multiple records; several for each interval where the person is known to be well and one where the person is known to fail. At the same time columns for the covariates needed to estimate rates and the response variable are generated. } \usage{ expand.data(fu, formula, breaks, data) } \arguments{ \item{fu}{A 3-column matrix with \code{first.well}, \code{last.well} and \code{first.ill} in each row.} \item{formula}{Model fromula, used to derive the model matrix.} \item{breaks}{Defines the intervals in which the baseline rate is assumed constant. All follow-up before the first and after the last break is discarded.} \item{data}{Datafrem in which \code{fu} and \code{formula} is interpreted.} } \value{ Returns a list with three components \item{rates.frame}{Dataframe of covariates for estimation of the baseline rates --- one per interval defined by \code{breaks}.} \item{cov.frame}{Dataframe for estimation of the covariate effects. A data-framed version of the designmatrix from \code{formula}.} \item{y}{Response vector.} } \references{ B Carstensen: Regression models for interval censored survival data: application to HIV infection in Danish homosexual men. Statistics in Medicine, 15(20):2177-2189, 1996. } \author{ Martyn Plummer, \email{plummer@iarc.fr} } \seealso{ \code{\link{Icens}} \code{\link{fit.mult}} \code{\link{fit.add}} } \keyword{ models } \keyword{ regression } \keyword{ survival } Epi/man/plot.Lexis.Rd0000644000175100001440000001160512531361107014112 0ustar hornikusers\name{plot.Lexis} \alias{plot.Lexis} \alias{points.Lexis} \alias{lines.Lexis} \alias{PY.ann} \alias{PY.ann.Lexis} \title{Lexis diagrams} \description{ The follow-up histories represented by a Lexis object can be plotted using one or two dimensions. The two dimensional plot is a Lexis diagram showing follow-up time simultaneously on two time scales. } \usage{ \method{plot}{Lexis}(x=Lexis( entry=list(Date=1900,Age=0), exit=list(Age=0) ), time.scale = NULL, type="l", breaks="lightgray", ...) \method{points}{Lexis}(x, time.scale = options()[["Lexis.time.scale"]] , ...) \method{lines}{Lexis}(x, time.scale = options()[["Lexis.time.scale"]], ...) \method{PY.ann}{Lexis}(x, time.scale = options()[["Lexis.time.scale"]], digits=1, ...) } \arguments{ \item{x}{An object of class \code{Lexis}. The default is a bogus \code{Lexis} object, so that \code{plot.Lexis} can be called without the first argument and still produce a(n empty) Lexis diagram. Unless arguments \code{xlim} and \code{ylim} are given in this case the diagram is looking pretty daft.} \item{time.scale}{A vector of length 1 or 2 giving the time scales to be plotted either by name or numerical order} \item{type}{Character indication what to draw: "n" nothing (just set up the diagram), "l" - liefelines, "p" - endpoints of follow-up, "b" - both lifelines and endpoints.} \item{breaks}{a string giving the colour of grid lines to be drawn when plotting a split Lexis object. Grid lines can be suppressed by supplying the value \code{NULL} to the \code{breaks} argument} \item{digits}{Numerical. How many digits after the demimal points should be when plotting the person-years.} \item{\dots}{Further graphical parameters to be passed to the plotting methods. Grids can be drawn (behind the life lines) using the following parameters in \code{plot}: \itemize{ \item \code{grid} If logical, a background grid is set up using the axis ticks. If a list, the first component is used as positions for the vertical lines and the last as positions for the horizontal. If a nunerical vector, grids on both axes are set up using the distance between the numbers. \item \code{col.grid="lightgray"} Color of the background grid. \item \code{lty.grid=2} Line type for the grid. \item \code{coh.grid=FALSE} Should a 45 degree grid be plotted?} } } \details{ The plot method for \code{Lexis} objects traces ``life lines'' from the start to the end of follow-up. The \code{points} method plots points at the end of the life lines. If \code{time.scale} is of length 1, the life lines are drawn horizontally, with the time scale on the X axis and the id value on the Y axis. If \code{time.scale} is of length 2, a Lexis diagram is produced, with diagonal life lines plotted against both time scales simultaneously. If \code{lex} has been split along one of the time axes by a call to \code{splitLexis}, then vertical or horizontal grid lines are plotted (on top of the life lines) at the break points. \code{PY.ann} writes the length of each (segment of) life line at the middle of the line. Not advisable to use with large cohorts. Another example is in the example file for \code{\link{occup}}. } \author{Martyn Plummer} \examples{ # A small bogus cohort xcoh <- structure( list( id = c("A", "B", "C"), birth = c("14/07/1952", "01/04/1957", "10/06/1987"), entry = c("04/08/1965", "08/09/1972", "23/12/1991"), exit = c("27/06/1997", "23/05/1995", "24/07/1998"), fail = c(1, 0, 1) ), .Names = c("id", "birth", "entry", "exit", "fail"), row.names = c("1", "2", "3"), class = "data.frame" ) # Convert the character dates into numerical variables (fractional years) xcoh$bt <- cal.yr( xcoh$birth, format="\%d/\%m/\%Y" ) xcoh$en <- cal.yr( xcoh$entry, format="\%d/\%m/\%Y" ) xcoh$ex <- cal.yr( xcoh$exit , format="\%d/\%m/\%Y" ) # See how it looks xcoh # Define as Lexis object with timescales calendar time and age Lcoh <- Lexis( entry = list( per=en ), exit = list( per=ex, age=ex-bt ), exit.status = fail, data = xcoh ) # Default plot of follow-up plot( Lcoh ) # Show follow-up time PY.ann( Lcoh ) # Show exit status plot( Lcoh, type="b" ) # Same but failures only plot( Lcoh, type="b", pch=c(NA,16)[Lcoh$fail+1] ) # With a grid and deaths as endpoints plot( Lcoh, grid=0:10*10, col="black" ) points( Lcoh, pch=c(NA,16)[Lcoh$lex.Xst+1] ) # With a lot of bells and whistles: plot( Lcoh, grid=0:20*5, col="black", xaxs="i", yaxs="i", xlim=c(1960,2010), ylim=c(0,50), lwd=3, las=1 ) points( Lcoh, pch=c(NA,16)[Lcoh$lex.Xst+1], col="red", cex=1.5 ) } \seealso{\code{\link{Lexis}}, \code{\link{splitLexis}}} \keyword{hplot} \keyword{aplot} Epi/man/gen.exp.Rd0000644000175100001440000001450112531361107013413 0ustar hornikusers\name{gen.exp} \alias{gen.exp} \title{ Generate covariates for drug-exposure follow-up from drug purchase records. } \description{ From records of drug purchase and possibly known treatment intensity, the time since first drug use and cumulative dose at prespecified times is computed. Optionally, lagged exposures are computed too, i.e. cumulative exposure a prespecified time ago. } \usage{ gen.exp(purchase, id = "id", dop = "dop", amt = "amt", dpt = "dpt", fu, doe = "doe", dox = "dox", breaks, use.dpt = ( dpt \%in\% names(purchase) ), lags = NULL, push.max = Inf, pred.win = Inf, lag.dec = 1 ) } \arguments{ \item{purchase}{Data frame with columns \code{id}-person id, \code{dop}-date of purchase, \code{amt}-amount purchased, and optionally \code{dpt}-defined daily dose, that is how much is assumed to be ingested per unit time. The time unit used here is assumed to be the same as that used in \code{dop}, so despite the name it is not necessarily measured per day.} \item{id}{Name of the id variable in the data frame.} \item{dop}{Name of the date of purchase variable in the data frame.} \item{amt}{Name of the amount purchased variable in the data frame.} \item{dpt}{Name of the dose-per-time variable in the data frame.} \item{fu}{Data frame with follow-up period for each person, the person id variable must have the same name as in the \code{purchase} data frame.} \item{doe}{Name of the date of entry variable.} \item{dox}{Name of the date of exit variable.} \item{use.dpt}{Logical, should we use information on dose per time.} \item{breaks}{Numerical vector of time points where the time since exposure and the cumulative dose are computed.} \item{lags}{Numerical vector of lag-times used in computing lagged cumulative doses.} \item{push.max}{How much can purchases maximally be pushed forward in time. See details.} \item{pred.win}{The length of the window used for constructing the average dose per time used to compute the duration of the last purchase} \item{lag.dec}{How many decimals to use in the construction of names for the lagged exposure variables} } \details{ Each purchase record is converted into a time-interval of exposure. If \code{use.dpt} is \code{TRUE} then the dose per time information is used to compute the exposure interval associated with each purchase. Exposure intervals are stacked, that is each interval is put after any previous. This means that the start of exposure to a given purchase can be pushed into the future. The parameter \code{push.max} indicates the maximally tolerated push. If this is reached by a person, the assumption is that some of the purchased drug is not counted in the exposure calculations. The \code{dpt} can either be a constant, basically translating the purchased amount into exposure time the same way for all persons, or it can be a vector with different treatment intensities for each purchase. In any case the cumulative dose is computed taking this into account. If \code{use.dpt} is \code{FALSE} then the exposure from one purchase is assumed to stretch over the time to the next purchase, so we are effectively assuming different rates of dose per time between any two adjacent purchases. Moreover, with this approach, periods of non-exposure does not exist. The intention of this function is to generate covariates for a particular drug for the entire follow-up of each person. The reason that the follow-up prior to drug purchase and post-exposure is included is that the covariates must be defined for these periods too, in order to be useful for analysis of disease outcomes. } \value{A data frame with one record per follow-up interval between \code{breaks}, with columns: \describe{ \item{\code{id}}{person id.} \item{\code{dof}}{date of follow up, i.e. start of interval. Apart from possibly the first interval for each person, this will assume values in the set of the values in \code{breaks}.} \item{\code{Y}}{the length of interval.} \item{\code{tfi}}{time from first initiation of drug.} \item{\code{tfc}}{time from latest cessation of drug.} \item{\code{cdur}}{cumulative time on the drug.} \item{\code{cdos}}{cumulative dose.} \item{\code{ldos}}{suffixed with one value per element in \code{lags}, the latter giving the cumulative doses \code{lags} before \code{dof}.} } } \author{Bendix Carstensen, \email{bxc@steno.dk}} \seealso{\code{\link{Lexis}}, \code{\link{splitLexis}}} \examples{ # Construct a simple data frame of purchases for 3 persons # The purchase units (in variable dose) correspond to n <- c( 10, 17, 8 ) dop <- c( 1995.2+cumsum(sample(1:4/10,n[1],replace=TRUE)), 1997.3+cumsum(sample(1:4/10,n[2],replace=TRUE)), 1997.3+cumsum(sample(1:4/10,n[3],replace=TRUE)) ) amt <- sample( 1:3/15, sum(n), replace=TRUE ) dpt <- sample( 15:20/25, sum(n), replace=TRUE ) dfr <- data.frame( id = rep(1:3,n), dop, amt = amt, dpt = dpt ) round( dfr, 3 ) # Construct a simple dataframe for follow-up periods for these 3 persons fu <- data.frame( id = 1:3, doe = c(1995,1997,1996)+1:3/4, dox = c(2001,2003,2002)+1:3/5 ) round( fu, 3 ) ( dpos <- gen.exp( dfr, fu = fu, breaks = seq(1990,2015,0.5), lags = 2:3/5 ) ) ( xpos <- gen.exp( dfr, fu = fu, use.dpt = FALSE, breaks = seq(1990,2015,0.5), lags = 2:3/5 ) ) # How many relevant columns nvar <- ncol(xpos)-3 clrs <- rainbow(nvar) # Show how the variables relate to the follow-up time par( mfrow=c(3,1), mar=c(3,3,1,1), mgp=c(3,1,0)/1.6, bty="n" ) for( i in unique(xpos$id) ) matplot( xpos[xpos$id==i,"dof"], xpos[xpos$id==i,-(1:3)], xlim=range(xpos$dof), ylim=range(xpos[,-(1:3)]), type="l", lwd=2, lty=1, col=clrs, ylab="", xlab="Date of follow-up" ) ytxt <- par("usr")[3:4] ytxt <- ytxt[1] + (nvar:1)*diff(ytxt)/(nvar+2) xtxt <- rep( sum(par("usr")[1:2]*c(0.98,0.02)), nvar ) text( xtxt, ytxt, colnames(xpos)[-(1:3)], font=2, col=clrs, cex=1.5, adj=0 ) } \keyword{data manipulation} Epi/CHANGES0000644000175100001440000005754112575536150012025 0ustar hornikusersChanges in 1.1.71 o Bug from calling lme4::vcov from within ci.lin fixed Changes in 1.1.70 o Bug in calling lme4::fixef from within ci.lin fixed o ci.lin with sample=TRUE now samples from the posterior of the parameter vector and then transforms this by the contrast matrix (earlier the sampling was from the posterior of the ctr.mat transformed parameters). Changes in 1.1.69 o ci.cum now has an argument ci.Exp (defaults to FALSE) that computes the ci of the cum.haz on the log-scale. This is useful if you want to transform c.i.s to the survival scale and want the c.i.s for the survival function to stay inside [0,1]. o ci.pred updated to automatically use the inverse link for transformation of results. Also now only accepts glm objects. o Ns now have arguents ref= and detrend=. ref= allows a reference value to be specified (where the Ns is 0); this is independent of the supplied data. detrend= projects the columns of Ns() on the orthogonal of the variable supplied; this is strongly dependent on the data. Changes in 1.1.68 o ci.lin has been groomed to use internally (newly, from 1.1.68) defined methods COEF and VCOV to extract coefficients and variance-covariances of these from different types of objects. Changes in 1.1.67 o The simLexis vignette has been groomed a bit o The function ci.pred (a wrapper for predict.glm) added Changes in 1.1.66 o A crr.Lexis method has been added to simplify the use of the Fine-Gray model when data are set up in a Lexis object. o ci.lin and ci.exp now recognises crr objects. o A wrapper, ci.pred, for predict.glm has been added, it returns predictions with confidence intervals. Changes in 1.1.65 o Despite the note, dropped rows from construction of a Lexis objects were not put in the "dropped" attribute. Changes in 1.1.64 o Fixed the sim-Lexis vignette Changes in 1.1.64 o Added function ZArray, which generates an array of 0s just as NArray generates an array of NAs. o Updated code to avoid "::" and ":::" as far as possible, as well as "<<-". Hence excluded records from construction of a Lexis object is now put in an attribute "dropped" of the Lexis object. Changes in 1.1.62 o Bug fix in the example code for boxes.Lexis Changes in 1.1.61 o ci.lin updated to recognize objects of class "lmerMod" from lmer. Changes in 1.1.60 o Documentation for DMlate updated. Changes in 1.1.59 o boxes.Lexis updated so that also no. of beginners and enders are properly formatted if larger than 999 Changes in 1.1.57 o boxes.Lexis updated with arguments show.BE and BE.pre, allowing annotation of boxes by the *number* of persons strating and ending in different states. Changes in 1.1.57 o simLexis substantially updated and groomed to accept Cox-models for transitions too. Example in the documentation and vignette is expanded accordingly. Changes in 1.1.56 o Typos in documentation corrected. o When records with too short follow-up are encountered by Lexis, they are dropped from the resulting object, but they will be availabe in the object drop.sh in the global environment. o The col and border arguments to plot.pState were not repeated automatically, so needed fixing. o More elaborate warning and error-messages if initiators in absorbing states are handed to simLexis. Changes in 1.1.55 o Documentation of clogistic is clarified w.r.t. likelihood contributions of matched sets. Changes in 1.1.54 o apc.fit updated to use the Ns wrapper, and automatically use knots located so that the marginal number of events is the same between knots. o plot.apc and lines.apc defined as methods for apc objects. They are just wrappers for apc.plot and apc.lines. o gen.exp example slightly modified to give better output. Changes in 1.1.53 o Population figures in N.dk, M.dk and Y.dk updated Changes in 1.1.52 o col.txt argument to plotEst was not working properly. Fixed o txt argument to plotEst can now be an expression vector allowing sub- and superscripts and mathematical expressions. o Relevel did not issue warning or error when a given level was being specified as member of more than one new level. It now stops with an error. o The convenience wrappers Ns (for ns) and NArray (for array) have been added Changes in 1.1.51 o boxes.Lexis fixed so that rates could be computed from matrix input to. Changes in 1.1.50 o Calculation of p-values in ci.lin has been modified, thyanks to Krista Fischer. Changes in 1.1.49 o Default of "border" argument to plot.pState changed to "transparent" Changes in 1.1.48 o Slight tidying of code in apc.fit. Automatic determination of reference points for period and cohort fixed to produce median correctly. Changes in 1.1.47 o Bug in simLexis (specifically in Epi:::simX) where factor levels were wrongly used, is now corrected. Versions earlier are likely to produce wrong state allocation in simulated dataset and not crash. Changes in 1.1.46 o lex.id handling in simLexis changed, allows for easier simulation in chunks which may be necessary to avoid memory problems. Changes in 1.1.45 o simLexis introduced. Allows simulation from multiple timescale mulitste models. Accompanying utilities supplied too: pr.Lexis, prev and plot.prev. Changes in 1.1.44 o A number of dead links in the documentation have been resurrected. o attach() purged from Lexis.diagram, Lexis.lines and ccwc. o Bug in computing AUC in ROC fixed, thanks to Karl Ove Hufthammer. Documentation clarified with respect to definition of test. o Bug fix to remove warning when more than one variable name was supplied in the by= argument of summary.Lexis. Changes in 1.1.43 o N2Y fixed so that local variable bindings are recognized (M. Plummer) o summary.Lexis expanded with the argument by=, allowing a summary by a factor. Also, the default behaviour is now to return only the transition summary, and only optionally the transition rates; giverned by the Rates= argument Changes in 1.1.42 o Bug that caused a crash of ROC when vaiables in the "form" argument were only in the "data" argument data frame and not in the global environmant. Now fixed thanks to Ben Barnes of the Robert Koch Institute, German Center for Cancer Registry Data Changes in 1.1.41 o boxes.Lexis now returns an object of class MS, which easily allows plotting of slightly modified multistate displays using the new command boxes.MS. The facility in boxes.Lexis to produce weedy code for the same purpose has been removed. o boxes.Lexis now allows to show *both* number of transitions *and* rates between the states. o stack.Lexis now takes the Lexis attributes "time.scales" and "breaks" across from the Lexis object to the stacked.Lexis object. Changes in 1.1.40 o subset, transform and Relevel methods have been added for objects of type stacked.Lexis. Changes in 1.1.39 o effx has been expanded with an extra argument eff=, which defaults to NULL, allows "RR" for relative risk for binary data, and "RD" for rate differences for failure data. Also logical response is admitted for binomial and failure responses. o factorize and Relevel are now synonyms. Methods for Relevel are Relevel.default, Relevel.factor, Relevel.Lexis, for factorise only the factorize.default and factorize.Lexis exist. o A mistake in estimating sequential residuals in apc.fit() has been corrected. The wrong model (adc instead of rc, in the case parm == "AD-C-P") was used for the basis of residuals. Thanks to Shih-Yung Su from Taiwan. o as.Date.cal.yr is added, even though it was removed earlier: cal.yr is a class for date variables and the conversion function should be around. o A bug in ci.pd causing calculations to go wrong if vectors were supplied as input. Correction thanks to Patrick Rymer. o A bug in factorize.Lexis is fixed. Now appropriately groups factor levels in the state factors lex.Cst and lex.Xst. Relevel.Lexis is defined as an alias for factorize.Lexis. Thus the functins Relevel() and factorize() are now identical. Changes in 1.1.36 o A bug in boxes.Lexis causing arrow-coloring to go out of sync fixed o Array problems in stat.table fixed Changes in 1.1.35 o none. Just compiled for the archive with R 2.15.0 Changes in 1.1.34 o plotEst now has an arguments col.txt and font.txt which allows the use of different colors and fonts for the annotation of the estimates. Models likely to be multiplicative incurs a logarithmic x-axis in the plot. o ci.exp introduced - a wrapper for ci.lin, getting the exponentiated parameters with CIs. o A bug causing unintended reordering of levels using boxes.Lexis is fixed. o Method etm for Lexis objects included. This just takes a Lexis object, and fishes out the relevant information to be able to call the function etm from the etm package (empirical transition matrix). This function is now physically defined in the file(s) foreign.Lexis.R(d). Changes in 1.1.32 o gen.exp was re-written and simplified. o Small cosmetic changes to the code for N2Y Changes in 1.1.31 o The extractor functions entry, exit, status and dur have now an argument by.id=FALSE. If set to TRUE, only one record per lex.id is returned and the resulting object has lex.id as (row)names attribute. Changes in 1.1.30 o DMlate expanded with the column dooad o Documentation for as.Date.cal.yr fixed o Bug in gen.exp fixed (It was assuming a data frame called dfr existed was wrong, but not spotted by the example because in the example one actually did exist!) Changes in 1.1.29 o New function gen.exp for generating time-varying exposure variables from drug purchase records. Changes in 1.1.28 o splitLexis now allows NAs in the timescale on which you split. Records with NAs are simply left untouched, but a warning is printed. o A bug in boxes.Lexis preventing rates to be printed was issued. Changes in 1.1.27 o A few typos corrected o Functions a.lines, a.points, cp.lines and cp.points added to facilitate plotting points and curves from APC-models. o apc.fit did not return the reference cohort/period if it was not supplied in a model with explicit drift. Changes in 1.1.26 o A new function N2Y added which computes person-years in Lexis triangles from population prevalence data. o Demographic example data from Denmark added: N.dk - population size at 1 Jan Y.dk - risk time in Lexis triangles M.dk - mortality data B.dk - births in Denmark 1902 ff. Changes in 1.1.25 o Added sd() function to stat.table() o tmat.Lexis has an argument Y=FALSE which if set to TRUE will return the person-years in the diagonal. o boxes() now explicitly defined with methods boxes.Lexis and boxes.matrix that explicitly call boxes.default (which is the function doing the work (almost identical to the former boxes.Lexis). Changes in 1.1.24 o countLexis did not take the "timescales" and "breaks" attribute across to the resulting Lexis object. Changes in 1.1.23 o A missing defualt value for new.scale in doCutLexis caused a crash o A missing default value for new.scale in doCutLexis caused a crash when using the count=TRUE argument to cutLexis. Changes in 1.1.23 o ci.lin and ci.cum now have a sample= argument that causes return of a sample from the normal distribution with mean equal to the estimates and variance equal to the estimated variance of the estimates. To be used to do "parametric bootstrap" of complicated functions of the parameters, such as state occupancy probabilities from multistate models. o ci.lin now supports objects of class mipo (Multiple Imputation Pooled Objects --- see the mice package). o tabplot removed --- it was a proper subset of the mosaicplot from the graphics package Changes in 1.1.22 o A bug in boxes.Lexis prevented the use of ht= and wd= arguments to set boxes to a prespecified size. The scaling of these is now also clarified in the man file for boxes.Lexis. Changes in 1.1.21 o Specifying period of cohort effects with only two parameters caused apc.fit to crash. Fixed by adding a few ",drop=FALSE" in subsetting of matrices. o Since as.Date.cal.yr was not used anywhere, it has been removed from the package. o A function Wald added to do Wald test of several parameters or linear combinations of them. It is a small extension on top of ci.lin. Changes in 1.1.20 o CITATION file added. Changes in 1.1.19 o ci.lin amended by an argument subint= allowing to select subsets of parameters matching several strings. Changes in 1.1.18 o boxes.Lexis has been made a bit more versatile for production of box-diagrams from multistate models. Changes in 1.1.17 o A comma was missing in the code-output from boxes.Lexis o mstate.Lexis function changed name to msdata.Lexis, according to the change in convention in the mstate package. Code simplified as it is now using the functionality in stack.Lexis. o A factorize.Lexis function has been added, it basically changes the variables lex.Cst and lex.Xst to factors with same set of levels. A useful facility when we want boxes.Lexis to work. Changes in 1.1.16 o boxes.Lexis now resets the graphical parameters (par()) on exit. o plot.Lexis now has a default Lexis object as argument, allowing use of the function to plot empty Lexis diagrams without setting up a Lexis object first. The bogus object has timescales c("Date","Age") but 0 follow-up time. Changes in 1.1.14 o ci.lin now has an argument df to allow for t-quantiles in ci calculations. o lls() function revised to give nicer (left justified) output. Changes in 1.1.13 o ci.lin now supports objects of class clogistic. o utility function ci.mat() added --- earlier defined inside ci.lin and ci.cum, but also useful on its own. o lls() and clear() added, to ease overview and clearing of workspace (and attachments!) o apc.frame now sets the option "apc.frame.par" with the offset and scaling of calendar time part of the apc frame. This is recognised now by apc.lines automatically. o Function pc.points, pc.lines, pc.matlines, pc.matpoints added to ease plotting the calendar time region of an apc frame; live off the option "apc.frame.par". Changes in 1.1.12 o Added function clogistic for conditional logistic regression. Changes in 1.1.9 o A function PY.ann.Lexis is added. It writes the length of (pieces of) lifelines in a Lexis digram produced by plot.Lexis. o plot.Lexis now sets an option "Lexis.time.scale" which is queried by lines.Lexis and points.Lexis, so that time.scale is only needed in plot.Lexis. Changes in 1.1.8 o apc.fit had a bug in the specification of knots when using the argument model="bs". Fixed. Changes in 1.1.7 o boxes.Lexis has been further enhanced with the facility to plot rates instead of no. transitions on the arrows if required. The code has been tidied a bit too. o The man file for boxes.Lexis and subsidiaries have been renamed to MS.boxes.Rd Changes in 1.1.5 o boxes.Lexis have been enhanced to accommodate two-way transitions between states. Annotation by number of transitions has been improved to accommodate this too by always putting the number on the left side of the arrow. Changes in 1.1.3 o ci.lin() and ci.cum() have been expanded to accept objects of class "MIresult" from the mitools package (Esa Lr). o The boxes.Lexis() now gives a more versatile piece of code, which computes the text widths and heights. Changes in 1.1.2 o cutLexis crashed if new.state=TRUE and new.scale=FALSE were specified. Fixed. Changes in 1.1.1 o Functions stack.Lexis, tmat.Lexis and mstate.Lexis have been added to facilitate practical multistate modeling. The two latter provides an interface to the mstate package. o Functions tbox, dbox, fillarr, boxarr and boxes.Lexis added to facilitate drawing of multistate box diagrams. Changes in 1.1.0 o Two new datasets DMrand and DMlate with random samples from the Danish National diabetes register. The examples from these illustrate most of the recently added multistate stuff. o Minor bug in check.time.scale was fixed (misplaced parentheses in the argument to any(), causing a warning). o cutLexis introduces a new timescale "time since event", which has missing values for any follow-up time prior to event. Hence requires that the Lexis plotting functions explicitly discards the units with missing on timescales in use. Accomplished by the new function valid.times. o cutLexis now places the new states after the precursor states and before the other ones in the factors lex.Cst and lex.Xst. o splitLexis uses the first timescale by default. Which in particular means that in the case of only one time scale it is not necessary to specify it, so this has become acceptable now. o Vignettes has been updated. o Example for ci.cum has been fixed to be compatible with the new survival package as of 2.9.0 as announced. o apc.fit fitted the wrong model when using parm="AC-P". Fixed o The axis scaling of apc.plot has been improved. o apc.frame now by default plots a reference line for RR=1, this may be switched off by the (newly introduced) parameter "ref.line=FALSE". Changes in 1.0.10 o Fixed parse errors in documentation. Changes in 1.0.9 o Thanks to Mike Murphy, Professor of Demography, Department of Social Policy, London School of Economics, a bug causing a crash of apc.fit if only one row in the model matrix corresponds to the reference level was fixed. o Also thanks to Mike Murphy, a much more efficient calculation of median period and cohort is now used. o apc.fit expanded with an argument allowing logistic regression model instead of a Poisson model only. Changes in 1.0.8 o tab.Lexis removed and replaced by summary.Lexis which gives a better summary of the transitions and transition rates. o A bug in ci.pd (confidence interval for probability difference) has been fixed. Changes in 1.0.7 o Stat.table data= argument fixed. Changes in 1.0.6 o Lexis now converts character values of entry/exit.status to factors for lex.Cst and lex.Xst. And produces a warning if the entry.state is defaulted to the first level of exit.state (i.e. when exit.state is given as charcter or factor). o splitLexis gave wrong results for factor states. cutLexis gave wrong results for character states. Fixed by letting Lexis coerce character mode entry.status and exit.status to factors for lex.Cst and lex.Xst. In split.lexis.1D was the problem with the factor states, they were coerced to numeric when stuffed into the new.Xst matrix. Now states are turned to numeric before the call to split.lexis.1D and the factor attributes re-instituted after the split. o Added transform method for Lexis objects. Changes in 1.0.5 o Typos in documentation of APC functions corrected. o cutLexis updated to handle various instances by MP. A few BxC additions to MP's code: - cutLexis2 is renamed cutLexis. BxC's old cutLexis killed. - count=FALSE as argument to cutLexis, just calls countLexis if TRUE. - cutLexis no longer returns the working column lex.cut - cutLexis was missing the attributes "time.scales" and "breaks". Added. - cut= is allowed, simplifying cut of split Lexis objects. - documentation accordingly altered. o splitLexis amended so that lex.Xst is returned as a factor if lex.Cst is a factor. splitLexis crashed if lex.Cst and lex.Xst were factors. o Lexis now allows omission of entry.status --- if exit.status is numeric/logical/factor, entry.status (and hence lex.Cst) will be set to 0/FALSE/first level. o Lexis made sure that lex.Cst and lex.Xst have the same class. If they are factors, the set of levels is taken to be the union. Changes in 1.0.1 o cutLexis now works properly - no it did not! o cutLexis now accepts a (smaller) dataframe with cutpoints and states as input. Changes in 0.9.6 o Bugfix in timeBand, crashed when type="factor" was chosen. levels was given as 0:(lengh(breaks)+1), changed to 0:lengh(breaks) Changes in 0.9.5 o The Lexis definition now assumes that entry is 0 if only one of exit or duration are given as a one-component list. o tab.Lexis is now properly working as a method for Lexis objects. Changes in 0.9.4 o The lex.-variables in Lexis objects are now called lex.dur, lex.Cst, lex.Xst, lex.id (duration, Current state, eXit state and identification) o An extra option states= added to Lexis. If used the state variables are returned as factors. o The utility function deltat.Lexis() has been renamed to dur(). o state() now returns a dataframe of both (entry,exit) states a default. The reason for this is that lex.Cst and lex.Xst may be factors (which actually would be the logical thing to have by default, but it is not enforced only allowed). o entry() and exit() now by default returns matrices with entry and exit times on all timescales. If only one timescale is requested, they return a 1-column matrix. o A minor typo in stat.table corrected: in the definition of the quantile function prob=probs changed to probs=probs. o cutLexis() bugs corrected. Now works with split data too, but requires specification of censoring states --- i.e. states that will be replaced by the new state obtained at the cut date. Changes in 0.9.3 (since 0.9.0) o New function cutLexis() to allow cutting of follow-up time at a specific date for each person, where a new state is assumed. o New function tab.Lexis() which tabulates records as well as events and person-years from a Lexis object. o splitLexis got state information wrong if breaks were not unique. Fixed. Changes in 0.9.0 o effx and effx.match updated following Tartu 2007 to avoid attaching the data, and to correct the parsing of the list of control variables. Changes in 0.8.0 o A new function Lexis() to define follow-up on multiple timescales has been added. An object of class Lexis is defined and a number of utilities for the class are available. Time-splititng is now done by splitLexis(). o The old Lexis function for time-splitting has been renamed to W.Lexis for backward compatibility. o The function epi.eff() has been replaced by effx() and effx.match(). Changes 0.7.2 to 0.7.3 o Icens is now able to handle a constant underlying rate. (A bug in expand.data was fixed). Changes 0.7.0 to 0.7.2 o Bugs in ROC fixed, and the functionality of the grid option slightly chnaged. Changes 0.6.1 to 0.7.0 o Function Icens() for estimation of rates from intervalcensored follow-up data by Martyn Plummer added. o Function epi.eff by Michael Hills is added. Estimates effects in various epidemiological study types. Changes 0.6.0 to 0.6.1 o Coding errors in thoro dataset corrected. Only concerning dates and status for livercancer diagnosis. o Lexis.lines now allows col.life, lwd.life, pch.fail, col.fail and cex.fail to have the same length as the data, i.e. to produce individualized lines and points. As Lexis.diagram calls Lexis.lines, this facility is also available through Lexis.diagram. Changes from 0.4 to 0.6 o ci.pd() amended to support the Agresti-Caffo method for confidence intervals for difference between proportions. Newcombes method 10 is still used in twoby2. o apc.fit() added. Fits age-period-cohort models with a range of possibilities for parametrizations. o Functions for time-splitting at arbitrary times and at recurrent failures have been added: isec(), icut(), fcut1(), fcut() and ex1(). Eventually they will be superseded by new facilities in Lexis. o Function apc.plot() to make a plot of an apc fit is added. It is just a wrapper for apc.frame() and apc.lines(), with suitable computation of the paramters supplied to apc.frame. o Lexis.lines(): pch.fail and col.fail expandS to vectors of length two if only one value is given. o ci.cum() aimed at computing cumulative hazard functions from parametric functions for hazards. o Problem in print.floated() with printing of objects of class "floated" fixed. o Problem in ci.lin when subset did not match any factor names and diff=T was given the function crashed. Fixed, and documentation updated. o cal.yr produces objects of class c("cal.yr","numeric"). Functions as.Date.numeric and as.Date.cal.yr added.