rstpm2/0000755000176200001440000000000015105273072011503 5ustar liggesusersrstpm2/tests/0000755000176200001440000000000013566730271012655 5ustar liggesusersrstpm2/tests/testthat/0000755000176200001440000000000015105273072014505 5ustar liggesusersrstpm2/tests/testthat/test_missing.R0000644000176200001440000003351215053614766017357 0ustar liggesuserslibrary(rstpm2) ## for coping with weird test behaviour from CRAN and R-devel .CRAN <- TRUE slow <- FALSE expect_eps <- function(expr, value, eps=1e-7) expect_lt(max(abs(expr-value)),eps) context("Missing data - stpm2") ## fit0 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2[-1,]) ## dput("names<-"(coef(fit0),NULL)) beta1 <- c(-7.24331354281574, -0.359486483311025, 4.75355863915738, 11.5332451005529, 4.56596451196539) ## test_that("Missing event time - stpm2", { brcancer2 <- rstpm2::brcancer brcancer2$rectime[1] <- NA expect_warning(fit1 <<- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2), "Some event times are NA") expect_eps(coef(fit1),beta1, 1e-5) expect_length(predict(fit1), 685) }) test_that("Invalid event time - stpm2", { brcancer2 <- rstpm2::brcancer brcancer2$rectime[1] <- -1 expect_warning(fit1 <<- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2), "Some event times <= 0") expect_eps(coef(fit1),beta1, 1e-5) expect_length(predict(fit1), 685) }) test_that("Missing covariate - stpm2", { brcancer2 <- rstpm2::brcancer brcancer2$hormon[1] <- NA fit1 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2) expect_eps(coef(fit1),beta1, 1e-5) expect_length(predict(fit1), 685) }) test_that("Missing weight - stpm2", { brcancer2 <- transform(rstpm2::brcancer, w=1) brcancer2$w[1] <- NA fit1 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2,weights=w) expect_eps(coef(fit1),beta1, 1e-5) expect_length(predict(fit1), 685) }) test_that("Predictions with missing values - stpm2", { brcancer2 <- transform(rstpm2::brcancer, w=1) brcancer2$w[1] <- NA fit1 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2,weights=w) test <- c(surv=0.7230207, fail=1-0.7230207, haz=0.000335262) for(name in names(test)) expect_eps(predict(fit1,newdata=data.frame(hormon=1,rectime=1000),type=name), test[name], 1e-6) expect_eps(predict(fit1,newdata=data.frame(hormon=1,rectime=1000),type="hr",var="hormon"), 0.6980347, 1e-6) expect_eps(predict(fit1,newdata=data.frame(hormon=1,rectime=1000),type="hdiff",var="hormon"), -0.0001012377, 1e-6) }) test_that("Missing bhazard - stpm2", { set.seed(12345) x <- rnorm(1e3,0,0.2) cause1 <- rexp(1e3,1e-3*exp(x)) other <- rexp(1e3,1e-4) e <- cause1=26,0, 3))) hiv2 <- transform(hiv, Left = ifelse(Event==2,Right, ifelse(Event==0,Left, Left)), Right = ifelse(Event==2,Inf, ifelse(Event==0,Inf, Right))) fit <- stpm2(Surv(Left,Right,Event,type="interval")~Stage, data=hiv2, df=2) expect_eps(coef(fit)[2], 1.917699, 1e-4) }) context("aft") ## test_that("base", { fit <- aft(Surv(rectime,censrec==1)~hormon,data=brcancer) expect_eps(coef(fit)[1], 0.267370, 1e-5) fit2 <- aft(Surv(rectime,censrec==1)~factor(hormon),data=brcancer) expect_true(all(coef(fit)==coef(fit2))) expect_warning(fit3 <- aft(Surv(rectime,censrec==1)~hormon+factor(hormon),data=brcancer)) expect_true(all(coef(fit)==coef(fit3))) }) test_that("tvc", { ## main effect IS needed for the parametric case (else constrained to be 0 at first event time) expect_warning(fit <- aft(Surv(rectime,censrec==1)~hormon,data=brcancer,tvc=list(hormon=2))) expect_eps(coef(fit)[1], 1.693524, 1e-5) }) test_that("Cure", { fit <- aft(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3,mixture=TRUE) expect_eps(coef(fit)[2], -5.635997, 1e-5) fit <- aft(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3,cure=TRUE) ## testthat::skip_on_os("mac","aarch64") expect_eps(coef(fit)[1], 0.37021943, 1e-4) }) context("stpm2 + frailty") ## test_that("base", { set.seed(12345) id <- rep(1:200,each=2) x <- rnorm(400) mu.cluster <- rnorm(200) y <- rexp(400, exp(mu.cluster[id]+x)) d <- data.frame(y,e=1,x,id) fit <- stpm2(Surv(y,e)~x+cluster(id),data=d) expect_eps(coef(fit)[2], 0.9256663, 1e-5) expect_eps(coef(fit)[6], -0.4698344, 1e-5) fit <- stpm2(Surv(y,e)~x+cluster(id),data=d,RandDist="LogN") expect_eps(coef(fit)[2], 0.93819784, 1e-5) expect_eps(coef(fit)[6], 0.02906888, 1e-5) }) ## test_that("providing initial values with frailty works", { dat <- data.frame( y = c(1, 2, 1, 2, 1, 1), event = c(0, 1, 1, 0, 1, 1), grp = c(1, 1, 2, 2, 3, 3)) fit <- gsm(Surv(y, event) ~ 1, dat, df = 1, cluster = dat$grp) fit_new <- gsm(Surv(y, event) ~ 1, dat, df = 1, cluster = dat$grp, init = head(coef(fit), -1), logtheta = tail(coef(fit), 1)) expect_equal(coef(fit), coef(fit_new)) }) context("pstpm2") ## if (!.CRAN) test_that("base", { fit <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer) expect_eps(coef(fit)[2], -0.3650564, 1e-5) ## fit <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, ## control=list(optimiser="NelderMead")) ## expect_eps(coef(fit)[2], -0.36581571, 1e-3) }) if (slow) { test_that("tvc arg", { fit <- pstpm2(Surv(rectime,censrec==1)~1,data=brcancer,tvc=list(hormon=-1)) expect_eps(coef(fit)[1], -1.456845e+00, 1e-5) ## main effect is removed by the tvc call fit2 <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,tvc=list(hormon=-1)) expect_eps(coef(fit), coef(fit2), 1e-10) fit3 <- pstpm2(Surv(rectime,censrec==1)~hormon+x1,data=brcancer,tvc=list(hormon=-1)) expect_eps(coef(fit3)[2], -2.426229e-04, 1e-5) }) test_that("tvc using smooth.formula", { ## main effect should be EXCLUDED for the penalised case fit <- pstpm2(Surv(rectime,censrec==1)~1,data=brcancer, smooth.formula=~s(log(rectime))+s(log(rectime),by=hormon)) expect_eps(coef(fit)[1], -1.456845e+00, 1e-5) }) context("pstpm2 + frailty") ## test_that("base", { set.seed(12345) id <- rep(1:200,each=2) x <- rnorm(400) mu.cluster <- rnorm(200) y <- rexp(400, exp(mu.cluster[id]+x)) d <- data.frame(y,e=1,x,id) fit <- pstpm2(Surv(y,e)~x+cluster(id),data=d) expect_eps(coef(fit)[2], 0.9071705, 1e-5) expect_eps(coef(fit)[12], -5.303905e-01, 1e-5) fit <- pstpm2(Surv(y,e)~x+cluster(id),data=d,RandDist="LogN") expect_eps(coef(fit)[2], 9.334020e-01, 1e-5) expect_eps(coef(fit)[6], 1.426793e-02, 1e-5) }) } rstpm2/tests/testthat/test_zeroModel.R0000644000176200001440000000212213566730271017634 0ustar liggesuserslibrary(rstpm2) expect_eps <- function(expr, value, eps=1e-7) expect_lt(max(abs(expr-value)),eps) context("zeroModel") ## test_that("base", { x <- 1:10 y <- c(1:9,11) d <- data.frame(x,y) fit <- zeroModel(lm(y~x,data=d)) expect_eps(coef(fit), c(0,0), 1e-10) expect_eps(vcov(fit), matrix(0,2,2), 1e-10) ## expect_eps(predict(fit,newdata=d), rep(0,10), 1e-10) # zeroModel class not exported }) context("hrModel") ## test_that("base", { x <- 1:10 y <- c(1:9,11) fit <- hrModel(glm(y~x,family=poisson),2,ci=c(1,4)) expect_eps(coef(fit), c(0.4577646, 0.2007416, 0.6931472), 1e-5) expect_eps(vcov(fit), matrix(c(0.148392636125595, -0.0185062979900643, 0, -0.0185062979900643, 0.00262367771332864, 0, 0, 0, 0.125070457954665),3,3), 1e-10) expect_eps(predict(fit), predict.glm(fit$base,type="haz")*2, 1e-10) expect_eps(predict(fit,type="gradh"), cbind(predict.glm(fit$base,type="gradh")*2, predict.glm(fit$base,type="haz")*2), 1e-10) }) rstpm2/tests/testthat/test_vuniroot.R0000644000176200001440000000702115010127261017545 0ustar liggesuserslibrary(rstpm2) ## for coping with weird test behaviour from CRAN and R-devel .CRAN <- FALSE ## pstpm2+frailty models are slow slow <- FALSE expect_eps <- function(expr, value, eps=1e-7) expect_lt(max(abs(expr-value)),eps) context("vuniroot") ## test_that("examples", { ## some platforms hit zero exactly on the first step: ## if so the estimated precision is 2/3. f <- function (x, a) x - a xmin <- vuniroot(f, lower=c(0, 0), upper=c(1,1), tol = 0.0001, a = c(1/3,2/3)) expect_eps(xmin$root, c(1/3,2/3), 1e-10) ## handheld calculator example: fixed point of cos(.): expect_eps(vuniroot(function(x) cos(x) - x, lower = -pi, upper = pi, tol = 1e-9)$f.root, 0, 1e-10) expect_eps(vuniroot(function(x) x*(x^2-1) + .5, lower = -2, upper = 2, tol = 0.0001)$f.root, 0, 1e-5) expect_eps(vuniroot(function(x) x*(x^2-1) + .5, lower = -2, upper = 2, tol = 1e-10)$f.root, 0, 1e-10) ## Find the smallest value x for which exp(x) > 0 (numerically): expect_eps((r <- vuniroot(function(x) 1e80*exp(x) - 1e-300, cbind(-1000, 0), tol = 1e-15))$root, -745.133219101941, 1e1) ##--- vuniroot() with new interval extension + checking features: -------------- f1 <- function(x) (121 - x^2)/(x^2+1) f2 <- function(x) exp(-x)*(x - 12) expect_error(vuniroot(f1, cbind(0,10)), "f[(][)] values at end points not of opposite sign") expect_error(vuniroot(f1, cbind(0,2)), "f[(][)] values at end points not of opposite sign") ## where as 'extendInt="yes"' simply first enlarges the search interval: u1 <- vuniroot(f1, cbind(0,10),extendInt="yes") u2 <- vuniroot(f2, cbind(0,2), extendInt="yes") expect_eps(u1$root, 11, 1e-4) expect_eps(u2$root, 12, 1e-5) ## The *danger* of interval extension: ## No way to find a zero of a positive function, but ## numerically, f(-|M|) becomes zero : expect_error(vuniroot(exp, cbind(0,2), extendInt="yes"), "did not succeed extending the interval endpoints for f[(]lower[)] [*] f[(]upper[)] <= 0") ## Nonsense example (must give an error): expect_error(vuniroot(function(x) 1, cbind(0,1), extendInt="yes"), "no sign change found in 1000 iterations") ## Convergence checking : sinc <- function(x) ifelse(x == 0, 1, sin(x)/x) expect_warning(vuniroot(sinc, cbind(0,5), extendInt="yes", maxiter=4), "_NOT_ converged in 4 iterations") ## now with check.conv=TRUE, must signal a convergence error : expect_error(vuniroot(sinc, cbind(0,5), extendInt="yes", maxiter=4, check.conv=TRUE), "_NOT_ converged in 4 iterations") ## Weibull cumulative hazard (example origin, Ravi Varadhan): cumhaz <- function(t, a, b) b * (t/b)^a froot <- function(x, u, a, b) cumhaz(x, a, b) - u set.seed(12345) n <- 10 u <- -log(runif(n)) a <- 1/2 b <- 1 ## Find failure times ru <- vuniroot(froot, u=u, a=a, b=b, interval= cbind(rep(1.e-14,n), rep(1e4,n)), extendInt="yes")$root ru2 <- vuniroot(froot, u=u, a=a, b=b, interval= cbind(rep(0.01,n), rep(10,n)), extendInt="yes")$root expect_eps(ru, ru2, 1e-4) r1 <- vuniroot(froot, u= 0.99, a=a, b=b, interval= cbind(0.01, 10), extendInt="up") expect_eps(0.99, cumhaz(r1$root, a=a, b=b), 1e-8) expect_error(vuniroot(froot, u= 0.99, a=a, b=b, interval= cbind(0.1, 10), extendInt="down"), "no sign change found in 1000 iterations") }) rstpm2/tests/testthat/test_delayed.R0000644000176200001440000000401515053632151017275 0ustar liggesuserslibrary(rstpm2) ## for coping with weird test behaviour from CRAN and R-devel .CRAN <- FALSE expect_eps <- function(expr, value, eps=1e-7) expect_lt(max(abs(expr-value)),eps) context("Delayed entry - stpm2") ## test_that("Basic test", { brcancer2 <- transform(brcancer,startTime=ifelse(hormon==0,rectime/2,0)) fit <- stpm2(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2, smooth.formula=~nsx(log(rectime),df=3)) expect_eps(coef(fit)[2], -1.162380, 1e-5) }) test_that("Comparison with Stata", { brcancer2 <- transform(brcancer,startTime=ifelse(hormon==0,rectime/2,0)) fit <- stpm2(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2, smooth.formula=~nsx(log(rectime),df=3,stata=TRUE)) expect_eps(coef(fit)[2], -1.162504, 1e-5) }) test_that("pstpm2", { brcancer2 <- transform(brcancer,startTime=ifelse(hormon==0,rectime/2,0)) fit <- pstpm2(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2) expect_eps(coef(fit)[2], -1.1881852, 1e-5) ## fit <- pstpm2(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2, ## control=list(optimiser="NelderMead")) ## expect_eps(coef(fit)[2], -1.193484, 1e-5) }) context("Delayed entry - aft") ## test_that("All values zero or one", { brcancer2 <- transform(rstpm2::brcancer,startTime=0) fit0 <- aft(Surv(rectime,censrec==1)~hormon,data=brcancer2) fit1 <- aft(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2) expect_true(all(coef(fit0) == coef(fit1))) brcancer2 <- transform(rstpm2::brcancer,startTime=1) fit2 <- aft(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2) diff <- abs(coef(fit2)-coef(fit1)) expect_true(min(diff)>1e-7) expect_true(max(diff)<1e-5) set.seed(12345) brcancer3 <- transform(rstpm2::brcancer,startTime=rbinom(nrow(rstpm2::brcancer),1,0.5)) fit3 <- aft(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer3) diff <- abs(coef(fit2)-coef(fit1)) expect_true(min(diff)>1e-7) expect_true(max(diff)<1e-5) }) rstpm2/tests/testthat.R0000644000176200001440000000007013566730271014635 0ustar liggesuserslibrary(testthat) library(rstpm2) test_check("rstpm2") rstpm2/MD50000644000176200001440000001425215105273072012017 0ustar liggesusers9d0cb50177c3cb39c6bdb84d8f28a107 *DESCRIPTION 7517c6e3860dc1f5844a062a20053a53 *NAMESPACE 0f383af45743d2524d5084546fb981d5 *NEWS.md 7a3e10bd093a3794306660cf2fd04ea1 *R/RcppExports.R b9d731f5936016a7ba7d5375c83d5f38 *R/aft.R dac5d4c17e1c90a8aa25541eb6c29c2f *R/gaussquad.R bfc933717fe071ecf7f5a2162c926861 *R/inline.R 3f307020bea4614bf3412981db715013 *R/multistate.R 21a7e7cc422fceaa650828fc95d3d681 *R/pm2-3.R 2dcc7dc889e8627b51097a393b31e9cc *R/random.R c25903f251c81743ed181e7fd94547ad *R/read_gsm.R 46cbe305acaa8388724780efbc8d144f *R/tvc.coxph.R 820176d2e15eb0c2c599dc5baf99836e *R/vuniroot.R a6438daea04add39f04429446ebe65e8 *R/zzz.R bf1e7b6285e4f73dfa993c99d05a9029 *README.md 8c9ee21f56d6378ff314bea90097af68 *build/vignette.rds 8bdf762dc2ca2044f04dba37bef92a8c *data/brcancer.rda b229556b6ba0687cf0bdd24c57f36b48 *data/colon.rda a3e2d667791996e0c9356735415f65e5 *data/legendre.quadrature.rule.200.rda 3957834d97af33457d2dd68fef6c71ff *data/popmort.rda 81e24a15e9f72a17a41342e29a2cf041 *inst/CITATION 9ea1e1d2fb225aa788545363a9fa1ceb *inst/competing_risks.R 550dae29a9c3aacf83e8b94c577559ae *inst/doc/Introduction.R fa6549ac794da693ae72fdc215dc29e6 *inst/doc/Introduction.Rnw ce1fea1b431c57da516d317a1000765d *inst/doc/Introduction.pdf 1492411d0de110db58ccf3c6049ca45f *inst/doc/SimpleGuide.R e24e41c5b0d9294e31b5115b7ad2550a *inst/doc/SimpleGuide.Rnw 9fcd458c642918619caac4313cb930a9 *inst/doc/SimpleGuide.pdf 69589731c6a172cb93267af0bbafe958 *inst/doc/multistate.Rnw 35d88957555adfa8036bc4893c4eba64 *inst/doc/multistate.pdf c1b8ada2ac988166c6ba01d29550d215 *inst/doc/predictnl.R 2a60bd5f7e5250a3280bd792104d8c35 *inst/doc/predictnl.Rnw 132378c3b53a9202078394fb82a5d33a *inst/doc/predictnl.pdf ab5b64730204404e26d1148cadc90e3e *inst/equations.org 5dc49ecb15329a32858579ff30869067 *inst/fig1-README.md.jpg 02aabc3edb266e6d2d2afd7eb6a236cd *inst/fig2-README.md.jpg 9ed62b803df1fb3c95b49b00c0ccfa85 *inst/include/aft.h 1ce66bbdb7e67a445176292022fefd57 *inst/include/c_optim.h 19f339217e7f1fadbf8d0dc0a59d068d *inst/include/gsm.h 27437a9165a52dba2299ec518a85c7c7 *inst/include/splines.h 247e827337b630e305b763ddc8a14dcd *inst/math.input 5162cc5de37218649f409f2d1944656c *inst/math.org 8105582f46cf6efb0a2841512cb2b9df *inst/test.do 908b50255fb1ee4205dfb7c711025223 *inst/tutorial/timevar.org 2d0b1a2306fae549df8670d47c414326 *inst/tvc-cox.R deeac3aaa642d5153214b9a6dff24e10 *inst/unitTests/runTests.R fac220d92ba67c683c8418f043dc8b85 *inst/unitTests/runit.Basic.R 664d5f94b4a4a11adda8afd3746b81a0 *inst/working_code.R c1c325ac04262b9cbbbccbb834aaf659 *inst/working_code.max 85896f69ad0cfe08e7e42007f6446ed3 *man/aft-class.Rd 7bd0e166db1bcb3fb510c6098193dd07 *man/aft.Rd 8154bfb0ad893d80828ce7ea27d45ce8 *man/bhazard.Rd a2f6ac70f9c058c657e81be3ba854a99 *man/brcancer.Rd 13c35e79fca55fb04b03235ee81ea1e4 *man/coef.Rd 87f6cce9452c8af7d1e81440ce12e41e *man/colon.Rd 3b12a083a9ba51c9afad15bd087f4d00 *man/cox.tvc.Rd 8095619fe5137f707cb767b0a197dbff *man/eform.Rd 5c9f6cc4a2ccfe7df286a0185e7c7827 *man/grad.Rd 3997c41caed30ae48f0f242e8e09aa28 *man/gsm.Rd 576703677868819db1a5ac93dbc3140b *man/gsm.control.Rd 329969741eda19239639a218b4204711 *man/gsm_design.Rd dc1a0f3b29d80fe32a749c0e8d167ed4 *man/incrVar.Rd b9ab5aaad7bf1723d5fdb2ce75f84993 *man/legendre.quadrature.rule.200.Rd 3f253b78cdcf4873b20677c7f3b017a9 *man/lines.Rd ff8d07c86bf83912e19b75b4355a325a *man/markov_msm.Rd 1426b26523da181e156a4a4b67cdb06d *man/markov_sde.Rd 95539e1993943e03bbe5f357be2b4864 *man/nsx.Rd 4e50eccd5d6c55220414b0275c437c6c *man/nsxD.Rd 8dba3c4f982095ee62affef180a5371a *man/numDeltaMethod.Rd 5b2e71823619088854bc55a4a97e6c9e *man/plot-methods.Rd b46a3500a9b89f0c4c017d3085847cc2 *man/popmort.Rd 43a11b3c875c3ee5ba6486e1032a56a2 *man/predict-methods.Rd ae9b9caf21242ff15e697ea3780010da *man/predict.nsx.Rd eba177c4de97e6b1ea25060a8e2af434 *man/predictnl-methods.Rd ac95287a8c072f0d9e58bcc86e043d07 *man/predictnl.Rd eab1ef4cad505fbe80b8abf0c75db80b *man/pstpm2-class.Rd 31f01de64829d04f21a66a1bc810fe27 *man/residuals-methods.Rd 3e17c475da2677b2d6c2c98623bf664e *man/rstpm2-internal.Rd d9648124a5c8b1064c4ab3e70ffe65ec *man/simulate-methods.Rd e786290261805ee379df9dd1cc390a16 *man/smoothpwc.Rd 4a1e1ef6f0396938704f19ad8f9c96c6 *man/stpm2-class.Rd 8d2ceeea788d9c76637be21d9320117d *man/tvcCoxph-class.Rd 71dace9f31df2fb3aa535d97dcbdd701 *man/voptimize.Rd e37caeaabdf54374acb44d6f48d62c59 *man/vuniroot.Rd 2d7d0e7ca55016632fb095b980fe6306 *src/Makevars dbedfc641126921e0e48639e84fee06b *src/RcppExports.cpp 06475cf96281f8ad9feed69edbe29e34 *src/aft.cpp 70df2117d5dfc52bf14068b52961f55f *src/c_optim.cpp 33702ad1a4b5432daafa1dead35cf1a9 *src/cox_ph.cpp 0848d2cac41cdeea7c861b02f73fafea *src/gaussq2.f 897da29513339e3163572dacf06305e3 *src/gsm.cpp 8211be04f72fbfe5137d3dddafa6780c *src/laplace.f90 23ce66625d49138c45f4d3e3fd772f03 *src/multistate.cpp a1f94e3c1ad9b4087ef1a282851f0135 *src/package_init.c 0f5fde65b894236a380e912d2614ab40 *src/pluginEstimate2.cpp 23ce836f3c4632d7ccd0db67f9aece43 *src/splines.cpp f83e5f0a3cc01999390b4946cb326702 *src/test-nmmin.cpp e3201bbc8bc6309e2f5c80489824e62e *src/utils.cpp 69912ad3945f097e171bb9f990443b4c *src/vintegrate.cpp 6cc25dd9878af957adbaa8976b92de76 *src/vuniroot.cpp a0006ff6d02b9b992f9e7803c0d92779 *tests/testthat.R 4367b854024d74518db0872fb4171d7f *tests/testthat/test_base.R 05dc3c308c6613bb239a37e99a6c2015 *tests/testthat/test_delayed.R c5585f5fcc773972c3ff19f5a290928d *tests/testthat/test_markov_msm.R 7f6bd7d415e2eafb8e1ed15f057b9b52 *tests/testthat/test_missing.R 5f8be5a100f960d905584ff5848b5942 *tests/testthat/test_vuniroot.R a0f02953a5908aa2def3fd5d3e02a6ed *tests/testthat/test_zeroModel.R fa6549ac794da693ae72fdc215dc29e6 *vignettes/Introduction.Rnw e24e41c5b0d9294e31b5115b7ad2550a *vignettes/SimpleGuide.Rnw 62c49c898311183b53b31cc45ee57295 *vignettes/aft-weibull-20190816.pdf 5d6cc8b5069e59d4f6b8c65dcef4946b *vignettes/aft-weibull-los-20190816.pdf 712a3ff2a988021966ee8e00285331ae *vignettes/algorithm2e.sty 6fa770e3485520a6a5f2ea7d259c8f8d *vignettes/enumitem.sty ce5ab637a1436f9c105a3e9c4777b12a *vignettes/lib.bib 69589731c6a172cb93267af0bbafe958 *vignettes/multistate.Rnw 2d9700127a1d4ea9406b2ab6577b8e3f *vignettes/multistate_fig-1.pdf 0ab7af8a31a6f94cc52c112afc7f9f9f *vignettes/multistate_fig-2.pdf 2a60bd5f7e5250a3280bd792104d8c35 *vignettes/predictnl.Rnw rstpm2/R/0000755000176200001440000000000015105126152011700 5ustar liggesusersrstpm2/R/RcppExports.R0000644000176200001440000000172514706157711014334 0ustar liggesusers# Generated by using Rcpp::compileAttributes() -> do not edit by hand # Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 vdqagsRcpp <- function(f, a, b, epsrel, epsabs, limit, ny) { .Call(`_rstpm2_vdqagsRcpp`, f, a, b, epsrel, epsabs, limit, ny) } vdqagiRcpp <- function(f, bound, inf, epsrel, epsabs, limit, ny) { .Call(`_rstpm2_vdqagiRcpp`, f, bound, inf, epsrel, epsabs, limit, ny) } vrdqk21Rcpp <- function(f, lower, upper, a, b) { .Call(`_rstpm2_vrdqk21Rcpp`, f, lower, upper, a, b) } vrdqk15Rcpp <- function(f, boun, inf, a, b) { .Call(`_rstpm2_vrdqk15Rcpp`, f, boun, inf, a, b) } test_vdqags <- function() { .Call(`_rstpm2_test_vdqags`) } test_vdqagi <- function() { .Call(`_rstpm2_test_vdqagi`) } vunirootRcpp <- function(f, lower, upper, fa, fb, numiter, tol) { .Call(`_rstpm2_vunirootRcpp`, f, lower, upper, fa, fb, numiter, tol) } voptimizeRcpp <- function(f, ax, bx, tol) { .Call(`_rstpm2_voptimizeRcpp`, f, ax, bx, tol) } rstpm2/R/vuniroot.R0000644000176200001440000002052614706157711013730 0ustar liggesusersvuniroot <- function (f, interval, ..., lower=pmin(interval[,1], interval[,2]), upper=pmax(interval[,1], interval[,2]), f.lower = f(lower, ...), f.upper = f(upper, ...), extendInt = c("no", "yes", "downX", "upX"), check.conv = FALSE, tol = .Machine$double.eps^0.25, maxiter = 1000, trace = 0, n=NULL) { if (!missing(interval) && ncol(interval) != 2L) stop("'interval' must be a matrix with two columns") if (all(!is.numeric(lower) | !is.numeric(upper) | lower >= upper)) stop("lower < upper is not fulfilled") if (is.null(n) && length(lower) == 1 && length(upper) == 1 && length(f.lower) > 1) n <- length(f.lower) ## warning("Bounds have length 1: possibly replicate for the bounds to have the correct length") if (!is.null(n) && length(lower) == 1 && length(upper) == 1) { lower = rep(lower,n) upper = rep(upper,n) f.lower = f(lower, ...) f.upper = f(upper, ...) } if (any(is.na(f.lower))) stop("f.lower = f(lower) is NA at least once") if (any(is.na(f.upper))) stop("f.upper = f(upper) is NA at least once") Sig <- switch(match.arg(extendInt), yes = NULL, downX = -1, no = 0, upX = 1, stop("invalid 'extendInt'; please report")) truncate <- function(x) pmax.int(pmin(x, .Machine$double.xmax), -.Machine$double.xmax) NAF <- function(x) ifelse(is.na(x),FALSE,x) f.low. <- truncate(f.lower) f.upp. <- truncate(f.upper) fun <- function(x) f(x, ...) doX <- (is.null(Sig) && any(f.low. * f.upp. > 0, na.rm=TRUE) || (is.numeric(Sig) && (any(Sig * f.low. > 0, na.rm=TRUE) || any(Sig * f.upp. < 0, na.rm=TRUE)))) if (doX) { if (trace) cat(sprintf("search in [%g,%g]%s", lower, upper, if (trace >= 2) "\n" else " ... ")) Delta <- function(l,u) 0.01 * cbind(pmax(1e-04, abs(l)), pmax(1e-04, abs(u))) it <- 0L delta <- Delta(lower, upper) if (is.null(Sig)) { while (any(i <- NAF(f.lower * f.upper > 0)) && (any((iFl <- is.finite(lower)) | (iFu <- is.finite(upper))))) { if ((it <- it + 1L) > maxiter) stop(gettextf("no sign change found in %d iterations", it - 1), domain = NA) if (any(j <- iFl & i)) { ol <- lower[j] of <- f.lower[j] lower[j] <- lower[j] - delta[j,1] f.lower[j] <- fun(lower)[j] if (any(k <- is.na(f.lower[j]))) { lower[j][k] <- ol[k] f.lower[j][k] <- of[k] delta[j,1][k] <- delta[j,1][k]/4 } } if (any(j <- iFu & i)) { ol <- upper[j] of <- f.upper[j] upper[j] <- upper[j] + delta[j,2] f.upper[j] <- fun(upper)[j] if (any(k <- is.na(f.upper[j]))) { upper[j][k] <- ol[k] f.upper[j][k] <- of[k] delta[j,2][k] <- delta[j,2][k]/4 } } if (trace >= 2) cat(sprintf(" .. modified lower,upper: (%15g,%15g)\n", lower, upper)) delta[i & (iFl | iFu)] <- 2 * delta[i & (iFl | iFu)] } } else { while (any(i <- NAF(Sig * f.lower > 0))) { if ((it <- it + 1L) > maxiter) stop(gettextf("no sign change found in %d iterations", it - 1), domain = NA) lower[i] <- lower[i]-delta[i,1] f.lower[i] <- fun(lower)[i] if (trace >= 2) cat(sprintf(" .. modified lower: %g\n", lower)) delta[i] <- 2 * delta[i] } while (any(i <- NAF(Sig * f.upper < 0))) { if ((it <- it + 1L) > maxiter) stop(gettextf("no sign change found in %d iterations", it - 1), domain = NA) upper[i] <- upper[i] + delta[i,2] f.upper[i] <- f(upper, ...)[i] if (trace >= 2) cat(sprintf(" .. modified upper: %g\n", upper)) delta[i] <- 2 * delta[i] } } if (trace && trace < 2) cat(sprintf("extended to [%g, %g] in %d steps\n", lower, upper, it)) } if (any(!NAF(as.vector(f.lower * f.upper <= 0)))) stop(if (doX) "did not succeed extending the interval endpoints for f(lower) * f(upper) <= 0" else "f() values at end points not of opposite sign") if (check.conv) { val <- tryCatch(vunirootRcpp(fun, lower, upper, f.lower, f.upper, maxiter, tol), warning = function(w) w) if (inherits(val, "warning")) stop("convergence problem in zero finding: ", conditionMessage(val)) } else { val <- vunirootRcpp(fun, lower, upper, f.lower, f.upper, as.integer(maxiter), tol) } iter <- as.integer(val[[2L]]) if (any(iter < 0)) { (if (check.conv) stop else warning)(sprintf(ngettext(maxiter, "_NOT_ converged in %d iteration", "_NOT_ converged in %d iterations"), maxiter), domain = NA) iter[iter<0] <- maxiter } if (doX) iter <- iter + it else it <- NA_integer_ list(root = val[[1L]], f.root = f(val[[1L]], ...), iter = iter, init.it = it, estim.prec = val[[3L]]) } voptimize <- function (f, interval, ..., lower=pmin(interval[,1], interval[,2]), upper=pmax(interval[,1], interval[,2]), maximum = FALSE, tol = .Machine$double.eps^0.25) { if (!missing(interval) && ncol(interval) != 2L) stop("'interval' must be a matrix with two columns") if (all(!is.numeric(lower) | !is.numeric(upper) | lower >= upper)) stop("lower < upper is not fulfilled") if (maximum) { val <- voptimizeRcpp(function(arg) -f(arg, ...), lower, upper, tol) list(maximum = val, objective = f(val, ...)) } else { val <- voptimizeRcpp(function(arg) f(arg, ...), lower, upper, tol) list(minimum = val, objective = f(val, ...)) } } voptimise <- voptimize vintegrate = function(f, lower, upper, ..., subdivisions = 100L, rel.tol=.Machine$double.eps^0.25, abs.tol=rel.tol) { f <- match.fun(f) ff <- function(x) f(x, ...) ny = max(length(lower), length(upper)) if (ny>1 && length(lower)==1) lower = rep(lower,ny) if (ny>1 && length(upper)==1) upper = rep(upper,ny) limit <- as.integer(subdivisions) if (limit < 1L || (abs.tol <= 0 && rel.tol < max(50 * .Machine$double.eps, 5e-29))) stop("invalid parameter values") if (any(is.na(lower) | is.na(upper))) stop("a limit is NA or NaN") if (!(all(is.finite(lower)) || all(!is.finite(lower)))) stop("lower bounds are a mix of finite and infinite values") if (!(all(is.finite(upper)) || all(!is.finite(upper)))) stop("upper bounds are a mix of finite and infinite values") if (all(is.finite(lower)) && all(is.finite(upper))) { res = vdqagsRcpp(ff, lower, upper, rel.tol, abs.tol, limit, ny) res$value = drop(res$value) res$abs.err = drop(res$abs.err) res$abserr = NULL } else { if (all(is.finite(lower))) { inf <- 1L bound <- lower } else if (all(is.finite(upper))) { inf <- -1L bound <- upper } else { inf <- 2L bound <- rep(0,ny) # ignored:) } res = vdqagiRcpp(ff, bound, inf, rel.tol, abs.tol, limit, ny) res$value = drop(res$value) res$abserr = drop(res$abserr) } res } rstpm2/R/pm2-3.R0000644000176200001440000041412215104103523012661 0ustar liggesusers## Utilities ## copied from stats:::format.perc formating.perc <- function (probs, digits) paste(format(100 * probs, trim = TRUE, scientific = FALSE, digits = digits), "%") ## extension of ns() to include different boundary derivatives, ## centering and cure nsx <- function (x, df = NULL, knots = NULL, intercept = FALSE, Boundary.knots = range(x), derivs = if (cure) c(2,1) else c(2,2), log=FALSE, # deprecated: only used in rstpm2:::stpm2Old centre = FALSE, cure = FALSE, stata.stpm2.compatible=FALSE) { nx <- names(x) x <- as.vector(x) nax <- is.na(x) if (nas <- any(nax)) x <- x[!nax] if (!missing(Boundary.knots)) { Boundary.knots <- sort(Boundary.knots) outside <- (ol <- x < Boundary.knots[1L]) | (or <- x > Boundary.knots[2L]) } else outside <- FALSE if (!missing(df) && missing(knots)) { nIknots <- df - 1 - intercept + 4 - sum(derivs) if (nIknots < 0) { nIknots <- 0 warning("'df' was too small; have used ", 1 + intercept) } knots <- if (nIknots > 0) { knots <- if (!cure) seq.int(0, 1, length.out = nIknots + 2L)[-c(1L, nIknots + 2L)] else c(seq.int(0, 1, length.out = nIknots + 1L)[-c(1L, nIknots + 1L)], 0.95) if (!stata.stpm2.compatible) stats::quantile(x[!outside], knots) else stats::quantile(x[!outside], round(knots,2), type=2) } } else nIknots <- length(knots) Aknots <- sort(c(rep(Boundary.knots, 4L), knots)) if (any(outside)) { basis <- array(0, c(length(x), nIknots + 4L)) if (any(ol)) { k.pivot <- Boundary.knots[1L] xl <- cbind(1, x[ol] - k.pivot) tt <- spline.des(Aknots, rep(k.pivot, 2L), 4, c(0, 1))$design basis[ol, ] <- xl %*% tt } if (any(or)) { k.pivot <- Boundary.knots[2L] xr <- cbind(1, x[or] - k.pivot) tt <- spline.des(Aknots, rep(k.pivot, 2L), 4, c(0, 1))$design basis[or, ] <- xr %*% tt } if (any(inside <- !outside)) basis[inside, ] <- spline.des(Aknots, x[inside], 4)$design } else basis <- spline.des(Aknots, x, 4)$design const <- splineDesign(Aknots, rep(Boundary.knots, 3-derivs), 4, c(derivs[1]:2, derivs[2]:2)) if (!intercept) { const <- const[, -1, drop = FALSE] basis <- basis[, -1, drop = FALSE] } qr.const <- qr(t(const)) q.const <- qr.Q(qr.const, complete=TRUE)[, -(1L:(6-sum(derivs))), drop = FALSE] # NEW basis <- as.matrix((t(qr.qty(qr.const, t(basis))))[, -(1L:nrow(const)), drop = FALSE]) n.col <- ncol(basis) if (nas) { nmat <- matrix(NA, length(nax), n.col) nmat[!nax, ] <- basis basis <- nmat } dimnames(basis) <- list(nx, 1L:n.col) if (is.numeric(centre)) { centreBasis <- nsx(centre, knots=if (is.null(knots)) numeric(0) else knots, Boundary.knots=Boundary.knots, intercept=intercept, derivs=derivs, centre=FALSE, log=log) oldAttributes <- attributes(basis) basis <- t(apply(basis,1,function(x) x-centreBasis)) attributes(basis) <- oldAttributes } a <- list(degree = 3, knots = if (is.null(knots)) numeric(0) else knots, Boundary.knots = Boundary.knots, intercept = intercept, derivs=derivs, centre=centre, log=log, q.const=q.const) attributes(basis) <- c(attributes(basis), a) class(basis) <- c("nsx", "basis", "matrix") basis } makepredictcall.nsx <- function (var, call) { if (as.character(call)[1L] != "nsx") return(call) at <- attributes(var)[c("knots", "Boundary.knots", "intercept", "derivs", "centre", "log")] xxx <- call[1L:2] xxx[names(at)] <- at xxx } predict.nsx <- function (object, newx, ...) { if (missing(newx)) return(object) a <- c(list(x = newx), attributes(object)[c("knots", "Boundary.knots", "intercept", "derivs", "centre", "log")]) do.call("nsx", a) } Shat <- function(obj,newdata, use_old=FALSE) { if (use_old) return(Shat_old(obj)) ## predicted survival for individuals (adjusted for covariates) ## Be wary: suppressWarnings() because survfit.coxph does not like interactions sfit = suppressWarnings(survfit(obj,se.fit=FALSE)) ## linear predictors hr <- predict(obj, newdata = newdata, type = "risk") times <- obj$y[,ncol(obj$y)-1] utimes <- sort(unique(times)) S0 <- summary(sfit, times = utimes)$surv S0 <- S0[match(times, utimes)] S0 ^ hr } Shat_old <- function(obj) { ## predicted survival for individuals (adjusted for covariates) ## Be wary: suppressWarnings() because survfit.coxph does not like interactions newobj = suppressWarnings(survfit(obj,se.fit=FALSE)) surv = newobj$surv rr = try(predict(obj,type="risk"),silent=TRUE) if (inherits(rr,"try-error")) rr <- 1 surv2 = surv[match(obj$y[,ncol(obj$y)-1],newobj$time)] return(surv2^rr) } replaceCall=function(obj,old,new) { if (is.atomic(obj) && length(obj)>1) return(as.call(c(quote(c),lapply(as.list(obj),replaceCall,old,new)))) if (is.name(obj) || is.symbol(obj) || (is.atomic(obj) && length(obj)==1)) { if (obj==old) return(new) else return(obj) } ## if (length(obj)==1 && length(obj[[1]])==1) { ## if (obj==old) return(new) ## else return(obj) ## } as.call(lapply(obj,replaceCall,old,new)) } replaceFormula=function(...) as.formula(replaceCall(...)) ## replaceFormula(~f(a+b),quote(f),quote(g)) allCall=function(obj) { if (is.atomic(obj) && length(obj)==1) return(obj) if (is.atomic(obj) && length(obj)>1) return(as.call(c(quote(c),as.list(obj)))) if (is.name(obj) || is.symbol(obj)) return(obj) as.call(lapply(obj,allCall)) } ## allCall(as.call(c(quote(ns),list(df=3,knots=c(1,2)))))[[2]] vector2call=function(obj) { if (is.atomic(obj) && length(obj)==1) return(obj) if (is.atomic(obj) && length(obj)>1) return(as.call(c(quote(c),as.list(obj)))) if (is.name(obj) || is.symbol(obj)) return(obj) lapply(obj,allCall) # is this correct? } ## vector2call(list(df=3,knots=c(1,2))) findSymbol <- function(obj,symbol) { if (is.symbol(obj) && obj==symbol) TRUE else if (is.symbol(obj)) FALSE else if (is.atomic(obj)) FALSE else Reduce(`|`,lapply(obj,findSymbol,symbol),FALSE) } rhs=function(formula) if (length(formula)==3) formula[[3]] else formula[[2]] lhs <- function(formula) if (length(formula)==3) formula[[2]] else NULL "rhs<-" = function(formula,value) { newformula <- formula newformula[[length(formula)]] <- value newformula } "lhs<-" <- function(formula,value) { if (length(formula)==2) as.formula(as.call(c(formula[[1]],value,formula[[2]]))) else { newformula <- formula newformula[[2]] <- value newformula } } ## numerically calculate the partial gradient \partial func_j \over \partial x_i ## ("jacobian" may be a better name) ## (dim(grad(func,x)) == c(length(x),length(func(x))) grad <- function(func,x,...,method=c("fast","richardson")) # would shadow numDeriv::grad() { method = match.arg(method) if (method=="richardson") return(t(numDeriv::jacobian(func, x, ...))) h <- .Machine$double.eps^(1/3)*ifelse(abs(x)>1,abs(x),1) temp <- x+h h.hi <- temp-x temp <- x-h h.lo <- x-temp twoeps <- h.hi+h.lo nx <- length(x) ny <- length(func(x,...)) if (ny==0L) stop("Length of function equals 0") df <- if(ny==1L) rep(NA, nx) else matrix(NA, nrow=nx,ncol=ny) for (i in 1L:nx) { hi <- lo <- x hi[i] <- x[i] + h.hi[i] lo[i] <- x[i] - h.lo[i] if (ny==1L) df[i] <- (func(hi, ...) - func(lo, ...))/twoeps[i] else df[i,] <- (func(hi, ...) - func(lo, ...))/twoeps[i] } return(df) } ## numerically calculate the gradient \partial func_i \over \partial x_i ## length(grad(func,x)) == length(func(x)) == length(x) grad1 <- function(func,x,...,log.transform=FALSE) { ny <- length(func(x,...)) if (ny==0L) stop("Length of function equals 0") if (log.transform) { h <- .Machine$double.eps^(1/3) value <- (func(x*exp(h), ...) - func(x*exp(-h), ...))/2/h/x } else { h <- .Machine$double.eps^(1/3)*ifelse(abs(x)>1,abs(x),1) value <- (func(x+h, ...) - func(x-h, ...))/2/h } return(value) } ## predict lpmatrix for an lm object lpmatrix.lm <- function (object, newdata, na.action = na.pass) { tt <- terms(object) if (!inherits(object, "lm")) warning("calling predict.lm() ...") if (missing(newdata) || is.null(newdata)) { X <- model.matrix(object) } else { Terms <- delete.response(tt) m <- model.frame(Terms, newdata, na.action = na.action, xlev = object$xlevels) if (!is.null(cl <- attr(Terms, "dataClasses"))) .checkMFClasses(cl, m) X <- model.matrix(Terms, m, contrasts.arg = object$contrasts) } X } ## fun: takes coef as its first argument ## requires: coef() and vcov() on the object numDeltaMethod <- function(object, fun, gd=NULL, conf.int=FALSE, level=0.95, ...) { coef <- coef(object) Sigma <- vcov(object) fit <- fun(coef,...) if (is.null(gd)) gd <- grad(fun,coef,...) se.fit <- as.vector(sqrt(colSums(gd* (Sigma %*% gd)))) if (!is.null(names(fit))) names(se.fit) <- names(fit) if(all(se.fit==0 | is.na(se.fit))) warning("Zero variance estimated. Do you need to pass a newdata argument to fun()?") df <- data.frame(fit = as.numeric(fit), se.fit = as.numeric(se.fit), Estimate = as.numeric(fit), SE = as.numeric(se.fit)) row.names(df) <- names(fit) if (conf.int) { a <- (1 - level)/2 a <- cbind(a, 1 - a) fac <- qnorm(a) df$conf.low <- df$fit+fac[,1]*df$se.fit df$conf.high <- df$fit+fac[,2]*df$se.fit } structure(df, # vcov=Sigma, class=c("predictnl","data.frame")) } "coef<-" <- function (x, value) UseMethod("coef<-") predictnl <- function (object, ...) UseMethod("predictnl") setGeneric("predictnl", function(object, ...) standardGeneric("predictnl")) "coef<-.default" <- function(x,value) { x$coefficients <- value x } "coef<-.mle2" <- function(x,value) { x@fullcoef <- value x } predictnl.default <- function(object,fun,newdata=NULL,gd=NULL,...) { stopifnot(is.function(fun)) if (!is.null(newdata) || "newdata" %in% formalArgs(fun)) { local1 <- function(coef,newdata,...) { coef(object) <- coef fun(object,newdata=newdata,...) } numDeltaMethod(object, local1, newdata=newdata, gd=gd, ...) } else { local2 <- function(coef,...) { coef(object) <- coef fun(object,...) } numDeltaMethod(object, local2, gd=gd, ...) } } setMethod("predictnl", "mle2", function(object,fun,newdata=NULL,gd=NULL,...) { if (is.null(newdata) && !is.null(object@data)) newdata <- object@data localf <- function(coef,...) { object@fullcoef <- coef # changed from predictnl.default() fun(object,...) } numDeltaMethod(object,localf,newdata=newdata,gd=gd,...) }) confint.predictnl <- function(object,parm,level=0.95,...) { cf <- object$fit pnames <- names(cf) if (is.null(pnames)) pnames <- 1:length(cf) if (missing(parm)) parm <- pnames else if (is.numeric(parm)) parm <- pnames[parm] a <- (1 - level)/2 a <- c(a, 1 - a) pct <- formating.perc(a, 3) fac <- qnorm(a) ci <- array(NA, dim = c(length(parm), 2L), dimnames = list(parm, pct)) ses <- object$se.fit[parm] ci[] <- as.vector(cf[parm]) + ses %o% fac ci } predictnl.lm <- function (object, fun, newdata = NULL, ...) { stopifnot(is.function(fun)) if (is.null(newdata) && "newdata" %in% formalArgs(fun)) { stopifnot(!is.null(object$data)) newdata <- object$data } predictnl.default(object, fun, newdata, ...) } ## predictnl.mle <- function(object,fun,gd=NULL,...) ## { ## localf <- function(coef,...) ## { ## object@fullcoef = coef # changed from predictnl.default() ## fun(object,...) ## } ## numDeltaMethod(object,localf,gd=gd,...) ## } predict.formula <- function(object,data,newdata,na.action,type="model.matrix", ...) { mf <- match.call(expand.dots = FALSE) type <- match.arg(type) m <- match(c("formula", "data", "na.action"), names(mf), 0L) mf <- mf[c(1L, m)] mf$drop.unused.levels <- TRUE mf[[1L]] <- as.name("model.frame") mf <- eval(mf, parent.frame()) mt <- attr(mf, "terms") xlevels <-.getXlevels(mt, mf) mfnew <- model.frame(mt, newdata, na.action=na.action, xlev=xlevels) if (!is.null(cl <- attr(mt, "dataClasses"))) .checkMFClasses(cl, mfnew) model.matrix(mt, mfnew, contrasts=contrasts) } `%call+%` <- function(left,right) call("+",left,right) `%call-%` <- function(left,right) call("-",left,right) ## bread.stpm2 <- function (x, ...) { rval <- vcov(x) * nrow(x@y) dimnames(rval) <- list(names(coef(x)), names(coef(x))) return(rval) } estfun.stpm2 <- function(obj, weighted=FALSE, ...) { rr <- t(grad(obj@logli,coef(obj))) colnames(rr) <- names(coef(obj)) if (weighted) rr <- rr * obj@weights rr } applyTapplySum <- function(X,index) apply(X, 2, function(col) tapply(col, index, sum)) meat.stpm2 <- function (x, adjust = FALSE, cluster=NULL, ...) { psi <- estfun.stpm2(x, ...) k <- NCOL(psi) n <- NROW(psi) if (!is.null(cluster)) psi <- applyTapplySum(as.matrix(psi),cluster) rval <- crossprod(as.matrix(psi))/n if (adjust) rval <- n/(n - k) * rval rownames(rval) <- colnames(rval) <- colnames(psi) return(rval) } sandwich.stpm2 <- function (x, bread. = bread.stpm2, meat. = meat.stpm2, ...) { if (is.function(bread.)) bread. <- bread.(x) if (is.function(meat.)) meat. <- meat.(x, ...) n <- NROW(estfun.stpm2(x)) return(1/n * (bread. %*% meat. %*% bread.)) } incrVar <- function(var,increment=1) { ##var <- deparse(substitute(var)) ##function(data) "$<-"(data,var,"$"(data,var)+increment) # FAILS n <- length(var) if (n>1 && length(increment)==1) increment <- rep(increment,n) function(data) { for (i in 1:n) { data[[var[i]]] <- data[[var[i]]] + increment[i] } data } } cloglog <- function(x) log(-log(x)) cexpexp <- function(x) exp(-exp(x)) setOldClass("terms") setClassUnion("listOrNULL",c("list","NULL")) setClassUnion("nameOrcall",c("name","call")) setClassUnion("nameOrcallOrNULL",c("name","call","NULL")) ##setClassUnion("numericOrNULL",c("numeric","NULL")) setOldClass("Surv") setOldClass("lm") expit <- function(x) { ifelse(x==-Inf, 0, ifelse(x==Inf, 1, 1/(1+exp(-x)))) } logit <- function(p) { ifelse(p==0, -Inf, ifelse(p==1, Inf, log(p/(1-p)))) } # numerical safety for large values? ## check: weights ## ## adapted from ordinal::drop.coef which.dim <- function (X, silent = TRUE) { stopifnot(is.matrix(X)) silent <- as.logical(silent)[1] qr.X <- qr(X, tol = 1e-07, LAPACK = FALSE) if (qr.X$rank == ncol(X)) return(TRUE) if (!silent) message(gettextf("design is column rank deficient so dropping %d coef", ncol(X) - qr.X$rank)) return(qr.X$pivot[1:qr.X$rank]) } ## link families link.PH <- list(link=function(S) log(-log(as.vector(S))), ilink=function(eta) exp(-exp(as.vector(eta))), gradS=function(eta,X) -exp(as.vector(eta))*exp(-exp(as.vector(eta)))*X, h=function(eta,etaD) as.vector(etaD)*exp(as.vector(eta)), H=function(eta) exp(as.vector(eta)), gradh=function(eta,etaD,obj) obj$XD*exp(as.vector(eta))+obj$X*as.vector(etaD)*exp(as.vector(eta)), gradH=function(eta,obj) obj$X*exp(as.vector(eta))) link.PO <- list(link=function(S) -logit(as.vector(S)), ilink=function(eta) expit(-as.vector(eta)), gradS=function(eta,X) -(exp(as.vector(eta))/(1+exp(as.vector(eta)))^2)*X, H=function(eta) log(1+exp(as.vector(eta))), h=function(eta,etaD) as.vector(etaD)*exp(as.vector(eta))*expit(-as.vector(eta)), gradh=function(eta,etaD,obj) { as.vector(etaD)*exp(as.vector(eta))*obj$X*expit(-as.vector(eta)) - exp(2*as.vector(eta))*obj$X*as.vector(etaD)*expit(-as.vector(eta))^2 + exp(as.vector(eta))*obj$XD*expit(-as.vector(eta)) }, gradH=function(eta,obj) obj$X*exp(as.vector(eta))*expit(-as.vector(eta))) link.probit <- list(link=function(S) -qnorm(as.vector(S)), ilink=function(eta) pnorm(-as.vector(eta)), gradS=function(eta,X) -dnorm(-as.vector(eta))*X, H=function(eta) -log(pnorm(-as.vector(eta))), h=function(eta,etaD) dnorm(as.vector(eta))/pnorm(-as.vector(eta))*as.vector(etaD), gradh=function(eta,etaD,obj) { -as.vector(eta)*obj$X*dnorm(as.vector(eta))*as.vector(etaD)/pnorm(-as.vector(eta)) + obj$X*dnorm(as.vector(eta))^2/pnorm(-as.vector(eta))^2*as.vector(etaD) + dnorm(as.vector(eta))/pnorm(-as.vector(eta))*obj$XD }, gradH=function(eta,obj) obj$X*dnorm(as.vector(eta))/pnorm(-as.vector(eta))) link.AH <- list(link=function(S) -log(S), ilink=function(eta) exp(-as.vector(eta)), gradS=function(eta,X) -as.vector(exp(-as.vector(eta)))*X, h=function(eta,etaD) as.vector(etaD), H=function(eta) as.vector(eta), gradh=function(eta,etaD,obj) obj$XD, gradH=function(eta,obj) obj$X) link.AO <- function(theta) { # Aranda-Ordaz if (theta==0) { return(link.PH) } else { list(link = function(S) log((S^(-theta)-1)/theta), ilink = function(eta) exp(-log(theta*exp(as.vector(eta))+1)/theta), gradS = function(eta,X) -as.vector(exp(as.vector(eta))*exp(-log(theta*exp(as.vector(eta))+1)/theta)/(1+theta*exp(as.vector(eta))))*X, H = function(eta) log(theta*exp(as.vector(eta))+1)/theta, h = function(eta,etaD) exp(as.vector(eta))*as.vector(etaD)/(theta*exp(as.vector(eta))+1), gradH = function(eta,obj) exp(as.vector(eta))*obj$X/(1+theta*exp(as.vector(eta))), gradh = function(eta,etaD,obj) { eta <- as.vector(eta) etaD <- as.vector(etaD) ((theta*exp(2*eta)+exp(eta))*obj$XD+exp(eta)*etaD*obj$X) / (theta*exp(eta)+1)^2 }) } } ## fd <- function(f,x,eps=1e-5) (f(x+eps)-f(x-eps))/2/eps fd <- function(f,x,eps=1e-5) t(sapply(1:length(x), function(i) { upper <- lower <- x upper[i]=x[i]+eps lower[i]=x[i]-eps (f(upper)-f(lower))/2/eps })) ## test code for the link functions if (FALSE) { Xstar <- cbind(1,1:3) # beta[1] + beta[2]*t betastar <- c(-4,0.5) XDstar <- cbind(0,Xstar[,2]) etastar <- as.vector(Xstar %*% betastar) etaDstar <- as.vector(XDstar %*% betastar) obj <- list(X=Xstar,XD=XDstar) for(link in list(rstpm2:::link.PH,rstpm2:::link.PO,rstpm2:::link.probit,rstpm2:::link.AH,rstpm2:::link.AO(.3))) { print(rstpm2:::fd(function(beta) link$ilink(Xstar%*%beta), betastar)-t(link$gradS(etastar,Xstar))) print(rstpm2:::fd(function(beta) link$h(Xstar%*%beta, XDstar%*%beta), betastar)-t(link$gradh(etastar,etaDstar,obj))) print(rstpm2:::fd(function(beta) link$H(Xstar%*%beta), betastar)-t(link$gradH(etastar,obj))) } } bhazard <- function(x) x ## general link functions setClass("stpm2", representation(xlevels="list", contrasts="listOrNULL", terms="terms", logli="function", ## weights="numericOrNULL", lm="lm", timeVar="character", time0Var="character", timeExpr="nameOrcall", time0Expr="nameOrcallOrNULL", delayed="logical", interval="logical", frailty="logical", model.frame="list", call.formula="formula", x="matrix", xd="matrix", termsd="terms", Call="call", y="Surv", link="list", args="list" ), contains="mle2") gsm.control <- function(parscale=1, maxit=300, optimiser=c("BFGS","NelderMead"), trace=0, nodes=9, adaptive=TRUE, kappa.init=1, maxkappa=1e3, suppressWarnings.coxph.frailty=TRUE, robust_initial=FALSE, bhazinit=0.1, eps.init=1e-5, use.gr=TRUE, penalty=c("logH","h"), outer_optim=1, reltol.search=1e-10, reltol.final=1e-10, reltol.outer=1e-5, criterion=c("GCV","BIC"), old.init=FALSE) { stopifnot.logical <- function(arg) stopifnot(is.logical(arg) || (is.numeric(arg) && arg>=0)) stopifnot(parscale>0) stopifnot(maxit>1) optimiser <- match.arg(optimiser) stopifnot(trace>=0) stopifnot(nodes>=3) stopifnot.logical(adaptive) stopifnot(maxkappa>0) stopifnot.logical(suppressWarnings.coxph.frailty) stopifnot.logical(robust_initial) stopifnot(bhazinit>0) stopifnot.logical(use.gr) stopifnot(kappa.init>0) penalty <- match.arg(penalty) stopifnot(outer_optim %in% c(0,1)) stopifnot(reltol.search>0) stopifnot(reltol.final>0) stopifnot(reltol.outer>0) stopifnot.logical(old.init) criterion <- match.arg(criterion) list(mle2.control=list(parscale=parscale, maxit=maxit), optimiser=optimiser, trace=trace, nodes=nodes, adaptive=adaptive, maxkappa=maxkappa, suppressWarnings.coxph.frailty=suppressWarnings.coxph.frailty, robust_initial=robust_initial, bhazinit=bhazinit, eps.init=eps.init, use.gr=use.gr, kappa.init=kappa.init, penalty=penalty, outer_optim=outer_optim, reltol.search=reltol.search, reltol.final=reltol.final, reltol.outer=reltol.outer, criterion=criterion, old.init=old.init) } gsm <- function(formula, data, smooth.formula = NULL, smooth.args = NULL, df = 3, cure = FALSE, tvc = NULL, tvc.formula = NULL, control = list(), init = NULL, weights = NULL, robust = FALSE, baseoff = FALSE, timeVar = "", time0Var = "", use.gr = NULL, optimiser=NULL, log.time.transform=TRUE, reltol=NULL, trace = NULL, link.type=c("PH","PO","probit","AH","AO"), theta.AO=0, contrasts = NULL, subset = NULL, robust_initial=NULL, ## arguments for specifying the Cox model for initial values (seldom used) coxph.strata = NULL, coxph.formula = NULL, ## deprecated arguments (for removal) logH.formula = NULL, logH.args = NULL, ## arguments specific to relative survival bhazard = NULL, bhazinit=NULL, ## arguments specific to the fraility models and copulas copula=FALSE, frailty = !is.null(cluster) & !robust & !copula, cluster = NULL, logtheta=NULL, nodes=NULL, RandDist=c("Gamma","LogN"), recurrent = FALSE, adaptive = NULL, maxkappa = NULL, ## arguments specific to the penalised models sp=NULL, criterion=NULL, penalty=NULL, smoother.parameters=NULL, Z=~1, outer_optim=NULL, alpha=1, sp.init=1, penalised=FALSE, ## other arguments ...) { link.type <- match.arg(link.type) link <- switch(link.type,PH=link.PH,PO=link.PO,probit=link.probit,AH=link.AH, AO=link.AO(theta.AO)) RandDist <- match.arg(RandDist) ## handle deprecated args deprecated.arg <- function(name) if (!is.null(val <- get(name))) { warning(sprintf("%s argument is deprecated. Use control=list(%s=value)", name,name)) control[[name]] <- val TRUE } else FALSE deprecated <- lapply(c("optimiser","reltol","trace","nodes","adaptive","maxkappa", "robust_initial","bhazinit", "use.gr", "penalty", "outer_optim", "criterion"), deprecated.arg) if(!is.null(reltol)) { warning("reltol argument is deprecated.\nUse control=list(reltol.search=value,reltol.final=value,reltol.outer=value).") stopifnot(all(c("search","final","outer") %in% names(reltol))) control$reltol.search <- reltol$search control$reltol.final <- reltol$final control$reltol.outer <- reltol$outer } ## read from control list control <- do.call(gsm.control, control) ## logH.formula and logH.args are DEPRECATED if (is.null(smooth.formula) && !is.null(logH.formula)) { warning("logH.formula is deprecated - use smooth.formula") smooth.formula <- logH.formula } if (is.null(smooth.args) && !is.null(logH.args)) { warning("logH.args is deprecated - use smooth.formula") smooth.args <- logH.args } ## set na.action=na.pass (and reset at end) na.action.old <- options()[["na.action"]] options(na.action = "na.pass") on.exit(options(na.action = na.action.old)) if (copula && control$use.gr) { control$use.gr <- FALSE } ## ## set up the data ## ensure that data is a data frame temp.formula <- formula if (!is.null(smooth.formula)) rhs(temp.formula) <-rhs(temp.formula) %call+% rhs(smooth.formula) raw.data <- data ## data <- get_all_vars(temp.formula, raw.data) ## parse the function call Call <- match.call() mf <- match.call(expand.dots = FALSE) m <- match(c("formula", "data", "subset", "contrasts", "weights"), names(mf), 0L) mf <- mf[c(1L, m)] ## ## parse the event expression eventInstance <- eval(lhs(formula),envir=data) stopifnot(length(lhs(formula))>=2) delayed <- length(lhs(formula))>=4 # indicator for multiple times (cf. strictly delayed) surv.type <- attr(eventInstance,"type") if (surv.type %in% c("interval2","left","mstate")) stop("gsm not implemented for Surv type ",surv.type,".") counting <- attr(eventInstance,"type") == "counting" interval <- attr(eventInstance,"type") == "interval" timeExpr <- lhs(formula)[[if (delayed && !interval) 3 else 2]] # expression eventExpr <- if (interval) lhs(formula)[[4]] else lhs(formula)[[if (delayed) 4 else 3]] if (interval) time2Expr <- lhs(formula)[[3]] if (timeVar == "") timeVar <- all.vars(timeExpr) ## ## set up the formulae if (is.null(smooth.formula) && is.null(smooth.args)) { if (penalised) { smooth.args$k <- -1 } else { smooth.args$df <- df if (cure) smooth.args$cure <- cure } } smoother <- if (penalised) quote(s) else quote(nsx) if (is.null(smooth.formula)) { smooth.formula <- as.formula(call("~",as.call(c(smoother,call("log",timeExpr), vector2call(smooth.args))))) if (link.type=="AH") { if (penalised) { interaction <- function(expr) { if (is.name(expr)) call(":",expr,timeExpr) else if(is.name(expr[[1]]) && as.character(expr[[1]])=="+") interaction(expr[[2]]) %call+% interaction(expr[[3]]) else call(":",expr,timeExpr) } ## interaction(rstpm2:::rhs(~a+I(b)+c-1)) # error smooth.formula <- as.formula(call("~", interaction(rhs(formula)) %call+% as.call(c(smoother,timeExpr, vector2call(smooth.args))))) } else { smooth.formula <- as.formula(call("~",as.call(c(smoother,timeExpr, vector2call(smooth.args))) %call+% as.call(c(as.name(":"),rhs(formula),timeExpr)))) } } } if (!penalised && is.null(tvc.formula) && !is.null(tvc)) { tvc.formulas <- lapply(names(tvc), function(name) call(":", call("as.numeric",as.name(name)), # is this a good idea? as.call(c(smoother, if (link.type=="AH") timeExpr else call("log",timeExpr), if (penalised) vector2call(list(k=tvc[[name]])) else vector2call(if (cure) list(cure=cure,df=tvc[[name]]) else list(df=tvc[[name]])))))) if (length(tvc.formulas)>1) tvc.formulas <- list(Reduce(`%call+%`, tvc.formulas)) tvc.formula <- as.formula(call("~",tvc.formulas[[1]])) } if (penalised && is.null(tvc.formula) && !is.null(tvc)) { tvc.formulas <- lapply(names(tvc), function(name) as.call(c(quote(s), call("log",timeExpr), vector2call(list(by=as.name(name),k=tvc[[name]]))))) if (length(tvc.formulas)>1) tvc.formulas <- list(Reduce(`%call+%`, tvc.formulas)) tvc.formula <- as.formula(call("~",tvc.formulas[[1]])) ## remove any main effects (special case: a single term) Terms <- terms(formula) constantOnly <- FALSE for (name in names(tvc)) { .i <- match(name,attr(Terms,"term.labels")) if (!is.na(.i)) { if (.i==1 && length(attr(Terms,"term.labels"))==1) { constantOnly <- TRUE } else Terms <- stats::drop.terms(Terms,.i,keep=TRUE) } } formula <- formula(Terms) if (constantOnly) rhs(formula) <- quote(1) rm(constantOnly,Terms) } if (!is.null(tvc.formula)) { rhs(smooth.formula) <- rhs(smooth.formula) %call+% rhs(tvc.formula) } if (baseoff) rhs(smooth.formula) <- rhs(tvc.formula) full.formula <- formula if (link.type == "AH") { rhs(full.formula) <- rhs(smooth.formula) } else { rhs(full.formula) <- rhs(formula) %call+% rhs(smooth.formula) } Z.formula <- Z ## tf <- terms.formula(smooth.formula, specials = c("s", "te")) terms <- attr(tf, "term.labels") ## ## ## Different models: ## lm (full.formula - cluster), survreg (formula - cluster), coxph (formula - cluster), full lm.formula <- formula(full.formula) base.formula <- formula ## Specials: specials.names <- c("cluster","bhazard","offset") specials <- attr(terms.formula(formula, specials.names), "specials") spcall <- mf spcall[[1]] <- quote(stats::model.frame) spcall$formula <- terms(formula, specials.names, data = data) mf2 <- eval(spcall, parent.frame()) if (any(!sapply(specials,is.null))) { cluster.index <- specials$cluster bhazard.index <- specials$bhazard if (length(cluster.index)>0) { cluster <- mf2[, cluster.index] frailty = !is.null(cluster) && !robust && !copula cluster.index2 <- attr(terms.formula(full.formula, "cluster"), "specials")$cluster base.formula <- formula(stats::drop.terms(terms(mf2), cluster.index - 1, keep.response=TRUE)) lm.formula <- formula(stats::drop.terms(terms(full.formula), cluster.index2 - 1)) } else { cluster.index2 = NULL } if (length(bhazard.index)>0) { bhazard <- mf2[, bhazard.index] bhazard.index2 <- attr(terms.formula(full.formula, "bhazard"), "specials")$bhazard termobj = terms(mf2) dropped.terms = if(length(attr(termobj,"term.labels"))==1) reformulate("1", response=termobj[[2L]], intercept=TRUE, env=environment(termobj)) else stats::drop.terms(terms(mf2), bhazard.index - 1, keep.response=TRUE) base.formula <- formula(dropped.terms) lm.formula <- formula(stats::drop.terms(terms(full.formula), bhazard.index2 - 1)) } else { bhazard.index2 = NULL } if (length(cluster.index)>0 && length(bhazard.index)>0) { dropped.terms = if(length(attr(termobj,"term.labels"))==2) reformulate("1", response=termobj[[2L]], intercept=TRUE, env=environment(termobj)) else stats::drop.terms(terms(mf2), c(cluster.index,bhazard.index) - 1, keep.response=TRUE) base.formula <- formula(dropped.terms) ## base.formula <- formula(stats::drop.terms(terms(mf2), ## c(cluster.index,bhazard.index) - 1, ## keep.response=TRUE)) lm.formula <- formula(stats::drop.terms(terms(full.formula), c(cluster.index2,bhazard.index2) - 1)) } ## rm(mf2,spcall) } ## offset offset <- as.vector(stats::model.offset(mf2)) rm(mf2) ## deprecated code for cluster cluster <- substitute(cluster) cluster <- switch(class(cluster), integer=cluster, numeric=cluster, call=eval(cluster, data, parent.frame()), NULL=NULL, name=eval(cluster, data, parent.frame()), character=data[[cluster]]) ## deprecated code for bhazard bhazard <- substitute(bhazard) bhazard <- switch(class(bhazard), integer=bhazard, numeric=bhazard, call=eval(bhazard,data,parent.frame()), NULL=rep(0,nrow(data)), name=eval(bhazard, data, parent.frame()), character=data[[bhazard]]) ## subset.expr <- substitute(subset) if(inherits(subset.expr,"NULL")) subset.expr <- TRUE .include <- complete.cases(model.matrix(formula, data)) & !is.na(eval(eventExpr,data,parent.frame())) & eval(subset.expr,data,parent.frame()) options(na.action = na.action.old) if (!interval) { time <- eval(timeExpr,data,parent.frame()) if (any(is.na(time))) warning("Some event times are NA") if (any(ifelse(is.na(time),FALSE,time<=0))) warning("Some event times <= 0") .include <- .include & ifelse(is.na(time), FALSE, time>0) } time0Expr <- NULL # initialise if (delayed) { time0Expr <- lhs(formula)[[2]] if (time0Var == "") time0Var <- all.vars(time0Expr) time0 <- eval(time0Expr,data,parent.frame()) if (any(is.na(time0))) warning("Some entry times are NA") if (any(ifelse(is.na(time0),FALSE,time0<0))) warning("Some entry times < 0") .include <- .include & ifelse(is.na(time0), FALSE, time0>=0) } if (!is.null(substitute(weights))) .include <- .include & !is.na(eval(substitute(weights),data,parent.frame())) ## if (!is.null(cluster)) .include <- .include & !is.na(cluster) .include <- .include & !is.na(bhazard) if (!is.null(offset)) .include <- .include & !is.na(offset) excess <- !all(bhazard==0) ## data <- data[.include, , drop=FALSE] ## we can now evaluate over data time <- eval(timeExpr, data, parent.frame()) if (delayed) { time0 <- eval(time0Expr, data, parent.frame()) } event <- eval(eventExpr,data,parent.frame()) if (!interval) event <- if (length(unique(event))==1) rep(TRUE, length(event)) else event <- event > min(event) nevent <- sum(event) if (!is.null(cluster)) cluster <- cluster[.include] bhazard <- bhazard[.include] offset <- if (is.null(offset)) rep(0,sum(.include)) else offset[.include] if (copula && delayed) stop("Copulas not currently defined for delayed entry") ## setup for initial values if (!interval) { ## Cox regression coxph.call <- mf coxph.call[[1L]] <- quote(survival::coxph) coxph.strata <- substitute(coxph.strata) coxph.call$data <- quote(coxph.data) coxph.data <- data # ? coxph.call$formula <- base.formula if (!is.null(coxph.formula)) { temp <- coxph.call$formula rhs(temp) <- rhs(temp) %call+% rhs(coxph.formula) coxph.call$formula <- temp } if (!is.null(coxph.strata)) { temp <- coxph.call$formula rhs(temp) <- rhs(temp) %call+% call("strata",coxph.strata) coxph.call$formula <- temp } coxph.call$model <- TRUE coxph.obj <- eval(coxph.call, coxph.data) y <- model.extract(model.frame(coxph.obj),"response") data$logHhat <- if (is.null(bhazard)) { link$link(pmin(1-control$eps.init, pmax(control$eps.init,Shat(coxph.obj,data,control$old.init)))) } else link$link(pmin(1-control$eps.init, pmax(control$eps.init,Shat(coxph.obj,data,control$old.init)/ exp(-control$bhazinit*bhazard*time)))) if ((frailty || copula) && is.null(logtheta)) { # fudge for copulas coxph.data$.cluster <- as.vector(unclass(factor(cluster))) coxph.formula <- coxph.call$formula rhs(coxph.formula) <- rhs(coxph.formula) %call+% call("frailty",as.name(".cluster"), distribution=switch(RandDist,LogN="gaussian",Gamma="gamma")) coxph.call$formula <- coxph.formula coxph.obj <- if (control$suppressWarnings.coxph.frailty) suppressWarnings(eval(coxph.call, coxph.data)) else eval(coxph.call, coxph.data) logtheta <- log(coxph.obj$history[[1]]$theta) } } if (interval) { ## survref regression survreg.call <- mf survreg.call[[1L]] <- as.name("survreg") survreg.call$formula <- base.formula survreg.obj <- eval(survreg.call, envir=parent.frame()) weibullShape <- 1/survreg.obj$scale weibullScale <- predict(survreg.obj) y <- model.extract(model.frame(survreg.obj),"response") data$logHhat <- link$link(pmin(1-control$eps.init, pmax(control$eps.init, pweibull(time,weibullShape,weibullScale,lower.tail=FALSE)))) ## if ((frailty || copula) && is.null(logtheta)) { logtheta <- -1 } } ## initial values and object for lpmatrix predictions lm.call <- mf lm.call[[1L]] <- if (penalised) quote(gam) else quote(stats::lm) lhs(lm.formula) <- quote(logHhat) # new response lm.call$formula <- lm.formula dataEvents <- data[event,] if (interval) { dataEvents <- data[event>0, , drop=FALSE] } lm.call$data <- quote(dataEvents) # events only if (penalised) { lm.call$sp <- sp if (is.null(sp) && !is.null(sp.init) && (length(sp.init)>1 || sp.init!=1)) lm.call$sp <- sp.init } lm.obj <- eval(lm.call) ## re-run gam if sp.init==1 (default) if (penalised && is.null(sp) && !is.null(sp.init) && length(sp.init)==1 && sp.init==1) { sp.init <- lm.call$sp <- rep(sp.init,length=length(lm.obj$sp)) lm.obj <- eval(lm.call) } has.init <- !is.null(init) if (!has.init) { init <- coef(lm.obj) } else { stopifnot(length(init) == length(coef(lm.obj))) } ## ## set up mf and wt mt <- terms(lm.obj) mf <- model.frame(lm.obj) ## wt <- model.weights(lm.obj$model) wt <- if (is.null(substitute(weights))) rep(1,nrow(data)) else eval(substitute(weights),data,parent.frame()) ## ## XD matrix ## lpfunc <- function(delta,fit,dataset,var) { ## dataset[[var]] <- dataset[[var]]+delta ## lpmatrix.lm(fit,dataset) ## } lpfunc <- if (penalised) function(x,...) { newdata <- data newdata[[timeVar]] <- x predict(lm.obj,newdata,type="lpmatrix") } else function(x,fit,data,var) { data[[var]] <- x lpmatrix.lm(fit,data) } ## initialise values specific to either delayed entry or interval-censored ind0 <- FALSE map0 <- 0L which0 <- 0 wt0 <- 0 ttype <- 0 transX <- function(X, data) X transXD <- function(XD) XD smooth <- if (penalised) lm.obj$smooth else NULL if (!interval) { # surv.type %in% c("right","counting") X <- if (penalised) predict(lm.obj,data,type="lpmatrix") else lpmatrix.lm(lm.obj,data) if (link.type=="AH") { datat0 <- data datat0[[timeVar]] <- 0 X00 <- if (penalised) predict(lm.obj, datat0, type="lpmatrix") else lpmatrix.lm(lm.obj,datat0) index0 <- which.dim(X - X00) if (penalised) smooth <- lapply(smooth, function(smoothi) { Sindex <- which((1:ncol(X) %in% index0)[smoothi$first.para:smoothi$last.para]) para <- range(which((1:ncol(X) %in% smoothi$first.para:smoothi$last.para)[index0])) smoothi$S[[1]] <- smoothi$S[[1]][Sindex,Sindex] smoothi$first.para <- para[1] smoothi$last.para <- para[2] smoothi }) rm(X00) transX <- function(X, data) { datat0 <- data datat0[[timeVar]] <- 0 Xt0 <- if (penalised) predict(lm.obj,datat0,type="lpmatrix") else lpmatrix.lm(lm.obj,datat0) (X - Xt0)[, index0, drop=FALSE] } transXD <- function(XD) XD[, index0, drop=FALSE] init <- init[index0] } X <- transX(X,data) XD <- if (penalised) transXD(grad1(lpfunc,data[[timeVar]], log.transform=log.time.transform)) else transXD(grad1(lpfunc,data[[timeVar]],lm.obj,data,timeVar, log.transform=log.time.transform)) X1 <- matrix(0,nrow(X),ncol(X)) X0 <- matrix(0,1,ncol(X)) if (delayed && all(time0==0)) delayed <- FALSE # CAREFUL HERE: delayed redefined if (delayed) { ind0 <- time0>0 map0 <- vector("integer",nrow(X)) map0[ind0] <- as.integer(1:sum(ind0)) map0[!ind0] <- NaN ##which0 <- which(ind0) which0 <- 1:nrow(X) which0[!ind0] <- NaN data0 <- data[ind0,,drop=FALSE] # data for delayed entry times data0[[timeVar]] <- data0[[time0Var]] X0 <- if (penalised) transX(predict(lm.obj,data0,type="lpmatrix"), data0) else transX(lpmatrix.lm(lm.obj, data0), data0) wt0 <- wt[ind0] rm(data0) } } else { ## interval-censored ## ttime <- eventInstance[,1] ## ttime2 <- eventInstance[,2] ttype <- eventInstance[,3] X <- if (penalised) transX(predict(lm.obj,data,type="lpmatrix"), data) else transX(lpmatrix.lm(lm.obj,data),data) XD <- if (penalised) transXD(grad1(lpfunc,data[[timeVar]], log.transform=log.time.transform)) else transXD(grad1(lpfunc,data[[timeVar]],lm.obj,data,timeVar, log.transform=log.time.transform)) data0 <- data data0[[timeVar]] <- data0[[as.character(time2Expr)]] data0[[timeVar]] <- ifelse(data0[[timeVar]]<=0 | data0[[timeVar]]==Inf,NA,data0[[timeVar]]) X1 <- if (penalised) transX(predict(lm.obj,data0,type="lpmatrix"), data0) else transX(lpmatrix.lm(lm.obj, data0), data0) X0 <- matrix(0,nrow(X),ncol(X)) rm(data0) } if (frailty || copula) { Z.formula <- Z Z <- model.matrix(Z, data) if (ncol(Z)>2) stop("Current implementation only allows for one or two random effects") if (ncol(Z)==2) { init <- c(init,logtheta1=logtheta,corrtrans=0,logtheta2=logtheta) } else init <- c(init, logtheta=unname(logtheta)) } else { Z.formula <- NULL Z <- matrix(1,1,1) } ## check for missing initial values if (any(is.na(init) | is.nan(init))) stop("Some missing initial values - check that the design matrix is full rank.") ## smoothing parameters ## cases: ## (1) sp fixed ## (2) sp.init ## (3) use GAM no.sp <- is.null(sp) if (penalised && no.sp) { sp <- if(is.null(lm.obj$full.sp)) lm.obj$sp else lm.obj$full.sp if (!is.null(sp.init)) sp <- sp.init } if (length(control$mle2.control$parscale)==1) control$mle2.control$parscale <- rep(control$mle2.control$parscale,length(init)) if (is.null(names(control$mle2.control$parscale))) names(control$mle2.control$parscale) <- names(init) if (control$use.gr == FALSE) control$optimiser <- "NelderMead" args <- list(init=init,X=X,XD=XD,bhazard=bhazard,wt=wt,event=ifelse(event,1,0),time=time, delayed=delayed, interval=interval, X0=X0, wt0=wt0, X1=X1, parscale=control$mle2.control$parscale, kappa=control$kappa.init,outer_optim=control$outer_optim, smooth=if(control$penalty == "logH") smooth else design, sp=sp, reltol_search=control$reltol.search, reltol=control$reltol.final, reltol_outer=control$reltol.outer, trace=control$trace, alpha=alpha, criterion=switch(control$criterion,GCV=1,BIC=2), oldcluster=cluster, frailty=frailty, robust=robust, cluster=if(!is.null(cluster)) as.vector(unclass(factor(cluster))) else NULL, map0 = map0 - 1L, ind0 = ind0, which0 = which0 - 1L, link=link.type, ttype=ttype, RandDist=RandDist, optimiser=control$optimiser, log.time.transform=log.time.transform, type=if (frailty && RandDist=="Gamma") "stpm2_gamma_frailty" else if (frailty && RandDist=="LogN") "stpm2_normal_frailty" else "stpm2", recurrent = recurrent, return_type="optim", transX=transX, transXD=transXD, maxkappa=control$maxkappa, Z=Z, Z.formula = Z.formula, thetaAO = theta.AO, excess=excess, data=data, copula=copula, robust_initial = control$robust_initial, .include=.include, offset=as.vector(offset), lm_init=init) ## checks on the parameters stopifnot(all(dim(args$X) == dim(args$XD))) if (!frailty && !copula) { stopifnot(length(args$init) == ncol(args$X)) } else { stopifnot(length(args$init) == ncol(args$X)+ncol(Z)) } if (penalised) args$type <- if (frailty && RandDist=="Gamma") "pstpm2_gamma_frailty" else if (frailty && RandDist=="LogN") "pstpm2_normal_frailty" else "pstpm2" if (copula) args$type <- if (penalised) "pstpm2_clayton_copula" else "stpm2_clayton_copula" if (frailty || copula) { rule <- fastGHQuad::gaussHermiteData(control$nodes) args$gauss_x <- rule$x args$gauss_w <- rule$w args$adaptive <- control$adaptive if (ncol(args$Z)>1) { control$use.gr <- FALSE if(penalised) stop("Multiple frailties not implemented for penalised models.") args$type <- "stpm2_normal_frailty_2d" args$Z <- as.matrix(args$Z) ## args$adaptive <- FALSE # adaptive not defined ## args$optimiser <- "NelderMead" # gradients not defined } else args$Z <- as.vector(args$Z) } if (penalised) { ## penalty function pfun <- function(beta,sp) { sum(sapply(1:length(lm.obj$smooth), function(i) { smoother <- lm.obj$smooth[[i]] betai <- beta[smoother$first.para:smoother$last.para] sp[i]/2 * betai %*% smoother$S[[1]] %*% betai })) } negllsp <- function(beta,sp) { localargs <- args localargs$sp <- sp localargs$init <- beta localargs$return_type <- "objective" negll <- .Call("model_output", localargs, PACKAGE="rstpm2") localargs$return_type <- "feasible" feasible <- .Call("model_output", localargs, PACKAGE="rstpm2") attr(negll,"feasible") <- feasible return(negll) } negll0sp <- function(beta,sp) { localargs <- args localargs$sp <- sp localargs$init <- beta localargs$return_type <- "objective0" negll <- .Call("model_output", localargs, PACKAGE="rstpm2") localargs$return_type <- "feasible" feasible <- .Call("model_output", localargs, PACKAGE="rstpm2") attr(negll,"feasible") <- feasible return(negll) } ## unused? dpfun <- function(beta,sp) { deriv <- beta*0 for (i in 1:length(lm.obj$smooth)) { smoother <- lm.obj$smooth[[i]] ind <- smoother$first.para:smoother$last.para deriv[ind] <- sp[i] * smoother$S[[1]] %*% beta[ind] } return(deriv) } if (control$penalty == "h") { ## a current limitation is that the hazard penalty needs to extract the variable names from the smoother objects (e.g. log(time) will not work) stopifnot(sapply(lm.obj$smooth,function(obj) obj$term) %in% names(data) || !is.null(smoother.parameters)) ## new penalty using the second derivative of the hazard design <- smootherDesign(lm.obj,data,smoother.parameters) pfun <- function(beta,sp) { sum(sapply(1:length(design), function(i) { obj <- design[[i]] s0 <- as.vector(obj$X0 %*% beta) s1 <- as.vector(obj$X1 %*% beta) s2 <- as.vector(obj$X2 %*% beta) s3 <- as.vector(obj$X3 %*% beta) h2 <- (s3+3*s1*s2+s1^3)*exp(s0) sp[i]/2*obj$lambda*sum(obj$w*h2^2) })) } dpfun <- function(beta,sp) { if (frailty || copula) beta <- beta[-length(beta)] deriv <- beta*0 for (i in 1:length(design)) { obj <- design[[i]] s0 <- as.vector(obj$X0 %*% beta) s1 <- as.vector(obj$X1 %*% beta) s2 <- as.vector(obj$X2 %*% beta) s3 <- as.vector(obj$X3 %*% beta) h2 <- (s3+3*s1*s2+s1^3)*exp(s0) dh2sq.dbeta <- 2*h2*(exp(s0)*(obj$X3+3*(obj$X1*s2+obj$X2*s1)+3*s1^2*obj$X1)+h2*obj$X0) deriv <- deriv + sp[i]*obj$lambda*colSums(obj$w*dh2sq.dbeta) } deriv } } gradnegllsp <- function(beta,sp) { localargs <- args localargs$init <- beta localargs$return_type <- "gradient" .Call("model_output", localargs, PACKAGE="rstpm2") } gradnegll0sp <- function(beta,sp) { localargs <- args localargs$init <- beta localargs$return_type <- "gradient0" .Call("model_output", localargs, PACKAGE="rstpm2") } logli <- function(beta) { localargs <- args localargs$init <- beta localargs$return_type <- "li" return(.Call("model_output", localargs, PACKAGE="rstpm2")) } args$logli2 <- function(beta,offset) { localargs <- args localargs$init <- beta localargs$offset <- offset localargs$return_type <- "li" return(.Call("model_output", localargs, PACKAGE="rstpm2")) } like <- function(beta) { eta <- as.vector(X %*% beta) etaD <- as.vector(XD %*% beta) h <- link$h(eta,etaD) + bhazard H <- link$H(eta) ll <- sum(wt[event]*log(h[event])) - sum(wt*H) if (delayed) { eta0 <- as.vector(X0 %*% beta) ## etaD0 <- as.vector(XD0 %*% beta) ll <- ll + sum(wt0*link$H(eta0)) } return(ll) } if (no.sp && !is.null(sp.init)) { if(!is.null(lm.obj$full.sp)) lm.obj$sp <- lm.obj$full.sp value <- NULL while(is.na(value <- negllsp(init,lm.obj$sp)) || !attr(value,"feasible")) { lm.call$sp <- lm.obj$sp * 5 if (no.sp) sp <- lm.call$sp ## Unresolved: should we change sp.init if the initial values are not feasible? lm.obj <- eval(lm.call) if(!is.null(lm.obj$full.sp)) lm.obj$sp <- lm.obj$full.sp init <- coef(lm.obj) if (frailty || copula) init <- c(init,logtheta=logtheta) if (all(lm.obj$sp > 1e5)) break ## stop("Initial values not valid and revised sp>1e5") } args$sp <- lm.obj$sp } else args$sp <- sp ## ### Using exterior penalty method for nonlinear constraints: h(t)>=0 or increasing logH(t) ## ### Some initial values should be outside the feasible region ## while(all(XD%*%init>=0)){ ## init <- init+0.001 ## } ## ### Check initial value ## if(any(XD%*%init<=0)) { ## cat("Some initial values are exactly outside the feasible region of this problem","\n") ## } ## MLE args$return_type <- if (!no.sp) "optim_fixed" else if (length(sp)>1) "optim_multivariate" else "optim_first" } else { # un-penalised models negll <- function(beta) { localargs <- args localargs$return_type <- "objective" localargs$init <- beta return(.Call("model_output", localargs, PACKAGE="rstpm2")) } gradnegll <- function(beta) { localargs <- args localargs$init <- beta localargs$return_type <- "gradient" return(.Call("model_output", localargs, PACKAGE="rstpm2")) } fdgradnegll <- function(beta, eps=1e-6) { sapply(1:length(beta), function(i) { betau <- betal <- beta betau[i] <- beta[i]+eps betal[i] <- beta[i]-eps (negll(betau)-negll(betal))/2/eps }) } logli <- function(beta) { localargs <- args localargs$init <- beta localargs$return_type <- "li" return(.Call("model_output", localargs, PACKAGE="rstpm2")) } args$logli2 <- function(beta,offset) { localargs <- args localargs$init <- beta localargs$offset <- offset localargs$return_type <- "li" return(.Call("model_output", localargs, PACKAGE="rstpm2")) } parnames(negll) <- parnames(gradnegll) <- names(init) } ## MLE if ((frailty || copula) && !has.init) { # first fit without the frailty args2 <- args args2$frailty <- args2$copula <- FALSE args2$cluster <- NULL args2$type <- if (penalised) "pstpm2" else "stpm2" localIndex <- 1:(length(args2$init)-1) args2$init <- args2$init[localIndex] args2$parscale <- args2$parscale[localIndex] fit <- .Call("model_output", args2, PACKAGE="rstpm2") rm(args2) args$init <- c(fit$coef,logtheta) } fit <- .Call("model_output", args, PACKAGE="rstpm2") args$init <- coef <- as.vector(fit$coef) if (penalised) { args$sp <- sp <- fit$sp <- as.vector(fit$sp) edf <- fit$edf edf_var<- as.vector(fit$edf_var) names(edf_var) <- sapply(lm.obj$smooth,"[[","label") negll <- function(beta) negllsp(beta,sp) gradnegll <- function(beta) gradnegllsp(beta,sp) parnames(negll) <- parnames(gradnegll) <- names(init) } args$kappa.final <- fit$kappa hessian <- fit$hessian names(coef) <- rownames(hessian) <- colnames(hessian) <- names(init) mle2 <- if (control$use.gr) mle2(negll, coef, vecpar=TRUE, control=control$mle2.control, gr=gradnegll, ..., eval.only=TRUE) else mle2(negll, coef, vecpar=TRUE, control=control$mle2.control, ..., eval.only=TRUE) mle2@details$convergence <- if (penalised) 0 else fit$fail # fit$itrmcd if (inherits(vcov <- try(solve(hessian,tol=0),silent=TRUE), "try-error")) { if (control$optimiser=="NelderMead") { warning("Non-invertible Hessian") mle2@vcov <- matrix(NA,length(coef), length(coef)) } if (control$optimiser!="NelderMead") { warning("Non-invertible Hessian - refitting with Nelder-Mead") args$optimiser <- "NelderMead" fit <- .Call("model_output", args, PACKAGE="rstpm2") args$init <- coef <- as.vector(fit$coef) args$kappa.final <- fit$kappa hessian <- fit$hessian names(coef) <- rownames(hessian) <- colnames(hessian) <- names(init) mle2 <- mle2(negll, coef, vecpar=TRUE, control=control, ..., eval.only=TRUE) mle2@vcov <- if (!inherits(vcov <- try(solve(hessian,tol=0)), "try-error")) vcov else matrix(NA,length(coef), length(coef)) mle2@details$convergence <- fit$fail # fit$itrmcd if (inherits(vcov <- try(solve(hessian,tol=0)), "try-error")) warning("Non-invertible Hessian - refitting failed") } } else { mle2@vcov <- vcov } mle2@details$conv <- mle2@details$convergence args$gradnegll = gradnegll if (penalised) { out <- new("pstpm2", call = mle2@call, call.orig = mle2@call, coef = mle2@coef, fullcoef = mle2@fullcoef, vcov = mle2@vcov, min = mle2@min, details = mle2@details, minuslogl = mle2@minuslogl, method = mle2@method, optimizer = "optim", # mle2@optimizer data = data, # mle2@data, which uses as.list() formula = mle2@formula, xlevels = .getXlevels(mt, mf), ##contrasts = attr(X, "contrasts"), contrasts = NULL, # wrong! logli = logli, ##weights = weights, Call = Call, terms = mt, model.frame = mf, gam = lm.obj, timeVar = timeVar, time0Var = time0Var, timeExpr = timeExpr, time0Expr = time0Expr, like = like, ## fullformula = fullformula, delayed=delayed, frailty = frailty, x = X, xd = XD, termsd = mt, # wrong! y = y, sp = sp, nevent=nevent, link=link, edf=edf, edf_var=edf_var, df=edf, args=args) if (robust && !frailty) { ## Bread matrix bread.mat <- solve(fit$hessian,tol=0) ## Meat matirx calculated with individual penalized score functions beta.est <- fit$coef sp.opt <- fit$sp eta <- as.vector(args$X %*% beta.est) etaD <- as.vector(XD %*% beta.est) h <- link$h(eta,etaD) + bhazard H <- link$H(eta) gradh <- link$gradh(eta,etaD,args) gradH <- link$gradH(eta,args) ## right censored data score.ind <- t(wt*(gradH - ifelse(event,1/h,0)*gradh)) + dpfun(beta.est, sp.opt)/nrow(gradH) meat.mat <- var(t(score.ind))*nrow(gradH) out@vcov <- bread.mat %*% meat.mat %*% t(bread.mat) } } else { out <- new("stpm2", call = mle2@call, call.orig = mle2@call, coef = mle2@coef, fullcoef = mle2@fullcoef, vcov = mle2@vcov, min = mle2@min, details = mle2@details, minuslogl = mle2@minuslogl, method = mle2@method, data = as.data.frame(data), formula = mle2@formula, optimizer = "optim", xlevels = .getXlevels(mt, mf), ##contrasts = attr(X, "contrasts"), contrasts = contrasts, logli = logli, ##weights = weights, Call = Call, terms = mt, model.frame = mf, lm = lm.obj, timeVar = timeVar, time0Var = time0Var, timeExpr = timeExpr, time0Expr = time0Expr, delayed = delayed, interval = interval, frailty = frailty, call.formula = formula, x = X, xd = XD, termsd = mt, # wrong! y = y, link=link, args=args) if (robust && !frailty) # kludge out@vcov <- sandwich.stpm2(out, cluster=cluster) attr(out,"nobs") <- nrow(out@x) # for logLik method } return(out) } stpm2 <- function(formula, data, weights=NULL, subset=NULL, coxph.strata=NULL, ...) { m <- match.call() m[[1L]] <- quote(gsm) m$penalised <- FALSE out <- eval(m,data,parent.frame()) out@Call <- match.call() out } pstpm2 <- function(formula, data, weights=NULL, subset=NULL, coxph.strata=NULL, ...) { m <- match.call() m[[1L]] <- quote(gsm) m$penalised <- TRUE out <- eval(m,data,parent.frame()) out@Call <- match.call() out } ## setGeneric("update", function(object, ...) standardGeneric("update")) setMethod("update", signature(object="stpm2"), function (object, formula., evaluate = TRUE, ...) { call <- object@Call extras <- match.call(expand.dots = FALSE)$... if (!missing(formula.)) call$formula <- update.formula(call$formula, formula.) if (length(extras)) { existing <- !is.na(match(names(extras), names(call))) for (a in names(extras)[existing]) call[[a]] <- extras[[a]] if (any(!existing)) { call <- c(as.list(call), extras[!existing]) call <- as.call(call) } } if (evaluate) eval(call, parent.frame()) else call }) setMethod("show", "stpm2", function(object) { object@call.orig <- object@Call show(as(object,"mle2")) }) setClass("summary.stpm2", representation(frailty="logical",theta="list",wald="matrix",args="list"), contains="summary.mle2") corrtrans <- function(x) (1-exp(-x)) / (1+exp(-x)) setMethod("summary", "stpm2", function(object) { newobj <- as(summary(as(object,"mle2")),"summary.stpm2") newobj@args <- object@args newobj@frailty <- object@frailty newobj@call <- object@Call if ((object@frailty || object@args$copula) && !is.matrix(object@args$Z)) { coef <- coef(newobj) theta <- exp(coef[nrow(coef),1]) se.logtheta <- coef[nrow(coef),2] se.theta <- theta*se.logtheta test.statistic <- (1/se.logtheta)^2 p.value <- pchisq(test.statistic,df=1,lower.tail=FALSE)/2 newobj@theta <- list(theta=theta, se.theta=se.theta, p.value=p.value) } else if (object@frailty && is.matrix(object@args$Z) && ncol(object@args$Z)==2) { coef <- coef(object) index <- (length(coef)-2):length(coef) coef <- coef[index] vcov <- vcov(object)[index,index] rho <- corrtrans(g12 <- coef[2]) theta <- c(theta1=exp(coef[1]),corr=rho,theta2=exp(coef[3])) se.theta <- c(theta[1]*sqrt(vcov[1,1]), 2*exp(-g12)/(1+exp(-g12))^2*sqrt(vcov[2,2]), theta[3]*sqrt(vcov[3,3])) se.logtheta <- c(theta1=sqrt(vcov[1,1]), corr=sqrt(vcov[2,2])/coef[2], theta2=sqrt(vcov[3,3])) test.statistic <- (1/se.logtheta)^2 p.value <- pchisq(test.statistic,df=1,lower.tail=FALSE)/2 newobj@theta <- list(theta=theta, se.theta=se.theta, p.value=p.value) } else newobj@theta <- list() newobj@wald <- matrix(NA,1,1) # needed by summary.pstpm2 newobj }) setMethod("show", "summary.stpm2", function(object) { show(as(object,"summary.mle2")) if (object@frailty || object@args$copula) { if (is.matrix(object@args$Z)) { cat("Random effects model: corr=(1-exp(-corrtrans))/(1+exp(-corrtrans))") cat(sprintf("\ntheta1=%g\tse=%g\tp=%g\n", object@theta$theta[1],object@theta$se.theta[1],object@theta$p.value[1])) cat(sprintf("\ncorr=%g\tse=%g\tp=%g\n", object@theta$theta[2],object@theta$se.theta[2],object@theta$p.value[2])) cat(sprintf("\ntheta2=%g\tse=%g\tp=%g\n", object@theta$theta[3],object@theta$se.theta[3],object@theta$p.value[3])) } else { cat(sprintf("\ntheta=%g\tse=%g\tp=%g\n", object@theta$theta,object@theta$se.theta,object@theta$p.value)) } } }) setMethod("predictnl", "stpm2", function(object,fun,newdata=NULL,link=c("I","log","cloglog","logit"), gd=NULL, ...) { link <- match.arg(link) ## invlinkf <- switch(link,I=I,log=exp,cloglog=cexpexp,logit=expit) linkf <- eval(parse(text=link)) if (is.null(newdata) && !is.null(object@data)) newdata <- object@data localf <- function(coef,...) { object@fullcoef = coef linkf(fun(object,...)) } dm <- numDeltaMethod(object,localf,newdata=newdata,gd=gd,...) ## ci <- confint(dm, level = level) ## out <- invlinkf(data.frame(Estimate=dm$fit, ## lower=ci[,1], ## upper=ci[,2])) ## ## cloglog switches the bounds ## if (link=="cloglog") ## out <- data.frame(Estimate=out$Estimate,lower=out$upper,upper=out$lower) ## return(out) return(dm) }) predictnl.aft <- function(object,fun,newdata=NULL,link=c("I","log","cloglog","logit"), gd=NULL, ...) { link <- match.arg(link) linkf <- eval(parse(text=link)) if (is.null(newdata) && !is.null(object@args$data)) newdata <- object@args$data localf <- function(coef,...) { object@args$init <- object@fullcoef <- coef linkf(fun(object,...)) } numDeltaMethod(object,localf,newdata=newdata,gd=gd,...) } setMethod("predictnl", "aft", predictnl.aft) residuals.stpm2.base <- function(object, type=c("li","gradli")) { type <- match.arg(type) args <- object@args if (type=="li") { localargs <- args localargs$return_type <- "li" out <- as.vector(.Call("model_output", localargs, PACKAGE="rstpm2")) names(out) <- rownames(args$X) } if (type=="gradli") { localargs <- args localargs$return_type <- "gradli" out <- .Call("model_output", localargs, PACKAGE="rstpm2") dimnames(out) <- dimnames(args$X) } return(out) } setMethod("residuals", "stpm2", function(object, type=c("li","gradli")) residuals.stpm2.base(object=object, type=match.arg(type))) predict.stpm2.base <- function(object, newdata=NULL, type=c("surv","cumhaz","hazard","density","hr","sdiff","hdiff","loghazard","link","meansurv","meansurvdiff","meanhr","odds","or","margsurv","marghaz","marghr","meanhaz","af","fail","margfail","meanmargsurv","uncured","rmst","probcure","lpmatrix","gradh","gradH","rmstdiff","lpmatrixD"), grid=FALSE, seqLength=300, type.relsurv=c("excess","total","other"), ratetable = survival::survexp.us, rmap, scale=365.24, se.fit=FALSE, link=NULL, exposed=NULL, var=NULL, keep.attributes=FALSE, use.gr=TRUE, level=0.95, n.gauss.quad=100, full=FALSE, ...) { type <- match.arg(type) type.relsurv <- match.arg(type.relsurv) args <- object@args if (type %in% c("fail","margfail")) { out <- 1-predict.stpm2.base(object, newdata=newdata, type=switch(type, fail="surv", margfail="margsurv"), grid=grid, seqLength=seqLength, type.relsurv=type.relsurv, ratetable=ratetable, rmap=rmap, scale=scale, se.fit=se.fit, link=link, exposed=exposed, var=var, keep.attributes=keep.attributes, use.gr=use.gr, level=level, n.gauss.quad=n.gauss.quad, full=full, ...) if (se.fit) {temp <- out$lower; out$lower <- out$upper; out$upper <- temp} return(out) } if (is.null(link)) { if(args$excess){ link <- switch(type, surv = "log", cumhaz = "I", hazard = "I", hr = "I", sdiff = "I", hdiff = "I", loghazard = "I", link = "I", odds = "log", or = "log", margsurv = "log", marghaz = "I", marghr = "I", meansurv = "I", meanhr = "I", meanhaz = "I", af = "I", meansurvdiff = "I", fail = "cloglog", uncured = "log", density = "log", rmst = "I", probcure = "cloglog", lpmatrix="I", gradh="I", gradH="I", rmstdiff="I", lpmatrixD="I") } else { link <- switch(type, surv = "cloglog", cumhaz = "log", hazard = "log", hr = "log", sdiff = "I", hdiff = "I", loghazard = "I", link = "I", odds = "log", or = "log", margsurv = "cloglog", marghaz = "log", marghr = "log", meansurv = "I", meanhr="log", meanhaz = "I", af = "I", meansurvdiff = "I", fail = "cloglog", uncured = "cloglog", density = "log", rmst = "I", probcure = "cloglog", lpmatrix="I", gradh="I", gradH="I", rmstdiff="I", lpmatrixD="I") } } invlinkf <- switch(link,I=I,log=exp,cloglog=cexpexp,logit=expit) linkf <- eval(parse(text=link)) if (type %in% c("uncured","probcure") && is.null(exposed)) exposed <- function(data) { data[[object@timeVar]] <- max(args$time[which(args$event==1)]) data } if (is.null(exposed) && is.null(var) & type %in% c("hr","sdiff","hdiff","meansurvdiff","meanhr","or","marghr","af","uncured","probcure","rmstdiff")) stop('Either exposed or var required for type in ("hr","sdiff","hdiff","meansurvdiff","meanhr","or","marghr","af","uncured","probcure")') if (type %in% c('margsurv','marghaz','marghr','margfail','meanmargsurv') && !object@args$frailty) stop("Marginal prediction only for frailty models") if (is.null(exposed) && !is.null(var)) exposed <- incrVar(var) ## exposed is a function that takes newdata and returns the revised newdata ## var is a string for a variable that defines a unit change in exposure if (is.null(newdata) && type %in% c("hr","sdiff","hdiff","meansurvdiff","meanhr","or","marghr","uncured","rmstdiff")) stop("Prediction using type in ('hr','sdiff','hdiff','meansurvdiff','meanhr','or','marghr','uncured','probcure') requires newdata to be specified.") calcX <- !is.null(newdata) time <- NULL if (is.null(newdata)) { ##mm <- X <- model.matrix(object) # fails (missing timevar) X <- object@x XD <- object@xd ##y <- model.response(object@model.frame) y <- object@y time <- as.vector(y[,ncol(y)-1]) newdata <- as.data.frame(object@data) } newdata2 <- NULL lpfunc <- function(newdata) if (inherits(object,"pstpm2")) function(x,...) { newdata2 <- newdata newdata2[[object@timeVar]] <- x predict(object@gam,newdata2,type="lpmatrix") } else function(x,...) { newdata2 <- newdata newdata2[[object@timeVar]] <- x lpmatrix.lm(object@lm,newdata2) } ## function(delta,fit,data,var) { ## data[[var]] <- data[[var]]+delta ## lpmatrix.lm(fit,data) ## } ## resp <- attr(Terms, "variables")[attr(Terms, "response")] ## similarly for the derivatives if (grid) { Y <- object@y event <- Y[,ncol(Y)]==1 | object@args$interval time <- object@data[[object@timeVar]] eventTimes <- time[event] tt <- seq(min(eventTimes),max(eventTimes),length=seqLength)[-1] data.x <- data.frame(tt) names(data.x) <- object@timeVar newdata[[object@timeVar]] <- NULL newdata <- merge(newdata,data.x) calcX <- TRUE } if (type %in% c("rmst","rmstdiff")) { stopifnot(object@timeVar %in% names(newdata)) quad <- gauss.quad(n.gauss.quad) a <- 0 olddata = newdata b <- newdata[[object@timeVar]] time <- t(outer((b-a)/2,quad$nodes) + (a+b)/2) weights <- outer(quad$weights, (b-a)/2) rowidx = rep(1:nrow(newdata),each=nrow(time)) newdata <- newdata[rowidx,,drop=FALSE] newdata[[object@timeVar]] <- as.vector(time) calcX <- TRUE } if (args$excess) { ## rmap <- substitute(rmap) if(type.relsurv != "excess"){ Sstar <- do.call(survexp, list(substitute(I(timeVar*scale)~1,list(timeVar=as.name(object@timeVar))), ratetable=ratetable, scale=scale, rmap=substitute(rmap), cohort=FALSE, data=newdata)) Hstar <- -log(Sstar) if (!is.null(newdata2)) Sstar2 <- do.call(survexp, list(substitute(I(timeVar*scale)~1,list(timeVar=as.name(object@timeVar))), ratetable=ratetable, scale=scale, rmap=rmap, cohort=FALSE, data=newdata2)) Hstar <- -log(Sstar) } } if (any(idx <- newdata[object@timeVar] == 0)) newdata[[object@timeVar]][idx] <- .Machine$double.xmin if (calcX) { if (inherits(object, "stpm2")) { X <- object@args$transX(lpmatrix.lm(object@lm, newdata), newdata) XD <- grad1(lpfunc(newdata),newdata[[object@timeVar]], log.transform=object@args$log.time.transform) XD <- object@args$transXD(XD) } if (inherits(object, "pstpm2")) { X <- object@args$transX(predict(object@gam, newdata, type="lpmatrix"), newdata) XD <- object@args$transXD(grad1(lpfunc(newdata),newdata[[object@timeVar]], log.transform=object@args$log.time.transform)) } ## X <- args$transX(lpmatrix.lm(object@lm, newdata), newdata) ## XD <- grad(lpfunc,0,object@lm,newdata,object@timeVar) ## XD <- args$transXD(matrix(XD,nrow=nrow(X))) } ## if (type %in% c("hazard","hr","sdiff","hdiff","loghazard","or","marghaz","marghr","fail","margsurv","meanmargsurv","uncured")) { if (is.null(time)) { ## how to elegantly extract the time variable? ## timeExpr <- ## lhs(object@call.formula)[[length(lhs(object@call.formula))-1]] time <- eval(object@timeExpr,newdata,parent.frame()) ## } ## if (any(time == 0)) time[time==0] <- .Machine$double.eps ## if (object@delayed && !object@interval) { ## newdata0 <- newdata ## newdata0[[object@timeVar]] <- newdata[[object@time0Var]] ## X0 <- lpmatrix.lm(object@lm, newdata0) ## ## XD0 <- grad(lpfunc,0,object@lm,newdata,object@timeVar) ## ## XD0 <- matrix(XD0,nrow=nrow(X0)) ## } if (type %in% c("hr","sdiff","hdiff","meansurvdiff","meanhr","or","marghr","af","uncured","probcure","rmstdiff")) { newdata2 <- exposed(newdata) if (inherits(object, "stpm2")) { X2 <- object@args$transX(lpmatrix.lm(object@lm, newdata2), newdata2) XD2 <- grad1(lpfunc(newdata2),newdata2[[object@timeVar]], log.transform=object@args$log.time.transform) XD2 <- object@args$transXD(XD2) } if (inherits(object, "pstpm2")) { X2 <- object@args$transX(predict(object@gam, newdata2, type="lpmatrix"), newdata2) XD2 <- object@args$transXD(grad1(lpfunc(newdata2),newdata2[[object@timeVar]], log.transform=object@args$log.time.transform)) } ## X2 <- args$transX(lpmatrix.lm(object@lm, newdata2), newdata2) ## XD2 <- grad(lpfunc,0,object@lm,newdata2,object@timeVar) ## XD2 <- args$transXD(matrix(XD2,nrow=nrow(X))) } colMeans <- function(x) colSums(x)/apply(x,2,length) if (object@frailty && type %in% c("af","meansurvdiff") && args$RandDist=="Gamma" && !object@args$interval && !object@args$delayed) { times <- newdata[[object@timeVar]] utimes <- sort(unique(times)) n <- nrow(X)/length(utimes) n.cluster <- length(unique(args$cluster)) newlink <- object@link beta <- coef(object) npar <- length(beta) logtheta <- beta[npar] theta <- exp(beta[npar]) beta <- beta[-npar] Hessian <- solve(vcov(object),tol=0) eta <- as.vector(X %*% beta) eta2 <- as.vector(X2 %*% beta) S <- newlink$ilink(eta) S2 <- newlink$ilink(eta2) H <- -log(S) H2 <- -log(S2) marg <- function(logtheta,H) (1+exp(logtheta)*H)^(-1/exp(logtheta)) margS <- marg(logtheta,H) margS2 <- marg(logtheta,H2) dmarg.dlogtheta <- function(logtheta,H) { theta <- exp(logtheta) marg(logtheta,H)*(exp(-logtheta)*log(1+theta*H)-H/(1+theta*H)) } ## dmarg.dbeta <- function(logtheta,H,gradH) { ## theta <- exp(logtheta) ## -marg(logtheta,H)*gradH/(1+theta*H) ## } ## link <- link.PH; eps <- 1e-5; dmarg.dlogtheta(3,.2); (marg(3+eps,.2)-marg(3-eps,.2))/2/eps ## eps <- 1e-5; dmarg.dlogtheta(3,.2); (marg(3+eps,.2)-marg(3-eps,.2))/2/eps ## meanS <- tapply(margS,times,mean) meanS2 <- tapply(margS2,times,mean) fit <- switch(type,af=1-(1-meanS2)/(1-meanS),meansurvdiff=meanS-meanS2) se.fit <- vector("numeric",length(utimes)) for (i in 1:length(utimes)) { index <- which(times==utimes[i]) newobj <- object newobj@args$X <- X[index,,drop=FALSE] newobj@args$XD <- XD[index,,drop=FALSE] gradli <- residuals(newobj,type="gradli") res <- cbind(margS[index]-mean(margS[index]),margS2[index]-mean(margS2[index])) res <- apply(res,2,function(col) tapply(col,args$cluster,sum)) res <- cbind(res, gradli) meat <- stats::var(res, na.rm=TRUE) colnames(meat) <- rownames(meat) <- c("S","S0", names(beta),"logtheta") S.hessian <- cbind(-diag(2)*n/n.cluster, rbind(colSums(margS[index]*(-newlink$gradH(eta[index],list(X=X[index,,drop=FALSE]))/(1+theta*H[index])))/n.cluster, colSums(margS2[index]*(-newlink$gradH(eta2[index],list(X=X2[index,,drop=FALSE]))/(1+theta*H2[index])))/n.cluster), c(sum(dmarg.dlogtheta(logtheta,H[index]))/n.cluster, sum(dmarg.dlogtheta(logtheta,H2[index]))/n.cluster)) par.hessian <- cbind(matrix(0, nrow = npar, ncol = 2), -Hessian / n.cluster) bread <- rbind(S.hessian, par.hessian) ibread <- solve(bread,tol=0) sandwich <- (ibread %*% meat %*% t(ibread) / n.cluster)[1:2, 1:2] gradient <- switch(type, af=as.matrix(c( - (1 - meanS2[i]) / (1 - meanS[i]) ^ 2, 1 / (1 - meanS[i])), nrow = 2, ncol = 1), meansurvdiff=matrix(c(1,-1),nrow=2)) AF.var <- t(gradient) %*% sandwich %*% gradient ## S.var <- sandwich[1, 1] ## S0.var <- sandwich[2, 2] se.fit[i] <- sqrt(AF.var) } pred <- data.frame(Estimate=fit, lower=fit-1.96*se.fit, upper=fit+1.96*se.fit) if (keep.attributes) attr(pred,"newdata") <- newdata return(pred) } if (object@frailty && type %in% c("meanmargsurv") && args$RandDist=="Gamma" && !object@args$interval && !object@args$delayed) { times <- newdata[[object@timeVar]] utimes <- sort(unique(times)) n <- nrow(X)/length(utimes) n.cluster <- length(unique(args$cluster)) newlink <- object@link beta <- coef(object) npar <- length(beta) logtheta <- beta[npar] theta <- exp(beta[npar]) beta <- beta[-npar] Hessian <- solve(vcov(object),tol=0) eta <- as.vector(X %*% beta) S <- newlink$ilink(eta) H <- -log(S) marg <- function(logtheta,H) (1+exp(logtheta)*H)^(-1/exp(logtheta)) margS <- marg(logtheta,H) dmarg.dlogtheta <- function(logtheta,H) { theta <- exp(logtheta) marg(logtheta,H)*(exp(-logtheta)*log(1+theta*H)-H/(1+theta*H)) } ## eps <- 1e-5; dmarg.dlogtheta(3,.2); (marg(3+eps,.2)-marg(3-eps,.2))/2/eps ## meanS <- tapply(margS,times,mean) fit <- meanS se.fit <- vector("numeric",length(utimes)) for (i in 1:length(utimes)) { index <- which(times==utimes[i]) newobj <- object newobj@args$X <- X[index,,drop=FALSE] newobj@args$XD <- XD[index,,drop=FALSE] ## ## Attempt to use the sandwich estimator for the covariance matrix with the delta method (-> inflated SEs) ## res <- residuals(newobj,type="gradli") ## meat <- stats::var(res, na.rm=TRUE) # crossprod(res)/n.cluster ## colnames(meat) <- rownames(meat) <- c(names(beta),"logtheta") ## bread <- -Hessian / n.cluster ## ibread <- solve(bread,tol=0) ## sandwich <- ibread %*% meat %*% t(ibread) / n.cluster ## g <- c(colSums(margS[index]*(-newlink$gradH(eta[index],list(X=X[index,,drop=FALSE]))/(1+theta*H[index])))/n.cluster, ## sum(dmarg.dlogtheta(logtheta,H[index]))/n.cluster) ## se.fit[i] <- sqrt(sum(matrix(g,nrow=1)%*%(sandwich %*% g))) gradli <- residuals(newobj,type="gradli") res <- tapply(margS[index]-mean(margS[index]),args$cluster,sum) res <- cbind(res, gradli) meat <- stats::var(res, na.rm=TRUE) ## meat <- crossprod(res)/n.cluster colnames(meat) <- rownames(meat) <- c("S", names(beta),"logtheta") S.hessian <- c(-n/n.cluster, colSums(margS[index]*(-newlink$gradH(eta[index],list(X=X[index,,drop=FALSE]))/(1+theta*H[index])))/n.cluster, sum(dmarg.dlogtheta(logtheta,H[index]))/n.cluster) par.hessian <- cbind(matrix(0, nrow = npar, ncol = 1), -Hessian / n.cluster) bread <- rbind(S.hessian, par.hessian) ibread <- solve(bread,tol=0) sandwich <- (ibread %*% meat %*% t(ibread) / n.cluster)[1, 1] se.fit[i] <- sqrt(sandwich) } pred <- data.frame(Estimate=fit, lower=fit-1.96*se.fit, upper=fit+1.96*se.fit) if (keep.attributes) attr(pred,"newdata") <- newdata return(pred) } local <- function (object, newdata=NULL, type="surv", exposed, ...) { beta <- coef(object) tt <- object@terms link <- object@link # cf. link for transformation of the predictions if (object@frailty || (is.logical(object@args$copula) && object@args$copula)) { theta <- exp(beta[length(beta)]) beta <- beta[-length(beta)] if (object@args$RandDist=="LogN") { gauss_x <- object@args$gauss_x gauss_w <- object@args$gauss_w Z <- model.matrix(args$Z.formula, newdata) if (ncol(Z)>1) stop("Current implementation only allows for a single random effect") Z <- as.vector(Z) } } eta <- as.vector(X %*% beta) etaD <- as.vector(XD %*% beta) S <- link$ilink(eta) h <- link$h(eta,etaD) if (!object@args$excess && any(ifelse(is.na(h),FALSE,h<0))) warning(sprintf("Predicted hazards less than zero (n=%i).",sum(ifelse(is.na(h),FALSE,h<0)))) H = link$H(eta) Sigma = vcov(object) if (!args$excess) type.relsurv <- "excess" ## ugly hack if (type=="link") { return(eta) } if (type=="lpmatrix") { return(X) } if (type=="lpmatrixD") { return(XD) } if (type=="cumhaz") { ## if (object@delayed) { ## eta0 <- as.vector(X0 %*% beta) ## etaD0 <- as.vector(XD0 %*% beta) ## H0 <- link$H(eta0) ## return(H - H0) ## } ## else return(switch(type.relsurv,excess=H,total=H+Hstar,other=Hstar)) } if (type=="density") return (S*h) if (type=="surv") { return(switch(type.relsurv,excess=S,total=S*Sstar,other=Sstar)) } if (type=="fail") { return(switch(type.relsurv, excess=1-S,total=1-S*Sstar, other=1-Sstar)) } if (type=="odds") { # delayed entry? return((1-S)/S) } if (type=="sdiff") return(link$ilink(as.vector(X2 %*% beta)) - S) if (type=="hazard") { return(h) } if (type=="loghazard") { return(log(h)) } if (type=="hdiff") { eta2 <- as.vector(X2 %*% beta) etaD2 <- as.vector(XD2 %*% beta) h2 <- link$h(eta2,etaD2) return(h2 - h) } if (type=="uncured") { S2 <- link$ilink(as.vector(X2 %*% beta)) return((S-S2)/(1-S2)) } if (type=="probcure") { S2 <- link$ilink(as.vector(X2 %*% beta)) return(S2/S) } if (type=="hr") { eta2 <- as.vector(X2 %*% beta) etaD2 <- as.vector(XD2 %*% beta) h2 <- link$h(eta2,etaD2) return(h2/h) } if (type=="or") { S2 <- link$ilink(as.vector(X2 %*% beta)) return((1-S2)/S2/((1-S)/S)) } if (type=="meansurv") { return(tapply(S,newdata[[object@timeVar]],mean)) } if (type=="meanhaz") { return(tapply(S*h,newdata[[object@timeVar]],sum)/tapply(S,newdata[[object@timeVar]],sum)) } if (type=="meanhr") { eta2 <- as.vector(X2 %*% beta) etaD2 <- as.vector(XD2 %*% beta) h2 <- link$h(eta2,etaD2) S2 <- link$ilink(eta2) return(tapply(S2*h2,newdata[[object@timeVar]],sum)/tapply(S2,newdata[[object@timeVar]],sum) / (tapply(S*h,newdata[[object@timeVar]],sum)/tapply(S,newdata[[object@timeVar]],sum))) } if (type=="meansurvdiff") { eta2 <- as.vector(X2 %*% beta) S2 <- link$ilink(eta2) return(tapply(S2,newdata[[object@timeVar]],mean) - tapply(S,newdata[[object@timeVar]],mean)) } if (type=="af") { eta2 <- as.vector(X2 %*% beta) S2 <- link$ilink(eta2) meanS <- tapply(S,newdata[[object@timeVar]],mean) meanS2 <- tapply(S2,newdata[[object@timeVar]],mean) if (object@frailty) { if (object@args$RandDist=="Gamma") { meanS <- tapply((1+theta*(-log(S)))^(-1/theta), newdata[[object@timeVar]], mean) meanS2 <- tapply((1+theta*(-log(S2)))^(-1/theta), newdata[[object@timeVar]], mean) } else { meanS <- tapply(sapply(1:length(gauss_x), function(i) link$ilink(eta+Z*sqrt(2)*sqrt(theta)*gauss_x[i])) %*% gauss_w / sqrt(pi), newdata[[object@timeVar]], mean) meanS2 <- tapply(sapply(1:length(gauss_x), function(i) link$ilink(eta2+Z*sqrt(2)*sqrt(theta)*gauss_x[i])) %*% gauss_w / sqrt(pi), newdata[[object@timeVar]], mean) } } return((meanS2 - meanS)/(1-meanS)) } if (type=="meanmargsurv") { stopifnot(object@frailty && object@args$RandDist %in% c("Gamma","LogN")) if (object@args$RandDist=="Gamma") return(tapply((1+theta*H)^(-1/theta), newdata[[object@timeVar]], mean)) if (object@args$RandDist=="LogN") { return(tapply(sapply(1:length(gauss_x), function(i) link$ilink(eta+Z*sqrt(2)*sqrt(theta)*gauss_x[i])) %*% gauss_w / sqrt(pi), newdata[[object@timeVar]], mean)) } } if (type=="margsurv") { stopifnot(object@args$frailty && object@args$RandDist %in% c("Gamma","LogN")) if (object@args$RandDist=="Gamma") return((1+theta*H)^(-1/theta)) if (object@args$RandDist=="LogN") { return(sapply(1:length(gauss_x), function(i) link$ilink(eta+Z*sqrt(2)*sqrt(theta)*gauss_x[i])) %*% gauss_w / sqrt(pi)) } } if (type=="marghaz") { stopifnot(object@frailty && object@args$RandDist %in% c("Gamma","LogN")) if (object@args$RandDist=="Gamma") { ## margsurv <- (1+theta*H)^(-1/theta) ## return(h*margsurv^theta) return(h/(1+H*theta)) } if (object@args$RandDist=="LogN") { return(sapply(1:length(gauss_x), function(i) link$h(eta+Z*sqrt(2)*sqrt(theta)*gauss_x[i],etaD)) %*% gauss_w / sqrt(pi)) } } if (type=="marghr") { stopifnot(object@frailty && object@args$RandDist %in% c("Gamma","LogN")) eta2 <- as.vector(X2 %*% beta) etaD2 <- as.vector(XD2 %*% beta) if (object@args$RandDist=="Gamma") { H2 <- link$H(eta2) h2 <- link$h(eta2,etaD2) margsurv <- (1+theta*H)^(-1/theta) marghaz <- h*margsurv^theta margsurv2 <- (1+theta*H2)^(-1/theta) marghaz2 <- h2*margsurv2^theta } if (object@args$RandDist=="LogN") { marghaz <- sapply(1:length(gauss_x), function(i) as.vector(link$h(eta+Z*sqrt(2)*sqrt(theta)*gauss_x[i],etaD))) %*% gauss_w / sqrt(pi) marghaz2 <- sapply(1:length(gauss_x), function(i) as.vector(link$h(eta2+Z*sqrt(2)*sqrt(theta)*gauss_x[i],etaD2))) %*% gauss_w / sqrt(pi) } return(marghaz2/marghaz) } if (type=="rmst") { return(tapply(S*weights,rowidx,sum)) } if (type=="rmstdiff") { S2 <- link$ilink(as.vector(X2 %*% beta)) return(tapply(S*weights,rowidx,sum) - tapply(S2*weights,rowidx,sum)) } if (type=="gradh") return(link$gradh(eta,etaD,list(X=X,XD=XD))) if (type=="gradH") return(link$gradH(eta,list(X=X))) } if (!se.fit) { out <- local(object,newdata,type=type,exposed=exposed, ...) } else { gd <- NULL beta <- coef(object) ## calculate gradients for some of the estimators if (use.gr) { colMeans <- function(x) apply(x,2,mean) collapse <- function(gd) do.call("cbind",tapply(1:nrow(gd), newdata[[object@timeVar]], function(index) colMeans(gd[index, ,drop=FALSE]))) collapse1 <- function(S) as.vector(tapply(S, newdata[[object@timeVar]], mean)) fd <- function(f,x,eps=1e-5) t(sapply(1:length(x), function(i) { upper <- lower <- x upper[i]=x[i]+eps lower[i]=x[i]-eps (f(upper)-f(lower))/2/eps })) div <- function(mat,v) t(t(mat)/v) if (type=="hazard" && link %in% c("I","log")) { ## Case: frailty model (assumes baseline hazard for frailty=1) betastar <- if(args$frailty || args$copula) beta[-length(beta)] else beta gd <- switch(link, I=t(object@link$gradh(X %*% betastar, XD %*% betastar, list(X=X, XD=XD))), log=t(object@link$gradh(X %*% betastar, XD %*% betastar, list(X=X, XD=XD))/ object@link$h(X %*% betastar, XD %*% betastar))) } if (type=="meanhaz" && !object@frailty && link %in% c("I","log")) { betastar <- if(args$frailty || args$copula) beta[-length(beta)] else beta h <- as.vector(object@link$h(X %*% betastar, XD %*% betastar)) S <- as.vector(object@link$ilink(X %*% betastar)) gradS <- object@link$gradS(X%*% betastar,X) gradh <- object@link$gradh(X %*% betastar,XD %*% betastar,list(X=X,XD=XD)) gd <- if(link=="I") collapse(gradh*S + gradS*h) else div(collapse(gradh*S + h*gradS),collapse1(h*S))-div(collapse(gradS),collapse1(S)) } if (type=="meanhr" && !object@frailty && link == "log") { betastar <- if(args$frailty|| args$copula) beta[-length(beta)] else beta h <- as.vector(object@link$h(X %*% betastar, XD %*% betastar)) S <- as.vector(object@link$ilink(X %*% betastar)) gradS <- object@link$gradS(X %*% betastar,X) gradh <- object@link$gradh(X %*% betastar,XD %*% betastar,list(X=X,XD=XD)) h2 <- as.vector(object@link$h(X2 %*% betastar, XD2 %*% betastar)) S2 <- as.vector(object@link$ilink(X2 %*% betastar)) gradS2 <- object@link$gradS(X2 %*% betastar,X2) gradh2 <- object@link$gradh(X2 %*% betastar,XD2 %*% betastar,list(X=X2,XD=XD2)) gd <- div(collapse(gradh2*S2 + h2*gradS2),collapse1(h2*S2)) - div(collapse(gradS2),collapse1(S2)) - div(collapse(gradh*S + h*gradS),collapse1(h*S)) + div(collapse(gradS),collapse1(S)) ## fd(function(beta) {fit=object; fit@fullcoef = beta; log(predict(fit,type="meanhr",newdata=newdata, var=var, exposed=exposed))},betastar) } if (type=="meansurv" && !object@frailty && link=="I") { gd <- collapse(object@link$gradS(X%*% beta,X)) } if (type=="meansurvdiff" && !object@frailty) { gd <- collapse(object@link$gradS(X2%*% beta,X2) - object@link$gradS(X%*% beta,X)) } if (type=="margsurv" && link %in% c("I","cloglog") && args$RandDist=="Gamma") { theta <- exp(beta[length(beta)]) betastar <- beta[-length(beta)] eta <- as.vector(X %*% betastar) H <- as.vector(object@link$H(eta)) gradH <- object@link$gradH(eta,list(X=X)) S0 <- 1+theta*H margS <- S0^(-1/theta) ## This depends on the transformation link if (link=="I") gd <- t(cbind(-margS * gradH/(1+theta*H), margS*(1/theta*log(1+theta*H)-H/(1+theta*H)))) if (link=="cloglog") gd <- t(cbind(-(theta^2*S0^(-theta-1)*gradH/(S0^(-theta)*(-theta)*log(S0))), (theta*log(S0)*S0^(-theta)-theta^2*H*S0^(-1-theta))/(S0^(-theta)*(-theta*log(S0))))) } if (type=="marghaz" && link %in% c("I","log") && args$RandDist=="Gamma") { theta <- exp(beta[length(beta)]) betastar <- beta[-length(beta)] eta <- as.vector(X %*% betastar) etaD <- as.vector(XD %*% betastar) H <- as.vector(object@link$H(eta)) h <- as.vector(object@link$h(eta,etaD)) gradH <- object@link$gradH(eta,list(X=X)) gradh <- object@link$gradh(eta,etaD,list(X=X,XD=XD)) S0 <- 1+theta*H margS <- S0^(-1/theta) ## This depends on the transformation link if (link=="I") gd <- t(cbind((S0*gradh-theta*h*gradH)/(theta^2*H^2+S0), -(theta*H*h/theta^2*H^2+S0))) if (link=="log") gd <- t(cbind((S0*gradh-theta*h*gradH)/(S0*h), -theta*H/S0)) } if (type=="af" && !object@frailty) { meanS <- collapse1(as.vector(object@link$ilink(X%*%beta))) meanS2 <- collapse1(as.vector(object@link$ilink(X2%*%beta))) gradS <- collapse(object@link$gradS(X%*%beta,X)) gradS2 <- collapse(object@link$gradS(X2%*%beta,X2)) gd <- t((t(gradS2-gradS)*(1-meanS) + (meanS2-meanS)*t(gradS))/(1-meanS)^2) ## check ## fd(function(beta) collapse1(as.vector(object@link$ilink(X %*% beta))), beta) - gradS # ok ## fd(function(beta) collapse1(as.vector(object@link$ilink(X2 %*% beta))), beta) - gradS2 # ok ## fd(function(beta) collapse1(as.vector(object@link$ilink(X2 %*% beta)-object@link$ilink(X %*% beta)))/collapse1(1-as.vector(object@link$ilink(X %*% beta))),beta) - gd # ok } } pred <- predictnl(object,local,link=link,newdata=newdata,type=type,gd=if (use.gr) gd else NULL, exposed=exposed,...) ci <- confint.predictnl(pred, level = level) out <- data.frame(Estimate=pred$fit, lower=ci[,1], upper=ci[,2]) if (link=="cloglog") out <- data.frame(Estimate=out$Estimate,lower=out$upper,upper=out$lower) out <- invlinkf(out) } if (keep.attributes || full) { if (type %in% c("rmst","rmstdiff")) newdata = olddata if (type %in% c("hr","sdiff","hdiff","meansurvdiff","meanhr","or","marghr","af","rmstdiff")) newdata <- exposed(newdata) if (type %in% c("meansurv","meanhr","meansurvdiff","meanhaz","meanmargsurv","af")) { newdata <- data.frame(time=unique(newdata[[object@timeVar]])) names(newdata) <- object@timeVar } if (full) { if (inherits(out, "AsIs")) class(out) <- setdiff(class(out),"AsIs") out <- if(is.data.frame(out)) cbind(newdata,out) else cbind(newdata, data.frame(Estimate=out)) } else attr(out,"newdata") <- newdata } return(out) } predict.cumhaz <- function(object, newdata=NULL) { args <- object@args lpfunc <- function(newdata) if (inherits(object,"pstpm2")) function(x,...) { newdata2 <- newdata newdata2[[object@timeVar]] <- x predict(object@gam,newdata2,type="lpmatrix") } else function(x,...) { newdata2 <- newdata newdata2[[object@timeVar]] <- x lpmatrix.lm(object@lm,newdata2) } if (inherits(object, "stpm2")) { X <- object@args$transX(lpmatrix.lm(object@lm, newdata), newdata) } if (inherits(object, "pstpm2")) { X <- object@args$transX(predict(object@gam, newdata, type="lpmatrix"), newdata) } link <- object@link # cf. link for transformation of the predictions eta <- as.vector(X %*% beta) link$H(eta) } setMethod("predict", "stpm2", function(object,newdata=NULL, type=c("surv","cumhaz","hazard","density","hr","sdiff","hdiff","loghazard","link","meansurv","meansurvdiff","meanhr","odds","or","margsurv","marghaz","marghr","meanhaz","af","fail","margfail","meanmargsurv","uncured","rmst","probcure","lpmatrix","gradh","gradH","rmstdiff","lpmatrixD"), grid=FALSE,seqLength=300, type.relsurv=c("excess","total","other"), scale=365.24, rmap, ratetable=survival::survexp.us, se.fit=FALSE,link=NULL,exposed=NULL,var=NULL,keep.attributes=FALSE,use.gr=TRUE,level=0.95,n.gauss.quad=100,full=FALSE,...) { type <- match.arg(type) type.relsurv <- match.arg(type.relsurv) predict.stpm2.base(object, newdata=newdata, type=type, grid=grid, seqLength=seqLength, se.fit=se.fit, link=link, exposed=exposed, var=var, keep.attributes=keep.attributes, use.gr=use.gr,level=level, type.relsurv=type.relsurv, scale=scale, rmap=rmap, ratetable=ratetable, n.gauss.quad=n.gauss.quad, full=full, ...) }) ##`%c%` <- function(f,g) function(...) g(f(...)) # function composition plot.meansurv <- function(x, y=NULL, times=NULL, newdata=NULL, type="meansurv", exposed=NULL, var=NULL, add=FALSE, ci=!add, rug=!add, recent=FALSE, xlab=NULL, ylab=NULL, lty=1, line.col=1, ci.col="grey", seqLength=301, ...) { ## if (is.null(times)) stop("plot.meansurv: times argument should be specified") if (is.null(newdata)) newdata <- as.data.frame(x@data) if (is.null(times)) { Y <- x@y event <- Y[,ncol(Y)]==1 | x@args$interval time <- x@data[[x@timeVar]] eventTimes <- time[event] times <- seq(min(eventTimes),max(eventTimes),length=seqLength)[-1] ## data.x <- data.frame(X) ## names(data.x) <- object@timeVar ## newdata <- merge(newdata,data.x) } times <- times[times !=0] if (recent) { newdata <- do.call("rbind", lapply(times, function(time) { newd <- newdata newd[[x@timeVar]] <- newdata[[x@timeVar]]*0+time newd })) pred <- predict(x, newdata=newdata, type=type, keep.attributes=TRUE, se.fit=ci, exposed=exposed, var=var) # requires recent version if (type=="meansurv") { pred <- if (ci) rbind(c(Estimate=1,lower=1,upper=1),pred) else c(1,pred) times <- c(0,times) } if (type=="meansurvdiff") { pred <- if (ci) rbind(c(Estimate=0,lower=0,upper=0),pred) else c(0,pred) times <- c(0,times) } } else { pred <- lapply(times, function(time) { newdata[[x@timeVar]] <- newdata[[x@timeVar]]*0+time predict(x, newdata=newdata, type=type, se.fit=ci, grid=FALSE, exposed=exposed, var=var, keep.attributes=TRUE) }) pred <- do.call("rbind", pred) if (type=="meansurv") { pred <- if (ci) rbind(c(Estimate=1,lower=1,upper=1),pred) else c(1,unlist(pred)) times <- c(0,times) } if (type=="meansurvdiff") { pred <- if (ci) rbind(c(Estimate=0,lower=0,upper=0),pred) else c(0,unlist(pred)) times <- c(0,times) } } if (is.null(xlab)) xlab <- deparse(x@timeExpr) if (is.null(ylab)) ylab <- switch(type, meansurv="Mean survival", af="Attributable fraction", meansurvdiff="Difference in mean survival", meanhaz="Mean hazard", meanhr="Mean hazard ratio") if (!add) matplot(times, pred, type="n", xlab=xlab, ylab=ylab, ...) if (ci) { polygon(c(times,rev(times)),c(pred$lower,rev(pred$upper)),col=ci.col,border=ci.col) lines(times,pred$Estimate,col=line.col,lty=lty,...) } else { lines(times,pred,col=line.col,lty=lty,...) } if (rug) { Y <- x@y eventTimes <- Y[Y[,ncol(Y)]==1,ncol(Y)-1] rug(eventTimes,col=line.col) } return(invisible(y)) } plot.stpm2.base <- function(x,y,newdata=NULL,type="surv", xlab=NULL,ylab=NULL,line.col=1,ci.col="grey",lty=par("lty"),log="", add=FALSE,ci=!add,rug=!add, var=NULL,exposed=NULL,times=NULL, type.relsurv=c("excess","total","other"), ratetable = survival::survexp.us, rmap, scale=365.24, ...) { if (type %in% c("meansurv","meansurvdiff","af","meanhaz","meanhr")) { return(plot.meansurv(x,times=times,newdata=newdata,type=type,xlab=xlab,ylab=ylab,line.col=line.col,ci.col=ci.col, lty=lty,add=add,ci=ci,rug=rug, exposed=exposed, var=var, ...)) } if (is.null(newdata)) stop("newdata argument needs to be specified") y <- predict(x,newdata,type=switch(type,fail="surv",margfail="margsurv",type),var=var,exposed=exposed, grid=!(x@timeVar %in% names(newdata)), se.fit=ci, keep.attributes=TRUE, type.relsurv=type.relsurv, ratetable=ratetable, rmap=rmap, scale=scale) if (type %in% c("fail","margfail")) { if (ci) { y$Estimate <- 1-y$Estimate lower <- y$lower y$lower=1-y$upper y$upper=1-lower } else y <- structure(1-y,newdata=attr(y,"newdata")) } if (is.null(xlab)) xlab <- deparse(x@timeExpr) if (is.null(ylab)) ylab <- switch(type,hr="Hazard ratio",hazard="Hazard",surv="Survival",density="Density", sdiff="Survival difference",hdiff="Hazard difference",cumhaz="Cumulative hazard", loghazard="log(hazard)",link="Linear predictor",meansurv="Mean survival", meansurvdiff="Difference in mean survival",meanhr="Mean hazard ratio", odds="Odds",or="Odds ratio", margsurv="Marginal survival",marghaz="Marginal hazard",marghr="Marginal hazard ratio", haz="Hazard",fail="Failure", meanhaz="Mean hazard",margfail="Marginal failure",af="Attributable fraction",meanmargsurv="Mean marginal survival", uncured="Uncured distribution", rmst="Restricted mean survival time", rmstdiff="Restricted mean survival time difference") xx <- attr(y,"newdata") xx <- eval(x@timeExpr,xx) # xx[,ncol(xx)] ## remove NaN if (any(is.nan(as.matrix(y)))) { idx <- is.nan(y[,1]) for (j in 2:ncol(y)) idx <- idx | is.nan(y[,j]) y <- y[!idx,,drop=FALSE] xx <- xx[!idx] } if (!add) matplot(xx, y, type="n", xlab=xlab, ylab=ylab, log=log, ...) if (ci) { polygon(c(xx,rev(xx)), c(y[,2],rev(y[,3])), col=ci.col, border=ci.col) lines(xx,y[,1],col=line.col,lty=lty,...) } else lines(xx,y,col=line.col,lty=lty,...) if (rug) { Y <- x@y eventTimes <- Y[Y[,ncol(Y)]==1,ncol(Y)-1] rug(eventTimes,col=line.col) } return(invisible(y)) } setMethod("plot", signature(x="stpm2", y="missing"), function(x,y,newdata=NULL,type="surv", xlab=NULL,ylab=NULL,line.col=1,ci.col="grey",lty=par("lty"), add=FALSE,ci=!add,rug=!add, var=NULL,exposed=NULL,times=NULL, type.relsurv=c("excess","total","other"), ratetable = survival::survexp.us, rmap, scale=365.24,...) plot.stpm2.base(x=x, y=y, newdata=newdata, type=type, xlab=xlab, ylab=ylab, line.col=line.col, ci.col=ci.col, lty=lty, add=add, ci=ci, rug=rug, var=var, exposed=exposed, times=times, type.relsurv=type.relsurv, ratetable=ratetable, rmap=rmap, scale=scale,...) ) lines.stpm2 <- function(x,newdata=NULL,type="surv", col=1,ci.col="grey",lty=par("lty"), ci=FALSE,rug=FALSE, var=NULL,exposed=NULL,times=NULL, type.relsurv=c("excess","total","other"), ratetable = survival::survexp.us, rmap, scale=365.24, ...) plot.stpm2.base(x=x, newdata=newdata, type=type, line.col=col, ci.col=ci.col, lty=lty, add=TRUE, ci=ci, rug=rug, var=var, exposed=exposed, times=times, type.relsurv=type.relsurv, ratetable=ratetable, rmap=rmap, scale=scale,...) setMethod("lines", signature(x="stpm2"), lines.stpm2) eform <- function (object, ...) UseMethod("eform") setGeneric("eform") eform.stpm2 <- function (object, parm, level = 0.95, method = c("Profile","Delta"), name = "exp(beta)", ...) { method <- match.arg(method) if (missing(parm)) parm <- TRUE if (object@args$robust) { ## Profile likelihood not defined for robust variance: using delta method method <- "Delta" } estfun <- switch(method, Profile = confint, Delta = stats::confint.default) val <- exp(cbind(coef = coef(object), estfun(object, level = level))) colnames(val) <- c(name, colnames(val)[-1]) val[parm, ] } setMethod("eform", signature(object="stpm2"), eform.stpm2) eform.default <- function(object, parm, level = 0.95, method=c("Delta","Profile"), name="exp(beta)", ...) { method <- match.arg(method) if (missing(parm)) parm <- TRUE if (method == "Profile") class(object) <- c(class(object),"glm") estfun <- switch(method, Profile = confint, Delta = stats::confint.default) val <- exp(cbind(coef = coef(object), estfun(object, level = level))) colnames(val) <- c(name,colnames(val)[-1]) val[parm, ] } derivativeDesign <- function (functn, lower = -1, upper = 1, rule = NULL, ...) { stopifnot(is.function(functn)) pred <- if (length(list(...)) && length(formalArgs(functn)) > 1) function(x) functn(x, ...) else functn if (is.null(rule)) rule <- ## gaussquad::legendre.quadrature.rules(20)[[20]] data.frame(x = c(0.993128599185095, 0.963971927277914, 0.912234428251326, 0.839116971822219, 0.746331906460151, 0.636053680726515, 0.510867001950827, 0.37370608871542, 0.227785851141646, 0.0765265211334977, -0.0765265211334974, -0.227785851141645, -0.373706088715418, -0.510867001950827, -0.636053680726516, -0.746331906460151, -0.839116971822219, -0.912234428251326, -0.963971927277913, -0.993128599185094), w = c(0.0176140071391522, 0.040601429800387, 0.0626720483341092, 0.0832767415767053, 0.101930119817241, 0.11819453196152, 0.131688638449176, 0.14209610931838, 0.149172986472603, 0.152753387130726, 0.152753387130726, 0.149172986472603, 0.142096109318381, 0.131688638449175, 0.11819453196152, 0.10193011981724, 0.0832767415767068, 0.0626720483341075, 0.0406014298003876, 0.0176140071391522)) lambda <- (upper - lower)/(2) mu <- (lower + upper)/(2) x <- lambda * rule$x + mu w <- rule$w eps <- .Machine$double.eps^(1/8) X0 <- pred(x) X1 <- (-pred(x+2*eps)+8*pred(x+eps)-8*pred(x-eps)+pred(x-2*eps))/12/eps X2 <- (-pred(x+2*eps)/12+4/3*pred(x+eps)-5/2*pred(x)+4/3*pred(x-eps)-pred(x-2*eps)/12)/eps/eps X3 <- (-pred(x+3*eps)/8+pred(x+2*eps)-13/8*pred(x+eps)+ 13/8*pred(x-eps)-pred(x-2*eps)+pred(x-3*eps)/8)/eps/eps/eps return(list(x=x,w=w,lambda=lambda,X0=X0,X1=X1,X2=X2,X3=X3)) } smootherDesign <- function(gamobj,data,parameters = NULL) { d <- data[1,,drop=FALSE] ## how to get mean prediction values, particularly for factors? makepred <- function(var,inverse) { function(value) { d <- d[rep(1,length(value)),] d[[var]] <- inverse(value) predict(gamobj,newdata=d,type="lpmatrix") } } smoother.names <- sapply(gamobj$smooth, function(obj) obj$term) lapply(1:length(gamobj$smooth), function(i) { smoother <- gamobj$smooth[[i]] if (is.null(parameters)) { var <- smoother$term stopifnot(var %in% names(data)) transform <- I inverse <- I } else { j <- match(smoother$term,names(parameters)) stopifnot(!is.na(j)) var <- parameters[[j]]$var transform <- parameters[[j]]$transform inverse <- parameters[[j]]$inverse } pred <- makepred(var,inverse) derivativeDesign(pred, lower=transform(min(data[[var]])), upper=transform(max(data[[var]]))) }) } ## TODO: If we transform a smoother (e.g. log(time)), we can use information on ## (i) the variable name, (ii) the transform and (iii) the inverse transform. ## penalised stpm2 setOldClass("gam") setClass("pstpm2", representation(xlevels="list", contrasts="listOrNULL", terms="terms", logli="function", gam="gam", timeVar="character", time0Var="character", timeExpr="nameOrcall", time0Expr="nameOrcallOrNULL", like="function", model.frame="list", ## fullformula="formula", delayed="logical", frailty="logical", x="matrix", xd="matrix", termsd="terms", Call="call", y="Surv", sp="numeric", nevent="numeric", link="list", edf="numeric", edf_var="numeric", df="numeric", args="list"), contains="mle2") ## Could this inherit from summary.stpm2? setClass("summary.pstpm2", representation(pstpm2="pstpm2",frailty="logical",theta="list",wald="matrix"), contains="summary.mle2") setMethod("summary", "pstpm2", function(object) { newobj <- as(summary(as(object,"mle2")),"summary.pstpm2") newobj@pstpm2 <- object newobj@frailty <- object@frailty newobj@call <- object@Call if (object@frailty) { coef <- coef(newobj) theta <- exp(coef[nrow(coef),1]) se.logtheta <- coef[nrow(coef),2] se.theta <- theta*se.logtheta test.statistic <- (1/se.logtheta)^2 p.value <- pchisq(test.statistic,df=1,lower.tail=FALSE)/2 newobj@theta <- list(theta=theta, se.theta=se.theta, p.value=p.value) } else newobj@theta <- list() vcov1 <- vcov(object) coef1 <- coef(object) ## Wald test for the smoothers wald <- t(sapply(names(object@edf_var), function(name) { i <- grep(name,colnames(vcov1),fixed=TRUE) statistic <- as.vector(coef1[i] %*% solve(vcov1[i,i],tol=0) %*% coef1[i]) edf <- object@edf_var[name] c(statistic=statistic,ncoef=length(i),edf=edf,p.value=pchisq(statistic, edf, lower.tail=FALSE)) })) colnames(wald) <- c("Wald statistic","Number of coef","Effective df","P value") newobj@wald <- wald newobj }) setMethod("show", "summary.pstpm2", function(object) { show(as(object,"summary.mle2")) cat(sprintf("\nEffective df=%g\n",object@pstpm2@edf)) printCoefmat(object@wald) if (object@frailty) cat(sprintf("\ntheta=%g\tse=%g\tp=%g\n", object@theta$theta,object@theta$se.theta,object@theta$p.value)) }) setMethod("AICc", "pstpm2", function (object, ..., nobs=NULL, k=2) { L <- list(...) if (length(L)) { L <- c(list(object),L) if (is.null(nobs)) { nobs <- sapply(L,nobs) } if (length(unique(nobs))>1) stop("nobs different: must have identical data for all objects") val <- sapply(L, AICc, nobs=nobs, k=k) df <- sapply(L,attr,"edf") data.frame(AICc=val,df=df) } else { df <- attr(object,"edf") if (is.null(nobs)) nobs <- object@nevent c(-2*logLik(object)+k*df+k*df*(df+1)/(nobs-df-1)) } }) setMethod("qAICc", "pstpm2", function (object, ..., nobs = NULL, dispersion = 1, k = 2) { L <- list(...) if (length(L)) { L <- c(list(object),L) if (is.null(nobs)) { nobs <- sapply(L,nobs) } if (length(unique(nobs))>1) stop("nobs different: must have identical data for all objects") val <- sapply(L, qAICc, nobs=nobs,dispersion=dispersion,k=k) df <- sapply(L,attr,"edf") data.frame(qAICc=val,df=df) } else { df <- attr(object,"edf") if (is.null(nobs)) nobs <- object@nevent c(-2*logLik(object)/dispersion+k*df+k*df*(df+1)/(nobs-df-1)) } }) setMethod("qAIC", "pstpm2", function (object, ..., dispersion = 1, k = 2) { L <- list(...) if (length(L)) { L <- c(list(object),L) if (is.null(nobs)) { nobs <- sapply(L,nobs) } if (length(unique(nobs))>1) stop("nobs different: must have identical data for all objects") val <- sapply(L, qAIC, dispersion=dispersion, k=k) df <- sapply(L,attr,"edf") data.frame(qAICc=val,df=df) } else { df <- attr(object,"edf") c(-2*logLik(object)/dispersion+k*df) } }) setMethod("AIC", "pstpm2", function (object, ..., k = 2) { L <- list(...) if (length(L)) { L <- c(list(object),L) if (!all(sapply(L,class)=="pstpm2")) stop("all objects in list must be class pstpm2") val <- sapply(L,AIC,k=k) df <- sapply(L,attr,"edf") data.frame(AIC=val,df=df) } else -2 * as.numeric(logLik(object)) + k * attr(object, "edf") }) setMethod("BIC", "pstpm2", function (object, ..., nobs = NULL) { L <- list(...) if (length(L)) { L <- c(list(object),L) if (!all(sapply(L,class)=="pstpm2")) stop("all objects in list must be class pstpm2") val <- sapply(L,BIC,nobs=nobs) df <- sapply(L,attr,"edf") data.frame(BIC=val,df=df) } else { if (is.null(nobs)) nobs <- object@nevent -2 * as.numeric(logLik(object)) + log(nobs) * attr(object, "edf") } }) setMethod("eform", signature(object="pstpm2"), function (object, parm, level = 0.95, method = c("Profile"), name = "exp(beta)") { method <- match.arg(method) if (missing(parm)) parm <- TRUE estfun <- switch(method, Profile = confint) val <- exp(cbind(coef = coef(object), estfun(object, level = level))) colnames(val) <- c(name, colnames(val)[-1]) val[parm, ] }) setMethod("show", "pstpm2", function(object) { object@call.orig <- object@Call show(as(object,"mle2")) }) simulate.stpm2 <- function(object, nsim=1, seed=NULL, newdata=NULL, lower=1e-6, upper=1e5, start=NULL, ...) { if (!is.null(seed)) set.seed(seed) if (is.null(newdata)) newdata = as.data.frame(object@data) ## assumes nsim replicates per row in newdata n = nsim * nrow(newdata) if (!is.null(start)) { newdatap = newdata newdatap[[object@timeVar]] = start # check if this is a sensible size? Sentry = predict(object, newdata=newdatap) if (length(start)==1) lower=rep(start,n) else if (length(start)==nrow(newdata)) lower = rep(start,each=nsim) else if (length(start==n)) lower = start else lower = rep(lower,n) # should not get here:( } else { Sentry = 1 lower = rep(lower, n) } newdata = newdata[rep(1:nrow(newdata), each=nsim), , drop=FALSE] U <- runif(n) objective <- function(time) { newdata[[object@timeVar]] <- time predict(object, newdata=newdata)/Sentry - U } vuniroot(objective, lower=rep(lower,length=n), upper=rep(upper,length=n), tol=1e-10, n=n)$root } setGeneric("simulate", function(object, nsim=1, seed=NULL, ...) standardGeneric("simulate")) setMethod("simulate", signature(object="stpm2"), function(object, nsim=1, seed=NULL, newdata=NULL, lower=1e-6, upper=1e5, start=NULL, ...) simulate.stpm2(object, nsim, seed, newdata, lower,upper,start, ...)) setMethod("simulate", signature(object="pstpm2"), function(object, nsim=1, seed=NULL, newdata=NULL, lower=1e-6, upper=1e5, start=NULL, ...) simulate.stpm2(object, nsim, seed, newdata, lower,upper,start, ...)) ## Revised from bbmle: ## changed the calculation of the degrees of freedom in the third statement of the .local function setMethod("anova", signature(object="pstpm2"), function (object, ..., width = getOption("width"), exdent = 10) { mlist <- c(list(object), list(...)) mnames <- sapply(sys.call(sys.parent())[-1], deparse) ltab <- as.matrix(do.call("rbind", lapply(mlist, function(x) { c(`Tot Df` = x@edf, Deviance = -2 * logLik(x)) # changed to x@edf }))) terms = sapply(mlist, function(obj) { if (is.null(obj@formula) || obj@formula == "") { mfun <- obj@call$minuslogl mfun <- paste("[", if (is.name(mfun)) { as.character(mfun) } else { "..." }, "]", sep = "") paste(mfun, ": ", paste(names(obj@coef), collapse = "+"), sep = "") } else { as.character(obj@formula) } }) mterms <- paste("Model ", 1:length(mnames), ": ", mnames, ", ", terms, sep = "") mterms <- strwrapx(mterms, width = width, exdent = exdent, wordsplit = "[ \n\t]") heading <- paste("Likelihood Ratio Tests", paste(mterms, collapse = "\n"), sep = "\n") ltab <- cbind(ltab, Chisq = abs(c(NA, diff(ltab[, "Deviance"]))), Df = abs(c(NA, diff(ltab[, "Tot Df"])))) ltab <- cbind(ltab, `Pr(>Chisq)` = c(NA, pchisq(ltab[, "Chisq"][-1], ltab[, "Df"][-1], lower.tail = FALSE))) rownames(ltab) <- 1:nrow(ltab) attr(ltab, "heading") <- heading class(ltab) <- "anova" ltab }) setMethod("predictnl", "pstpm2", function(object,fun,newdata=NULL,link=c("I","log","cloglog","logit"), gd=NULL, ...) { ## should gd be passed as argument to numDeltaMethod? link <- match.arg(link) linkf <- eval(parse(text=link)) if (is.null(newdata) && !is.null(object@data)) newdata <- object@data localf <- function(coef,...) { object@fullcoef = coef linkf(fun(object,...)) } numDeltaMethod(object,localf,newdata=newdata,gd=gd,...) }) ## setMethod("predict", "pstpm2", function(object,newdata=NULL, type=c("surv","cumhaz","hazard","density","hr","sdiff","hdiff","loghazard","link","meansurv","meansurvdiff","meanhr","odds","or","margsurv","marghaz","marghr","meanhaz","af","fail","margfail","meanmargsurv","rmst","lpmatrix","gradh","gradH","rmstdiff","lpmatrixD"), grid=FALSE,seqLength=300, se.fit=FALSE,link=NULL,exposed=NULL,var=NULL,keep.attributes=FALSE,use.gr=TRUE,level=0.95, n.gauss.quad=100, full=FALSE, ...) { type <- match.arg(type) predict.stpm2.base(object=object, newdata=newdata, type=type, grid=grid, seqLength=seqLength, se.fit=se.fit, link=link, exposed=exposed, var=var, keep.attributes=keep.attributes, use.gr=use.gr, level=level, n.gauss.quad=n.gauss.quad, full=full, ...) }) setMethod("residuals", "pstpm2", function(object, type=c("li","gradli")) residuals.stpm2.base(object=object, type=match.arg(type))) ##`%c%` <- function(f,g) function(...) g(f(...)) # function composition ## to do: ## (*) Stata-compatible knots setMethod("plot", signature(x="pstpm2", y="missing"), function(x,y,newdata=NULL,type="surv", xlab=NULL,ylab=NULL,line.col=1,ci.col="grey",lty=par("lty"), add=FALSE,ci=!add,rug=!add, var=NULL,exposed=incrVar(var),times=NULL,...) plot.stpm2.base(x=x, y=y, newdata=newdata, type=type, xlab=xlab, ylab=ylab, line.col=line.col, lty=lty, add=add, ci=ci, rug=rug, var=var, exposed=exposed, times=times, ...) ) lines.pstpm2 <- function(x,newdata=NULL,type="surv", col=1,ci.col="grey",lty=par("lty"), ci=FALSE,rug=FALSE, var=NULL,exposed=NULL,times=NULL,...) plot.stpm2.base(x=x, newdata=newdata, type=type, line.col=col, ci.col=ci.col, lty=lty, add=TRUE, ci=ci, rug=rug, var=var, exposed=exposed, times=times, ...) setMethod("lines", signature(x="pstpm2"), lines.pstpm2) setMethod("update", signature(object="pstpm2"), function (object, formula., evaluate = TRUE, ...) { call <- object@Call extras <- match.call(expand.dots = FALSE)$... if (!missing(formula.)) call$formula <- update.formula(call$formula, formula.) if (length(extras)) { existing <- !is.na(match(names(extras), names(call))) for (a in names(extras)[existing]) call[[a]] <- extras[[a]] if (any(!existing)) { call <- c(as.list(call), extras[!existing]) call <- as.call(call) } } if (evaluate) eval(call, parent.frame()) else call }) ## sandwich variance estimator (from the sandwich package) ## coeftest.stpm2 <- ## function (x, vcov. = NULL, df = NULL, ...) ## { ## est <- coef(x) ## if (is.null(vcov.)) ## se <- vcov(x) ## else { ## if (is.function(vcov.)) ## se <- vcov.(x) ## else se <- vcov. ## } ## se <- sqrt(diag(se)) ## if (!is.null(names(est)) && !is.null(names(se))) { ## anames <- names(est)[names(est) %in% names(se)] ## est <- est[anames] ## se <- se[anames] ## } ## tval <- as.vector(est)/se ## pval <- 2 * pnorm(abs(tval), lower.tail = FALSE) ## cnames <- c("Estimate", "Std. Error", "z value", "Pr(>|z|)") ## mthd <- "z" ## rval <- cbind(est, se, tval, pval) ## colnames(rval) <- cnames ## class(rval) <- "coeftest" ## attr(rval, "method") <- paste(mthd, "test of coefficients") ## return(rval) ## } ## weights.stpm2 <- ## function (object, ...) ## { ## wts <- object@weights ## if (is.null(wts)) ## wts ## else napredict(object@na.action, wts) ## } ## copy of bbmle:::strwrapx strwrapx <- function (x, width = 0.9 * getOption("width"), indent = 0, exdent = 0, prefix = "", simplify = TRUE, parsplit = "\n[ \t\n]*\n", wordsplit = "[ \t\n]") { if (!is.character(x)) x <- as.character(x) indentString <- paste(rep.int(" ", indent), collapse = "") exdentString <- paste(rep.int(" ", exdent), collapse = "") y <- list() plussplit = function(w) { lapply(w, function(z) { plusloc = which(strsplit(z, "")[[1]] == "+") plussplit = apply(cbind(c(1, plusloc + 1), c(plusloc, nchar(z, type = "width"))), 1, function(b) substr(z, b[1], b[2])) plussplit }) } z <- lapply(strsplit(x, parsplit), function(z) { lapply(strsplit(z, wordsplit), function(x) unlist(plussplit(x))) }) for (i in seq_along(z)) { yi <- character(0) for (j in seq_along(z[[i]])) { words <- z[[i]][[j]] nc <- nchar(words, type = "w") if (any(is.na(nc))) { nc0 <- nchar(words) nc[is.na(nc)] <- nc0[is.na(nc)] } if (any(nc == 0)) { zLenInd <- which(nc == 0) zLenInd <- zLenInd[!(zLenInd %in% (grep("\\.$", words) + 1))] if (length(zLenInd) > 0) { words <- words[-zLenInd] nc <- nc[-zLenInd] } } if (length(words) == 0) { yi <- c(yi, "", prefix) next } currentIndex <- 0 lowerBlockIndex <- 1 upperBlockIndex <- integer(0) lens <- cumsum(nc + 1) first <- TRUE maxLength <- width - nchar(prefix, type = "w") - indent while (length(lens) > 0) { k <- max(sum(lens <= maxLength), 1) if (first) { first <- FALSE maxLength <- maxLength + indent - exdent } currentIndex <- currentIndex + k if (nc[currentIndex] == 0) upperBlockIndex <- c(upperBlockIndex, currentIndex - 1) else upperBlockIndex <- c(upperBlockIndex, currentIndex) if (length(lens) > k) { if (nc[currentIndex + 1] == 0) { currentIndex <- currentIndex + 1 k <- k + 1 } lowerBlockIndex <- c(lowerBlockIndex, currentIndex + 1) } if (length(lens) > k) lens <- lens[-(1:k)] - lens[k] else lens <- NULL } nBlocks <- length(upperBlockIndex) s <- paste(prefix, c(indentString, rep.int(exdentString, nBlocks - 1)), sep = "") for (k in (1:nBlocks)) { s[k] <- paste(s[k], paste(words[lowerBlockIndex[k]:upperBlockIndex[k]], collapse = " "), sep = "") } s = gsub("\\+ ", "+", s) yi <- c(yi, s, prefix) } y <- if (length(yi)) c(y, list(yi[-length(yi)])) else c(y, "") } if (simplify) y <- unlist(y) y } ## S3 methods coef.pstpm2 <- coef.stpm2 <- coef vcov.pstpm2 <- vcov.stpm2 <- vcov rstpm2/R/gaussquad.R0000644000176200001440000000736614363600352014040 0ustar liggesusers## NUMERICAL INTEGRATION ## Borrowed from statmod -- thanks to Gordon Smyth for excellent software gauss.quad <- function(n,kind="legendre",alpha=0,beta=0) # Calculate nodes and weights for Gaussian quadrature. # Adapted from Netlib routine gaussq.f # Gordon Smyth, Walter and Eliza Hall Institute # Suggestion from Stephane Laurent 6 Aug 2012 # Created 4 Sept 2002. Last modified 28 Aug 2016. { n <- as.integer(n) if(n<0L) stop("need non-negative number of nodes") if(n==0L) return(list(nodes=numeric(0L), weights=numeric(0L))) kind <- match.arg(kind,c("legendre","chebyshev1","chebyshev2","hermite","jacobi","laguerre")) i <- 1L:n i1 <- i[-n] switch(kind, legendre={ lnmuzero <- log(2) a <- rep_len(0,n) b <- i1/sqrt(4*i1^2-1) }, chebyshev1={ lnmuzero <- log(pi) a <- rep_len(0,n) b <- rep_len(0.5,n-1L) b[1] <- sqrt(0.5) }, chebyshev2={ lnmuzero <- log(pi/2) a <- rep_len(0,n) b <- rep_len(0.5,n-1L) }, hermite={ lnmuzero <- log(pi)/2 a <- rep_len(0,n) b <- sqrt(i1/2) }, jacobi={ ab <- alpha+beta # muzero <- 2^(ab+1) * gamma(alpha+1) * gamma(beta+1) / gamma(ab+2) lnmuzero <- (ab+1)*log(2) + lgamma(alpha+1) + lgamma(beta+1) - lgamma(ab+2) a <- i a[1] <- (beta-alpha)/(ab+2) i2 <- i[-1] abi <- ab+2*i2 a[i2] <- (beta^2-alpha^2)/(abi-2)/abi b <- i1 b[1] <- sqrt(4*(alpha+1)*(beta+1)/(ab+2)^2/(ab+3)) i2 <- i1[-1] abi <- ab+2*i2 b[i2] <- sqrt(4*i2*(i2+alpha)*(i2+beta)*(i2+ab)/(abi^2-1)/abi^2) }, laguerre={ a <- 2*i-1+alpha b <- sqrt(i1*(i1+alpha)) lnmuzero <- lgamma(alpha+1) }) b <- c(b,0) z <- rep_len(0,n) z[1] <- 1 ierr <- 0L out <- .Fortran("gausq2",n,as.double(a),as.double(b),as.double(z),ierr,PACKAGE="rstpm2") x <- out[[2]] w <- out[[4]] w <- exp(lnmuzero + 2*log(abs(w))) list(nodes=x,weights=w) } gauss.quad.prob <- function(n,dist="uniform",l=0,u=1,mu=0,sigma=1,alpha=1,beta=1) # Calculate nodes and weights for Gaussian quadrature using probability densities. # Adapted from Netlib routine gaussq.f # Gordon Smyth, Walter and Eliza Hall Institute # Corrections for n=1 and n=2 by Spencer Graves, 28 Dec 2005 # Created 4 Sept 2002. Last modified 28 Aug 2016. { n <- as.integer(n) if(n<0L) stop("need non-negative number of nodes") if(n==0L) return(list(nodes=numeric(0L), weights=numeric(0L))) dist <- match.arg(dist,c("uniform","beta1","beta2","normal","beta","gamma")) if(n==1L){ switch(dist, uniform={x <- (l+u)/2}, beta1=,beta2=,beta={x <- alpha/(alpha+beta)}, normal={x <- mu}, gamma={x <- alpha*beta} ) return(list(nodes=x, weights=1)) } if(dist=="beta" && alpha==0.5 && beta==0.5) dist <- "beta1" if(dist=="beta" && alpha==1.5 && beta==1.5) dist <- "beta2" i <- 1L:n i1 <- 1L:(n-1L) switch(dist, uniform={ a <- rep_len(0,n) b <- i1/sqrt(4*i1^2-1) }, beta1={ a <- rep_len(0,n) b <- rep_len(0.5,n-1L) b[1] <- sqrt(0.5) }, beta2={ a <- rep_len(0,n) b <- rep_len(0.5,n-1L) }, normal={ a <- rep_len(0,n) b <- sqrt(i1/2) }, beta={ ab <- alpha+beta a <- i a[1] <- (alpha-beta)/ab i2 <- 2:n abi <- ab-2+2*i2 a[i2] <- ((alpha-1)^2-(beta-1)^2)/(abi-2)/abi b <- i1 b[1] <- sqrt(4*alpha*beta/ab^2/(ab+1)) i2 <- i1[-1] # 2:(n-1) abi <- ab-2+2*i2 b[i2] <- sqrt(4*i2*(i2+alpha-1)*(i2+beta-1)*(i2+ab-2)/(abi^2-1)/abi^2) }, gamma={ a <- 2*i+alpha-2 b <- sqrt(i1*(i1+alpha-1)) }) b <- c(b,0) z <- rep_len(0,n) z[1] <- 1 ierr <- 0L out <- .Fortran("gausq2",n,as.double(a),as.double(b),as.double(z),ierr,PACKAGE="rstpm2") x <- out[[2]] w <- out[[4]]^2 switch(dist, uniform = x <- l+(u-l)*(x+1)/2, beta1=,beta2=,beta = x <- (x+1)/2, normal = x <- mu + sqrt(2)*sigma*x, gamma = x <- beta*x) list(nodes=x,weights=w) } rstpm2/R/multistate.R0000644000176200001440000021341715103624171014230 0ustar liggesusersmarkov_msm <- function (x, trans, t = c(0,1), newdata = NULL, init=NULL, tmvar = NULL, sing.inf = 1e+10, method="adams", rtol=1e-10, atol=1e-10, slow=FALSE, min.tm=1e-8, utility=function(t) rep(1, nrow(trans)), utility.sd=rep(0,nrow(trans)), use.costs=FALSE, transition.costs=function(t) rep(0,sum(!is.na(trans))), # per transition transition.costs.sd=rep(0,sum(!is.na(trans))), state.costs=function(t) rep(0,nrow(trans)), # per unit time state.costs.sd=rep(0,nrow(trans)), discount.rate = 0, block.size=500, spline.interpolation=FALSE, debug = FALSE, ...) { stopifnot(requireNamespace("lsoda", quietly=TRUE)) call <- match.call() inherits <- function(x, ...) base::inherits(x, ...) || (base::inherits(x, c("hazFun","zeroModel","hrModel","stratifiedModel")) && base::inherits(x$base, ...)) base.classes <- c("stpm2","pstpm2","glm","survPen","gam","aft","flexsurvreg","aftreg","smoothpwc") stopifnot(all(sapply(x, function(xi) inherits(xi,base.classes) | is.function(xi)))) stopifnot(!is.null(newdata)) stopifnot(sum(!is.na(trans)) == length(x)) if (is.null(init)) init <- "[<-"(rep(0,nrow(trans)),1,1) stopifnot(length(init) == nrow(trans)) ## if newdata are many, then separate into blocks if (nrow(newdata)>block.size) { n.blocks <- ceiling(nrow(newdata)/block.size) indices <- parallel::splitIndices(nrow(newdata), n.blocks) lst <- parallel::mclapply(indices, function(index) markov_msm(x = x, trans = trans, t = t, newdata = newdata[index,], init = init, tmvar = tmvar, sing.inf = sing.inf, method = method, rtol = rtol, atol = atol, slow = slow, min.tm = min.tm, utility = utility, use.costs = use.costs, transition.costs = transition.costs, transition.costs.sd = transition.costs.sd, state.costs.sd = state.costs.sd, state.costs = state.costs, discount.rate = discount.rate, block.size = block.size, spline.interpolation = spline.interpolation, ...)) return(do.call(rbind.markov_msm,lst)) } if (use.costs) slow <- TRUE nt <- length(t) if (nt < 2) stop("number of times should be at least two") stopifnot(length(utility(t[2])) %in% c(1,nrow(trans))) if (is.null(tmvar) && all(sapply(x,inherits,c("stpm2","pstpm2","aft","survPen","flexsurvreg", "aftreg","smoothpwc")))) tmvar <- sapply(x,function(object) if(inherits(object,c("stpm2","pstpm2"))) object@timeVar else if (inherits(object,"aft")) object@args$timeVar else if (inherits(object,"flexsurvreg")) "t" else if (inherits(object,"aftreg")) local({lhs <- object$call$formula[[2]] deparse(if(length(lhs)==4) lhs[[4]] else lhs[[3]])}) else if (inherits(object,"smoothpwc")) "t" else object$t1.name) stopifnot(!is.null(tmvar)) stopifnot(length(tmvar) %in% c(1,length(x))) if (length(tmvar)==1) tmvar <- rep(tmvar, length(x)) for(i in 1:length(x)) { if(inherits(x[[i]],"survPen") && !inherits(x[[i]],"survPenWrap")) x[[i]] <- survPenWrap(x[[i]]) if(inherits(x[[i]],"gam") && !inherits(x[[i]],"gamWrap")) x[[i]] <- gamWrap(x[[i]]) else if(is.function(x[[i]])) x[[i]] <- hazFun(x[[i]], tmvar[i]) } if (spline.interpolation) { replace <- function(object,tmvar) { logModels <- c("aftreg","flexsurvreg","stpm2","pstpm2","aft") logModel <- inherits(object, logModels) t <- if (logModel) exp(seq(log(max(c(min.tm,min(t)))), log(max(t)), length.out=1000)) else seq(max(c(min.tm,min(t))), max(t), length.out=1000) if (inherits(object,"hazFun")) object else if (inherits(object, "addModel")) structure(lapply(object,replace,tmvar=tmvar), class="addModel") else makeSplineFun(object, newdata=newdata, tmvar=tmvar, min.tm=min.tm, tm=t, log=logModel) } x <- mapply(replace, x, tmvar, SIMPLIFY=FALSE) } ntr <- sum(!is.na(trans)) nobs <- nrow(newdata) nstates <- nrow(trans) n <- nstates*nobs cs <- sapply(x,function(item) length(coef(item))) cumcs <- cumsum(c(0,cs)) ncoef <- sum(cs) lambda.discount <- log(1+discount.rate) matwhich <- function(ind) { stopifnot(sum(ind,na.rm=TRUE) == 1) nr <- nrow(ind) nc <- ncol(ind) wind <- which(ind)-1 c(wind %% nr + 1, wind %/% nr + 1) } coef.surv_list <- function(objects) unlist(lapply(objects,function(x) coef(x))) # sapply(objects, coef) FAILS vcov.surv_list <- function(objects) { vcovs <- lapply(objects, function(x) vcov(x)) lengths <- sapply(vcovs,nrow) index <- cumsum(c(0,lengths)) m <- matrix(0,sum(lengths),sum(lengths)) for (i in 1:length(objects)) m[(index[i]+1):index[i+1],(index[i]+1):index[i+1]] <- vcovs[[i]] rownames(m) <- colnames(m) <- names(coef(objects)) m } dp <- function(t, y, ...) { P <- matrix(y[1:(nstates*nobs)],nstates,nobs) # only one state vector per individual Pu <- array(y[nstates*nobs+1:(nstates*ncoef*nobs)],c(nstates,ncoef,nobs)) Q <- array(0, c(nstates, nstates, nobs)) Qu <- array(0, c(nstates, nstates, ncoef, nobs)) QC <- array(0, c(nstates, nobs)) QuC <- array(0, c(nstates, ncoef, nobs)) PQCu <- array(0, c(nstates, ntr, nobs)) froms <- tos <- rep(0,ntr) for (i in 1:ntr) { newdata[[tmvar[i]]] <- pmax(min.tm,t) # special case: t=0 ij <- matwhich(trans == i) froms[i] <- from <- ij[1] tos[i] <- to <- ij[2] Q[from,to,] <- pmax(0,predict(x[[i]], newdata=newdata, type="haz", tmvar=tmvar[i])) Qu[from,to,1:cs[i]+cumcs[i],] <- t(predict(x[[i]], newdata=newdata, type="gradh", tmvar=tmvar[i])) # transposed if (use.costs) { ## collapse across "to" states QC[from,] <- QC[from,] + Q[from,to,]*transition.costs(t)[[i]] QuC[from,1:cs[i]+cumcs[i],] <- QuC[from,1:cs[i]+cumcs[i],] + Qu[from,to,1:cs[i]+cumcs[i],]*transition.costs(t)[i] PQCu[from,i,] <- P[from,]*Q[from,to,] } } Q[is.na(Q)] <- Qu[is.na(Qu)] <- QC[is.na(QC)] <- QuC[is.na(QuC)] <- 0 Q[is.infinite(Q) & Q > 0] <- Qu[is.infinite(Qu) & Qu > 0] <- sing.inf QC[is.infinite(QC) & QC > 0] <- QuC[is.infinite(QuC) & QuC > 0] <- sing.inf if (slow) { dTCdt <- dPdt <- array(0,c(nstates,nobs)) dTCudt <- dPudt <- array(0,c(nstates,ncoef,nobs)) for (i in 1:nobs) { Qi <- Q[,,i] # nstates*nstates Pi <- P[,i] # nstates diag(Qi) <- -rowSums(Qi) dPdt[,i] <- t(Pi)%*%Qi # nstates Qui <- Qu[,,,i] # nstates*nstates*ncoef Pui <- Pu[,,i] # nstates*ncoef for (j in 1:ncoef) diag(Qui[,,j]) <- -rowSums(Qui[,,j]) dPudt[,,i] <- t(t(Pui)%*%Qi) + apply(Qui,3,function(x) t(Pi)%*%x) # nstates*ncoef if (use.costs) { QCi <- QC[,i] # nstates QuCi <- QuC[,,i] # nstates*ncoef dTCdt[,i] <- Pi*(state.costs(t) + QCi) # nstates dTCudt[,,i] <- Pui*(state.costs(t) + QCi) + Pi*QuCi # nstates*ncoef } } } else { Qu2 <- array(Qu,c(nstates*nstates,ncoef,nobs)) QuC2 <- array(QuC,c(nstates*nstates,ncoef,nobs)) lst <- .Call("multistate_ddt",P,Pu,Q,Qu2,PACKAGE="rstpm2") dPdt <- lst[[1]] dPudt <- lst[[2]] dTCdt <- array(0,c(nstates,nobs)) # not implemented! dTCudt <- array(0,c(nstates,ncoef,nobs)) # not implemented! } if (use.costs) list(c(dPdt, dPudt, P*utility(t)*exp(-lambda.discount*t), Pu*utility(t)*exp(-lambda.discount*t), P*exp(-lambda.discount*t), # d/dt for gradient of U wrt utilities *and* gradient of C wrt state costs dTCdt*exp(-lambda.discount*t), dTCudt*exp(-lambda.discount*t), PQCu*exp(-lambda.discount*t) # gradient of C wrt transition costs )) else list(c(dPdt, dPudt, P*utility(t)*exp(-lambda.discount*t), Pu*utility(t)*exp(-lambda.discount*t), P*exp(-lambda.discount*t) # d/dt for gradient of U wrt utilities (assumes u'_m(t)=1) )) } class(x) <- "surv_list" Sigma <- vcov(x) if (any(is.na(Sigma))) stop("NAs in the covariance matrix") if (any(is.na(coef(x)))) stop("NAs in the coefficient vector") init <- if (use.costs) c(rep(init,nobs), rep(0,3*nobs*nstates+3*nobs*nstates*ncoef+nobs*nstates*ntr)) else c(rep(init,nobs),rep(0,2*nobs*nstates+2*nobs*nstates*ncoef)) res <- lsoda::ode(y = init, times = t, func = dp, parms=NULL, atol=atol, rtol=rtol, ...) P <- array(res[,1+1:(nstates*nobs)],c(nt,nstates,nobs)) Pu <- array(res[,1+nobs*nstates+1:(nobs*nstates*ncoef)],c(nt,nstates,ncoef,nobs)) L <- array(res[,1+nstates*nobs+nstates*nobs*ncoef+1:(nstates*nobs)],c(nt,nstates,nobs)) Lu <- array(res[,1+2*nstates*nobs+nstates*nobs*ncoef+1:(nobs*nstates*ncoef)],c(nt,nstates,ncoef,nobs)) Pdisc <- array(res[,1+2*nstates*nobs+2*nstates*nobs*ncoef+1:(nstates*nobs)],c(nt,nstates,1,nobs)) state.names <- if(is.null(rownames(trans))) 1:nrow(trans) else rownames(trans) dimnames(P) <- dimnames(L) <- list(time=t, state= state.names, obs=rownames(newdata)) dimnames(Pdisc) <- list(time=t, state= state.names, coef="Pdisc", obs=rownames(newdata)) coef.names <- unlist(lapply(x, function(xi) names(coef(xi)))) dimnames(Pu) <- dimnames(Lu) <- list(time=t, state=state.names, coef=coef.names, obs=rownames(newdata)) if (use.costs) { costs <- array(res[,1+3*nstates*nobs+2*nstates*nobs*ncoef+1:(nstates*nobs)],c(nt,nstates,nobs)) costsu <- array(res[,1+4*nstates*nobs+2*nstates*nobs*ncoef+1:(nobs*nstates*ncoef)],c(nt,nstates,ncoef,nobs)) costsu.trans <- array(res[,1+4*nstates*nobs+3*nstates*nobs*ncoef+1:(nobs*nstates*ntr)],c(nt,nstates,ntr,nobs)) dimnames(costs) <- dimnames(P) dimnames(costsu) <- dimnames(Pu) dimnames(costsu.trans) <- list(time=t, state=state.names, trans=rownames(trans), obs=rownames(newdata)) } structure(list(time = t, P=P, Pu=Pu, L=L, Lu=Lu, Pdisc=Pdisc, res=if (debug) res else NULL, use.costs=use.costs, costs=if (use.costs) costs else NULL, costsu=if (use.costs) costsu else NULL, costsu.trans=if (use.costs) costsu.trans else NULL, vcov=Sigma, newdata=newdata, trans=trans, utility.sd=utility.sd, state.costs.sd=state.costs.sd, transition.costs.sd=transition.costs.sd, coefficients=coef(x), call=call, x=x), class="markov_msm") } ## Pu, vcov ## Lu || Pdisc, bdiag(vcov,diag(utility.sd^2)) ## costsu || Pdisc || costsu.trans, bdiag(vcov, diag(state.costs.sd^2), diag(transition.costs.sd^2)) bdiag <- function(...,initial=0) { l <- list(...) for (elt in l) if (is.array(elt) && length(dim(elt))>2) stop("not defined for arrays with more than 2 dimensions") l <- lapply(l, as.matrix) nr <- sapply(l,nrow) nc <- sapply(l,ncol) cumnr <- c(0,cumsum(nr)) cumnc <- c(0,cumsum(nc)) out <- matrix(initial,sum(nr),sum(nc)) for (i in 1:length(l)) out[(cumnr[i]+1):cumnr[i+1], (cumnc[i]+1):cumnc[i+1]] <- l[[i]] ## if rownames/colnames are all missing, then NULL else convert the NULLs to blank strings replace <- function(l,f,len) { lf <- lapply(l,f) nulls <- sapply(lf, is.null) if (all(nulls)) NULL else unlist(lapply(1:length(l), function(i) if (nulls[i]) rep("",len(l[[i]])) else lf[[i]])) } rownames(out) <- replace(l,rownames, nrow) colnames(out) <- replace(l,colnames, ncol) out } ## all(rownames(bdiag(matrix(1:4,2),c(a=5,b=6),7L,t(8:9),initial=0L))==c("","","a","b","","")) ## is.integer(bdiag(matrix(1:4,2),a=5:6,7L,t(8:9),initial=0L)) ## bdiag(list(1:2),list(3:4+0),initial=list()) hazFun <- function(f, tmvar="t", ...) { nms <- formalArgs(f) if(all(c("newdata","t") %in% nms)) newf <- function(newdata) f(t=newdata[[tmvar]],newdata=newdata,...) else if("t" %in% nms) newf <- function(newdata) f(t=newdata[[tmvar]], ...) else if("newdata" %in% nms) newf <- function(newdata) f(newdata=newdata, ...) else newf <- function(newdata) f(...) out <- list(haz=newf) class(out) <- "hazFun" out } predict.hazFun <- function(object, newdata, type=c("haz","gradh"), ...) { type <- match.arg(type) val <- if (type=="haz") object$haz(newdata) else 0 if (length(val)==1 && length(val)0) newobject <- if (inherits(object, "hrModel")) object else structure(list(base=object), class="hrModel") if (!is.null(ci) && is.null(seloghr)) seloghr <- log(ci[2]/ci[1])/2/qnorm(0.975) attr(newobject, "loghr") <- log(hr) attr(newobject, "seloghr") <- if (is.null(seloghr)) 0 else seloghr newobject } predict.hrModel <- function(object, type=c("haz","gradh"), ...) { type <- match.arg(type) hr <- exp(attr(object,"loghr")) pred1 <- predict(object$base, type="haz", ...) if (type=="haz") hr*pred1 else cbind(predict(object$base, type="gradh", ...)*hr, pred1*hr) } ## This has different lengths/dimensions to the base model: ## wrap base intervention in hrModel(..., hr=1) coef.hrModel <- function(object, ...) c(coef(object$base), attr(object,"loghr")) vcov.hrModel <- function(object, ...) { out <- rbind(cbind(vcov(object$base),0),0) out[nrow(out),ncol(out)] <- attr(object, "seloghr")^2 out } ## aftModel requires dh/dt - performed using finite differences ## Slow? Cool for completeness - but unlikely to be used ## axiom: h := operator 'h ## axiom: hstar := h(t*exp(eta),beta)*exp(eta) ## axiom: D(hstar,beta) ## axiom: D(hstar,eta) ## h(t)=h(exp(u)) where t=exp(u) ## => dh/dt = dh/du * du/dt where du/dt=1/t ## and dh/du ~= (h(t*exp(eps)) - h(t/exp(eps)))/2/eps aftModel <- function(object, af=1, ci=NULL, selogaf=NULL) { stopifnot(is.null(ci) || (is.numeric(ci) && length(ci)==2)) stopifnot(is.numeric(af) && length(af)==1 && af>0) if (!is.null(ci) && is.null(selogaf)) selogaf <- log(ci[2]/ci[1])/2/qnorm(0.975) newobject <- if (inherits(object, "aftModel")) object else structure(list(base=object), class="aftModel") attr(newobject, "logaf") <- log(af) attr(newobject, "selogaf") <- if (is.null(selogaf)) 0 else selogaf newobject } predict.aftModel <- function(object, newdata, type=c("haz","gradh"), tmvar=NULL, eps=1e-5, ...) { type <- match.arg(type) af <- exp(attr(object,"logaf")) time <- newdata[[tmvar]] timeStar <- newdata[[tmvar]] <- af*time pred1 <- predict(object$base, type="haz", newdata=newdata, ...) if (type=="haz") af*pred1 else { newdata2 <- newdata newdata2[[tmvar]] <- timeStar*exp(eps) predu <- predict(object$base, type="haz", newdata=newdata2, ...) newdata2[[tmvar]] <- timeStar/exp(eps) predl <- predict(object$base, type="haz", newdata=newdata2, ...) dhdt <- (predu-predl)/2/eps/timeStar cbind(predict(object$base, type="gradh", newdata=newdata, ...)*af, timeStar*af*dhdt + af*pred1) } } ## This has different lengths/dimensions to the base model: ## wrap base intervention in aftModel(..., af=1) coef.aftModel <- function(object, ...) c(coef(object$base), attr(object,"logaf")) vcov.aftModel <- function(object, ...) { out <- rbind(cbind(vcov(object$base),0),0) out[nrow(out),ncol(out)] <- attr(object, "selogaf")^2 out } ## h'(t): ## gsm: S(t|x)=G(eta(t,x)) => H(t|x)=-log(S(t|x)) ## => h(t|x)= -G'(eta(t,x))/G(eta(t,x))*eta_{,1}(t,x) ## => h'(t|x) = mess ## export splineFun <- function(time, rate, method="natural", scale=1, ...) { fun <- stats::splinefun(time, log(rate), method=method, ...) hazFun(function(t) scale*exp(fun(t))) } ## export addModel <- function (...) { structure (as.list (...), class="addModel") } predict.addModel <- function (object, ...) { Reduce("+", lapply(object, predict, ...)) } coef.addModel <- function (object) do.call(c,lapply(object, coef)) vcov.addModel <- function (object) do.call(bdiag,lapply(object, vcov)) subset.markov_msm <- function(x, subset, ...) { e <- substitute(subset) r <- eval(e, x$newdata, parent.frame()) if (!is.logical(r)) stop("'subset' must be logical") r <- r & !is.na(r) # update x x$P <- x$P[,,r,drop=FALSE] x$Pu <- x$Pu[,,,r,drop=FALSE] x$L <- x$L[,,r,drop=FALSE] x$Lu <- x$Lu[,,,r,drop=FALSE] x$Pdisc <- x$Pdisc[,,,r,drop=FALSE] x$newdata <- x$newdata[r,,drop=FALSE] if (x$use.costs) { x$costs <- x$costs[,,r,drop=FALSE] x$costsu <- x$costsu[,,,r,drop=FALSE] } x$res <- NULL # not strictly needed x$call <- match.call() x } diff.markov_msm <- function(x, y, ...) { stopifnot(inherits(x,"markov_msm")) stopifnot(inherits(y,"markov_msm")) ## vcov, time, trans should all be the same stopifnot(all(x$vcov == y$vcov)) stopifnot(all(x$time == y$time)) stopifnot(all(x$trans == y$trans, na.rm=TRUE)) z <- x # copy of x z$P <- x$P-y$P z$Pu <- x$Pu-y$Pu z$L <- x$L-y$L z$Lu <- x$Lu-y$Lu z$Pdisc <- x$Pdisc-y$Pdisc z$call <- match.call() z$newdata[x$newdata != y$newdata] <- NA if (z$use.costs) { z$costs <- x$costs-y$costs z$costsu <- x$costsu-y$costsu } class(z) <- c("markov_msm_diff","markov_msm") # not strictly "markov_msm"... z } as.data.frame.markov_msm_diff <- function(x, row.names=NULL, optional=FALSE, P.conf.type="plain", L.conf.type="plain", C.conf.type="plain", P.range=c(-Inf, Inf), L.range=c(-Inf, Inf), C.range=c(-Inf,Inf), ...) as.data.frame.markov_msm(x, P.conf.type=P.conf.type, L.conf.type=L.conf.type, C.conf.type=C.conf.type, P.range=P.range, L.range=L.range, C.range=C.range, ...) plot.markov_msm_diff <- function(x, y, ...) stop("Plots for markov_msm_diff have not yet been implemented") plot.markov_msm <- function(x, y, stacked=TRUE, which=c("P","L"), xlab="Time", ylab=NULL, col=2:6, border=col, ggplot2=FALSE, lattice=FALSE, alpha=0.2, strata=NULL, ...) { stopifnot(inherits(x,"markov_msm")) which <- match.arg(which) ## ylab defaults if(is.null(ylab)) { ylab <- if(which=='P') "Probability" else "Length of stay" if(inherits(x,"markov_msm_diff")) ylab <- if(which=='P') "Difference in probabilities" else "Difference in lengths of stay" if(inherits(x,"markov_msm_ratio")) ylab <- if(which=='P') "Ratio of probabilities" else "Ratio of lengths of stay" } ## if (nrow(x$newdata)>1) { ## warning("More than one set of covariates; covariates have been standardised") ## x <- standardise(x) ## } if (ggplot2) ggplot.markov_msm(x, which=which, stacked=stacked, xlab=xlab, ylab=ylab, alpha=alpha, ...) else if (lattice) xyplot.markov_msm(x, which=which, stacked=stacked, xlab=xlab, ylab=ylab, col=col, border=border, strata=strata, ...) else { if (!missing(y)) warning("y argument is ignored") df <- as.data.frame(x) states <- unique(df$state) if (stacked) { if (which == "L") stop("Stacked plot is not sensible for length of stay") out <- graphics::plot(range(x$time),0:1, type="n", xlab=xlab, ylab=ylab, ...) lower <- 0 for (i in length(states):1) { # put the last state at the bottom df2 <- df[df$state==states[i],] if (length(lower)==1) lower <- rep(0,nrow(df2)) upper <- lower+df2[[which]] graphics::polygon(c(df2$time,rev(df2$time)), c(lower,rev(upper)), border=border[i], col=col[i]) lower <- upper } graphics::box() invisible(out) } else stop('Unstacked plot not implemented in base graphics; use ggplot2=TRUE or lattice=TRUE') } } ggplot.markov_msm <- function(data, mapping=NULL, which=c("P","L"), stacked = TRUE, alpha=0.2, xlab=NULL, ylab=NULL, flipped = FALSE, ..., environment=parent.frame()) { if (requireNamespace("ggplot2", quietly=TRUE)) { which <- match.arg(which) df <- as.data.frame(data, ci=!stacked) if (flipped) df$state <- factor(df$state,levels=rev(levels(df$state))) if (stacked) ggplot2::ggplot(df, if(is.null(mapping)) ggplot2::aes_string(x='time', y=which, fill='state') else mapping) + ggplot2::geom_area() + ggplot2::xlab(xlab) + ggplot2::ylab(ylab) else { lower <- paste0(which,'.lower') upper <- paste0(which,'.upper') ggplot2::ggplot(df, if (is.null(mapping)) ggplot2::aes_string(x='time', y=which, ymin=lower, ymax=upper) else mapping) + ggplot2::geom_line() + ggplot2::geom_ribbon(alpha=alpha) + ggplot2::facet_grid(stats::reformulate(".","state")) + ggplot2::xlab(xlab) + ggplot2::ylab(ylab) } } else stop("Suggested package 'ggplot2' is not available") } xyplot.markov_msm <- function(x, data, strata=NULL, which=c("P","L"), stacked = TRUE, col=2:6, border=col, ..., environment=parent.frame()) { if (requireNamespace("lattice", quietly=TRUE)) { which <- match.arg(which) ## if (!missing(data) && is.null(strata)) strata <- data # copy from data to strata df <- as.data.frame(x, ci=!stacked) if (!is.factor(df$state)) df$state <- as.factor(df$state) states <- levels(df$state) if (stacked) { rhs_string <- if (!is.null(strata)) paste('time',deparse(rhs(strata)),sep='|') else 'time' lattice::xyplot(stats::reformulate(rhs_string,which), data=df, panel = function(x, y, subscripts, group, ...) { df2 <- df[subscripts,] lattice::panel.xyplot(x,y, type="n") lower <- 0 for (i in length(states):1) { df3 <- df2[df2$state==states[i], , drop=FALSE] if (length(lower)==1) lower <- rep(0,nrow(df3)) upper <- lower+df3[[which]] lattice::panel.polygon(c(df3$time,rev(df3$time)), c(lower,rev(upper)), border=border[i], col=col[i]) lower <- upper } }, subscripts=TRUE, ...) } else { lower <- paste0(which,'.lower') upper <- paste0(which,'.upper') rhs_string <- if (!is.null(strata)) paste('time|state',deparse(rhs(strata)),sep='+') else 'time|state' lattice::xyplot(stats::reformulate(rhs_string,which), data=df, panel = function(x, y, subscripts, group, ...) { lattice::panel.xyplot(x,y, type="n") lattice::panel.polygon(c(x,rev(x)), c(df[[lower]][subscripts], rev(df[[upper]][subscripts])), border=NULL, col="grey") lattice::panel.lines(x,y) }, subscripts=TRUE, ...) } } else stop("Suggested package 'lattice' is not available") } ## g(beta) = log(losA) - log(losB) ## g'(beta) = losA'/losA - losB'/losB # which is not defined when los=0 ## NB: data are on a log scale! ratio_markov_msm <- function(x, y, ...) { stopifnot(inherits(x,"markov_msm")) stopifnot(inherits(y,"markov_msm")) ## vcov, time and trans should all be the same stopifnot(all(x$vcov == y$vcov)) stopifnot(all(x$time == y$time)) stopifnot(all(x$trans == y$trans, na.rm=TRUE)) z <- x # copy of x z$P <- log(x$P/y$P) z$L <- log(x$L/y$L) # logs of the ratios z$Pu <- apply(x$Pu, 3, function(slice) slice/x$P) - apply(y$Pu, 3, function(slice) slice/y$P) dim(z$Pu) <- dim(x$Pu) dimnames(z$Pu) <- dimnames(x$Pu) z$Lu <- apply(x$Lu, 3, function(slice) slice/x$L) - apply(y$Lu, 3, function(slice) slice/y$L) dim(z$Lu) <- dim(x$Lu) dimnames(z$Lu) <- dimnames(x$Lu) z$Pdisc <- log(x$Pdisc/y$Pdisc) z$call <- match.call() z$newdata[x$newdata != y$newdata] <- NA class(z) <- c("markov_msm_ratio","markov_msm") # not strictly "markov_msm"... z } as.data.frame.markov_msm_ratio <- function(x, row.names=NULL, optional=FALSE, ...) { ## data are on a log scale!! z <- as.data.frame.markov_msm_diff(x, ...) names <- c("P","L","P.lower","P.upper","L.lower","L.upper") if (!is.null(x$costs)) names <- c(names, c("C","C.lower","C.upper")) for (name in names) z[[name]] <- exp(z[[name]]) z } ## prev_markov_msm <- function(x, w, ...) { ## stopifnot(inherits(x,"markov_msm")) ## stopifnot(nrow(x$trans) == length(w)) ## stopifnot(all(w %in% 0:1)) ## x <- msm2 ## w <- c(1,1,0) ## pi <- piL <- P <- L <- array(0,dim(x$P)) ## sumP <- sumL <- array(0,dim(x$P)[-2]) ## for (i in 1:length(w)) { ## P[,i,] <- x$P[,i,]*w[i] ## L[,i,] <- x$L[,i,]*w[i] ## sumP <- sumP + P[,i,] ## sumL <- sumL + L[,i,] ## } ## for (i in 1:length(w)) { ## pi[,i,] <- P[,i,]/sumP ## piL[,i,] <- P[,i,]/sumL ## } ## dw <- diag(w) ## logit <- stats::poisson()$linkinv ## z <- list(P=logit(P), L=log(L)) # logit and log ## z$Pu <- apply(x$Pu, 3, function(slice) slice/x$P) - apply(y$Pu, 3, function(slice) slice/y$P) ## dim(z$Pu) <- dim(x$Pu) ## dimnames(z$Pu) <- dimnames(x$Pu) ## z$Lu <- apply(x$Lu, 3, function(slice) slice/x$L) - apply(y$Lu, 3, function(slice) slice/y$L) ## dim(z$Lu) <- dim(x$Lu) ## dimnames(z$Lu) <- dimnames(x$Lu) ## z <- c(list(time=x$time, ## vcov=x$vcov, ## trans=x$trans, ## res=NULL), ## z) ## z$call <- match.call() ## z$newdata <- x$newdata ## z$newdata[x$newdata != y$newdata] <- NA ## class(z) <- c("markov_msm_prev","markov_msm") # not strictly "markov_msm"... ## z ## } ## as.data.frame.markov_msm_prev <- function(x, ...) { ## ## data are on a log scale!! ## z <- as.data.frame.markov_msm_diff(x, ...) ## for (name in c("P","L","P.lower","P.upper","L.lower","L.upper")) ## z[[name]] <- exp(z[[name]]) ## z ## } abind <- function(index, ...) { # bind on nth slice for a bag of arrays x <- list(...) stopifnot(all(sapply(x,is.array))) dim1 <- dim(x[[1]]) ## check index stopifnot(index==floor(index) && index>=1 || index<=length(dim)) ## check all arrays have the same number of dimensions stopifnot(all(sapply(x[-1],function(xi) length(dim(xi))==length(dim1)))) ## case: arrays of dimension 1 if (length(dim1)==1) return(array(unlist(x))) ## check all arrays for the same dimensions (excluding the index dimension) for (i in ((1:length(dim1))[-index])) stopifnot(all(sapply(x[-1],function(xi) dim(xi)[i]==dim1[i]))) ## re-order to put the index dimension last ord <- c((1:length(dim1))[-index],index) x <- lapply(x, function(xi) aperm(xi,ord)) # REPLACEMENT y <- do.call("c",lapply(x,as.vector)) # magic... dims <- dim1[ord] dimnames. <- dimnames(x[[1]]) dims[length(dims)] <- sum(sapply(x,function(xi) dim(xi)[length(dims)])) if (!is.null(dimnames.[[length(dims)]])) dimnames.[[length(dims)]] <- unlist(lapply(x,function(xi) dimnames(xi)[length(dims)])) dim(y) <- dims dimnames(y) <- dimnames. aperm(y,order(ord)) } ## abind(1,array(1),array(2),array(3:4)) ## abind(1,array(1,c(1,1)),array(2,c(1,1)),array(3:4,c(2,1))) ## abind(2,array(1,c(1,1)),array(2,c(1,1)),array(3:4,c(1,2))) ## abind(1,array(1,c(1,1,1)),array(2,c(1,1,1)),array(3:4,c(2,1,1))) add_dim <- function(a,index,dimname="") { stopifnot(is.array(a)) dims <- dim(a) ndim <- length(dims) dimnames. <- dimnames(a) stopifnot(index==floor(index) && index>=1 && index<=ndim+1) newdim <- if (index==1) c(1,dims) else if (index==ndim+1) c(dims,1) else c(dims[1:(index-1)], 1, dims[index:ndim]) dimnames. <- if (index==1) c(dimname,dimnames.) else if (index==ndim+1) c(dimnames.,dimname) else c(dimnames.[1:(index-1)], dimname, dimnames.[index:ndim]) array(a,newdim,dimnames.) } ## add_dim(array(c(1,2,3,4),dimnames=list(11:14)),2,"blank") ## add_dim(array(1:4),2) ## add_dim(array(1:4,c(2,2)),1)[1,,] ## add_dim(array(1:4,c(2,2)),2)[,1,] ## add_dim(array(1:4,c(2,2)),3)[,,1] bindlast <- function(...) { # bind on last slice for a bag of arrays x <- list(...) stopifnot(all(sapply(x,is.array))) dim1 <- dim(x[[1]]) stopifnot(all(sapply(x[-1],function(xi) length(dim(xi))==length(dim1)))) for (i in 1:(length(dim1)-1)) stopifnot(all(sapply(x[-1],function(xi) dim(xi)[i]==dim1[i]))) y <- do.call("c",lapply(x,as.vector)) dims <- dim1 dimnames. <- dimnames(x[[1]]) dims[length(dims)] <- sum(sapply(x,function(xi) dim(xi)[length(dims)])) if (!is.null(dimnames.[[length(dims)]])) dimnames.[[length(dims)]] <- unlist(lapply(x,function(xi) dimnames(xi)[length(dims)])) dim(y) <- dims dimnames(y) <- dimnames. y } rbind.markov_msm <- function(..., deparse.level = 1) { x <- list(...) stopifnot(all(sapply(x,inherits,"markov_msm"))) ## class, vcov, time and trans should all be the same stopifnot(all(sapply(x[-1],function(xi) all(class(xi) == class(x[[1]]))))) stopifnot(all(sapply(x[-1],function(xi) all(xi$vcov==x[[1]]$vcov)))) stopifnot(all(sapply(x[-1],function(xi) all(xi$time==x[[1]]$time)))) stopifnot(all(sapply(x[-1],function(xi) all(xi$trans==x[[1]]$trans, na.rm=TRUE)))) bind <- function(name) do.call(bindlast, lapply(x,"[[",name)) z <- x[[1]] z$P <- bind("P") z$Pu <- bind("Pu") z$L <- bind("L") z$Lu <- bind("Lu") z$Pdisc <- bind("Pdisc") z$call <- match.call() z$newdata <- do.call(rbind,lapply(x,"[[", "newdata")) ## is this a good idea? It will be lost if done more than once... z$newdata$.index <- unlist(lapply(1:length(x), function(i) rep(i,nrow(x[[i]]$newdata)))) ## state.names <- rownames(z$trans) z } transform.markov_msm <- function(`_data`, ...) { `_data`$newdata <- transform(`_data`$newdata, ...) `_data` } reorder <- function(x,order) { l <- attr(x,"levels") factor(l[x],l[order]) } nrow.markov_msm <- function(x, ...) nrow(as.data.frame(x, ...)) vcov.markov_msm <- function(object, ...) object$vcov ## Collapse across states ## issue with variance calculations... collapse_markov_msm <- function(object, which=NULL, sep="; ") { ## example: which=c(1,2) => combine states 1 and 2 stopifnot(inherits(object, "markov_msm")) stopifnot(!is.null(which)) if(is.character(which)) which <- pmatch(which, rownames(object$trans)) stopifnot(all(which %in% 1:nrow(object$trans))) stopifnot(nrow(object$trans)>=2) call <- match.call() which <- sort(unique(which)) # in case of duplicates if(length(which)==1) return(object) # no change ## algorithm: n.newstates <- nrow(object$trans) - length(which) + 1 ## initalise newstates <- vector("list", n.newstates) j <- 0 base <- NULL for (i in 1:nrow(object$trans)) { if (i %in% which) { if (is.null(base)) { j <- j + 1 base <- j } newstates[[base]] <- c(newstates[[base]],i) } else { j <- j + 1 newstates[[j]] <- i } } index <- vector('numeric',nrow(object$trans)) for (j in 1:length(newstates)) for (k in newstates[[j]]) index[k] <- j state.names <- rownames(object$trans) if (is.null(state.names)) state.names <- 1:nrow(object$trans) new.state.names <- tapply(state.names, index, paste0, collapse=sep) trans <- object$trans for (i in rev(which[-1])) { trans <- trans[-i,,drop=FALSE] trans <- trans[,-i,drop=FALSE] } ## sum <- function(x) tapply(x, index, base::sum) sum3 <- function(x,index,DIM=2) { dims <- dim(x) dims[DIM] <- length(unique(index)) y <- array(0,dims) dimnames <- dimnames(x) dimnames[[DIM]] <- new.state.names for (i in 1:length(index)) { if (DIM==1) y[index[i],,] <- y[index[i],,] + x[i,,] else if (DIM==2) y[,index[i],] <- y[,index[i],] + x[,i,] } dimnames(y) <- dimnames y } sum4 <- function(x,index) { ## assumes DIM=2 dims <- dim(x) dims[2] <- length(unique(index)) dimnames <- dimnames(x) dimnames[[2]] <- new.state.names y <- array(0,dims) for (i in 1:length(index)) y[,index[i],,] <- y[,index[i],,] + x[,i,,] dimnames(y) <- dimnames y } P <- sum3(object$P,index) L <- sum3(object$L,index) Pu <- sum4(object$Pu,index) Lu <- sum4(object$Lu,index) Pdisc <- sum4(object$Pdisc,index) if ("C" %in% names(object)) { C <- sum3(object$C,index) Cu <- sum4(object$Cu,index) } index <- 1 for (i in 1:nrow(object$trans)) { if (any(i==trans,na.rm=TRUE)) { trans[which(i==trans)] <- index index <- index + 1 } } colnames(trans) <- rownames(trans) <- new.state.names z <- object z$P <- P z$L <- L z$Pu <- Pu z$Lu <- Lu z$Pdisc <- Pdisc z$trans <- trans ## costs?? z$call <- call z } stratifiedModel <- function (object,strata) { ## if(inherits (object, "stratifiedModel")) ## return(object) if(! inherits (object, "stratifiedModel")) class (object) <- c("stratifiedModel", class (object)) object$strata.name <- substitute (strata) stopifnot(is.name(object$strata.name)) object$strata.index <- NULL object } "[[.stratifiedModel" <- function (object, index) { object$strata.index <- index object } ## does the following only work for index 1..K? predict.stratifiedModel <- function (object, type, newdata, ...) { if (! is.null(object$strata.index)) newdata[[object$strata.name]] <- object$strata.index ## otherwise assume that the strata is specified in newdata NextMethod ("predict", object) } ## predict.test <- function(object, type, newdata) return(newdata$strata) ## m <- stratifiedModel("class<-"(list(),"test"), strata) ## predict(m[[2]],"",data.frame(x=1)) coef.stratifiedModel <- function(object, ...) NextMethod("coef", object) vcov.stratifiedModel <- function(object, ...) NextMethod("vcov", object) vsplinefun <- function(x,y,...) { stopifnot(is.matrix(y)) splinefuns <- lapply(1:ncol(y), function(j) stats::splinefun(x,y[,j],...)) function(x) sapply(splinefuns, function(obj) obj(x)) } makeSplineFun <- function(object,tm,newdata=data.frame(one=1),tmvar="", min.tm=1e-8, log=FALSE) { tm <- pmax(tm,min.tm) trans <- if (log) base::log else base::identity ## itrans <- if (log) base::exp else base::identity newdata <- as.data.frame(newdata) times <- data.frame(t=tm); if (tmvar != "") names(times) <- tmvar hazard <- lapply(1:nrow(newdata), function(i) splinefun(trans(tm), predict(object,type="hazard",newdata=merge(newdata[i,,drop=FALSE], times)))) gradh <- lapply(1:nrow(newdata), function(i) vsplinefun(trans(tm), predict(object,type="gradh",newdata=merge(newdata[i,,drop=FALSE], times)))) out <- list( object=object, hazard=function(t) sapply(hazard, function(obj) obj(trans(t))), gradh=function(t) t(sapply(gradh, function(obj) obj(trans(t))))) class(out) <- "SplineFun" out } predict.SplineFun <- function(object, newdata, type=c("hazard","gradh"), tmvar="", ...) { type <- match.arg(type) time <- newdata[[tmvar]] stopifnot(all(time[1] == time[-1])) if (type=="hazard") object$hazard(time[1]) else object$gradh(time[1]) } vcov.SplineFun <- function(object) vcov(object$object) coef.SplineFun <- function(object) coef(object$object) ## Non-parametric baseline: SDE approach due to Ryalen and colleagues markov_sde <- function(models, trans, newdata, init=NULL, nLebesgue=1e4+1, los=FALSE, nOut=300, weights=1) { transfun <- function(tmat) { indices <- sort(as.vector(tmat)); indices <- setdiff(indices,NA) nStates <- nrow(tmat) out <- do.call(rbind, lapply(indices, function(i) { index2 <- which(tmat == i) from <- (index2-1) %% nStates +1 to <- (index2-1) %/% nStates + 1 data.frame(from=from,to=to) })) matrix(as.integer(as.matrix(out)),nrow(out))-1L } ## TODO check parameters nStates <- nrow(trans) nTrans <- sum(!is.na(trans)) if (is.null(init)) { init <- c(1,rep(0,nStates-1)) } stopifnot(length(init)==nStates) ## init <- rep(init,nrow(newdata)) n <- sum(sapply(models,attr,"orig.max.clust")) cumHazList <- lapply(models, function(object) -t(log(predict(object, newdata=newdata, se=FALSE)$S0))) timesList <- lapply(models, function(model) model$cum[,1]) eventTimes <- times <- sort(unique(unlist(timesList))) hazList <- lapply(1:nrow(newdata), function(i) { hazMatrix <- matrix(0,nrow=nTrans,ncol=length(times)) for (j in 1:nTrans) { hazMatrix[j,match(timesList[[j]],times)] <- diff(c(0,cumHazList[[j]][,i])) } hazMatrix }) hazMatrix <- do.call(rbind,hazList) if (length(weights)==1 && weights != 0) weights <- rep(weights,nrow(newdata))/(weights*nrow(newdata)) vcov <- matrix(1,1,1) if (!los) { out <- .Call("plugin_P_by", n, nrow(newdata), hazMatrix, init, transfun(trans), weights, vcov, PACKAGE="rstpm2") out$P <- out$X out$P.se <- sqrt(out$variance) } else { out <- .Call("plugin_P_L_by", n, nrow(newdata), hazMatrix, init, transfun(trans), times, weights, nOut, vcov, nLebesgue, PACKAGE="rstpm2") PIndex <- 1:(nrow(out$X)/2) tr <- function(x) array(as.vector(x), dim=c(nStates,nrow(newdata),ncol(x))) out$P <- tr(out$X[PIndex,]) out$L <- tr(out$X[-PIndex,]) out$P.se <- sqrt(tr(out$variance[PIndex,])) out$L.se <- sqrt(tr(out$variance[-PIndex,])) } out$n <- n out$times <- if (los) out$time else times out$newdata <- newdata out$trans <- trans out$los <- los out$init <- init out$weights <- weights class(out) <- "markov_sde" if (!all(weights==0)) { stand <- out # copy! This may be a bad idea... stand$newdata <- newdata if (!los) { stand$P <- stand$Y stand$P.se <- sqrt(stand$varY) } else { PIndex <- 1:(nrow(out$Y)/2) stand$P <- stand$Y[PIndex,] stand$L <- stand$Y[-PIndex,] stand$P.se <- sqrt(stand$varY[PIndex,]) stand$L.se <- sqrt(stand$varY[-PIndex,]) } ## tidy up stand$X <- stand$Y stand$variance <- stand$varY out$X <- out$variance <- out$Y <- out$varY <- stand$Y <- stand$varY <- NULL stand$newdata <- stand$newdata[1,,drop=FALSE] class(stand) <- "markov_sde" out$stand <- stand } out } standardise.markov_sde <- function(x, ...) { x$stand } plot.markov_sde <- function(x, y, stacked=TRUE, which=c("P","L"), index=NULL, xlab="Time", ylab=NULL, col=2:6, border=col, ggplot2=FALSE, lattice=FALSE, alpha=0.2, strata=NULL, ...) { stopifnot(inherits(x,"markov_sde")) which <- match.arg(which) if (!missing(y)) warning("y argument is ignored") ## ylab defaults if (is.null(ylab)) ylab <- if(which=='P') "Probability" else "Length of stay" if (ggplot2) ggplot.markov_msm(x, which=which, stacked=stacked, xlab=xlab, ylab=ylab, alpha=alpha, ...) else if (lattice) xyplot.markov_msm(x, which=which, stacked=stacked, xlab=xlab, ylab=ylab, col=col, border=border, strata=strata, ...) else { ## Is the next statement correct?? if (is.null(index) && nrow(x$newdata)>1) { warning("More than one set of covariates; defaults to weighted estimator") x <- x$stand # Warning: replacement index <- 1 } if (is.null(index)) index <- 1 df <- merge(x$newdata[index,,drop=FALSE], as.data.frame(x)) states <- unique(df$state) if (stacked) { out <- graphics::plot(range(x$times, na.rm=TRUE),0:1, type="n", xlab=xlab, ylab=ylab, ...) lower <- 0 for (i in length(states):1) { # put the last state at the bottom df2 <- df[df$state==states[i],] if (length(lower)==1) lower <- rep(0,nrow(df2)) upper <- lower+df2[[which]] graphics::polygon(c(df2$time,rev(df2$time)), c(lower,rev(upper)), border=border[i], col=col[i]) lower <- upper } graphics::box() invisible(out) } else stop('Unstacked plot not implemented in base graphics; use ggplot2=TRUE or lattice=TRUE') } } as.data.frame.markov_sde <- function(x, row.names=NULL, optional=NULL, ci=TRUE, P.conf.type="logit", L.conf.type="log", P.range=c(0,1), L.range=c(0,Inf), ...) { if (any(x$weights<0)) { P.conf.type <- L.conf.type <- "plain" P.range <- L.range <- c(-Inf,Inf) } .id. <- 1:nrow(x$newdata) nStates <- nrow(x$trans) state.names <- rownames(x$trans) stateNames <- if (!is.null(rownames(x$trans))) rownames(x$trans) else 1:nrow(x$trans) out <- expand.grid(state=stateNames, .id.=.id., time=x$times) out <- cbind(x$newdata[out$.id.,],out) names(out)[1:ncol(x$newdata)] <- colnames(x$newdata) out$P <- as.vector(x$P) out$P.se <- as.vector(x$P.se) if (ci) { tmp <- surv.confint(out$P,out$P.se, conf.type=P.conf.type, min.value=P.range[1], max.value=P.range[2]) out$P.lower <- tmp$lower out$P.upper <- tmp$upper } if (x$los) { out$L <- as.vector(x$L) out$L.se <- as.vector(x$L.se) if (ci) { tmp <- surv.confint(out$L,out$L.se, conf.type=L.conf.type, min.value=L.range[1], max.value=L.range[2]) out$L.lower <- tmp$lower out$L.upper <- tmp$upper } } out <- out[order(out$.id.,out$state,out$time),] out$.id. <- NULL if(!is.null(row.names)) rownames(out) <- row.names out } ## Parametric bootstrap pboot = function(object, m, parallel=FALSE, mc.cores=parallel::detectCores(), ...) { ## do this once newx = object$x coefs <- lapply(object$x, function(xi) coef(xi)) # note this trick! vcovs <- lapply(object$x, function(xi) vcov(xi)) # note this trick! ## vcov = lapply(object$x, vcov) # fails:( ## do the following m times parallel::mclapply(1:m , function(i) { ## update the coefs for (j in 1:length(newx)) coef(newx[[j]]) = mvtnorm::rmvnorm(1,coefs[[j]],vcovs[[j]]) ## update the object update(object,x=newx) }, mc.cores=mc.cores) } rstpm2/R/aft.R0000644000176200001440000020341415040104667012606 0ustar liggesusersnsxD <- function (x, df = NULL, knots = NULL, intercept = FALSE, Boundary.knots = range(x), derivs = if (cure) c(2, 1) else c(2, 2), log = FALSE, centre = FALSE, cure = FALSE, stata.stpm2.compatible = FALSE) { nx <- names(x) x <- as.vector(x) nax <- is.na(x) if (nas <- any(nax)) x <- x[!nax] if (!missing(Boundary.knots)) { Boundary.knots <- sort(Boundary.knots) outside <- (ol <- x < Boundary.knots[1L]) | (or <- x > Boundary.knots[2L]) } else outside <- FALSE if (!missing(df) && missing(knots)) { nIknots <- df - 1 - intercept + 4 - sum(derivs) if (nIknots < 0) { nIknots <- 0 warning("'df' was too small; have used ", 1 + intercept) } knots <- if (nIknots > 0) { knots <- if (!cure) seq.int(0, 1, length.out = nIknots + 2L)[-c(1L, nIknots + 2L)] else c(seq.int(0, 1, length.out = nIknots + 1L)[-c(1L, nIknots + 1L)], 0.95) if (!stata.stpm2.compatible) stats::quantile(x[!outside], knots) else stats::quantile(x[!outside], round(knots, 2), type = 2) } } else nIknots <- length(knots) Aknots <- sort(c(rep(Boundary.knots, 4L), knots)) if (any(outside)) { basis <- array(0, c(length(x), nIknots + 4L)) if (any(ol)) { k.pivot <- Boundary.knots[1L] tt <- spline.des(Aknots, rep(k.pivot, sum(ol)), 4, 1)$design basis[ol, ] <- tt } if (any(or)) { k.pivot <- Boundary.knots[2L] tt <- spline.des(Aknots, rep(k.pivot, sum(or)), 4, 1)$design basis[or, ] <- tt } if (any(inside <- !outside)) basis[inside, ] <- spline.des(Aknots, x[inside], 4, 1)$design } else basis <- spline.des(Aknots, x, 4, 1)$design const <- splineDesign(Aknots, rep(Boundary.knots, 3 - derivs), 4, c(derivs[1]:2, derivs[2]:2)) if (!intercept) { const <- const[, -1, drop = FALSE] basis <- basis[, -1, drop = FALSE] } qr.const <- qr(t(const)) q.const <- qr.Q(qr.const, complete=TRUE)[, -(1L:2L), drop = FALSE] # NEW basis <- as.matrix((t(qr.qty(qr.const, t(basis))))[, -(1L:nrow(const)), drop = FALSE]) n.col <- ncol(basis) if (nas) { nmat <- matrix(NA, length(nax), n.col) nmat[!nax, ] <- basis basis <- nmat } dimnames(basis) <- list(nx, 1L:n.col) if (centre) { centreBasis <- nsx(centre, knots = if (is.null(knots)) numeric(0) else knots, Boundary.knots = Boundary.knots, intercept = intercept, derivs = derivs, centre = FALSE, log = log) oldAttributes <- attributes(basis) basis <- t(apply(basis, 1, function(x) x - centreBasis)) attributes(basis) <- oldAttributes } a <- list(degree = 3, knots = if (is.null(knots)) numeric(0) else knots, Boundary.knots = Boundary.knots, intercept = intercept, derivs = derivs, centre = centre, log = log, q.const = q.const) attributes(basis) <- c(attributes(basis), a) class(basis) <- c("nsxD", "basis", "matrix") basis } makepredictcall.nsxD <- function (var, call) { if (as.character(call)[1L] != "nsxD") return(call) at <- attributes(var)[c("knots", "Boundary.knots", "intercept", "derivs", "centre", "log")] xxx <- call[1L:2] xxx[names(at)] <- at xxx } predict.nsxD <- function (object, newx, ...) { if (missing(newx)) return(object) a <- c(list(x = newx), attributes(object)[c("knots", "Boundary.knots", "intercept", "derivs", "centre", "log")]) do.call("nsxD", a) } nsxDD <- function (x, df = NULL, knots = NULL, intercept = FALSE, Boundary.knots = range(x), derivs = if (cure) c(2, 1) else c(2, 2), log = FALSE, centre = FALSE, cure = FALSE, stata.stpm2.compatible = FALSE) { nx <- names(x) x <- as.vector(x) nax <- is.na(x) if (nas <- any(nax)) x <- x[!nax] if (!missing(Boundary.knots)) { Boundary.knots <- sort(Boundary.knots) outside <- (ol <- x < Boundary.knots[1L]) | (or <- x > Boundary.knots[2L]) } else outside <- FALSE if (!missing(df) && missing(knots)) { nIknots <- df - 1 - intercept + 4 - sum(derivs) if (nIknots < 0) { nIknots <- 0 warning("'df' was too small; have used ", 1 + intercept) } knots <- if (nIknots > 0) { knots <- if (!cure) seq.int(0, 1, length.out = nIknots + 2L)[-c(1L, nIknots + 2L)] else c(seq.int(0, 1, length.out = nIknots + 1L)[-c(1L, nIknots + 1L)], 0.95) if (!stata.stpm2.compatible) stats::quantile(x[!outside], knots) else stats::quantile(x[!outside], round(knots, 2), type = 2) } } else nIknots <- length(knots) Aknots <- sort(c(rep(Boundary.knots, 4L), knots)) if (any(outside)) { basis <- array(0, c(length(x), nIknots + 4L)) if (any(ol)) { basis[ol, ] <- 0 } if (any(or)) { basis[or, ] <- 0 } if (any(inside <- !outside)) basis[inside, ] <- spline.des(Aknots, x[inside], 4, 2)$design } else basis <- spline.des(Aknots, x, 4, 2)$design const <- splineDesign(Aknots, rep(Boundary.knots, 3 - derivs), 4, c(derivs[1]:2, derivs[2]:2)) if (!intercept) { const <- const[, -1, drop = FALSE] basis <- basis[, -1, drop = FALSE] } qr.const <- qr(t(const)) q.const <- qr.Q(qr.const, complete=TRUE)[, -(1L:2L), drop = FALSE] # NEW basis <- as.matrix((t(qr.qty(qr.const, t(basis))))[, -(1L:nrow(const)), drop = FALSE]) n.col <- ncol(basis) if (nas) { nmat <- matrix(NA, length(nax), n.col) nmat[!nax, ] <- basis basis <- nmat } dimnames(basis) <- list(nx, 1L:n.col) if (centre) { centreBasis <- nsx(centre, knots = if (is.null(knots)) numeric(0) else knots, Boundary.knots = Boundary.knots, intercept = intercept, derivs = derivs, centre = FALSE, log = log) oldAttributes <- attributes(basis) basis <- t(apply(basis, 1, function(x) x - centreBasis)) attributes(basis) <- oldAttributes } a <- list(degree = 3, knots = if (is.null(knots)) numeric(0) else knots, Boundary.knots = Boundary.knots, intercept = intercept, derivs = derivs, centre = centre, log = log, q.const = q.const) attributes(basis) <- c(attributes(basis), a) class(basis) <- c("nsxDD", "basis", "matrix") basis } makepredictcall.nsxDD <- function (var, call) { if (as.character(call)[1L] != "nsxDD") return(call) at <- attributes(var)[c("knots", "Boundary.knots", "intercept", "derivs", "centre", "log")] xxx <- call[1L:2] xxx[names(at)] <- at xxx } predict.nsxDD <- function (object, newx, ...) { if (missing(newx)) return(object) a <- c(list(x = newx), attributes(object)[c("knots", "Boundary.knots", "intercept", "derivs", "centre", "log")]) do.call("nsxDD", a) } ## test nsxD and nsxDD if (FALSE) { zeros <- function(mat,rows=1:nrow(mat),cols=1:ncol(mat)) "[<-"(mat,rows,cols,0) tm <- as.numeric(3:5) tm2 <- as.numeric(0:11) y <- rnorm(length(tm)) lm1 <- lm(y~nsx(tm,df=4)) lmD1 <- lm(y~nsxD(tm,df=4)-1) lmDD1 <- lm(y~nsxDD(tm,df=4)-1) eps <- 1e-5 (lpmatrix.lm(lm1,newdata=data.frame(tm=tm2+eps)) - lpmatrix.lm(lm1,newdata=data.frame(tm=tm2-eps)))/(2*eps) - cbind(0,lpmatrix.lm(lmD1,newdata=data.frame(tm=tm2))) # ok (lpmatrix.lm(lmD1,newdata=data.frame(tm=tm2+eps)) - lpmatrix.lm(lmD1,newdata=data.frame(tm=tm2-eps)))/(2*eps) - lpmatrix.lm(lmDD1,newdata=data.frame(tm=tm2)) # ok } S0hat <- function(obj) { ## predicted survival for individuals (adjusted for covariates) newobj = survfit(obj,se.fit=FALSE) surv = newobj$surv surv[match(obj$y[,ncol(obj$y)-1],newobj$time)] } ## general link functions setClass("aft", representation(args="list"), contains="mle2") aft <- function(formula, data, smooth.formula = NULL, df = 3, tvc = NULL, cure.formula=~1, control = list(), init = NULL, weights = NULL, tvc.intercept=TRUE, tvc.integrated= FALSE, timeVar = "", time0Var = "", cure = FALSE, mixture = FALSE, contrasts = NULL, subset = NULL, ...) { dots = list(...) control.defaults = list(parscale = 1, maxit = 1000, constrOptim = FALSE, use.gr = TRUE, reltol = 1.0e-8, trace = 0, nNodes = 20, add.penalties = TRUE) control = modifyList(control.defaults, control) if (any(ioverlap <- names(dots) %in% names(control.defaults))) { overlap = names(dots)[ioverlap] for (name in overlap) { cat(sprintf("Deprecated argument: %s; use control argument\n", name)) control[[name]] = dots[[name]] } } ## Special case if (is.null(init) && mixture && df>2) { Call = match.call() Call$df = 2 fitWeibullMixture = eval(Call,parent.frame()) } else { fitWeibullMixture = NULL } ## parse the function call Call <- match.call() mf <- match.call(expand.dots = FALSE) m <- match(c("formula", "data", "subset", "contrasts", "weights"), names(mf), 0L) mf <- mf[c(1L, m)] ## ## parse the event expression eventInstance <- eval(lhs(formula),envir=data) stopifnot(length(lhs(formula))>=2) eventExpr <- lhs(formula)[[length(lhs(formula))]] delayed <- length(lhs(formula))>=4 # indicator for multiple times (cf. strictly delayed) surv.type <- attr(eventInstance,"type") if (surv.type %in% c("interval","interval2","left","mstate")) stop("aft not implemented for Surv type ",surv.type,".") counting <- attr(eventInstance,"type") == "counting" ## interval <- attr(eventInstance,"type") == "interval" timeExpr <- lhs(formula)[[if (delayed) 3 else 2]] # expression if (timeVar == "") timeVar <- all.vars(timeExpr) ## set up the formulae full.formula <- formula if (!is.null(smooth.formula)) rhs(full.formula) <- rhs(formula) %call+% rhs(smooth.formula) ## NB: we want to keep the intercept and drop later rhs(full.formula) <- rhs(full.formula) %call+% quote(1) if (!is.null(tvc)) { tvc.formulas <- lapply(names(tvc), function(name) call(":", call("as.numeric",as.name(name)), as.call(c(quote(ns), if (tvc.integrated) timeExpr else call("log",timeExpr), vector2call(list(intercept=tvc.intercept,df=tvc[[name]])))))) if (length(tvc.formulas)>1) tvc.formulas <- list(Reduce(`%call+%`, tvc.formulas)) tvc.formula <- as.formula(call("~",tvc.formulas[[1]])) rhs(full.formula) <- rhs(full.formula) %call+% rhs(tvc.formula) } ## ## set up the data ## ensure that data is a data frame ## data <- get_all_vars(full.formula, data) # but this loses the other design information ## restrict to non-missing data (assumes na.action=na.omit) ## missingness ## browser() time = eval(timeExpr,data) if (any(is.na(time))) warning("Some event times are NA") if (any(ifelse(is.na(time),FALSE,time<=0))) warning("Some event times <= 0") ## set na.action=na.pass (and then reset) na.action.old <- options()[["na.action"]] options(na.action = "na.pass") .include <- apply(model.matrix(formula, data), 1, function(row) !any(is.na(row))) & !is.na(eval(eventExpr,data)) & ifelse(is.na(time), FALSE, time>0) if (!is.null(substitute(weights))) .include <- .include & !is.na(eval(substitute(weights),data,parent.frame())) rm(time) options(na.action = na.action.old) time0Expr <- NULL # initialise if (delayed) { time0Expr <- lhs(formula)[[2]] if (time0Var == "") time0Var <- all.vars(time0Expr) time0 <- eval(time0Expr, data, parent.frame()) if (any(is.na(time0))) warning("Some entry times are NA") if (any(ifelse(is.na(time0),FALSE,time0<0))) warning("Some entry times < 0") .include <- .include & ifelse(is.na(time0), FALSE, time0>=0) rm(time0) ## } else { ## time0 <- NULL } data <- data[.include, , drop=FALSE] ## ## Specials: bhazard = rep(0,nrow(data)) specials.names <- c("bhazard") specials <- attr(terms.formula(full.formula, specials.names), "specials") spcall <- mf spcall[[1]] <- quote(stats::model.frame) spcall$formula <- terms(formula, specials.names, data = data) mf2 <- eval(spcall, parent.frame()) lm.formula = full.formula if (any(!sapply(specials,is.null))) { bhazard.index <- specials$bhazard if (length(bhazard.index)>0) { bhazard <- mf2[, bhazard.index] bhazard.index2 <- attr(terms.formula(full.formula, "bhazard"), "specials")$bhazard termobj = terms(mf2) dropped.terms = if(length(attr(termobj,"term.labels"))==1) reformulate("1", response=termobj[[2L]], intercept=TRUE, env=environment(termobj)) else stats::drop.terms(terms(mf2), bhazard.index - 1, keep.response=TRUE) formula <- formula(dropped.terms) lm.formula <- formula(stats::drop.terms(terms(full.formula), bhazard.index2 - 1)) } else { bhazard.index2 = NULL } ## rm(mf2,spcall) } ## get variables time <- eval(timeExpr, data, parent.frame()) time0 <- if (delayed) eval(time0Expr, data, parent.frame()) else NULL event <- eval(eventExpr,data) ## if all the events are the same, we assume that they are all events, else events are those greater than min(event) event <- if (length(unique(event))==1) rep(TRUE, length(event)) else event <- event > min(event) ## setup for initial values ## Cox regression coxph.call <- mf coxph.call[[1L]] <- as.name("coxph") coxph.call$formula = formula coxph.call$model <- TRUE coxph.call$data <- quote(coxph.data) coxph.data = data coxph.obj <- eval(coxph.call, coxph.data) rm(coxph.data) y <- model.extract(model.frame(coxph.obj),"response") data$logHhat <- pmax(-18,log(-log(S0hat(coxph.obj)))) ## now for the cure fraction glm.cure.call = coxph.call glm.cure.call[[1]] = as.name("glm") glm.cure.call$family = as.name("binomial") glm.data = data glm.cure.call$data = as.name("glm.data") glm.cure.call$model = NULL glm.data["*event*"] = event lhs(glm.cure.call$formula) = as.name("*event*") rhs(glm.cure.call$formula) = rhs(cure.formula) ## glm(y ~ X, family=binomial) glm.cure.obj <- eval(glm.cure.call, glm.data) Xc = model.matrix(glm.cure.obj, data) rm(glm.data) ## ## pred1 <- predict(survreg1) data$logtstar <- log(time) ## data$logtstar <- log(time/pred1) ## initial values and object for lpmatrix predictions lm.call <- mf lm.call[[1L]] <- as.name("lm") ## lm.formula <- full.formula # ?? lhs(lm.formula) <- quote(logtstar) # new response lm.call$formula <- lm.formula dataEvents <- data[event,] lm.call$data <- quote(dataEvents) # events only lm.obj <- eval(lm.call) coef1b <- coef(lm.obj) ## if (names(coef1b)[1]=="(Intercept)") coef1b <- coef1b[-1] # ??? ## if (is.null(init)) { ## init <- coef(lm.obj) ## } lm0.obj <- lm(logHhat~nsx(logtstar,df,intercept=TRUE)-1,dataEvents) ## lm0D.obj <- lm(logHhat~nsxD(logtstar,df,intercept=TRUE,cure=cure)-1,dataEvents) coef0 <- coef(lm0.obj) # log-log baseline ## design information for baseline survival design <- nsx(dataEvents$logtstar, df=df, intercept=TRUE, cure=cure) designD <- nsxD(dataEvents$logtstar, df=df, intercept=TRUE, cure=cure) designDD <- nsxDD(dataEvents$logtstar, df=df, intercept=TRUE, cure=cure) ## ## set up mf and wt mt <- terms(lm.obj) mf <- model.frame(lm.obj) ## wt <- model.weights(lm.obj$model) wt <- if (is.null(substitute(weights))) rep(1,nrow(data)) else eval(substitute(weights),data,parent.frame()) ## ## XD matrix loglpfunc <- function(x,fit,data,var) { data[[var]] <- exp(x) lpmatrix.lm(fit,data) } ## X <- lpmatrix.lm(lm.obj,data) if (is.integer(X.index <- which.dim(X))) { warning("Design matrix for the acceleration factor is not full rank") if (!(1 %in% X.index)) stop("Not full rank and the intercept is not included - I'm confused:(") X.index = setdiff(X.index,1) } else X.index = -1 X <- X[, X.index, drop=FALSE] XD0 <- X0 <- XD <- matrix(0,1,ncol(X)) X_list <- X_list0 <- list() gauss = gauss.quad(control$nNodes) if (delayed && all(time0==0)) delayed <- FALSE # CAREFUL HERE: delayed redefined if (tvc.integrated) { X_list = lapply(1:control$nNodes, function(i) lpmatrix.lm(lm.obj, local({ data[[timeVar]] = (gauss$nodes[i]+1)/2*data[[timeVar]]; data}))[,X.index, drop = FALSE]) if (delayed) { X_list0 = lapply(1:control$nNodes, function(i) lpmatrix.lm(lm.obj, local({ data[[timeVar]] = (gauss$nodes[i]+1)/2*data[[time0Var]]; data}))[,X.index, drop = FALSE]) } } else { # tvc using cumulative formulation XD <- grad1(loglpfunc,log(data[[timeVar]]),lm.obj,data,timeVar,log.transform=FALSE) XD <- matrix(XD,nrow=nrow(X))[,X.index, drop = FALSE] if (delayed) { ind0 <- time0>0 data0 <- data[ind0,,drop=FALSE] # data for delayed entry times data0[[timeVar]] <- data0[[time0Var]] X0 <- lpmatrix.lm(lm.obj, data0) X0 <- matrix(X0,nrow=nrow(data0))[,X.index, drop = FALSE] XD0 <- grad1(loglpfunc,log(data0[[timeVar]]),lm.obj,data0,timeVar, log.transform=FALSE) XD0 <- matrix(XD0,nrow=nrow(data0))[,X.index, drop = FALSE] rm(data0) } } ## Weibull regression coef1 = NULL if (ncol(X) > 0) { if (delayed) { if (requireNamespace("eha", quietly = TRUE)) { ## browser() survreg1 <- eha::aftreg(formula, data) coef1 <- -coef(survreg1) # reversed parameterisation coef1 <- c(0,coef1[1:(length(coef1)-2)])[X.index] } else coef1 <- rep(0,ncol(X)) } else { survreg1 <- survival::coxph(formula, data) if (!is.null(coef(survreg1))) coef1 <- -coef(survreg1) # -beta * X if (any(is.na(coef1))) coef1 = coef1[!is.na(coef1)] ## coef1 <- coef1[-1] # assumes intercept included in the formula } if (ncol(X)>length(coef1)) { coef1 <- c(coef1,rep(0,ncol(X) - length(coef1))) names(coef1) <- names(coef1b)[X.index] } } coef2 = coef(glm.cure.obj) names(coef2) = paste0("cure.", names(coef2)) if (is.null(init)) init <- if (mixture) c(coef1, -coef2, coef0) else c(coef1, coef0) # -coef2 because the glm models for uncured! ## browser() if (any(is.na(init) | is.nan(init))) stop("Some missing initial values - check that the design matrix is full rank.") if (!is.null(control) && "parscale" %in% names(control)) { if (length(control$parscale)==1) control$parscale <- rep(control$parscale,length(init)) if (is.null(names(control$parscale))) names(control$parscale) <- names(init) } parscale <- rep(if (is.null(control$parscale)) 1 else control$parscale,length=length(init)) names(parscale) <- names(init) args <- list(init=init,X=X,XD=XD, X_list=X_list, X_list0=if (delayed) X_list0 else list(matrix(0,0,0)), X.index=X.index, wt=wt,event=ifelse(event,1,0),time=time,y=y, time0 = if (delayed) time0 else 0*time, timeVar=timeVar,timeExpr=timeExpr,terms=mt, delayed=delayed, X0=X0, XD0=XD0, parscale=parscale, reltol=control$reltol, Xc=if (mixture) Xc else matrix(0,0,0), maxit=control$maxit, trace = as.integer(control$trace), boundaryKnots=attr(design,"Boundary.knots"), q.const=t(attr(design,"q.const")), interiorKnots=attr(design,"knots"), design=design, designD=designD, designDD=designDD, cure=as.integer(cure), mixture = as.integer(mixture), tvc.integrated=tvc.integrated, data=data, lm.obj = lm.obj, glm.cure.obj = glm.cure.obj, init_copy = init, return_type="optim", gweights=gauss$weights, gnodes=gauss$nodes, bhazard=bhazard, add.penalties = control$add.penalties, df=df, ci=rep(0, df+1), constrOptim = control$constrOptim) ## browser() getui = function(args) { q.const = t(args$q.const) # (df+2) x df n.coef = length(args$init) nr = nrow(q.const) df = ncol(q.const) (cbind(0,diag(nr-1))-cbind(diag(nr-1),0)) %*% cbind(matrix(0,nr,n.coef-df), q.const) # (df+1) x n.coef } args$ui = getui(args) negll <- function(beta, ...) { stopifnot(is.numeric(beta), length(beta) == length(args$init)) localargs <- args localargs$return_type <- "objective" localargs$init <- beta if (length(dots <- list(...)) > 0) localargs <- modifyList(localargs, dots) return(.Call("aft_model_output", localargs, PACKAGE="rstpm2")) } gradient <- function(beta, ...) { stopifnot(is.numeric(beta), length(beta) == length(args$init)) localargs <- args localargs$return_type <- "gradient" localargs$init <- beta if (length(dots <- list(...)) > 0) localargs <- modifyList(localargs, dots) return(as.vector(.Call("aft_model_output", localargs, PACKAGE="rstpm2"))) } parnames(negll) <- names(init) args$negll = negll args$gradient = gradient if (!is.null(fitWeibullMixture)) { this.index = (length(coef1)+1):(length(coef1)+length(coef2)) fixed = as.list(coef(fitWeibullMixture)[this.index]) this.control = control for (name in c("constrOptim", "use.gr", "nNodes", "add.penalties")) this.control[[name]] = NULL this.control$parscale = this.control$parscale[-this.index] fixedfit <- if (control$use.gr) { bbmle::mle2(negll, init, vecpar=TRUE, control=this.control, fixed=fixed, gr=gradient, ...) } else { bbmle::mle2(negll, init, vecpar=TRUE, control=this.control, fixed=fixed, ...) } init = coef(fixedfit) rm(fixedfit) } ## MLE if (delayed && control$use.gr) { # initial search using nmmin (conservative -- is this needed?) args$return_type <- "nmmin" args$maxit <- 50 fit <- .Call("aft_model_output", args, PACKAGE="rstpm2") args$maxit <- control$maxit } optim_step <- function(use.gr) { args$return_type <<- if (use.gr) "vmmin" else "nmmin" fit <- .Call("aft_model_output", args, PACKAGE="rstpm2") coef <- as.vector(fit$coef) hessian <- fit$hessian names(coef) <- rownames(hessian) <- colnames(hessian) <- names(init) args$init <<- coef ## we could use mle2() to calculate vcov by setting eval.only=FALSE mle2 <- if (use.gr) bbmle::mle2(negll, coef, vecpar=TRUE, control=control, gr=gradient, ..., eval.only=TRUE) else bbmle::mle2(negll, coef, vecpar=TRUE, control=control, ..., eval.only=TRUE) mle2@details$convergence <- fit$fail # fit$itrmcd vcov <- try(solve(hessian,tol=0), silent=TRUE) if (inherits(vcov, "try-error")) vcov <- try(solve(hessian+1e-6*diag(nrow(hessian)), tol=0), silent=TRUE) if (inherits(vcov, "try-error")) { if (!use.gr) message("Non-invertible Hessian") mle2@vcov <- matrix(NA,length(coef), length(coef)) } else { mle2@vcov <- vcov } mle2 } ## mle2 <- bbmle::mle2(negll, init, vecpar=TRUE, control=control, ...) mle2 <- optim_step(control$use.gr) if (all(is.na(mle2@vcov)) && control$use.gr) { args$init <- init mle2 <- optim_step(FALSE) } out <- as(mle2, "aft") out@args <- args attr(out,"nobs") <- length(out@args$event) # for logLik method return(out) } setMethod("nobs", "aft", function(object, ...) length(object@args$event)) setMethod("predict", "aft", function(object,newdata=NULL, type=c("surv","cumhaz","hazard","density","hr","sdiff","hdiff","loghazard","link","meansurv","meansurvdiff","odds","or","meanhaz","af","fail","accfac","gradh"), grid=FALSE,seqLength=300,level=0.95, se.fit=FALSE,link=NULL,exposed=incrVar(var),var=NULL,keep.attributes=TRUE,...) { type = match.arg(type) if (object@args$tvc.integrated) predict.aft_integrated2(object, newdata, type, grid, seqLength, level, se.fit, link, exposed, var, keep.attributes, ...) else predict.aft_mixture2(object, newdata, type, grid, seqLength, level, se.fit, link, exposed, var, keep.attributes, ...) }) predict.aft_mixture2 <- function(object,newdata=NULL, type=c("surv","cumhaz","hazard","density","hr","sdiff","hdiff","loghazard","link", "meansurv","meansurvdiff","odds","or","meanhaz","af","fail","accfac","gradh"), grid=FALSE,seqLength=300,level=0.95, se.fit=FALSE,link=NULL,exposed=incrVar(var),var=NULL,keep.attributes=TRUE,...) { type <- match.arg(type) args <- object@args if (type %in% c("fail")) { out <- 1-predict(object,newdata=newdata,type="surv",grid,seqLength,se.fit,link, exposed,var,keep.attributes,...) if (se.fit) {temp <- out$lower; out$lower <- out$upper; out$upper <- temp} return(out) } if (is.null(exposed) && is.null(var) & type %in% c("hr","sdiff","hdiff","meansurvdiff", "or","af","accfac")) stop('Either exposed or var required for type in ("hr","sdiff","hdiff","meansurvdiff","or","af","accfac")') ## exposed is a function that takes newdata and returns the revised newdata ## var is a string for a variable that defines a unit change in exposure if (is.null(newdata) && type %in% c("hr","sdiff","hdiff","meansurvdiff","or","af","accfac")) stop("Prediction using type in ('hr','sdiff','hdiff','meansurvdiff','or','af','accfac') requires newdata to be specified.") calcX <- !is.null(newdata) time <- NULL if (is.null(newdata)) { ##mm <- X <- model.matrix(object) # fails (missing timevar) X <- args$X XD <- args$XD ##y <- model.response(object@model.frame) y <- args$y time <- as.vector(y[,ncol(y)-1]) newdata <- as.data.frame(args$data) } loglpfunc <- function(x,newdata,...) { newdata[[object@args$timeVar]] <- exp(x) lpmatrix.lm(object@args$lm.obj,newdata=newdata) } ## resp <- attr(Terms, "variables")[attr(Terms, "response")] ## similarly for the derivatives if (grid) { Y <- args$y event <- Y[,ncol(Y)]==1 time <- args$data[[args$timeVar]] eventTimes <- time[event] tt <- seq(min(eventTimes),max(eventTimes),length=seqLength)[-1] data.x <- data.frame(tt) names(data.x) <- args$timeVar newdata[[args$timeVar]] <- NULL newdata <- merge(newdata,data.x) calcX <- TRUE } if (calcX) { X <- lpmatrix.lm(args$lm.obj, newdata)[,args$X.index, drop = FALSE] XD <- grad1(loglpfunc,log(newdata[[object@args$timeVar]]), log.transform=FALSE, newdata=newdata) XD <- matrix(XD,nrow=nrow(X))[,args$X.index, drop = FALSE] Xc <- lpmatrix.lm(args$glm.cure.obj, newdata) time <- eval(args$timeExpr,newdata) } if (type %in% c("hr","sdiff","hdiff","meansurvdiff","or","af","accfac")) { newdata2 <- exposed(newdata) X2 <- lpmatrix.lm(args$lm.obj, newdata2)[,args$X.index, drop = FALSE] XD2 <- grad1(loglpfunc,log(newdata2[[object@args$timeVar]]), log.transform=FALSE, newdata=newdata2) XD2 <- matrix(XD2,nrow=nrow(X))[,args$X.index, drop = FALSE] time2 <- eval(args$timeExpr,newdata2) # is this always equal to time? Xc2 = model.matrix(args$glm.cure.obj, newdata2) } if (type %in% c("grad")) { return(predict.aft.ext(object, type=type, time=time, X=X, XD=XD)) } ## colMeans <- function(x) colSums(x)/apply(x,2,length) local <- function (object, newdata=NULL, type="surv", exposed, ...) { args <- object@args betafull <- coef(object) beta <- betafull[1:ncol(args$X)] betas <- betafull[-(1:ncol(args$X))] tt <- args$terms eta <- as.vector(X %*% beta) logtstar <- log(time) - eta etas <- as.vector(predict(args$design, logtstar) %*% betas) H <- exp(etas) S <- exp(-H) if (type=="cumhaz") return(H) if (type=="surv") return(S) if (type=="fail") return(1-S) if (type=="odds") return((1-S)/S) if (type=="meansurv") return(tapply(S,newdata[[object@args$timeVar]],mean)) etaDs <- as.vector(predict(args$designD, logtstar) %*% betas) etaD <- as.vector(XD %*% beta) h <- H*etaDs*(1/time-etaD) Sigma = vcov(object) if (type=="link") return(eta) if (type=="density") return (S*h) if (type=="hazard") return(h) if (type=="loghazard") return(log(h)) if (type=="meanhaz") return(tapply(S*h,newdata[[object@args$timeVar]],sum)/tapply(S,newdata[[object@args$timeVar]],sum)) eta2 <- as.vector(X2 %*% beta) logtstar2 <- log(time2) - eta2 etas2 <- as.vector(predict(args$design, logtstar2) %*% betas) H2 <- exp(etas2) S2 <- exp(-H2) if (type=="sdiff") return(S2-S) if (type=="or") return((1-S2)/S2/((1-S)/S)) if (type=="meansurvdiff") return(tapply(S2,newdata[[object@args$timeVar]],mean) - tapply(S,newdata[[object@args$timeVar]],mean)) etaDs2 <- as.vector(predict(args$designD, logtstar2) %*% betas) etaD2 <- as.vector(XD2 %*% beta) h2 <- H2*etaDs2*(1/time2-etaD2) if (type=="hdiff") return(h2 - h) if (type=="hr") return(h2/h) if (type=="af") { meanS <- tapply(S,newdata[[object@args$timeVar]],mean) meanS2 <- tapply(S2,newdata[[object@args$timeVar]],mean) return((meanS2 - meanS)/(1-meanS)) } if (type=="accfac") { accfac <- -eta + log(1-etaD) accfac2 <- -eta2 + log(1-etaD2) return(exp(accfac2-accfac)) } } local2 <- function (object, newdata=NULL, type="surv", exposed, ...) { args <- object@args betafull <- coef(object) beta <- betafull[1:ncol(args$X)] betac <- betafull[(ncol(args$X)+1):(ncol(args$X)+ncol(args$Xc))] betas <- betafull[-(1:(ncol(args$X)+ncol(args$Xc)))] tt <- args$terms eta <- as.vector(X %*% beta) etac <- as.vector(Xc %*% betac) cure_frac <- exp(etac)/(1+exp(etac)) logtstar <- log(time) - eta etas <- as.vector(predict(args$design, logtstar) %*% betas) Hu <- exp(etas) Su <- exp(-Hu) S <- cure_frac + (1-cure_frac)*Su if (type=="cumhaz") return(-log(cure_frac + (1-cure_frac)*exp(-Hu))) if (type=="surv") return(S) if (type=="fail") return(1-S) if (type=="odds") return((1-S)/S) if (type=="meansurv") return(tapply(S,newdata[[object@args$timeVar]],mean)) etaDs <- as.vector(predict(args$designD, logtstar) %*% betas) etaD <- as.vector(XD %*% beta) hu <- Hu*etaDs*(1/time-etaD) h <- (1-cure_frac)*exp(-Hu)*hu/(cure_frac + (1-cure_frac)*exp(-Hu)) Sigma = vcov(object) if (type=="link") return(eta) if (type=="density") return (S*h) if (type=="hazard") return(h) if (type=="loghazard") return(log(h)) if (type=="meanhaz") return(tapply(S*h,newdata[[object@args$timeVar]],sum)/tapply(S,newdata[[object@args$timeVar]],sum)) eta2 <- as.vector(X2 %*% beta) logtstar2 <- log(time2) - eta2 etas2 <- as.vector(predict(args$design, logtstar2) %*% betas) etac2 <- as.vector(Xc2 %*% betac) cure_frac2 <- exp(etac2)/(1+exp(etac2)) Hu2 <- exp(etas2) Su2 <- exp(-Hu2) S2 <- cure_frac2 + (1-cure_frac2)*Su2 if (type=="sdiff") return(S2-S) if (type=="or") return((1-S2)/S2/((1-S)/S)) if (type=="meansurvdiff") return(tapply(S2,newdata[[object@args$timeVar]],mean) - tapply(S,newdata[[object@args$timeVar]],mean)) etaDs2 <- as.vector(predict(args$designD, logtstar2) %*% betas) etaD2 <- as.vector(XD2 %*% beta) hu2 <- Hu2*etaDs2*(1/time2-etaD2) h2 <- (1-cure_frac2)*exp(-Hu2)*hu2/(cure_frac2 + (1-cure_frac2)*exp(-Hu2)) if (type=="hdiff") return(h2 - h) if (type=="hr") return(h2/h) if (type=="af") { meanS <- tapply(S,newdata[[object@args$timeVar]],mean) meanS2 <- tapply(S2,newdata[[object@args$timeVar]],mean) return((meanS2 - meanS)/(1-meanS)) } if (type=="accfac") { accfac <- -eta + log(1-etaD) accfac2 <- -eta2 + log(1-etaD2) return(exp(accfac2-accfac)) } } local <- if (args$mixture) local2 else local out <- if (!se.fit) { local(object,newdata,type=type,exposed=exposed, ...) } else { if (is.null(link)) link <- switch(type,surv="cloglog",cumhaz="log",hazard="log",hr="log",sdiff="I", hdiff="I",loghazard="I",link="I",odds="log",or="log",meansurv="I",meanhaz="I",af="I",accfac="log", density = "log") invlinkf <- switch(link,I=I,log=exp,cloglog=cexpexp,logit=expit) pred <- predictnl(object,local,link=link,newdata=newdata,type=type,gd=NULL, exposed=exposed,...) ci <- confint.predictnl(pred, level = level) out <- data.frame(Estimate=pred$fit, lower=ci[,1], upper=ci[,2]) if (link=="cloglog") out <- data.frame(Estimate=out$Estimate,lower=out$upper,upper=out$lower) invlinkf(out) } if (keep.attributes) attr(out,"newdata") <- newdata return(out) } predict.aft_integrated2 = function(object,newdata=NULL, type=c("surv","cumhaz","hazard","density","hr","sdiff","hdiff","loghazard","link","meansurv","meansurvdiff","odds","or","meanhaz","af","fail","accfac","gradh"), grid=FALSE,seqLength=300,level=0.95, se.fit=FALSE,link=NULL,exposed=incrVar(var),var=NULL,keep.attributes=TRUE,...) { type <- match.arg(type) args <- object@args if (type %in% c("fail")) { out <- 1-predict(object,newdata=newdata,type="surv",grid,seqLength,se.fit,link,exposed,var,keep.attributes,...) if (se.fit) {temp <- out$lower; out$lower <- out$upper; out$upper <- temp} return(out) } if (is.null(exposed) && is.null(var) & type %in% c("hr","sdiff","hdiff","meansurvdiff","or","af","accfac")) stop('Either exposed or var required for type in ("hr","sdiff","hdiff","meansurvdiff","or","af","accfac")') ## exposed is a function that takes newdata and returns the revised newdata ## var is a string for a variable that defines a unit change in exposure if (is.null(newdata) && type %in% c("hr","sdiff","hdiff","meansurvdiff","or","af","accfac")) stop("Prediction using type in ('hr','sdiff','hdiff','meansurvdiff','or','af','accfac') requires newdata to be specified.") calcX <- !is.null(newdata) time <- NULL if (is.null(newdata)) { ##mm <- X <- model.matrix(object) # fails (missing timevar) X <- args$X X_list <- args$X_list XD <- args$XD ##y <- model.response(object@model.frame) y <- args$y time <- as.vector(y[,ncol(y)-1]) newdata <- as.data.frame(args$data) } loglpfunc <- function(x,newdata,...) { newdata[[object@args$timeVar]] <- exp(x) lpmatrix.lm(object@args$lm.obj,newdata=newdata) } ## resp <- attr(Terms, "variables")[attr(Terms, "response")] ## similarly for the derivatives if (grid) { Y <- args$y event <- Y[,ncol(Y)]==1 time <- args$data[[args$timeVar]] eventTimes <- time[event] tt <- seq(min(eventTimes),max(eventTimes),length=seqLength)[-1] data.x <- data.frame(tt) names(data.x) <- args$timeVar newdata[[args$timeVar]] <- NULL newdata <- merge(newdata,data.x) calcX <- TRUE } if (calcX) { X <- lpmatrix.lm(args$lm.obj, newdata)[,args$X.index, drop = FALSE] XD <- grad1(loglpfunc,log(newdata[[object@args$timeVar]]), log.transform=FALSE, newdata=newdata) XD <- matrix(XD,nrow=nrow(X))[,args$X.index, drop = FALSE] Xc <- lpmatrix.lm(args$glm.cure.obj, newdata) time <- eval(args$timeExpr,newdata) X_list = lapply(args$gnodes, function(gnode) lpmatrix.lm(args$lm.obj, local({ newdata[[args$timeVar]] = (gnode+1)/2*newdata[[args$timeVar]]; newdata}))[,args$X.index, drop=FALSE]) } if (type %in% c("hr","sdiff","hdiff","meansurvdiff","or","af","accfac")) { newdata2 <- exposed(newdata) X2 <- lpmatrix.lm(args$lm.obj, newdata2)[,args$X.index, drop = FALSE] XD2 <- grad1(loglpfunc,log(newdata2[[object@args$timeVar]]), log.transform=FALSE, newdata=newdata2) XD2 <- matrix(XD2,nrow=nrow(X))[,args$X.index, drop = FALSE] time2 <- eval(args$timeExpr,newdata2) # is this always equal to time? Xc2 = model.matrix(args$glm.cure.obj, newdata2) X_list2 = lapply(args$gnodes, function(gnode) lpmatrix.lm(args$lm.obj, local({ newdata2[[args$timeVar]] = (gnode+1)/2*newdata2[[args$timeVar]]; newdata2}))[,args$X.index, drop=FALSE]) } if (type == "gradh") { return(predict.aft.ext(object, type="gradh", time=time, X=X, XD=XD, Xc=Xc, X_list=X_list)) } ## colMeans <- function(x) colSums(x)/apply(x,2,length) local <- function (object, newdata=NULL, type="surv", exposed, ...) { args <- object@args betafull <- coef(object) beta <- betafull[1:ncol(X)] betas <- betafull[-(1:ncol(X))] tt <- args$terms tstar = time*0 scale = time/2.0 for(i in 1:length(X_list)) { tstar = tstar + args$gweights[i]*scale * exp(-X_list[[i]] %*% beta) } ## eta <- as.vector(X %*% beta) logtstar <- log(tstar) etas <- as.vector(predict(args$design, logtstar) %*% betas) H <- exp(etas) S <- exp(-H) if (type=="cumhaz") return(H) if (type=="surv") return(S) if (type=="fail") return(1-S) if (type=="odds") return((1-S)/S) if (type=="meansurv") return(tapply(S,newdata[[object@args$timeVar]],mean)) if (type=="accfac") { return(exp(-(X2-X) %*% beta)) } etaDs <- as.vector(predict(args$designD, logtstar) %*% betas) etaD <- as.vector(XD %*% beta) h <- drop(H*etaDs*exp(X %*% beta)) Sigma = vcov(object) if (type=="link") return(logtstar) ## what should this be? if (type=="density") return (S*h) if (type=="hazard") return(h) if (type=="loghazard") return(log(h)) if (type=="meanhaz") return(tapply(S*h,newdata[[object@args$timeVar]],sum)/tapply(S,newdata[[object@args$timeVar]],sum)) tstar2 = time2*0 scale2 = time2/2.0 for(i in 1:length(X_list2)) { tstar2 = tstar2 + args$gweights[i]*scale2 * exp(-X_list2[[i]] %*% beta) } logtstar2 = log(tstar2) etas2 <- as.vector(predict(args$design, logtstar2) %*% betas) H2 <- exp(etas2) S2 <- exp(-H2) if (type=="sdiff") return(S2-S) if (type=="or") return((1-S2)/S2/((1-S)/S)) if (type=="meansurvdiff") return(tapply(S2,newdata[[object@args$timeVar]],mean) - tapply(S,newdata[[object@args$timeVar]],mean)) etaDs2 <- as.vector(predict(args$designD, logtstar2) %*% betas) etaD2 <- as.vector(XD2 %*% beta) h2 <- drop(H2*etaDs2*exp(X2 %*% beta)) if (type=="hdiff") return(h2 - h) if (type=="hr") return(h2/h) if (type=="af") { meanS <- tapply(S,newdata[[object@args$timeVar]],mean) meanS2 <- tapply(S2,newdata[[object@args$timeVar]],mean) return((meanS2 - meanS)/(1-meanS)) } } local2 <- function (object, newdata=NULL, type="surv", exposed, ...) { args <- object@args betafull <- coef(object) beta <- betafull[1:ncol(args$X)] betac <- betafull[(ncol(args$X)+1):(ncol(args$X)+ncol(args$Xc))] betas <- betafull[-(1:(ncol(args$X)+ncol(args$Xc)))] tt <- args$terms tt <- args$terms tstar = time*0 scale = time/2.0 for(i in 1:length(X_list)) { tstar = tstar + args$gweights[i]*scale * exp(-X_list[[i]] %*% beta) } ## eta <- as.vector(X %*% beta) etac <- as.vector(Xc %*% betac) cure_frac <- exp(etac)/(1+exp(etac)) logtstar <- log(tstar) etas <- as.vector(predict(args$design, logtstar) %*% betas) Hu <- exp(etas) Su <- exp(-Hu) S <- cure_frac + (1-cure_frac)*Su if (type=="cumhaz") return(-log(cure_frac + (1-cure_frac)*exp(-Hu))) if (type=="surv") return(S) if (type=="fail") return(1-S) if (type=="odds") return((1-S)/S) if (type=="meansurv") return(tapply(S,newdata[[object@args$timeVar]],mean)) etaDs <- as.vector(predict(args$designD, logtstar) %*% betas) etaD <- as.vector(XD %*% beta) hu <- drop(Hu*etaDs*exp(X %*% beta)) h <- (1-cure_frac)*exp(-Hu)*hu/(cure_frac + (1-cure_frac)*exp(-Hu)) Sigma = vcov(object) if (type=="link") return(logtstar) # is this correct? if (type=="density") return (S*h) if (type=="hazard") return(h) if (type=="loghazard") return(log(h)) if (type=="meanhaz") return(tapply(S*h,newdata[[object@args$timeVar]],sum)/tapply(S,newdata[[object@args$timeVar]],sum)) tstar2 = time2*0 scale2 = time2/2.0 for(i in 1:length(X_list2)) { tstar2 = tstar2 + args$gweights[i]*scale2 * exp(-X_list2[[i]] %*% beta) } logtstar2 = log(tstar2) ## eta2 <- as.vector(X2 %*% beta) etas2 <- as.vector(predict(args$design, logtstar2) %*% betas) etac2 <- as.vector(Xc2 %*% betac) cure_frac2 <- exp(etac2)/(1+exp(etac2)) Hu2 <- exp(etas2) Su2 <- exp(-Hu2) S2 <- cure_frac2 + (1-cure_frac2)*Su2 if (type=="sdiff") return(S2-S) if (type=="or") return((1-S2)/S2/((1-S)/S)) if (type=="meansurvdiff") return(tapply(S2,newdata[[object@args$timeVar]],mean) - tapply(S,newdata[[object@args$timeVar]],mean)) etaDs2 <- as.vector(predict(args$designD, logtstar2) %*% betas) etaD2 <- as.vector(XD2 %*% beta) hu2 <- drop(Hu2*etaDs2*exp(X2 %*% beta)) h2 <- (1-cure_frac2)*exp(-Hu2)*hu2/(cure_frac2 + (1-cure_frac2)*exp(-Hu2)) if (type=="hdiff") return(h2 - h) if (type=="hr") return(h2/h) if (type=="af") { meanS <- tapply(S,newdata[[object@args$timeVar]],mean) meanS2 <- tapply(S2,newdata[[object@args$timeVar]],mean) return((meanS2 - meanS)/(1-meanS)) } if (type=="accfac") { return(exp(-(X2-X) %*% beta)) } } local <- if(args$mixture) local2 else local out <- if (!se.fit) { local(object,newdata,type=type,exposed=exposed, ...) } else { if (is.null(link)) link <- switch(type,surv="cloglog",cumhaz="log",hazard="log",hr="log",sdiff="I", hdiff="I",loghazard="I",link="I",odds="log",or="log",meansurv="I",meanhaz="I",af="I",accfac="log", density = "log") invlinkf <- switch(link,I=I,log=exp,cloglog=cexpexp,logit=expit) pred <- predictnl(object,local,link=link,newdata=newdata,type=type,gd=NULL, exposed=exposed,...) ci <- confint.predictnl(pred, level = level) out <- data.frame(Estimate=pred$fit, lower=ci[,1], upper=ci[,2]) if (link=="cloglog") out <- data.frame(Estimate=out$Estimate,lower=out$upper,upper=out$lower) invlinkf(out) } if (keep.attributes) attr(out,"newdata") <- newdata return(out) } plot.aft.meansurv <- function(x, y=NULL, times=NULL, newdata=NULL, type="meansurv", exposed=NULL, add=FALSE, ci=!add, rug=!add, recent=FALSE, xlab=NULL, ylab=NULL, lty=1, line.col=1, ci.col="grey", seqLength=301, ...) { ## if (is.null(times)) stop("plot.meansurv: times argument should be specified") args <- x@args if (is.null(newdata)) newdata <- as.data.frame(args$data) if (is.null(times)) { Y <- args$y event <- Y[,ncol(Y)]==1 time <- args$data[[args$timeVar]] eventTimes <- time[event] times <- seq(min(eventTimes),max(eventTimes),length=seqLength)[-1] } times <- times[times !=0] if (recent) { newdata <- do.call("rbind", lapply(times, function(time) { newd <- newdata newd[[args$timeVar]] <- newdata[[args$timeVar]]*0+time newd })) pred <- predict(x, newdata=newdata, type=type, se.fit=ci, exposed=exposed) # requires recent version if (type=="meansurv") pred <- if (ci) rbind(c(Estimate=1,lower=1,upper=1),pred) else c(1,pred) } else { pred <- lapply(times, function(time) { newdata[[args$timeVar]] <- newdata[[args$timeVar]]*0+time predict(x, newdata=newdata, type=type, se.fit=ci, grid=FALSE, exposed=exposed) }) pred <- do.call("rbind", pred) if (type=="meansurv") { pred <- if (ci) rbind(c(Estimate=1,lower=1,upper=1),pred) else c(1,unlist(pred)) times <- c(0,times) } } if (is.null(xlab)) xlab <- deparse(args$timeExpr) if (is.null(ylab)) ylab <- switch(type, meansurv="Mean survival", af="Attributable fraction", meansurvdiff="Difference in mean survival") if (!add) matplot(times, pred, type="n", xlab=xlab, ylab=ylab, ...) if (ci) { polygon(c(times,rev(times)),c(pred$lower,rev(pred$upper)),col=ci.col,border=ci.col) lines(times,pred$Estimate,col=line.col,lty=lty,...) } else { lines(times,pred,col=line.col,lty=lty,...) } if (rug) { Y <- args$y eventTimes <- Y[Y[,ncol(Y)]==1,ncol(Y)-1] rug(eventTimes,col=line.col) } return(invisible(y)) } plot.aft.base <- function(x,y,newdata=NULL,type="surv", xlab=NULL,ylab=NULL,line.col=1,ci.col="grey",lty=par("lty"), add=FALSE,ci=!add,rug=!add, var=NULL,exposed=incrVar(var),times=NULL,...) { if (type %in% c("meansurv","meansurvdiff","af")) { return(plot.aft.meansurv(x,times=times,newdata=newdata,type=type,xlab=xlab,ylab=ylab,line.col=line.col,ci.col=ci.col, lty=lty,add=add,ci=ci,rug=rug, exposed=exposed, ...)) } args <- x@args if (is.null(newdata)) stop("newdata argument needs to be specified") y <- predict(x,newdata,type=switch(type,fail="surv",margfail="margsurv",type),var=var,exposed=exposed, grid=!(args$timeVar %in% names(newdata)), se.fit=ci) if (type %in% c("fail","margfail")) { if (ci) { y$Estimate <- 1-y$Estimate lower <- y$lower y$lower=1-y$upper y$upper=1-lower } else y <- structure(1-y,newdata=attr(y,"newdata")) } if (is.null(xlab)) xlab <- deparse(args$timeExpr) if (is.null(ylab)) ylab <- switch(type,hr="Hazard ratio",hazard="Hazard",surv="Survival",density="Density", sdiff="Survival difference",hdiff="Hazard difference",cumhaz="Cumulative hazard", loghazard="log(hazard)",link="Linear predictor",meansurv="Mean survival", meansurvdiff="Difference in mean survival",odds="Odds",or="Odds ratio", margsurv="Marginal survival",marghaz="Marginal hazard",marghr="Marginal hazard ratio", haz="Hazard",fail="Failure", meanhaz="Mean hazard",margfail="Marginal failure",af="Attributable fraction",meanmargsurv="Mean marginal survival", uncured="Uncured distribution","Acceleration factor") xx <- attr(y,"newdata") xx <- eval(args$timeExpr,xx) # xx[,ncol(xx)] if (!add) matplot(xx, y, type="n", xlab=xlab, ylab=ylab, ...) if (ci) { polygon(c(xx,rev(xx)), c(y[,2],rev(y[,3])), col=ci.col, border=ci.col) lines(xx,y[,1],col=line.col,lty=lty,...) } else lines(xx,y,col=line.col,lty=lty,...) if (rug) { Y <- args$y eventTimes <- Y[Y[,ncol(Y)]==1,ncol(Y)-1] rug(eventTimes,col=line.col) } return(invisible(y)) } setMethod("plot", signature(x="aft", y="missing"), function(x,y,newdata=NULL,type="surv", xlab=NULL,ylab=NULL,line.col=1,ci.col="grey",lty=par("lty"), add=FALSE,ci=!add,rug=!add, var=NULL,exposed=incrVar(var),times=NULL,...) plot.aft.base(x=x, y=y, newdata=newdata, type=type, xlab=xlab, ylab=ylab, line.col=line.col, lty=lty, add=add, ci=ci, rug=rug, var=var, exposed=exposed, times=times, ...) ) predict.aft.ext <- function(obj, type=c("survival","haz","gradh"), time=obj@args$time, X=obj@args$X, XD=obj@args$XD, X_list=obj@args$X_list, Xc=obj@args$Xc) { type <- match.arg(type) localargs <- obj@args localargs$return_type <- type localargs$X <- X localargs$XD <- XD localargs$time <- time localargs$Xc <- Xc localargs$X_list <- X_list as.matrix(.Call("aft_model_output", localargs, PACKAGE="rstpm2")) } ## ## simulate from Weibull with one binary covariate ## if (FALSE) { ## require(rstpm2) ## summary(aft0 <- aft(Surv(rectime,censrec==1)~hormon,data=brcancer,df=4)) ## aft1 <- aft(Surv(rectime,censrec==1)~hormon,data=brcancer,df=4,init=coef(aft1)) ## ## ## require(rstpm2) ## summary(aft0 <- aft(Surv(rectime,censrec==1)~hormon,data=brcancer,df=4)) ## plot(survfit(Surv(rectime,censrec==1)~hormon,data=brcancer),col=1:2) ## plot(aft0,newdata=data.frame(hormon=0), add=TRUE, line.col="green", ci=FALSE) ## plot(aft0,newdata=data.frame(hormon=1), add=TRUE, line.col="blue", ci=FALSE) ## ## ## summary(aft1 <- aft(Surv(rectime,censrec==1)~hormon,data=brcancer,df=4,smooth.formula=~hormon:ns(log(rectime),df=3))) ## plot(survfit(Surv(rectime,censrec==1)~hormon,data=brcancer),col=1:2) ## plot(aft1,newdata=data.frame(hormon=0), add=TRUE, line.col="green", ci=FALSE) ## plot(aft1,newdata=data.frame(hormon=1), add=TRUE, line.col="blue", ci=FALSE) ## require(rstpm2) ## require(survival) ## require(splines) ## set.seed(12345) ## n <- 1e4 ## x <- rep(c(0,1),n/2) ## af <- exp(0.3*x) ## time <- rweibull(n,2,5)*af ## censor <- rexp(n,rate=1/10) ## obstime <- pmin(time,censor) ## event <- ifelse(obstime==time,1,0) ## X <- cbind(x) ## XD <- X*0 ## dat1 <- data.frame(obstime,event,x) ## aft1 <- aft(Surv(obstime,event)~x,data=dat1, df=2, reltol=1e-12, control=list(maxit=2000)) ## plot(survfit(Surv(obstime,event)~x,data=dat1),col=1:2) ## plot(aft1,newdata=data.frame(x=0), add=TRUE, line.col="green", ci=FALSE) ## plot(aft1,newdata=data.frame(x=1), add=TRUE, line.col="blue", ci=FALSE) ## head(rstpm2:::predict.aft.ext(aft1) - predict(aft1)) ## range(rstpm2:::predict.aft.ext(aft1,type="haz") - predict(aft1, type="haz")) ## rstpm2:::predict.aft.ext(aft1,type="haz",time=aft1@args$time[1:6],X=aft1@args$X[1:6,,drop=FALSE],XD=aft1@args$XD[1:6,,drop=FALSE]) - head(predict(aft1, type="haz")) ## predict.aft.ext.test <- function(obj, eps=1e-5) { ## localargs <- obj@args ## localargs$return_type <- "haz" ## basecoef <- coef(obj) ## sapply(1:length(basecoef), ## function(i) { ## coef <- basecoef ## coef[i] <- coef[i]+eps ## localargs$init <- coef ## upper <- as.vector(.Call("aft_model_output", localargs, PACKAGE="rstpm2")) ## coef <- basecoef ## coef[i] <- coef[i]-eps ## localargs$init <- coef ## lower <- as.vector(.Call("aft_model_output", localargs, PACKAGE="rstpm2")) ## (upper-lower)/eps/2 ## }) ## } ## temp <- predict.aft.ext.test(aft1) ## range(rstpm2:::predict.aft.ext(aft1,type="gradh") - temp) ## rstpm2:::predict.aft.ext(aft1,type="gradh") - head(temp) ## range(predict(aft1,newdata=data.frame(obstime=aft1@args$time[1:6],x=x[1:6]),type="gradh") - ## head(temp)) ## plot(aft1,newdata=data.frame(x=0), type="hazard", line.col="green", rug=FALSE) ## plot(aft1,newdata=data.frame(x=1), type="hazard", add=TRUE, line.col="blue", ci=TRUE) ## aft2 <- aft(Surv(obstime,event)~x,data=dat1, df=4, reltol=1e-12, control=list(maxit=2000), smooth.formula=~x:ns(log(obstime),df=3)) ## plot(survfit(Surv(obstime,event)~x,data=dat1),col=1:2) ## plot(aft2,newdata=data.frame(x=0),line.col="green",add=TRUE,ci=FALSE) ## plot(aft2,newdata=data.frame(x=1),line.col="blue",add=TRUE,ci=FALSE) ## plot(aft2,newdata=data.frame(x=0),type="accfac",exposed=function(data) transform(data,x=1),se.fit=TRUE) ## aft3 <- aft(Surv(obstime,event)~x,data=dat1, df=4, reltol=1e-12, control=list(maxit=2000), smooth.formula=~x:ns(obstime,df=3)) ## plot(aft3,newdata=data.frame(x=0),type="accfac",exposed=function(data) transform(data,x=1)) ## plot(aft2,newdata=data.frame(x=0),type="accfac",exposed=function(data) transform(data,x=1),ci=FALSE,add=TRUE,line.col="blue") ## ## f$fn is not the same (?!) ## aft1$negll(aft1$par) ## -sum(aft1$logh*event-aft1$H) # ok ## -sum(aft1$f$report(aft1$par)$logh*event-aft1$f$report(aft1$par)$H) # ok ## -sum(aft2$f$report(aft1$par)$logh*event-aft2$f$report(aft1$par)$H) # ok ## aft1$f$fn(aft1$par) # ??? ## ## f$fn is not the same (?!) ## aft2$negll(aft2$par) ## -sum(aft2$logh*event-aft2$H) # ok ## -sum(aft2$f$report(aft2$par)$logh*dat1$event-aft2$f$report(aft2$par)$H) # ok ## aft2$f$fn(aft2$par) # ??? ## ## the events are the same ## all(event == aft1$f$report(aft1$par)$event) # ok ## all(event == aft2$f$report(aft2$par)$event) # ok ## ## The H and logh vectors are very close ## max(abs(aft1$f$report(aft1$par)$H - aft1$H)) # ok ## max(abs(aft2$f$report(aft2$par)$H - aft2$H)) # ok ## max(abs(aft1$f$report(aft1$par)$logh - aft1$logh)) # ok ## max(abs(aft2$f$report(aft2$par)$logh - aft2$logh)) # ok ## ## ## ## the Xs and XDs matrices are very close ## max(abs(aft1$f$report(aft1$par)$Xs - aft1$Xs)) # ok ## max(abs(aft1$f$report(aft1$par)$XDs - aft1$XDs)) # ok ## max(abs(aft2$f$report(aft2$par)$Xs - aft2$Xs)) # ok ## max(abs(aft2$f$report(aft2$par)$XDs - aft2$XDs)) # ok ## head(aft1$Xs) ## head(aft2$Xs) ## head(aft1$f$report(aft1$par)$Xs) ## head(aft1$f$report(aft2$par)$Xs) ## head(aft2$f$report(aft2$par)$Xs) ## aft1$f$gr(aft1$par) # ok ## delta=function(i,eps=1e-5) {new=rep(0,5); new[i]=eps; new} ## for (i in 1:length(aft1$par)) ## print((aft1$f$fn(aft1$par+delta(i))-aft1$f$fn(aft1$par-delta(i)))/(2e-5)) ## ## Gradient at the 'final' value are not the same ## for (i in 1:length(aft2$par)) ## print((aft2$negll(aft1$par+delta(i))-aft2$negll(aft1$par-delta(i)))/(2e-5)) ## ## gradient at the initial value are the same ## aft1$f$gr(aft1$init) # ok ## delta=function(i,eps=1e-5) {new=rep(0,5); new[i]=eps; new} ## for (i in 1:length(aft1$par)) ## print((aft1$f$fn(aft1$init+delta(i))-aft1$f$fn(aft1$init-delta(i)))/(2e-5)) ## ## Objective at the initial values are the same ## as.numeric(aft1$negll(aft1$init)) - aft1$f$fn(aft1$init) # ok ## as.numeric(aft2$negll(aft2$init)) - aft2$f$fn(aft2$init) # ok ## ## objectives at the 'final' values are NOT the same ## as.numeric(aft1$negll(aft1$init+0.1)) - aft1$f$fn(aft1$init+0.1) # ?? ## as.numeric(aft1$negll(aft1$par)) - aft1$f$fn(aft1$par) # ??? ## undebug(aft1$negll) ## aft1$negll(aft1$par) ## aft1$init ## aft1$f$par ## aft1$f$fn(aft1$init) ## aft1$f$fn(aft1$f$par) ## aft1$f$fn(aft1$par) ## aft1$f$fn(aft2$par) ## } ## ## KL using GausLaguerre Quadrature --numerically unstable ## ## KL <- function(object, true_density = "Weibull", ## relative = TRUE, symmetric = FALSE, ## shape = 1, scale = 1, shape2 = 1, mixing_par = 0.5, ## intercept1 = 1, intercept2 = 1, beta = c(1,1), ## rate =1, location = 0, n_nodes = 110) ## { ## ## GaussLaguerreQuadrature <- function(f, n_nodes) { ## ## library(orthopolynom) ## ## roots <- sapply(polyroot(laguerre.polynomials(n_nodes)[[n_nodes+1]]), Re) ## ## weights <- rep(roots/ ## ((n_nodes+1)^2 * as.function( ## laguerre.polynomials(n_nodes+1)[[n_nodes+2]])(roots)^2), each = ## length(object@args$event)) ## ## ## transformation ## ## g <- function(x) f(x*scale)*rep(exp(x)*scale, each = length(object@args$event)) ## g(roots) %*% weights ## } ## ## integrand <- function(x) { ## true_density = if(true_density == "Weibull") { ## rep(dweibull(x, shape, scale), each = length(object@args$event)) ## } else if (true_density == "gamma") { rep(dgamma(x, shape, scale = scale), ## each = length(object@args$event)) ## } else if (true_density == "norm") { dnorm(x, location, scale) ## } else if (true_density == "logis") { dlogis(x, location, scale) ## } else if (true_density == "mixture Weibull") { ## ## densities at each quadrature point are evaluated for all covariate ## ## patterns and then stacked ## mixing_par * ## c(t(do.call(rbind, ## lapply(x, dweibull, shape = shape, ## scale = ## exp(intercept1 + object@args$X %*% beta))))) + ## (1-mixing_par) * ## c(t(do.call(rbind, ## lapply(x, dweibull, shape = shape2, ## scale = exp(intercept2 + object@args$X %*% beta))))) ## ## } else { true_density = true_density # user supplied density ## } ## ## newdata <- data.frame(X = do.call(rbind, ## rep(list(object@args$X),length(x)))) ## ## colnames(newdata) <- as.character( ## tail(as.list(attr(object@args$lm.obj$terms, "variables")),-2)) ## newdata[[object@args$timeVar]] <- rep(x, each = length(object@args$event)) ## ## model_density <- predict.aft_mixture(object, ## type = "density", ## newdata = newdata) ## ## ## model_density[model_density == 0] <- .Machine$double.xmin ## ## if (symmetric) { true_density*log(true_density/model_density) + ## model_density*log(model_density/true_density) ## } else if (relative) { -true_density*log(model_density) ## } else { true_density*log(true_density/model_density) } ## } ## ## GaussLaguerreQuadrature(integrand, n_nodes)/length(object@args$event) ## } ## KL using integrate --fast when the number of unique covariate patterns is small KL_not_vectorized <- function(object, true_density = "Weibull", relative = TRUE, symmetric = FALSE, shape = c(1,1), scale = c(1,1), rate =1, location = 0, mixing_par = 0.5, beta = c(1,1)) { integrand <- function(x, newdata) { true_density = if(true_density == "Weibull") { dweibull(x, shape, scale) } else if (true_density == "gamma") { dgamma(x, shape, scale = scale) } else if (true_density == "norm") { dnorm(x, location, scale) } else if (true_density == "logis") { dlogis(x, location, scale) } else if (true_density == "mixture Weibull") { mixing_par* dweibull(x, shape[1], scale[1]) + (1-mixing_par)* dweibull(x, shape[2], scale[2]) } else { true_density = true_density # user supplied density } names <- colnames(newdata) newdata <- data.frame(X = rep(newdata[[names]],length(x))) colnames(newdata) <- as.character( tail(as.list(attr(object@args$lm.obj$terms, "variables")),-2)) newdata[[object@args$timeVar]] <- x model_density <- predict(object, type = "density", newdata = newdata) if (symmetric) { true_density*log(true_density/model_density) + model_density*log(model_density/true_density) } else if (relative) { -true_density*log(model_density) } else { true_density*log(true_density/model_density) } } out <- 0 ## save unique covariate patterns with duplicate count uniqueCov <- data.frame(pre = object@args$X) uniqueCov <- aggregate(cbind(uniqueCov[0], nDuplic = 1), uniqueCov, length) ## calculate integral only for unique covariate patterns for (i in c(1:NROW(uniqueCov))) { newdata <- data.frame(X = uniqueCov[i,-NCOL(uniqueCov)]) colnames(newdata) <- as.character(tail(as.list(attr(object@args$lm.obj$terms,"variables")),-2)[[1]]) out <- out + integrate(integrand, 0, 30, newdata = newdata)$value* uniqueCov$nDuplic[i]/sum(uniqueCov$nDuplic) } return(out) } lines.aft <- function(x,newdata=NULL,type="surv", col=1,ci.col="grey",lty=par("lty"), ci=FALSE,rug=FALSE, var=NULL,exposed=NULL,times=NULL, ...) plot.aft.base(x=x, newdata=newdata, type=type, line.col=col, ci.col=ci.col, lty=lty, add=TRUE, ci=ci, rug=rug, var=var, exposed=exposed, times=times, ...) setMethod("lines", signature(x="aft"), lines.aft) rstpm2/R/zzz.R0000644000176200001440000000025215040713510012655 0ustar liggesusers.onLoad <- function(libname, pkgname) { ## options(warn = 3, error = utils::recover) } .onUnload <- function (libpath) { library.dynam.unload("rstpm2", libpath) } rstpm2/R/random.R0000644000176200001440000000051714706157711013321 0ustar liggesusers## Drop-in replacement functions (not exported) rgompertz = function(n, shape, rate) { u <- 1-runif(n) i <- shape >= 0 | u>=exp(rate/shape) y <- rep(Inf, n) if (any(i)) y[i] <- log(1 - shape*log(u[i])/rate) / shape y } rllogis = function(n, shape, scale) { u <- runif(n) scale*(u/(1-u))^(1/shape) } rstpm2/R/read_gsm.R0000644000176200001440000001325314706157711013623 0ustar liggesusers#' Utility to find where a formula call matches a name. #' This may be cleaner than using grep on strings:) #' @param name quoted name to match #' @param x right-hand-side of a formula call #' @return index of the matching positions grep_call = function(name,x) { local_function = function(x) if(length(x)==1) x==name else any(sapply(x, local_function)) which(sapply(x, local_function)) } #' Extract design information from an stpm2/gsm object and newdata #' for use in C++ #' @param object stpm2/gsm object #' @param newdata list or data-frame used for evaluation #' @param inflate double value to inflate minimum and maximum times for root finding #' @return list that can be read by `gsm ssim::read_gsm(SEX args)` in C++ #' @rdname gsm_design #' @importFrom stats predict #' @export gsm_design = function(object, newdata, newdata0=NULL, t0=NULL, inflate=100) { stopifnot(inherits(object, "stpm2"), is.list(newdata), is.numeric(inflate), length(inflate) == 1, is.null(t0) || (is.numeric(t0) && length(t0)==1), is.null(newdata0) || all(dim(newdata)==dim(newdata0))) ## Assumed patterns: ## timeEffect := (ns|nsx)(log(timeVar),knots,Boundary.knots,centre=FALSE,derivs=(c(2,2)|c(2,1))) ## effect := timeEffect | otherEffect:timeEffect | timeEffect:otherEffect terms = attr(object@model.frame, "terms") factors = attr(terms, "factors")[-1,,drop=FALSE] variables = attr(terms, "variables")[-(1:2)] predvars = attr(terms, "predvars")[-(1:2)] indices = grep_call(object@timeVar, variables) if(length(indices)==0) stop("No timeVar in the formula -- unexpected error") index_time_variables = grep_call(object@timeVar, variables) # time variables index_time_effects = grep(object@timeVar,colnames(factors)) # components in the rhs with time variables ## We need to know how wide is each term nms = names(coef(object)) term.labels = attr(terms, "term.labels") coef_index <- sapply(strsplit(nms, ":"), function(c) { if (length(c)>2) stop("current implementation only allows for main effects and two-way interactions") pmatchp = function(x, table) !is.na(pmatch(x, table)) if(length(c)==1) { for (i in seq_along(term.labels)) { t = term.labels[i] if (pmatchp(t,c)) return(i) } if (c == "(Intercept)") return(0) return(-1) } ## => length(c) == 2 term.labels.split = strsplit(term.labels, ":") for (i in seq_along(term.labels)) { t = term.labels.split[[i]] if (all(pmatchp(t,c))) return(i) } return(-1) }) parse_ns = function(mycall,x,index_time_effect) { df = length(c(mycall$knots, mycall$Boundary.knots)) - 1 stopifnot(mycall[[1]] == quote(nsx) || mycall[[1]] == quote(ns), length(mycall[[2]])>1, mycall[[2]][[1]] == quote(log), # assumes log mycall[[2]][[2]] == object@timeVar, # what about a scalar product or divisor? is.null(mycall$deriv) || (mycall$derivs[1] == 2 && mycall$derivs[2] %in% 1:2), mycall$centre == FALSE) # doesn't allow for centering cure = !is.null(mycall$derives) && all(mycall$derivs == c(2,1)) time = object@args$time q_const = attr(nsx(log(mean(time)), knots=mycall$knots, Boundary.knots=mycall$Boundary.knots, intercept=mycall$intercept), "q.const") list(call = mycall, knots=mycall$knots, Boundary_knots=mycall$Boundary.knots, intercept=as.integer(mycall$intercept), gamma=coef(object)[which(coef_index %in% index_time_effect)], q_const = q_const, cure = as.integer(cure), x=x) } time = object@args$time newdata[[object@timeVar]] = mean(time) # NB: time not used Xp = predict(object, newdata=newdata, type="lpmatrix") index2 = which(!(coef_index %in% index_time_effects)) etap = drop(Xp[, index2, drop=FALSE] %*% coef(object)[index2]) if (!is.null(newdata0)) { newdata0[[object@timeVar]] = mean(time) # NB: time not used Xp0 = predict(object, newdata=newdata0, type="lpmatrix") etap0 = drop(Xp0[, index2, drop=FALSE] %*% coef(object)[index2]) } list(type="gsm", link_name=object@args$link, tmin = min(time), # not currently used? tmax = max(time), inflate=as.double(inflate), etap=etap, etap0= if(!is.null(newdata0)) etap0 else etap*0, t0 = if(!is.null(t0)) pmax(1e-10,t0) else Inf, coefp = coef(object)[index2], # for debugging log_time=TRUE, terms = lapply(index_time_effects, function(i) { j = which(factors[,i] != 0) if (length(j)==1) return(parse_ns(predvars[[j]], rep(1, nrow(newdata)), i)) else { if(length(j)>3) stop("Current implementation only allows for two-way interaction terms") if (j[1] %in% index_time_variables) return(parse_ns(predvars[[j[1]]], eval(predvars[[j[2]]], newdata), i)) else return(parse_ns(predvars[[j[2]]], eval(predvars[[j[1]]], newdata), i)) } }) ) } rstpm2/R/tvc.coxph.R0000644000176200001440000000476013416410274013752 0ustar liggesuserssetClass("tvcCoxph", contains="mle2") ## setClass("tvcCoxphList", contains="list") cox.tvc <- function(obj,var=NULL,method="logt") { stopifnot(attr(obj$y,"type") == "right") if (is.null(var)) return(as(lapply(attr(obj$terms,"term.labels"), function(name) cox.tvc(obj, var=name,method=method)), "tvcCoxList")) method <- match.arg(method) y <- as.matrix(obj$y) time <- y[,1] status <- y[,2] X <- as.matrix(model.matrix(obj)) index <- order(time,-status) X <- X[index, , drop = FALSE] time <- time[index] status <- status[index] k <- match(var,attr(obj$terms,"term.labels")) beta <- c(coef(obj),0) names(beta) <- c(names(coef(obj)),sprintf("%s:log(t)",var)) minuslogl <- function(beta) -.Call("test_cox_tvc2", list(time=time,event=status,X=X,beta=beta,k=k-1),PACKAGE="rstpm2") gr <- function(beta) -.Call("test_cox_tvc2_grad", list(time=time,event=status,X=X,beta=beta,k=k-1),PACKAGE="rstpm2") parnames(minuslogl) <- parnames(gr) <- names(beta) fit <- mle2(start=beta, minuslogl = minuslogl, gr = gr, method="BFGS") fit@data <- list(object=obj,k=k,var=var) ## return the mle2 object as(fit,"tvcCoxph") } setMethod("show", "tvcCoxph", function(object) print(summary(object))) setMethod("plot", signature(x="tvcCoxph", y="missing"), function(x,y, add=FALSE,rug=!add, type="l",lty=c(1,2,2),col=1,ylab="Effect",log="y",...) { obj <- x@data$object y <- as.matrix(obj$y) time <- y[,1] status <- y[,2] timek <- seq(min(time[status==1]), max(time[status==1]), length=301) Xk <- cbind(1,log(timek)) k <- x@data$k index <- c(k,length(coef(x))) betak <- coef(x)[index] fitted <- as.vector(Xk %*% betak) gd <- t(Xk) se.fit <- sqrt(colSums(gd * (vcov(x)[index,index] %*% gd))) if (add) { matlines(timek,exp(fitted+cbind(0,-1.96*se.fit,1.96*se.fit)),lty=lty,col=col,...) } else { matplot(timek,exp(fitted+cbind(0,-1.96*se.fit,1.96*se.fit)),type=type,lty=lty,col=col,ylab=ylab,log=log,...) } abline(h=exp(coef(obj)[k]),lty=3) if (rug) rug(time[status==1]) }) rstpm2/R/inline.R0000644000176200001440000000077715044726670013331 0ustar liggesusersinlineCxxPlugin <- Rcpp:::Rcpp.plugin.maker( include.before = "#include ", libs = # sprintf( "$(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)", ## ## list.files(system.file("libs", package = "rstpm2"), ## pattern = "\\.(so|dll|dylib)$", ## full.names = TRUE)), package = "rstpm2") rstpm2/vignettes/0000755000176200001440000000000015105126152013507 5ustar liggesusersrstpm2/vignettes/aft-weibull-20190816.pdf0000644000176200001440000005032415040661603017334 0ustar liggesusers%PDF-1.4 %âãÏÓ\r 1 0 obj << /CreationDate (D:20190902125137) /ModDate (D:20190902125137) /Title (R Graphics Output) /Producer (R 3.6.0) /Creator (R) >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 7 0 obj << /Type /Page /Parent 3 0 R /Contents 8 0 R /Resources 4 0 R >> endobj 8 0 obj << /Length 16751 /Filter /FlateDecode >> stream xœ½½Í’,9v;¯§Èa÷€©pÇÿ”Ôߥٕ™Ôm¦Lƒ6ª)‘VMé²i’Ý·—{¯µÐ™u²O9¨ÓüÀ—îñ%¸Þþúízûû·ÿï‡ÿøÏüß¿úãúwùö7üáz½^oüïÿæ¼ø¯~óAñoþê?Ìÿo{û??ü—ÿúözûo?\oýü÷÷?\¯§ÂÛÿûÃúŸ¿Xÿ–W¦ÿùÇß¿ý%Îà-_ï÷ëí®ý=?‡¾Ó{¿Þîë~¿ë¬÷ŸßþaŸãë}Ü÷ÿ;Ïñ§ð·ßêÃ뽤݇×Ñ?øhï)¿ýᇫ–÷× þñ‡ßx…”ÊûH»‚3Uhù½ÜTÁxWÈWz¿¨‚3U(×{»¨‚ñ¬PŸÁˆøƒcî¯÷ZVyï¯¼Ë ©üºÚûÕwg®‘Ë{º©†1×[Á‡­õ™´‡Í˜Fåªï•*8S…RÞoWcª0žëÍãjLÖî÷ÌÃfLÚ¼¨‚ñªPß{Ú6¤>?×p´]nÈcòz®áE£fÌ5Òs…js2ÞÓ ÆTã¹Ú-=¯‡\׿w[·µŸ,:—Ûûý$§þ^ÆÓêÁÒG}ð9tØßÓÓ65»Z¶Ù¶¾?Ç~ð¹}:•Ž'ya¿ ;µ-/ËÝXú®üà¨TzYny//Õ ¼-7¿·d¸rw©ä&ÍMÈJn–þ>ظmAíœ ú‹Òž÷à”j¹8«:˜KW.p½‹0Jîób‚™ÛvËEа\”ËÝ¥+wuûÇù±r7®\àe¹>Îò8?¸rQz[.ÚÞ–»qåúK®&˽ìEþàÊ}½÷yÎ5[îÆ•‹ÊÙrÏûÀ-X¸mY¯Ä¯uÎuåÞc¾g-l7•6äóÓö~^Åpæö•‡Z/ .¹÷s!ûÄa¹OÀe8síµr s\¹Ï|^Ç7·½,wãà¶·å¢í­¹ ¹ë$äþ>Èý}ÞÓ<×*gÍÍšû<ŠàÊÅiÔ9ÀŒ™ÆêÁ^›åâ4Ú{} Jn×ÜŽþÚ¡†ån”Ü!¹ÏÛ*ó|—¥sî/Ë]o^–›ßë0\¹ÀÛr7fn{[îóJ™7RO–‹ÊÉr7®\TΖ»ñy-æû¹ê« År7æ¾*_ÅÐs ë|ž2Vnû¼_qÛ†\`ã¶ÝrqVÝrÑßn¹Àa¹Øa¹»tåzéxYîÆFmÇ%÷Õƒ¹ vºFã¶Üœûà s~>K¤"¸rÙr7®\ùy¿ª{4F±\¿¯¬—àÊõ›pÔùfl‰°­ѶYî.íܶ#è¹À•ë/«1,wc£s¾^/ ö‘Ì#=yE_–í4™;=Ù{í|£ÛÁšŸ¤ã“sWîtú×óeãÎÊ+ŸxŒý^~½Šå·Ì\-Ÿ8ÓCgòÌßÜV>s½”‡´ï+Ÿ¹Iû±ò™W¾?'{þz]ÏwÏ–ü‡ÇàòKó–üç;•ä?,ý¸Óûz¾ÁÜY¹ÞʃÏÿzÞÖšr“öe~#ŠO“¥ÿ÷ÆçSuüç—‹›û[õú?ßzf>³\ÿ«¯|æLÒÉžJ×5ìþ#®·òÊÇëå~Y>ÊnÜþ¾,Ÿ8eÉÞÅ%ÿáJÏÅɃÏÿy¯JM¹æŒüàòRîôIâz^øó» s½™ëün"œš²æ·#¿!ßû׎þwË'–ñ.ä륬ã?oóÌßÜW>s¹”»´+ŸyæÏ·ÕÕŸçÛÿʯóíñÊ'^ùÏý¸Î·\–O¼ò‰W~ðmùÄσ"?•ºîï’,?ÊÓ2+Ìšÿ¼ÿIûlùÄ}0Ë'ÖüjùÄi(¯ü4;¹Y>ñÊ'^ùÁÝò‰«´–ï¢fi‹Ç×’¤ÏUx®ßü^ôú ³„§"Ì’?”a–ü™ ³ä~f)MݸÍÒÆÌmÝ,ù‘a–6®\¯ ³t³„Ên–€n–6²y€Y&u’0KÝ´ºY‚³r³,èï ˜¥]*†§ªáq³+Ua´ Ý,mt³dèfÉퟛ¥çíñJoa–ò²ÈÛ,¹„YB[3Khëf‰pæšY"Ìda–€·K˜%ïÌÐÍ*»Yfé/ÌÚºYrϳßUĤÁ,Í,.³ýåfiã4„bÒºævÍíš;`ð.Mž»ÐÍ‚Ü,!ÈÍR”šYж—<7K·˜C7KÑ6!¸rýŽu³§‘‘k‡Êš›‘k‡2³„—³›¥(5³¥f–ð¹ßÍ>ö»YŠR3Kxu»Y 4³DØèŒ›¥8”™%*íÔÖÍNÃÍ!K7K„¾yÀ,ùe˜¥Ëx rc ³´‘%ÌÒÆõ •Ý,mdó³t³„³ªbðÜ,EÝ,áÈMŒÌÒFÉíš;4×ÍÒ.ãñ’\˜%à%ýu³„sv³hf‰¯¯›%Ü*n–["̸¯¬mF.JY3¸Y"ä/ùn–pºYŠR3Kxá¸Y"Ìôxr³hf ¯A7KÑÖÌR”šY"ä\˜%æLg ³´ù’>Ã,íö—¤Ã,1·Älf‰9wå.íÍ,1Wú+ÌÒæ‚üàFo…0KÌyðñÝ,E¹›%„Y"ƒ¹ýw³ç3ÐÿàOÌR˜£OÌR°˜­m–Â45iÿ‰Y ³sùn–¹YBÿ`–¢ÜÍR´Ï‡Ùr³D¬fËÍR¯f+ÌR˜&5k ùÁšß‘ïån–È4u1SCÍ&Ìñ3ôÝfÉM‹›¥0Ua–Â$©Ùù²Yò¼OÌúëf)ÆÇͳ˜=7KÌ2þn–675{0KÄj¶Ü,E¹›¥àqä½ÿÜ,»Yb.ô¡fi³™%fé?ÌÎf ç³ìf‰¸¼”;›v˜%âJÏë0KQîf)ŽWŽ|7KѾªY„YŠúí0kn–¢¼«Y„Y"n|ýÜ,íñ7³ÄÜé ³Ä\éٳĜ¤ý¥×ßͳä»YÚlf‰YóÍ,1§®Üøýf ã³D,ã³„ë ³„÷7KaÝ,móÕ`¶œ;Ìš›.3KÌ+?L—™%æÊfÌͳä»YŠós³çïf‰¹ó_ºÜ,1W~?u³ÄœøýÐÍÒf3KÌEÚ›YÚyåÈ7³´ÙÌsÊMÚ›Y óëf‰yå÷#¿ùãèÿ@ÿ_6õj^i–êó¶·§â}b–¼Ì’ßô0KMn–¶hâ9-Û,sìd¥`– ^Ü,A¼¼t›¥Íò‰ë¥<ó÷ñ–‚¥óï–<,Ÿxæ3KÿMÁÆ;+XáÁíMÁîó1K|ëø›‚•ò.íòc2_½•5)Xá&ç¿l<1\ÁÆÅ,•WË'®·òÌÍòãxÍòƒ»åk~·üàaùþ8ôï)R>¸½)Ø]ß,ñeùÄ’o –ÊoÍ7+¼òƒ“öß,qÖþ›‚Ý×Ç,ñR°Â2þ¦`…SSÖüvä7Ë'–ñ7+,ão VXû?4߬°ä›Û#¾4ß,ñ­ù¦`…5)XaÍ_ –8ùKÁËÇõ7+åš_üzä×#¿ùÍòq}MÁ ¯|bÍ–åÃò‰;·7+,ù¦`÷ñMÁ K¾)Xaé¿)Xâ¥`…eüMÁ kþR°ÄåÈ_ VXóë‘_üvä·#¿ùýÈïG~?òÇ‘?4߬°ä›‚%¾4߬ðÊÇýl V¸òû¡)Xá4”W¾3r_œ\Á ÷Á\,ŸxåûwVW°Â+Ÿxå7Ëø™g³|â>˜»åWi?,ÈÏF#ïÓŸºJºM²A%¹iJ‚r•„RWIÀ!J*icg-óRµâ* ÆU*»J‚áq•´ÝÑ‹Îù•´ÝÑG*i£ä†J²³Êªt\%m\¹—ÒAÛªJ§ŠZ1•´±‰ZùŠJÚÞ©ÛW~¿OM%1º+ ’`i\%ml¬ƒ.S ?VIpG|}¡’6JnÒÜ$ýýP%mï”E™JÚ•‹æ.•´±Š²3•´K›ª³¥’¸TVW…ÕUa¹JB©«$”ºJ‚Ãy©Òq•äm¡’üœ¡’6²¢„Jò“4•]€JBå$××TÒ®œlœYÆÙTRŒ•«òÀ¥’vå"ãl*iW®Ú_WI WI—jØÈªÐUa#Ýç*‰PÔ™«$G¨$?T’Ÿ$TJ]%¹XƒJÞÈ}±JÚØ¹meç* OIWIxȹJ"lôˆu•‡2•D(ý5•‡r•„Ê®’pdWI%×Uå*icçsšë*i#çºJ"lÔÖUÎÙURT6•„Ï®’ðõÆUáÊ&Q…®’ðUÙUaîT9Ë÷zWIqV¦’¥¿¦’¢ƒ¦’¢ƒ¦’pºJ"ìôùÇUR”šJÂýì*)ÐTÞF\%ÅG WIxã€Jbîônï*I¸^ÊCÚ߈Öü„ü`Íw•„^PIø(è*‰yðG?WI»½«¤`WIÄy(óЇJ"®üÑ*)ÚwþPIÁãÈGþÐþC%a|L%íñ7•D¼TR¼A»J"^*I8Ó‡WIÄK% ×[Yó—J¢ãgËò¥’¨¼ùK%ŧ:WIš_-?Ê›åûçMWIÄÝò‰W>q—öÃò‰=ß󆿛Jn<~¦’öx˜Jî®7Tq•ö·åcSIÌåRî¹"?xŒ«$âÔ•ÿiÄUÒ>^?òû‘?Žþ›JŠñs•Äœºrãö®’˜Ë¥,ù®’˜§JÙõ“Ž¿«$fÍ7•Ĭù¦’v^9ò ò;­@&œ†²\WIÌšßïÜuü]%íöãÈ’ÿéïD?›•ôÚ? ý“YI¿0+ •]%a*Ñ ¹@Q:®’€«$ˆ—³ƒÌÿÜ:KÇU0©ÒIª°’*UÚ~6+ s–ÖWot¡BÙYi¨$àG* ¥Ms]%¡òG³’¶Y2;*iã ©¦’¶ñp•ãq‰â€JÚÈ ³’*ÿ0”qÔý°2•´K“å¢4ëì Ÿ•„)=YfË`V’?Ö0+É¿0bV’?t ’6òìÌJòwLÌJÚØéýÃUa¡WŸ«¤@SIQÙTRL1•D˜› çºJ‘]%r.f%y\%Å,SI„’›4×f%Ee›•„‰˜•„ "³V0+ 3‹*fËØIºJÚ¥<;*iORªô(¨$”vQ PI{ÞÑEŸ8ö¬$ φ‚JÚ“”êKpPÛ¯ÍJÚȳ¡ ’€IgC%QPI(ýlVæñ8Ϭ¤¨\eÞˆ«¤(ýpV¡äºJÚóŽî$(¹ß3+ •/ÉŬ$ «$øŸ[faA%]%mltÎߥ’`´\%mô!* :¨Š²ƒJBiƒ*²O€JÚø•ïä*)ÔÇK‚C%«J±YI̪r\%ßÒíPIøª•åéÈw•„¯BPIÄìïB%E¹«¤(/:+*‰8eÍ•ô’YI¤–Æ`îGÿ]%qˆ_VIÄ¢²0+)Ê/¹ü1+)øV•…YIÄrý1+ ýǬ$*•‡YIÄÒÌJ"ÎÒÞg%û¬$bͯG¾ÏJŠòväû¬¤¨ß|Ÿ•ýGÿÇ‘?ôúcV±Œ?f%…:ñYI¡>¾¤’„‡´Oª20+)8ùùP9ùP9*Çó>TITßU©¥V˜Û¡ÒTV¨&íÿRIT¿*-T’×Gÿ]%…Šyéý•D,×*)Ê/½þPIQÿÖë•å®’Bõ¸J"–YPIÄUÚ¢’ˆ›´¯Gþ'³’¢¼ùíÈïÈïôÃPÊïGÿ]%EýqŒ¿«$0f%áõƒYIQ~i>f%K>f%——rçóǬ$ô÷«³’bÖ”ÏJ .:+ ³’ Ö0+)Øg%a–(TR°«$âÔ•›´÷YIÄ…gÉbVRäû¬¤8ß¡³Â0+‰XúYI8f%Eù'³’¢üÖ|ÌJŠãù¬$œ?f%7žå‹YIÄ…Uf%û¬$âʳ”1+‰8 eQy˜•D¬ù>+)ίù>+ ׳’¢þþï†^m½ÓýŒ G¿q„ŸùãP[ŽÞÏ-‘.ÞrÔkÄž£^ƒöE l:Š{ÓQ¯»Žz Zü5°í(jìmGçŸxkJcÚšò¾L¾¡†3×Èë›ó®aÌ5Úú¤»kºõ(Æ{büöÞ£l>ŠÑÙ›¢vE½û(j`ûQÔØÛbü°ÿ(Æoï?ŠXï5ö¤×Ô ¼íª1Îü^PitŒ¹Æ ¤Ýa¹F}M²ksç o¥ b¿¹ é<ß½¥¿lÑÔš.ä:Õ/„Ú:–;–åZÇröªoË=ûrÁ²ÜB?–[èÇr ýÒü~,·Ðåú­ËôXÈÓú×c!Oç¤ Éöc!Ïžu¹‡~,·0m‰´/ºÜC/ºÜC/ºÜÀ4&EY–;èMríÇr ½éB¾ýXn¡Ë-ôc¹…îË-`aÉîË-`aÎáË- |Ë-Œc¹…q,·0ŽåƱ܈åüx·ö$]HsJ”®å²ÜÂÔ(Ò>òŒréÿ(G~9ò«.¤9eŠôÿXÈsꔤ¬ý÷å‚».71º.d:Ž…<‡.ä9¹Ñõ›_Gx!Ñɼêd^HtþঅX'WiËõŸœ†2÷þµå¢óŸÌýŸ¬ùYî¿É+?ΧÈB¶k~òPæ…l矆V¾/\;™²]g\¿Íu‡„«œ·•üzOÖþ÷ù£:âaù1c>ð…;-rO«Ò”+-ßu_—í™Mœ†rkÌ·,÷1¹ÜZÞiù¬{Z•¦\3s¶|â4”-ŸuO«"í‹åk~=ò«åÇñšì>9Óódr£å“æç›«(Z>iòöÃò£þ˜Ô]~¿,Ÿ8ÓòG“-¿tO«"í/äKþ´*MYó“öÿáL “On<~Óª®Ÿ-ŸxÐóôžV¥)×Â\õú?¬ùuÞ¸T¿Y>qIʃž§÷´*]¹æ1¿þ gZX}rãöóÿ(Ê%)n?­Š´¿4Z•¤,ùÓªtætä§#?iÿ§UéÊš_ŽübãO¬ùuå3k~}s;òÛÜûŒ¸¯ü}¼>o$áFËGÝÓªT.+ŸypûiUºr¥åî|iþÃ’?­Š´¿W~œÿ´*IYú?­JW–þO«"ùùÈÏÚÿiUªrIÊãb®so>áÊã—×:xÂYοÍõdˆ»õ¯ÏiU²ò¸˜×ހ•ÛO«ÂïÇçK¹ æËò‰%ÿaÉŸVe(WZŽòžV%+Kÿ§UáþO«R•KV¯X>±æWËó{Þÿnå&çÿ¼ÿ5å"ã׿ ânùÄ•Ÿ§eã?,ŸXÆÿùæ(ùþM’Yòë¥ùW~ÕÛò‰3?OëmùxÖdùQž,ŸxHûlùÄUÚäg~ž>ÜùyZ+òƒKQÒ¾Íß»ÑñÛ‘ßçúLÂÚÿŽ|çqä#èø·—åËõŸ*‚¾O–ûïáÎÏãvëõ¸å!í“åWiŸü|ägËÇ륕ÙQ*/GþRdÄõȯËkìã5Ë'ÎIYó»å—¢<¤ý°|bÉï/ÍXò–ü~iþÃ’ÿ°ä÷[óÖütä§#?ùùÈÏG~ÖñïÅœ±æ?ïUYóן7ˆÛ‘ÿ¼ÿUeí?òÍk?û-+¼–}OÛ^+¾—»× ïâ^+<{-fÙ ^+ؽâ^k×7¯Å,^^ Ÿ«áµˆ¿o¹×ÚÇKrýáµâ¹í^‹¹Ò²ÞðZñ¹Á½s«Ìæµâs„{-æ>˜Íkíü&˸†×"¯ä^k÷ãï^+ÚYÆ6¼Vx¨_Æk1äµv^:ò“ö^+Úç#?kÿᵈ5ß½V”Wõ*ðZÁ ùÁò½Þ½Ö>_óZ{|Íkmoh^k³y­]ß½Vx›×áuÜk…'z©×ƒ×Šú×á•Ükßzÿ}浈5ÿ¯E,^^+¸¨W„×"o%ã¯E,^ ^+Ú»×"Ö|÷ZÑŸŽþ»'t¯Eœ_Ê6 ¯E\¸½{­Ox-bɇ×"Î/>¾y­]žÔ+ÂkËõ‡×Âxl¯eãë^k{¡rxµrx½ªã¯Eü¯ÅÞêÅ^^ ž^+ؽdüÌk1Ëø»×b–ñw¯µùÒñw¯çã^+úç^+®‡{­]n^‹Yúï^ks>ò³öß½Öæ¢ýw¯µ¹êø»×Šëë^k³y­¸¿ÝkÅßáÜkÅßÑÜkÅßÝÜkm6¯Åœ¥½y­`÷ZQß½Vä»×Úl^+Î×½ÖfóZÑ?÷Z\Þ¤}Òþ»×ÚyéÈÏ迟Öþ»×böþÏïõ»}=úo^‹yåû†›ðZ÷eKÃkíróZ»Ü¼s—ö浞=9¯|â•ÿšºàÇðZ̵1›×Šöû‹ùÖ|÷Zûx÷‘ŸŽütä›×ºÖÛÄáµìcÕáµ6›×bžùsÒ7¼×ôW³Âk1O¯±Ù¼Ö>žy-æ.íÍk1¯|â!íÍkíþ™×Šþ»×bžù1¾îµ6›×ŠûÁ½óÌß|ëýç^ksÒûϽ³Üîµâþu¯÷¿{­]n^‹yåãõé^+^_ûÅl^‹¹ð¼ ÷Z›Ík1sþg?¬ùZÙ·¦À|-|oÆ|­ðNM·ÇÂ|-âÔ•e{x-â/y­?¯ÞJ6~Æ|-bÙxóµˆÕ+ݘ/d^óµ¢<éÆ×îµvy>òó‘ÿÉ|-ò\:_¬êÆÓîµöx4÷ZÌ2þðZ¸¾ðZĽ3õ*ðZáU^âÂkèµÂÃ|ⵂoõjðZáÕ’n| ¯EÜx{Ì×Âxc¾±Œ?¼±æWÝž^‹Êeãmx-bÍ?¶ÇÇö8ðZÑ~ý÷ùZÑß!óÕb¾VÌ7zó¥^:_óµ¢ü’ŸÃk8_+8óÅÒ1_,ÉÆ×1_‹XóË‘_dã똯ç_ùRõȯ2_.ækÅù¶#ß½ÍÏÒ|Ÿ¯Çûò|-«¿çkË|1÷ZÛÃ\:þîµ6ß:þîµöñî#?óÅ’lO¯µëg™/¯µ½P‘í©àµ˜ÕëÕÃ+UÙž ^kŸy­ßtüᵈµÿîµp=ൈ§Wv¯ãé^‹YÆß½³\÷Z›oÍw¯µÛ›×ŠÏ |åãs{-æ"íÍkm.:_Ñ½Öæzä›×bnü9Ƚ³x ÷Z»½y-æ*íÍkíöãè¿y­íMÌkmÏò:¼ÊKóÝk1KÿÝk1Kÿ1_ çë^kç™×Úçc^k—›×b–û^ ÷/¼VÔ/‡WªG~=òÍkmnê•ൢ}?òÝkQ¹Ž¿{­÷Z1>îµÀðZ¨¯|aü/ÌßÊ—rëÌ7òƒ _?x­`÷Zq>³ÞðZT.×^‹XÆ^+¸^©Â«„·¯¯EÜÄ‹õÃë¹×ŠóïGþP¯¯^ƽVx™—ö^+¼Î¥^o{­ð\â5ᵈÕ+%õ*ðZÄšŸ|÷ZÄÒx-bí¿{-bõJU½¼¾'Âká{'¼V”»×Â÷bx­`÷ZÑ~¨W× ¯òÒ|x-ò\êu.õjðZá‰îÃ+݇Wr¯ÇK‡WJÚx­ðؽVä¹×¢ò½Vœï'^+Æ£ýïðjÎãèÿ8¼ÚÐ|x-âÊç¯E,×ÿë^+XÆ{­`ÍÏG~>¼Z>ò‹z÷Z\>Ø ¹×Úõ«z÷ZÌâuÜkmîG~W¯ä^kó8òÇá•Ük…÷q¯E,÷¼±Ü_õZáɾÓkkþ½Vx°ðZÁ9)Ékñb+µÿ“_ù~ÿþ¯?}€_æ7¾ØÖø¹w€õòØÖ+а¨=`Qcï‹Ø5ö&°ø¥,vÅ/e÷.°þ‹ÞØ5Ôð»w õô¢~ïKì÷¼QÁîKìç¼QÁíûÙN°øÍ¬o‹ŸÌÆV°^޽`½|ï‹QÁf°•½,j`7XÔØ»Á¢¶ƒE½,FûÁbd÷~°þKÞYÿ¡/‹©Žÿ/U°ïQÁæKìaüW¾TÁ^=QÁäû­=a]ïÝpMï¥ ZÓ tLï¥ Z¬º,K%´XuÕË |ÚÐ¥:Ú±OéBý¥KuôK70êÇ>ýØÀ§ßšß |ú}ä']*¤§#?ëR%=몷&‰éøÇ>&‰)¯èR%&‰…5¿éF½ùM—Jé]—JéÇ>½ý÷¥2pýúÀª»ÆãX*cKeŒcŸqlà3|© œÏ86ðÇ>&‰©}Ò¥JL 7iŸü|äg]*eøRÄ•—¾TqêʲIbaÙÀg4Ý@høRQÿØÀgÄ>¶TÐð¥2ˆ9ß%q´wIõ]Sù%ù.‰‰oé¿KbáV™“åûx»$ŽñuILœ1þ&?ÒñÊ‘_Žürô¿Z>q¹”µÿK k~·ÝÉÓàó]’˜ÚŒ¿÷’ÄÂ’o’xŸŸIbâËò£þ%×ß%q,Îê’8ÖnuI+½º$Ž•n]Ç*².‰‰—$¦úK 7i_,?Ê‹å¯|ß;Ê%1•×#¿Y~œÿ’Ä­1/ILãÑ-ß—ÞrIL<,Ÿ¸ÒÒa.‰÷ø›$Þ×Ç$1ñ’ÄTÿ²ëOåãÅå·Þ&‰‰“åGûtä'ËÇýi’xߟ&‰©~¶üàbùѾX~”W½ÿMKyëœ×Žü%‰…Ç‹yIbá*í—$Þï&‰é|†æ›$.ÜÞ$1ñ¥ù&‰‰oäç—²æ'ËÇù™$–þ›$¦óÉÈw.–ïÏ3ÿT*Ü:sµ|â’”=Ï]ï÷k“ÄÄýÈ_’XXó—$.‰ó†æ›$ŽÏ.‰‰/Ë÷¥¡\ ·Î|[>qIÊCÚ'äk~F~°ægËþË'–þ›$&^’X¸Jû%‰÷xš$nƒ¹ëø›$ôyÈ%ñ¾ßLïr“Ä»Ü$±pãç¡Iâ}¿›$Þï&‰‰oË'®ü<7I,œ/åÆÏS“ÄÂ…ŸÇ&‰‰‹å×Ê\ü%‰…›œÿ’ÄÔÿfùÄãæñê:þ&‰‰‡åGûaùTÞ¸½IbaÉ7IL|Y>qåó7I,œoå&í“öß$±°æç#?ùEÇß$±pççIbáR”5IbaÍ_’˜òú‘ßüqä#h¾IbaÉ7I,œùþ1IL|ãú—¢,÷ŸIâ}¿˜$&ΖO,÷ŸIbâ%‰éøåÈ_’˜¸"?¸Jû†üàœ”µÿýÈïG~G¾Ÿï8ú?ÿÂäFé¿Ibaé¿Iâýþi’XxðóÔ$±påç©Ib᜔;ù—ÄÂEÚç#¿˜#Öü%‰…5 ,q³|âR•5¿ù]ò¿ñ£^_b’¼–˜lÇÆÔŸy-òX©ky/» ñbu²›¼Vx•—zx­ð0—z•ϼVxûðJ·. ¯E,»)ÁkËnJðZOx-,é ¯E,»é¸×b®¼{-fÙÍȽÖÓ¬áG»k7_Ô^‹yåW[Ž^k—ûnB(w¯Åœ:å¹×Â~ðZq~ðZèÿ8vÇnBðZQ?é¬ðZIJ›{-fÍϺ›¼®¼®/¼±\x­ð€Mïx-*ïô96¼Vx¸®sÃkaÉcx­ðbãðJ/Ù˜;¼Vx˜—xµðZá].x5ç[6ƯEåMÚ§Ã+¥Ã+¥#?ËÆàáµâ|?ñZT®ýw¯Þ¬ÊÆäáµ¢}ÓïõŸy­8Þ'^+ÊÇáõÜkQ¹äÃkW>x-bޘݽ•ßzýÍkI¹æ§#?ùY½Šy-òlY½žy-Ê/êUÌkQy=¼^Õûϼ–p~)k~W¯d^‹ŽßÕ+™×¢óq¯Þäux×áU^‡WºÔk|æµÂÛÜ÷6·z x-âüR–뿽V°\x­È/zýáµ¢~E¾—Wõ:ðZÑß/z­¨ßÕëÀkáþ†×Âç4x-bñ ðZáe^š¿½Vx¬›Ï^+ؽ±\x-òV‚×"–û^+ʳzEx-bñŠðZÁõȯG¾{­è;¼ž{­èO?ò»zx­`÷Zq¼qŒ¿{-^‹X¼¼ÚÃk…‡¹àoä‹×„׊<÷Z¸ðZÁó¥,ý‡×Šr÷Zx¿‚× ^^kÿ¼Ööô浄óE0¯µÿ`^K¸dåq1Ë'®ÜÞ¼–p¾”%ß¼Öþ»…y-á•|k¾y­Ý?óZšŸ,ãc^K¸dåA[º×¢ò¢ão^K8ßÊÿÎc^KXÆß¼q·ü¨¿¼•£ÿÃò‰%ß¼–pÉʃv{v¯%\y-á|+7iŸ,Ÿ¸ÐnÓ³åWi_Žürä/¯Eõë‘¿¼–°öy-:^³ü8Ÿåµ„ó­Üùïd浄5h¾y-aóZÂÒóZÄ·å—¢<¤}Òþ›×Ú÷‹y-a¹ÿÌk/¯%\ŠòHt›×¢òåµöë˼ßòZÂÚÿnù1ž]Çß¼ñ8ú?,åæµöõ„×Âû·y-*¿,Ÿ¸å•|[>qí|ütä§#ß½V°{-âR”‡´w¯E¬ù5ß½Vp;òÝkk~GþE“ƒ¿ñ£^ÿ^M^ óSàµ0_^+ؽ¾GÃkËÖZðZIJK;¼æ›Àk×Ä|é.íæµ„ek-óZÂå¥Ü¥}Ò­µàµ"?[>v…7¯%Üèuç^‹Ê‹níe^‹òêÑŸ¯…ñÃ|-âÔ•e—vÌ×"f¯󵂇x…˜¯ÞäuÌWzéÖR˜¯Eó±Ä+Žck£ÏækÅ|©Oæk…JêU1_‹æg}8_+ڻ׊ò¢[+ÁkEy=æ‹UÝÚ ^+úÓŽþ7™¯^+¸óÕ>ñZÄiðù ÙZ+¼þ¾ ¯Eì[+ ÌϺùïÛðZQ~‹× ¯y÷‘ï^‹˜çË}:_+ʳô?¼|>¼1_ÿðZÄåRîì…àµâ|šzx­¨ÿ©×r‡×ût¾–{™æë«×¹¯óá|-â[ç‹a¾VÌGòùZÁ阯äóµ‚}¾VÌòùZÄ:_Ìçkk~9òë‘ïóµb¾Y;ò}¾VÔ÷ùZ4ëâç8¼ñ/6ŽñÇ|©×1_ê¯åâÕ~¹ùZ>_,éõ‡×"–þ›×Úãe^KÊe¾šy-áÊŸ£àµ"¯ÚøÇñ—×"nGþòZÂCÚ/¯%\¥ýòZš?,÷‹y­]¯…ó‡× ¯tÁkxùux¥ïôZç|­Ók‘Çú’׊ã•#¿ùõȯÇ|±ª^^‹X¼ÒW½VŒç€×é2_‹xyÜ_浄e¾Œy-ò>×áu.»þÁ·y âuÿiŸ,ŸX¼Žy-añ*浈ˑ_ŽüräÙky¹{­/÷ZÁîµpÿ¯× oò:¼Ž{-bõJ×á•ÜkÕùKž·× v¯E¼òƒÝkçK¹ñü_x-bõjYû¯E¬^¯^Ͻ±z½O¼Vx´¦^óµb~˜Ï× öùZÄùVnÜóµˆe¾ækáõŠùZÄ’ùZÄY¼Ð½±z¥|xµ|x%÷ZÄê•Êá•êá•>ôZÔŸ¯E¬ý÷ùZÄß嵈åúÃkWþ<€ùZÄ2_ óµ‚}¾±Ìû|¾V'¯EœùRù˜/–ùR>_+ò|¾VœÏ× öùZÄUÚ·c¾šÏ×"Öþ÷#?ækù|,Ÿ¯…ÏóŸÍ׊ùU>_‹8'åþz“ùX:_é“ùZ1¿ëÖñ‡× N:þðZÑ>éøÃka<àµ0ðZQ¿àç‹~¼rÌWs¯õ«Î—ƒ× nÇ|5÷ZÄ2þŸÍ×òïûG½÷0ƒÿý[÷~ã?óg½8:¶î¿K®/Þº×kÄÖ½^ƒ¶îE lÝ‹{ë^¯[÷z Úº5°u/jì­{Óó'Óֽδ¡kÊkƒó]Øk<¯ãF[÷:Sü<mÝëüéÖ½?lÝ‹ñÛ[÷bt°u/FgoÝ‹غ5öÖ½¨­{QcoÝ‹ñÃÖ½¿½u/j`ë^ÔØ[÷¦—=¥btŒyüæ÷ںיkÌ_„ÓÖ½Î\cNÞ¢­{ù<ߎmÝëüÍ­{q¾èád^:&½|é _zf2ou5yÐçiZÚ"a2o5”^]¶ZšÌ[ýLæ­¦ÒkÈVC“y«©É’?-ËP®ù’­n&ç[™·:J—ou„ó¹|«#bÞj)] [=-‹6™·:JWF¾ß•üØêÈË‹?®ÇåKgàz<ÆÇ½V\/÷ZÌ•–H‡×Šþ¸×âòNKäÃkÅû£{­x¿u¯ï×îµâýܽV<àµðü€× ׯç^+êwxÅà‘ùø^ÑˇzEx­ð(ūÀkþ;{­Èw¯Ï7÷Z13Ÿ{­]n^k—›×b´Ä?¼s•öõȯÈîüw÷Z»?浘Gfv¯…ñ‡×Šñr¯EœùïLðZ`x-Ô‡×"Ü^‹¸ñß àµ¢ý­ùðZÁéÈOÈrÍÏG¾{­h_Žü‚ü`õzîµpÂkö‚ðZÑÞ½V°{-â\”;ÿ^‹¸tåÁíáµp>ðZÁîµÂû\š¯õo͇×"–þÃkKÿᵈ5?kÿáµp}ൈ_?÷Zq¿¹×Úl^+^/îµâõç^+ÞÝkÅëÙ½óà÷c÷Z̶ ׊öîµâyà^k³y-æÂÏS÷Z›ÍkÅóǽÖfóZÌšŸ´ÿîµâùä^‹YóË‘_Žüzä›×Šç©{­Í浘5ß¼ÖfóZÌMÎß¼Öî¯y­Ý_óZq½Ük1—¡,×ß½³\÷Z̹*w~ž¸×b^ù8_÷Z›Ík17io^‹9Wå.íÍk1k¾y­ÝÞ¼³æ›×ÚíÍk1k¾y-fÍ7¯…ãÃk¡^kó%ùðZÌ<þðZÌe(Úò^k/ùùÈÏG~–þÃk1ú< ¯…×¼s»™Ík1ç¦Üéû¼s})Ú2^ ß'àµð}^‹9Ó÷sx­]n^‹¹¾¸þ…|ç[óÝkm6¯Å<ó÷ñÓ‘o^ ßWᵘ‡´7¯Å¬ý¯Gÿë‘o^k¿ùíÈ7¯þìW¿áµÖs’¼VÌŸªÇ|©Oæk8_‹ŒùZ`Ì׊ùR>_ Ÿc0_ oÁ|­hïóµ¢þ­^óµˆ5ßçkk¾Ï×"ηr—ö浘‹œ¿y­Í浘+ÿ}ß½Vø~Ì×Âß?Ükm6¯Å\øï“îµ6ÌWóþ˜×Šów¯å¼óù»×Šóu¯ÿ ¯µÙ¼óš/l^+Îóµ"/éõÇ|-b¹þ˜¯\ôúc¾V¿êý‡ùZq>U¯?æk—¢¬ù]ç º×ÚåãóZÌÒ÷Z{>’y­=èuÌW2¯Å\¥½y-朔»´OÇ|)óZÑ÷Z»<ùùÈ/G~9æK}2_‹Xæ+a¾ÍÏJ—·#¿#ßË»Ž?ækEýqŒÿ8æ‹ù|-äc¾qå÷SÌ׊ùWæËw>ÿ=_+Xò1_+Ê“öÿ³ùZÄ2_è³ùZÄEæ[ù|­(¯Ç|)Ÿ¯Eó³¾k¾VÌs¯…÷Ì× ˜/æõ‡Îƒ×"–|x­à ùÁ¥)iïóµˆ+Ÿ?ækç¬Üéïc1_ ýÃ|-bé?ækE{óZÏmxÙ|+óZyý˜öÇðZù²_1Ákm6¯Å<ó™g~^zèÇðZÌUÚ›×bžßëç9oç•v¯Å¼ò‰·w¯ùîµ6ßÚ÷ZÌ+?ؼsi4žîµ6›×bnü<„×"ÎE¹ßÌîµp?Ákþ<¯…×¼V°{-â,í»ÎW×"–ù*ðZ1?êuÌ—úd¾ÍÏú®ùZÄÎ׊ò/Î׊óûâ|­ðrŸÎײ÷gÌ× Ïæóµˆe¾"æk…Wëê51_‹xðçÌ×"nü<Â|-â\•%óµˆÅ+b¾¾o`¾V”û|­`Ÿ¯õ}¾<0ækE¹Ï×".<óµ‚}¾qãùçðZÄš_‘ïܬùîµà%ᵈÿ^‹8ÓVÈáµÀðZÄe(K>¼¼)¼V°{-â,íï#?ùéÈOG~>¼Z>¼Ú½Vð½VpƒW4o¯¯¯Eœ›rg/ ¯E\†ò öᵈÛÍ|I~x-â.íoɯE¸$ÖÿõãïtT™¾7á7÷íZ_» áÁòUÇh´ž—ì_<ÿ}pþìwá7Ž÷íZß±Ÿ>À÷Ž ‚ŒÖ/Õ;­Ÿý_¬1ÍÁìÉþw­«*kœkAäõñ?-IþÐz„Íg[[[”:Eé5WP¼¢¸ËçŠee—;îò²VˆŒrÇ(GŸëHwBZ—rÿûÍ šóÚì}m3/ç s÷§>_µç&ðѰ|µáó™úº¨áõåÈë^‹¬RÓ/‡^ÅÖ{¦÷‹îÚ¾;[Äã*òŽñ¼C¼—ˆñ¼A<Êy¿xÞå¼]jûóï·_ê5ß× ·­?­ëð|’ÿòûñj<ÿ7Œ÷þõç€5.wÜϧž?³±™3k<þÌäé ¯ŽÆfr®ë3çº žÿïy1Þ›AŸžl/½dß$÷ÊKV¾^Zå´î’—DzKV¾W]òòXtÉÊ÷šKV¾—\ºÄVGy,¸då{½¥‘;6é¿ï†µUê¾ï~½ædñ÷ëüü2úwÞ¯s¶ò½÷ëüÈqý³Þ¯ó¯qûv4ÚwK_ Ç¢Ôh—^sF˾©|®Ë¹ïEG*·ï¢ëß¡Ü×é×’áWîÕï{~ùÀ¿rO_—^%ãiRžw£>?XΫôÛ¿ûÃïÏ«ôg„Бÿ‚¯µ^¿/‹üÄü—_ýÕÿüõ3žo¿úß¿~Oo¿úý?>øzûÕïþûïý_ß~û×_ÿhýœÓŸ.Ô·IÊë“ʵfqÔõ·…çÍìy³Yß`ñ‘œ§‹”>7YNk,óO¿û§?L9óç•çOQ÷¿+è§W ÔWÅu~ëôÓxžùÏwìËv^ÿ>ÝþË^y­ýöo¶ù²uÿÊûoxËe™|çß~ó/ÚÓ¼¦a|¥§îùû¥žæõ§·ÝSãéžÞ&À¿ÐÓwùROÓº}wO¹§ßñŠùðÃéœ1¿'¬½#֛¿ÿýï~ü§ÿñëçSúÛ¯þÿŸ|ø…²óó†l¶ÿçÇÿá÷üãO}:þ…2ïõWø™ù¯ÿ»ÙÛŸñyü‡ÿ ñá°endstream endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /MediaBox [0 0 504 504] >> endobj 4 0 obj << /ProcSet [/PDF /Text] /Font <> /ExtGState << >> /ColorSpace << /sRGB 5 0 R >> >> endobj 5 0 obj [/ICCBased 6 0 R] endobj 6 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óûendstream endobj 9 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus 96/quoteleft 144/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron /space] >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 9 0 R >> endobj xref 0 11 0000000000 65535 f 0000000021 00000 n 0000000163 00000 n 0000017116 00000 n 0000017199 00000 n 0000017311 00000 n 0000017344 00000 n 0000000212 00000 n 0000000292 00000 n 0000020039 00000 n 0000020296 00000 n trailer << /Size 11 /Info 1 0 R /Root 2 0 R >> startxref 20393 %%EOF rstpm2/vignettes/multistate_fig-2.pdf0000644000176200001440000004707615040662765017414 0ustar liggesusers%PDF-1.4 %âãÏÓ\r 1 0 obj << /CreationDate (D:20190708173847) /ModDate (D:20190708173847) /Title (R Graphics Output) /Producer (R 3.6.0) /Creator (R) >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 7 0 obj << /Type /Page /Parent 3 0 R /Contents 8 0 R /Resources 4 0 R >> endobj 8 0 obj << /Length 15842 /Filter /FlateDecode >> stream xœÅ}M%IrܽEgSŒÏüHHJH¸ ÉEÎKì,¥ ‚ôëîfæáY;ÝSÓÛK¶‡Æ•ïed„›¹‡»g}ùË—úòÏ/ÿóÃùrÿ{)¯¥àŸY†ýç—ýç·ß¾ü×—ß|ø£þê/þôåïøP×ÿ³¼äø{}üg¿ø‘ñgÿÉþ¿çËÿþð×ûR^þáC}ùËõ¿þPýëþã‡O|õŸÆïëýõž/£¯Kµ—:æk›/õî¯GÿŸX^ïÖ^ò¿ö?}ï~êÊëìûÊ›[àÅúzµ—ï?Ôó~mEø×~Á³Ì׫ïÄiÀ¸_¯‘§ë_3 ¶G{‡nð{£×Ÿ×r¼Îs Î#æºË;Î#RSz?ïxÿæqõÇ]§›jçsZ€Ó€³>§x8ê|L ± ëæ¾'ÀtK×xÌ `¾åv½Î+M pq¶ç´§Å—Qþ×–~JÜüX÷tÚ­þZo@»ÈX¿«^}á¼}ðùZíRkß8¼^Çé°úàûõ¼v»Ô¬¯µ:\ dÁö:ºÃ«ì¯ç±àýZüÓùZ.‡øÛãu‡‡z¾žÍá}¼íûg/¯Ý~Ʊþ{8<íÊk7ëR6Mö·G÷-¿àðÁãµ7‡þèùzØ¥Úk³µt¯÷áðpx½6»T·_pýœâpØßž¶ëúL®ÇÑìRöü‚ÝîÛ ßÂ9lFgŸ¶´<|-8ìŽÎóu6‡w5xÙ%g?ì·þúÃU^ëáð´/ºÖ­Ø¥üa,ØlF N»òZYµ;¼í¡\ëÖ#ë—Mè‚ë§Ã˾èZOr=²µ•üö¯ûuT‡‡Ýà½ft]j- â°½–éÐgr™„~:ôÛ¿×®K­åÕ¯¥:<ž¯Ý.Õ°rîËÖ¬A\j=ØÓ¡?”ZÖEìZ?«–õ<ªã£:^»±;öõP‹›Ù¹o?»É1|NÇk9Ûõ¦Máu¿ÕñôëU7»†}Õ×Zm7ÌqàQÖº6Ééß_×.)ŽoŒŸfŠæÚ¾ k]f8öYëšýõoÇk§\އ_¯­­RŸþy[óÒÜ*W|ÞíÉþ{Ú´ Ml8Ãk¡¬ë-;Šûkþņ‡Ï‡í²æØŸzÅΙ¶Cý÷®Ý°©aŒ_ëÿ¾ãúkw»^{­þ<Ö:=šã¿?Ì>Æ|¯åÕìz‹½®5/ÇÝçk­™»8>üú÷ߜNˆ×ÞŽ;ðp›µ0æM¼­…o|~ºÕZF¤_n¶žŽmb¦cÜnt.+Sü÷Ø¿wŸÿua3] »e­ëÍv-|ûü®ÿã´ë¶Œ _v£†®·ÌØíÏsY¨Ó®wa#ÕEš¥;Æý-Õ§ã‰ñëFOÇØËJÝv½Ûv«áµÐªc·–uÙ©£;Æü,Cet¶ðå×[<ÖÖõÖÏÀzsLNcŽ?ú‹_´µcþÑTMsöØÿšªyÆ÷' ‰4®iø—oÒhOÒðGµIã<iÜXH›4|ßlÒÀ`Fwk¤±à¼iT³K›4ªíÌLwK¤Ñì9nÒh6 ›4:¦O¤Ñ1Û"ÁOI+Ò˜Ø "ij“ÆiøU"ÛN¤qÚ×oÒ¸°E7ö”Hã¶¿ Ò0Ó>6i@*iŒŠi'i,8ïMkÓÖ²Ic4,>‘F‡­itR IcÀòˆ4(aDÌ&Ò˜ü”¤qðS’†6©Hƒ´¤q‚‚4.‘Iã×iÈèŠ4nܵHcÙ5’Æäœ‰4Ö Æ&'i, #DÒXø>i„%i,|×Da4I“rC¤F’¤1Ez$ 3Š5‘ÆÂÇ‘IãÉ4!‘Ɖ ¤q’„D'–nÆe-‘†HM¤qÓH‹4(6Dkc‚$I L c~HkçâûH ãþIËÖÖ3‘†9,W"…!"Hk냔I ƒ4IË@”4ÌV·DË8àù“4Ž µ(Ò8&Ü‘Ʋ¼HãÈ i,[R$i˜í¿i,|^‰4–ù©G"…±>I ƒÄHË>õLf¯®D§žIcaÜñš&¬?Ž·i;3 ÑÄèûÖ~Âóãï´Þú½Cë÷c¢'ßïÒÃ| ­'Î×Âe¦ù\"óm"k¦ç±0ö7Ÿ—ñSOÏsáv¦çmö£¤õ°–EÖËés=Ù2»Óz[ÿYÄ,ÜzZ¯ c¾¸ž×08×»Ù»3퇅±?¸_L´^i? ‰î·¹Üf]Ï´_~ˆ@ ai¿/ŒßG{`?»'{1$ÒhOL”_ÉÞ˜é?’=ó'‘+Q(ÜÁÐ!’åHD7‰pŠì/)Dxãú‘HopPBÄWý=E~5þÚö|HËI¨´§r" |ãà‹ÂùŸx^Á7éä# cd¾²Çx&>3ßìÞt'>'®‡|¶M•‹—Dº`¦ÙNŸŸ$lãØ½ {;$p,—í QyŒ\ù“Œž¼Í‰_%_tbÉËS”$ª\‚e`=KÎ ˜‰Æ¡$…:nAB©c/IF‘J%²š)±-Á&V­‚$ß*Ì Ä]Å*–ô«ØT†6X²±`ÉIT¬JN‹bؤ µ‡«×ˆq@ÛF¤æø·„0ŸþŽ­¸¸Û"Ú-å–Øn(·w#y~B–$ñîƒw<È~FþÚnýªzùîM µÙ¬–RÍç¸ÌçxWHõc—úÎ.T÷e~¯Ðj[¤²H$|Ä;Ø×®>S’8 X4ðœ¬Íx¦($ñ­òFZËNN!iRb€B­iB©{C­iÄ„VÛ(ϻ޿¹­üœn +qß”Vf X{ðq×À)z[=ºµ£·•Ñ.…VãžiÝ·„Xj|ÎHkºe„R÷¤0ÔšF@Ëì µîZcŸ ±Æ$`[Ä`Ó8ÜÞ²AוØpSˆµÛ¾ï±Y :‰`+<÷Fï~=Ì€AÿÕ0ñb™ƒøÔ Lïôâ`~ Û[îfP¯0]ïbíË6û¥`öºÙõí-t#“ÙEx° µ[ôr›[ƒp­Ý÷NÑ SÝ{rƒð‡ÝÌwcÜí-÷5û.HAïbíƒ7zéƒ><ȧ¯gãâÔdÐ)ˆ«ñ˜ÓZ7euétáJìƒ^:³K6‚N ºêÙv¹;Äj6ï ¢v²i¼¯§îH¾OÅT]ô„@èæ>Ö©V\]ô9¤6\}ôÉgHubÞÔK·UÓ·ºéSjêÇ0½mWG}‰nª-7¿=BZPW}òÆ©¾ºy)Äjx&õÖ×ʃwug˜jÏÕ__6Þ Ô¡á !PWý`ìžêÒ0ÔÔg_kwâsW§ý`¼žêÕpV·}­f„P¡~ SM»:îËÉ¡·ëêÙð‰ªËÖ~h~ ¾ 3„ê꼯ý@õírÌ0½iW÷}m–¼eÃô~Ý;è'Ãñô ŸÉ[63 5 ïÃ0¼?x'}m1¨ux/†áÁ»ékÏ!$ ïÇ0¼MxGýœ|žðž b5Lï̽¯¾6mOÞ™a†l]®ôµ‹³·lÑx}mkx;ð #ÄïÑð¼Ë¾È!{xŸ†Ïä-÷«È›vïÕðLÞ­aDsàýöe8zò– Ÿ?'Äê,Ñ#Äêðx’Æ‘Hã†ìÞ¤˜j†G&HŽø& _é"йIÃ.D-ŸËàR$Î,Ic@†Š4&u6Iƒþ¨Hã@øH¤Á#‘Æ…)Ò¸SiŒ‚ÍEÒ°pe"Q±´Hƒ‡"Ng€¤1°.EfD¤q`ˆ4N0ªHƒÜ%Ò í‹4î|.g¶ÒX£%Ò˜Š©‚4,Ø7iÌþ ;)‰4hiððJ¤q‰4µi\Ðs" F‰Iö [" 3Âé\ÎðÝi˜hn‰4Ö£Æ&$iXíN¤qLnZ’ÆÁSu‘†ÕLkoÂ¥i\"’†6¹HãfH¤q…\Akï‚ôH ß)ĺ"Ic-¡Ñi¬5TÓ¹\ÇšÚ¤q¾! 3r)dbF !+’Æ©Iã¼!3RõJ¤±p鸑J!3Ba‘4¾3i¬•zdÒ¸ºBª µtaÄI×йHc­e=’ÆÅh€Hcá#…XûuÊȃ4lµ§«a„¨I—B”$…ñûIk?%‘Æ-Ò#i,|¥s¹¾6ÌL!Ö¾v Hœ¤qwÛ4n…°H÷TH¤qO†€Ikµb5Ìs<ÆMi(Ò¸™O!Ò°]˜ñ¡õÄñ‡æŸ×[˜!R|ß¡#þž…kþ½Ò¾Óý,ŒõÍû5‘t¦ùX¸e’5ÓÝÓ| 9šos\Ïô£ýj"9‹À…{‰vΜEädìMöÂΩK²'kZït¤c×§=š áÒ^Ù¹yMölÒ“½›CööÐŽœRƒaØ?ÚÓI9 {;eOhÆ÷Ó^¯Çжœ€Ê#%9 UNˆ¢#::ä}ñɸyB¾‰#ò‘ÔÄWCö”|fy‰î3iH†&®ê¦J7’Hm‰]›f—p‘‚„-X•ü:%¤Èë$ú„¤wyŒô½åO6ܤ¼Í›._´òo):$+(Iè@J°ºÓ3kUŸIì,èlH)´Ö¸{4J )SFu.eyæ'v¦üö3)¯þÏÉçŸOqGWAÒFM¹>’Qb‰JâIrÒÀK¶§\å9¶ÄlÅî–Ôå\I*߈­”§à{g1ì0MðºC¬â±ïÝŸ”=Ñ•ò„¿Kûg,éwC¬Ýmæ—ˆ°~äJ_4Àz¸ìÞ ”TáŠÚÏŸ§kâ‰$N@Æ{€ÈYáUÜ¥¢«m™ÌeMø¹‚­i‚©1€±Ö4àÇÒV}±¥°&Öž~îÚÍù~ÓÝ´ûy»í~s»æçÛN¡Ûz>︪n‡QÖ}7ˆ£êcYÓÍ"гÁ k@õ¢Œ±îÆ`Äýc—Ôpq}Uå‹b‡U…I±ÿ ^;É "®¾wkáûÎ6Øv’Á±3 "Lê6Ãà½mjX·7Ý*À‘äe« º³Kf’ n;gùIn ž;¦ZÍß1UƒmÇT &ë[#OÕm³i‘º-·Aÿ‘°ë“Õ7xïc7Ó5…cÔÈbu>1xî˜j³Aç"ƒ.^ÀT]«Ç ^û ±ŠOÀ݃! úbtYv5q–2 zr(˜Ù ¯ð¶Ák»Ç&ôçWÅ  Âñv½`ðJ1US%ÅT ÷”¶jr rÅð™NŒ«Å1Ê–;†[J[5œå’á#¥­V>(·LÕÂ]‡3Ü“{l˜L.ç ÃýÜ3|'9hªî'ä¢ážNì]U»Ü4 ù9j*÷¹j¸%9k˜×»QD1x=ÈaÃ{ØI†Ã…œ6«)£ÁpOrÜðLi«†Ï”drr¿*ÎOwÀ0Üi¸ †ñ<àN>RF‡aÜ?ÜûæîJŒ5¸3†n»c˜i¥î>’»døJH†1p·ì²poáŽîÉ]3̘¬»s52âàîUUÐ4̪»‹Õ2n’{l¸¥´UÃtŸÝ5<“{l˜î§»³†áÎÁÝ5Ì«3ˆOK}yLusÈ&þ$-Ëœ%ʃ4Ü·"itf7mÒû Îà¹âjœ¼‘4*,Hƒ¡x‘Fã!I£1!–¤ÁT‘FÇit\J¤Á‘Æ@8H¤1Ÿ¤1YAÒ˜ù .¬µHãÀ‰4NÆEILuiЭi\9m5,®Hã&-4HÝ$ Kš›4Fy†íËí¹}ܵ}{4”ÿCÒôUIk‰x¶Ic0BÒ0K¶=7\û ÎíRÙ¤1˜æBÒP±I#ŒŒHãI4,¥ Si©$“i¥" &li\б’4.Å@IÚ´"[iN$ ¥%‘4ÌçN>¾aÆdA³êडCJ‘†ÕdÒ°Hwªu0HÒü½J÷×ýHOë~ §sUš›æK‡fšÏ©˜oq=iÇx^†óó”€×óî4NZ†³È0<Òz2œ×›á”F]•µ§õjõ ©vÇqJÓvÜÒ~ÌýÒ•FÊý´1öÛÆØûï±_7Æ~Žïç~ßG{Ð%"i/âþhOz¤ÑÃÞt¦‚Èuf@É^Ù|§3"Ç3Ù»x^´‡]¢–ö2ž7íiªMƒ½µõ’θ§Ä Ÿ†lÏ ÷dïmý¦36Ç)¦Z•g)>éãÉ7]ö•|Ô•8A¾2œùLÞ¦|$©Èƒb’¯ü+öÉûê°ÅòÍz.8tí37E›Ó›½¾ŽûOØafå12YXþdŸËÛl ¢ÒmØBòTEýØÕ/ÁB{(9Ób¥Ø¡¸“jð€$”x>%Åœ‰,ZbI°Ê<* 4ò¬äú$îXá'éGA*aX˜ÎEÙH?T¢²`Kr*_€‚TÊ—r•>®Ä,#ô;>RwÑo *drcEEt£ü§ÄVu×ŽÚø¾ÛòüØi«=¦³¥ýÎÀÛÁ£g,)ÇTëåûø“ ÞUý‰k}¡¸ª¾EM,ê¼ÖIj ÀÑ€#RWP[Øm4B}4b÷hÕZ”§§òô†s®=8èËx¬e#ˆ?Ú fø~Þûn  ê  »7€îLõñº³Ý@#Ô@#vwŽˆö‘ÚT;“ÎåýÀyv'³g88ïÇìçùkîîùN#>så¯ÚnO™¹°Å«¹qò¸§gÖg:™ÝÍsŒñÞGÀ0ÈðŽÆ nK–ŸîYý ;yµâSjØÉ©O?3\0ÞUÓlŒ6[ÂÅññ§…º »xlÅUµaª¶r#o~"¢ÐjEZý„øiµy±ƒåýúõª;Ö†Ý9mëZ©D£ølõðJŠÆâN®ßŽ=ÄÛÙ[FcvQkÅË4þÚVű°G [óPÛlô3[sÓ°ÓekžIbØ9À‚éVCbÙó“gÃ×óä#Ãey­Fe}¯ËÖ=ýÏ0®æ5<ñùðÓ4~ÿKŒYLãác³RT\ÏÅtC_Ãø>»ÌF‚k]v†k8Ôœ˜Þ©`Ø#tÍ2n›ãìIá†q¿¨¨7Ü€=ÔdØ#jmzOØ_Ë•µë1`ЦOœc¿¿éÎ0Ö—¬_Žñ{a± c¾¦‡Êc¼Ÿ)öÈ{;üֱϊ c=žPíŸ{`ÝpÇß^Ö˜€Õqvg­ž äØïwi„‰ëaÿœN†±þ-sû÷Ÿµ ¬IjçD©#lí/1 »1ðö1¦!ü êø`˜&#Ëa“a“at=1Œ¾O £ß#†aÇ¥`݆aú`͇¦!¼ Ãò²`žiÃ4(Ö`¶ †i8K†iÜ/b˜†ði0 ‚aºˆ £õ$†éd\1 ÏTƒaXÉ Ãd°`*¾`˜{ êé`˜N .†éx>Á0ö+¦cýÃ07-†á`†‚a †aaU0 ³‚aQ Ãpk0ÌàýŠaŒ¸²J^ã7Æõ Ïô}ã÷lŒß»1î'®ÇûÝó±1æËð™æÓpžïñ<*Ë ô¼¾óó¬l£ç]ÙŠHëÁðL륊¯¸ž*[Ui½Uv•Ðz¬§Ök=ŸŠ©žRDXï¥Ìû¡Š/¹_*Ï´µŸ*Ëý´ßª<<îÇÊâsíWÃwÚÏõD8SûÝð™ìÁ£%{aøLö¤žTà´7õ”½‚=RV”ì•á+Ù³JVönað?íaeî‰ìeeWÙÓzq¾io+«¯eÆ|Ñ^× û_ö|á^“½¯ìç&>¨ìú#¾¨í/ù¤2‹S|³0ù|´ð•=¢Ê\EñÙÚ6xÞä»z‹?Á‡õ~zd ÃÃ!ŸVvÑßV¦\‹+¯‚¯‹Ú©¬Ç ¦ÓÓÇÓ•ýBh<²e cýÈ£bj~x\ìCÙGFmÐC•G§³iy|S×£G8iïå1Nñ1=Jyøò8åáÈ#=ø{ä±R1‡G«³ y¼Œ-†G¬X?õLåk¤w*ûªJElz ²lë©ÊêQé­zËC§+oôšS¢¯ãD½†áú‚š ÏäŠ;NÔ^ãÔ_#ôi`¸'WÜqÝÒÂ0¤+¤‡ã¶¥IcKHÇsKÇuK/æJiX,î éä¸oiå¸néU›¤ ¤™ãsK·‡ vŽÇ–~ŽÜuièRÐ¥ccYHË!= _)Ø›pGyLàêQ7¤oúüDíMà ¥9]Zïï‡ôNØ¥ùþýîûþ í§Dß=p ö|ÁuØó ×Â1\w=üyÀõhh—£ç×e??¸65Ò áú8N‰¾5ûá:Åz¡kUš£ëåiVöm>\7_ŸpÕØ·©´®ömÊ5¿`ß&]Y¸ŽU…t-«¯èzVI/º¦ŽášúÆòý•}'WÜ1¾Ï5jìWºÎU‡‡t­c“o|ÿ——ŸìMŒÓÌ›†ÁÝÍ0דafJ pœ‚½Î@ç“aF öV½a2æV¢F‰-böþ †aÝ|0Ì-1M†¹Þ0Ì%ñN†¹è‰aÄpb˜K¥#d»ƒa.ËÄ0×ã8ÑqÏ s)Q— Ã×3ðO@0ŒT C± s½a%.‰at¼+†¹ä¬‘aÄÈb¾1æâÃ\ Ö’a䌉a.%æ’a“a“aâïÉ0q}2Œ¾_ £ß'†ÑïÃèþÄ0º1 ›¯ðWm0 ßÊ £Ä/1ÌEÆðyK0Ì¥`-FÏ[ sñ8K séø s©4… £ãY1ÌÅ`ŒFëS ÃÚ`6‹ †¹˜ø,†Q¢™†ï=†Ñ~ÃÜ*-!ÃðÅÁ0R”b˜[‰„dW‹angÅ0JTÃè¸[ C{ ÂÓ`˜›Ág1 ›ŒÃÜdP1ÌýHÌôZØ”è[{”–€azyÿ¼²6•’T½W £º\1L/:®Ãô¢à.FU¾b˜^`Ä0‰sblûÍ0 ÐÅ0½>}½¹'†é ž‹a:ƒçb½hG £4 WηÆ×[Á`\¯²¨¾¯Þ Vã÷Ô[Ç©ø½õV"3î§ÞD_Ç)ømøN‰ÑŽ{šÏÊç«ùVzE0>C”Gð¾ª)ƒC¡8¢ÔˆŠD‰‘R,*õÒzSº‡Ö£JÅ´^UJ¦õ¬ÄJ­wþh?”G°×ñÈûI‰˜Úoåì­*ŠýZÁ^Ç©tÌðù°:쑽(äSÙ“¢à/íM‘‚¥=ÒaŸì•dÏøÚè°wìuöP‰¢²— ¶Ëžê0HöV‰¤²Ç ŽË^ë0Sö\ÁpÙûªÃEòA}†8¾3Ÿ°·nð ‹‚š<ò•‚…â³&>"ß5ÎùE|©t&ñ© ?Ä·*ÔëðX|Ýø|Äç NŠï»ôõ@×a2õBW¢.õ„Ò±¤7ØZ"ôˆ‚ßÒ+ì…zf<‚½†yN=‡íÔKQE=5 ¦Þ\ÒcòP¤×è!„ž£‚½7uØO=8¥©éOêI¾N2ô&›Ó…=,¦^=Á^‹`Ô”èë‡>yÒËŠ¨ìˆ ƒ¹Ñ)ù¢*z]¯gÜz}G¶Þo)Ñ×ù:†þÏ«ì þ~6Îu[ÿEš<üĵ¾Xó\|‹š<ŒËÍdjòÀÑä#R“P“ØM4BM4b7y°Vò%7hN Fq#ˆó¼°hþh“‡˜áûyï»ÉƒF¨ÉƒFì&º3•™êÎv“P“ØM8"š†±¾ÐÊј¯ú:Ü…1ŒûÁÌ ã~ìõ,ëy–Á÷ÞêÎ0ž¿µ:쎰¿±}Zã6`ÑÆï;}b »=§oTÃØk]faÉ4ùÆð|_ì÷É0ßÿ^ Óß0L{2 g3Ìùd2Îf˜ûÉ0džÅÛ ƒhùfXÐÍ0hË!†Qjµ†§ƒ‰aÈ·æzÃ0°ø›aæƒa¸¢‚a&‚‰aÆ6à u\ 3yÿbEÿÅ0:mÃL&ŠaxZ Þ‰Á0ìi 3˜x(†º†¯†aˆ`˜ÎX–†M‚a:^ âÊ`]Ã0q+†E›bùÎb˜ÆÄ31Œ|w1ŒÅ0íöÄ0ŠUˆa Ã(ö"†Qì'†=yƒaÔÞN ÃFÛÁ07æ7†ïÁ †aâR0 }µ`½1Z sÒ‚ˆa¸Ÿ‚aN·†MU‚aXd #†Ã0‘>æxÃ0<͆™z+5†‰cÁ0<]†acø`ž>ð0P Sù 1L•E%ÃTöÄìǂLa”x'†©] †©LŒÃ(ñO Sù=1L¥ÅÃTÆfÄ0•‰õb˜Zõ¶H0Le¢±¦²­–F‰¢bc螦²-–¦21[ S{ÃTö ÃÔ¢×U’aÔéQ £îb¾‡KÏ=¹_0Þ°Û^oÜ|)=¿Ïð™~ϸ¥Ðð{ c>q?†=Äû÷E†Ç|†¢Á|ûæ|c> sÏ·aÎ?Ÿ±ûPE¯+¡b`ì<_ôŠƒ¥¡H˜ØŠ…MRBÑ0q4O—B¢"êü}RL±¾©¨èq„ââi¹öKáé±ö“Å®´ß K³´ Kß´_ Kë´Ÿ‹ž÷{a¡ŽìA¹d`/Š^°M{RôÒlڛ³Ù£¢7¾È^±p"ì_žö®R¡Ë26ö’EÿaO÷·ì-ûɆ=f[¾°×|AKØó޳”°÷C×£ÇÁ&Má‘0û <íy4Úòx´?ä±›xL,t JÏC÷‡øÒøáL|ZùÞBñm½é“+ÏÞÄ×qv#>×Ù†øžg ¡ÊT‰ñÒlz£ò÷J°)ôJx´UM–8žz§KOQ±éTè%5ÁÙ{}è-yèÒcì¹"ˆ´‡ÞcOúЃ“g[[/â,iëI:숲=vÄéU²%=‹ëm½‹ˆÂÖÃ8«Ûzg[OÏ·|zœz{G„üû·žÇý%½ï¿'ùˆ0½õÞúψÖÄ~¿H“‡Ÿ¸Ö—ýF“ÆS“Žˆ&‘šP2zȲº%¦´´ÞTâÜ–ØKƶÔ]íiÉ{xʰô]íÉ^²{o¦ð’ݲ™ÄKà’g%¹d¢®vvd*/éë›É¼D°l¦óÄä™GÉ#™2J0ɤ^’rm¦íŠ­’‰»fÒBˆa†Þ †©ÌKÃTöav¬ £"b1LeQ¿éB›a*óÆÄ0K$è¨\ c±Â+1Leª¦Ò׆aÛ©`˜›±1Ìý8]4Æd¬— s‰¡È0Šå‰aØ–† c˜§ƒÎ0î+¥ÓEÃ`\0ŒaƾœaŒQ+v†q†=6Ã.u3Œ1ì‘bu†{Ý Óãt cøH±_gàÄ0Ƹˆea ‰aœ‘S,ÒãÁ0†Á@`Ã9ÖiŒÌÓBggì±Æ0bq`ø_2Ìbl(2ÌÍØæ¾§‹ífCR1ÌÍ£|'Å.>¬ŒÅ‰/õ“ø”/N ¾íŒÈãŒÊ#d¥`xŒSÙ>EmîjÖ•ïC T±HꉈMSoTîoé‹E§ØoWCâÐ3ze‡ô› …RÝ‚ôReìRzJMv¤·Ï¥Ǻôõš¬KÏ){Kzï LÔUH/2;$ô$³SD£="l+zU Æ·ž…¾ÚD@vÄ…¹ÔË'Ïþ·žf„&ôvO¹]yÀ9"”r9ºêŒrDÉï/ù~½ä/`ü[âÑú‘Øï—hòðéK}Ùȯš<(á4š<ðóhòÀ©ÉƒF¨ÉƒFì&¡&±›<0έޭd‚8@Qà4QÞÀ ðÇšdÇûàËJ}">­LüßVñ3ùXÉÅ×ê8.>oJ"ß7y Ôê.½Ð•¨K=ÁÄõЃzJzd(Ý©©Mߙңœ WŠÚü!X)=¤6gÒKó‘èë| ýE½‡óÔczç‡ôšÞÙ!=‡ÿ·ÚNb~¤ùv³Ð‹|ÇMŠXÀÃÞ $+ìˆG.L‹¶™¡g‘ÞeÛͤ‡K ön½ºõtK…u®ñyèq&Wl½ŽÒŽ!ñwG”üzÛ`„iû øû·þÄ3¢õ öÚVdU¼"´¾Ïë}×  _ËÆäþÄ•¾ûð§¿L—²MfÁäý¯]áþÃZI/¿üîÅOºKüãðB€î ¿üþ寿úÏ_¿¬9ýê_~ø×o~ø_¿ýÇoûõË7kõ¾þÛ—_þå‡ÿË/8 oº$ÿÄå~zÔ»gõÓ—úý§ÕºÊ¬·çõ«¿úö×÷?~øö¾~ùå?k¿Ôm¿9‡øÉ§òS£~ÆâüÔ¥~ÿi$O¤iüó_=§ðKݲ¦0š€ íŠyå¼oÔ»§ðÓ—úySè÷ÍÓçx AÖaÑÅÂ-þÛùïóÕ/~õ¿~Yªç«oÿøO–*øþû¿ùú|ÒÊ÷ßÿqúxûð±ÿ¿Ô<½™w•<|úzŸõsçý#—úrónÒkQã»æ}òïþäãsþ{ÏÑ›9çYã§/÷ñA?wÆüJ_n´xšðß]Î?ÒÏI┿û¿sÌû»qQo·þ8ß|{Ì; 2NÌõý^ˆg¿øpùû(õ)Q|êÒîŠ÷çgCz ?'ŒÏu#§šH÷»ÿýi*ðþ©Í³eŒŠXÀ¾á“ §™4Þ8ßû‡ïBÞYßýõð<ñô§3‘ÖþÉëEz:ù½ù=üüñÚ€üš}žßßÀÏ/ øƒ<ýz¹øŒÇßð«>ãù['G{©Äg<•Kûÿ÷ü•C ç“S r >Ï9ƒ@¦#'ä}žó þ0»¿»§÷Ï¿_Þïô3žÿ@t÷sžÿXþ÷ÃZ½ÿùÁ-c!²ÑýPÒ~Ã7ãÝæ j¤†ŸÿM{÷¦è7ô§ïߨøËÃ=wûËŸùGõ.,ö—ãíd™Må¯C‹vpns·@|®fü<õ ¬*fNŸçNø\ùyêèŸG›@:×»Kà¿ñÊòF©çg­,Kj×g­,ÏO¼?geYLl–ÏYY]õ¾²öçýÉæZd|ï›Ç穹*UòÜ+3×!ãóx×<>OUÈX¹ñ¦y¬Ü]ƒüo¼²–ÔëÇg-¬Ëe|κòPëõ9몞Eù3¿³U¯Öýƒ[,½ÔŠ5ÒýÓx¥•š’«"²Ç^s9ÕŸÇë¬ðyJtÄš—YaÍî4ÇŸë}l½MP|¬±ZŸ“l-‰—œõ*¸›øß–¸ˆú«oÿî·?¼üð«ßüý·/}~þ¯I?á›ô˪÷dz¾Ü•q‚?ÿÕwß}ýbßüío¿µ_ó«ß¼üúÛßüã¿þÓ/ÿòÝËÿúwøôw×»ÿ÷áÿ3ñendstream endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /MediaBox [0 0 504 648] >> endobj 4 0 obj << /ProcSet [/PDF /Text] /Font <> /ExtGState << /GS1 11 0 R /GS257 12 0 R /GS258 13 0 R >> /ColorSpace << /sRGB 5 0 R >> >> endobj 5 0 obj [/ICCBased 6 0 R] endobj 6 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óûendstream endobj 9 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus 96/quoteleft 144/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron /space] >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 9 0 R >> endobj 11 0 obj << /Type /ExtGState /CA 1.000 >> endobj 12 0 obj << /Type /ExtGState /ca 0.200 >> endobj 13 0 obj << /Type /ExtGState /ca 1.000 >> endobj xref 0 14 0000000000 65535 f 0000000021 00000 n 0000000163 00000 n 0000016207 00000 n 0000016290 00000 n 0000016442 00000 n 0000016475 00000 n 0000000212 00000 n 0000000292 00000 n 0000019170 00000 n 0000019427 00000 n 0000019524 00000 n 0000019573 00000 n 0000019622 00000 n trailer << /Size 14 /Info 1 0 R /Root 2 0 R >> startxref 19671 %%EOF rstpm2/vignettes/multistate.Rnw0000644000176200001440000015377015040663044016413 0ustar liggesusers% -*- mode: noweb; ess-noweb-default-code-mode: R-mode; -*- %\VignetteIndexEntry{Predictions for Markov multi-state models} %\VignetteDepends{rstpm2} %\VignetteKeyword{survival, spline} %\VignettePackage{rstpm2} %!\SweaveUTF8 \documentclass[nojss]{jss} \usepackage{amsmath,amsfonts,enumitem,fancyvrb,hyperref} \usepackage[utf8]{inputenc} \VerbatimFootnotes \usepackage[margin=2.6cm]{geometry} % wide margins \usepackage{wasysym,bm} \usepackage{tablefootnote} \usepackage{algorithm2e} \usepackage{graphicx, tikz} \usetikzlibrary{arrows,decorations.pathmorphing,backgrounds,positioning,fit,petri,matrix} \usepackage{xcolor} \title{Predictions for parametric and penalised multi-state Markov models} % Transforming parametric and penalized hazard estimates \author{Mark~Clements\\Karolinska Institutet} \Plainauthor{Mark~Clements} \Plaintitle{Markov multi-state models} \Abstract{ We describe an efficient algorithm and implementation for predictions for parametic and penalized Markov multi-state models. Predictions include state occupancy probabilities, transition probabilities, prevalence, length of stay, relative survival, screening sensitivity, and costs. The algorithm uses a system of ordinary differential equations to calculate the predictions and their gradients, with standard errors calculated using the delta method. These methods have applications to a range of disciplines, including descriptive epidemiology, causal inference and economic evaluations. } \Keywords{survival, multi-state models, Markov models} \Plainkeywords{multi-state models, Markov models} \Address{Mark~Clements\\ Department of Medical Epidemiology and Biostatistics\\ Karolinska Institutet\\ Email: \email{mark.clements@ki.se} } \begin{document} \section{Introduction} % Model fitting is challenging for interval-censored, where the likelihood requires integration of the hazards. \emph{Multi-state models} form a very broad class of models that includes standard survival models with an initial and final state, competing risks with multiple final states, and illness-death models, with an initial healthy state, an illness state and a death state. This model class is useful for representing movement through a discrete set of states. As a motivating example, we are interested in the clinical pathways for cancer screening, diagnosis and treatment, taking account of utilities and costs. Using observational data, screening or treatment assignment may be confounded with patient characteristics, so we are also interested in using standardisation or the parametric g-formula to adjust for differences between groups. % Should we use the negative biopsies as an example? Predictions from multi-state models could include: transition hazards between states; transition probabilities for being in a particular state conditional on an initial state; state occupation probabilities for being in a particular state given an observed distribution of initial states; length of stay in a given state; prevalence for the live health states; contrasts of these predictions, including standardisation; and ratios of these predictions \citep{Touraine_Helmer_Joly_2016,Crowther_Lambert_2017}. Much of the literature on multi-state models has focused on counting processes \citep[e.g.][]{Andersen_Borgan_Gill_Keiding_1993,Andersen_Keiding_2002,Putter_Fiocco_Geskus_2007}. For implementations, \cite{Allignol_Schumacher_Beyersmann_2011} use the Aalen-Johansen estimator to estimate transition probabilities, and \cite{deWreede_Fiocco_Putter_2011} predict transition probabilities and their standard errors for transitions modelled using Cox regression. These implementations can also estimate length of stay and contrasts, however variance estimates would then require the non-parametric bootstrap. \cite{Ryalen_Stensrud_Roysland_2018} use stochastic differential equations to transform non-parametric cumulative hazard estimates into a variety of predictions. This approach is shown to work for Aalen's additive hazard model, but it is unclear whether the approach extend to Cox regression models. Their methods are a non-parametric analogue to our development. Parametric and penalised survival models have potential advantages for multi-state models, including the ready incorporation of time-varying effects and for predictions outside of observed data \citep{Touraine_Helmer_Joly_2016,Crowther_Lambert_2017}. \cite{Iacobelli_Carstensen_2013} simulate from Poisson regression models on different time scales to predict for multi-state models. \cite{Blaser_Vizcaya_Estill_Zahnd_Kalesan_Egger_Gsponer_Keiser_2015} provide a simulation framework for multi-state models with random times based on piece-wise constant hazards. \cite{Crowther_Lambert_2017} combine parametric time-to-event models to predict transition probabilities and length of stay. The authors use simulations, with variance estimation using the parametric bootstrap. None of these approaches scales well to allow for standardisation across moderate sized datasets. % heemod - discrete time Markov models % hesim Predictions for Markov models can use ordinary differential equation solvers to solve Kolmogorov's forward differential equation. Recently, \cite{Jackson_2016} predicted length of stay using differential equations. \cite{Titman_2011} also demonstrated that the gradients for transition probabilities (or sensitivity equations) can be estimated by augmenting the system of differential equations. Variance estimates for predictions can be calculated using the delta method and gradients for the predictors \citep{Gentleman_Lawless_Lindsey_Yan_1994}. This provides an opportunity to efficiently calculate a range of predictions from multi-state models. We have two objectives: first, to develop efficient methods for predictions for \emph{smooth, non-homogeneous multi-state Markov models} with variance estimation using the \emph{multivariate delta method}; and, second, to demonstrate that these methods support the use of multi-state models across descriptive statistics, causal inference, and economics. Importantly, our restriction to Markov models is not a heavy constraint: \cite{Datta_Satten_2001} have shown that the state occupation probabilities are consistently estimated under moderate conditions even when the time scale is mis-specified. Length of stay, prevalence, utilities and costs, when they are integrated functions of the state occupation probabilities, are also expected to be consistent under similar conditions. In outline, we provide a theoretical development of a set of ordinary differential equations, simulate to assess the small sample properties, provide some examples and conclude with a brief discussion. \section{Methods} % Structure? \subsection*{Assumptions} For the predictions, the main inputs are (i) a multi-state model specification, (ii) the models for the transition intensities, and (iii) and the initial values for the states. We assume that the transition intensities are estimated using maximum (penalised) likelihood estimation, with stacked estimated parameters $\hat{\boldsymbol{\beta}}$ and stacked estimated variance-covariance matrix $\hat{\boldsymbol\Sigma}$. The estimated parameters could be from either model fit for all transitions, one model for each transition or a combination of models for different transitions. For a formal development, the asymptotic properties for parametric survival models were developed by \cite{Borgan_1984} and \cite{Andersen_Borgan_Gill_Keiding_1993}. Under Cramér-like conditions, the authors show that that the maximum likelihood parameters $\hat{\boldsymbol{\beta}}$ are asymptotically normal. Sufficient conditions include uniform convergence, that the hazard is thrice differentiable with respect to the parameters, boundedness of the hazard function, and that the hazard is bounded away from zero \citep{Borgan_1984}. We can then estimate the asymptotic variance for the predictions using the multivariate delta method, which will be asymptotically normal if the parameters are asymptotically normal and the gradients of the predictions exist (see Theorem 3.4.6 in \cite{Sen_Singer_1993}). \cite{Ryalen_Stensrud_Roysland_2018} developed asymptotic properties for non-parametric stochastic differential equations under Hadamard continuity. We will assess these asymptotic properties using simulations. \subsection*{Notation} For vectors $\boldsymbol{v}, \boldsymbol{v}_1$ and $\boldsymbol{v}_2$ and matrices $\boldsymbol{M}, \boldsymbol{M}_1$ and $\boldsymbol{M}_2$, let $\boldsymbol{v}_1\circ\boldsymbol{v}_2$ and $\boldsymbol{M}_1\circ\boldsymbol{M}_2$ be the Hadamard element-wise products, and let $\boldsymbol{v}_1\oslash\boldsymbol{v}_2$ and $\boldsymbol{M}_1\oslash\boldsymbol{M}_2$ be Hadamard element-wise division. We also define $\boldsymbol{M}\circ\boldsymbol{v}=\boldsymbol{M}\circ(\boldsymbol{v}\boldsymbol{1}^T)$ and $\boldsymbol{M}\oslash\boldsymbol{v}=\boldsymbol{M}\oslash(\boldsymbol{v}\boldsymbol{1}^T)$. We assume that $\circ$ and $\oslash$ have higher operator precedence than addition and subtraction. Let $\text{diag}(\boldsymbol{v})$ represent a square matrix with zeros in the off-diagonal and $\boldsymbol{v}$ on the diagonal. We represent a vector of ones using $\boldsymbol{1}$ and an identity matrix by $\boldsymbol{I}$. We define the gradient for a prediction $\boldsymbol\phi(t_0,t)$ with respect to an estimated model parameter $\hat\beta_m$ by $\boldsymbol\phi'_m(t_0,t)\equiv\left.\frac{\displaystyle\partial\boldsymbol\phi(t_0,t)}{\displaystyle\partial\beta_m}\right|_{\beta_m=\hat\beta_m}$. \subsection*{General approach applied to transition and state occupancy probabilities} Let the set of states be indexed by $i$ and $j$. We define the matrix of \emph{transition probabilities} $\boldsymbol{P}(t_0,t)=(P_{ij}(t_0,t))$ as the probabilities of being in state $j$ at time $t$ given being in an initial state $i$ at entry time $t_0$. For smooth hazards, the Markov property is expressed through Kolmogorov's forward differential equation, such that \begin{align} \frac{d\boldsymbol{P}(t_0,t)}{dt} &= \boldsymbol{P}(t_0,t) \boldsymbol{Q}(t) \label{eq:kolmogorov} \\ \boldsymbol{P}(t_0,t_0) &= \boldsymbol{I} \label{eq:Pinit} \end{align} where $\boldsymbol{Q}(t)=(Q_{ij}(t))$ is a matrix of transition intensities at time $t$\footnote{Technically, this is $t-$.} from state $i$ to state $j$ when $i\neq j$ (conceptualised as the rates from state $i$ to state $j$), and where $Q_{ii}(t)=-\sum_{j\neq i}Q_{ij}(t)$ (conceptualised as the rates out of state $i$). % The Markov property is based on a single clock $t$ (e.g. age of a subject or calendar time), whereas semi-Markov models are based on a reset clock (e.g. time in state for each new state). % (toggle-debug-on-quit) Following \cite{Titman_2011}, Kolmogorov's forward differential equation can be augmented to calculate the gradient for $\boldsymbol{P}(t_0,t)$ with respect to the model coefficients. Titman showed that \begin{align} \frac{d\boldsymbol{P}'_m(t_0,t)}{dt} &=\boldsymbol{P}'_m(t_0,t)\boldsymbol{Q}(t) + \boldsymbol{P}(t_0,t)\boldsymbol{Q}'_m(t) \label{eq:dPudt} \\ \boldsymbol{P}'_m(t_0,t_0) &= \boldsymbol{0} \label{eq:Puinit} \end{align} Note that this requires the evaluation of the gradients for the transition intensities with respect to $\hat\beta_m$. \emph{Algorithm 1} is defined as: \begin{algorithm}[H] \SetKwInOut{Input}{input}\SetKwInOut{Output}{output} \Input{$\boldsymbol{P}(t_0,t_0),\boldsymbol{Q}(t), \left\{\boldsymbol{Q}'_m(t)\right\}\forall m, t_0, t_\text{max}$} \Output{$\boldsymbol{P}(t_0,t),\left\{\boldsymbol{P}'_m(t_0,t)\right\}\forall m\ \text{for}\ t\in\left[t_0,t_\text{max}\right)$} \Begin{ define the ODE based on Equations~(\ref{eq:kolmogorov})--(\ref{eq:Puinit})\; run an ODE solver from time $t_0$ to time $t_\text{max}$\; } \end{algorithm} This algorithm could be done separately for each covariate pattern or the ODEs can be extended to multiple covariates by stacking the equations. Using the multivariate delta method, the estimated covariance matrix for $\boldsymbol{P}(t_0,t)$ is \begin{align*} \text{var}(\boldsymbol{P}(t_0,t)) &= \boldsymbol{P}'_m(t_0,t)^T\, \hat{\boldsymbol\Sigma}\, \boldsymbol{P}'_m(t_0,t) \end{align*} Let the vector $\boldsymbol{\pi}(t_0,t_0)=(\pi_j(t_0,t_0))$ represent the initial \emph{state occupation probabilities} of being in state $j$ at time $t_0$. The state occupation probabilities of being in state $j$ at time $t>t_0$ can be calculated by $\boldsymbol{\pi}(t_0,t)^T=(\pi_j(t_0,t))=\boldsymbol{\pi}(t_0,t_0)^T\boldsymbol{P}(t_0,t)$. Differential equations can be readily calculated for the state occupation probabilities. This general approach can be applied to a variety of predictions. The other predictions may require that a set of differential equations be defined for several related predictions, including their gradients, in combination with the delta method for variance estimation. \subsection*{Example 1: Length of stay and restricted mean survival time} The ordinary differential equations in Equations~(\ref{eq:kolmogorov})--(\ref{eq:Puinit}) can be further augmented to calculate the integral $L_{ij}(t_0,t)=\int_{t_0}^t P_{ij}(t_0,v)dv$. The additional differential equations are then \begin{align} \frac{d\boldsymbol{L}(t_0,t)}{dt} &= \boldsymbol{P}(t_0,t) \label{eq:los} \\ \frac{d\boldsymbol{L}'_m(t_0,t)}{dt} &= \boldsymbol{P}'_m(t_0,t) \label{eq:dLudt} \\ \boldsymbol{L}(t_0,t_0) &= \boldsymbol{L}'_m(t_0,t_0) = \boldsymbol{0} \label{eq:Linit} \end{align} where the matrix $\boldsymbol{L}(t_0,t)$ is the the \emph{length of stay} or sojourn time for state $j$ given an initial state $i$ at time $t_0$. Algorithm 1 would be augmented to include Equations~(\ref{eq:los})--(\ref{eq:Linit}) to calculate transition and state occupation probabilities and the lengths of stay. For restricted mean survival times and life expectancy, we can weight the length of stay by a vector $\boldsymbol{w}=(w_j)$, where $w_j=1$ for a live state $j$, and $w_j=0$ for a death state $j$. We then have that the restricted mean survival is $\bm{L}(t_0,t)\bm{w}$. Moreover, as $t\rightarrow\infty$, $\bm{L}(t_0,t)\bm{w}$ will measure life expectancy. \subsection*{Example 2: Prevalence} Let the prevalence for the live states be defined by \begin{align*} \tilde{\boldsymbol{P}}(t_0,t) &= \left(\boldsymbol{P}(t_0,t)\text{diag}(\boldsymbol{w})\right)\oslash\left(\boldsymbol{P}(t_0,t)\boldsymbol{w}\right) \end{align*} where the weight vector $\bm{w}$ again has elements that are 1 for a live state and 0 for a death state. Generalising a result for illness-death models by \cite{Brinks_Hoyer_2018} to multi-state models, we have that \begin{align*} \frac{d\tilde{\boldsymbol{P}}(t_0,t)}{dt} &= \left(\left(\frac{d\boldsymbol{P}(t_0,t)}{dt}\text{diag}(\boldsymbol{w})\right) \circ \left(\boldsymbol{P}(t_0,t)\boldsymbol{w}\right) - \left(\boldsymbol{P}(t_0,t)\text{diag}(\boldsymbol{w})\right) \circ \left(\frac{d\boldsymbol{P}(t_0,t)}{dt}\boldsymbol{w}\right)\right)\\ &\quad\oslash\left(\boldsymbol{P}(t_0,t)\boldsymbol{w}\right)\oslash\left(\boldsymbol{P}(t_0,t)\boldsymbol{w}\right) \end{align*} with an initial value that $\tilde{\boldsymbol{P}}(t_0,t_0)=\text{diag}(\boldsymbol{w})$. Alternatively, we can calculate $\text{logit}(\tilde{\boldsymbol{P}}(t_0,t))=\log(\tilde{\boldsymbol{P}}(t_0,t)) - \log(\boldsymbol{1}\boldsymbol{1}^T-\tilde{\boldsymbol{P}}(t_0,t))$, which has a gradient of \begin{align*} \left.\frac{\partial}{\partial\beta_m} \text{logit}(\tilde{\boldsymbol{P}}(t_0,t))\right|_{\beta_m=\hat\beta_m} &= \left( \left(\boldsymbol{P}'_m(t_0,t)\text{diag}(\boldsymbol{w})\right)\circ \left(\boldsymbol{P}(t_0,t)\boldsymbol{w}\right) - \left(\boldsymbol{P}(t_0,t)\text{diag}(\boldsymbol{w})\right)\circ \left(\boldsymbol{P}'_m(t_0,t)\boldsymbol{w}\right) \right) \\ &\quad \oslash \tilde{\boldsymbol{P}}(t_0,t) \oslash \left(\boldsymbol{1}\boldsymbol{1}^T - \tilde{\boldsymbol{P}}(t_0,t)\right) \oslash \left(\boldsymbol{P}(t_0,t)\boldsymbol{w}\right) \oslash \left(\boldsymbol{P}(t_0,t)\boldsymbol{w}\right) \end{align*} Similarly, we could calculate the proportion of person-time in the live health states, which is calculated by $\tilde{\boldsymbol{L}}(t_0,t)=\left(\boldsymbol{L}(t_0,t)\text{diag}(\boldsymbol{w})\right)\oslash\left(\boldsymbol{L}(t_0,t)\boldsymbol{w}\right)$. The development for these predictions follows closely that for prevalence. \subsection*{Example 3: Linear combinations, differences and standardisation} Linearity combinations of these estimators are straightforward to calculate, as the gradients are then also linear. Let $\boldsymbol\phi(t_0,t|\boldsymbol{x}_k)$ represent an estimator, such as transition probabilities, state occupation probabilities or length of stay, conditional on covariate vector $\boldsymbol{x}_k$. Given weights $w_k$ for $k=1,\ldots,K$, we can calculate the weighted sums \begin{align*} \bar{\boldsymbol{\phi}}(t_0,t) &= \sum_{k=1}^K w_k \boldsymbol{\phi}(t_0,t|\boldsymbol{x}_k)\\ \bar{\boldsymbol{\phi}}'_m(t_0,t) &= \sum_{k=1}^K w_k \boldsymbol{\phi}'_m(t_0,t|\boldsymbol{x}_k) \end{align*} For differences, we can define $K=2$, $w_1=1$ and $w_2=-1$. \emph{Standardisation} can be defined in terms of the mean prediction under a counterfactual exposure. For example, consider a binary exposure $X$ with confounders $\boldsymbol{Z}_i$ across a sample or population indexed by $i$. The standardised estimator for everyone been unexposed or exposed to $X$ is then \begin{align*} \bar{\boldsymbol\phi}_0(t_0,t) &= E_{\boldsymbol{Z}}(\boldsymbol\phi(t_0,t|X=0,\boldsymbol{Z})) = \frac{1}{n}\sum_{i=1}^n \boldsymbol\phi(t_0,t|X=0,\boldsymbol{Z}_i)\\ \bar{\boldsymbol\phi}_1(t_0,t) &= E_{\boldsymbol{Z}}(\boldsymbol\phi(t_0,t|X=1,\boldsymbol{Z})) \end{align*} Under no unmeasured confounding and positivity, we could give a causal interpretation to contrasts such as $\bar{\boldsymbol\phi}_1(t_0,t)-\bar{\boldsymbol\phi}_0(t_0,t)$, $\bar{\boldsymbol\phi}_1(t_0,t)\oslash\bar{\boldsymbol\phi}_1(t_0,t)$ or $\boldsymbol{1}\boldsymbol{1}^T-\bar{\boldsymbol\phi}_1(t_0,t)\oslash E_{\boldsymbol{Z},X}(\boldsymbol\phi(t_0,t|X\boldsymbol{Z}))$. These marginal estimators can be interpreted as applications of the parametric g-formula . \begin{figure} \begin{center} \begin{tikzpicture}[->,bend angle=20,semithick,>=stealth'] \matrix [matrix of nodes,row sep=6mm,column sep=7mm,nodes={align=center}, ampersand replacement=\&] { \& |(Z)| $\boldsymbol{Z}$ \\ |(X)| $X$ \& \& |(Y)| $\boldsymbol{\phi}(t_0,t|X,\boldsymbol{Z})$ \\ }; \begin{scope}[every node/.style={midway,auto}] \draw (X) to node {} (Y); \draw (Z) to node {} (X); \draw (Z) to node {} (Y); \end{scope} \end{tikzpicture} \caption{Directed acyclic graph showing predictions $\boldsymbol{\phi}(t_0,t|X,\boldsymbol{Z})$ as a function of the target exposure $X$ and confounders $\boldsymbol{Z}$.} \end{center} \end{figure} % Do notation \subsection*{Example 4: Ratios} % We can also consider differences and ratios. Let $\boldsymbol\phi(t_0,t|\boldsymbol{x})$ represent one of the estimators from the previous sections. % The gradient for the difference $\boldsymbol\phi(t_0,t|\boldsymbol{x}_1)-\boldsymbol\phi(t_0,t|\boldsymbol{x}_2)$ is % \begin{align*} % \left.\frac{\partial}{\partial \beta_m} \left(\boldsymbol\phi(t_0,t|\boldsymbol{x}_1) - \boldsymbol\phi(t_0,t|\boldsymbol{x}_2)\right)\right|_{\beta_m=\hat\beta_m} &= \boldsymbol{\phi}'_m(t_0,t|\boldsymbol{x}_1) - \boldsymbol\phi'_m(t_0,t|\boldsymbol{x}_2) % \end{align*} % Again, the linearity of the gradients leads to straightforward calculations. We can augment the system of differential equations to calculate the ratios for specific estimators \citep{Ryalen_Stensrud_Roysland_2018}. Let a matrix of ratios of state occupation probabilities be $\text{\bf R}(t_0,t|\boldsymbol{x}_1,\boldsymbol{x}_2)=\boldsymbol{\pi}(t_0,t|\boldsymbol{x}_1)\oslash\boldsymbol{\pi}(t_0,t|\boldsymbol{x}_2)$. Then \begin{align*} \frac{d\text{\bf R}(t_0,t|\boldsymbol{x}_1,\boldsymbol{x}_2)}{dt}^T &= \left(\left(\boldsymbol{\pi}(t_0,t|\boldsymbol{x}_1)^T\boldsymbol{P}(t_0,t|\boldsymbol{x}_1)\boldsymbol{Q}(t|\boldsymbol{x}_1)\right) - \left(\boldsymbol{\pi}(t_0,t|\boldsymbol{x}_2)^T\boldsymbol{P}(t_0,t|\boldsymbol{x}_2)\boldsymbol{Q}(t|\boldsymbol{x}_2)\right) \circ \text{\bf R}(t_0,t|\boldsymbol{x}_1,\boldsymbol{x}_2)\right) \\ &\quad\oslash\boldsymbol{P}(t_0,t|\boldsymbol{x}_2) \\ \text{\bf R}(t_0,t_0) &= \boldsymbol{1} \end{align*} where $\boldsymbol{P}(t_0,t|\boldsymbol{x}_2)>0$. Alternatively, we can calculate the gradient for $\log(\boldsymbol\phi(t_0,t|\boldsymbol{x}_1)\oslash\boldsymbol\phi(t_0,t|\boldsymbol{x}_2))$ (that is, the log ratio), which is \begin{align*} \left.\frac{\partial}{\partial \beta_m} \log\left(\boldsymbol\phi(t_0,t|\boldsymbol{x}_1)\oslash\boldsymbol\phi(t_0,t|\boldsymbol{x}_2)\right)\right|_{\beta_m=\hat\beta_m} &= \boldsymbol{\phi}'_m(t_0,t|\boldsymbol{x}_1)\oslash\boldsymbol\phi(t_0,t|\boldsymbol{x}_1) - \boldsymbol{\phi}'_m(t_0,t|\boldsymbol{x}_2)\oslash\boldsymbol\phi(t_0,t|\boldsymbol{x}_2) \end{align*} This evaluation depends on $\boldsymbol\phi(t_0,t|\boldsymbol{x}_2)$ being non-zero. % Open question: how does this compare with log(ratio)? % Representation of different interventions - how? \subsection*{Example 5: Utilities and costs} The approach readily incorporates utilities and costs. For utilities, we have the cumulative discounted utilities $U_{i}(t_0,t)=\sum_j \int_{t_0}^t P_{ij}(t_0,v)u_j(v)e^{-\lambda v}dv$, where $u_j(v)$ is the utility for state $j$ at time $v$ and $\lambda=\log(1+\delta)$ is the rate of decline for a discount rate $\delta$. The augmented differential equations are then \begin{align} \frac{d\boldsymbol{U}(t_0,t)}{dt} &= \boldsymbol{P}(t_0,t)\boldsymbol{u}(t)e^{-\lambda t} \label{eq:utilities} \\ \frac{d\boldsymbol{U}'_m(t_0,t)}{dt} &= \left(\boldsymbol{P}'_m(t_0,t)\boldsymbol{u}(t)+\boldsymbol{P}(t_0,t)\boldsymbol{u}'_m(t)\right)e^{-\lambda t} \label{eq:dUudt} \\ \boldsymbol{U}(t_0,t_0) &= \boldsymbol{U}'_m(t_0,t_0) = \boldsymbol{0} \end{align} In health economics, the discounted, quality-adjusted life-years are calculated by the product of the initial state probabilities and the utilities, such that $\text{QALY}(t_0,t)=\boldsymbol{\pi}(t_0,t_0)^T\boldsymbol{U}(t_0,t)$, with gradient $\text{QALY}'_m(t_0,t)=\boldsymbol{\pi}(t_0,t_0)^T\boldsymbol{U}'_m(t_0,t)$. Costs may be represented as accumulated costs or costs at a point in time. Let costs per unit time for being in state $i$ at time $t$ be represented by the vector function $\boldsymbol{c}(t)=(c_{i}(t))$ and model for costs for transitions from state $i$ to state $j$ at time $t$, represented by the matrix $\boldsymbol{\mathcal{C}}(t)=(\mathcal{C}_{ij}(t))$, with $\mathcal{C}_{ii}(t)=0$. Then the cumulative discounted costs $\boldsymbol{C}(t_0,t)$ can be represented by the equations \begin{align} \frac{d\boldsymbol{C}(t_0,t)}{dt} &= \boldsymbol{P}(t_0,t) \left(\boldsymbol{c}(t)+\left(\boldsymbol{Q}(t)\circ\boldsymbol{\mathcal{C}}(t)\right)\bm{1}\right) e^{-\lambda t} \label{eq:costs} \\ \frac{d\boldsymbol{C}'_m(t_0,t)}{dt} &= \Big(\boldsymbol{P}'_m(t_0,t) \left(\boldsymbol{c}(t)+\left(\boldsymbol{Q}(t)\circ\boldsymbol{\mathcal{C}}(t)\right)\bm{1}\right) +\nonumber \\ &\qquad \boldsymbol{P}(t_0,t) \left(\boldsymbol{c}'_m(t)+\left(\boldsymbol{Q}'_m(t)\circ\boldsymbol{\mathcal{C}}(t)+\boldsymbol{Q}(t)\circ\boldsymbol{\mathcal{C}}'_m(t)\right)\bm{1}\right)\Big)e^{-\lambda t} \\ \boldsymbol{C}(t_0,t_0) &= \boldsymbol{C}'_m(t_0,t_0) = \boldsymbol{0} \end{align} Note that these require the evaluation of the gradients for the utility and cost functions. The total costs are calculated by weighting by the initial state probabilities, such that $\text{Costs}(t_0,t)=\boldsymbol{\pi}(t_0,t_0)^T\boldsymbol{C}(t_0,t)$, with gradient $\text{Costs}'_m(t_0,t)=\boldsymbol{\pi}(t_0,t_0)^T\boldsymbol{C}'_m(t_0,t)$. We can also consider incremental cost-effectiveness ratios, estimated by \begin{align*} \text{ICER}(t_0,t|\boldsymbol{x}_1,\boldsymbol{x}_2) &= \frac{\text{Costs}(t_0,t|\boldsymbol{x}_1)-\text{Costs}(t_0,t|\boldsymbol{x}_2)}{\text{QALY}(t_0,t|\boldsymbol{x}_1)-\text{QALY}(t_0,t|\boldsymbol{x}_2)} \end{align*} The gradient of the log of the ICER is \begin{align*} \left.\frac{\partial}{\partial\beta_m}\log(\text{ICER}(t_0,t|\boldsymbol{x}_1,\boldsymbol{x}_2))\right|_{\beta_m=\hat\beta_m} &= \frac{\text{Costs}'_m(t_0,t|\boldsymbol{x}_1)-\text{Costs}'_m(t_0,t|\boldsymbol{x}_2)}{\text{Costs}(t_0,t|\boldsymbol{x}_2)-\text{Costs}(t_0,t|\boldsymbol{x}_1)} - \\ &\qquad \frac{\text{QALY}'_m(t_0,t|\boldsymbol{x}_1)-\text{QALY}'_m(t_0,t|\boldsymbol{x}_2)}{\text{QALY}(t_0,t|\boldsymbol{x}_1)-\text{QALY}(t_0,t|\boldsymbol{x}_2)} \end{align*} Finally, we can expand the equations to record the utilities or costs for different states. We can extend Equations~\eqref{eq:utilities} and \eqref{eq:costs} to \begin{align*} \frac{d\tilde{\boldsymbol{U}}(t_0,t)}{dt} &= \left(\boldsymbol{P}(t_0,t)\circ\left(\bm{1}\,\boldsymbol{u}(t)^T\right)\right)e^{-\lambda t} \\ \frac{d\tilde{\boldsymbol{C}}(t_0,t)}{dt} &= \left(\boldsymbol{P}(t_0,t) \circ \left(\bm{1}\,\boldsymbol{c}(t)^T+\bm{1}\left(\left(\boldsymbol{Q}(t)\circ\boldsymbol{\mathcal{C}}(t)\right)\bm{1}\right)^T\right)\right) e^{-\lambda t} \end{align*} for matrices $\tilde{\bm{U}}$ and $\tilde{\bm{C}}$, where $\tilde{U}_{ij}$ is the cumulative utility for state $j$ given an initial state $i$, and $\tilde{C}_{ij}$ is the cumulative cost for being in state $j$ or a transition from state $j$ given an initial state $i$. \subsection*{Example 6: Transformations} For causal inference and health economic evaluations, it is often useful to combine evidence from different data sources to transform the baseline transitions. We introduce five such transformations. {First}, we can turn off a transition, where the transformed hazard $h^*(t|\bm{x})=0\times h(t|\bm{x})$. One advantage of this zero-model formulation is that we can keep the same variance-covariance matrix for the baseline transitions, which supports a straightforward comparison between the interventions. {Second}, we may have a hazard ratio $\exp(\phi)$ with 95\% confidence interval $(\exp(\phi_l),\exp(\phi_u))$, such as from a meta-analysis. The variance for the log hazard ratio is $\left((\phi_u-\phi_l)/2/1.96\right)^2$. The transformed hazard is $h^*(t|\bm{x},\phi)=\exp(\phi) h(t|\bm{x})$, with the gradient of the hazard $h^*$ with respect to the parameters of $h(t|\bm{x})$ being $\exp(\phi)\nabla h(t|\bm{x})$, and the gradient with respect to $\phi$ being $\exp(\phi)h(t|\bm{x})$. {Third}, we may have an acceleration factor $\exp(\phi)$. Then the transformed hazard is $h^*(t|\bm{x},\phi)=\exp(\phi) h(\exp(\phi)t|\bm{x})$, with the gradient of the hazard $h^*$ with respect to the parameters of $h(t\exp(\phi)|\bm{x})$ being $\exp(\phi)\nabla h(t\exp(\phi)|\bm{x})$, and the gradient with respect to $\phi$ being $t\exp(2\phi)h'(t\exp(\phi)|\bm{x})+\exp(\phi)h(t\exp(\phi)|\bm{x})$. {Fourth}, we can add transition hazards together, such that the transformed hazard is $h^*(t|\bm{x})=h_1(t|\bm{x})+h_2(t|\bm{x})$. The gradient of the sum is equal to the sum of the gradients. {Fifth}, we can include smooth mathematical functions with no uncertainty. A useful example of this would be to use a spline interpolation function for the log of background mortality rates from vital statistics for use in relative survival (or excess hazards) modelling. The spline interpolation has the advantage of being smooth for the ordinary differential equation solver. \subsection*{Variance and interval estimation} For an estimator $\boldsymbol\phi(t_0,t)$ with support on the real line, a confidence interval can be calculated from the variance-covariance matrix $\boldsymbol{V} = \boldsymbol{\phi}'_m(t_0,t)\, \hat{\boldsymbol\Sigma}\, \boldsymbol{\phi}'_m(t_0,t)$ and normal quantiles $z$ at the $\alpha$ level with bounds $\boldsymbol\phi(t_0,t)\pm z_{(1-\frac{\alpha}{2})}\sqrt{\text{diag}(\boldsymbol{V})}$. For estimators that are on the open interval $(0,1)$, the gradient can be calculated using an identity or logit transformations. Similarly, for estimators that are on the open interval $(0,\infty)$, the gradient can be calculated using an identity of log transformations. % We could present results for the different transformations... % \begin{align*} % \frac{\partial \log(-\log(\boldsymbol\phi(t_0,t)))}{\partial\hat\beta_m} &= \frac{\partial\boldsymbol\phi(t_0,t)}{\partial\hat\beta_m}\circ\frac{\boldsymbol{1}}{\log(\boldsymbol\phi(t_0,t))\circ\boldsymbol\phi(t_0,t)} \\ % \boldsymbol{V} &=\text{var}(\log(-\log(\boldsymbol{\phi}(t_0,t)))) \\ &= \log(-\log(\boldsymbol{\phi}'_m(t_0,t)))\, \hat{\boldsymbol\Sigma}\, \log(-\log(\boldsymbol{\phi}'_m(t_0,t))) % \end{align*} % with bounds $\exp\left(-\exp(\log(-\log(\boldsymbol\phi(t_0,t)))\pm z_{(1-\frac{\alpha}{2})}\text{diag}(\boldsymbol{V}))\right)$. % \begin{align*} % \frac{\partial \log(\boldsymbol\phi(t_0,t))}{\partial\hat\beta_m} &= \frac{\partial\boldsymbol\phi(t_0,t)}{\partial\hat\beta_m}\circ\frac{\boldsymbol{1}}{\boldsymbol\phi(t_0,t)} \\ % \boldsymbol{V} &=\text{var}(\log(\boldsymbol{\phi}(t_0,t))) \\ &= \log(\boldsymbol{\phi}'_m(t_0,t))\, \hat{\boldsymbol\Sigma}\, \log(\boldsymbol{\phi}'_m(t_0,t)) % \end{align*} % with bounds $\exp\left(\log(\boldsymbol\phi(t_0,t))\pm z_{(1-\frac{\alpha}{2})}\text{diag}(\boldsymbol{V})\right)$. \subsection*{Integration of hazards that are functions of log(time)} Many parametric survival models are implemented in terms of log(time), including flexible parametric survival models and accelerated failure time models. Integration of the ordinary differential equation solvers from the origin for such models can lead to numerical issues. We offer two approaches to address these issues. First, we can truncate small values for time, such that $t^*=\text{max}(t,\epsilon)$, e.g. using $\epsilon=$1e-5. Defining cumulative hazards as $H_{ij}(t_0,t)=\int_{t_0}^t Q_{ij}(u)du$, the value for $H_{ij}(0,\epsilon)$ may be poorly estimated by $\epsilon Q_{ij}(\epsilon)$. Moreover, the hazards will generally not be smooth at $t=\epsilon$. Second, we could directly calculate initial values at $t=\epsilon$ using cumulative hazard estimates. Let the matrix of cumulative hazard intensities from 0 to $\epsilon$ be $\bm{H}(t_0,t)=(H_{ij}(t_0,t))$ and let $\bm{H}'_m(t_0,t)=\int_{t_0}^t \bm{Q}_m'(u)du$. The transition probabilities at $\epsilon$ can be calculated approximately by \begin{align*} \bm{P}(0,\epsilon) &\approx \text{mexp}(\bm{H}(0,\epsilon)) \\ \bm{P}'_m(0,\epsilon) &\approx \bm{H}'_m(0,\epsilon) \\ \bm{L}(0,\epsilon) &\approx \epsilon(\bm{I}+\bm{P}(0,\epsilon))/2 \\ \bm{L}'_m(0,\epsilon) &\approx \epsilon\bm{P}'_m(0,\epsilon)/2 \\ \bm{U}(0,\epsilon) &\approx \epsilon\bm{P}(0,\epsilon)\bm{u}(\epsilon)e^{-\lambda\epsilon}/2 \\ \bm{U}'_m(0,\epsilon) &\approx \epsilon(\bm{P}'_m(0,\epsilon)\bm{u}(\epsilon) + \bm{P}(0,\epsilon)\bm{u}'_m(\epsilon))e^{-\lambda\epsilon}/2 \\ \end{align*} where $\text{mexp}(\bm{M})$ is the matrix exponential for a matrix $\bm{M}$. \section{Implementation} We have implemented the algorithm in R as the \code{rstpm2::markov_msm} function. The current implementation allows for: independent models for each of the transitions; a rich set of models for each transitions (see Appendix B); predictions for state occupation and transition intensities, length of stay, utilities and costs; and useful post-processing facilities, including weighted standardisation, differences and ratios. % A basic call to \code{markov_msm()} to estimate the state occupancy probabilities and length of stay would be \code{markov_msm(x, trans, t, newdata)}, where \code{x} is a list of regression models for the transition intensities, \code{trans} is a matrix that defines the multistate transitions as per the \code{mstate} package, \code{t} is a vector of times to report (including the initial time), and \code{newdata} is a data-frame with the covariates for predictions. % The current implementation assumes independently estimated transition intensities. The models for the transition intensities need to provide methods for: (i) the covariance matrix (\code{vcov}); (ii) predictions for hazards (\code{predict(object, newdata, type="haz", ...)}); and (iii) predictions for gradients of the hazards (\code{predict(object, newdata, type="gradh", ...)}). These methods have been provided for \code{rstpm2::stpm2}, \code{rtspm2::pstpm2}, \code{stats::glm} for a log link, and \code{survPen::survPen}. Use of \code{stats::glm} will also require that the argument \code{tvar} to specify a character for the name (or vector of names) of the time variables in the regression models for predictions. A transition can be turned off by wrapping a regression object in \code{zeroRate()}. % % Should I use a common S3 or S4 class? % The object returned from \code{markov_msm()} is of class \code{"markov_msm"}. The object includes predictions and gradients for the times specified for the covariates in the input \code{newdata} data-frame. Methods are provided for: \code{print}; \code{as.data.frame}; \code{subset(x, subset, ...)} based on a restriction of \code{newdata}; \code{standardise}, which averages across covariate patterns and returns another \code{markov_msm} object. Other functions include \code{diff(x,y)} which takes a difference between two \code{markov_msm} objects, and \code{ratio_markov_msm}, which gives the ratio of two \code{markov_msm} objects; both of these functions return objects that inherit from \code{"markov_msm"}. % Differences from the same models are just different weights... \section{Simulations} % The research questions included assessing the statistical properties (including bias and coverage) for: (i) different transformations of state occupation probabilities and length of stay; (ii) different regression models; and (iii) sample size. % We used exponentially distributed data from an illness-death model to estimate the proportion that are healthy, ill or dead using (a) different sample sizes (500, 1000, 10000), (b) different regression models (Poisson regression, Weibull regression), and (c) different transformations for state occupation probabilities (identity, log, logit, and arcsin) and length of stay (identity, log). To assess the small sample properties compared with the asymptotics properties, we undertook several simulations. We fitted a Markov illness-death model with Weibull transition rates with a shape parameter of 1.5 and a scale parameter of 10 for the transitions Healthy $\rightarrow$ Illness, Healthy $\rightarrow$ Death, and Illness $\rightarrow$ Death. We simulated for 1000 individuals with censoring min(20,Uniform(0,30)). We fitted the transitions using Weibull regression using the \code{aftreg} model from the \pkg{eha} package. The expected state occupation probabilities were predicted using the ODE solver with the true parameters. For each simulation, we predicted the state occupation probabilities, bias, confidence intervals using five transformations (plain confidence intervals, and confidence intervals based on log-log, log, logit and arcsin transformations), and coverage. We then calculated the mean bias, mean squared error and coverage across 1000 simulations. \begin{figure}[!ht] \centering \includegraphics{aft-weibull-20190816.pdf} \caption{State occupation coverage for a Markov illness-death model with Weibull-distributed times, fitted using Weibull regression models. The panels represent confidence intervals based on different transformation methods.} \label{fig:coverage} \end{figure} Across the 1000 simulations, the mean bias for the state occupation probabilities for any of the three states across time varied between -0.0006 and 0.0008, while the mean squared error varied between 0 and 0.0002. Coverage was generally close to 0.95 for each of the transformation methods (Figure~\ref{fig:coverage}), particularly given that the binomial variability at 950/1000 has a 95\% confidence interval of (0.945,0.963). The ``plain'' untransformed approach performs poorly close to start for the initial state. \begin{figure}[!ht] \centering \includegraphics[width=0.7\linewidth]{aft-weibull-los-20190816.pdf} \caption{Length of stay coverage for a Markov illness-death model with Weibull-distributed times, fitted using Weibull regression models. The panels represent confidence intervals based on different transformation methods.} \label{fig:coverage-los} \end{figure} Across the 1000 simulations, the mean bias for the length of stay for any of the three states across time varied between -0.006 and 0.008 , while the mean squared error varied between 0 and 0.004. Coverage was generally close to 0.95 for both of the transformation methods (Figure~\ref{fig:coverage-los}). \section{Example} We will extend an analysis by \cite{Crowther_Lambert_2017} of the Rotterdam Breast Cancer Data \citep{sauerbrei2007,foekens2000}. This dataset includes patients who were treated for primary breast cancer in Rotterdam during 1978--1993. Treatment included primary surgery, with either mastectomy or breast conserving therapy, with possible referral for radiation treatment within three months of surgery. Study exclusion criteria included: (i) patient tissue based on biopsy only; (ii) metastatic disease at primary surgery or within one month of surgery; (iii) relapse or residual disease within one month of surgery; (iv) relapse prior to referral to radiation therapy; or (v) a previous primary cancer. For the analysis, patients were also excluded if they had adjuvant treatment but were node-negative, or if they had missing information on the number of positive nodes. After these exclusions, data were available for 2982 patients. Following the analysis by \cite{Crowther_Lambert_2017}, we model for three states, including (1) the initial \emph{post-surgery} state, (2) \emph{relapse} and (3) \emph{death}, with transitions (1)$\rightarrow$(2) for death from the post-surgery state with hazard $h_1(t)$, (1)$\rightarrow$(3) for relapse with hazard $h_2(t)$, and (2)$\rightarrow$(3) for death from the relapse state with hazard $h_3(t)$. All three transitions are modelled using time since surgery as the primary time scale. Crowther and Lambert used flexible parametric survival models on the \emph{log cumulative hazard scale}, where $H_j(t|\bm{x})=\int_0^th_j(u|\bm{x})du=\exp(s_j(t)+\eta_j(t,\bm{x}))$ for baseline $s_j(t)$ and linear predictors $\eta_j(t,\bm{x})$ defined by \begin{align*} \eta_1(t,\bm{x}) &= \beta_1\texttt{age}+\beta_2\texttt{nodes}+\beta_3\texttt{hormon} + I(20<\texttt{size}\leq 50)s_{4}(t) + \\ &\quad I(\texttt{size}>50)s_{5}(t) + I(\texttt{pr\_1})s_6(t) \\ \eta_2(t,\bm{x}) &= \beta_1\texttt{age}+\beta_2\texttt{nodes}+\beta_3\texttt{hormon} + \\ &\quad\beta_4I(20<\texttt{size}\leq 50)+\beta_4I(\texttt{size}>50)+\beta_5I(\texttt{pr\_1}) \\ \eta_3(t,\bm{x}) &= \beta_1\texttt{age}+\beta_2\texttt{nodes}+\beta_3\texttt{hormon} + \\ &\quad\beta_4I(20<\texttt{size}\leq 50)+\beta_4I(\texttt{size}>50)+I(\texttt{pr\_1})s_{7}(t) \end{align*} where \texttt{age} is the age in years at cancer treatment, \texttt{nodes} is the number of positive lymph nodes, \texttt{hormon} is an indicator for whether the patient was on hormonal therapy, \texttt{size} is the tumour size (mm), \texttt{pr\_1} is the log of one plus the progesterone level (fmol/L), $I(p)$ is an indicator function with value 1 when the predicate $p$ is true and value 0 otherwise, $s_0(t)=\sum_{j=0}^3 B_j(\log(t))\beta_{0j}$ for a natural splines basis function $B_j()$ with knots at the quantiles for log of the events times, and $s_k(t)=\beta_{k0}+\beta_{k1}\log(t)$ for $k>1$. The parameters are assumed to be distinct between the linear predictors. The hazards are calculated from the cumulative hazard using $h_j(t|\bm{x})=H_j'(t|\bm{x})$. Note that ratios of these hazards may not have a simple interpretation, particularly with continuous or multiple time-varying effects (see Appendix). Moreover, age is expected to be closely related to the mortality rates and modelling using a single parameter may not capture this important variation. For ease of comparison, we do not further investigate changes in the model formulations and focus on predictions from these fitted models. For predictions, Crowther and Lambert used \emph{conditional} predictions for a patient aged 54 years with a transformed progesterone level of 3 (that is, progesterone $=\exp(3)-1=19.1$ fmol/L), with the number of positive lymph nodes varying between 0, 10 and 20, and with each of the three levels for tumour size. We are able to model and predict for conditional relationships in less than 20 seconds (code included in the documentation for the \texttt{rstpm2} package on CRAN). We now focus on \emph{marginal} or \emph{standardised} predictions for patients aged 50--59 years. In particular, we will compare state occupation probabilities and length of stay under counterfactual tumour sizes. Let the subjects aged 50--59 years be indexed by $k=1\ldots K$ and let $X$ represent tumour size and $\bm{Z}$ represent the other covariates. Then the predictions under the counterfactual $\hat{X}=x$ are modelled by \begin{align*} P_{1j}(0,t|\hat{X}=x) &= E_{\bm{Z}}(P_{1j}(0,t|\bm{Z},\hat{X}=x))\\ &= \frac{1}{K} \sum_{k=1}^K P_{1j}(0,t|\bm{Z}=\bm{z}_k,\hat{X}=x) \\ L_{1j}(0,t|\hat{X}=x) &= E_{\bm{Z}}(L_{1j}(0,t|\bm{Z},\hat{X}=x)) \end{align*} The specific counterfactuals are that all patients have a tumour size that is either (i) $\leq$ 20 mm, (ii) $>$ 20 mm and $\leq$ 50 mm, or (iii) $>$ 50 mm. The age restriction is due to the strong age dependence for each of the transitions. Differences in state occupation probabilities and length of stay by the counterfactuals are show in Figures~\ref{fig:1} and \ref{fig:2}, respectively. There is clear evidence that smaller tumour sizes are associated with fewer early relapses and a lower risk of death for fifteen years after treatment. \begin{figure}[!ht] \centering \includegraphics{multistate_fig-1.pdf} \caption{Differences in standardised state occupation probabilities by state and by contrasts for counterfactual tumour size, for female breast cancer patients aged 50--59 years and diagnosed 1978--1993, Rotterdam} \label{fig:1} \end{figure} \begin{figure}[!ht] \centering \includegraphics{multistate_fig-2.pdf} \caption{Differences in standardised length of stay by state and by contrasts for counterfactual tumour size, for female breast cancer patients aged 50--59 years and diagnosed 1978--1993, Rotterdam} \label{fig:2} \end{figure} We also explored other model formulations, including penalised log-hazard models ($h_j(t|\bm{x})=\exp(s_j(t)+\eta_j(t,\bm{x}))$) and accelerated failure time models ($S_j(t|\bm{x})=S_{0j}(\int_0^t\exp(\eta_j(t,\bm{x}))du)$, where $S_{0j}(t)=\exp(-\exp(s_j(t)))$). \section{Discussion} In summary, we describe how to predict from Markov multi-state models with smooth transition intensities using ordinary differential equations. A variety of predictions can be estimated, together with interval estimation based on the multivariate delta method. The method is suitable for a range of models, including Poisson regression, parametric and flexible accelerated failure time models, and parametric and penalised generalised survival models. Applications of these methods could range from descriptive epidemiology, to causal inference, through to health economic evaluations of cost-effectiveness. The recent article by \citet{Ryalen_Stensrud_Roysland_2018} provides a non-parametric analogue to our development. Those non-parametric methods can readily be extended to many of the estimators described herein, including standardisation, quality-adjusted life-years and costs. The asymptotic theory for the non-parametric approach has been shown to hold for Aalen's additive hazards model; it is unclear whether non-parametric estimators for accelerated failure and proportional hazards models will satisfy the assumptions in Theorems 1 and 2 of \citet{Ryalen_Stensrud_Roysland_2018}. Moreover, it is arguable when an additive hazards scale is suitable for covariate adjustment, for example, for modelling all-cause or cause-specific survival with age at cancer diagnosis as a covariate. We suggest that (smooth) accelerated failure time models may provide a useful alternative regression model framework which is also collapsible. Under the conditions described by \citet{Datta_Satten_2001}, predictions that are functions of the state occupation probability are, under suitable regularity assumptions, expected to be consistently estimated irrespective of whether the Markov assumption holds. However other predictions (e.g. transition probabilities, or the proportion to ever pass through a state) may not be consistently estimated. Moreover, the efficiency of the predictions when the time scale has been mis-specified may be low. Alternative approaches include individual-based simulations, with variance estimation using the bootstrap \cite{Crowther_Lambert_2017}, which are expected to be computationally expensive. \bibliography{lib} \section*{Appendix A: Time-varying effects for log cumulative hazards models} For modelling on the log cumulative hazard scale with a linear predictor $\eta(t,\bm{x}_i)$ given time $t$ and covariates $\bm{x}_i$, the cumulative hazard $H(t|\bm{x}_i)$ can be represented by \begin{align*} H(t|\bm{x}_i) &= \exp(\eta(t,\bm{x}_i)) \\ \implies h(t|\bm{x}_i) &= \exp(\eta(t,\bm{x}_i)) \frac{\partial}{\partial t} \eta\left(t,\bm{x}_i\right) \end{align*} where $h(t|\bm{x}_i)$ is the hazard. The \emph{hazard ratio} comparing covariates $\bm{x}_1$ and $\bm{x}_0$ is then \begin{align} \frac{h(t|\bm{x}_1) }{h(t|\bm{x}_0) } &= \exp(\eta(t,\bm{x}_1)-\eta(t,\bm{x}_0)) \left(1+\frac{\frac{\partial}{\partial t} \left(\eta\left(t,\bm{x}_1\right)-\eta\left(t,\bm{x}_0\right)\right)}{\frac{\partial}{\partial t} \eta\left(t,\bm{x}_0\right)}\right)\label{eq:hrgen} \end{align} We have the following cases for the interpretation of the hazard ratios: \begin{itemize} \item[Case 1] \emph{Time-independent effects}: if $\frac{\partial}{\partial t} \left(\eta\left(t,\bm{x}_1\right)-\eta\left(t,\bm{x}_0\right)\right)=0$, then Equation~\eqref{eq:hrgen} gives the ratio $\exp(\eta(t,\bm{x}_1)-\eta(t,\bm{x}_0))$. This case will hold when the difference in the linear predictors is independent of $t$. Usefully, the log hazard ratio is then the difference in the linear predictors, which has a straightforward interpretation. A sufficient condition is that the covariates that change between $\bm{x}_1$ and $\bm{x}_0$ are independent of $t$. % Is this also a necessary condition? As a specific example, for a linear predictor $\eta(t,\bm{x}_i)=s_0(t)+\eta_0(\bm{x}_i)$ for baseline $s_0(t)$ and linear predictor $\eta_0(\bm{x}_i)$, then the log hazard ratio equals $\eta_0(\bm{x}_1)-\eta_0(\bm{x}_0)$, which is a \emph{proportional hazards} model. \item[Case 2] \emph{Small time-varying effects}: if $\frac{\partial}{\partial t} \left(\eta\left(t,\bm{x}_1\right)-\eta\left(t,\bm{x}_0\right)\right)\ll \frac{\partial}{\partial t} \eta\left(t,\bm{x}_0\right)$, then $\frac{h(t|\bm{x}_1) }{h(t|\bm{x}_0) }\approx\exp(\eta(t,\bm{x}_1)-\eta(t,\bm{x}_0))$. For this case, the partial derivative with respect to time for the change in the linear predictor is small compared with partial derivative for the linear predictor for $\bm{x}_0$. This suggests that the interpretation for moderately small time-varying effects will be straightforward (up to an approximation). \item[Case 3] \emph{Stratified model}: if we have a stratified linear predictor $\eta(t,\bm{x}_i,j)=s_j(t)+\eta_j(\bm{x}_i)$ for stratum $j$ with baseline $s_j(t)$ and linear predictor $\eta_j(\bm{x}_i)$, then \begin{align} \frac{h(t|\bm{x}_1,j) }{h(t|\bm{x}_0,k) } &= \exp\left( s_j(t)+\eta_j(\bm{x}_1)+\log(s_j'(t))- \left(s_k(t)+\eta_k(\bm{x}_0)+\log(s_k'(t))\right) \right) \label{eq:stratified} \end{align} If $j=k$ then $\frac{h(t|\bm{x}_1,j) }{h(t|\bm{x}_0,k)}=\exp(\eta_j(\bm{x}_1)-\eta_j(\bm{x}_0))$, which is proportional hazards. If $j\neq k$, then Equation~\eqref{eq:stratified} can be interpreted as having separable effects (on the log hazard scale) for the time effects and for the other covariates. \item[Case 4] \emph{Linear time-varying effect}: if we have a linear predictor $\eta(t,x_i,\bm{u}_i)=s_0(t)+x_i s_1(t)+\eta_0(\bm{v}_i)$ for a scalar $x_i$ and a vector of other covariates $\bm{v}_i$, then \begin{align*} \frac{h(t|x_1,\bm{v}_1) }{h(t|x_0,\bm{v}_0) } &= \exp\left((x_1-x_0)s_1(t)+\eta_0(\bm{v}_1)-\eta_0(\bm{v}_0)\right)\left(1+\frac{(x_1-x_0)s_1'(t)}{s_0'(t)+x_0s_1'(t)}\right) \end{align*} From the ratio $(x_1-x_0)s_1'(t)/(s_0'(t)+x_0s_1'(t))$, we see that the time-varying hazard ratio depends on both the baseline value $x_0$ and the difference $x_1-x_0$. The interpretation of the effect will be straightforward when $x_i$ is for a binary indicator (e.g. $x_0=0$ and $x_1=1$). \item[Case 5] \emph{Multiple time-varying effects}: if we have a linear predictor $\eta(t,x_i,\bm{u}_i)=s_0(t)+x_i s_1(t)+u_i s_2(t)+\eta_0(\bm{v}_i)$ for scalars $x_i$ and $u_i$ and a vector of other covariates $\bm{v}_i$, then \begin{align*} \frac{h(t|x_1,u_1,\bm{v}_1) }{h(t|x_0,u_0,\bm{v}_0) } &= \exp\left((x_1-x_0)s_1(t)+(u_1-u_0)s_2(t)+\eta_0(\bm{v}_1)-\eta_0(\bm{v}_0)\right)\times\\ &\qquad \left(1+\frac{(x_1-x_0)s_1'(t)+(u_1-u_0)s_2'(t)}{s_0'(t)+x_0s_1'(t)+u_0s_2'(t)}\right) \end{align*} From the ratio in the last line, we see that the hazard ratio depends on both the baseline values $x_0$ and $u_0$ and the differences $x_1-x_0$ and $u_1-u_0$. The multiple effects will be straightforward to interpret if $x_i$ and $u_i$ are binary indicators for strata (see Case 3). % \item[Case 6] Otherwise, the hazard ratio for time-varying effects may depend on the combinationof covariate values of . \end{itemize} In summary, time-independent effects and stratified models have a straightforward interpretation, however continuous time-varying effects and multiple time-varying effects on a log cumulative hazard scale are more difficult to interpret in terms of hazard ratios. \section*{Appendix B: Hazard specifications} \begin{table}[!ht] \centering \begin{minipage}{\textwidth} \begin{tabular}{llll} Class & Model & R function & Specification\footnote{Notes: $\eta(t,\bm{x})$ and $\eta(\bm{x})$ are linear predictors for time $t$ and covariates $\bm{x}$, and $S_0(t)$ is a baseline survival model.} \\ \hline Parametric & Poisson regression & \texttt{stats::glm} & $\log(h(t|\bm{x})) = \eta(t,\bm{x})$ \\ & Accelerated failure time & \texttt{flexsurv::flexsurvreg} & $S(t|\bm{x})=S_0(\exp(\eta(\bm{x}))t)$ \\ & & \texttt{eha::aftreg} & $S(t|\bm{x})=S_0(\exp(\eta(\bm{x}))t)$ \\ && \texttt{rstpm2::aft} & $S(t|\bm{x})=S_0(\int_0^t \exp(\eta(u,\bm{x}))du)$\\ & Generalized survival & \texttt{flexsurv::flexsurvspline} & $\log(H(t|\bm{x})) = \eta(t,\bm{x})$ \\ && \texttt{rstpm2::stpm2} & $\log(H(t|\bm{x})) = \eta(t,\bm{x})$ \\ Penalised & Poisson regression & \texttt{mgcv::gam} & $\log(h(t|\bm{x})) = \eta(t,\bm{x})$ \\ & Log-hazard & \texttt{survPen::survPen} & $\log(h(t|\bm{x})) = \eta(t,\bm{x})$ \\ & Generalised survival & \texttt{rstpm2::pstpm2} & $\log(H(t|\bm{x})) = \eta(t,\bm{x})$ \\ Transformation & Zero & \texttt{rstpm2::zeroModel} & $h^*(t|\bm{x})=0$ \\ & Hazard ratio & \texttt{rstpm2::hrModel} & $h^*(t|\bm{x},\phi)=h(t|\bm{x})\phi$ \\ & Accelerated failure & \texttt{rstpm2::aftModel} & $h^*(t|\bm{x},\phi)=h(\phi t|\bm{x})\phi$ \\ & Additive models & \texttt{rstpm2::addModel} & $h^*(t|\bm{x})=h_1(t|\bm{x})+h_2(t|\bm{x})$ \\ & Hazard function & \texttt{rstpm2::hazFun} & $h(t|\bm{x})$ \\ & Spline interpolation & \texttt{rstpm2::splineFun} & $h(t|\bm{x})=\exp(s(t))$ \end{tabular} \end{minipage} \caption{Hazard specifications} \label{tab:models} \end{table} For Table~\ref{tab:models}, the generality of the linear predictor may be constrained by the model class; For example, \texttt{flexsurv::flexsurvspline} only allows for spline interactions between time and covariates. The baseline survival models for \texttt{flexsurv::flexsurvreg} and \texttt{eha::aftreg} are from a parametric family, while the baseline survival for \texttt{rstpm2::aft} is where the log cumulative hazards are based on splines. The generalised survival models also allow for other transformations, including proportional odds, probit and additive hazards models. Arbitrary smooth hazards can be defined using \texttt{hazFun}; as an example, a spline interpolation for log-hazards is defined using \texttt{splineFun}. The transformation functions at the end of the table are meant to take one or more models as inputs and predict rates that are functions of the given models. Formally, Poisson regression models are models for rates rather than for hazards. \section*{Appendix C: Smooth accelerated failure time models} The smooth accelerated failure time models implemented by $\texttt{rstpm2::aft}$ and the Stata command \texttt{staft} have not been described elsewhere. Survival for these models at time $t$ with covariates $\bm{x}$ is defined by \begin{align*} S(t|\bm{x}) &= S_0\left(\int_0^t \exp(\eta(u,\bm{x})) \text{d}u\right) \end{align*} where $S_0(t) = \exp\left(-\exp\left(s(\log(t)) \right)\right)$ is baseline survival, $s(u)$ is a smooth function with support on the real line (e.g. natural splines), and $\exp(\eta(u,\bm{x}))$ is a time-varying acceleration factor. We can replace the integration for the acceleration factor by a cumulative function $\exp(\eta_1(\log(t),\bm{x}))$, such that \begin{align*} \int_0^t\exp(\eta(u,\bm{x}))\text{d}u &= \exp(\eta_1(\log(t),\bm{x})) \\ \implies \eta(t,\bm{x}) &= \eta_1(\log(t),\bm{x})+\log\left(\frac{\partial}{\partial t} \eta_1(\log(t),\bm{x})\right) \end{align*} such that we can calculate the time-varying acceleration factor by differentiation. The cumulative linear predictor $\eta_1(\log(t),\bm{x})$ can be defined using a smooth function of log time (e.g. using natural splines). We can calculate the hazards by \begin{align*} h(t|\bm{x}) &= \frac{\text{d}}{\text{d}t} \exp\left(s(\eta_1(\log(t),\bm{x}))\right) \\ &= \exp\left(s(\eta_1(\log(t),\bm{x}))\right) s'(\eta_1(\log(t),\bm{x})) \frac{\partial}{\partial t} \eta_1(\log(t),\bm{x}) \end{align*} This model has been implemented in R and Stata for left truncated and right censored data. % axiom: eta := operator 'eta; integrate(exp(eta(u)),u=0..t) \end{document} rstpm2/vignettes/lib.bib0000644000176200001440000001505413566730271014754 0ustar liggesusers @article{Titman_2011, title={Flexible nonhomogeneous Markov models for panel observed data}, volume={67}, ISSN={1541-0420}, DOI={10.1111/j.1541-0420.2010.01550.x}, number={3}, journal={Biometrics}, author={Titman, Andrew C.}, year={2011}, month={Sep}, pages={780–787} } @article{Crowther_Lambert_2017, title={Parametric multistate survival models: Flexible modelling allowing transition-specific distributions with application to estimating clinically useful measures of effect differences}, volume={36}, ISSN={1097-0258}, DOI={10.1002/sim.7448}, number={29}, journal={Statistics in Medicine}, author={Crowther, Michael J. and Lambert, Paul C.}, year={2017}, month={Dec}, pages={4719–4742} } @article{Datta_Satten_2001, title={Validity of the Aalen–Johansen estimators of stage occupation probabilities and Nelson–Aalen estimators of integrated transition hazards for non-Markov models}, volume={55}, ISSN={0167-7152}, DOI={10.1016/S0167-7152(01)00155-9}, number={4}, journal={Statistics \& Probability Letters}, author={Datta, Somnath and Satten, Glen A.}, year={2001}, month={Dec}, pages={403–411} } @article{Jackson_2016, title={flexsurv: A platform for parametric survival modeling in R}, volume={70}, ISSN={1548-7660}, DOI={10.18637/jss.v070.i08}, journal={Journal of Statistical Software}, author={Jackson, Christopher H.}, year={2016}, month={May} } @article{Brinks_Hoyer_2018, title={Illness-death model: statistical perspective and differential equations}, volume={24}, ISSN={1572-9249}, DOI={10.1007/s10985-018-9419-6}, number={4}, journal={Lifetime Data Analysis}, author={Brinks, Ralph and Hoyer, Annika}, year={2018}, pages={743–754} } @book{Andersen_Borgan_Gill_Keiding_1993, place={New York, NY}, title={Statistical Models Based on Counting Processes}, publisher={Springer-Verlag New York, Inc.}, author={Andersen, P. K. and Borgan, O and Gill, R. D. and Keiding, N.}, year={1993} } @article{Ryalen_Stensrud_Roysland_2018, title={Transforming cumulative hazard estimates}, volume={105}, ISSN={0006-3444}, DOI={10.1093/biomet/asy035}, number={4}, journal={Biometrika}, author={Ryalen, PÃ¥l C. and Stensrud, Mats J. and Røysland, Kjetil}, year={2018}, month={Dec}, pages={905–916} } @article{deWreede_Fiocco_Putter_2011, title={mstate: An R Package for the analysis of competing risks and multi-state models}, volume={38}, url={https://www.jstatsoft.org/article/view/v038i07}, DOI={10.18637/jss.v038.i07}, number={7}, journal={Journal of Statistical Software}, author={de Wreede, Liesbeth C. and Fiocco, Marta and Putter, Hein}, year={2011} } @article{Putter_Fiocco_Geskus_2007, title={Tutorial in biostatistics: competing risks and multi-state models}, volume={26}, ISSN={0277-6715}, DOI={10.1002/sim.2712}, number={11}, journal={Statistics in Medicine}, author={Putter, H. and Fiocco, M. and Geskus, R. B.}, year={2007}, month={May}, pages={2389–2430} } @article{Andersen_Keiding_2002, title={Multi-state models for event history analysis}, volume={11}, note={2}, journal={Stat Methods Med Res}, author={Andersen, P. K. and Keiding, N.}, year={2002}, pages={91–115} } @article{Iacobelli_Carstensen_2013, title={Multiple time scales in multi-state models}, volume={32}, ISSN={1097-0258}, DOI={10.1002/sim.5976}, number={30}, journal={Statistics in Medicine}, author={Iacobelli, Simona and Carstensen, Bendix}, year={2013}, month={Dec}, pages={5315–5327} } @article{Blaser_Vizcaya_Estill_Zahnd_Kalesan_Egger_Gsponer_Keiser_2015, title={gems: An R Package for simulating from disease progression models}, volume={64}, ISSN={1548-7660}, number={10}, journal={Journal of Statistical Software}, author={Blaser, Nello and Vizcaya, Luisa Salazar and Estill, Janne and Zahnd, Cindy and Kalesan, Bindu and Egger, Matthias and Gsponer, Thomas and Keiser, Olivia}, year={2015}, month={Mar}, pages={1–22} } @article{filipovic2017markov, title={Markov Models for Health Economic Evaluations: The R Package heemod}, author={Filipovi{\'c}-Pierucci, Antoine and Zarca, Kevin and Durand-Zaleski, Isabelle}, journal={arXiv preprint arXiv:1702.03252}, year={2017} } @article{Allignol_Schumacher_Beyersmann_2011, title={Empirical transition matrix of multi-state models: the etm package}, volume={38}, number={4}, journal={Journal of Statistical Software}, author={Allignol, Arthur and Schumacher, Martin and Beyersmann, Jan}, year={2011}, pages={1–15} } @article{Touraine_Helmer_Joly_2016, title={Predictions in an illness-death model}, volume={25}, ISSN={1477-0334}, DOI={10.1177/0962280213489234}, number={4}, journal={Statistical Methods in Medical Research}, author={Touraine, Célia and Helmer, Catherine and Joly, Pierre}, year={2016}, pages={1452–1470} } @article{Gentleman_Lawless_Lindsey_Yan_1994, title={Multi-state Markov models for analysing incomplete disease history data with illustrations for HIV disease}, volume={13}, ISSN={0277-6715}, number={8}, journal={Statistics in Medicine}, author={Gentleman, R. C. and Lawless, J. F. and Lindsey, J. C. and Yan, P.}, year={1994}, month={Apr}, pages={805–821} } @article{Borgan_1984, title={Maximum likelihood estimation in parametric counting process models, with applications to censored failure time data}, volume={11}, ISSN={0303-6898}, number={1}, journal={Scandinavian Journal of Statistics}, author={Borgan, {\O}rnulf}, year={1984}, pages={1–16} } @book{Sen_Singer_1993, place={London}, title={Large Sample Methods in Statistics: An Introduction with Applications}, ISBN={978-0-412-04221-5}, publisher={Chapman and Hall}, author={Sen, Pranab K. and Singer, Julio M.}, year={1993} } @article{sauerbrei2007, title={A new proposal for multivariable modelling of time-varying effects in survival data based on fractional polynomial time-transformation}, volume={49}, ISSN={0323-3847}, DOI={10.1002/bimj.200610328}, number={3}, journal={Biometrical Journal. Biometrische Zeitschrift}, author={Sauerbrei, Willi and Royston, Patrick and Look, Maxime}, year={2007}, month={Jun}, pages={453–473} } @book{Royston_Lambert_2011, place={College Station, TX}, title={Flexible Parametric Survival Analysis Using Stata: Beyond the Cox Model}, publisher={Stata Press}, author={Royston, P. and Lambert, P.C.}, year={2011} } @article{foekens2000, title={The urokinase system of plasminogen activation and prognosis in 2780 breast cancer patients}, volume={60}, ISSN={0008-5472}, number={3}, journal={Cancer Research}, author={Foekens, J. A. and Peters, H. A. and Look, M. P. and Portengen, H. and Schmitt, M. and Kramer, M. D. and Brünner, N. and Jänicke, F. and Meijer-van Gelder, M. E. and Henzen-Logmans, S. C. and et al.}, year={2000}, month={Feb}, pages={636–643} } rstpm2/vignettes/algorithm2e.sty0000644000176200001440000050637114363600352016505 0ustar liggesusers% algorithm2e.sty --- style file for algorithms % almost everything can be customized by users. See the document for more explanations %% Copyright 1996-2017 Christophe Fiorio % % This work may be distributed and/or modified under the conditions of the LaTeX Project % Public License, either version 1.3 of this license or (at your option) any later version. % The latest version of this license is in http://www.latex-project.org/lppl.txt and % version 1.3 or later is part of all distributions of LaTeX version 2005/12/01 or later. % % This work has the LPPL maintenance status `maintained'. % % The Current Maintainer of this work is M. Christophe Fiorio % % This work consists of the files algorithm2e.sty and algorithm2e.tex % and the associated example files algorithm2e_exAlgoDisjdecomp.tex, % algorithm2e_exIR.tex, algorithm2e_ex01.tex, algorithm2e_exProg.tex, % algorithm2e_ex02.tex, algorithm2e_exfor.tex, algorithm2e_ex03.tex, % algorithm2e_exgeneric.tex, algorithm2e_ex04.tex, algorithm2e_exgeneric2.tex, % algorithm2e_ex05.tex, algorithm2e_exnlsty.tex, algorithm2e_ex06.tex, % algorithm2e_exrepeat.tex, algorithm2e_ex07.tex, algorithm2e_exswitch.tex % % Report bugs and comments to: % - algorithm2e-announce@lirmm.fr mailing list for announcement about releases^^J% % - algorithm2e-discussion@lirmm.fr mailing list for discussion about package^^J% % subscribe by emailing sympa@lirmm.fr with 'subscribe '^^J% % % $Id: algorithm2e.sty,v 5.2 2017/07/18 15:26:26 fioriochristophe Exp $ % % PACKAGES REQUIRED: % % - float (in contrib/supported/float) % - ifthen (in base) % - xspace (in packages/tools) % - relsize (in contrib/misc/relsize.sty) % %%%%%%%%%%%%%%% Release 5.2 % % Package options: % --------------- % - oldcommands : to use old command names % - french, english, german, ngerman % portuguese, czech, italiano, % slovak, croatian, spanish : for the name of the algorithm and some keyword code % - onelanguage : to simply switch keyword from one language to another without changing % keyword commands % - boxed, boxruled, ruled, tworuled, % algoruled, plain : layout of the algorithm % - algo2e : environment is algorithm2e instead of algorithms and \listofalgorithmes % instead of \listofalgorithms % - slide : to use when making slides % - noline,lined,vlined : how block are designed. % - shortend, longend, noend : short or long end keyword as endif for e.g. % - linesnumbered : auto numbering of the algorithm's lines % - linesnumberedhidden : to hide autonumbered lines (show number on a line with \ShowLn % - commentsnumbered, inoutnumbered : to autonumber comments and inout keywords (by defaut not numbered) % - rightnl : to have line number on the right instead of on the left as default % - algonl : line numbers preceded by algo number % - scright, scleft : right or left justified side comments % - fillcomment, nofillcomment : end mark of comment is flushed to the right so comments fill the line % - dotocloa : add an entry in the toc for list of algorithms (require tocbibind package) % - endfloat : add algoendfloat environment pushing algorithm so written to the end of document % - resetcount, noresetcount : start value of line numbers. % - algopart,algochapter,algosection : algo numbering within part, chapter or section % - titlenumbered,titlenotnumbered : numbering of title set by \Titleofalgo % - figure : algorithms are figures, numbered as figures, and put in the list of figures. % - procnumbered : procedure or function are numbered as algorithm % - nokwfunc : procedure or function name doens't become a command % - norelsize : don't use relsize package (useful if it breaks the compatibily) % - displayblockmarkers : display begin, end keywords at start of each block % % defaults are; english,plain,resetcount,titlenotnumbered % %%%%%%%%%%%%%% % % Short summary % ------------- % % algorithm is an environment for writing algorithm in LaTeX2e. % Almost all is customizable. You can add keywords, change style, change the layout, ... % It provide macros that allow you to create differents sorts of key words, therefore a set of predefined key % word is gived. % % IT should be used as follows % % \begin{algorithm} % ... % ... % \end{algorithm} % % % IMPORTANT : each line MUST end with \; % % Note that if you define macros outside algorithm environment they % are avaible in all the document and particulary you can use then % inside all algorithms without re-define them. % % an example: % % \begin{algorithm} % \SetAlgoLined % \KwIn{this text} % \KwOut{how to write algorithm with \LaTeX2e } % % initialization\; % \While{not at end of this document}{ % read current section\; % \eIf{understand}{ % go to next section\; % current section becomes this one\; % }{ % go back to the beginning of current section\; % } % } % \caption{How to write algorithm} % \end{algorithm} % % %%%%%%%%%%%%%% predefined keywords % % \KwIn{input} % \KwOut{output} % \KwData{input} % \KwResult{output} % \KwTo % a simple keyword % \KwFrom % a simple keyword % \KwRet{[value]} % \Return{[value]} % \Begin{block inside} % \eIf{condition}{Then Block}{Else block} % in blocks % \If{condition}{Then block} % in a block % \uIf{condition}{Then block} % in a block unended % \lIf{condition}{Else text} % on the same line % \Else{inside Else} % in a block % \lElse{Else text} % on the same line % \uElse{Else text} % in a block unended % \ElseIf{inside Elseif} % in a block % \lElseIf{Elseif text} % on the same line % \uElseIf{Elseif text} % in a block unended % \Switch{Condition}{Switch block} % \Case{a case}{case block} % in a block % \lCase{a case}{case text} % on the same line % \Other{otherwise block} % in a block % \lOther{otherwise block} % on the same line % \For{condition}{text loop} % in a block % \lFor{condition}{text} % on the same line % \ForEach{condition}{text loop} % in a block % \lForEach{condition}{text} % on the same line % \ForPar{condition}{text loop} % in a block % \lForPar{condition}{text} % on the same line % \While{condition}{text loop} % in a block % \lWhile{condition}{text loop} % on the same line % \Repeat{End condition}{text loop} % in a block % \lRepeat{condition}{text} % on the same line % %%%%%%%%%%%%%% % % History: % % - July 18 2017 - revision 5.2 % * FIX: There was an overfull box 0.8pt with boxruled algorithm. This is fixed. % * FIX: problem when mixing caption package and figure option. This bug was partially corrected % in 5.0 for one side document but with false indentation and not working for two side % document. This is now fully fixed. % * FIX: misaligned lines numbers with noline option % * FIX: Fix croation keywords thanks to Ivan Kolan % * FIX: there was an overfull hbox of 8.5pt when using [H] and ruled caption. This is fixed. % * FIX: \SetCustomAlgoRuledWidth only changed midrule. This is fixed, it changes all the rules % - October 19 2015 - revision 5.1 % * CHANGE/ADD: l commands (the ones as \lIf) can now be used with a % star. If done, no end of line are done, so you can enclose % l command into another one. For example, you can write: % \lForEach{$i$}{\lIf*{foo}{bar}}. % Note that when you use a star, side comments are not allowed. % * CHANGE/ADD: Now you can have a side comment at end of macros which % have a block. For example you can do : % \Begin(\tcc*[h]{side comment for begin}{text}(\tcc*[h]{side comment after end}) % Note: there are some side effects for some commands: % \SetKwProg : macro defined thanks to \SetKwProg are allowed % to have no end marker. In this case, % beware to end side comment, this can % do weird output (but no error) % * CHANGE: \SetKwSwitch defines also an \uOther command which was not % the case until this release. % * CHANGE: \SetStartEndCondition{typo1}{typo2}{typo3} defined two end % conditions (type2 and typo3) : typo3 is no more used for % case condition as typo2 is used which is more consistent % since there is a condition followed by a keyword as for % if-then or other command that are defined using typo2. % * CHANGE: keywords was not language dependant to allow to use multiple % languages in the same document, but some keywords in % different language were having the same keyword that lead % last one declared to replace first one and so you could have some % spanish keywords printed as you were in portuguese. So % this behavior is changed from now: % - localized keywords are defined if according language % option is defined ; % - if you want to keep old behaviour and use localized % keywords without using language option (keep old % behavior), you can use languagekw option % (e.g. frenchkw, germankw, ...). Note that you can use % multiple languagekw options at the same time, in % contrary of language option. Note also that if you use % multiple languagekw options, you can get back the same % problem as previously when keywords was not language % dependant. % * ADD: new typo styles: % - Arguments of functions have now their own style. By % default, FuncArgSty is the same as ArgSty. % - Name of KwProg have now their own sty (they used ArgSty % previously). By default, ProgSty is still ArgSty. % As usual, \SetFuncArgSty{}, FuncArgSty{} and % \SetProgSty{}, ProgSty{} are macros to set and use these % typo styles. % * ADD: Options to manage algorithm hangindent % Until this revision, long statement acts as classical text and % continue on next line starting from the same point. This makes % difficult to notice that the new lines of text is not a new % statement. Now, hangindent is managed and when a long % statement continue on next lines, lines, except the first, % are indented. % Option: noalgohanging % By default, long statement are indented on subsequent % lines; with this option you get old behavior and lines are % no more indented % Option: hangingcomment % Comment that are alone on a line (not side comment) are % not driven by algo hanging: subsequent lines of long % comments are indented according to width of start comment % marker. With this option, comment are indented like normal % statement. % Option: hanginginout % As for comment, by default, in/out keywords and input % keywords (defined by \SetKwInOut or \SetKwInput) are not % indented by algorithm hangindent. They are indented % according to width of input keyword. If you want that these % keywords acts like normal statement, use this option. % \SetAlgoHangIndent{length} % This macro allows you to set your own indent length. By % default, \SetAlgoHangIndent{0.5em} % * ADD: Group markers. % This option is related to block markers of release 5.0. Some % have ask to put also block markers for single line % command. This new feature has been implemented to do this. % So, you can now ask package to put begin and end keywords % automatically at start and end of single line command (see % example in documentation). % These new group markers macros are: % - \AlgoDisplayGroupMarkers and \AlgoDontDisplayGroupMarkers % Note that a new option has also been added: displaygroupmarkers % * ADD: \SetCustomAlgoRuledWidth{length} % set a custom ruled width of ruled and algoruled options ; % note that by the moment you use this macro, rules will have % this fixed length: this can cause strange behavior in % multicolumn mode or other layout that change the line % width. % * ADD: turkish language option % * FIX: a spurious whitespace which results in a spurious indent in the % user's text right after the end of the algorithm environment % was introduced in release 5.0. This is fixed now thanks to % Alexander Malkis. % * FIX: there was a problem with margins in caption when option figure % was use with caption package. This is fixed. % * FIX: when changing font size in caption with, interline skip stayed % unchanged and so with a small font was to large. This is fixed. % * FIX: in contrary of that is written in the documentation, ':' what % not in KwSty typo for KwIn and KwOut command. This is fixed. % * FIX: strange behaviour with label and lines numbered: @currentlabel % was updated according to algo line number not in all % situation. For e.g, with hyperref package, always updated ; % with \nlset also updated, but with \nl or linesnumbered % option, not updated. This "feature" causes different output % with \label command according to options used which is not % that one want. This is solved now, and @currentlabel is % always updated so \label command works always is the same way. % * FIX: some czech keywords % * FIX: some spanish keywords % * FIX: some croatian keywords % * FIX: krantz class changes definition of chapter and get one more % option that classical classes as book.cls or report.cls and % broke fix for hyperref on chapter definition. This is now % fixed and algorithm detects use of krantz class and use then % a definition of chapter working with krantz class. % * FIX: an issue with internal macro which causes ([Q]) use as argument % of some environment to be misprinted (thanks to Martin Schröder). % * FIX: mispelled name of hyperrefcounter inside internal macro. % % - January 06 2013 - revision 5.0 % * CHANGE: SetKwSwitch takes now 9 args: 9th arg is the same as % previous 8th arg ('end of switch' keyword). New 8th arg is % 'end of case' keyword. This is due to change of release % 3.2 which introduce end after case block... as I never % test with longend option, I never see that the 'end % switch' used for case was not good. % * CHANGE: when no end keyword is defined in a block macro, then % algorithm2e does no more try to print it. So even with lined or noline % option, no empty line is printed (before: a blank end was % printed, so a blank line appeared) % * Internal Change: add some internal function to improve readibility % (thanks to Philip K. F. H\ölzenspies) % * ADD: Block markers. % You can now ask package to put begin and end keywords automatically at begin % and end of blocks, it means each group of commands shifted and enclosed in % braces. % This is tricky to use but, combined with \SetStartEndCondition and % redefinition of keywords, you should be abble to simulate any syntax. See % examples in documentation where a generic example is derived in pseudo-code, % python and C by keeping code and changing only style using block markers % macros, \SetStartEndCondition and some redefinition of keywords. % These new block markers macros are: % - \AlgoDisplayBlockMarkers and \AlgoDontDisplayBlockMarkers % - \SetAlgoBlockMarkers{begin marker}{end marker} % - \BlockMarkersSty{text} and \SetBlockMarkersSty % Note that a new option has also been added: displayblockmarkers % * ADD: \leIf macro automatically defined by \SetKwIF: allow to define % an if-then-else on a single line. % * ADD: new macro \SetStartEndCondition{typo1}{typo2}{typo3} which % sets typo around condition in For, If, Switch, Case and % Repeat macros. First two are used around For, If, Swith % conditions, First and third are used for Case and Repeat % condition where condition ends the line. Default definition % is \SetStartEndCondition{ }{ }{}. % A common alternative is \SetStartEndCondition{ (}{) }{)} % Can also be used to remove space around condition, for % example if you want python style commands: % \SetStartEndCondition{ }{}{} and \SetKwFor{For}{for}{:}{} % * ADD: new environment algomathdisplay which allow display math (like inside \[ \] or $$ $$) % handling end line and line number % * ADD: new command \SetKwProg{Env}{Title}{is}{end} which defines a macro % \Env{args}{text}. Env is a block with 'Title' (in \CapSty) at the beginning % followed by args followed by 'is' then 'text' is put below inside a block ended % by 'end'. If no 'end' is specified, nothing is written (no % blank line is inserted). Useful to typeset function or prog for example: % \SetKwProg{Fn}{Function}{ is}{end} makes \Fn{afunc(i: int) : int}{return 0\;} % writes: % Function afunc(i: int) : int is % | return 0; % end % or \SetKwProg{Def}{def}{:}{} makes \Def{afunc(i: int)}{return 0\;} writes: % def afunc(i: int): % | return 0 % Tip: combine it with \SetKwFunction to write recursive function algorithm. With % example above, you could define \SetKwFunction{\Afunc}{afunc} and then write: % \Def{\Afunc{i:int}{\eIf{i>0}{\KwRet \Afunc{i-1}}{\KwRet 0\;}} that writes: % def afunc(i: int): % | if(i>0): % | return afunc(i-1) % | else: % | return 0 % with appropriate typo. % * ADD: option croatian: croatian keywords (thanks to Ivan Kohan and % Yvan Gavran) % * ADD: option ngerman: same as german option but so can be used with global option ngerman % of babel % * ADD: option spanish: Spanish support (thanks to Mario Abarca) % * ADD: unterminated block: useful to add part separator that doesn't necessary need an end % keyword. % Designed on the pattern of unterminated if (see \uIf macro) allowing to % add a block that is not terminated by a keyword. Such block are defined in the same % time as a block is defined by adding a macro beginning with u. So, for example, % predefined \SetKwBlock{Begin}{begin}{end} defines now two commands: % - \Begin{} as previously which print a begin - end block % - \uBegin{} that defines a begin only block % * FIX: problem when numbering line inside until condition of % \SetKwRepeat macro: line number was not correctly aligned. % * FIX: dotocloa option which was broken % * FIX: uIf and uCase didn't have same behavior when used with % noline, vlined or lined option. This is fixed. Side effect: no empty % line after an uIf or uCase when used with options lined or vlined % * FIX: a bug with Repeat Until command when use with side comment on Until % * FIX: a bug with side text -- text put into () -- of command macro (SetKwIf and so on) % which was always setting a ';' even after a \DontPrintSemicolon % * FIX: a bug with hyperref and chapter definition (thanks to Hubert Meier) % * FIX: bugs with l macro and side comment % * FIX: revision number % * FIX: fix non ascii character (utf8 not yet recognized by all latex engine) % * FIX: fnum@algocf had an useless parameter which sometimes broke expansion and output an error % * FIX: works now with multicol package % % - december 14 2009 - revision 4.1 % * ADD: new command \SetKwHangingKw{Name}{text} (hanging indent with keyword): This creates a % hanging indent much like \texttt{SetKwInput}, except that it removes the trailing `:' % and does not reset numbering (thanks to Nathan Tallent) % % - november 17 2009 - revision 4.00 - % % * CHANGE: IMPORTANT: some commands have been renamed to have consistent naming (CamlCase % syntax) and old commands are no more available. If you doesn't want to change % your mind or use old latex files, you can use oldcommands option to enable old % commands back. % text. Here are these commands: % - \SetNoLine becomes \SetAlgoNoLine % - \SetVline becomes \SetAlgoVlined % - \Setvlineskip becomes \SetVlineSkip % - \SetLine becomes \SetAlgoLined % - \dontprintsemicolon becomes \DontPrintSemicolon % - \printsemicolon becomes \PrintSemicolon % - \incmargin becomes \IncMargin % - \decmargin becomes \DecMargin % - \setnlskip becomes \SetNlSkip % - \Setnlskip becomes \SetNlSkip % - \setalcapskip becomes \SetAlCapSkip % - \setalcaphskip becomes \SetAlCapHSkip % - \nlSty becomes \NlSty % - \Setnlsty becomes \SetNlSty % - \linesnumbered becomes \LinesNumbered % - \linesnotnumbered becomes \LinesNotNumbered % - \linesnumberedhidden becomes \LinesNumberedHidden % - \showln becomes \ShowLn % - \showlnlabel becomes \ShowLnLabel % - \nocaptionofalgo becomes \NoCaptionOfAlgo % - \restorecaptionofalgo becomes \RestoreCaptionOfAlgo % - \restylealgo becomes \RestyleAlgo % - gIf macros and so on do no more exist % * NEW: - Compatibily with other packages improven by changing name of internal % macros. Algorithm2e can now be used with arabtex for example, if this last is % loaded after algorithm2e package. % * ADD: - OPTION endfloat: endfloat packages doesn't allow float environment inside other % environment. So using it with figure option of algorithm2e makes error. This % option enables a new environment algoendfloat to be used instead of algorithm % environment that put algorithm at the end. algoendfloat environment make % algorithm acting as endfloat figures. This option requires endfloat packages. % * ADD: - OPTION norelsize: starting from this release (v4.00), algorithm2e package uses % relsize package in order to get relative size for lines numbers; but it seems % that some rare classes (such as inform1.cls) are not compatible with relsize; to % have algorithm2e working, this option makes algorithm2e not to load relsize % package and go back to previous definition by using \scriptsize font for lines % numbers. % * ADD: - OPTION onelanguage: allow, if using standard keywords listed below, to switch % from one language to another without changing keywords by using appropriate % language option: % . KwIn, KwOut, KwData, KwResult % . KwTo KwFrom % . KwRet, Return % . Begin % . Repeat % . If, ElseIf, Else % . Switch, Case, Other % . For, ForPar, ForEach, ForAll, While % . % * ADD: - OPTION rightnl: put lines numbers to the right of the algorithm instead of left. % * ADD: new commands \setRightLinesNumbers and \setLeftLinesNumbers which sets the lines % numbers to the right or to the left of the algorithm. % * ADD: - new kind of keywords: KwArray used to define arrays: % \SetKwArray{Kw}{array} defines an array keywords Kw called array and printed in % DataSty style when call with \Kw. It can be used with one argument which % denotes the element index: \Kw{n} prints array[n] with array in DataSty and n in % ArgSty. % * ADD/FIX: rules of ruled, algoruled, tworuled styles used rules of different sizes! This % is now fixed. Moreover size of the rules is now controlled by a length and so % can be customized by the user. % \algoheightrule is the height of the rules and can be changed via \setlength % \algoheightruledefault is the default height of he rules (0.8pt) % \algotitleheightrule is the height of the rule that comes just after the % caption in ruled and algoruled style; it can be changed via \setlength % \algotitleheightruledefault is the default height of this rules (0.8pt) % Thanks to Philippe Dumas who reports the bug and make the suggestion. % * ADD: - \SetAlgoCaptionSeparator which sets the separator between Algorithm 1 and the % title. By default it's ':' and caption looks like "Algorithm 2: title" but now % you can change it by using for example \SetAlgoCaptionSeparator{.} which will % give "Algorithm 3. title" % * ADD: - \SetAlgoLongEnd and \SetAlgoShortEnd and \SetAlgoNoEnd commands which act as % corresponding package options % * ADD: - OPTIONS italiano and slovak as new language (thanks to Roberto Posenato and % Miroslav Binas) % * CHANGE: - Fnt and Sty macro to have consistent use and naming (see below) % * ADD: - \AlCapSty, \AlCapNameSty, \AlCapFnt, \AlCapNameFnt, \ProcSty, \ProcFnt, % \ProcNameSty, \ProcNameFnt, \ProcArgSty, ProcArgFnt and corresponding "set macro" % \SetAlCapSty, \SetAlCapNameSty, \SetAlCapFnt, \SetAlCapNameFnt, \SetProcSty, % \SetProcFnt, \SetProcNameSty, \SetProcNameFnt, \SetProcArgSty, \SetProcArgFnt which % control the way caption is printed. Sty macro use command taking one parameter as % argument, Fnt macros use directly command. In Fact caption is printed as follow: % \AlCapSty{\AlCapFnt Algorithm 1:}\AlCapNameSty{\AlCapNameFnt my algorithm} % By default, \AlCapSty is textbf and \AlCapFnt is nothing. \AlCapNameSty keep text % as it is, and \AlCapNameFnt do nothing also. % You can redefine \AlCapFnt and \AlCapNameFnt by giving macro to \Set commands. For % example, you can do \SetAlCapFnt{\large} to see Algorithm printed in \large font. % You can redefine \AlCapSty, \AlCapFnt, \AlCapNameSty and \AlCapNameFnt with the % corresponding \Set command. For the Sty commands, you have to give in parameter % name of a macro (whithout \) which takes one argument. For example, % \SetAlCapFnt{textbf} defines the default behaviour. If you want to do more % complicated thing, you should define your own macro and give it to \SetAlCapFnt or % \SetAlCapNameFnt. Here are two examples: % - \newcommand{\mycapsty}[1]{\tiny #1}\SetAlCapNameSty{mycapsty} % - \newcommand{\mycapsty}[1]{\textsl{\small #1}}\SetAlCapNameSty{mycapsty} % Or you can combine the two, for the last example you can also do: % \SetAlCapNameSty{textsl}\SetAlCapNameFnt{\small} % Thanks to Jan Stilhammer who gives me the idea of \AlCapNameFnt. % * CHANGE \AlTitleFnt to match definition of all other Fnt macros and add a \AlTitleSty % macro (see below) . Now you set \AlTitleFnt by calling \SetAlTitleFnt with % directly a macro without parameter in argument: % Example: \SetAlTitleFnt{\small} to set title in small font. % * ADD: - \AlTitleSty and \SetAlTitleSty commands to set a style for title. These commands % are defined from a macro taking the text in argument, as \textbf for example. % To set the TitleSty you have to give name of the macro (without the '\') % to \SetAlTitleSty. For example \SetAlTitleSty{textbf} to set \textbf style. % * ADD: - new command \SetAlgorithmName{algorithmname}{list of algorithms name} which % redefines name of the algorithms and the sentence list of algorithms. Second % argument is the name that \autoref, from hyperref package, will use. Example: % \SetAlgorithmName{Protocol}{List of protocols} if you prefer protocol than % algorithm. % * ADD: - new \SetAlgoRefName{QXY} which change the default ref (number of the algorithm) by % the name given in parameter (QXY in the example). % * ADD: - new command \SetAlgoRefRelativeSize{-2} which sets the output size of refs, defined % by \SetAlgoRefName, used in list of algorithms. % * ADD: - two dimensions to control the layout of caption in ruled, algoruled and boxruled % algorithms: % - interspacetitleruled (2pt by defaut) which controls the vertical space between % rules and title in ruled and algoruled algorithms. % - interspaceboxruled (2\lineskip by default) which controls the vertical space % between rules and title in boxruled algorithms. % These two dimensions can be changed by using \setlength command. % * ADD: - With the fix (see below) of procedure and function environments, a new feature has % been added: the name of the procedure or function set in caption is automatically % defined as a KwFunction and so can be used as a macro. For example, if inside a % procedure environment you set \caption{myproc()}, you can use \myproc macro in you % main text. Beware that the macro is only defined after the \caption! % * ADD: - OPTION nokwfunc to unable the new feature described above in function and % procedure environment. Useful if you use name of procedure or function that cannot % be a command name as a math display for example. % * ADD: - \SetAlgoNlRelativeSize{number} command which sets the relative size of line % numbers. By default, line numbers are two size smaller than algorithm text. Use % this macro to change this behavior. For example, \SetAlgoNlRelativeSize{0} sets it % to the same size, \SetAlgoNlRelativeSize{-1} to one size smaller and % \SetAlgoNlRelativeSize{1} to one size bigger % * ADD: - \SetAlgoProcName{aname} command which sets the name of Procedure printed by % procedure environment (the environment prints Procedure by default). Second % argument is the name that \autoref, from hyperref package, will use. % * ADD: - \SetAlgoFuncName{aname} command which sets the name of Function printed by % procedure environment (the environment prints Function by default). Second % argument is the name that \autoref, from hyperref package, will use. % * ADD: - \SetAlgoCaptionLayout{style} command which sets style of the caption; style must % be the name of a macro taking one argument (the text of the caption). Examples % below show how to use it: % . \SetAlgoCaptionLayout{centerline} to have centered caption % . \SetAlgoCaptionLayout{textbf} to have bold caption % If you want to apply two styles in the same time, such as centered bold, you have % to define you own macro and then use \SetAlgoCaptionLayout with its name. % * ADD: - OPTION procnumbered: which makes the procedure and function to be numbered as % algorithm % * ADD: - OPTIONS tworuled and boxruled % these are two new layouts: tworuled acts like ruled but doesn't put a line after % caption ; boxruled surround algorithm by a box, puts caption above and add a line % after caption. % * REMOVE: - SetKwInParam has been deleted since not useful itself because of different % macros which can do the same in a better and a more consistent way as % SetKwFunction or SetKw. % * FIX: - line number is now correctly vertically aligned with math display. % * FIX: - references with hyperref. No more same identifier or missing name error. BUT now % you must NOT use naturalnames option of hyperref packages if you do PdfLaTeX % * FIX: - autoref with hyperref package (thanks to Jörg Sommer who notices the problem). % * FIX: - titlenumbered was not working! fixed. % * FIX: - Else(){} acted like uElse. Corrected. % * FIX: - noend management: when a block was inside another and end of block was following % each other, a blank line was added: it's now corrected. % * FIX: - Function and Procedure environment was no more working as defined originally: the % label was no more name of the procedure, it acts always as if procumbered option % has been used. % * FIX: - line numbers had a fixed size which can be bigger than algorithm text accordingly % to \AlFnt set (see also new command \SetAlgoNlRelativeSize above) % * FIX: - semicolon in comments when dontprintsemicolon is used. % * FIX: - listofalgorithms adds a vertical space before first algo of a chapter as for % listoffigures or listoftables % * FIX: - listofalgorithms with twocolumns mode and some classes which don't allow onecolumn % and so don't define \if@restonecol as prescribed in LaTeX (sig-alternate for % example) % * FIX: - algorithm2e now works with elsart cls and some more classes. % * FIX: - blocks defined by SetKwBlock act now as other blocks (if for instance) and don't % write end in vlined mode, instead they print a small horizontal line as required % by the option. % * FIX: - underfull hbox warning at each end of algorithm environment removed. % % * INTERNAL CHANGE: - short end keyword are deduce from long end keyword by keeping the % first one. Allows to avoid double definition. % * INTERNAL CHANGE: - procedure, function and algorithm are now resolved by the same % environment to avoid code duplication. % % - October 04 2005 - revision 3.9 - % * ADD: - \setalcaphskip command which sets the horizontal skip before Algorithm: in caption % when used in ruled algorithm. % * ADD: - \SetAlgoInsideSkip command which allows to add an extra vertical space before and % after the core of the algorithm (ie: \SetAlgoInsideSkip{bigskip}) % * CHANGE: - caption, when used with figure option, is no more controlled by algorithm2e % package and so follows the exact behaviour of figures. The drawback is that you % cannot change the typo with AlTitleFnt or CapFnt. The avantage is that if you % use caption package, it works. % * FIX: - problem with numbering line and pdflatex % * FIX: - error when algorithm2e package was used with beamer and listings together % - February 12 2005 - revision 3.8 - % * FIX: - extra line with noend option. % - February 10 2005 - revision 3.7 - % * ADD: - sidecomment: different macros allowing to put text right after code on the same % line. They are defined in the same time comment macros are defined with a star % after the macro name. By default comments are right justified but this can be % change with appropriate option in the macro. Ex: % . default: \tcc*{side comment} % . same as previous: \tcc*[r]{side comment} % . left justify: \tcc*[l]{side comment} % . here: \tcc*[h]{side comment} don't put the end of line mark before % comment (; by default) and don't end the line. % . flushed: \tcc*[f]{side comment} same as the precedent but right % justified % * ADD: - OPTION scright (default): right justified side comments (side comments % are flushed to the righr) % * ADD: - OPTION scleft: left justified side comments (side comments are put right after the % code line) % * ADD: - \SetSideCommentLeft acts as scleft option % * ADD: - \SetSideCommentRight acts as scright option % * ADD: - block like macro side text: all macro defining a block allows now to put text right % after key words by putting text into (). Done to be used with sidecomment macros, % but all text can be used. % Ex: \eIf(\tcc*[f]{then comment}){test}{then text}(else side text){else text} % * ADD: - OPTION fillcomment (default): end mark of comment is flushed to the right so % comments fill all the width of text. % * ADD: - OPTION nofillcomment: end mark of comment is put right after the comment. % * ADD: - \SetNoFillComment acts as nofillcomment option. % * ADD: - \SetFillComment acts as fillcomment option. % * ADD: - OPTION dotocloa: which adds an entry in the toc for the list of algorithms. This % option load package tocbibind if not already done and so list of figures and list % of tables are also added in the toc. If you want to control which ones of the lists % will be added in the toc, please load package tocbibind before package algorithm % and give it the options you want. % * FIX: - vertical spacing for uif macro with noend option % * FIX: - all the compatibility problems between caption and other packages % * FIX: - typographical differences between list of algorithms and other lists when in % report or book % % - January 24 2005 - revision 3.6 - % * FIX: - vertical spacing and space characters at the beginning or end of comments. % line numbers of comments not in the NlSty. % Thanks to Arnaud Giersch for his comments and suggestions. % * FIX: - Set*Sty macro: the styles defined was not protected and was modified by surrounding % context. For example KwTo in a \For{}{} was in bold AND italic instead of just in % bold. % * FIX: - line number misplacement after \Indp % % - January 21 2005 - revision 3.5 - % * ADD: - hidden numbering of the lines. Lines are auto-numbered but numbers are shown only % on lines you specify: % * linesnumberedhidden option or \LinesNumberedHidden macro activate this % functionnality. % * \ShowLn and \ShowLnLabel{lab} macros make the number visible on the % line. \ShowLnLabel{lab} allows to set a label for this line. % Thanks to Samson de Jager who makes this suggestion and provides the macros. % * ADD: - \AlCapFnt and \SetAlCapFnt which allow to have a different font for % caption. Works like \AlFnt and \SetAlFnt and by default is the same. % * ADD: - \AlCapSkip skip length. This vertical space is added before caption in plain ou % boxed mode. It allows to change distance between text and caption. % * FIX: - caption compatible with IEEEtran class. % * FIX: - some vertical spacing error with \uIf macros (Thanks to Arnaud Giersch) % * FIX: - Procedure and Function: lines are also numbered like algorithms % * FIX: - CommentSty was not used for Comments % % - January 10 2005 - revision 3.4 - % * FIX: - caption compatible with new release of Beamer class. % % - June 16 2004 - revision 3.3 - % * FIX: - Hyperlink references of Hyperref package works now if compiled with pdflatex % and [naturalnames] option of hyperref package is used. % * FIX: - algorithm[H] had problem in an list environment - corrected % * FIX: - interline was not so regular in nested blocks - corrected % * ADD - \SetVlineSkip macro which sets the vertical skip after the little horizontal % rule which closes a block in Vlined mode. By default 0.8ex % % - June 11 2004 - revision 3.2 - AUTO NUMBERING LINES !!! % * ADD: auto numbering of the lines (the so asked and so long awaiting feature) % this feature is managed by 3 options and 3 commands: % - linesnumbered option: lines of the algo are numbered except for comments and % input/output (KwInput and KwInOut) % - commentsnumbered option: makes comments be numbered % - inoutnumbered option: makes data input/output be numbered % - \nllabel{lab} labels the line so you can cite with \ref{lab} % - \LinesNumbered make the following algorithms having auto-numbered lines % - \linesnotnumbered make the following algorithms having no auto-numbered lines % * Change: algo2e option renames listofalgorithms in listofalgorithmes % * FIX: new solution for compatibility with color package, more robust and not tricky. % Many thanks to David Carlisle for his advices % % - June 09 2004 - revision 3.1 - % * Change: \SetKwSwitch command defines an additionnal macro \uCase and \Case prints end % * Change: now macros SetKw* do a renewcommand if the keyword is already defined. So you can % redefine default definition at your own convenience or change your definition % without introducing a new macro and changing your text. % * ADD: new macro \SetKwIF which do \SetKwIf and % \SetKwIfElseIf.The following default definition has been added: % \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{endif} % and so you get the macros; % \If \eIf \lIf \uIf \ElseIf \uElseIf \lElseIf \Else \uElse \lElse % * ADD: new macro \SetAlgoSkip which allow to fix the vertical skip before and after the % algorithms. Default is smallskip, do \SetAlgoSkip{} if you don't want an extra space % or \SetAlgoSkip{medskip} or \SetAlgoSkip{bigskip} if you want bigger space. % * ADD: macro \SetKwIf defines in addition a new macro \uElse (depending on wat name you % have given in #2 arg). % * ADD: macro \SetKwIfElseIf defines in addition a new macro \uElse and \ugElseIf (depending % on what name you have given in #2 and #3 arg). % * Change: baseline of algorithm is now top, so two algorithms can be put side by side. % * FIX: Compatibility with color package solved. The problem was due to a redefinition of % standard macros by color package. This solves compatibility problem with other % packages as pstcol or colortbl. (notified by Dirk Fressmann, Antti Tarvainen and Koby % Crammer) % * Fix: extra little shift to the right with boxed style algorithm removed (notified by % P. Tanovski) % * Fix: algoln option was buggy (notified bye Jiaying Shen) % * Fix: german and portuges option didn't work due to bad typo (notified by Martin Sievers, % Thorsten Vitt and Jeronimo Pellegrini) % % - February 13 2004 - revision 3.0 - % * Major revision which makes the package independent from float.sty, so now % - algorithm* works better, in particular can be used in multicols environments % - (known bug corrected) % [H] works now for all sort of environment but is handled differently for classic % environment and star environment (algorithm, figure, procedure and function). For star % environment, H acts like for classical figure environment, so it doesn't stay here % absolutely. % - (known bug corrected) % you can use now floatflt package with algorithm package and even with figure % option. Beware that if you want to put an algorithm inside a floatingfigure, it cannot % be floating, so [H] is required and then figure option should not be used, since % standard figure[H] are still floating with LaTeX. % * boxruled: a new style added. Possible now since no style no more defined by the float % package. % * nocaptionofalgo: dosen't print Algorithm #: in the caption for algorithm in ruled or % algoruled style. % note: this is just documentation of a macro which was already in the package. % - December 14 2003 - revision 2.52 - % * output message shorter % * French keyword macro \PourTous was missing for longend option, it has been added. % * TitleofAlgo prints Function or Procedure in corresponding environments. % % - October 27 2003 - revision 2.51 - Revision submitted to CTAN archive % * correction of a minor which make caption in procedure % and function to be blanck with pdfscreen package % (thanks to Joel Gossens for the notification) % * add two internal definition to avoid some errors when % used with Hyperref package (Hyperref package need to % define new counter macro from existing ones, and % don't do it for algorithm2e package, so we do it) % % - October 17 2003 - revision 2.50 - first revision for CTAN archive % * add \AlFnt and \SetAlFnt{font} macros: \AlFnt is used at the beginning of the caption and % the body of algorithm in order to define the fonts used for typesetting algorithms. You % can use it elsewhere you want to typeset text as algorithm. For example you can do % \SetAlFnt{\small\sf} to have algorithms typeset in small sf font. Default is nothing so % algorithm is typeset as the text of the document. % * add \AlTitleFnt{text} and \SetAlTitleFnt{font} macros: The {Algorithm: } in the caption is % typeset with \AlTitleFnt{Algorithm:}. You can use it to have text typeset as {Algorithm:} % of captions. Default is textbf. Default can be redefined by \SetAlTitleFnt{font}, for % example you can do \SetAlTitleFnt{emph} % * add CommentSty typo for text comment. % * add some compatibility with hyperref package (still an error on multiply defined refs but % pdf correctly generated) % * flush text to left in order to have correct indentation even with class as amsart which % center all figures % * add german, portuguese and czech options for title of algorithms and typo. % * add portuguese translation of predefined keywords * add czech translation of some % predefined keywords % % - December 23 2002 - revision 2.40 % * add some French keyword missing % * add function* and procedure* environment like algorithme* environment: print in one column % even if twocolumn option is specified for the document. % * add a new macro \SetKwComment to define macro which writes comments in the text. First % argument is the name of the macro, second is the text put before the comment, third is the % text put at the end of the comment.Default are \tcc and \tcp % * add new options to change the way algo are numbered: % [algopart] algo are numbered within part (counter must exist) % [algochapter] algo are numbered within chapter % [algosection] algo are numbered within section % % - March 27 2002 - revision 2.39 % * Gilles Geeraerts: added the \SetKwIfElseIf to manage % if (c) % i; % else if (c) % i; % ... % else % i; % end % * Also added \gIf \gElseIf \gElse. % % - January 02 2001 - revision 2.38 % * bugs related to the caption in procedure and function % environment are corrected. % * bug related to option noend (extra vertical space added % after block command as If or For) is corrected. % * czech option language added (thanks to Libor Bus: l.bus@sh.cvut.cz). % % - October 16 2000 - revision 2.37 % * option algo2e added: change the name of environment % algorithm into algorithm2e. So allow to use the package % with some journal style which already define an algorithm % environment. % % - September 13 2000 - revision 2.36 % * option slide added: require package color % * Hack for slide class in order to have correct % margins % % - November 25 1999 - revision 2.35 % * revision number match RCS number % * Thanks to David A. Bader, a new option is added: % noend: no end keywords are printed. % % - November 19 1999 - revision 2.32 % * minor bug on longend option corrected. % % - August 26 1999 - revision 2.31 % * add an option: figure % this option makes algorithms be figure and so are numbered % as figures, have Figure as caption and are put in % the \listoffigures % % - January 21 1999 - revision 2.3 beta % add 2 new environments: procedure and function. % These environments works like algorithm environment but: % - the ruled (or algoruled) style is imperative. % - the caption now writes Procedure name.... % - the syntax of the \caption command is restricted as % follow: you MUST put a name followed by 2 braces like % this ``()''. You can put arguments inside the braces and % text after. If no argument is given, the braces will be % removed in the title. % - label now puts the name (the text before the braces in the % caption) of the procedure or function as reference (not % the number like a classic algorithm environment). % There are also two new styles: ProcNameSty and % ProcArgSty. These style are by default the same as FuncSty % and ArgSty but are used in the caption of a procedure or a % function. % % - November 28 1996 - revision 2.22 % add a new macro \SetKwInParam{arg1}{arg2}{arg3}: % it defines a macro \arg1{name}{arg} which prints name in keyword % style followed byt arg surrounded by arg2 and arg3. The main % application is to a function working as \SetKwInput to be used % in the head of the algorithm. For example % \SetKwInParam{Func}{(}{)} allows % \Func{functionname}{list of arguments} which prints: % \KwSty{functioname(}list of arguments\KwSty{)} % % % - November 27 1996 - revision 2.21: % minor bug in length of InOut boxes fixed. % add algorithm* environment. % % - July 12 1996 - revision 2.2: \SetArg and \SetKwArg macros removed. % % \SetArg has been removed since it never has been % documented. % \SetKwArg has been removed since \SetKw can now % take an argument in order to be consistent with % \SetKwData and \SetKwFunction macros. % % - July 04 1996 - revision 2.1: still more LaTeX2e! Minor compatibility break % % Macros use now \newcommand instead of \def, use of \setlength, % \newsavebox, ... and other LaTeX2e specific stuff. % The compatibility break: % - \SetData becomes \SetKwData to be more consistent. So the old % \SetKwData becomes \SetKwInput % - old macros \titleofalgo, \Freetitleofalgo and \freetitleofalgo % from LaTeX209 version which did print a warning message and call % \Titleofalgo in version 2.0 are now removed! % % - March 13 1996 - revision 2.0: first official major revision. % % %%%%%%%%%%%%%% % % Known bugs: % ----------- % - horizontal spacing (indent) doesn't work with revtex4 class. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % for more complete informations you can see algorithm2e.tex % % %%%%%%%%%%%%%%%%%%%%%%%% Identification Part %%%%%%%%%%%%%%%%%%%%%%%%%%%% % \NeedsTeXFormat{LaTeX2e}[1994/12/01] % \ProvidesPackage{algorithm2e}[2017/07/18 v5.2 algorithms environments] % % %%%%%%%%%%%%%%%%%%%%%%%%%%% Initial Code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \@makeother\*% some package redefined it as a letter (as color.sty) \def\@firstword#1 #2\@nil{#1}% an useful fonction %%%%%%% Utilities: % \ifArgumentEmpty ; if c is empty, i.e. {}, then t, else e. % Function used internally, but may as well expose it to the user; it's useful \begingroup \catcode`\Q=3 \catcode`\T=3 \long\gdef\ALGOCF@argemptyaux#1#2Q#3#4#5T{#4} \long\gdef\ifArgumentEmpty#1{% \begingroup\long\edef\@tempa{\endgroup \ALGOCF@argemptyaux#1QQ{\noexpand\@secondoftwo}{\noexpand\@firstoftwo}T% }\@tempa } \endgroup % \long\def\ifArgumentEmpty#1{\bgroup % \catcode`\Q=3 % \catcode`\T=3 % \long\def\@tempa##1##2Q##3##4##5T{##4}% % \xdef\@tempa{\@tempa#1QQ{\noexpand\@secondoftwo}{\noexpand\@firstoftwo}T}% % \egroup\@tempa} %%%%%%%%%%% % % \algocf@longdef -> shorthand to reduce % \expandafter\long\expandafter\def % to % \expandafter\algocf@longdef % may look insignificant, but reads that much better ;) \def\algocf@longdef{\long\def} % % \algocf@newcommand (and helper \algocf@new@command) behaves like LaTeX's newcommand, % with two differences: % - the argument is not "\", but rather ""; i.e. one level of indirection % - if the command exists already, then \renewcommand, rather than \newcommand \def\algocf@newcommand#1{\expandafter\algocf@new@command\csname#1\endcsname} \def\algocf@new@command#1{% \begingroup \escapechar\m@ne\xdef\@gtempa{{\string#1}}\endgroup \expandafter\@ifundefined\@gtempa\newcommand\renewcommand#1}% % % \algocf@newcmdside % The largest time-saver; many commands we define have the pattern: % \()... % where "()" is optional. By defining them with this function, % the arguments are parsed and renumbered, i.e. the body works as if the % command was: % \... % and can use \ifArgumentEmpty to see whether its #1 exists (default case % for the side text is (), so there's no difference between calling % \foo{bar} % or % \foo(){bar} % Technically this is new behaviour, but it shouldn't really occur... \algocf@longdef\algocf@newcmdside#1#2#3{% \expandafter\def\csname#1\endcsname{% \@ifnextchar({\csname algocf@#1strip\endcsname}{\csname algocf@#1strip\endcsname()}% }% \expandafter\algocf@longdef\csname algocf@#1strip\endcsname(##1){\csname algocf@#1main\endcsname{##1}}% \algocf@newcommand{algocf@#1main}[#2]{#3}% } % % a serie of newcmdside macro for block that allows a comment after the end % \()...()% % % 1. kind of begin-end : for command with only one block as begin-end \algocf@longdef\algocf@newcmdside@kobe#1#2{% % command starts by checking for side comment at beginning \expandafter\def\csname#1\endcsname{% \@ifnextchar({\csname algocf@#1strip\endcsname}{\csname algocf@#1strip\endcsname()}% }% % next we strip comment and include it in cmd that get body and check last side comment \expandafter\algocf@longdef\csname algocf@#1strip\endcsname(##1)##2{\csname algocf@#1checkcomfol\endcsname{##1}{##2}}% % now check for last side comment; args are : , \expandafter\algocf@longdef\csname algocf@#1checkcomfol\endcsname##1##2{\@ifnextchar({\csname algocf@#1withendcom\endcsname{##1}{##2}}{\csname algocf@#1noendcom\endcsname{##1}{##2}}}% call macro that manages end of command, with or without last side comment % finally manage end of macro... with end side comment... \expandafter\algocf@longdef\csname algocf@#1withendcom\endcsname##1##2(##3){% \csname algocf@#1main\endcsname{##1}{##2}{##3}}% % ... or without end side comment \expandafter\algocf@longdef\csname algocf@#1noendcom\endcsname##1##2{% \csname algocf@#1main\endcsname{##1}{##2}{}}% \algocf@newcommand{algocf@#1main}[3]{#2}% }% % % 2. kind of if-else : for command with two blocks as if-then-else \algocf@longdef\algocf@newcmdside@koif#1#2{% % command starts by checking for side comment at beginning \expandafter\def\csname#1\endcsname{% \@ifnextchar({\csname algocf@#1strip\endcsname}{\csname algocf@#1strip\endcsname()}% }% % next we strip comment and include it in cmd that get body and check last side comment \expandafter\algocf@longdef\csname algocf@#1strip\endcsname(##1)##2##3{\csname algocf@#1checkcomfol\endcsname{##1}{##2}{##3}}% % now check for last side comment; args are : <1st side com>, <1st body of cmd>, <2nd body of cmd> \expandafter\algocf@longdef\csname algocf@#1checkcomfol\endcsname##1##2##3{\@ifnextchar({\csname algocf@#1withendcom\endcsname{##1}{##2}{##3}}{\csname algocf@#1noendcom\endcsname{##1}{##2}{##3}}}% call macro that manages end of command, with or without last side comment % finally manage end of macro... with end side comment... \expandafter\algocf@longdef\csname algocf@#1withendcom\endcsname##1##2##3(##4){% \csname algocf@#1main\endcsname{##1}{##2}{##3}{##4}}% % ... or without end side comment \expandafter\algocf@longdef\csname algocf@#1noendcom\endcsname##1##2##3{% \csname algocf@#1main\endcsname{##1}{##2}{##3}{}}% \algocf@newcommand{algocf@#1main}[4]{#2}% }% % % \algocf@newcmdsides % Like the command above, but with an optional side text at the end % of the command as well, i.e.: % \()() % It may be a bit confusing that doesn't count , % but since it is for internal use, the naming can be a little more % fuzzy. This function behaves as if: % = \algocf@longdef\algocf@newcmdsides#1#2#3#4#5{% \expandafter\def\csname#1\endcsname{% \@ifnextchar({\csname algocf@#1strip\endcsname}{\csname algocf@#1strip\endcsname()}% }% \expandafter\algocf@longdef\csname algocf@#1strip\endcsname(##1){\csname algocf@#1main\endcsname{##1}}% \algocf@newcommand{algocf@#1main}[#2]{#3\@ifnextchar({\csname algocf@#1end\endcsname}{#4#5}}% \expandafter\algocf@longdef\csname algocf@#1end\endcsname(##1){#4{##1}\strut\par}% }% % % definition of commands which can be redefined in options of the package. % \newcounter{AlgoLine}% \setcounter{AlgoLine}{0}% % \newcommand{\algocf@algocfref}{\relax}% \newcommand{\listalgorithmcfname}{}% \newcommand{\algorithmcfname}{}% \@ifundefined{algorithmautorefname}{\newcommand{\algorithmautorefname}{algorithm}}{\renewcommand{\algorithmautorefname}{algorithm}}% \newcommand{\algorithmcflinename}{}% \newcommand{\algocf@typo}{}% \newcommand{\@algocf@procname}{}\newcommand{\procedureautorefname}{}% \newcommand{\SetAlgoProcName}[2]{\renewcommand{\@algocf@procname}{#1}\renewcommand{\procedureautorefname}{#2}}% \newcommand{\@algocf@funcname}{}\newcommand{\functionautorefname}{}% \newcommand{\SetAlgoFuncName}[2]{\renewcommand{\@algocf@funcname}{#1}\renewcommand{\functionautorefname}{#2}}% \newcommand{\@algocf@titleofalgoname}{\algorithmcfname}% \newcommand{\@algocf@algotitleofalgo}{% \renewcommand{\@algocf@titleofalgoname}{\algorithmcfname}}% \newcommand{\@algocf@proctitleofalgo}{% \renewcommand{\@algocf@titleofalgoname}{\algocf@procname}}% % \newcommand{\algocf@style}{plain}% \newcommand{\@ResetCounterIfNeeded}{}% \newcommand{\@titleprefix}{}% % \newcommand{\algocf@numbering}[1]{\newcommand{\algocf@within}{#1}}% % \newcommand{\defaultsmacros@algo}{\algocf@defaults@shortend}% % \newcommand{\algocf@list}{loa}% \newcommand{\algocf@float}{algocf}% % \newcommand{\algocf@envname}{algorithm}% \newcommand{\algocf@listofalgorithms}{listofalgorithms}% % % %% redefine chapter so that it adds a vspace in the loa as the original does for lof and lot % \let\algocf@original@chapter=\chapter% % \def\chapter{\expandafter\addtocontents{loa}{\protect\addvspace{10\p@}}\algocf@original@chapter}% % % bug correction with hyperref submitted by Hubert Meier \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname @chapter\endcsname\relax\else % \let\algocf@original@chapter=\chapter% % \def\chapter{\addtocontents{loa}{\protect\addvspace{10\p@}}\algocf@original@chapter}% \let\algocf@original@chapter=\@chapter% \@ifclassloaded{krantz}{% \def\@chapter[#1][#2]#3{\algocf@original@chapter[#1][#2]{#3}\addtocontents{loa}{\protect\addvspace{10\p@}}}% }{% \def\@chapter[#1]#2{\algocf@original@chapter[#1]{#2}\addtocontents{loa}{\protect\addvspace{10\p@}}}% }% \fi % %% if@restonecol is defined in article and book but some other classes don't define it and we need it, so we do \ifx\if@restonecol\relax\else\newif\if@restonecol\fi% % % %%%%%%%%%%%%%%%%%%%%%% Declaration of Options %%%%%%%%%%%%%%%%%%%%%%%%%%% % \RequirePackage{ifthen}% % \newboolean{algocf@displayblockmarkers}\setboolean{algocf@displayblockmarkers}{false}% \DeclareOption{displayblockmarkers}{% \setboolean{algocf@displayblockmarkers}{true}% }% \newboolean{algocf@displaygroupmarkers}\setboolean{algocf@displaygroupmarkers}{false} \DeclareOption{displaygroupmarkers}{% \setboolean{algocf@displaygroupmarkers}{true}% }% % \newboolean{algocf@nokwfunc}\setboolean{algocf@nokwfunc}{false}% \DeclareOption{nokwfunc}{% \setboolean{algocf@nokwfunc}{true}% }% % \newboolean{algocf@oldcommands}\setboolean{algocf@oldcommands}{false}% \DeclareOption{oldcommands}{% \setboolean{algocf@oldcommands}{true}% }% % \newboolean{algocf@leftlinenumber}\setboolean{algocf@leftlinenumber}{true}% \newcommand{\setLeftLinesNumbers}{\setboolean{algocf@leftlinenumber}{true}}% \newcommand{\setRightLinesNumbers}{\setboolean{algocf@leftlinenumber}{false}}% \DeclareOption{rightnl}{% \setRightLinesNumbers% }% % \newboolean{algocf@endfloat}\setboolean{algocf@endfloat}{false}% \DeclareOption{endfloat}{% \setboolean{algocf@endfloat}{true}% \newcounter{postalgo}\setcounter{postalgo}{0}% }% % \newboolean{algocf@procnumbered}\setboolean{algocf@procnumbered}{false}% \DeclareOption{procnumbered}{% \setboolean{algocf@procnumbered}{true}% }% % \DeclareOption{algo2e}{% \renewcommand{\algocf@envname}{algorithm2e}% \renewcommand{\algocf@listofalgorithms}{listofalgorithmes}% }% % \newboolean{algocf@slide}\setboolean{algocf@slide}{false}% \DeclareOption{slide}{% \setboolean{algocf@slide}{true}% }% % \newboolean{algocf@figurecaption}\setboolean{algocf@figurecaption}{false}% \DeclareOption{figure}{% \renewcommand{\algocf@list}{lof}% \renewcommand{\algocf@float}{figure}% \AtBeginDocument{\@ifpackageloaded{caption}{\setboolean{algocf@figurecaption}{true}}{}}% }% % \newboolean{algocf@optonelanguage}\setboolean{algocf@optonelanguage}{false}% \DeclareOption{onelanguage}{\setboolean{algocf@optonelanguage}{true}}% % \newcommand{\algocf@languagechoosen}{english}% \newboolean{algocf@localkw@english}\setboolean{algocf@localkw@english}{true}% \DeclareOption{englishkw}{% \setboolean{algocf@localkw@english}{true}% }% % \DeclareOption{english}{% \renewcommand{\listalgorithmcfname}{List of Algorithms}% \renewcommand{\algorithmcfname}{Algorithm}% \renewcommand{\algorithmautorefname}{algorithm}% \renewcommand{\algorithmcflinename}{line}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Procedure}% \renewcommand{\@algocf@funcname}{Function}% \renewcommand{\procedureautorefname}{procedure}% \renewcommand{\functionautorefname}{function}% \renewcommand{\algocf@languagechoosen}{english}% }% % %---- \newboolean{algocf@localkw@french}\setboolean{algocf@localkw@french}{false}% \DeclareOption{frenchkw}{% \setboolean{algocf@localkw@french}{true}% }% % \DeclareOption{french}{% \renewcommand{\listalgorithmcfname}{Liste des Algorithmes}% \renewcommand{\algorithmcfname}{Algorithme}% \renewcommand{\algorithmautorefname}{algorithme}% \renewcommand{\algorithmcflinename}{ligne}% \renewcommand{\algocf@typo}{\ }% \renewcommand{\@algocf@procname}{Proc\'edure}% \renewcommand{\@algocf@funcname}{Fonction}% \renewcommand{\procedureautorefname}{proc\'edure}% \renewcommand{\functionautorefname}{fonction}% \renewcommand{\algocf@languagechoosen}{french}% }% % %---- \newboolean{algocf@localkw@czech}\setboolean{algocf@localkw@czech}{false}% \DeclareOption{czechkw}{% \setboolean{algocf@localkw@czech}{true}% }% % \DeclareOption{czech}{% \renewcommand{\listalgorithmcfname}{Seznam algoritm\r{u}}% \renewcommand{\algorithmcfname}{Algoritmus}% \renewcommand{\algorithmautorefname}{\algorithmcfname}% \renewcommand{\algorithmcflinename}{Radek}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Procedura}% \renewcommand{\@algocf@funcname}{Funkce}% \renewcommand{\procedureautorefname}{\@algocf@procname}% \renewcommand{\functionautorefname}{\@algocf@funcname}% \renewcommand{\algocf@languagechoosen}{czech}% }% % %---- \newboolean{algocf@localkw@german}\setboolean{algocf@localkw@german}{false}% \DeclareOption{germankw}{% \setboolean{algocf@localkw@german}{true}% }% % \DeclareOption{german}{% \renewcommand{\listalgorithmcfname}{Liste der Algorithmen}% \renewcommand{\algorithmcfname}{Algorithmus}% \renewcommand{\algorithmautorefname}{\algorithmcfname}% \renewcommand{\algorithmcflinename}{Zeile}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Prozedur}% \renewcommand{\@algocf@funcname}{Funktion}% \renewcommand{\procedureautorefname}{\@algocf@procname}% \renewcommand{\functionautorefname}{\@algocf@funcname}% \renewcommand{\algocf@languagechoosen}{german}% }% % %---- \DeclareOption{ngermankw}{% \setboolean{algocf@localkw@german}{true}% }% % \DeclareOption{ngerman}{% \renewcommand{\listalgorithmcfname}{Liste der Algorithmen}% \renewcommand{\algorithmcfname}{Algorithmus}% \renewcommand{\algorithmautorefname}{\algorithmcfname}% \renewcommand{\algorithmcflinename}{Zeile}% \renewcommand{\algocf@typo}{\ }% \renewcommand{\@algocf@procname}{Prozedur}% \renewcommand{\@algocf@funcname}{Funktion}% \renewcommand{\procedureautorefname}{\@algocf@procname}% \renewcommand{\functionautorefname}{\@algocf@funcname}% \renewcommand{\algocf@languagechoosen}{german}% }% % %---- \newboolean{algocf@localkw@portuguese}\setboolean{algocf@localkw@portuguese}{false}% \DeclareOption{portuguesekw}{% \setboolean{algocf@localkw@portuguese}{true}% }% % \DeclareOption{portuguese}{% \renewcommand{\listalgorithmcfname}{Lista de Algoritmos}% \renewcommand{\algorithmcfname}{Algoritmo}% \renewcommand{\algorithmautorefname}{algoritmo}% \renewcommand{\algorithmcflinename}{linha}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Procedimento}% \renewcommand{\@algocf@funcname}{Fun\c{c}\~{a}o}% \renewcommand{\procedureautorefname}{procedimento}% \renewcommand{\functionautorefname}{fun\c{c}\~{a}o}% \renewcommand{\algocf@languagechoosen}{portuguese}% }% % %---- \newboolean{algocf@localkw@italiano}\setboolean{algocf@localkw@italiano}{false}% \DeclareOption{italianokw}{% \setboolean{algocf@localkw@italiano}{true}% }% % \DeclareOption{italiano}{% \renewcommand{\listalgorithmcfname}{Elenco degli algoritmi}% \renewcommand{\algorithmcfname}{Algoritmo}% \renewcommand{\algorithmautorefname}{algoritmo}% \renewcommand{\algorithmcflinename}{riga}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Procedura}% \renewcommand{\@algocf@funcname}{Funzione}% \renewcommand{\procedureautorefname}{procedura}% \renewcommand{\functionautorefname}{funzione}% \renewcommand{\algocf@languagechoosen}{italiano}% }% %---- \newboolean{algocf@localkw@spanish}\setboolean{algocf@localkw@spanish}{false}% \DeclareOption{spanishkw}{% \setboolean{algocf@localkw@spanish}{true}% }% % \DeclareOption{spanish}{% \renewcommand{\listalgorithmcfname}{\'Indice de algoritmos}% \renewcommand{\algorithmcfname}{Algoritmo}% \renewcommand{\algorithmautorefname}{algoritmo}% \renewcommand{\algorithmcflinename}{l\'inea}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Procedimiento}% \renewcommand{\@algocf@funcname}{Funci\'on}% \renewcommand{\procedureautorefname}{procedimiento}% \renewcommand{\functionautorefname}{funci\'on}% \renewcommand{\algocf@languagechoosen}{spanish}% }% %---- \newboolean{algocf@localkw@slovak}\setboolean{algocf@localkw@slovak}{false}% \DeclareOption{slovakkw}{% \setboolean{algocf@localkw@slovak}{true}% }% % \DeclareOption{slovak}{% \renewcommand{\listalgorithmcfname}{Zoznam algoritmov}% \renewcommand{\algorithmcfname}{Algoritmus}% \renewcommand{\algorithmautorefname}{\algorithmcfname}% \renewcommand{\algorithmcflinename}{Radek}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Proced\'{u}ra}% \renewcommand{\@algocf@funcname}{Funkcia}% \renewcommand{\procedureautorefname}{\@algocf@procname}% \renewcommand{\functionautorefname}{\@algocf@funcname}% \renewcommand{\algocf@languagechoosen}{slovak}% }% % %---- \newboolean{algocf@localkw@croatian}\setboolean{algocf@localkw@croatian}{false}% \DeclareOption{croatiankw}{% \setboolean{algocf@localkw@croatian}{true}% }% % \DeclareOption{croatian}{% \renewcommand{\listalgorithmcfname}{Popis algoritama}% \renewcommand{\algorithmcfname}{Algoritam}% \renewcommand{\algorithmautorefname}{\algorithmcfname}% \renewcommand{\algorithmcflinename}{redak}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Procedura}% \renewcommand{\@algocf@funcname}{Funkcija}% \renewcommand{\procedureautorefname}{\@algocf@procname}% \renewcommand{\functionautorefname}{\@algocf@funcname}% \renewcommand{\algocf@languagechoosen}{croatian}% }% %%% adding 'turkish' option customization % %---- \newboolean{algocf@localkw@turkish}\setboolean{algocf@localkw@turkish}{false}% \DeclareOption{turkishkw}{% \setboolean{algocf@localkw@turkish}{true}% }% \DeclareOption{turkish}{% \renewcommand{\listalgorithmcfname}{Algoritma Listesi}% \renewcommand{\algorithmcfname}{Algoritma}% \renewcommand{\algorithmautorefname}{algoritma}% \renewcommand{\algorithmcflinename}{\c{c}izgi}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Prosed\"ur}% \renewcommand{\@algocf@funcname}{Fonksiyon}% \renewcommand{\procedureautorefname}{prosed\"ur}% \renewcommand{\functionautorefname}{fonksiyon}% \renewcommand{\algocf@languagechoosen}{turkish}% }% % % OPTIONs plain, boxed, ruled, algoruled & boxruled % \newcommand{\algocf@style@plain}{\renewcommand{\algocf@style}{plain}}% \newcommand{\algocf@style@boxed}{\renewcommand{\algocf@style}{boxed}}% \newcommand{\algocf@style@ruled}{\renewcommand{\algocf@style}{ruled}}% \newcommand{\algocf@style@algoruled}{\renewcommand{\algocf@style}{algoruled}}% \newcommand{\algocf@style@boxruled}{\renewcommand{\algocf@style}{boxruled}}% \newcommand{\algocf@style@tworuled}{\renewcommand{\algocf@style}{tworuled}}% \newcommand{\algocf@style@plainruled}{\renewcommand{\algocf@style}{plainruled}}% \newcommand{\RestyleAlgo}[1]{\csname algocf@style@#1\endcsname}% \DeclareOption{plain}{\algocf@style@plain}% \DeclareOption{plainruled}{\algocf@style@plainruled}% \DeclareOption{boxed}{\algocf@style@boxed}% \DeclareOption{ruled}{\algocf@style@ruled}% \DeclareOption{algoruled}{\algocf@style@algoruled}% \DeclareOption{boxruled}{\algocf@style@boxruled}% \DeclareOption{tworuled}{\algocf@style@tworuled}% % % OPTIONs algopart,algochapter & algosection % \DeclareOption{algopart}{\algocf@numbering{part}}% %algo part numbered \DeclareOption{algochapter}{\algocf@numbering{chapter}}% %algo chapter numbered \DeclareOption{algosection}{\algocf@numbering{section}}% %algo section numbered % % OPTIONs resetcount & noresetcount % \DeclareOption{resetcount}{\renewcommand{\@ResetCounterIfNeeded}{\setcounter{AlgoLine}{0}}}% \DeclareOption{noresetcount}{\renewcommand{\@ResetCounterIfNeeded}{}}% % % OPTIONs algorithm hanging for long lines % \newlength{\algocf@hangindent}\setlength{\algocf@hangindent}{.5em} \newcommand{\SetAlgoHangIndent}[1]{\setlength{\algocf@hangindent}{#1}} % \newboolean{algocf@hanging}\setboolean{algocf@hanging}{true}% hanging is handle by default \newboolean{algocf@hanginginout}\setboolean{algocf@hanginginout}{false}% inout are managed as previously: hanging set by inout keywords \newboolean{algocf@hangingcomment}\setboolean{algocf@hangingcomment}{false}% comment that are not side comment are indented accordingly to comment mark, not as normal text \newcommand{\algocf@everyparnl}{\relax}% \newcommand{\algocf@everyparhanging}{\hangafter=1\hangindent=\algocf@hangindent\relax}% \newcommand{\algocf@everypar}{\algocf@everyparnl\algocf@everyparhanging}% \newcommand{\algocf@seteverypar}{% \ifthenelse{\boolean{algocf@hanging}}{\everypar{\algocf@everypar}}{\relax}% }% % \newcommand{\algocf@seteveryparnl}[1]{\renewcommand{\algocf@everyparnl}{#1}\everypar{\algocf@everypar}}% \newcommand{\algocf@seteveryparhanging}[1]{% \let\algocf@oldeveryparhanging=\algocf@everyparhanging% \renewcommand{\algocf@everyparhanging}{#1}\everypar{\algocf@everypar}% }% \newcommand{\algocf@reseteveryparhanging}{% \let\algocf@everyparhanging=\algocf@oldeveryparhanging% \everypar{\algocf@everypar}% }% \DeclareOption{hanginginout}{\setboolean{algocf@hanginginout}{true}}% \DeclareOption{hangingcomment}{\setboolean{algocf@hangingcomment}{true}}% \DeclareOption{noalgohanging}{% \setboolean{algocf@hanginginout}{false}% \setboolean{algocf@hangingcomment}{false}% \setboolean{algocf@hanging}{false}% }% %\newcommand{ % % % OPTION linesnumbered % \newboolean{algocf@linesnumbered}\setboolean{algocf@linesnumbered}{false}% \newcommand{\algocf@linesnumbered}{\relax}% \DeclareOption{linesnumbered}{% \setboolean{algocf@linesnumbered}{true}% \renewcommand{\algocf@linesnumbered}{\algocf@seteveryparnl{\nl}}% }% % % OPTION linesnumberedhidden % \DeclareOption{linesnumberedhidden}{% \setboolean{algocf@linesnumbered}{true}% \renewcommand{\algocf@linesnumbered}{\algocf@seteveryparnl{\stepcounter{AlgoLine}}}% }% % % OPTION commentsnumbered inoutnumbered % \newboolean{algocf@commentsnumbered}\setboolean{algocf@commentsnumbered}{false}% \DeclareOption{commentsnumbered}{\setboolean{algocf@commentsnumbered}{true}}% \newboolean{algocf@inoutnumbered}\setboolean{algocf@inoutnumbered}{false}% \DeclareOption{inoutnumbered}{\setboolean{algocf@inoutnumbered}{true}}% % % OPTIONs titlenumbered & titlenotnumbered % \DeclareOption{titlenumbered}{% \renewcommand{\@titleprefix}{% \refstepcounter{\algocf@float}% \AlTitleSty{\AlTitleFnt\@algocf@titleofalgoname\ \expandafter\csname the\algocf@float\endcsname\algocf@typo: }% }% }% % \DeclareOption{titlenotnumbered}{\renewcommand{\@titleprefix}{% \AlTitleSty{\AlTitleFnt\@algocf@titleofalgoname\algocf@typo: }}% }% % % OPTIONs algonl % line numbered with the counter of the algorithm % \DeclareOption{algonl}{\renewcommand{\theAlgoLine}{\expandafter\csname the\algocf@float\endcsname.\arabic{AlgoLine}}}% % % OPTIONs lined, vlined & noline % \DeclareOption{lined}{\AtBeginDocument{\SetAlgoLined}}% \SetAlgoLined (default) \DeclareOption{vlined}{\AtBeginDocument{\SetAlgoVlined}}% \SetAlgoVlined \DeclareOption{noline}{\AtBeginDocument{\SetAlgoNoLine}}%\SetAlgoNoLine % % OPTIONs longend, shotend & noend % \DeclareOption{longend}{\AtBeginDocument{\SetAlgoLongEnd}}% \SetAlgoLongEnd \DeclareOption{shortend}{\AtBeginDocument{\SetAlgoShortEnd}}%\SetAlgoShortEnd \DeclareOption{noend}{\AtBeginDocument{\SetAlgoNoEnd}}% \SetAlgoNoEnd % \DeclareOption{nosemicolon}{\AtBeginDocument{\DontPrintSemicolon}}% \SetAlgoNoEnd % % OPTION dotoc % \newboolean{algocf@dotocloa}\setboolean{algocf@dotocloa}{false}% \DeclareOption{dotocloa}{% \setboolean{algocf@dotocloa}{true}% } % % OPTION comments % \newboolean{algocf@optfillcomment}\setboolean{algocf@optfillcomment}{true}% \DeclareOption{nofillcomment}{% \setboolean{algocf@optfillcomment}{false}% }% \DeclareOption{fillcomment}{% \setboolean{algocf@optfillcomment}{true}% }% % % OPTION sidecommments % \newboolean{algocf@scleft}\setboolean{algocf@scleft}{false}% \DeclareOption{scleft}{% \setboolean{algocf@scleft}{true}% }% \DeclareOption{sright}{% default \setboolean{algocf@scleft}{false}% }% % % OPTION norelsize % \newboolean{algocf@norelsize}\setboolean{algocf@norelsize}{false}% \DeclareOption{norelsize}{% \setboolean{algocf@norelsize}{true}% }% % % %%%%%%%%%%%%%%%%%%%%%%% Execution of Options %%%%%%%%%%%%%%%%%%%%%%%%%%%% % \ExecuteOptions{english,plain,resetcount,titlenotnumbered,lined,shortend}% % \ProcessOptions% % \@algocf@algotitleofalgo% fix name for \TitleOfAlgo to \algorithmcfname by default % %%%%%%%%%%%%%%%%%%%%%%%%%% Package Loading %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \RequirePackage{ifoddpage}% \RequirePackage{xspace}% % \ifthenelse{\boolean{algocf@endfloat}}{% \RequirePackage{endfloat}% }{\relax}% % \ifthenelse{\boolean{algocf@norelsize}}{% \newcommand{\relsize}[1]{\scriptsize}% }{% \RequirePackage{relsize}% }% % \ifthenelse{\boolean{algocf@slide}}{\RequirePackage{xcolor}}{}% % % \AtEndOfPackage{% \ifthenelse{\boolean{algocf@dotocloa}}{% \renewcommand{\listofalgorithms}{\tocfile{\listalgorithmcfname}{loa}}% }{\relax}% }% % % if loa in toc required, load tocbibind package if not already done. \ifthenelse{\boolean{algocf@dotocloa}}{% \ifx\@tocextra\undefined% \RequirePackage{tocbibind}% \fi% }{\relax}% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%% Main Part %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \newcommand{\algocf@name}{algorithm2e}% \newcommand{\algocf@date}{July 18 2017}% \newcommand{\algocf@version}{Release 5.2}% \newcommand{\algocf@id}{\algocf@version\space -- \algocf@date\space --}% % \typeout{********************************************************^^JPackage `\algocf@name'\space\algocf@id^^J% % - algorithm2e-announce@lirmm.fr mailing list for announcement about releases^^J% % - algorithm2e-discussion@lirmm.fr mailing list for discussion about package^^J% % subscribe by emailing sympa@lirmm.fr with 'subscribe '^^J% % - Author: Christophe Fiorio (christophe.fiorio@umontpellier.fr)^^J********************************************************}% %% %% %% %% %% %% %%%% hyperref compatibility tricks: Hyperref package defines H counters from % standard counters (i.e \theHpage from \thepage) and check some particular % counters of some packages, unfortunately it doesn't do the same for % algorithm2e package but act as Hcounter was defined. To avoid errors we % defined \theHalgocf ourself %%%% % \@ifundefined{theHalgocf}{\def\theHalgocf{\thealgocf}}{}% \@ifundefined{theHAlgoLine}{\def\theHAlgoLine{\theAlgoLine}}{}% \@ifundefined{theHalgocfproc}{\def\theHalgocfproc{0}}{}% \@ifundefined{theHalgocffunc}{\def\theHalgocffunc{0}}{}% \@ifundefined{toclevel@algocf}{\def\toclevel@algocf{0}}{}% % % autoref from hyperref needs an autorefname, so we give it. \def\AlgoLineautorefname{\algorithmcflinename}% \def\algocfautorefname{\algorithmautorefname}% \def\algocfprocautorefname{\procedureautorefname}% \def\algocffuncautorefname{\functionautorefname}% %% %% %% \newcommand{\@defaultskiptotal}{0.5em}% \newskip\skiptotal\skiptotal=0.5em% \newskip\skiplinenumber\skiplinenumber=\hsize\advance\skiplinenumber by-\skiptotal% \newskip\skiprule% \newskip\skiphlne% \newskip\skiptext% \newskip\skiplength% \newskip\algomargin% \newskip\skipalgocfslide\skipalgocfslide=1em% \newdimen\algowidth% \newdimen\inoutsize% \newdimen\inoutindent% \newdimen\interspacetitleruled\setlength{\interspacetitleruled}{2pt}% \newdimen\interspacealgoruled\setlength{\interspacealgoruled}{2pt}% \newdimen\interspacetitleboxruled\setlength{\interspacetitleboxruled}{2\lineskip}% % \newcommand{\@algoskip}{\smallskip}% \newcommand{\SetAlgoSkip}[1]{\renewcommand{\@algoskip}{\csname#1\endcsname}}% \newcommand{\@algoinsideskip}{\relax}% \newcommand{\SetAlgoInsideSkip}[1]{\renewcommand{\@algoinsideskip}{\csname#1\endcsname}}% % % ruledwidth % \newlength{\algocf@ruledwidth}\setlength{\algocf@ruledwidth}{\linewidth}% \newboolean{algocf@customruledwidth}\setboolean{algocf@customruledwidth}{false}% \newcommand{\SetCustomAlgoRuledWidth}[1]{% \setboolean{algocf@customruledwidth}{true}% \ifthenelse{\boolean{algocf@customruledwidth}}{\setlength{\algocf@ruledwidth}{#1}}{\relax}% }% % \newsavebox{\algocf@inoutbox}% \newsavebox{\algocf@inputbox}% %% %% \newcommand{\arg@e}{}% \newcommand{\arg@space}{\ }% \newcommand{\BlankLine}{\vskip 1ex}% %% \newcommand{\vespace}{1ex}% \newcommand{\SetInd}[2]{% \skiprule=#1% \skiptext=#2% \skiplength=\skiptext\advance\skiplength by \skiprule\advance\skiplength by 0.4pt}% \SetInd{0.5em}{1em} \algomargin=\leftskip\advance\algomargin by \parindent% \newcommand{\IncMargin}[1]{\advance\algomargin by #1}% \newcommand{\DecMargin}[1]{\advance\algomargin by -#1}% \newcommand{\SetNlSkip}[1]{% \renewcommand{\@defaultskiptotal}{#1}% \setlength{\skiptotal}{#1}}% %% \newskip\AlCapSkip\AlCapSkip=0ex% \newskip\AlCapHSkip\AlCapSkip=0ex% \newcommand{\SetAlCapSkip}[1]{\setlength{\AlCapSkip}{#1}}% \newcommand{\SetAlCapHSkip}[1]{\setlength{\AlCapHSkip}{#1}}% \SetAlCapHSkip{.5\algomargin}% %% %% \newskip\algoskipindent \newcommand{\algocf@adjustskipindent}{% \algoskipindent=\skiprule% \advance\algoskipindent by \skiptext\advance\algoskipindent by 0.4pt} \algocf@adjustskipindent% % \newcommand{\Indentp}[1]{\advance\leftskip by #1}% \newcommand{\Indp}{\algocf@adjustskipindent\advance\leftskip by \algoskipindent} \newcommand{\Indpp}{\advance\leftskip by 0.5em}% \newcommand{\Indm}{\algocf@adjustskipindent\advance\leftskip by -\algoskipindent} \newcommand{\Indmm}{\advance\leftskip by -0.5em}% % %% %% %% Line Numbering %% %% % number line style \newcommand{\algocf@nlrelsize}{-2}\newcommand{\SetAlgoNlRelativeSize}[1]{\renewcommand{\algocf@nlrelsize}{#1}}% \newcommand{\NlSty}[1]{\textnormal{\textbf{\relsize{\algocf@nlrelsize}#1}}}% default definition \newcommand{\SetNlSty}[3]{\renewcommand{\NlSty}[1]{\textnormal{\csname#1\endcsname{\relsize{\algocf@nlrelsize}#2##1#3}}}}% % % nl definitions % \newsavebox{\algocf@nlbox}% \newcommand{\algocf@printnl}[1]{% \ifthenelse{\boolean{algocf@leftlinenumber}}{% \skiplinenumber=\skiptotal\advance\skiplinenumber by\leftskip% \strut\raisebox{0pt}{\llap{\NlSty{#1}\kern\skiplinenumber}}\ignorespaces% }{% \sbox\algocf@nlbox{\NlSty{#1}}% \skiplinenumber=\hsize\advance\skiplinenumber by-\leftskip\advance\skiplinenumber by-\skiptext% \advance\skiplinenumber by\algomargin\advance\skiplinenumber by.3em\advance\skiplinenumber by-\wd\algocf@nlbox% % to handle particular case of until: printnl is after 'until' keyword has been writen, so we need to substract length of this keyword \advance\skiplinenumber by-\algocf@skipuntil% \strut\raisebox{0pt}{\rlap{\kern\skiplinenumber\NlSty{#1\ignorespaces}}}\ignorespaces% }% }% \newcommand{\algocf@nl@sethref}[1]{% \renewcommand{\theHAlgoLine}{\thealgocfproc.#1}% \hyper@refstepcounter{AlgoLine}\gdef\@currentlabel{#1}% }% \newcommand{\nl}{% \@ifundefined{hyper@refstepcounter}{% if not hyperref then do a simple refstepcounter \refstepcounter{AlgoLine}\gdef\@currentlabel{\theAlgoLine}% }{% else if hyperref, do the anchor so 2 lines in two differents algorithms cannot have the same href \stepcounter{AlgoLine}\algocf@nl@sethref{\theAlgoLine}% }% now we can do the line numbering \algocf@printnl{\theAlgoLine}% }% % \newcommand{\nllabel}[1]{\label{#1}}% % \newcommand{\enl}{% \@ifundefined{hyper@refstepcounter}{% if not hyperref then do a simple refstepcounter \refstepcounter{AlgoLine}\gdef\@currentlabel{\theAlgoLine}% }{% else if hyperref, do the anchor so 2 lines in two differents algorithms cannot have the same href \stepcounter{AlgoLine}\algocf@nl@sethref{\theAlgoLine}% }% now we can do the line numbering \skiplinenumber=\hsize\advance\skiplinenumber by-\leftskip% \strut\raisebox{0pt}{\rlap{\kern\skiplinenumber\strut\NlSty{\theAlgoLine}}}\ignorespaces% }% %% nlset \newcommand{\nlset}[1]{% \@ifundefined{hyper@refstepcounter}{\protected@edef\@currentlabel{#1}}{\algocf@nl@sethref{#1}}\algocf@printnl{#1}% }% % %% lnl definitions \newcommand{\lnl}[1]{\nl\label{#1}\ignorespaces}% % %% lnlset \newcommand{\lnlset}[2]{\nlset{#2}\label{#1}}% % % set char put at end of each line % \newcommand{\algocf@endline}{\string;} \newcommand{\SetEndCharOfAlgoLine}[1]{\renewcommand{\algocf@endline}{#1}} % % end of line definition % \newcommand{\@endalgocfline}{\algocf@endline}% default definition: printsemicolon \newcommand{\DontPrintSemicolon}{\renewcommand{\@endalgocfline}{\relax}}% \newcommand{\PrintSemicolon}{\renewcommand{\@endalgocfline}{\algocf@endline}}% \newcommand{\@endalgoln}{\@endalgocfline\hfill\strut\par}% % % line numbering % \newcommand{\LinesNumbered}{\setboolean{algocf@linesnumbered}{true}\renewcommand{\algocf@linesnumbered}{\algocf@seteveryparnl{\nl}}}% \newcommand{\LinesNotNumbered}{% \setboolean{algocf@linesnumbered}{false}% \renewcommand{\algocf@linesnumbered}{\relax}% }% % \newcommand{\LinesNumberedHidden}{% \setboolean{algocf@linesnumbered}{true}\renewcommand{\algocf@linesnumbered}{\algocf@seteveryparnl{\stepcounter{AlgoLine}}}}% \newcommand{\ShowLn}{\nlset{\theAlgoLine}\ignorespaces}% display the line number on this line (without labelling) \newcommand{\ShowLnLabel}[1]{\lnlset{#1}{\theAlgoLine}\ignorespaces}% display the line number and label this line % %% % %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Styling text commands % \newcommand{\AlFnt}{\relax}% default definition \newcommand{\SetAlFnt}[1]{\renewcommand{\AlFnt}{#1}}% \newcommand{\AlTitleFnt}{\relax}% default definition \newcommand{\SetAlTitleFnt}[1]{\renewcommand{\AlTitleFnt}{#1}}% % \newcommand{\AlCapFnt}{\relax}% default definition \newcommand{\SetAlCapFnt}[1]{\renewcommand{\AlCapFnt}{#1}}% \newcommand{\AlCapNameFnt}{\relax}% default definition \newcommand{\SetAlCapNameFnt}[1]{\renewcommand{\AlCapNameFnt}{#1}}% % \newcommand{\ProcFnt}{\relax}% default definition \newcommand{\SetProcFnt}[1]{\renewcommand{\ProcFnt}{#1}}% \newcommand{\ProcNameFnt}{\relax}% default definition \newcommand{\SetProcNameFnt}[1]{\renewcommand{\ProcNameFnt}{#1}}% \newcommand{\ProcArgFnt}{\relax}% default definition \newcommand{\SetProcArgFnt}[1]{\renewcommand{\ProcArgFnt}{#1}}% % \newcommand{\AlTitleSty}[1]{\textbf{#1}\unskip}% default definition \newcommand{\SetAlTitleSty}[1]{\renewcommand{\AlTitleSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\AlCapSty}[1]{\textnormal{\textbf{#1}}\unskip}% default definition \newcommand{\SetAlCapSty}[1]{\renewcommand{\AlCapSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\AlCapNameSty}[1]{\textnormal{#1}\unskip}% default definition \newcommand{\SetAlCapNameSty}[1]{\renewcommand{\AlCapNameSty}[1]{\textnormal{\csname #1\endcsname{##1}}\unskip}}% % \newcommand{\ProcSty}[1]{\AlCapSty{#1}}% \newcommand{\SetProcSty}[1]{\renewcommand{\ProcSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\ProcNameSty}[1]{\AlCapNameSty{#1}}% \newcommand{\SetProcNameSty}[1]{\renewcommand{\ProcNameSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\ProcArgSty}[1]{\AlCapNameSty{#1}}% \newcommand{\SetProcArgSty}[1]{\renewcommand{\ProcArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% % \newcommand{\KwSty}[1]{\textnormal{\textbf{#1}}\unskip}% default definition \newcommand{\SetKwSty}[1]{\renewcommand{\KwSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\ArgSty}[1]{\textnormal{\emph{#1}}\unskip}%\SetArgSty{emph} \newcommand{\SetArgSty}[1]{\renewcommand{\ArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\FuncArgSty}[1]{\textnormal{\emph{#1}}\unskip}%\SetFuncArgSty{emph} \newcommand{\SetFuncArgSty}[1]{\renewcommand{\FuncArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\FuncSty}[1]{\textnormal{\texttt{#1}}\unskip}%\SetFuncSty{texttt} \newcommand{\SetFuncSty}[1]{\renewcommand{\FuncSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\ProgSty}[1]{\textnormal{\emph{#1}}\unskip}%\SetProgSty{emphg} \newcommand{\SetProgSty}[1]{\renewcommand{\ArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\DataSty}[1]{\textnormal{\textsf{#1}}\unskip}%%\SetDataSty{textsf} \newcommand{\SetDataSty}[1]{\renewcommand{\DataSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\CommentSty}[1]{\textnormal{\texttt{#1}}\unskip}%%\SetDataSty{texttt} \newcommand{\SetCommentSty}[1]{\renewcommand{\CommentSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\TitleSty}[1]{#1\unskip}%\SetTitleSty{}{} \newcommand{\SetTitleSty}[2]{\renewcommand{\TitleSty}[1]{% \csname#1\endcsname{\csname#2\endcsname##1}}\unskip}% \newcommand{\BlockMarkersSty}[1]{\KwSty{#1}}% \newcommand{\SetBlockMarkersSty}[1]{\renewcommand{\BlockMarkersSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% % %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Block basic commands % \newcommand{\algocf@push}[1]{\advance\skiptotal by #1\moveright #1}% \newcommand{\algocf@pop}[1]{\advance\skiptotal by -#1}% \newcommand{\algocf@addskiptotal}{% \advance\hsize by -\skiplength% }% \skiplength=skiptext+0.4 pt that is the width of \vrule \newcommand{\algocf@subskiptotal}{% \advance\hsize by \skiplength% }% \skiplength=skiptext+0.4 pt that is the width of \vrule % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% group of instructions definition % \skiphlne=.8ex% \newcommand{\SetVlineSkip}[1]{\skiphlne=#1}% \newcommand{\algocf@bblock}{\BlockMarkersSty{begin}}% \newcommand{\algocf@eblock}{\BlockMarkersSty{end}}% \newcommand{\AlgoDisplayBlockMarkers}{\setboolean{algocf@displayblockmarkers}{true}}% \newcommand{\AlgoDontDisplayBlockMarkers}{\setboolean{algocf@displayblockmarkers}{false}}% \newcommand{\AlgoDisplayGroupMarkers}{\setboolean{algocf@displaygroupmarkers}{true}}% \newcommand{\AlgoDontDisplayGroupMarkers}{\setboolean{algocf@displaygroupmarkers}{false}}% \newcommand{\algocf@bblockcode}{% \ifthenelse{\boolean{algocf@displayblockmarkers}}{\algocf@bblock\par}{\relax}% }% \newcommand{\algocf@eblockcode}{% \ifthenelse{\boolean{algocf@displayblockmarkers}}{\algocf@eblock\par}{\relax}% }% \newcommand{\algocf@bgroupcode}{% \ifthenelse{\boolean{algocf@displaygroupmarkers}}{\algocf@bblock}{\relax}% }% \newcommand{\algocf@egroupcode}{% \ifthenelse{\boolean{algocf@displaygroupmarkers}}{\algocf@eblock}{\relax}% }% \newcommand{\SetAlgoBlockMarkers}[2]{% \ifArgumentEmpty{#1}{% \renewcommand{\algocf@bblock}{\relax}% }{% \renewcommand{\algocf@bblock}{\BlockMarkersSty{#1}}% }% begin marker set \ifArgumentEmpty{#2}{% \renewcommand{\algocf@eblock}{\relax}% }{% \renewcommand{\algocf@eblock}{\BlockMarkersSty{#2}}% }% end marker set } % %%%%%%%%% block with a vertical line end by a little horizontal line \newcommand{\algocf@Vline}[1]{% no vskip in between boxes but a strut to separate them, \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it \algocf@push{\skiprule}% move to the right before the vertical rule \hbox{\vrule% \vtop{\algocf@push{\skiptext}%move the right after the rule \vtop{\algocf@addskiptotal #1}\Hlne}}\vskip\skiphlne% inside the block \algocf@pop{\skiprule}%\algocf@subskiptotal% restore indentation \nointerlineskip}% no vskip after % %%%%%%%%% block with a vertical line \newcommand{\algocf@Vsline}[1]{% no vskip in between boxes but a strut to separate them, \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it \algocf@bblockcode% \algocf@push{\skiprule}% move to the right before the vertical rule \hbox{\vrule% the vertical rule \vtop{\algocf@push{\skiptext}%move the right after the rule \vtop{\algocf@addskiptotal #1}}}% inside the block \algocf@pop{\skiprule}% restore indentation \algocf@eblockcode% } % \newcommand{\algocf@Hlne}{\hrule height 0.4pt depth 0pt width .5em}% % %%%%%%%%% block without line \newcommand{\algocf@Noline}[1]{% no vskip in between boxes but a strut to separate them, \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it \algocf@bblockcode% \algocf@push{\skiprule}% \hbox{% \vtop{\algocf@push{\skiptext}% \vtop{\algocf@addskiptotal #1}}}% inside the block \algocf@pop{\skiprule}%\algocf@subskiptotal% \algocf@eblockcode% % \nointerlineskip% no vskip after }% %%%%%%%%% % %% default=NoLine % \newcommand{\algocf@group}[1]{\algocf@Noline{#1}}% group: set of instruction depending from another (ex: then part of the If) \newcommand{\algocf@@@eblock}[2]{#1\ifArgumentEmpty{#2}{\relax}{\KwSty{\@algocf@endoption{#2}}\strut\par}}% block: group with a end keyword. \newcommand{\algocf@@@block}[3]{#1\ifArgumentEmpty{#2}{\ifArgumentEmpty{#3}{\relax}{ #3\relax}}{\KwSty{\@algocf@endoption{#2}}\ifArgumentEmpty{#3}{\relax}{ #3}\strut\par}}% block: group with a end keyword. \newcommand{\algocf@@block}[3]{\algocf@@@block{#1}{#2}{#3}}% block: group with a end keyword. \newcommand{\algocf@block}[3]{\algocf@@block{#1}{#2}{#3}}% command that will be used and redefined accordingly to noend option %\newcommand{\algocf@nblock}[3]{\algocf@@block{#1}{#2}{#3}}% command that will be used and redefined accordingly to noend option \newcommand{\algocf@setBlock}{% \ifthenelse{\boolean{algocf@optnoend}}{% if no end option \renewcommand{\algocf@block}[3]{\algocf@group{##1}}% block will be a group }{% else \renewcommand{\algocf@block}[3]{\algocf@@block{##1}{##2}{##3}}% block stays a block }% }% % \newcommand{\Hlne}{}% little hrizontal line ending a block in vline mode % \newcommand{\@algocf@endoption}[1]{#1}% \newboolean{algocf@optnoend}\setboolean{algocf@optnoend}{false}% % \newcommand{\SetAlgoLongEnd}{%%%%%%%%%%%%%%%%%%%%%%%%% Long End \setboolean{algocf@optnoend}{false}% \renewcommand{\@algocf@endoption}[1]{##1}% \algocf@setBlock}% % \newcommand{\SetAlgoShortEnd}{%%%%%%%%%%%%%%%%%%%%%%%% ShortEnd \setboolean{algocf@optnoend}{false}% \renewcommand{\@algocf@endoption}[1]{\@firstword##1 \@nil}% \algocf@setBlock}% % \newcommand{\SetAlgoNoEnd}{%%%%%%%%%%%%%%%%%%%%%%%%%%% NoEnd \setboolean{algocf@optnoend}{true}% \renewcommand{\@algocf@endoption}[1]{}% \algocf@setBlock}% % \newboolean{algocf@optAlgoNoLine}\setboolean{algocf@optAlgoNoLine}{false} \newcommand{\SetAlgoNoLine}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline \setboolean{algocf@optAlgoNoLine}{true}% \renewcommand{\algocf@@block}[2]{\algocf@@@block{\algocf@Noline{##1}}{##2}}% \renewcommand{\algocf@group}[1]{\algocf@Noline{##1}}% \renewcommand{\Hlne}{}}% % \newcommand{\SetAlgoVlined}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Vline \setboolean{algocf@optAlgoNoLine}{false}% \renewcommand{\algocf@@block}[2]{\algocf@Vline{##1}}% \renewcommand{\algocf@group}[1]{\algocf@Vsline{##1}}%\ifthenelse{\boolean{algocf@optnoend}}{\relax}{\strut\ignorespaces}}% \renewcommand{\Hlne}{\algocf@Hlne}}% % \newcommand{\SetAlgoLined}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Line \setboolean{algocf@optAlgoNoLine}{false}% \renewcommand{\algocf@@block}[2]{\algocf@@@block{\strut\algocf@Vsline{##1}}{##2}}% no skip after a block so garantie at least one line \renewcommand{\algocf@group}[1]{\algocf@Vsline{##1}}%\ifthenelse{\boolean{algocf@optnoend}}{\relax}{\strut\ignorespaces}}% \renewcommand{\Hlne}{}}% % \newcommand{\SetNothing}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline \setboolean{algocf@optAlgoNoLine}{true}% \renewcommand{\algocf@@block}[2]{\algocf@Noline{##1}\par}% %\long \renewcommand{\algocf@group}[1]{\algocf@Noline{##1}}% \renewcommand{\Hlne}{}}% % %% %% % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % ``Input:'''s like command % %%% % text staying at the right of the longer keyword of KwInOut commands % (text of KwInOut commands are all vertically aligned) % \newcommand{\algocf@newinout}{\par\parindent=\inoutindent}% to put right indentation after a \\ in the KwInOut \newcommand{\SetKwInOut}[2]{% \sbox\algocf@inoutbox{\KwSty{#2\algocf@typo:}}% \expandafter\ifx\csname InOutSizeDefined\endcsname\relax% if first time used \newcommand\InOutSizeDefined{}\setlength{\inoutsize}{\wd\algocf@inoutbox}% \sbox\algocf@inoutbox{\parbox[t]{\inoutsize}{\KwSty{#2\algocf@typo\hfill:}}~}\setlength{\inoutindent}{\wd\algocf@inoutbox}% \else% else keep the larger dimension \ifdim\wd\algocf@inoutbox>\inoutsize% \setlength{\inoutsize}{\wd\algocf@inoutbox}% \sbox\algocf@inoutbox{\parbox[t]{\inoutsize}{\KwSty{#2\algocf@typo\hfill:}}~}\setlength{\inoutindent}{\wd\algocf@inoutbox}% \fi% \fi% the dimension of the box is now defined. \algocf@newcommand{#1}[1]{% \ifthenelse{\boolean{algocf@hanginginout}}{\relax}{\algocf@seteveryparhanging{\relax}}% \ifthenelse{\boolean{algocf@inoutnumbered}}{\relax}{\algocf@seteveryparnl{\relax}}% % {\let\\\algocf@newinout\hangindent=\wd\algocf@inoutbox\hangafter=1\parbox[t]{\inoutsize}{\KwSty{#2}\algocf@typo\hfill:}~##1\par}% {\let\\\algocf@newinout\hangindent=\inoutindent\hangafter=1\parbox[t]{\inoutsize}{\KwSty{#2\algocf@typo\hfill:}}~##1\par}% \algocf@linesnumbered% reset the numbering of the lines \ifthenelse{\boolean{algocf@hanginginout}}{\relax}{\algocf@reseteveryparhanging}% }}% % %% allow to ajust the skip size of InOut %% \newcommand{\ResetInOut}[1]{% \sbox\algocf@inoutbox{\hbox{\KwSty{#1\algocf@typo:}\ }}% \setlength{\inoutsize}{\wd\algocf@inoutbox}% }% % % %%% % text staying at the right of the keyword. % \newcommand{\algocf@newinput}{\par\parindent=\wd\algocf@inputbox}% to put right indentation after a \\ in the KwInput \newcommand{\SetKwInput}[2]{% \algocf@newcommand{#1}[1]{% \sbox\algocf@inputbox{\hbox{\KwSty{#2\algocf@typo:} }}% \ifthenelse{\boolean{algocf@hanginginout}}{\relax}{\algocf@seteveryparhanging{\relax}}% \ifthenelse{\boolean{algocf@inoutnumbered}}{\relax}{\algocf@seteveryparnl{\relax}}% {\let\\\algocf@newinput\hangindent=\wd\algocf@inputbox\hangafter=1\unhbox\algocf@inputbox##1\par}% \algocf@linesnumbered% reset the numbering of the lines \ifthenelse{\boolean{algocf@hanginginout}}{\relax}{\algocf@reseteveryparhanging}% }}% \newcommand{\SetKwData}[2]{% \algocf@newcommand{@#1}[1]{\DataSty{#2(}\ArgSty{##1}\DataSty{)}}% \algocf@newcommand{#1}{% \@ifnextchar\bgroup{\csname @#1\endcsname}{\DataSty{#2}\xspace}}% }% % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % tallent: % % Add following macros: % \SetKwHangingKw: [kw] ------------ <= hanging determined by [kw] % ------------ % Should act like a combination of \SetKwInput and \SetKw. % Based on \SetKwInput: % - remove ':' at end of keyword % - do not reset numbering % - use separate savebox \newsavebox{\algocf@hangingbox} \newcommand{\algocf@newhanging}{\par\parindent=\wd\algocf@hangingbox}% to put right indentation after a \\ in the KwInput \newcommand{\SetKwHangingKw}[2]{% \algocf@newcommand{#1}[1]{% \sbox\algocf@hangingbox{\hbox{\KwSty{#2}\algocf@typo\ }}% {\let\\\algocf@newhanging\hangindent=\wd\algocf@hangingbox\hangafter=1\unhbox\algocf@hangingbox##1\;}% }% }% % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Comments macros % %%%% % comment in the text, first argument is the name of the macro, second is % the text put before the comment, third is the text put at the end of the % comment. % % first side comment justification \newcommand{\SetSideCommentLeft}{\setboolean{algocf@scleft}{true}}% \newcommand{\SetSideCommentRight}{\setboolean{algocf@scleft}{false}}% \newcommand{\SetNoFillComment}{\setboolean{algocf@optfillcomment}{false}}% \newcommand{\SetFillComment}{\setboolean{algocf@optfillcomment}{true}}% % % next comment and side comment % \newcommand{\algocf@endmarkcomment}{\relax}% \newcommand{\algocf@fillcomment}{% \ifthenelse{\boolean{algocf@optfillcomment}}{\hfill}{\relax}}% % \newcommand{\algocf@startcomment}{% \hangindent=\wd\algocf@inputbox\hangafter=1\usebox\algocf@inputbox}% \newcommand{\algocf@endcomment}{\algocf@fillcomment\algocf@endmarkcomment\ignorespaces\par}% \newcommand{\algocf@endstartcomment}{\algocf@endcomment\algocf@startcomment\ignorespaces}% % \newboolean{algocf@sidecomment}% \newboolean{algocf@altsidecomment}\setboolean{algocf@altsidecomment}{false}% \newcommand{\algocf@scpar}{\ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\par}}% \newcommand{\algocf@sclfill}{\ifthenelse{\boolean{algocf@scleft}}{\algocf@fillcomment}{\relax}}% \newcommand{\algocf@scrfill}{\ifthenelse{\boolean{algocf@scleft}}{\relax}{\hfill}}% \newcommand{\algocf@startsidecomment}{\usebox\algocf@inputbox}% \newcommand{\algocf@endsidecomment}{\algocf@endmarkcomment\algocf@scpar}% \newcommand{\algocf@endstartsidecomment}{% \algocf@sclfill\algocf@endsidecomment% \algocf@scrfill\algocf@startsidecomment\ignorespaces}% % \newcommand{\SetKwComment}[3]{% \algocf@newcommand{#1}{\@ifstar{\csname algocf@#1@star\endcsname}{\csname algocf@#1\endcsname}}% \algocf@newcommand{algocf@#1}[1]{% \ifthenelse{\boolean{algocf@hangingcomment}}{\relax}{\algocf@seteveryparhanging{\relax}}% \sbox\algocf@inputbox{\CommentSty{\hbox{#2}}}% \ifthenelse{\boolean{algocf@commentsnumbered}}{\relax}{\algocf@seteveryparnl{\relax}}% {\renewcommand{\algocf@endmarkcomment}{#3}% \let\\\algocf@endstartcomment% \algocf@startcomment\CommentSty{% \strut\ignorespaces##1\strut\algocf@fillcomment#3}\par}% \algocf@linesnumbered% reset the numbering of the lines \ifthenelse{\boolean{algocf@hangingcomment}}{\relax}{\algocf@reseteveryparhanging}% }% %%% side comment definitions \algocf@newcommand{algocf@#1@star}[2][]{% \ifArgumentEmpty{##1}\relax{% TODO: Is this even necessary, with all those \ifx's? \ifthenelse{\boolean{algocf@scleft}}{\setboolean{algocf@sidecomment}{true}}{\setboolean{algocf@sidecomment}{false}}% \ifx##1h\setboolean{algocf@altsidecomment}{true}\SetSideCommentLeft\fi% \ifx##1f\setboolean{algocf@altsidecomment}{true}\SetSideCommentRight\fi% \ifx##1l\setboolean{algocf@altsidecomment}{false}\SetSideCommentLeft\fi% \ifx##1r\setboolean{algocf@altsidecomment}{false}\SetSideCommentRight\fi% }% \sbox\algocf@inputbox{\CommentSty{\hbox{#2}}}% \ifthenelse{\boolean{algocf@commentsnumbered}}{\relax}{\algocf@seteveryparnl{\relax}}% {% \renewcommand{\algocf@endmarkcomment}{#3}% \let\\\algocf@endstartsidecomment% % here is the comment \ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\@endalgocfline\ }% \algocf@scrfill\algocf@startsidecomment\CommentSty{% \strut\ignorespaces##2\strut\algocf@sclfill#3}\algocf@scpar% }% \algocf@linesnumbered% reset the numbering of the lines \ifArgumentEmpty{##1}\relax{% \ifthenelse{\boolean{algocf@sidecomment}}{\setboolean{algocf@scleft}{true}}{\setboolean{algocf@scleft}{false}}% \setboolean{algocf@altsidecomment}{false}% }% }% }% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % KwProg % \newcommand{\SetKwProg}[4]{%\SetKwProg{Env}{Title}{is}{end} \algocf@newcmdside@koif{#1}{\KwSty{#2}\ifArgumentEmpty{#2}\relax{\ }\ProgSty{##2}\KwSty{#3}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##3}{#4}{##4}}% \algocf@newcommand{l#1}{\@ifstar{\csname algocf@l#1star\endcsname}{\csname algocf@l#1\endcsname}}% \algocf@newcmdside{algocf@l#1}{3}{\KwSty{#2} \ProgSty{##2}\KwSty{#3}\algocf@bgroupcode\ ##3\algocf@egroupcode\@endalgocfline\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcmdside{algocf@l#1star}{3}{\KwSty{#2} \ProgSty{##2}\KwSty{#3}\algocf@bgroupcode\ ##3\algocf@egroupcode}% }% % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % KwProgFn % \newcommand{\SetKwProgFn}[4]{%\SetKwProg{Env}{Title}{is}{end} \algocf@newcmdsides{#1}{4}{\KwSty{#2}\ifArgumentEmpty{#2}\relax{\ }{##2}\KwSty{#3}{##3}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@group{##4}\KwSty{#4}}{\relax}{\strut\par}% \algocf@newcommand{l#1}{\@ifstar{\csname algocf@l#1star\endcsname}{\csname algocf@l#1\endcsname}}% \algocf@newcmdside{algocf@l#1}{3}{\KwSty{#2} \ProgSty{##2}\KwSty{#3}\algocf@bgroupcode\ ##3\algocf@egroupcode\@endalgocfline\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcmdside{algocf@l#1star}{3}{\KwSty{#2} \ProgSty{##2}\KwSty{#3}\algocf@bgroupcode\ ##3\algocf@egroupcode}% }% % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Kw % \newcommand{\SetKw}[2]{% \algocf@newcommand{@#1}[1]{\KwSty{#2} \ArgSty{##1}} \algocf@newcommand{#1}{\@ifnextchar\bgroup{\csname @#1\endcsname}{\KwSty{#2}\xspace}}% }% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % KwFunction % \newcommand{\SetKwFunction}[2]{% %%% use of gdef since newcommand doesn't manage to define the macro when SetKwFunction is used in \algocf@caption@proc \expandafter\gdef\csname @#1\endcsname##1{\FuncSty{#2(}\FuncArgSty{##1}\FuncSty{)}}% \expandafter\gdef\csname#1\endcsname{% \@ifnextchar\bgroup{\csname @#1\endcsname}{\FuncSty{#2}\xspace}}% }% % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % KwTab % \newcommand{\SetKwArray}[2]{% %%% use of gdef since newcommand doesn't manage to define the macro when SetKwFunction is used in \algocf@caption@proc \expandafter\gdef\csname @#1\endcsname##1{\DataSty{#2[}\ArgSty{##1}\DataSty{]}}% \expandafter\gdef\csname#1\endcsname{% \@ifnextchar\bgroup{\csname @#1\endcsname}{\DataSty{#2}\xspace}}% }% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % KwBlock % \newcommand{\SetKwBlock}[3]{% \algocf@newcmdside@kobe{#1}% {\KwSty{#2}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##2}{#3}{##3}\par}% }% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % condition typo % \newcommand{\algocf@scond}{\ } \newcommand{\algocf@econd}{\ } \newcommand{\algocf@ucond}{} \newcommand{\SetStartEndCondition}[3]{% \renewcommand{\algocf@scond}{#1}\renewcommand{\algocf@econd}{#2}\renewcommand{\algocf@ucond}{#3}}% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % For Switch % \newcommand{\SetKwSwitch}[9]{% #1=\Switch #2=\Case #3=\Other #4=switch #5=do #6=case #7=otherwise #8=endcase #9=endsw % \algocf@newcmdside{#1}{3}% \algocf@newcmdside@koif{#1}% {\KwSty{#4}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##3}{#9} {##4\relax}}% %%%% Case \algocf@newcmdside@koif{#2}{\KwSty{#6}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##3}{#8}{##4\relax}}% %uCase \algocf@newcmdside{u#2}{3}{\KwSty{#6}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@group{##3}}% %lcase \algocf@newcommand{l#2}{\@ifstar{\csname algocf@l#2star\endcsname}{\csname algocf@l#2\endcsname}}% \algocf@newcmdside{algocf@l#2}{3}{\KwSty{#6}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\algocf@bgroupcode\ ##3\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\ \relax{ ##1}\strut\par}% \algocf@newcmdside{algocf@l#2star}{3}{\KwSty{#6}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\algocf@bgroupcode\ ##3\algocf@egroupcode}% %%%% Other \algocf@newcmdside@kobe{#3}{\KwSty{#7} \KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##2}{#8}{##3\relax}}% %lOther \algocf@newcommand{l#3}{\@ifstar{\csname algocf@l#3star\endcsname}{\csname algocf@l#3\endcsname}}% \algocf@newcmdside{algocf@l#3}{2}{\KwSty{#7} \KwSty{#5}\algocf@bgroupcode\ ##2\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcmdside{algocf@l#3star}{2}{\KwSty{#7} \KwSty{#5}\algocf@bgroupcode\ ##2\algocf@egroupcode}% %uOther \algocf@newcmdside{u#3}{3}{\KwSty{#7} \KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@group{##2}}% }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % If macros % \newcommand{\SetKwIF}[8]{% #1=\If #2=\ElseIf #3=\Else #4=if #5=then #6=elseif #7=else #8=endif % % common text \algocf@newcommand{#1@ifthen}[1]{\KwSty{#4}\algocf@scond\ArgSty{##1}\algocf@econd\KwSty{#5}}% \algocf@newcommand{#1@endif} [2]{\algocf@block{##1}{#8}{##2}}% \algocf@newcommand{#1@noend} [1]{\algocf@group{##1}}% \algocf@newcommand{#1@else} [1]{\algocf@group{##1}\KwSty{#7}}% \algocf@newcommand{#2@elseif}[1]{\KwSty{#6}\algocf@scond\ArgSty{##1}\algocf@econd\KwSty{#5}}% \algocf@newcommand{#3@else} {\KwSty{#7}}% %%%% If then { } endif \algocf@newcmdside@koif{#1}{\csname #1@ifthen\endcsname{##2}\ifArgumentEmpty{##1}\relax{ ##1}\csname #1@endif\endcsname{##3}{##4\relax}}% %%%% If then {} else {} endif % first command to handle optional side comment of else (so just after first braces) \algocf@newcmdside@kobe{algocf@e#1thenelse}{\ifArgumentEmpty{##1}\relax{ ##1}\csname #1@endif\endcsname{##2}{##3}}% % the definition of if-then-else command using command above \algocf@newcmdside{e#1}{3}{\csname #1@ifthen\endcsname{##2}\ifArgumentEmpty{##1}\relax{ ##1}\csname #1@else\endcsname{##3}\csname algocf@e#1thenelse\endcsname}% %%% leif \algocf@newcommand{le#1}{\@ifstar{\csname algocf@le#1star\endcsname}{\csname algocf@le#1\endcsname}}% \algocf@newcmdside{algocf@le#1}{4}{\csname #1@ifthen\endcsname{##2} \algocf@bgroupcode##3 \csname #3@else\endcsname\ ##4\@endalgocfline\ \algocf@egroupcode\ifArgumentEmpty{##1}\relax{##1}\strut\par}% \algocf@newcmdside{algocf@le#1star}{4}{\csname #1@ifthen\endcsname{##2} \algocf@bgroupcode##3 \csname #3@else\endcsname\ ##4\algocf@egroupcode}% %%%% If then % \algocf@newcmdside{l#1}{3}{\csname #1@ifthen\endcsname{##2}\algocf@bgroupcode\ % ##3\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcommand{l#1}{\@ifstar{\csname algocf@l#1star\endcsname}{\csname algocf@l#1\endcsname}}% \algocf@newcmdside{algocf@l#1}{3}{\csname #1@ifthen\endcsname{##2}\algocf@bgroupcode\ ##3\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcmdside{algocf@l#1star}{3}{\csname #1@ifthen\endcsname{##2}\algocf@bgroupcode\ ##3\algocf@egroupcode}% \algocf@newcmdside{u#1}{3}{\csname #1@ifthen\endcsname{##2}\ifArgumentEmpty{##1}\relax{ ##1}\csname #1@noend\endcsname{##3}}% %%%% ElseIf {} endif \algocf@newcmdside@koif{#2}{\csname #2@elseif\endcsname{##2}\relax\ifArgumentEmpty{##1}\relax{ ##1}\csname #1@endif\endcsname{##3}{##4\relax}}% %%%% ElseIf \algocf@newcommand{l#2}{\@ifstar{\csname algocf@l#2star\endcsname}{\csname algocf@l#2\endcsname}}% \algocf@newcmdside{algocf@l#2}{3}{\csname #2@elseif\endcsname{##2}\algocf@bgroupcode\ ##3\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcmdside{algocf@l#2star}{3}{\csname #2@elseif\endcsname{##2}\algocf@bgroupcode\ ##3\algocf@egroupcode}% \algocf@newcmdside{u#2}{3}{\csname #2@elseif\endcsname{##2}\relax\ifArgumentEmpty{##1}\relax{##1}\csname #1@noend\endcsname{##3}}% %%%% Else {} endif \algocf@newcmdside@kobe{#3}{\csname #3@else\endcsname\ifArgumentEmpty{##1}\relax\ ##1\csname #1@endif\endcsname{##2}{##3\relax}}% %%%% Else \algocf@newcommand{l#3}{\@ifstar{\csname algocf@l#3star\endcsname}{\csname algocf@l#3\endcsname}}% \algocf@newcmdside{algocf@l#3}{2}{\csname #3@else\endcsname\algocf@bgroupcode\ ##2\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcmdside{algocf@l#3star}{2}{\csname #3@else\endcsname\algocf@bgroupcode\ ##2\algocf@egroupcode}% \algocf@newcmdside{u#3}{2}{\csname #3@else\endcsname\ifArgumentEmpty{##1}\relax\ {##1\relax}\csname #1@noend\endcsname{##2}}% }% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % For macros % \newcommand{\SetKwFor}[4]{% \algocf@newcmdside@koif{#1}{\KwSty{#2}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#3}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##3}{#4}{##4\relax}}% \algocf@newcommand{l#1}{\@ifstar{\csname algocf@l#1star\endcsname}{\csname algocf@l#1\endcsname}}% \algocf@newcmdside{algocf@l#1}{3}{\KwSty{#2}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#3}\algocf@bgroupcode\ ##3\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcmdside{algocf@l#1star}{3}{\KwSty{#2}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#3}\algocf@bgroupcode\ ##3\algocf@egroupcode}% }% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Repeat macros % \newsavebox{\algocf@untilbox}% to handle width of until keyword needed to have good skip % for line numbers \newskip\algocf@skipuntil \newcommand{\SetKwRepeat}[3]{% \algocf@newcmdsides{#1}{3}{% \sbox\algocf@untilbox{\KwSty{#3}\algocf@scond}\algocf@skipuntil=\wd\algocf@untilbox% \KwSty{#2}\ifArgumentEmpty{##1}\relax{##1}\algocf@group{##3}% \KwSty{#3}\algocf@scond% until keyword and start condition typo %\advance\skiptotal by\algocf@skipuntil% \ArgSty{##2}% %\advance\skiptotal by-\algocf@skipuntil% \algocf@ucond% \algocf@skipuntil=0pt% reset counter }{\@endalgocfline}{\strut\par}% \algocf@newcommand{l#1}{\@ifstar{\csname algocf@l#1star\endcsname}{\csname algocf@l#1\endcsname}}% \algocf@newcmdside{algocf@l#1}{3}{\KwSty{#2}\algocf@bgroupcode\ ##3\algocf@egroupcode\ \KwSty{#3}\algocf@scond\ArgSty{##2}\algocf@ucond\@endalgocfline\ifArgumentEmpty{##1}\relax{ ##1}\strut\par}% \algocf@newcmdside{algocf@l#1star}{3}{\KwSty{#2}\algocf@bgroupcode\ ##3\algocf@egroupcode\ \KwSty{#3}\algocf@scond\ArgSty{##2}\algocf@ucond}% }% % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% Environments definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %% %% Caption management %% % for the following macros: % #1 is given by caption and is equal to fnum@algocf % #2 is the text given in argument by the user in the \caption macro % %%%%% text of caption \newcommand{\algocf@captionlayout}[1]{#1}% \newcommand{\SetAlgoCaptionLayout}[1]{% \renewcommand{\algocf@captionlayout}[1]{\csname #1\endcsname{##1}}}% \newcommand{\algocf@capseparator}{:}% \newcommand{\SetAlgoCaptionSeparator}[1]{\renewcommand{\algocf@capseparator}{#1}}% \newcommand{\algocf@captiontext}[2]{% \algocf@captionlayout{\AlCapSty{\AlCapFnt #1\algocf@typo\algocf@capseparator}\nobreakspace% \AlCapNameSty{\AlCapNameFnt{}#2\endgraf}}}% text of caption % %%%%% default caption of algorithm: used if no specific style caption is defined \newcommand{\algocf@makecaption}[2]{% \addtolength{\hsize}{\algomargin}% \sbox\@tempboxa{\algocf@captiontext{#1}{#2}}% \ifdim\wd\@tempboxa >\hsize% % if caption is longer than a line \hskip .5\algomargin% \parbox[t]{\hsize}{\algocf@captiontext{#1}{#2}}% then caption is not centered \else% \global\@minipagefalse% \hbox to\hsize{\hfil\box\@tempboxa\hfil}% else caption is centered \fi% \addtolength{\hsize}{-\algomargin}% }% % \newsavebox\algocf@capbox% \newcommand{\algocf@makecaption@plain}[2]{% \global\sbox\algocf@capbox{\algocf@makecaption{#1}{#2}}}% \newcommand{\algocf@makecaption@boxed}[2]{% \addtolength{\hsize}{-\algomargin}% \global\sbox\algocf@capbox{\algocf@makecaption{#1}{#2}}% \addtolength{\hsize}{\algomargin}% }% % \newlength{\algocf@lcaptionbox}% \newcommand{\algocf@makecaption@plainruled}[2]{\algocf@makecaption@plain{#1}{#2}}% \newcommand{\algocf@makecaption@tworuled}[2]{\algocf@makecaption@ruled{#1}{#2}}% \newcommand{\algocf@makecaption@algoruled}[2]{\algocf@makecaption@ruled{#1}{#2}}% \newcommand{\algocf@makecaption@boxruled}[2]{\algocf@makecaption@ruled{#1}{#2}}% \newcommand{\algocf@makecaption@ruled}[2]{% \global\sbox\algocf@capbox{\hskip\AlCapHSkip% .5\algomargin% \setlength{\algocf@lcaptionbox}{\hsize}\addtolength{\algocf@lcaptionbox}{-\AlCapHSkip}% \parbox[t]{\algocf@lcaptionbox}{\algocf@captiontext{#1}{#2}}}% then caption is not centered }% % \newlength{\algoheightruledefault}\setlength{\algoheightruledefault}{0.8pt}% \newlength{\algoheightrule}\setlength{\algoheightrule}{\algoheightruledefault}% \newlength{\algotitleheightruledefault}\setlength{\algotitleheightruledefault}{0.8pt}% \newlength{\algotitleheightrule}\setlength{\algotitleheightrule}{\algotitleheightruledefault}% \newcommand{\algocf@caption@plain}{\vskip\AlCapSkip\box\algocf@capbox}% \newcommand{\algocf@caption@plainruled}{\algocf@caption@plain}% \newcommand{\algocf@caption@boxed}{\vskip\AlCapSkip\box\algocf@capbox}% \newcommand{\algocf@caption@ruled}{\box\algocf@capbox\kern\interspacetitleruled\hrule width\algocf@ruledwidth height\algotitleheightrule depth0pt\kern\interspacealgoruled}% \newcommand{\algocf@caption@tworuled}{\box\algocf@capbox\hrule height0pt depth0pt\kern\interspacealgoruled}% \newcommand{\algocf@caption@algoruled}{\algocf@caption@ruled}% \newcommand{\algocf@caption@boxruled}{% \hbox{% \vrule% \vbox{% \addtolength{\hsize}{-0.8pt}% \hrule\vskip\interspacetitleboxruled% \hbox to\hsize{\unhbox\algocf@capbox\hfill}\vskip\interspacetitleboxruled% \addtolength{\hsize}{0.8pt}% }% \vrule% }\nointerlineskip% }% % % %%%% set caption for the environment \newcommand{\algocf@captionref}{% \renewcommand{\fnum@algocf}[1]{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\algocf@algocfref}}% \addtocounter{algocf}{-1}% \caption do a refstepcounter, so we restore the precedent value \let\old@thealgocf=\thealgocf\renewcommand{\thealgocf}{{\relsize{\algocf@refrelsize}\algocf@algocfref}}% \gdef\@currentlabel{\algocf@algocfref}% let the label use the new ref }% % % Unfortunatly, we also need our own caption to set some specific stuff for special references. But after these % settings, we call the original caption. % \long\def\algocf@caption@algo#1[#2]#3{% \ifthenelse{\equal{\algocf@algocfref}{\relax}}{}{\algocf@captionref}% \@ifundefined{hyper@refstepcounter}{\relax}{% if hyper@refstepcounter undefind, no hyperref, else... \ifthenelse{\equal{\algocf@algocfref}{\relax}}{\renewcommand{\theHalgocf}{\thealgocf}}{% take algocf as Href \renewcommand{\theHalgocf}{\algocf@algocfref}}%else if SetAlgoRefName done, take this name as ref. \hyper@refstepcounter{algocf}%set algocf as category of ref }% \algocf@latexcaption{#1}[{#2}]{{#3}}% call original caption }% % % beamer define is own caption overrinding latex caption! % as we need it, we have put here the original definition % to handle manual ref, unfortunately we have to add one line to handle algocf@algocfref \long\def\algocf@latexcaption#1[#2]#3{% original definition of caption \par% \addcontentsline{\csname ext@#1\endcsname}{#1}% {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}% \begingroup% \@parboxrestore% \if@minipage% \@setminipage% \fi% \normalsize% \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par% \endgroup% }% % % \ifx\beamer@makecaption\undefined% % \else% beamer detected \ifx\@makecaption\undefined% \newcommand{\@makecaption}[2]{\relax}% \fi% %% % % more and more packages redefine \@caption instead of just \@makecaption which makes algorithm2e % caption not works since based on standard \@caption. So we force the definition of \@caption to be % the standard one (the one from LaTeX) inside algorithm environment. % % unfortunately, makecaption is called with \ignorespace #3 so % we can't do the @currentlabel definition inside \algocf@captionproctext \long\def\algocf@caption@proc#1[#2]#3{% \ifthenelse{\boolean{algocf@nokwfunc}}{\relax}{% \SetKwFunction{\algocf@captname#3@}{\algocf@captname#3@}% }% % we tell hyperref to use algocfproc as category and to take the appropriate ref. \ifthenelse{\boolean{algocf@func}}{\def\@proc@func{algocffunc}}{\def\@proc@func{algocfproc}}% \@ifundefined{hyper@refstepcounter}{\relax}{% if hyper@refstepcounter undefind, no hyperref, else... \ifthenelse{\boolean{algocf@procnumbered}}{% \expandafter\def\csname theH\@proc@func\endcsname{\thealgocf}%if procnumbered, take \thealgocf as ref }{% \expandafter\def\csname theH\@proc@func\endcsname{\algocf@captname#3@}%else take procedure or function name }% \hyper@refstepcounter{\@proc@func}% }% \ifthenelse{\boolean{algocf@procnumbered}}{\relax}{% \addtocounter{algocf}{-1}% \caption do a refstepcounter, so we restore the precedent value \gdef\@currentlabel{\algocf@captname#3@}% let the label be the name of the function, not the counter }% \ifthenelse{\equal{\algocf@captparam#2@}{\arg@e}}{% if no paramater, we remove the () \algocf@latexcaption{#1}[\algocf@procname\nobreakspace\algocf@captname#2@]{#3}% }{% else we give the complete name \algocf@latexcaption{#1}[\algocf@procname\nobreakspace#2]{#3}% }% }% %% %%% setcaption \newcommand{\algocf@setcaption}{% \ifthenelse{\boolean{algocf@procenvironment}}{% if proc environment, caption text must be changed \let\algocf@oldcaptiontext=\algocf@captiontext% \renewcommand{\algocf@captiontext}[2]{% \algocf@captionproctext{##1}{##2}% }% }{}% \let\algocf@savecaption=\@caption% \ifthenelse{\boolean{algocf@procenvironment}}{\let\@caption=\algocf@caption@proc}{\let\@caption=\algocf@caption@algo}% \let\algocf@oldmakecaption=\@makecaption% \renewcommand{\@makecaption}[2]{% \expandafter\csname algocf@makecaption@\algocf@style\endcsname{##1}{##2}% }% }% % %%%%% reset caption % % since we have force the LaTeX caption for algorithm environment, we must go back to the caption % used in the text. \newcommand{\algocf@resetcaption}{% \ifthenelse{\boolean{algocf@procenvironment}}{% if proc environment \let\thealgocf=\old@thealgocf% restore normal counter printing \let\algocf@captiontext=\algocf@oldcaptiontext% restore normal caption text }{}% \let\@caption=\algocf@savecaption% now restore caption outside algo/proc/func environment \let\@makecaption=\algocf@oldmakecaption% and restore makecaption outside outside algo/proc/func environment \algocf@resetfnum% }% % %%%%% nocaptionofalgo and restorecaptionofalgo -- \newcommand{\NoCaptionOfAlgo}{% \let\@old@algocf@captiontext=\algocf@captiontext% \renewcommand{\algocf@captiontext}[2]{\AlCapNameSty{\AlCapNameFnt{}##2}}% }% \newcommand{\RestoreCaptionOfAlgo}{% \let\algocf@captiontext=\@old@algocf@captiontext% }% % % ---------------------- algocf environment % \newcounter{algocfline}% % new counter to make lines numbers be internally \setcounter{algocfline}{0}% % different in different algorithms \newcounter{algocfproc}% counter to count all algo environment (proc, func), just used by hyperref to avoir "same \setcounter{algocfproc}{0}% identifier" error caused by algocf being set to '-' for procedure or function or not % changed if no caption is given. % \expandafter\ifx\csname algocf@within\endcsname\relax% if \algocf@within doesn't exist \newcounter{algocf}% % just define a new counter \renewcommand{\thealgocf}{\@arabic\c@algocf}% and the way it is printed \else% else \newcounter{algocf}[\algocf@within]% % counter is numbered within \algocf@within \renewcommand\thealgocf{\csname the\algocf@within\endcsname.\@arabic\c@algocf}% \fi% % \def\fps@algocf{htbp}% % default \def\ftype@algocf{10}% % float type \def\ext@algocf{\algocf@list} % loa by default, lof if figure option used \newcommand{\fnum@algocf}{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\thealgocf}}% \newcommand{\algocf@resetfnum}{\renewcommand{\fnum@algocf}{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\thealgocf}}}% \newenvironment{algocf}% % float environment for algorithms {\@float{algocf}}% {\end@float}% \newenvironment{algocf*}% % float* environment for algorithms {\@dblfloat{algocf}}% {\end@dblfloat}% % \def\algocf@seclistalgo{}% \ifx\l@chapter\undefined\let\algocf@seclistalgo=\section\else\let\algocf@seclistalgo=\chapter\fi% \@ifundefined{if@restonecol}{\newif\if@restonecol}\relax% \newcommand\listofalgocfs{% \ifx\algocf@seclistalgo\chapter% \if@twocolumn\@restonecoltrue\onecolumn\else\@restonecolfalse\fi% \fi% \algocf@seclistalgo*{\listalgorithmcfname}% \@mkboth{\MakeUppercase\listalgorithmcfname}% {\MakeUppercase\listalgorithmcfname}% \@starttoc{loa}% \ifx\algocf@seclistalgo\chapter% \if@restonecol\twocolumn\fi% \fi% } % \newcommand*\l@algocf{\@dottedtocline{1}{1em}{2.3em}}% line of the list % % ---------------------- algorithm environment % %%%%%%% %% %% Algorithm environment definition %% %%%%%%% %% % \newsavebox\algocf@algoframe% \def\@algocf@pre@plain{\relax}% action to be done before printing the algo. \def\@algocf@post@plain{\relax}% action to be done after printing the algo. \def\@algocf@capt@plain{bottom}% where the caption should be localized. \def\@algocf@pre@boxed{\noindent\begin{lrbox}{\algocf@algoframe}} \def\@algocf@post@boxed{\end{lrbox}\framebox[\hsize]{\box\algocf@algoframe}\par}% \def\@algocf@capt@boxed{under}% \def\@algocf@pre@ruled{\hrule width\algocf@ruledwidth height\algoheightrule depth0pt\kern\interspacetitleruled}% \def\@algocf@post@ruled{\kern\interspacealgoruled\hrule width\algocf@ruledwidth height\algoheightrule\relax}% \def\@algocf@capt@ruled{top}% \def\@algocf@pre@algoruled{\hrule width\algocf@ruledwidth height\algoheightrule depth0pt\kern\interspacetitleruled}% \def\@algocf@post@algoruled{\kern\interspacealgoruled\hrule width\algocf@ruledwidth height\algoheightrule \relax}% \def\@algocf@capt@algoruled{top}% \def\@algocf@pre@tworuled{\hrule height\algoheightrule depth0pt\kern\interspacetitleruled}% \def\@algocf@post@tworuled{\kern\interspacealgoruled\hrule height\algoheightrule\relax}% \def\@algocf@capt@tworuled{top}% \def\@algocf@pre@boxruled{\noindent\begin{lrbox}{\algocf@algoframe}}% \def\@algocf@post@boxruled{\end{lrbox}\framebox[\hsize]{\box\algocf@algoframe}\par}% \def\@algocf@capt@boxruled{above}% \def\@algocf@pre@plainruled{\@algocf@pre@ruled}% action to be done before printing the algo. \def\@algocf@post@plainruled{\@algocf@post@ruled\kern\interspacealgoruled}% action to be done before printing the algo. \def\@algocf@capt@plainruled{under}% % \newcommand{\noalgocaption}{\def\@algocf@capt@ruled{none}} % %% before algocf environment (not figure environment) \newcommand{\@algocf@init@caption}{% \ifthenelse{\boolean{algocf@procenvironment}}{% if we are inside a procedure/function environment \@algocf@proctitleofalgo% set Titleofalgo to Procedure: or Function: % accordingly to the environment \let\old@thealgocf=\thealgocf\ifthenelse{\boolean{algocf@procnumbered}}{\relax}{% \renewcommand{\thealgocf}{-}}% }{% else inside environment algorithm \@algocf@algotitleofalgo% fix name for \Titleofalgo to \algorithmcfname }% \algocf@setcaption% set caption to our caption style }% % \newcommand{\@algofloatboxreset}{\@setminipage} \newcommand{\@algocf@init}{% \refstepcounter{algocfline}% \stepcounter{algocfproc}%to have a different counter for each environment and being abble to make the difference %between href of algoline in different algorithms. \ifthenelse{\boolean{algocf@optnoend}}{% \renewcommand{\algocf@block}[3]{\algocf@group{##1}}% }{% \renewcommand{\algocf@block}[3]{\algocf@@block{##1}{##2}{##3}}% }% }% %% after the end of algocf or figure environment \newcommand{\@algocf@term@caption}{% \algocf@resetcaption% restore original caption }% % \newcommand{\@algocf@term}{% \setboolean{algocf@algoH}{false}% no H by default \ifthenelse{\boolean{algocf@optnoend}}{% \renewcommand{\algocf@block}[3]{\algocf@@block{##1}{##2}{##3}}% }{% \renewcommand{\algocf@block}[2]{\algocf@group{##1}}% }% \SetAlgoRefName{\relax}% }% % %%%%%%%%%%%%%%%%% %% makethealgo: macro which print effectively the algo in its box %% \newsavebox\algocf@algobox% \newcommand{\algocf@makethealgo}{% \vtop{% % place caption above if needed bye the style \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{above}}% {\csname algocf@caption@\algocf@style\endcsname}{}% % % precommand according to the style \csname @algocf@pre@\algocf@style\endcsname% % place caption at top if needed bye the style \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{top}}% {\csname algocf@caption@\algocf@style\endcsname}{}% % \box\algocf@algobox% the algo % place caption at bottom if needed bye the style \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{bottom}}% {\csname algocf@caption@\algocf@style\endcsname}{}% % postcommand according to the style \csname @algocf@post@\algocf@style\endcsname% % place caption under if needed bye the style \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{under}}% {\csname algocf@caption@\algocf@style\endcsname}{}% }% }% %%%%%%%%%%%%%%%%%%% % %% at the beginning of algocf or figure environment \newenvironment{algomathdisplay}{\[}{\@endalgocfline\]\ifthenelse{\boolean{algocf@linesnumbered}}{\nl}{\relax}}% \newcommand{\@algocf@start}{% \@algoskip% \begin{lrbox}{\algocf@algobox}% \setlength{\algowidth}{\hsize}% \vbox\bgroup% save all the algo in a box \hbox to\algowidth\bgroup\hbox to \algomargin{\hfill}\vtop\bgroup% \ifthenelse{\boolean{algocf@slide}}{\parskip 0.5ex\color{black}}{}% % initialization \addtolength{\hsize}{-\algomargin}\addtolength{\hsize}{-1.5em}% 1.5em to let space for line numbering \let\@mathsemicolon=\;\def\;{\ifmmode\@mathsemicolon\else\@endalgoln\fi}% \raggedright% \AlFnt{}% \ifthenelse{\boolean{algocf@slide}}{\IncMargin{\skipalgocfslide}}{}% \@algoinsideskip% % \let\@emathdisplay=\]\def\]{\algocf@endline\@emathdisplay\nl}% }% % %% at the end of algocf or figure environment \newcommand{\@algocf@finish}{% \@algoinsideskip% \egroup%end of vtop which contain all the text \hfill\egroup%end of hbox wich contains [margin][vtop] \ifthenelse{\boolean{algocf@slide}}{\DecMargin{\skipalgocfslide}}{}% % \egroup%end of main vbox \end{lrbox}% \algocf@makethealgo% print the algo \@algoskip% % restore dimension and macros \setlength{\hsize}{\algowidth}% \lineskip\normallineskip\setlength{\skiptotal}{\@defaultskiptotal}% \let\;=\@mathsemicolon% \let\]=\@emathdisplay% }% % %%%%%%%%%%%%%%%%%%%% %% basic definition of the environment algorithm %% % \newboolean{algocf@procenvironment}\setboolean{algocf@procenvironment}{false}% \newboolean{algocf@func}\setboolean{algocf@func}{false}% \newboolean{algocf@algoH}\setboolean{algocf@algoH}{false}% \newboolean{algocf@algostar}\setboolean{algocf@algostar}{false}% % %%% environment for {algorithm}[H] \newenvironment{algocf@Here}{\noindent% \def\@captype{algocf}% if not defined, caption exit with an error \begin{minipage}{\hsize}% }{% \end{minipage}%\par% }% %%% real algorithm environment which manages H and * option % \let\algocf@originalfloatboxreset=\@floatboxreset% % \let\@floatboxreset=\@algofloatboxreset% \newenvironment{algocf@algorithm}[1][htbp]{% \@algocf@init% \ifthenelse{\equal{\algocf@float}{figure}}{% if option figure set \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* with figure option \begin{figure*}[#1]% call figure* \ifthenelse{\boolean{algocf@customruledwidth}}{\relax}{\setlength{\algocf@ruledwidth}{\linewidth}}% \let\algocf@oldeverypar=\everypar% \algocf@seteverypar% \addtolength{\linewidth}{-\algomargin}% caption package use \linewidth as basic width of caption }{% else algorithm environment with figure option \begin{figure}[#1]% call figure \ifthenelse{\boolean{algocf@customruledwidth}}{\relax}{\setlength{\algocf@ruledwidth}{\linewidth}}% \let\algocf@oldeverypar=\everypar% \algocf@seteverypar% \addtolength{\linewidth}{-\algomargin}% so now \linewidth==\hsize. Needed by caption package that uses \linewidth as basic width of caption }% }{% else normal algorithm environment \@algocf@init@caption% \ifthenelse{\equal{#1}{H}}{% if [H] algorithm \if@twocolumn\@latex@error{[H] in two columns mode is not allowed for algorithms}\fi% TODO: SCREAM if H in two colums! \setboolean{algocf@algoH}{true}\begin{algocf@Here}% call corresponding environment \ifthenelse{\boolean{algocf@customruledwidth}}{\relax}{\setlength{\algocf@ruledwidth}{\linewidth}}% \let\algocf@oldeverypar=\everypar% \algocf@seteverypar% }{% else floating algorithm environment \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* \begin{algocf*}[#1]% call algocf* \ifthenelse{\boolean{algocf@customruledwidth}}{\relax}{\setlength{\algocf@ruledwidth}{\linewidth}}% \let\algocf@oldeverypar=\everypar% \algocf@seteverypar% }{% else algorithm environment \begin{algocf}[#1]% call algocf \ifthenelse{\boolean{algocf@customruledwidth}}{\relax}{\setlength{\algocf@ruledwidth}{\linewidth}}% \let\algocf@oldeverypar=\everypar% \algocf@seteverypar% }% }% }% fin test option figure ou pas \@algocf@start% \@ResetCounterIfNeeded% \algocf@linesnumbered\ignorespaces% }{% \@algocf@finish% \ifthenelse{\equal{\algocf@float}{figure}}{% \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* with figure option \let\everypar=\algocf@oldeverypar% \end{figure*}% call figure* }{% else algorithm environment with figure option \let\everypar=\algocf@oldeverypar% \end{figure}% call figure }% }{% \@algocf@term@caption% \ifthenelse{\boolean{algocf@algoH}}{% if [H] algorithm \let\everypar=\algocf@oldeverypar% \end{algocf@Here}\par% call corresponding environment }{% else floating algorithm environment \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* \let\everypar=\algocf@oldeverypar% \end{algocf*}% call algocf* }{% else algorithm environment \let\everypar=\algocf@oldeverypar% \end{algocf}% call algocf }% }% }% \@algocf@term\ignorespacesafterend% }% % %%% user algorithm environment \newenvironment{\algocf@envname}[1][htbp]{% \setboolean{algocf@algostar}{false}% \setboolean{algocf@procenvironment}{false}\gdef\algocfautorefname{\algorithmautorefname}% \begin{algocf@algorithm}[#1]\ignorespaces% }{% \end{algocf@algorithm}\ignorespacesafterend% }% %%% user algorithm* environment \newenvironment{\algocf@envname*}[1][htbp]{% \setboolean{algocf@algostar}{true}% \setboolean{algocf@procenvironment}{false}\gdef\algocfautorefname{\algorithmautorefname}% \begin{algocf@algorithm}[#1]\ignorespaces% }{% \end{algocf@algorithm}\ignorespacesafterend% }% % %%%%%%%%%%%%%%%%%%%%%%% %%% % \expandafter\newcommand\csname\algocf@listofalgorithms\endcsname{% \ifthenelse{\equal{\algocf@float}{figure}}{\listoffigures}{\listofalgocfs}% }% %%% %%% % % ---------------------- procedure and function environments % % % -- new style (used in particular in the caption of function and procedure environments) % % three macros to extract parts of the caption \gdef\algocf@captname#1(#2)#3@{#1} % keep characters before the first brace \gdef\algocf@captparam#1(#2)#3@{#2} % keep character in between the braces \gdef\algocf@captother#1(#2)#3@{#3} % keep character after the braces % %%% Text of caption for Procedure or Function \newcommand{\algocf@captionproctext}[2]{% {% \ProcSty{\ProcFnt\algocf@procname\ifthenelse{\boolean{algocf@procnumbered}}{\nobreakspace\thealgocf\algocf@typo\algocf@capseparator}{\relax}}% \nobreakspace\ProcNameSty{\ProcNameFnt\algocf@captname #2@}% Name of the procedure in ProcName Style. \ifthenelse{\equal{\algocf@captparam #2@}{\arg@e}}{}{% if no argument, write nothing \ProcNameSty{\ProcNameFnt(}\ProcArgSty{\ProcArgFnt\algocf@captparam #2@}\ProcNameSty{\ProcNameFnt)}%else put arguments in ProcArgSty: }% endif \algocf@captother #2@% }% }% % % % -- procedure and function environments are defined from algocf@algorithm environment % \newenvironment{procedure}[1][htbp]{% \setboolean{algocf@algostar}{false}% \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{false}% \newcommand{\algocf@procname}{\@algocf@procname}\gdef\algocfprocautorefname{\procedureautorefname}% \begin{algocf@algorithm}[#1]\ignorespaces% }{% \end{algocf@algorithm}\ignorespacesafterend% }% \newenvironment{function}[1][htbp]{% \setboolean{algocf@algostar}{false}% \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{true}% \newcommand{\algocf@procname}{\@algocf@funcname}\gdef\algocffuncautorefname{\functionautorefname}% \begin{algocf@algorithm}[#1]\ignorespaces% }{% \end{algocf@algorithm}\ignorespacesafterend% }% % \newenvironment{procedure*}[1][htbp]{% \setboolean{algocf@algostar}{true}% \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{false}% \newcommand{\algocf@procname}{\@algocf@procname}\gdef\algocfprocautorefname{\procedureautorefname}% \begin{algocf@algorithm}[#1]\ignorespaces% }{% \end{algocf@algorithm}\ignorespacesafterend% }% \newenvironment{function*}[1][htbp]{% \setboolean{algocf@algostar}{true}% \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{true}% \newcommand{\algocf@procname}{\@algocf@funcname}\gdef\algocffuncautorefname{\functionautorefname}% \begin{algocf@algorithm}[#1]\ignorespaces% }{% \end{algocf@algorithm}\ignorespacesafterend% }% % % %%%%%%%%%%%%%%%%%%%% %% definition of algondfloat environment %% \ifthenelse{\boolean{algocf@endfloat}}{% if endfloat option then \newcommand{\algoplace}{% macro which is used to writhe algorithm about there \begin{center}% [\algorithmcfname~\thepostfig\ about here.]% \end{center}% }% \newcommand{\algoendfloat}{% use as a \begin{algoendfloat} environment to start scanning of line % \immediate\openout\@mainfff\jobname.fff% \efloat@condopen{fff} \efloat@iwrite{fff}{\string\begin{\algocf@envname}}% \if@domarkers% \ifthenelse{\equal{\algocf@list}{lof}}{% \addtocounter{postfig}{1}% }{% \addtocounter{postalgo}{1}% }% \algoplace% \fi% \bgroup% \let\do\ef@makeinnocent\dospecials% \ef@makeinnocent\^^L% and whatever other special cases \endlinechar`\^^M \catcode`\^^M=12 \ef@xalgocfendfloat}% }{\relax}%%%% end of endfloat option ifthenelse %% some macros useful for endfloat option that cannot be defined inside the ifthenelse %scan algoendfloat algorithm and write the text into .fff file {\catcode`\^^M=12 \endlinechar=-1 % \gdef\ef@xalgocfendfloat#1^^M{% scan the lines inside algoendfloat environment being read by latex \def\test{#1}% test is the line being currently scan by latex \ifx\test\ef@endalgocftest% if it is \end{algoendfloat} \def\next{% define next as to not continue the scan and write \end{algorithm} into .fff file \egroup\end{algoendfloat}% \efloat@iwrite{fff}{\string\end{\algocf@envname}}% \efloat@iwrite{fff}{\string\efloatseparator}% \efloat@iwrite{fff}{ }% }% \else% else write the current line being scanned by latex and set next to continue the scan \efloat@iwrite{fff}{#1}% \let\next\ef@xalgocfendfloat% \fi% endif \next}% next is continue if it was else condition, else it does not continue the scan and write end to file }% % test if the scan is finish by looking at the string \end{algoendfloat} {\escapechar=-1% \xdef\ef@endalgocftest{\string\\end\string\{algoendfloat\string\}}% }% % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \newcommand{\TitleOfAlgo}[1]{\@titleprefix\ \TitleSty{#1}\par\smallskip}% % \newcommand{\SetAlgorithmName}[3]{% \renewcommand{\listalgorithmcfname}{#3}% \renewcommand{\algorithmcfname}{#1}% \renewcommand{\algorithmautorefname}{#2}% }% % \newcommand{\algocf@refrelsize}{-2}\newcommand{\SetAlgoRefRelativeSize}[1]{\renewcommand{\algocf@refrelsize}{#1}}% \newcommand{\SetAlgoRefName}[1]{% \renewcommand{\algocf@algocfref}{#1}% }% % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % ------------------------- Default Definitions % %% %% % \SetKwComment{tcc}{/* }{ */}% \SetKwComment{tcp}{// }{}% % %\newcommand{\algocf@defaults@common}{ % % % english keywords (default) % \SetKwHangingKw{KwHData}{Data$\rightarrow$} \SetKwInput{KwIn}{Input}% \SetKwInput{KwOut}{Output}% \SetKwInput{KwData}{Data}% \SetKwInput{KwResult}{Result}% \SetKw{KwTo}{to} \SetKw{KwRet}{return}% \SetKw{Return}{return}% \SetKwBlock{Begin}{begin}{end}% \SetKwRepeat{Repeat}{repeat}{until}% % \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{end if}% \SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end case}{end switch}% \SetKwFor{For}{for}{do}{end for}% \SetKwFor{ForPar}{for}{do in parallel}{end forpar} \SetKwFor{ForEach}{foreach}{do}{end foreach}% \SetKwFor{ForAll}{forall}{do}{end forall}% \SetKwFor{While}{while}{do}{end while}% % % French keywords % \ifthenelse{\boolean{algocf@localkw@french}\OR\equal{\algocf@languagechoosen}{french}}{% %\SetKwInOut{AlgDonnees}{Donn\'ees}\SetKwInOut{AlgRes}{R\'esultat} \SetKwHangingKw{HDonnees}{Donnees$\rightarrow$} \SetKwInput{Donnees}{Donn\'ees}% \SetKwInput{Res}{R\'esultat}% \SetKwInput{Entree}{Entr\'ees}% \SetKwInput{Sortie}{Sorties}% \SetKw{KwA}{\`a}% \SetKw{Retour}{retourner}% \SetKwBlock{Deb}{d\'ebut}{fin}% \SetKwRepeat{Repeter}{r\'ep\'eter}{jusqu'\`a}% % \SetKwIF{Si}{SinonSi}{Sinon}{si}{alors}{sinon si}{sinon}{fin si}% \SetKwSwitch{Suivant}{Cas}{Autre}{suivant}{faire}{cas o\`u}{autres cas}{fin cas}{fin d'alternative}% \SetKwFor{Pour}{pour}{faire}{fin pour}% \SetKwFor{PourPar}{pour}{faire en parall\`ele}{fin pour}% \SetKwFor{PourCh}{pour chaque}{faire}{fin pour chaque}% \SetKwFor{PourTous}{pour tous les}{faire}{fin pour tous}% \SetKwFor{Tq}{tant que}{faire}{fin tq}% }{}% % % --- German keywords % \ifthenelse{\boolean{algocf@localkw@german}\OR\equal{\algocf@languagechoosen}{german}}{% \SetKwInput{Ein}{Eingabe}%KwIn \SetKwInput{Aus}{Ausgabe}%KwOut \SetKwInput{Daten}{Daten}%KwData \SetKwInput{Ergebnis}{Ergebnis}%KwResult \SetKw{Bis}{bis}%KwTo \SetKw{KwZurueck}{zur\"uck}%KwRet \SetKw{Zurueck}{zur\"uck}%Return \SetKwBlock{Beginn}{Beginn}{Ende}%Begin \SetKwRepeat{Wiederh}{wiederhole}{bis}%Repeat % \SetKwIF{Wenn}{SonstWenn}{Sonst}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf \SetKwSwitch{Unterscheide}{Fall}{Anderes}{unterscheide}{tue}{Fall}{sonst}{Ende Fall}{Ende Unt.}%Switch \SetKwFor{Fuer}{f\"ur}{tue}{Ende f\"ur}%For \SetKwFor{FuerPar}{f\"ur}{tue gleichzeitig}{Ende gleichzeitig}%ForPar \SetKwFor{FuerJedes}{f\"ur jedes}{tue}{Ende f\"ur}%ForEach \SetKwFor{FuerAlle}{f\"ur alle}{tue}{Ende f\"ur}%ForAll \SetKwFor{Solange}{solange}{tue}{Ende solange}%While }{}% % % --- Czech keywords % \ifthenelse{\boolean{algocf@localkw@czech}\OR\equal{\algocf@languagechoosen}{czech}}{% \SetKwInput{Vst}{Vstup}% \SetKwInput{Vyst}{V\'{y}stup}% \SetKwInput{Vysl}{V\'{y}sledek}% }{}% % % --- Portuguese keywords % \ifthenelse{\boolean{algocf@localkw@portuguese}\OR\equal{\algocf@languagechoosen}{portuguese}}{% \SetKwInput{Entrada}{Entrada}% \SetKwInput{Saida}{Sa\'{i}da}% \SetKwInput{Dados}{Dados}% \SetKwInput{Resultado}{Resultado}% \SetKw{Ate}{at\'{e}} \SetKw{KwRetorna}{retorna}% \SetKw{Retorna}{retorna}% \SetKwBlock{Inicio}{in\'{i}cio}{fim}% \SetKwRepeat{Repita}{repita}{at\'{e}}% % \SetKwIF{Se}{SenaoSe}{Senao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% \SetKwSwitch{Selec}{Caso}{Outro}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{fim caso}{fim selec}% \SetKwFor{Para}{para}{fa\c{c}a}{fim para}% \SetKwFor{ParaPar}{para}{fa\c{c}a em paralelo}{fim para} \SetKwFor{ParaCada}{para cada}{fa\c{c}a}{fim para cada}% \SetKwFor{ParaTodo}{para todo}{fa\c{c}a}{fim para todo}% \SetKwFor{Enqto}{enquanto}{fa\c{c}a}{fim enqto}% }{}% % % --- Italian keywords % \ifthenelse{\boolean{algocf@localkw@italiano}\OR\equal{\algocf@languagechoosen}{italiano}}{% \SetKwInput{KwIng}{Ingresso}% \SetKwInput{KwUsc}{Uscita}% \SetKwInput{KwDati}{Dati}% \SetKwInput{KwRisult}{Risultato}% \SetKw{KwA}{a}% \SetKw{KwRitorna}{ritorna}% \SetKw{Ritorna}{ritorna}% \SetKwBlock{Inizio}{inizio}{fine}% \SetKwRepeat{Ripeti}{ripeti}{finch\'e}% % \SetKwIF{Sea}{AltSe}{Altrimenti}{se}{allora}{altrimenti se}{allora}{fine se}% \SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end case}{endsw}% \SetKwFor{Per}{per}{fai}{fine per}% \SetKwFor{PerPar}{per}{fai in parallelo}{fine per}% \SetKwFor{PerCiascun}{per ciascun}{fai}{fine per ciascun}% \SetKwFor{PerTutti}{per tutti i}{fai}{fine per tutti}% \SetKwFor{Finche}{finch\'e}{fai}{fine finch\'e}% }{}% % % --- Spanish keywords % \ifthenelse{\boolean{algocf@localkw@spanish}\OR\equal{\algocf@languagechoosen}{spanish}}{% \SetKwInput{Datos}{Datos} \SetKwInput{Resultado}{Resultado} \SetKwInput{Entrada}{Entrada} \SetKwInput{Salida}{Salida} \SetKw{KwA}{a} \SetKw{KwDevolver}{devolver} \SetKw{Devolver}{devolver} \SetKwBlock{Inicio}{inicio}{fin} \SetKwIF{SSi}{EnOtroCasoSi}{EnOtroCaso}{si}{entonces}{sin\'o, si}{sin\'o}{fin si} \SetKwSwitch{Seleccionar}{Caso}{Otro}{seleccionar}{hacer}{caso}{sin\'o}{fin caso}{fin seleccionar} \SetKwFor{Para}{para}{hacer}{fin para} \SetKwFor{ParaPara}{par}{hacer en paralelo}{fin para} \SetKwFor{EnParalelo}{para}{hacer en paralelo}{fin para} \SetKwFor{Mientras}{mientras}{hacer}{fin mientras} \SetKwFor{ParaCada}{para cada}{hacer}{fin para cada} \SetKwFor{ParaTodo}{para todo}{hacer}{fin para todo} \SetKwRepeat{Repetir}{repetir}{hasta que} }{}% % % Croatian keywords % \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{croatian}}{% \SetKwInput{KwUlaz}{Ulaz}%KwIn \SetKwInput{KwIzlaz}{Izlaz}%KwOut \SetKwInput{KwPodatci}{Podatci}%KwData \SetKwInput{KwRezultat}{Rezultat}%KwResult \SetKw{KwDo}{do}%KwTo \SetKw{KwVrati}{vrati}%KwRet \SetKw{Vrati}{vrati}%Return \SetKwBlock{Pocetak}{po\v{c}etak}{kraj}%Begin \SetKwRepeat{Ponavljaj}{ponavljaj}{dok ne bude}%Repeat % \SetKwIF{Ako}{InaceAko}{Inace}{ako}{onda}{ina\v{c}e ako}{ina\v{c}e}{kraj ako}%gIf \SetKwSwitch{Granaj}{Slucaj}{OstaliSlucajevi}{granaj}{\v{c}ini}{slu\v{c}aj}{ostali slu\v{c}ajevi}{kraj slu\v{c}aj}{kraj granaj}%Switch \SetKwFor{Za}{za}{\v{c}ini}{kraj za}%For \SetKwFor{ZaPar}{za}{\v{c}ini paralelno}{kraj za paralelno}%ForPar \SetKwFor{ZaSvaki}{za svaki}{\v{c}ini}{kraj za svaki}%mForEach \SetKwFor{ZaSvaku}{za svaku}{\v{c}ini}{kraj za svaku}%fForEach \SetKwFor{ZaSvako}{za svako}{\v{c}ini}{kraj za svako}%nForEach \SetKwFor{ZaSve}{za sve}{\v{c}ini}{kraj za sve}%ForAll \SetKwFor{Dok}{dok}{\v{c}ini}{kraj dok}%While }{}% % % % --- Turkish keywords % \ifthenelse{\boolean{algocf@localkw@turkish}\OR\equal{\algocf@languagechoosen}{turkish}}{% \SetKwInput{KwIn}{Girdi}% \SetKwInput{KwOut}{\c{C}{\i}kt{\i}}% \SetKwInput{KwData}{Veri}% \SetKwInput{KwResult}{Sonu\c{c}}% \SetKw{KwTo}{to} \SetKw{KwRet}{return}% \SetKw{Return}{return}% \SetKwBlock{Begin}{begin}{end}% \SetKwRepeat{Repeat}{repeat}{until}% % % \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{end if}% \SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end case}{end switch}% \SetKwFor{For}{for}{do}{end for}% \SetKwFor{ForPar}{for}{do in parallel}{end forpar} \SetKwFor{ForEach}{foreach}{do}{end foreach}% \SetKwFor{ForAll}{forall}{do}{end forall}% \SetKwFor{While}{while}{do}{end while}% }{}% % % --- End %} % %\algocf@defaults@common % % option onelanguage redefinition % \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{french}}{% \SetKwInput{KwIn}{Entr\'ees}% \SetKwInput{KwOutSortie}{Sorties}% \SetKwInput{KwData}{Donn\'ees}% \SetKwInput{KwResult}{R\'esultat}% \SetKw{KwTo}{\`a}% \SetKw{KwRet}{retourner}% \SetKw{Return}{retourner}% \SetKwBlock{Begin}{d\'ebut}{fin}% \SetKwRepeat{Repeat}{r\'ep\'eter}{jusqu'\`a}% % \SetKwIF{If}{ElseIf}{Else}{si}{alors}{sinon si}{sinon}{fin si}% \SetKwSwitch{Switch}{Case}{Other}{suivant}{faire}{cas o\`u}{autres cas}{fin cas}{fin d'alternative}% \SetKwFor{For}{pour}{faire}{fin pour}% \SetKwFor{ForPar}{pour}{faire en parall\`ele}{fin pour}% \SetKwFor{ForEach}{pour chaque}{faire}{fin pour chaque}% \SetKwFor{ForAll}{pour tous}{faire}{fin pour tous}% \SetKwFor{While}{tant que}{faire}{fin tq}% }{}% \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{german}}{% \SetKwInput{KwIn}{Eingabe}%KwIn \SetKwInput{KwOut}{Ausgabe}%KwOut \SetKwInput{KwData}{Daten}%KwData \SetKwInput{KwResult}{Ergebnis}%KwResult \SetKw{KwTo}{bis}%KwTo \SetKw{KwRet}{zur\"uck}%KwRet \SetKw{Return}{zur\"uck}%Return \SetKwBlock{Begin}{Beginn}{Ende}%Begin \SetKwRepeat{Repeat}{wiederhole}{bis}%Repeat % \SetKwIF{If}{ElseIf}{Else}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf \SetKwSwitch{Switch}{Case}{Other}{unterscheide}{tue}{Fall}{sonst}{Ende Fall}{Ende Unt.}%Switch \SetKwFor{For}{f\"ur}{tue}{Ende f\"ur}%For \SetKwFor{ForPar}{f\"ur}{tue gleichzeitig}{Ende gleichzeitig}%ForPar \SetKwFor{ForEach}{f\"ur jedes}{tue}{Ende f\"ur}%ForEach \SetKwFor{ForAll}{f\"ur alle}{tue}{Ende f\"ur}%ForAll \SetKwFor{While}{solange}{tue}{Ende solange}%While }{}% \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{portuguese}}{% \SetKwInput{KwIn}{Entrada}% \SetKwInput{KwOut}{Sa\'{i}da}% \SetKwInput{KwData}{Dados}% \SetKwInput{KwResult}{Resultado}% \SetKw{KwTo}{at\'{e}} \SetKw{KwRet}{retorna}% \SetKw{Return}{retorna}% \SetKwBlock{Begin}{in\'{i}cio}{fim}% \SetKwRepeat{Repeat}{repita}{at\'{e}}% % \SetKwIF{If}{ElseIf}{Else}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% \SetKwSwitch{Switch}{Case}{Other}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{fim caso}{fim selec}% \SetKwFor{For}{para}{fa\c{c}a}{fim para}% \SetKwFor{ForPar}{para}{fa\c{c}a em paralelo}{fim para} \SetKwFor{ForEach}{para cada}{fa\c{c}a}{fim para cada}% \SetKwFor{ForAll}{para todo}{fa\c{c}a}{fim para todo}% \SetKwFor{While}{enquanto}{fa\c{c}a}{fim enqto}% }{}% \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{italiano}}{% \SetKwInput{KwIn}{Ingresso}% \SetKwInput{KwOut}{Uscita}% \SetKwInput{KwData}{Dati}% \SetKwInput{KwResult}{Risultato}% \SetKw{KwTo}{a}% \SetKw{KwRet}{ritorna}% \SetKw{Return}{ritorna}% \SetKwBlock{Begin}{inizio}{fine}% \SetKwRepeat{Repeat}{ripeti}{finch\'e}% % \SetKwIF{If}{ElseIf}{Else}{se}{allora}{altrimenti se}{allora}{fine se}% \SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end case}{endsw}% \SetKwFor{For}{per}{fai}{fine per}% \SetKwFor{ForPar}{per}{fai in parallelo}{fine per}% \SetKwFor{ForEach}{per ciascun}{fai}{fine per ciascun}% \SetKwFor{ForAll}{per tutti i}{fai}{fine per tutti}% \SetKwFor{While}{finch\'e}{fai}{fine finch\'e}% }{}% \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{spanish}}{% \SetKwInput{KwIn}{Entrada}% \SetKwInput{KwOut}{Salida}% \SetKwInput{KwData}{Datos}% \SetKwInput{KwResult}{Resultado}% \SetKw{KwTo}{a}% \SetKw{KwRet}{devolver}% \SetKw{Return}{devolver}% \SetKwBlock{Begin}{inicio}{fin}% \SetKwRepeat{Repeat}{repetir}{hasta que}% % \SetKwIF{If}{ElseIf}{Else}{si}{entonces}{si no, si}{en otro caso}{fin si} \SetKwSwitch{Switch}{Case}{Other}{seleccionar}{hacer}{caso}{si no}{fin caso}{fin seleccionar} \SetKwFor{For}{para}{hacer}{fin para}% \SetKwFor{ForPar}{para}{hacer in paralelo}{fin para}% \SetKwFor{ForEach}{para cada}{hacer}{fin para cada} \SetKwFor{ForAll}{para todo}{hacer}{fin para todo} \SetKwFor{While}{mientras}{hacer}{fin mientras} }{}% % \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{croatian}}{% \SetKwInput{KwIn}{Ulaz}%KwIn \SetKwInput{KwOut}{Izlaz}%KwOut \SetKwInput{KwData}{Podatci}%KwData \SetKwInput{KwResult}{Rezultat}%KwResult \SetKw{KwTo}{do}%KwTo \SetKw{KwRet}{vrati}%KwRet \SetKw{Return}{vrati}%Return \SetKwBlock{Begin}{po\v{c}etak}{kraj}%Begin \SetKwRepeat{Repeat}{ponavljaj}{dok ne bude}%Repeat % \SetKwIF{If}{ElseIf}{Else}{ako}{onda}{ina\v{c}e ako}{ina\v{c}e}{kraj ako}%gIf \SetKwSwitch{Switch}{Case}{Other}{granaj}{\v{c}ini}{slu\v{c}aj}{ostali slu\v{c}ajevi}{kraj slu\v{c}aj}{kraj granaj}%Switch \SetKwFor{For}{za}{\v{c}ini}{kraj za}%For \SetKwFor{ForPar}{za}{\v{c}ini paralelno}{kraj za paralelno}%ForPar \SetKwFor{ForEach}{za svaki}{\v{c}ini}{kraj za svaki}%ForEach \SetKwFor{ForAll}{za sve}{\v{c}ini}{kraj za sve}%ForAll \SetKwFor{While}{dok}{\v{c}ini}{kraj dok}%While }{}% % \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{turkish}}{% % \SetKwInput{KwIn}{Girdi}% \SetKwInput{KwOut}{\c{C}{\i}kt{\i}}% \SetKwInput{KwData}{Veri}% \SetKwInput{KwResult}{Sonu\c{c}}% \SetKw{KwTo}{to} \SetKw{KwRet}{return}% \SetKw{Return}{return}% \SetKwBlock{Begin}{begin}{end}% \SetKwRepeat{Repeat}{repeat}{until}% % \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{end if}% \SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end switch}% \SetKwFor{For}{for}{do}{end for}% \SetKwFor{ForPar}{for}{do in parallel}{end forpar} \SetKwFor{ForEach}{foreach}{do}{end foreach}% \SetKwFor{ForAll}{forall}{do}{end forall}% \SetKwFor{While}{while}{do}{end while}% }{}% % % %%%% old commands compatibility % \ifthenelse{\boolean{algocf@oldcommands}}{% \newcommand{\SetNoLine}{\SetAlgoNoLine}% \newcommand{\SetNoline}{\SetAlgoNoLine}% \newcommand{\SetVline}{\SetAlgoVlined}% \newcommand{\SetLine}{\SetAlgoLined}% % \newcommand{\dontprintsemicolon}{\DontPrintSemicolon}% \newcommand{\printsemicolon}{\PrintSemicolon}% \newcommand{\incmargin}[1]{\IncMargin{#1}}% \newcommand{\decmargin}[1]{\DecMargin{-#1}}% \newcommand{\setnlskip}[1]{\SetNlSkip{#1}}% \newcommand{\Setnlskip}[1]{\SetNlSkip{#1}}% \newcommand{\setalcapskip}[1]{\SetAlCapSkip{#1}}% \newcommand{\setalcaphskip}[1]{\SetAlCapHSkip{#1}}% \newcommand{\nlSty}[1]{\NlSty{#1}}% \newcommand{\Setnlsty}[3]{\SetNlSty{#1}{#2}{#3}}% \newcommand{\linesnumbered}{\LinesNumbered}% \newcommand{\linesnotnumbered}{\LinesNotNumbered}% \newcommand{\linesnumberedhidden}{\LinesNumberedHidden}% \newcommand{\showln}{\ShowLn}% \newcommand{\showlnlabel}[1]{\ShowLnLabel{#1}}% \newcommand{\nocaptionofalgo}{\NoCaptionOfAlgo}% \newcommand{\restorecaptionofalgo}{\RestoreCaptionOfAlgo}% \newcommand{\restylealgo}[1]{\RestyleAlgo{#1}}% % \newcommand{\Titleofalgo}[1]{\TitleOfAlgo{#1}}% % \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{endif} \newcommand{\SetKwIf}[6]{\SetKwIF{#1}{#2#1}{#2}{#3}{#4}{#5 #1}{#5}{#6}} % \SetKwIF{gSi}{gSinonSi}{gSinon}{si}{alors}{sinon si}{sinon}{fin si}% \SetKwIF{gIf}{gElsIf}{gElse}{if}{then}{else if}{else}{end if}% \SetKwIF{gIf}{gElseIf}{gElse}{if}{then}{else if}{else}{end if}% \SetKwIF{gWenn}{gSonstWenn}{gSonst}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf \SetKwIF{gSe}{gSenaoSe}{gSenao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% \SetKwIF{gSea}{gAltSe}{gAltrimenti}{se}{allora}{altrimenti se}{allora}{fine se}% \SetKw{Ret}{return}% \SetKwInput{Data}{Data}% \SetKwInput{Result}{Result}% }{% \relax% }% % % % %% %%% %%%% ENDrstpm2/vignettes/predictnl.Rnw0000644000176200001440000002073715040663325016202 0ustar liggesusers%\VignetteIndexEntry{Introduction to the predictnl function} %\VignetteDepends{rstpm2} %\VignetteKeyword{variance estimation, delta method} %\VignettePackage{rstpm2} %!\SweaveUTF8 \documentclass[article,nojss,12pt]{jss} \usepackage{Sweave,graphicx,amsmath,amsfonts,amssymb,url} \title{Introduction to the predictnl function} \author{Mark~Clements\\Karolinska Institutet} \Abstract{ The \code{predictnl} generic function supports variance estimation for non-linear estimators using the delta method with finite differences for the partial derivatives. The function loosely extends the \code{predict} generic function. } \Keywords{delta method,variance estimation} \Address{Mark~Clements\\ Department of Medical Epidemiology and Biostatistics\\ Karolinska Institutet\\ Email: \email{mark.clements@ki.se} } \begin{document} \section{Introduction} The delta method provides a general approach to calculate the variance (or standard errors) for a number of likelihood-based estimators. If we have an estimated vector of parameters $\hat\theta$ with covariance matrix $\boldsymbol{\hat\Sigma}$ and a vector prediction function $g(\theta)$, then the variance can be calculated using the delta method: \begin{align*} \text{var}(g(\hat\theta)) &= \left(\left.\frac{\partial g(\theta)}{\partial \theta}\right|_{\theta=\hat\theta}\right)^T \boldsymbol{\hat\Sigma} \left(\left.\frac{\partial g(\theta)}{\partial \theta}\right|_{\theta=\hat\theta}\right) \end{align*} Classical statistics tends to focus on analytical calculations for the partial derivatives. As an example, let $g(\theta_i)=\exp(\theta_i)$ for the $i$th parameter; then $\partial g(\theta_i)/\partial(\theta_i)=\exp(\theta_i)$ and $\partial g(\theta_i)/\partial(\theta_j)=0$ for $i\neq j$. We then have that $\text{var}(g(\hat\theta_i))=\text{diag}\left(\exp(\hat\theta_i)\right)^T \boldsymbol{\hat\Sigma}\ \text{diag}\left(\exp(\hat\theta)\right)$. The partials can be calculated symbolically: <<>>= thetahat <- c(0.1,0.2) Sigma <- matrix(c(1,0.3,0.3,1),2,2) print(partial <- D(expression(exp(theta)),"theta")) partial <- diag(eval(partial,list(theta=thetahat))) var <- t(partial) %*% Sigma %*% partial data.frame(fit=exp(thetahat), se.fit=sqrt(diag(var))) @ Note that we have calculated the standard errors by taking the square root of the diagonal of the matrix. We can also calculate the partials using finite differences, such that for a continuous function $f$ \begin{align*} f'(x) &=\lim_{\epsilon \rightarrow 0}\frac{f(x+\epsilon)-f(x-\epsilon)}{2\epsilon} \end{align*} In R: <<>>= myD <- function(f,x,eps=1e-5) (f(x+eps)-f(x-eps))/(2*eps) partial <- diag(myD(exp,thetahat)) var <- t(partial) %*% Sigma %*% partial data.frame(fit=exp(thetahat),se.fit=sqrt(diag(var))) @ This gives the same estimates to six decimal places. We could also calculate these values using the \code{predictnl} command, which we now introduce. The \code{predictnl} generic function provides a generalisation of the \code{predict} generic function to calculate standard errors. \code{predictnl} uses finite differences (or a user-supplied matrix) to calculate the partial derivatives. The basic call is \code{predictnl(object, fun, newdata=NULL, ...)} where \code{fun} takes the \code{object} as the first argument; \code{newdata} is an optional argument to \code{fun}, and other arguments \code{...} are passed to \code{fun}. The \code{object} is required to have three methods: (i) \code{vcov.class} to extract the variance-covariance matrix of the estimated parameters; (ii) \code{coef.class} to extract the coefficients; and (iii) \code{coef<-.class} to set the coefficients. For the example above, we use a \code{test} class and define the three methods; note that the \code{coef} and \code{coef<-} methods are as per the default. We then define an object (named \code{fit}) of that class, define a prediction function \code{expcoef} which exponentiates the coefficients, and then call \code{predictnl}: <<>>= library(rstpm2) vcov.test <- function(object) object$vcov coef.test <- function(object) object$coefficients # default "coef<-.test" <- function(object,value) { object$coefficients <- value; object} # default fit <- structure(list(vcov=Sigma,coefficients=thetahat),class="test") expcoef <- function(object) exp(coef(object)) predictnl(fit,expcoef) @ This gives the same output as before. Generic methods for \code{vcov} and \code{coef} are available for most regression models; a default implementations for \code{coef<-} is provided in the \code{rstpm2} package. <<>>= rstpm2:::"coef<-.default" @ For another simple example, consider a linear regression with a single covariate, such that $E(y)=\beta_0+\beta_1 x_1$ for standard normal distributed $x_1$ with homoscedastic standard normal errors. For a given outcome $y$, we want to find the value of $x$ that solves $y=\hat\beta_0+\hat\beta_1 x$. <<>>= set.seed(123456) x1 <- rnorm(1000) y <- rnorm(1000,x1) fit <- lm(y~x1) invert <- function(object,newdata) { thetahat <- coef(object) (newdata$y-thetahat[1])/thetahat[2] } predictnl(fit, invert, newdata=data.frame(y=seq(0,2,by=0.5))) @ We can also calculate average values across the sample under counterfactual exposures. We extend the previous example to include a second Bernoulli-distributed covariate $x_2$ with $p=0.5$, where $E(y)=\beta_0+\beta_1 x_1+\beta_2 x_2$. We may be interested in calculating the marginal estimators $E(y|x_2=0)$, $E(y|x_2=1)$ and $E(y|x_2=1)-E(y|x_2=0)$, where the expectations are across the full dataset\footnote{Under suitable causal assumptions, we could re-write the three estimators as $E(y|\text{do}(x_2)=0)$, $E(y|\text{do}(x_2)=1)$ and $E(y|\text{do}(x_2)=1)-E(y|\text{do}(x_2)=0)$.}. Then: <<>>= set.seed(123456) x1 <- rnorm(1000) x2 <- rbinom(1000,1,0.5) y <- rnorm(1000,x1+x2) fit <- lm(y~x1+x2) standardise <- function(object,newdata) mean(predict(object,newdata)) predictnl(fit, standardise, newdata=data.frame(x1,x2=0)) predictnl(fit, standardise, newdata=data.frame(x1,x2=1)) standdiff <- function(object,newdata) standardise(object,transform(newdata,x2=1))- standardise(object,transform(newdata,x2=0)) predictnl(fit, standdiff, newdata=data.frame(x1)) @ As a final example, we consider modelling for additive interaction contrasts using \code{rstpm2}. Consider a time-to-event variable $T$ with two binary exposures $x_1$ and $x_2$. Adapting the formulations from Rothman et al (Modern Epidemiology, third edition, 2008) to time-dependent outcomes, the interaction contrast $\text{IC}(t)$ and relative excess risk for interaction $\text{RERI}(t)$ can be calculated by \begin{footnotesize} \begin{align*} \text{IC}(t) &= \text{Pr}(T\leq t|x_1=1, x_2=1)-\text{Pr}(T\leq t|x_1=1, x_2=0)-\text{Pr}(T\leq t|x_1=0, x_2=1)+\text{Pr}(T\leq t|x_1=0, x_2=0) \\ &= -(S(t|x_1=1, x_2=1)-S(t|x_1=1, x_2=0)-S(t|x_1=0, x_2=1)+S(t|x_1=0, x_2=0)) \\ \text{RERI}(t) &= \frac{\text{Pr}(T\leq t|x_1=1, x_2=1)-\text{Pr}(T\leq t|x_1=1, x_2=0)-\text{Pr}(T\leq t|x_1=0, x_2=1)+\text{Pr}(T\leq t|x_1=0, x_2=0)}{\text{Pr}(T\leq t|x_1=0, x_2=0)}\\ &= -\frac{S(t|x_1=1, x_2=1)-S(t|x_1=1, x_2=0)-S(t|x_1=0, x_2=1)+S(t|x_1=0, x_2=0)}{1-S(t|x_1=0, x_2=0)} \end{align*} \end{footnotesize} where $S(t|x_1,x_2)$ is the survival function. As an empirical example, we can use the \code{brcancer} dataset with the randomised hormonal therapy (variable \code{hormon}, encoded 0 and 1) and stage (1 vs 2--3; variable \code{x4.23} encoded \code{TRUE} and \code{FALSE}). The research question is whether there is a more than additive interaction between therapy and stage. <>= brcancer2 <- transform(brcancer, x4.23=x4 %in% 2:3) fit1 <- stpm2(Surv(rectime,censrec==1)~hormon*x4.23,data=brcancer2,df=3) newd <- data.frame(hormon=0,x4.23=FALSE) RERI <- function(object, newdata, var1, val1=1, var2, val2=1) { exp1 <- function(data) {data[[var1]] <- val1; data} exp2 <- function(data) {data[[var2]] <- val2; data} s11 <- predict(object, newdata=exp1(exp2(newdata)), type="surv") s10 <- predict(object, newdata=exp1(newdata), type="surv") s01 <- predict(object, newdata=exp2(newdata), type="surv") s00 <- predict(object, newdata, type="surv") -(s11-s10-s01+s00)/(1-s00) } times <- seq(0,2500,length=301)[-1] reri <- predictnl(fit1,fun=RERI,newdata=transform(newd,rectime=times), var1="hormon",var2="x4.23",val2=TRUE) with(reri, matplot(times,fit+cbind(0,-1.96*se.fit,+1.96*se.fit), type="l",lty=c(1,2,2),col=1, xlab="Time since diagnosis", ylab="RERI")) abline(h=0,lty=3) @ \end{document} rstpm2/vignettes/aft-weibull-los-20190816.pdf0000644000176200001440000002567015040661603020135 0ustar liggesusers%PDF-1.4 %âãÏÓ\r 1 0 obj << /CreationDate (D:20190903102446) /ModDate (D:20190903102446) /Title (R Graphics Output) /Producer (R 3.6.0) /Creator (R) >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 7 0 obj << /Type /Page /Parent 3 0 R /Contents 8 0 R /Resources 4 0 R >> endobj 8 0 obj << /Length 7252 /Filter /FlateDecode >> stream xœÅËÏ%·qÅ÷óWÜ¥´ÈM7›ÍÇVÎÓ@$3@†‚3vlŒìÄ2ä¿uŠçPóøf?¼:ïüLÉðÝ«×fn';Ïež¸Ìçu u‹îÇD: µúvƒÖÆÇßG¶Ë„W ËÝú@k$¹}*æ”vëÂÄ; ,qb=ÛÁ­ôS´X†$˜šµ”g<'¶¯Âûn©°»ï8SawŸ0³ƒ3õù‰2Üfv°¨ûEÝ/p~s…ûÀq÷ç:ÜVK} ùî7¬l=åîWK}°Zê[xåu‘5Àý‰—¸_/q¿^â~pxT£¸_£Üý:S_k¸1Nwá¸û¹_MÙúÇÝ_XÙ:SŸÕL}Ž3õŠûEÝ¯Òøç‰qô}Ãó°ÜG7{û) 3÷€Î•Bt320W±·$x*s$Î#¢#Øù¢Ä¢3ãoY2Í)ÍyÞ3Ä#Ζ(‰¯Í>âál¹’8nöÖÕë`K—Ä#ÄEì–1‰G<ˆGKûˆYÛGÌÚ>bÖö[>½”¥}Ä‚þb\Ñ_œ­¿8K>½ôgÉ÷¡ùã>5%wÐxÜAâñz´]¡ÍmÛÎŽèIxÊCO²Éô¤…cRe3NÓ“0[…ždÓSèI°Ú¤ V›T™z’Y¡'Ù$z’]ô¤…cN¹pŒ+¦'Ù5COZhSꉗL©¡'á«LOšž´0Qp 'oqzÜ7= VÓ“fNEzÒBT¦ÊU ¨L•Ëô¤e9­ªœf“*HS¦'A¹±IÕÂá¾)UГL‰„ž´°»%Òô$Âî>awßqŽ c¤ož“*·ÎAa¬t°éIÀb*°»ïŸzR›SŒ†˜º0©µ»ï8'U„‰­EÝ/"¦BOÚ¤j¡ÈiUÄTèI Ù}Ó“p^èI°šž„Ïšž4=iaRkeë%wz’]3ô$S× 'Y#„ž4=É0ô¤eåÆ= ršéI ENËèûÀá>΢&BOZÈj"ô$X-õÁj©Ï¬Ð“²š= xÂýá¯éIde5±xê+¤'‘Õúþü¬¥>X]J‡µRpLO"äÌoz’£§¾‘ ‹¦¾â©oZ=õ-õMÌPÇsÁô$Bq¿ÈÝ7=ɯÊR¬UÝ·Ô‡ƒ«¸=i!»= xJ懞dAOZx‘mz’[MJ‡uΈȚÉAÓ“Üá>|¦'áYfzkz’[“<øLO"d-Ùô$BÖ’MOòË(p(îW¸ŒjÍä ëIדÈ^Ä~Jÿ‡žÄ\ÅÐNÖ“˜«ØçüžCOZ¬²:ô$fAObæÎ= J4ô$æ¸Ù‹ØU_‡žÄ<âa:)ô$ætòñ–ýúæügŧJÇ€žäþ™žÄvAObŽ›=‹]³#ô$æù|:6„žÄ,íãÔ = zÒâ9ÿaæ< =i}ßœÿ°}ÄÃY‡‰Ð“˜³Ø5]BOZç+Ú_LOZþ×-š3¡'1ó3zÒâ9ÿaN™?4!hûš;¡'1K1=ÉÛ«éIÌÖ_ìøˆþb|k ·öÓ“O=‰Yú‹éI‹§žÄ<âá\d] zÛûüxq••9èIëóUãaz3¯ÎAOZ<õ$æbɦ'1§S™é 'ùz€éI‹£¬Ô@ObÎ/Ó“˜%¦'­Ï']¯0=‰YÖ+ 'ÙúŽëIļdçzô÷kÓç¯MŸ‡žDœhUÏõ$èóГˆ³ØO]¯ˆ¾véœÅ®«—®'ù÷™žälz±¬WÄK×+ 'KëzqÜìEì§纞D\)?¸žDÌ­Àõ$g›ÿsCp=‰˜cáz’³eBb‡ëIÎIÚƒëIÐ/ '9gé®'s£p=‰˜›…ëIÎu‹G•¢]ד_èIÄSG…®'¹>cz’sÒeדˆ ÇëÔ±¡ëIÄ•Ûô$biГœoô$g#ºžDÌÅõ$÷çz’Û˲ţhû85cºžD\Ù=‰Xô5èIΧêkᔃëIÄ×f—x@OB<¡'g±GÍГˆ%@O"–ü= íz1!\OòÏgmA‹Ü]O"¾6{{ÝâQ·xTô$Äz±´èIÄÒ> '9mГˆ¥}@OB{†žälù”øÚìYì·ê¯Ð“ˆE½t±Òõ$â"ö©'1Ëz…éI‹‹ê¯—N¯¡'-®º^az’sÜôyÓ“˜³Øµjzs»åSâX•‹Ø§žÄÌÅГO=‰™—± '-¾5¦'¹žlz’߸éó¦'-Ö±'ô$æÌzµéI̲ž‹®W˜žÄ,ú|¬2w=‰XÖ³îC׳ 'K< '!^ГŒ_ûѳͱ}â—lýøü™»Dí˱M4ôÙÖAÛDÍŽ}¢f_ûDÍîEíÚ(Š#°SG¬¢v„oµ#h«h—éx³çDÚ\ŽÂ›= ù€k´?`"Fö&~p»¨]3ö‹Ú%¯ý¢fdžQ³¯ £ˆ vŒ"*kÇ(ŽÀ–Q±¶Œâˆb{FqÚèŠ,äKDvm=Ól=²Ùí6õáŸ9p}ä±î!кz¡{3‘èÝ›‰ŸÜ:Ú¯um±è×^uÉ"V¼$æÆ…%å|è’V>¤, 3Äù”€ΒBò)»ìΤ4¢³,‰çKSH×}8%6–%ñ®ü¾¾(•3/áåKZÎq³ñ7!Î÷fg=»«à¼é®³žÿ‰?$tæüͧyHÖ™ãŽ(Kây_gÞ¿Ž[ž/yI¼s{’üÑ™ÛGgnáÈÒ>:sûè\Å^d+ggÞÉŽ*ù£3—tÎìïyȆÆÎq³óvæpZ>%Ž›½ˆ=ÈjigΧ¹D œžOyckg^gœCvb‰ÇyËpçk³s> §æÓÎÜ_:s Z8³<_:óó¥3OéÂY¤*±³ô—Æ<…é£6^FèÌãÎÒ_Â!S˜ÎÒ_Â)Ï[¹ óø#„ ÏÛμžÐ9‹‡§“9t.b5!j<­ñ·Æ#Ü[<’Lq;óx,„¼Å#oñÈRrÕ¨²Å£lñ¨[<êªñ¸¶|z2åï,ùô:eÊß™Çcy<Ú€[âqéø4\[>½.”\ÍöÜØJ®Œ£ö—+Êø£sæ|{mùôºåyÛ¹Dæ-Ÿ^[>½’”\…+K IgɧזO¯"%$ùy®Šç­ù[¥­3— …xh<âüáœÅîãSg.aí\ĦBÌ%yåù/)Éë,ñˆ—Æ#FGŒxËø£óµÙ5[>i‹GB´¿t Iì§ö—ûÔñG/µ{ñXgy¾ÜAãq_S"#–çË}IÉf¸#Ú‡3Ïç:׃ùFûp–xÜ[>½“>_'±ç-y‹GÞâQDBíÌjç,ö:ãA,íã®Ú>Ò¡í#mù4mù4mù´—álvii˧¥}¤-Ÿ¦m|š.GŠ5)j<Ò­ñH·Æ#ÝÚ>RÒö‘t¾ßYÚGÊ[<ò¼Å£lñ((ɳïÛòiªú|IUŸ/ù蜰ô—|hɧö—¬óýÎ49h3IÇ ®k‘½òÒt-â´é^•âîºqû%÷Õu-bÑ-²Ž\×"æyt-fyuˆéZËžtžnºseÆt-fÑ-L×rÁt­u|QÇt­õù©k­ÏW}5„éZÌ‘·ª›®µìsÜÀ7{á­ê¦k1ß›½ò« kµö ºq»éZÄ#íþOÝgŽ×céZyTþ,]kñ70ÇÍ>â1Vt–®Õ»E},]‹¹Çcñœ‡1ß›½Ç£Kã3sÖÒ]N¥k1÷xøñ¦kõn\¤kázM×Zö©k1÷x,žã?ŸéZÌ=ëü¶C7ûˆ‡sD<ì|QãaºÖâ9cíÃý›ã†ÅS×bîñXçË[<ò9[×;Ç Ìq³k<êªíÃt-\t-´7èZh¿ÐµÏ|Šþ]‹™û t-æÑ>œ/y• t-ô'èZëø™O™ãfÏ•¿Ïò)ñÈ~¼ÍÜ-ŸúñI^¥]kqÞâ‘åÕе[>õ㋼ZºÖ:¾Ê«C k9›®ÅéUеŸˆ‡sÜìEìñ(¬k1W±_ˆ‡³ÄÃt­u½Q^¥]kñ-¯R®ÅœÅß$¯Ú®å÷×t­Å¶N@̯ڮµ¾¿hû0]‹í['ðëµu{~A×r6]‹™_Å]‹ù¢uèZ‹ƒ¼ª ºÖú|À«ºÌnëÄü¼…®åþ˜®µì3Ÿ2W±Ï|Ê̯ꂮµxÎØ½š º³Æ#oñ([eÖxÔ-¯.s.l7]‹™×‘ k-žó0f‰‡éZ‹ƒÆÃt­Å—¬#A×bÎbˆÇŒŸéZßA×ZìãSgŸB×ZºWR]ºq»ÍÈE‡®å\d+¡ëZ®‹ù<Ìu¬ÿ] ×gº–ë~q['€®…ë¹®e:’ÎÃH×2v]ËùÚì2/]º–³ÌK_ªk˼º±ÌK¡k9¿P×rf['€®å¼­ÜÛ:t-çmàÞÖ  k9_(ýšë~еˆyk¶ëZþùmºéVéZÎIÛt-ç¬íºñ{u-¿>_'0Š”Jº®E¬ñØÖ ¾–®åß÷]Ëu™/Ôµpýеàt-b‰t-b.u]Ë9Ié¨ëZÄ\:êºqÚì\:꺖ǫhIZÇ⺱ôèZÄÒ_ k9ŸR*麱´èZÄÒ_ k9_R*麱äèZŸm¥u]k´#Òµ  Aׂî]Ëu¨CÖ]×"Öú¤s«Oú€®åä].ŸQ¯eºÙ¥¯¨€®ÝºJ²Q¯ålëaþymç^¯åÇ'ÝR€z-?_’7ä{½–_ÖWT ^˹ȋ¨^«°®µìU¶!{½õZÄüj7¯×r>¡{NÿP¯E,ñ0]‹ùÞìÓµ¼dßt-fÙR`º6B×Z|ËÆT¯×"æ_ðz-ÿ~7óöLèZËžuKéZ‹‹¼ô ºÖªŸ›ºÖ²WÙ¡ ]‹íÒ>L×b–-'¦kùõš®ÅÌ[u¡k1ÇÍλu¡k1ó~]èZËe˪×kù÷GÝ¢…z-÷Çë füê-ϯ×"–þR½¾ÀYêQ¯åñ,º% õZÄ’?jÕþ‚z-bn^¯E|ovÞrâõZļåÄ뵜ƒ´¯×r¾$x½1oä÷z-¿¾(ýºÖâ[ú‹×kó–5¯×òó%É^¯åÇç-y‹GÞâQä¥^¯å\e‹–×kó-¯×"Ž›·4z½qÜì3hû@½âgºút­e×|êõZÎ[ÖªÔkÁ_Ôk¡= ^‹Xã‘¶x¤-i‹G–þâõZþýY¶hy½±ôÔk9WÙâéõZÄÒ>P¯E,ýõZÄ×f—þ‚z-·g£^Ëù’ñ‡×kË8õZÄ2ÎF½–ó-ã¯×"Öx¤-I¶{½ÚêµÐQ¯å\äùâõZÄYìUž/^¯E\Ønºž?^¯…ïC½–³ÍÈù-£^¯…ëG½1o÷z-âk³ó–F¯×"–|Šz-ç-Ÿ^[>…®åœäy뺖û—¶xä-y‹G–×®º®E¬ñ¨[<ꛇ¡káû káþB×r>µ}@×"–öz-b‰t-·_Óµ¼}™®µxæSf~qt-æk³g±'y1t-¼Äº~¬ ºÖ²gA×Zö©k1W¨WîO¦k1k<ªÆÃt-æ$öSã] ñ‡®åìãSgiеœM×"–ö]ËyêZëz¢¼RºÖâ[ãaº³õ—ÂõZËž¶xä-YÛ‡éZ‹g>õûeºÛ3·Óµ˜¥}˜®ålº–¿éZÌ#h¦k1wÝ¢O ãÑ>œg>eNbŸù”yă8‹}æSæâ,ö©k1xx8O]‹yÄ£]v1ñpžù”9möç™O™“Øg>eñ Îl7]‹yăxÄÃyêZ~ÿL×b¶üaÐ>œï[YÚ‡éZÞ~L×òöfºÖ²[>5~½ýì«mPÄŽÜ–Ü2vô¾è Úö[îóÁ×oÃ~àó¿~õÝ›ö¹óè…×ßñ«·ÓîÁãͯÕÁvüاð×£?Ù¯ûñæ‡Ç7ÿþîûßþþÛǛ߽úë7_Ñ·móó'¾îÓG}"Vÿ‚/ –M8(ZïþðŽÕ×òî¥?‰ì;½û@³_éúûÓ4þÉïÏŸ‡mtûÏÃÎ-·ôë°fåߊ¥‡5+ÿT,ÿ6¬™å§bù§aaç_Š¥nÕïÝçkܨõ÷“·«‡j»i=;ö›uàVõïýØ{^JôÁû¥¬#Á¯ž/>åx}ËÁ}ñIû›z«ô†ƒÚäÿ^ûÁNqÜEÞ8ÎÅaç}ã¼OÜì²mœ·‰ÃλÆy—8ì¼iü+¶¢³¿¸ðú’f4ôÊãKÚQ˜/'ú’†æ{B¾¤!ç÷ùE ékźôŠÅ6mkÝo„ú™_Þ ÆgûK¶Ï–—ß©ñÙñ ­‚æ‰ÇûR¬´vþ™.c¥Ê>ü™gîåó^·ÿ»ß²?«Ï[—ZðO¢÷6­x¥ÿ"ú²ú -äÑÉŽ×YÈ¢“/³ßC_öõ&^þ9tîÿŸ×f‹0þJ›íïHã»0y¼ª¦FùáqµÜüîñúÿÔÓsdÍ—xúÞý)/ò4ÌU~÷tòÿ±§Õ*Y?íè{ ^äè|‘ärt2;úæ}éÿê¯ì‰!õÇÀH ÷öûwú·oÛ èñÍ4 |¥s·tç#óïß½ûýÛü؈á+óËPýœõöûîíçQäŸWÿcoh{endstream endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /MediaBox [0 0 360 252] >> endobj 4 0 obj << /ProcSet [/PDF /Text] /Font <> /ExtGState << >> /ColorSpace << /sRGB 5 0 R >> >> endobj 5 0 obj [/ICCBased 6 0 R] endobj 6 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óûendstream endobj 9 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus 96/quoteleft 144/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron /space] >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 9 0 R >> endobj xref 0 11 0000000000 65535 f 0000000021 00000 n 0000000163 00000 n 0000007616 00000 n 0000007699 00000 n 0000007811 00000 n 0000007844 00000 n 0000000212 00000 n 0000000292 00000 n 0000010539 00000 n 0000010796 00000 n trailer << /Size 11 /Info 1 0 R /Root 2 0 R >> startxref 10893 %%EOF rstpm2/vignettes/Introduction.Rnw0000644000176200001440000006404115053637733016703 0ustar liggesusers%\VignetteIndexEntry{Introduction to the rstpm2 Package} %\VignetteDepends{rstpm2} %\VignetteKeyword{survival, spline} %\VignettePackage{rstpm2} %!\SweaveUTF8 \documentclass[nojss]{jss} \usepackage{amsmath,amsfonts,enumitem,fancyvrb,hyperref} \usepackage[utf8]{inputenc} \VerbatimFootnotes \usepackage[margin=2.6cm]{geometry} % wide margins \usepackage{wasysym} \usepackage{tablefootnote} \title{Introduction to the \pkg{rstpm2} package} \author{Mark~Clements\\Karolinska Institutet} \Plainauthor{Mark~Clements} \Plaintitle{Introduction to the rstpm2 package} \Abstract{ This vignette outlines the methods and provides some examples for generalised survival models as implemented in the \proglang{R} \pkg{rstpm2} package. } \Keywords{survival, splines} \Plainkeywords{survival, splines} \Address{Mark~Clements\\ Department of Medical Epidemiology and Biostatistics\\ Karolinska Institutet\\ Email: \email{mark.clements@ki.se} } \begin{document} \section{Background and theory} \emph{Generalised survival models} provide a flexible and general approach to modelling survival or time-to-event data. The survival function $S(t|x)$ to time $t$ for covariates $x$ is defined in terms of a inverse link function $G$ and a linear prediction $\eta(t,x)$, such that \begin{align*} S(t|x;\,\theta) &= G(\eta(t,x;\,\theta)) \end{align*} \noindent where $\eta$ is a function of both time $t$ and covariates $x$, with regression parameters $\theta$. We can calculate the hazard from this function, where \begin{align*} h(t|x;\,\theta) &= \frac{d}{dt} \left(-\log(S(t|x;\,\theta))\right) \\ &= \frac{-G'(\eta(t,x;\,\theta))}{G(\eta(t,x;\,\theta))}\frac{\partial \eta(t,x;\,\theta)}{\partial t} \end{align*} We model using a linear predictor $\eta(t,x;\,\theta)=X(t,x)\theta$ for a design matrix $X(t,x)$. The linear predictor can be constructed in a flexible manner, with the main constraint being that the time effects be smooth and twice differentiable. We calculate the derivative for the linear predictor using finite differences, such that \begin{align*} \frac{\partial \eta(t,x;\,\theta)}{\partial t} &= \frac{\partial X(t,x)\theta}{\partial t} = \frac{X(t+\epsilon,x)-X(t-\epsilon,x)}{2\epsilon}\theta = X_D(t,x)\theta \end{align*} for a derivative design matrix $X_D(t,x)$. This formulation allows for considerable flexibility in the construction of the linear predictor, with possible interactions between time and covariates. The default smoother for time using natural splines for log(time), which is the flexible parametric survival model developed by Royston and Parmar (2003) and implemented by the Stata command \verb+stpm2+~\footnote{As a technical aside, the Stata implementation uses natural splines using a truncated power basis with orthogonalisation, while the \verb+ns()+ function in \verb+R+ uses a matrix projection of B-splines. Note that we have implemented an extended \verb+nsx()+ function for natural splines that includes cure splines, centering, and a compatibility argument to use Stata \verb+stpm2+'s unusual specification of quantiles.} \begin{table}[!ht] \centering \begin{tabular}[!ht]{llll} Link description & Inverse link function $G(\eta(t,x;\,\theta))$ & Interpretation & \verb+link.type+ \\ \hline log$-$log & $\exp(-\exp(\eta(t,x;\,\theta)))$ & Proportional hazards & \verb+"PH"+\\ logit & $\text{expit}(-\eta(t,x;\,\theta))$ & Proportional odds & \verb+"PO"+ \\ probit & $\Phi(-\eta(t,x;\,\theta))$ & Probit & \verb+"probit"+ \\ log & $\exp(-\eta(t,x;\,\theta))$ & Additive hazards & \verb+"AH"+ \\ Aranda-Ordaz & $\exp(-\log(\psi*\exp(\eta(t,x;\,\theta))+1)/\psi)$ & Aranda-Ordaz & \verb+"AO"+ \end{tabular} \caption{Implemented link functions} \label{tab:links} \end{table} The models are estimated using maximum likelihood estimation (MLE) for fully parametric models, penalised MLE for penalised smoothers, maximum marginal likelihood estimation (MMLE) for parametric models with clustered data, or penalised MMLE for penalised models with clustered data. The likelihoods include left truncation, right censoring and interval censoring. For clustered data, we include Gamma frailties and normal random effects. Details on these models are available from \url{https://doi.org/10.1177/0962280216664760} and \url{https://doi.org/10.1002/sim.7451}. <>= options(width=80,useFancyQuotes="UTF-8") library(rstpm2) @ \section{Syntax} The main functions for fitting the models are \verb+stpm2+ for parametric models, possibly with clustered data, and \verb+pstpm2+ for penalised models, possibly with clustered data. A subset of the syntax for \verb+stpm2+ is: \begin{Verbatim} stpm2(formula, data, smooth.formula = NULL, df = 3, tvc = NULL, link.type=c("PH","PO","probit","AH","AO"), theta.AO=0, bhazard = NULL, robust = FALSE, cluster = NULL, frailty = !is.null(cluster) & !robust, RandDist=c("Gamma","LogN"), ...) \end{Verbatim} The \verb+formula+ has a \verb+Surv+ object on the left-hand-side and a linear predictor on the right-hand-side that does \emph{not} include time (for \verb+pstpm2+, it also does not include penalised functions). The time effects can be specified in several ways: the most general is using \verb+smooth.formula+, where the right-hand-side of the formula specifies functions for time that are smooth with respect to time. This specification can include interactions between time and covariates. As an example, \verb!smooth.formula=~nsx(log(time),df=3)+x:nsx(log(time),df=2)! specifies a baseline natural spline smoother of the log of the variable \verb+time+ used in the \verb+Surv+ object with three degrees of freedom, with an interaction between a covariate \verb+x+ and a natural spline smoother of log(\verb+time+) with two degrees of freedom. Other specifications of time effects have equivalent formulations: for example, \verb+df=3+ is equivalent to \verb!smooth.formula=~nsx(log(time),df=3)! for the variable \verb+time+. Similarly, \verb+tvc=list(x=2)+ is equivalent to \verb!smooth.formula=~x:nsx(log(time),df=2)!. Moreover, for a log-linear interaction between a covariate and time, use \verb!smooth.formula=~x:log(time)! A current limitation of the implementation is that the dataset \verb+data+ needs to be specified. Type of link is specified with the \verb+link.type+ argument; this defaults to a log$-$log link for proportional hazards (see Table~\ref{tab:links}). For the Aranda-Ordaz link, the fixed value of the scale term $\psi$ is specified using the \verb+theta.AO+ argument. For relative survival, a vector for the baseline hazard can be specified using the \verb+bhazard+ argument. A vector for the clusters can be specified with the \verb+cluster+ argument. The calculation of robust standard errors can be specified with the \verb+robust=TRUE+ argument; if \verb+robust+ is false, then the model assumes a frailty or random effects model, with either a default Gamma frailty (\verb+RandDist="Gamma"+) or a normal random effect (\verb+RandDist="LogN"+, using notation from the \verb+frailtypack+ package). The default specification for the additive hazards (\verb+link.type=="AH"+) models follows that for the \verb+ahaz+ package on CRAN: for a model specified as \verb+stpm2(Surv(time,event)~x, data=data, link.type="AH")+ we assume natural splines for the baseline time effect and a constant hazard for a unit change in the covariate \verb+x+; an equivalent specification is \verb!stpm2(Surv(time,event)~1, data=data, link.type="AH", smooth.formula=~nsx(time,df=3)+x:time)! where there is default smoother for time and an interaction between linear x and linear time. The regression coefficient for \verb+x:time+ can be interpreted as the additive rate for a unit change in \verb+x+. The syntax for the fitting the penalised models with \verb+pstpm2+ is very similar. A subset of the arguments are: \begin{Verbatim} pstpm2(formula, data, smooth.formula = NULL, tvc = NULL, bhazard = NULL, sp=NULL, criterion=c("GCV","BIC"), link.type=c("PH","PO","probit","AH","AO"), theta.AO=0, robust=FALSE, frailty=!is.null(cluster) & !robust, cluster = NULL, RandDist=c("Gamma","LogN"), ...) \end{Verbatim} The penalised smoothers are specified using the \verb+s()+ function from the \verb+mgcv+ package within the \verb+smooth.formula+ argument; by default, not specifying \verb+smooth.formula+ will lead to \verb!smooth.formula=~s(log(time))! Interactions with time (both penalised and unpenalised) and penalised covariate effects should be specified using \verb+smooth.formula+. Note that the \verb+df+ argument is not included. By default, the smoothing parameter(s) are using the \verb+criterion+ argument; the smoothing parameters can also be fixed using the \verb+sp+ argument. The specifications for relative survival, link type, and clustered data follow that for the \verb+stpm2+ function. \subsection{Post-estimation} One of the strengths of these models is varied post-estimation. Most of the estimators are described in Tables~\ref{tab:condpostest} and \ref{tab:margpostest}. These estimators are typically calculated from the \verb+predict+ function or from \verb+plot+ function calls. All of these calls require that the \verb+newdata+ argument is specified (in contrast to prediction in the \verb+survival+ package, which defaults to the average of each covariate). For contrasts (e.g. survival differences, hazard ratios), the \verb+newdata+ argument is the ``unexposed'' group, while the exposed group is defined by either: (i) a unit change in a variable in \verb+newdata+ as defined by the \verb+var+ argument (e.g. \verb+var="x"+ for variable \verb+x+); or (ii) an \verb+exposed+ function that takes a data-frame and returns the ``exposed'' group; for example \begin{verbatim} exposed=function(data) transform(data, x=1) \end{verbatim} The latter mechanism is quite general and allows for standardised survival, standardised hazards, and attributable fractions under possibly counterfactual exposures. \begin{table}[!ht] \centering \begin{minipage}{\linewidth} \begin{tabular}[!ht]{lll} Description & Formulation\footnote{Notation: $x^*$ is a covariate pattern for the ``exposed'' group; $X^*$ is a set of possibly counterfactual covariates; $E_X(g(X))$ is the expectation or average of $g(X)$ across the set $X$; $X_0^*$ and $X_1^*$ are sets of possibly counterfactual covariates for the ``unexposed'' and ``exposed'' sets, respectively.} & \verb+type+ \\ \hline Conditional link & $\eta(t,x;\hat\theta)$ & \verb+"link"+ \\ Conditional survival & $S(t|x;\hat\theta) = G(\eta(t,x;\hat\theta))$ & \verb+"surv"+ \\ Conditional odds & $\text{Odds}(t|x;\hat\theta)=S(t|x;\hat\theta)/(1-S(t|x;\hat\theta))$ & \verb+"odds"+ \\ Conditional failure & $1-S(t|x;\hat\theta)$ & \verb+"fail"+ \\ Conditional cumulative hazard & $H(t|x;\hat\theta) = -\log G(\eta(t,x;\hat\theta))$ & \verb+"cumhaz"+ \\ Conditional density & $f(t|x;\hat\theta) = G'(\eta(t,x;\hat\theta))\frac{\partial \eta(t,x;\hat\theta)}{\partial t}$ & \verb+"density"+ \\ Conditional hazard & $h(t|x;\hat\theta) = \frac{G'(\eta(t,x;\hat\theta))}{G(\eta(t,x;\hat\theta))}\frac{\partial \eta(t,x;\hat\theta)}{\partial t}$ & \verb+"hazard"+ \\ Conditional log hazard & $\log h(t|x;\hat\theta)$ & \verb+"loghazard"+ \\ Conditional survival differences & $S(t|x^*;\hat\theta)-S(t|x;\hat\theta)$ & \verb+"survdiff"+ \\ Conditional hazard differences & $h(t|x^*;\hat\theta)-h(t|x;\hat\theta)$ & \verb+"hazdiff"+ \\ Conditional hazard ratios & $h(t|x^*;\hat\theta)/h(t|x;\hat\theta)$ & \verb+"hr"+ \\ Conditional odds ratios & $\text{Odds}(t|x^*;\hat\theta)/\text{Odds}(t|x;\hat\theta)$ & \verb+"or"+ \\ Restricted mean survival time & $\int_0^tS(u|x;\hat\theta)du$ & \verb+"rmst"+ \\ Standardised survival & $E_{X^*}S(t|X^*;\hat\theta)$ & \verb+"meansurv"+ \\ Standardised survival differences & $E_{X_1^*}S(t|X_1^*;\hat\theta)-E_{X_0^*}S(t|X_0^*;\hat\theta)$ & \verb+"meansurvdiff"+ \\ Standardised hazard & $h_{X^*}(t|X^*;\hat\theta) = \frac{E_{X^*}(S(t|X^*;\hat\theta)h(t|X^*;\hat\theta))}{E_{X^*}(S(t|X^*;\hat\theta))}$ & \verb+"meanhaz"+ \\ Standardised hazard ratio & $h_{X_1^*}(t|X_1^*;\hat\theta)/h_{X_0^*}(t|X_0^*\hat\theta)$ & \verb+"meanhr"+ \\ Attributable fraction & $\frac{E_{X^*}S(t|X^*;\hat\theta)--E_{X}S(t|X;\hat\theta)}{1-E_{X}S(t|X;\hat\theta)}$ & \verb+"af"+ \\ \end{tabular} \end{minipage} \caption{Types of conditional post-estimators} \label{tab:condpostest} \end{table} \begin{table}[!ht] \centering \begin{minipage}{\linewidth} \begin{tabular}[!ht]{lll} Description & Formulation\footnote{Notation: $Z$ is a random effect or frailty; $x^*$ is a covariate pattern for the ``exposed'' group; $X^*$ is a set of possibly counterfactual covariates; $E_X(g(X))$ is the expectation or average of $g(X)$ across the set $X$; $X_0^*$ and $X_1^*$ are sets of possibly counterfactual covariates for the ``unexposed'' and ``exposed'' sets, respectively.} & \verb+type+ \\ \hline Marginal survival & $S_M(t|x;\hat\theta) = E_ZG(\eta(t,x,Z;\hat\theta))$ & \verb+"margsurv"+ \\ Marginal hazard & $h_M(t|x;\hat\theta) = E_Z(h(t,x,Z;\hat\theta))$ & \verb+"marghaz"+ \\ Marginal survival differences & $S_M(t|x^*;\hat\theta)-S_M(t|x;\hat\theta)$ & \verb+"margsurvdiff"+ \\ Marginal hazard ratios & $h_M(t|x^*;\hat\theta)/h_M(t|x;\hat\theta)$ & \verb+"marghr"+ \\ Standardised marginal survival & $E_ZE_{X^*}S(t|X^*,Z;\hat\theta)$ & \verb+"meanmargsurv"+ \\ Standardised marginal survival differences & $E_ZE_{X^*}S(t|X^*,Z;\hat\theta)-E_ZE_{X}S(t|X,Z;\hat\theta)$ & \verb+"meansurvdiff"+ \\ Attributable fraction & $\frac{E_ZE_{X^*}S(t|X^*,Z;\hat\theta)-E_ZE_{X}S(t|X,Z;\hat\theta)}{1-E_ZE_{X}S(t|X,Z;\hat\theta)}$ & \verb+"af"+ \\ \end{tabular} \end{minipage} \caption{Types of post-estimators for clustered data} \label{tab:margpostest} \end{table} Standard errors for the post-estimators are calculated on a possibly transformed scale using the delta method. For the delta method, the partial derivatives of the post-estimators are calculated either directly or using finite differences. \begin{table} \centering \begin{minipage}{\textwidth} \begin{tabular}{lp{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}} Functionality & Uncorre-lated param. & Uncorre-lated penal. & Param. gamma frailty & Penal. gamma frailty & Param. normal random effects & Penal. normal random effects \\ \hline Multiple links & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ Right censoring & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ Left truncation & \XBox& \XBox& \XBox\footnote{Gradients not currently implemented.}& \XBox$^a$& \XBox$^a$& \XBox$^a$ \\ Interval censoring & \XBox& \XBox& \Square& \Square& \XBox& \XBox \\ Time-varying effects & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ Excess hazards & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ Conditional estimators\footnote{Estimators including survival, survival differences, hazards, hazard ratios, hazard differences, density, odds and odds ratios.} &\XBox &\XBox & \XBox& \XBox& \XBox& \XBox \\ Conditional standardisation\footnote{Standardised estimators include mean survival, mean survival differences, mean hazards and attributable fractions.} &\XBox &\XBox & \XBox& \XBox& \XBox& \XBox \\ Frailty/random effects variance & & & \XBox& \XBox& \XBox& \XBox \\ Marginal estimators\footnote{Marginal estimators include survival, survival differences, hazards, hazard ratios and hazard differences.} & & & \XBox& \XBox& \XBox& \XBox \\ Marginal standardisation\footnote{Marginal standardised estimators include mean survival, mean survival differences and attributable fractions.} & & & \XBox& \XBox& \Square& \Square \\ Random intercept & & &\XBox &\XBox & \XBox& \XBox \\ Random slope & & & & & \XBox& \XBox \\ Multiple random effects & & & & & \Square& \Square \\ \end{tabular} \end{minipage} \caption{Functionality for the different generalised survival models} \end{table} \section{Examples: Independent survival analysis} We begin with some simple proportional hazard models using the brcancer dataset. We can fit the models using very similar syntax to coxph, except that we need to specify the degrees of freedom for the baseline smoother. Typical values for df are 3-6. For this model the model parameters include an intercept term, time-invariant log-hazard ratios, and parameters for the baseline smoother. The default for the baseline smoother is to use the nsx function, which is a limited extension to the splines::ns function, with log of the time effect. <<>>= brcancer <- transform(brcancer, recyear=rectime / 365.24) fit <- stpm2(Surv(recyear,censrec==1)~hormon, data=brcancer, df=4) summary(fit) ## utility eform.coxph <- function(object) exp(cbind(coef(object),confint(object))) fit.cox <- coxph(Surv(recyear,censrec==1)~hormon, data=brcancer) rbind(cox=eform(fit.cox), eform(fit)[2,,drop=FALSE]) @ We see that the hazard ratios are very similar to the coxph model. The model fit can also be used to estimate a variety of parameters. For example, we can easily estimate survival and compare with the Kaplan-Meier curves: <>= plot(fit, newdata=data.frame(hormon=0), xlab="Time since diagnosis (years)") lines(fit, newdata=data.frame(hormon=1), lty=2) lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) legend("topright", c("PH hormon=0","PH hormon=1","KM hormon=0","KM hormon=1"), lty=1:2, col=c("black","black","blue","blue")) @ We can also calculate the hazards. <>= plot(fit,newdata=data.frame(hormon=1), type="hazard", xlab="Time since diagnosis (years)", ylim=c(0,0.3)) lines(fit, newdata=data.frame(hormon=0), col=2, lty=2, type="hazard") legend("topright", c("hormon=1","hormon=0"),lty=1:2,col=1:2,bty="n") @ Usefully, we can also estimate survival differences and hazard differences. We define the survival differences using a reference covariate pattern using the newdata argument, and then define an exposed function which takes the newdata and transforms for the 'exposed' covariate pattern. As an example: <>= plot(fit,newdata=data.frame(hormon=0), type="hdiff", exposed=function(data) transform(data, hormon=1), main="hormon=1 compared with hormon=0", xlab="Time since diagnosis (years)") @ <>= plot(fit,newdata=data.frame(hormon=0), type="sdiff", exposed=function(data) transform(data, hormon=1), main="hormon=1 compared with hormon=0", xlab="Time since diagnosis (years)") @ \section{Additive hazards} The additive hazards models takes the general form $H(t|x;\,\theta) = \eta(t,x;\,\theta)$. As a recent change, the default model specification for \verb!formula=Surv(t,e)~x! without specifying \verb+smooth.formula+ is to use $H(t|x;\,\theta) = B(t)\theta_B+ t(x^T\theta_x)$, where $B(t)$ is a natural spline design matrix with parameters $\theta_B$, and with $\theta_x$ as the parameters for $x$; the hazard is then $h(t|x;\,\theta) = B'(t)\theta_B+ x^T\theta_x$. The additive hazards have the attractive property that the effects are collapsible: adjusting for an uncorrelated covariate will not change the estimated conditional effect. These models have received some uptake within the causal inference field. This implementation is flexible, where the baseline (cumulative) hazard can be modelled using splines and we can model for both constant hazards and smooth effects over time. One possible issue with their interpretation is whether the rates will be approximately additive for different effects. One approach to conceptualise these models is to consider the effects as being competing risks and where we are adding competing risks together. For our example using the breast cancer dataset with the randomised assignment to hormonal therapy, we find that hazard for those on hormonal therapy was -0.047 per year (95\% confidence interval: -0.066, -0.024) compared with those not on hormonal therapy. <>= brcancer <- transform(brcancer, recyear=rectime / 365.24) fit <- stpm2(Surv(recyear,censrec==1)~hormon, data=brcancer, link.type="AH") summary(fit) confint(fit) plot(fit, newdata=data.frame(hormon=0), xlab="Time on study (years)") lines(fit, newdata=data.frame(hormon=1), lty=2) lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) legend("topright", c("AH hormon=0","AH hormon=1","KM hormon=0","KM hormon=1"), lty=1:2, col=c("black","black","blue","blue")) @ This can be modelled more flexibly using the \verb+smooth.formula+ argument. For example, we could model for \verb+sqrt(recyear)+ and include a natural spline smoother for the effect of \verb+hormon+: <>= fit <- stpm2(Surv(recyear,censrec==1)~1, data=brcancer, link.type="AH", smooth.formula=~ns(sqrt(recyear),df=3)+hormon:ns(recyear,df=3)) summary(fit) plot(fit, newdata=data.frame(hormon=0), xlab="Time on study (years)") suppressWarnings(lines(fit, newdata=data.frame(hormon=1), lty=2)) lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) legend("topright", c("AH hormon=0","AH hormon=1","KM hormon=0","KM hormon=1"), lty=1:2, col=c("black","black","blue","blue")) @ The square root transform seems to considerably improve the fit at earlier times. \section{Mean survival} This has a useful interpretation for causal inference. $E_Z(S(t|Z,X=1))-E_Z(S(t|Z,X=0))$ \begin{verbatim} fit <- stpm2(...) predict(fit,type="meansurv",newdata=data) \end{verbatim} \section{Cure models} For cure, we use the melanoma dataset used by Andersson and colleagues for cure models with Stata's stpm2 (see \url{http://www.pauldickman.com/survival/}). Initially, we merge the patient data with the all cause mortality rates. <>= options(width=80,useFancyQuotes="UTF-8") library(rstpm2) @ <<>>= popmort2 <- transform(rstpm2::popmort,exitage=age,exityear=year,age=NULL,year=NULL) colon2 <- within(rstpm2::colon, { status <- ifelse(surv_mm>120.5,1,status) tm <- pmin(surv_mm,120.5)/12 exit <- dx+tm*365.25 sex <- as.numeric(sex) exitage <- pmin(floor(age+tm),99) exityear <- floor(yydx+tm) ##year8594 <- (year8594=="Diagnosed 85-94") }) colon2 <- merge(colon2,popmort2) @ For comparisons, we fit the relative survival model without and with cure. %% <>= <<>>= fit0 <- stpm2(Surv(tm,status %in% 2:3)~I(year8594=="Diagnosed 85-94"), data=colon2, bhazard=colon2$rate, df=5) @ <<>>= summary(fit <- stpm2(Surv(tm,status %in% 2:3)~I(year8594=="Diagnosed 85-94"), data=colon2, bhazard=colon2$rate, df=5,cure=TRUE)) predict(fit,head(colon2),se.fit=TRUE) @ The estimate for the year parameter from the model without cure is within three significant figures with that in Stata. For the predictions, the Stata model gives: \begin{verbatim} +---------------------------------+ | surv surv_lci surv_uci | |---------------------------------| 1. | .86108264 .8542898 .8675839 | 2. | .79346526 .7850106 .8016309 | 3. | .69674037 .6863196 .7068927 | 4. | .86108264 .8542898 .8675839 | 5. | .82212425 .8143227 .8296332 | |---------------------------------| 6. | .86108264 .8542898 .8675839 | +---------------------------------+ \end{verbatim} We can estimate the proportion of failures prior to the last event time: <<>>= newdata.eof <- data.frame(year8594 = unique(colon2$year8594), tm=10) predict(fit0, newdata.eof, type="fail", se.fit=TRUE) predict(fit, newdata.eof, type="fail", se.fit=TRUE) predict(fit, newdata.eof, type="haz", se.fit=TRUE) @ We can plot the predicted survival estimates: \begin{center} <>= tms=seq(0,10,length=301)[-1] plot(fit0,newdata=data.frame(year8594 = "Diagnosed 85-94", tm=tms), ylim=0:1, xlab="Time since diagnosis (years)", ylab="Relative survival") plot(fit0,newdata=data.frame(year8594 = "Diagnosed 75-84",tm=tms), add=TRUE,line.col="red",rug=FALSE) ## warnings: Predicted hazards less than zero for cure plot(fit,newdata=data.frame(year8594 = "Diagnosed 85-94",tm=tms), add=TRUE,ci=FALSE,lty=2,rug=FALSE) plot(fit,newdata=data.frame(year8594="Diagnosed 75-84",tm=tms), add=TRUE,rug=FALSE,line.col="red",ci=FALSE,lty=2) legend("topright",c("85-94 without cure","75-84 without cure", "85-94 with cure","75-84 with cure"), col=c(1,2,1,2), lty=c(1,1,2,2), bty="n") @ \end{center} And the hazard curves: \begin{center} <>= plot(fit0,newdata=data.frame(year8594 = "Diagnosed 85-94", tm=tms), ylim=c(0,0.5), type="hazard", xlab="Time since diagnosis (years)",ylab="Excess hazard") plot(fit0,newdata=data.frame(year8594 = "Diagnosed 75-84", tm=tms), type="hazard", add=TRUE,line.col="red",rug=FALSE) plot(fit,newdata=data.frame(year8594 = "Diagnosed 85-94", tm=tms), type="hazard", add=TRUE,ci=FALSE,lty=2,rug=FALSE) plot(fit,newdata=data.frame(year8594="Diagnosed 75-84", tm=tms), type="hazard", add=TRUE,rug=FALSE,line.col="red",ci=FALSE,lty=2) legend("topright",c("85-94 without cure","75-84 without cure", "85-94 with cure","75-84 with cure"), col=c(1,2,1,2), lty=c(1,1,2,2), bty="n") @ \end{center} The current implementation does not provide a test for differences in cure. We can code this using the \code{predictnl} function: <<>>= newdata.eof <- data.frame(year8594 = unique(colon2$year8594), tm=10) test <- predictnl(fit, function(object,newdata=NULL) { lp1 <- predict(object, newdata.eof[1,], type="link") lp2 <- predict(object, newdata.eof[2,], type="link") lp1-lp2 }) with(test, c(fit=fit, se.fit=se.fit, statistic=fit/se.fit, p=2*pnorm(abs(fit/se.fit), lower.tail=FALSE))) @ \section{Potential limitations and next steps} \begin{itemize} \item TODO: investigate whether we can calculate $X_D(t,x)$ more accurately using the \verb+numDeriv+ package. \item TODO: Extend the generalised survival models to use multiple random effects. \item TODO: Extend the generalised survival models to use automatic differentiation. \end{itemize} \end{document} rstpm2/vignettes/SimpleGuide.Rnw0000644000176200001440000007674613551274545016447 0ustar liggesusers%\VignetteIndexEntry{\texttt{rstpm2}: a simple guide} %\VignetteDepends{rstpm2} %\VignetteKeyword{survival, spline} %\VignettePackage{rstpm2} %!\SweaveUTF8 \documentclass[nojss]{jss} \usepackage{amsmath,amsfonts,enumitem,fancyvrb,hyperref} \usepackage[utf8]{inputenc} \VerbatimFootnotes \usepackage[margin=2.6cm]{geometry} % wide margins \usepackage{wasysym} \usepackage{tablefootnote} \usepackage{bm} \title{\pkg{rstpm2}: a simple guide} \author{Mark~Clements\\Karolinska Institutet} \Plainauthor{Mark~Clements} \Plaintitle{\pkg{rstpm2}: a simple guide} \Abstract{ This vignette provides a simple guide to flexible parametric models provided by \pkg{rstpm2}. } \Keywords{survival, splines} \Plainkeywords{survival, splines} \Address{Mark~Clements\\ Department of Medical Epidemiology and Biostatistics\\ Karolinska Institutet\\ Email: \email{mark.clements@ki.se} } \begin{document} \section{Introduction} The \pkg{rstpm2} package supports \emph{flexible parametric survival models} to model \emph{time-to-event} data. These models are fully parametric for the survival function. These models are particularly useful for: \begin{itemize} \item Estimating predictions for hazards, hazard differences, hazard ratios, survival, survival differences and survival ratios, restricted mean survival \item Estimating marginal predictions, including standardised survival and standardised survival differences \item Modelling time-varying effects, including time-varying hazards ratios. \end{itemize} This guide is intended to provide an accessible guide to some of the models and predictions provided by flexible parametric survival models. This guide can then be followed by the other vignette, which provides a more complete mathematical presentation. For this guide, we describe the most common flexible parametric survival model, which is a \emph{proportional hazards} model. Let the survival function $S(t|\bm{x})=\text{Pr}(T>t|\bm{x})$ for random variable $T$ at time $t$ and covariates $\bm{x}=(x_j)$ be modelled by \begin{align*} S(t|\bm{x}) &= \exp\left(-\exp\left(s(\log(t);\bm\gamma)+\sum_j \beta_j x_j\right)\right) \end{align*} for some parametric smooth function $s(u;\bm\gamma)$, for parameters $\bm\gamma$ and $\bm\beta$, and for $j$ being an index over the covariates. For this model, we use a smooth function to model the baseline log cumulative hazard function and include a linear predictor to model the covariates. To see that this is a proportional hazards model, we can see that the cumulative hazard and hazard functions are, respectively, \begin{align*} H(t|\bm{x}) &= -\log(S(t|\bm{x})) = \exp\left(s(\log(t);\bm\gamma)+\sum_j \beta_j x_j\right) \\ h(t|\bm{x}) &= \frac{\text{d}}{\text{d}t} H(t|\bm{x}) = \exp\left(s(\log(t);\bm\gamma)+\sum_j \beta_j x_j\right)\times\frac{\text{d}\,s(\log(t);\bm\gamma)}{\text{d}t} \end{align*} Now, for two sets of covariates $\bm{x}_1=(x_{1j})$ and $\bm{x}_2=(x_{2j})$, we have the hazard ratio \begin{align*} \frac{h(t|\bm{x}_2)}{h(t|\bm{x}_1)} &= \frac{\exp(s(\log(t);\bm\gamma)+\sum_j \beta_j x_{2j})\times\frac{\text{d}s(\log(t);\bm\gamma)}{\text{d}t}}{\exp(s(\log(t);\bm\gamma)+\sum_j \beta_j x_{1j})\times\frac{\text{d}s(\log(t);\bm\gamma)}{\text{d}t}} \\ &= \exp\left(\sum_j\beta_j(x_{2j}-x_{1j})\right) \end{align*} If the covariates only vary by one for the $j$th covariate, such that $x_{2j}=x_{1j}+1$ and $x_{2j'}=x_{1j'}$ for $j'\neq j$, then the hazard ratio is equal to $\exp(\beta_j)$ for all $t$ and for all values of the other covariates. We can motivate this model as an extension of exponential (or Poisson) regression. If we assume that the rates are constant over time and proportional with respect to covariates, then we have an exponential distribution with a hazard $h(t|\bm{x})=\exp(\gamma_0+\sum_j \beta_j x_j)$ for log baseline hazard $\gamma_0$, with a survival function $S(t|\bm{x})=\exp(-\exp(\gamma_0+\log(t)+\sum_j \beta_j x_j))$. The flexible parametric survival models generalise the function $\gamma_0+\log(t)$ to some smooth function $s(\log(t);\bm\gamma)$. The default smoother provided by \code{rstpm2::stpm2} is a natural spline, such that \begin{align*} s(\log(t);\bm\gamma) &= \sum_{k=1}^K B_k(\log(t)) \gamma_k \end{align*} where $B_k(\log(t))$ is a natural spline basis with $K$ degrees of freedom. Natural splines have the property that the function is cubic between internal \emph{knots} (fixed points that default to quantiles of the event times) and linear outside of the knot boundaries, with continuous derivatives at the knots. Heuristically, splines provide a flexible functional form that looks ``nice''. The basis can be defined in several ways (e.g. using a truncated power basis as used in Stata), while we use the approach used by the \code{splines::ns} function, which uses a matrix projection of the second derivatives at the knot boundaries. We fit this model using \emph{maximum likelihood estimation} for right censored and left truncated data. Variance estimation assumes that the parameters are asymptotically normal, with variable for predictions calculated using the \emph{multivariate delta method}. % The default smoother for time using natural splines for log(time), which is the flexible parametric survival model developed by Royston and Parmar (2003) and implemented by the Stata command \verb+stpm2+~\footnote{As a technical aside, the Stata implementation uses natural splines using a truncated power basis with orthogonalisation, while the \verb+ns()+ function in \verb+R+ uses a matrix projection of B-splines. Note that we have implemented an extended \verb+nsx()+ function for natural splines that includes cure splines, centering, and a compatibility argument to use Stata \verb+stpm2+'s unusual specification of quantiles.} \section{An example} <>= options(width=80,useFancyQuotes="UTF-8") @ We begin with some simple proportional hazard models using the \code{brcancer} dataset. We first fit a Cox regression with a single indicator for whether an a breast cancer patient was randomised to hormonal treatment. From the output, we see that hormonal treatment is associated with improved survival (HR=0.69, 95\% CI: 0.54, 0.89). <<>>= library(survival) library(rstpm2) brcancer <- transform(brcancer, recyear=rectime / 365.24) fit.cox <- coxph(Surv(recyear,censrec==1)~hormon, data=brcancer) summary(fit.cox) @ We can fit a flexible parametric survival model with \code{rstpm2::stpm2} using very similar syntax, with an additional argument \code{df=4} to specify four degrees of freedom for the baseline smoother (typical values for the degrees of freedom are 2--6). From the output, the model parameters include an intercept term, time-invariant log-hazard ratios, and parameters for the baseline smoother. The hazard ratio for hormonal treatment is 0.69 (95\% CI: 0.56, 0.84), which is a similar point estimate and a more narrow confidence interval than Cox regression. <<>>= fit <- stpm2(Surv(recyear,censrec==1)~hormon, data=brcancer, df=4) summary(fit) eform(fit)[2,] @ The flexible parametric survival models can be used to estimate a variety of parameters. For example, we can easily estimate survival and compare with predictions with the non-parametric Kaplan-Meier curves. From the output, we note that\ldots <>= plot(fit, newdata=data.frame(hormon=0), xlab="Time since diagnosis (years)") lines(fit, newdata=data.frame(hormon=1), lty=2) lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) legend("topright", c("PH hormon=0","PH hormon=1","KM hormon=0","KM hormon=1"), lty=1:2, col=c("black","black","blue","blue")) @ We can also plot the hazards using \pkg{ggplot2}. This requires that we predict using \code{grid=TRUE} to get a time grid, with \code{full=TRUE} to include the covariates from \code{newdata}, and with \code{se.fit=TRUE} to get the confidence intervals. <>= library(ggplot2) predHormon <- predict(fit, newdata=data.frame(hormon=0:1), type="hazard", grid=TRUE, full=TRUE, se.fit=TRUE) predHormon <- transform(predHormon,Hormone=factor(hormon,labels=c("No","Yes"))) ggplot(predHormon, aes(x=recyear,y=Estimate,ymin=lower,ymax=upper,fill=Hormone)) + facet_grid(~Hormone) + xlab("Time since diagnosis (years)") + ylab("Hazard") + geom_ribbon() + geom_line() @ <>= ggplot(predHormon, aes(x=recyear,y=Estimate,ymin=lower,ymax=upper,fill=Hormone)) + xlab("Time since diagnosis (years)") + ylab("Hazard") + geom_ribbon(alpha=0.6) + geom_line() @ Usefully, we can also estimate survival differences and hazard differences. We define the survival differences using a reference covariate pattern using the newdata argument, and then define an exposed function which takes the newdata and transforms for the 'exposed' covariate pattern. As an example: <>= par(mfrow=1:2) plot(fit,newdata=data.frame(hormon=0), type="hdiff", exposed=function(data) transform(data, hormon=1), xlab="Time since diagnosis (years)") plot(fit,newdata=data.frame(hormon=0), type="sdiff", var="hormon", xlab="Time since diagnosis (years)") mtext("Effect of hormonal treatment", outer = TRUE, line=-3, cex=1.5, font=2) @ % \section{Syntax} % The main functions for fitting the models are \verb+stpm2+ for parametric models, possibly with clustered data, and \verb+pstpm2+ for penalised models, possibly with clustered data. A subset of the syntax for \verb+stpm2+ is: % \begin{Verbatim} % stpm2(formula, data, smooth.formula = NULL, % df = 3, tvc = NULL, % link.type=c("PH","PO","probit","AH","AO"), theta.AO=0, % bhazard = NULL, % robust = FALSE, cluster = NULL, frailty = !is.null(cluster) & !robust, % RandDist=c("Gamma","LogN"), % ...) % \end{Verbatim} % The \verb+formula+ has a \verb+Surv+ object on the left-hand-side and a linear predictor on the right-hand-side that does \emph{not} include time (for \verb+pstpm2+, it also does not include penalised functions). The time effects can be specified in several ways: the most general is using \verb+smooth.formula+, where the right-hand-side of the formula specifies functions for time that are smooth with respect to time. This specification can include interactions between time and covariates. As an example, \verb!smooth.formula=~nsx(log(time),df=3)+x:nsx(log(time),df=2)! specifies a baseline natural spline smoother of the log of the variable \verb+time+ used in the \verb+Surv+ object with three degrees of freedom, with an interaction between a covariate \verb+x+ and a natural spline smoother of log(\verb+time+) with two degrees of freedom. Other specifications of time effects have equivalent formulations: for example, \verb+df=3+ is equivalent to \verb!smooth.formula=~nsx(log(time),df=3)! for the variable \verb+time+. Similarly, \verb+tvc=list(x=2)+ is equivalent to \verb!smooth.formula=~x:nsx(log(time),df=2)!. Moreover, for a log-linear interaction between a covariate and time, use \verb!smooth.formula=~x:log(time)! % A current limitation of the implementation is that the dataset \verb+data+ needs to be specified. % Type of link is specified with the \verb+link.type+ argument; this defaults to a log$-$log link for proportional hazards (see Table~\ref{tab:links}). For the Aranda-Ordaz link, the fixed value of the scale term $\psi$ is specified using the \verb+theta.AO+ argument. For relative survival, a vector for the baseline hazard can be specified using the \verb+bhazard+ argument. A vector for the clusters can be specified with the \verb+cluster+ argument. The calculation of robust standard errors can be specified with the \verb+robust=TRUE+ argument; if \verb+robust+ is false, then the model assumes a frailty or random effects model, with either a default Gamma frailty (\verb+RandDist="Gamma"+) or a normal random effect (\verb+RandDist="LogN"+, using notation from the \verb+frailtypack+ package). % The default specification for the additive hazards (\verb+link.type=="AH"+) models follows that for the \verb+ahaz+ package on CRAN: for a model specified as % \verb+stpm2(Surv(time,event)~x, data=data, link.type="AH")+ % we assume natural splines for the baseline time effect and a constant hazard for a unit change in the covariate \verb+x+; an equivalent specification is % \verb!stpm2(Surv(time,event)~1, data=data, link.type="AH", smooth.formula=~nsx(time,df=3)+x:time)! % where there is default smoother for time and an interaction between linear x and linear time. The regression coefficient for \verb+x:time+ can be interpreted as the additive rate for a unit change in \verb+x+. % The syntax for the fitting the penalised models with \verb+pstpm2+ is very similar. A subset of the arguments are: % \begin{Verbatim} % pstpm2(formula, data, smooth.formula = NULL, % tvc = NULL, % bhazard = NULL, % sp=NULL, % criterion=c("GCV","BIC"), % link.type=c("PH","PO","probit","AH","AO"), theta.AO=0, % robust=FALSE, % frailty=!is.null(cluster) & !robust, cluster = NULL, RandDist=c("Gamma","LogN"), % ...) % \end{Verbatim} % The penalised smoothers are specified using the \verb+s()+ function from the \verb+mgcv+ package within the \verb+smooth.formula+ argument; by default, not specifying \verb+smooth.formula+ will lead to % \verb!smooth.formula=~s(log(time))! % Interactions with time (both penalised and unpenalised) and penalised covariate effects should be specified using \verb+smooth.formula+. Note that the \verb+df+ argument is not included. By default, the smoothing parameter(s) are using the \verb+criterion+ argument; the smoothing parameters can also be fixed using the \verb+sp+ argument. The specifications for relative survival, link type, and clustered data follow that for the \verb+stpm2+ function. % \subsection{Post-estimation} % One of the strengths of these models is varied post-estimation. Most of the estimators are described in Tables~\ref{tab:condpostest} and \ref{tab:margpostest}. These estimators are typically calculated from the \verb+predict+ function or from \verb+plot+ function calls. All of these calls require that the \verb+newdata+ argument is specified (in contrast to prediction in the \verb+survival+ package, which defaults to the average of each covariate). % For contrasts (e.g. survival differences, hazard ratios), the \verb+newdata+ argument is the ``unexposed'' group, while the exposed group is defined by either: (i) a unit change in a variable in \verb+newdata+ as defined by the \verb+var+ argument (e.g. \verb+var="x"+ for variable \verb+x+); or (ii) an \verb+exposed+ function that takes a data-frame and returns the ``exposed'' group (e.g. \verb+exposed=function(data) transform(data, x=1)+). The latter mechanism is quite general and allows for standardised survival, standardised hazards, and attributable fractions under possibly counterfactual exposures. % \begin{table}[!ht] % \centering % \begin{minipage}{\linewidth} % \begin{tabular}[!ht]{lll} % Description & Formulation\footnote{Notation: $x^*$ is a covariate pattern for the ``exposed'' group; $X^*$ is a set of possibly counterfactual covariates; $E_X(g(X))$ is the expectation or average of $g(X)$ across the set $X$; $X_0^*$ and $X_1^*$ are sets of possibly counterfactual covariates for the ``unexposed'' and ``exposed'' sets, respectively.} & \verb+type+ \\ \hline % Conditional link & $\eta(t,x;\hat\theta)$ & \verb+"link"+ \\ % Conditional survival & $S(t|x;\hat\theta) = G(\eta(t,x;\hat\theta))$ & \verb+"surv"+ \\ % Conditional odds & $\text{Odds}(t|x;\hat\theta)=S(t|x;\hat\theta)/(1-S(t|x;\hat\theta))$ & \verb+"odds"+ \\ % Conditional failure & $1-S(t|x;\hat\theta)$ & \verb+"fail"+ \\ % Conditional cumulative hazard & $H(t|x;\hat\theta) = -\log G(\eta(t,x;\hat\theta))$ & \verb+"cumhaz"+ \\ % Conditional density & $f(t|x;\hat\theta) = G'(\eta(t,x;\hat\theta))\frac{\partial \eta(t,x;\hat\theta)}{\partial t}$ & \verb+"density"+ \\ % Conditional hazard & $h(t|x;\hat\theta) = \frac{G'(\eta(t,x;\hat\theta))}{G(\eta(t,x;\hat\theta))}\frac{\partial \eta(t,x;\hat\theta)}{\partial t}$ & \verb+"hazard"+ \\ % Conditional log hazard & $\log h(t|x;\hat\theta)$ & \verb+"loghazard"+ \\ % Conditional survival differences & $S(t|x^*;\hat\theta)-S(t|x;\hat\theta)$ & \verb+"survdiff"+ \\ % Conditional hazard differences & $h(t|x^*;\hat\theta)-h(t|x;\hat\theta)$ & \verb+"hazdiff"+ \\ % Conditional hazard ratios & $h(t|x^*;\hat\theta)/h(t|x;\hat\theta)$ & \verb+"hr"+ \\ % Conditional odds ratios & $\text{Odds}(t|x^*;\hat\theta)/\text{Odds}(t|x;\hat\theta)$ & \verb+"or"+ \\ % Restricted mean survival time & $\int_0^tS(u|x;\hat\theta)du$ & \verb+"rmst"+ \\ % Standardised survival & $E_{X^*}S(t|X^*;\hat\theta)$ & \verb+"meansurv"+ \\ % Standardised survival differences & $E_{X_1^*}S(t|X_1^*;\hat\theta)-E_{X_0^*}S(t|X_0^*;\hat\theta)$ & \verb+"meansurvdiff"+ \\ % Standardised hazard & $h_{X^*}(t|X^*;\hat\theta) = \frac{E_{X^*}(S(t|X^*;\hat\theta)h(t|X^*;\hat\theta))}{E_{X^*}(S(t|X^*;\hat\theta))}$ & \verb+"meanhaz"+ \\ % Standardised hazard ratio & $h_{X_1^*}(t|X_1^*;\hat\theta)/h_{X_0^*}(t|X_0^*\hat\theta)$ & \verb+"meanhazdiff"+ \\ % Attributable fraction & $\frac{E_{X^*}S(t|X^*;\hat\theta)--E_{X}S(t|X;\hat\theta)}{1-E_{X}S(t|X;\hat\theta)}$ & \verb+"af"+ \\ % \end{tabular} % \end{minipage} % \caption{Types of conditional post-estimators} % \label{tab:condpostest} % \end{table} % \begin{table}[!ht] % \centering % \begin{minipage}{\linewidth} % \begin{tabular}[!ht]{lll} % Description & Formulation\footnote{Notation: $Z$ is a random effect or frailty; $x^*$ is a covariate pattern for the ``exposed'' group; $X^*$ is a set of possibly counterfactual covariates; $E_X(g(X))$ is the expectation or average of $g(X)$ across the set $X$; $X_0^*$ and $X_1^*$ are sets of possibly counterfactual covariates for the ``unexposed'' and ``exposed'' sets, respectively.} & \verb+type+ \\ \hline % Marginal survival & $S_M(t|x;\hat\theta) = E_ZG(\eta(t,x,Z;\hat\theta))$ & \verb+"margsurv"+ \\ % Marginal hazard & $h_M(t|x;\hat\theta) = E_Z(h(t,x,Z;\hat\theta))$ & \verb+"marghaz"+ \\ % Marginal survival differences & $S_M(t|x^*;\hat\theta)-S_M(t|x;\hat\theta)$ & \verb+"margsurvdiff"+ \\ % Marginal hazard ratios & $h_M(t|x^*;\hat\theta)/h_M(t|x;\hat\theta)$ & \verb+"marghr"+ \\ % Standardised marginal survival & $E_ZE_{X^*}S(t|X^*,Z;\hat\theta)$ & \verb+"meanmargsurv"+ \\ % Standardised marginal survival differences & $E_ZE_{X^*}S(t|X^*,Z;\hat\theta)-E_ZE_{X}S(t|X,Z;\hat\theta)$ & \verb+"meansurvdiff"+ \\ % Attributable fraction & $\frac{E_ZE_{X^*}S(t|X^*,Z;\hat\theta)-E_ZE_{X}S(t|X,Z;\hat\theta)}{1-E_ZE_{X}S(t|X,Z;\hat\theta)}$ & \verb+"af"+ \\ % \end{tabular} % \end{minipage} % \caption{Types of post-estimators for clustered data} % \label{tab:margpostest} % \end{table} % Standard errors for the post-estimators are calculated on a possibly transformed scale using the delta method. For the delta method, the partial derivatives of the post-estimators are calculated either directly or using finite differences. % \begin{table} % \centering % \begin{minipage}{\textwidth} % \begin{tabular}{lp{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}} % Functionality & Uncorre-lated param. & Uncorre-lated penal. & Param. gamma frailty & Penal. gamma frailty & Param. normal random effects & Penal. normal random effects \\ \hline % Multiple links & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ % Right censoring & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ % Left truncation & \XBox& \XBox& \XBox\footnote{Gradients not currently implemented.}& \XBox$^a$& \XBox$^a$& \XBox$^a$ \\ % Interval censoring & \XBox& \XBox& \Square& \Square& \XBox& \XBox \\ % Time-varying effects & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ % Excess hazards & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ % Conditional estimators\footnote{Estimators including survival, survival differences, hazards, hazard ratios, hazard differences, density, odds and odds ratios.} &\XBox &\XBox & \XBox& \XBox& \XBox& \XBox \\ % Conditional standardisation\footnote{Standardised estimators include mean survival, mean survival differences, mean hazards and attributable fractions.} &\XBox &\XBox & \XBox& \XBox& \XBox& \XBox \\ % Frailty/random effects variance & & & \XBox& \XBox& \XBox& \XBox \\ % Marginal estimators\footnote{Marginal estimators include survival, survival differences, hazards, hazard ratios and hazard differences.} & & & \XBox& \XBox& \XBox& \XBox \\ % Marginal standardisation\footnote{Marginal standardised estimators include mean survival, mean survival differences and attributable fractions.} & & & \XBox& \XBox& \Square& \Square \\ % Random intercept & & &\XBox &\XBox & \XBox& \XBox \\ % Random slope & & & & & \XBox& \XBox \\ % Multiple random effects & & & & & \Square& \Square \\ % \end{tabular} % \end{minipage} % \caption{Functionality for the different generalised survival models} % \end{table} % \section{Examples: Independent survival analysis} % We begin with some simple proportional hazard models using the % brcancer dataset. We can fit the models using very similar syntax to % coxph, except that we need to specify the degrees of freedom for the % baseline smoother. Typical values for df are 3-6. For this model the % model parameters include an intercept term, time-invariant log-hazard % ratios, and parameters for the baseline smoother. The default for the % baseline smoother is to use the nsx function, which is a limited % extension to the splines::ns function, with log of the time effect. % <<>>= % brcancer <- transform(brcancer, recyear=rectime / 365.24) % fit <- stpm2(Surv(recyear,censrec==1)~hormon, data=brcancer, df=4) % summary(fit) % ## utility % eform.coxph <- function(object) exp(cbind(coef(object),confint(object))) % fit.cox <- coxph(Surv(recyear,censrec==1)~hormon, data=brcancer) % rbind(cox=eform(fit.cox), % eform(fit)[2,,drop=FALSE]) % @ % We see that the hazard ratios are very similar to the coxph model. The % model fit can also be used to estimate a variety of parameters. For % example, we can easily estimate survival and compare with the % Kaplan-Meier curves: % <>= % plot(fit, newdata=data.frame(hormon=0), xlab="Time since diagnosis (years)") % lines(fit, newdata=data.frame(hormon=1), lty=2) % lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) % legend("topright", c("PH hormon=0","PH hormon=1","KM hormon=0","KM hormon=1"), % lty=1:2, col=c("black","black","blue","blue")) % @ % We can also calculate the hazards. % <>= % plot(fit,newdata=data.frame(hormon=1), type="hazard", % xlab="Time since diagnosis (years)", ylim=c(0,0.3)) % lines(fit, newdata=data.frame(hormon=0), col=2, lty=2, type="hazard") % legend("topright", c("hormon=1","hormon=0"),lty=1:2,col=1:2,bty="n") % @ % Usefully, we can also estimate survival differences and hazard % differences. We define the survival differences using a reference % covariate pattern using the newdata argument, and then define an % exposed function which takes the newdata and transforms for the % 'exposed' covariate pattern. As an example: % <>= % plot(fit,newdata=data.frame(hormon=0), type="hdiff", % exposed=function(data) transform(data, hormon=1), % main="hormon=1 compared with hormon=0", % xlab="Time since diagnosis (years)") % @ % <>= % plot(fit,newdata=data.frame(hormon=0), type="sdiff", % exposed=function(data) transform(data, hormon=1), % main="hormon=1 compared with hormon=0", % xlab="Time since diagnosis (years)") % @ % \section{Additive hazards} % The additive hazards models takes the general form $H(t|x;\,\theta) = \eta(t,x;\,\theta)$. As a recent change, the default model specification for \verb!formula=Surv(t,e)~x! without specifying \verb+smooth.formula+ is to use $H(t|x;\,\theta) = B(t)\theta_B+ t(x^T\theta_x)$, where $B(t)$ is a natural spline design matrix with parameters $\theta_B$, and with $\theta_x$ as the parameters for $x$; the hazard is then $h(t|x;\,\theta) = B'(t)\theta_B+ x^T\theta_x$. % The additive hazards have the attractive property that the effects are collapsible: adjusting for an uncorrelated covariate will not change the estimated conditional effect. These models have received some uptake within the causal inference field. This implementation is flexible, where the baseline (cumulative) hazard can be modelled using splines and we can model for both constant hazards and smooth effects over time. One possible issue with their interpretation is whether the rates will be approximately additive for different effects. One approach to conceptualise these models is to consider the effects as being competing risks and where we are adding competing risks together. % For our example using the breast cancer dataset with the randomised assignment to hormonal therapy, we find that hazard for those on hormonal therapy was -0.047 per year (95\% confidence interval: -0.066, -0.024) compared with those not on hormonal therapy. % <>= % brcancer <- transform(brcancer, recyear=rectime / 365.24) % fit <- stpm2(Surv(recyear,censrec==1)~hormon, data=brcancer, link.type="AH") % summary(fit) % confint(fit) % plot(fit, newdata=data.frame(hormon=0), xlab="Time on study (years)") % lines(fit, newdata=data.frame(hormon=1), lty=2) % lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) % legend("topright", c("AH hormon=0","AH hormon=1","KM hormon=0","KM hormon=1"), % lty=1:2, col=c("black","black","blue","blue")) % @ % This can be modelled more flexibly using the \verb+smooth.formula+ argument. For example, we could model for \verb+sqrt(recyear)+ and include a natural spline smoother for the effect of \verb+hormon+: % <>= % fit <- stpm2(Surv(recyear,censrec==1)~1, data=brcancer, link.type="AH", % smooth.formula=~ns(sqrt(recyear),df=3)+hormon:ns(recyear,df=3)) % summary(fit) % plot(fit, newdata=data.frame(hormon=0), xlab="Time on study (years)") % suppressWarnings(lines(fit, newdata=data.frame(hormon=1), lty=2)) % lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) % legend("topright", c("AH hormon=0","AH hormon=1","KM hormon=0","KM hormon=1"), % lty=1:2, col=c("black","black","blue","blue")) % @ % The square root transform seems to considerably improve the fit at earlier times. % \section{Mean survival} % This has a useful interpretation for causal inference. % $E_Z(S(t|Z,X=1))-E_Z(S(t|Z,X=0))$ % \begin{verbatim} % fit <- stpm2(...) % predict(fit,type="meansurv",newdata=data) % \end{verbatim} % \section{Cure models} % For cure, we use the melanoma dataset used by Andersson and colleagues % for cure models with Stata's stpm2 (see % \url{http://www.pauldickman.com/survival/}). % Initially, we merge the patient data with the all cause mortality rates. % <>= % options(width=80,useFancyQuotes="UTF-8") % library(rstpm2) % @ % <<>>= % popmort2 <- transform(rstpm2::popmort,exitage=age,exityear=year,age=NULL,year=NULL) % colon2 <- within(rstpm2::colon, { % status <- ifelse(surv_mm>120.5,1,status) % tm <- pmin(surv_mm,120.5)/12 % exit <- dx+tm*365.25 % sex <- as.numeric(sex) % exitage <- pmin(floor(age+tm),99) % exityear <- floor(yydx+tm) % ##year8594 <- (year8594=="Diagnosed 85-94") % }) % colon2 <- merge(colon2,popmort2) % @ % For comparisons, we fit the relative survival model without and with cure. % %% <>= % <<>>= % fit0 <- stpm2(Surv(tm,status %in% 2:3)~I(year8594=="Diagnosed 85-94"), % data=colon2, % bhazard=colon2$rate, df=5) % @ % <<>>= % summary(fit <- stpm2(Surv(tm,status %in% 2:3)~I(year8594=="Diagnosed 85-94"), % data=colon2, % bhazard=colon2$rate, % df=5,cure=TRUE)) % predict(fit,head(colon2),se.fit=TRUE) % @ % The estimate for the year parameter from the model without cure is within three significant % figures with that in Stata. For the predictions, the Stata model gives: % \begin{verbatim} % +---------------------------------+ % | surv surv_lci surv_uci | % |---------------------------------| % 1. | .86108264 .8542898 .8675839 | % 2. | .79346526 .7850106 .8016309 | % 3. | .69674037 .6863196 .7068927 | % 4. | .86108264 .8542898 .8675839 | % 5. | .82212425 .8143227 .8296332 | % |---------------------------------| % 6. | .86108264 .8542898 .8675839 | % +---------------------------------+ % \end{verbatim} % We can estimate the proportion of failures prior to the last event time: % <<>>= % newdata.eof <- data.frame(year8594 = unique(colon2$year8594), % tm=10) % predict(fit0, newdata.eof, type="fail", se.fit=TRUE) % predict(fit, newdata.eof, type="fail", se.fit=TRUE) % predict(fit, newdata.eof, type="haz", se.fit=TRUE) % @ % We can plot the predicted survival estimates: % \begin{center} % <>= % tms=seq(0,10,length=301)[-1] % plot(fit0,newdata=data.frame(year8594 = "Diagnosed 85-94", tm=tms), ylim=0:1, % xlab="Time since diagnosis (years)", ylab="Relative survival") % plot(fit0,newdata=data.frame(year8594 = "Diagnosed 75-84",tm=tms), % add=TRUE,line.col="red",rug=FALSE) % ## warnings: Predicted hazards less than zero for cure % plot(fit,newdata=data.frame(year8594 = "Diagnosed 85-94",tm=tms), % add=TRUE,ci=FALSE,lty=2,rug=FALSE) % plot(fit,newdata=data.frame(year8594="Diagnosed 75-84",tm=tms), % add=TRUE,rug=FALSE,line.col="red",ci=FALSE,lty=2) % legend("topright",c("85-94 without cure","75-84 without cure", % "85-94 with cure","75-84 with cure"), % col=c(1,2,1,2), lty=c(1,1,2,2), bty="n") % @ % \end{center} % And the hazard curves: % \begin{center} % <>= % plot(fit0,newdata=data.frame(year8594 = "Diagnosed 85-94", tm=tms), % ylim=c(0,0.5), type="hazard", % xlab="Time since diagnosis (years)",ylab="Excess hazard") % plot(fit0,newdata=data.frame(year8594 = "Diagnosed 75-84", tm=tms), % type="hazard", % add=TRUE,line.col="red",rug=FALSE) % plot(fit,newdata=data.frame(year8594 = "Diagnosed 85-94", tm=tms), % type="hazard", % add=TRUE,ci=FALSE,lty=2,rug=FALSE) % plot(fit,newdata=data.frame(year8594="Diagnosed 75-84", tm=tms), % type="hazard", % add=TRUE,rug=FALSE,line.col="red",ci=FALSE,lty=2) % legend("topright",c("85-94 without cure","75-84 without cure", % "85-94 with cure","75-84 with cure"), % col=c(1,2,1,2), lty=c(1,1,2,2), bty="n") % @ % \end{center} % The current implementation does not provide a test for differences in cure. We can code this using the \code{predictnl} function: % <<>>= % newdata.eof <- data.frame(year8594 = unique(colon2$year8594), % tm=10) % test <- predictnl(fit, function(object,newdata=NULL) { % lp1 <- predict(object, newdata.eof[1,], type="link") % lp2 <- predict(object, newdata.eof[2,], type="link") % lp1-lp2 % }) % with(test, c(fit=fit, % se.fit=se.fit, % statistic=fit/se.fit, % p=2*pnorm(abs(fit/se.fit), lower.tail=FALSE))) % @ % \section{Potential limitations and next steps} % \begin{itemize} % \item TODO: investigate whether we can calculate $X_D(t,x)$ more accurately using the \verb+numDeriv+ package. % \item TODO: Extend the generalised survival models to use multiple random effects. % \item TODO: Extend the generalised survival models to use automatic differentiation. % \end{itemize} \end{document} rstpm2/vignettes/enumitem.sty0000644000176200001440000012325213566730271016114 0ustar liggesusers% +--------------------------------------------------+ % | Typeset enumitem.tex to get the documentation. | % +--------------------------------------------------+ % % Copyright (c) 2003-2011 by Javier Bezos. % All Rights Reserved. % % This file is part of the enumitem distribution release 3.5.2 % ----------------------------------------------------------- % % It may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2003/12/01 or later. % % This work has the LPPL maintenance status "maintained". % % The Current Maintainer of this work is Javier Bezos. % % Notes % ~~~~~ % % The tag enit@ is used through the style % % To do: % ~~~~~~ % - ref*, for adding stuff in the same fashion as label* % - option ams, to force upshape, but I have to investigate % how to do it. % - labelled descriptions (ie, label, title, body) % - A true nextline (far from trivial and perhaps solved with % labelled descriptions). % - Improved \AddEnumerateCounter % - Compatibility with interfaces and zref-enumitem % - "Pausing" somehow inline boxed text. % - \@enumctr <-> \@listctr? % - Define keys with values % - Revise @nobreak % % Release % ~~~~~~~ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{enumitem}[2011/09/28 v3.5.2 Customized lists] % +=============================+ % | EMULATING KEYVAL | % +=============================+ % % "Thanks" to xkeyval, which use the same macros names as % keyval :-(, the latter has to be replicated in full here % to ensure it works as intended. The original work if by % David Carlisle, under license LPPL. Once the code is here, % it could be optimized by adpting it to the specific needs % of titlesec (to do). \def\enitkv@setkeys#1#2{% \def\enitkv@prefix{enitkv@#1@}% \let\@tempc\relax \enitkv@do#2,\relax,} \def\enitkv@do#1,{% \ifx\relax#1\empty\else \enitkv@split#1==\relax \expandafter\enitkv@do\fi} \def\enitkv@split#1=#2=#3\relax{% \enitkv@@sp@def\@tempa{#1}% \ifx\@tempa\@empty\else \expandafter\let\expandafter\@tempc \csname\enitkv@prefix\@tempa\endcsname \ifx\@tempc\relax \enitkv@errx{\@tempa\space undefined}% \else \ifx\@empty#3\@empty \enitkv@default \else \enitkv@@sp@def\@tempb{#2}% \expandafter\@tempc\expandafter{\@tempb}\relax \fi \fi \fi} \def\enitkv@default{% \expandafter\let\expandafter\@tempb \csname\enitkv@prefix\@tempa @default\endcsname \ifx\@tempb\relax \enitkv@err{No value specified for \@tempa}% \else \@tempb\relax \fi} \def\enitkv@errx#1{\enit@error{#1}\@ehc} \let\enitkv@err\enitkv@errx \def\@tempa#1{% \def\enitkv@@sp@def##1##2{% \futurelet\enitkv@tempa\enitkv@@sp@d##2\@nil\@nil#1\@nil\relax##1}% \def\enitkv@@sp@d{% \ifx\enitkv@tempa\@sptoken \expandafter\enitkv@@sp@b \else \expandafter\enitkv@@sp@b\expandafter#1% \fi}% \def\enitkv@@sp@b#1##1 \@nil{\enitkv@@sp@c##1}} \@tempa{ } \def\enitkv@@sp@c#1\@nil#2\relax#3{\enitkv@toks@{#1}\edef#3{\the\enitkv@toks@}} \@ifundefined{KV@toks@} {\newtoks\enitkv@toks@} {\let\enitkv@toks@\KV@toks@} \def\enitkv@key#1#2{% \@ifnextchar[{\enitkv@def{#1}{#2}}{\@namedef{enitkv@#1@#2}####1}} \def\enitkv@def#1#2[#3]{% \@namedef{enitkv@#1@#2@default\expandafter}\expandafter {\csname enitkv@#1@#2\endcsname{#3}}% \@namedef{enitkv@#1@#2}##1} % +=============================+ % | DEFINITIONS | % +=============================+ % % (1) The package uses a token register very often. To be on the % safe side, instead of \toks@, etc., a new one is declared. % (2) \enit@inbox is the box storing the items in boxed inline % lists. % (3) \enit@outerparindent is used to save the outer parindent % so that it can be used in the key parindent % (4) \enit@type has three values: 0 = enum, 1 = item, 2 = desc. % (5) \enit@calc stores which dimen is to be computed: % 0=labelindent, 1=labelwidth, 2=labelsep, 3=leftmargin, % 4=itemindent % (6) \enit@resuming has four values: 0 = none, 1 = series, % 2 = resume* series (computed in group enumitem-resume), % 3 = resume* list (ie, with no value). \chardef \enit@iv=4 \newlength\labelindent \newdimen \enit@outerparindent \newtoks \enit@toks \newbox \enit@inbox \newif\ifenit@boxmode \newif\ifenit@sepfrommargin \newif\ifenit@lblfrommargin \newif\ifenit@calcwidest \newif\ifenit@nextline \newif\ifenit@boxdesc % An alias (calc-savvy): \let\c@enit@cnt\@tempcnta \def\enit@meaning{\expandafter\strip@prefix\meaning} \def\enit@noexcs#1{\expandafter\noexpand\csname#1\endcsname} % Miscelaneous errors % =================== \def\enit@error{\PackageError{enumitem}} \def\enit@checkerror#1#2{% \enit@error{Unknown value `#2' for key `#1'}% {See the manual for valid values}} \def\enit@itemerror{% \enit@error{Misplaced \string\item}% {Either there is some text before the first\MessageBreak item or the last item has no text}} \def\enit@noserieserror#1{% \enit@error{Series `#1' not started}% {You are trying to continue a series\MessageBreak which has not been started with series}} \def\enit@checkseries#1{% \ifcase\enit@resuming \enit@error{Misplaced key `#1'}% {`series' and `resume*' must be used\MessageBreak in the optional argument of lists}% \fi} \def\enit@checkseries@m{% \ifcase\enit@resuming\else \enit@error{Uncompatible series settings}% {`series' and `resume*' must not be used\MessageBreak at the same time}% \fi} \let\enit@toodeep\@toodeep \def\@toodeep{% \ifnum\@listdepth>\enit@listdepth\relax \enit@toodeep \else \count@\@listdepth \global\advance\@listdepth\@ne \@ifundefined{@list\romannumeral\the\@listdepth}% {\expandafter\let \csname @list\romannumeral\the\@listdepth\expandafter\endcsname \csname @list\romannumeral\the\count@\endcsname}{}% \fi} % +=============================+ % | KEYS | % +=============================+ % % Including code executed by keys. % % There are 2 keyval groups: enumitem, and enumitem-delayed. % The latter is used to make sure a prioritary key is the % latest one; eg, ref, so that the ref format set by label % is overriden. So, when this key is found in enumitem, % nothing is done, except the key/value is moved to % enumitem-delayed. % % A further group (enumitem-resume) catches resume* and % series in optional arguments in lists. % % Vertical spacing % ================ \enitkv@key{enumitem}{topsep}{% \setlength\topsep{#1}} \enitkv@key{enumitem}{itemsep}{% \setlength\itemsep{#1}} \enitkv@key{enumitem}{parsep}{% \setlength\parsep{#1}} \enitkv@key{enumitem}{partopsep}{% \setlength\partopsep{#1}} % Horizontal spacing % ================== % % There are 3 cases: *, ! and a value. The latter also % cancels widest with the sequence key=* ... key=value % \string is used, just in case some package changes the % catcodes. \def\enit@calcset#1#2#3{% \if\string*\string#3% \enit@calcwidesttrue \let\enit@calc#2% \else\if\string!\string#3% \enit@calcwidestfalse \let\enit@calc#2% \else \ifnum\enit@calc=#2% \enit@calcwidestfalse \let\enit@calc\z@ \fi \setlength#1{#3}% \fi\fi} \def\enitkv@enumitem@widest#1{% \expandafter\let\csname enit@cw@\@enumctr\endcsname\relax \@namedef{enit@widest@\@enumctr}##1{#1}} \def\enitkv@enumitem@widest@default{% \expandafter\let\csname enit@cw@\@enumctr\endcsname\relax \expandafter\let\csname enit@widest@\@enumctr\endcsname\relax} \enitkv@key{enumitem}{widest*}{% \setcounter{enit@cnt}{#1}% \expandafter\edef\csname enit@cw@\@enumctr\endcsname {\the\c@enit@cnt}% \expandafter\edef\csname enit@widest@\@enumctr\endcsname##1% {##1{\the\c@enit@cnt}}} \enitkv@key{enumitem}{labelindent*}{% \enit@lblfrommargintrue \ifnum\enit@calc=\z@ \enit@calcwidestfalse \fi \setlength\labelindent{#1}% \advance\labelindent\leftmargin} \enitkv@key{enumitem}{labelindent}{% \enit@lblfrommarginfalse \enit@calcset\labelindent\z@{#1}} \enitkv@key{enumitem}{labelwidth}{% \enit@calcset\labelwidth\@ne{#1}} \enitkv@key{enumitem}{leftmargin}{% \edef\enit@c{\the\leftmargin}% \enit@calcset\leftmargin\thr@@{#1}% \ifenit@lblfrommargin \advance\labelindent-\enit@c\relax \advance\labelindent\leftmargin \fi} \enitkv@key{enumitem}{itemindent}{% \edef\enit@c{\the\itemindent}% \enit@calcset\itemindent\enit@iv{#1}% \ifenit@sepfrommargin \advance\labelsep-\enit@c\relax \advance\labelsep\itemindent \fi} \enitkv@key{enumitem}{listparindent}{% \setlength\listparindent{#1}} \enitkv@key{enumitem}{rightmargin}{% \setlength\rightmargin{#1}} % labelsep, from itemindent; labelsep*, from leftmargin \enitkv@key{enumitem}{labelsep*}{% \enit@sepfrommargintrue \ifnum\enit@calc=\tw@ \enit@calcwidestfalse \let\enit@calc\z@ \fi \setlength\labelsep{#1}% \advance\labelsep\itemindent} \enitkv@key{enumitem}{labelsep}{% \enit@sepfrommarginfalse \enit@calcset\labelsep\tw@{#1}} % Series, resume and start % ======================== \enitkv@key{enumitem-resume}{series}{% \enit@checkseries@m \let\enit@resuming\@ne \@ifundefined{enitkv@enumitem@#1}{}% {\enit@error{Invalid series name `#1'}% {Do not name a series with an existing key}}% \def\enit@series{#1}} \enitkv@key{enumitem}{series}{% \enit@checkseries{series}} \def\enitkv@enumitem@resume#1{% \edef\enit@series{#1}% \@nameuse{enit@resume@series@#1}\relax} \def\enitkv@enumitem@resume@default{% \@nameuse{enit@resume@\@currenvir}\relax} \@namedef{enitkv@enumitem-resume@resume*}#1{% \enit@checkseries@m \let\enit@resuming\tw@ \edef\enit@series{#1}% \@ifundefined{enit@resumekeys@series@#1}% {\enit@noserieserror{#1}}% {\expandafter\let\expandafter\enit@resumekeys \csname enit@resumekeys@series@#1\endcsname}} \@namedef{enitkv@enumitem-resume@resume*@default}{% \let\enit@resuming\thr@@ \expandafter\let\expandafter\enit@resumekeys \csname enit@resumekeys@\@currenvir\endcsname \@nameuse{enit@resume@\@currenvir}\relax} \enitkv@key{enumitem}{resume*}[]{% \enit@checkseries{resume*}} \newcommand\restartlist[1]{% \@ifundefined{end#1}% {\enit@error{Undefined list `#1'}% {No list has been defined with that name.}}% {\expandafter\let \csname enit@resume@#1\endcsname\@empty}} \enitkv@key{enumitem}{start}[\@ne]{% \setcounter{\@listctr}{#1}% \advance\@nameuse{c@\@listctr}\m@ne} % Penalties % ========= \enitkv@key{enumitem}{beginpenalty}{% \@beginparpenalty#1\relax} \enitkv@key{enumitem}{midpenalty}{% \@itempenalty#1\relax} \enitkv@key{enumitem}{endpenalty}{% \@endparpenalty#1\relax} % Font/Format % =========== \enitkv@key{enumitem}{format}{% \def\enit@format{#1}} \enitkv@key{enumitem}{font}{% \def\enit@format{#1}} % Description styles % ================== \enitkv@key{enumitem}{style}[normal]{% \@ifundefined{enit@style@#1}% {\enit@checkerror{style}{#1}}% {\enit@nextlinefalse \enit@boxdescfalse \@nameuse{enit@style@#1}% \edef\enit@descstyle{\enit@noexcs{enit@#1style}}}} \def\enit@style@standard{% \enit@boxdesctrue \enit@calcset\itemindent\enit@iv!} \let\enit@style@normal\enit@style@standard \def\enit@style@unboxed{% \enit@calcset\itemindent\enit@iv!} \def\enit@style@sameline{% \enit@calcset\labelwidth\@ne!} \def\enit@style@multiline{% \enit@align@parleft \enit@calcset\labelwidth\@ne!} \def\enit@style@nextline{% \enit@nextlinetrue \enit@calcset\labelwidth\@ne!} % Labels and refs % =============== % Aligment % -------- \enitkv@key{enumitem}{align}{% \@ifundefined{enit@align@#1}% {\enit@checkerror{align}{#1}}% {\csname enit@align@#1\endcsname}} % \nobreak for unboxed label with color. See below. \newcommand\SetLabelAlign[2]{% \enit@toks{#2}% \expandafter\edef\csname enit@align@#1\endcsname {\def\noexpand\enit@align####1{\nobreak\the\enit@toks}}} \def\enit@align@right{% \def\enit@align##1{\nobreak\hss\llap{##1}}} \def\enit@align@left{% \def\enit@align##1{\nobreak##1\hfil}} \def\enit@align@parleft{% \def\enit@align##1{% \nobreak \strut\smash{\parbox[t]\labelwidth{\raggedright##1}}}} % \enit@ref has three possible definitions: % (1) \relax, if there is neither label nor ref (ie, use % LaTeX settings). % (2) set ref to @itemlabel, if there is label but not ref % (3) set ref to ref, if there is ref (with or without label) \enitkv@key{enumitem}{label}{% \expandafter\def\@itemlabel{#1}% \def\enit@ref{\expandafter\enit@reflabel\@itemlabel\z@}} \enitkv@key{enumitem}{label*}{% \ifnum\enit@depth=\@ne \expandafter\def\@itemlabel{#1}% \else % no level 0 \advance\enit@depth\m@ne \enit@toks{#1}% \expandafter\edef\@itemlabel{% \enit@noexcs{label\enit@prevlabel}% \the\enit@toks}% \advance\enit@depth\@ne \fi \def\enit@ref{\expandafter\enit@reflabel\@itemlabel\z@}} % ref is set by label, except if there is an explicit ref % in the same hierarchy level. Explicit refs above the % current hierarchy level are overriden by label (besides ref), % too. Since an explicit ref has preference, it's delayed. \enitkv@key{enumitem}{ref}{% \g@addto@macro\enit@delayedkeys{,ref=#1}} \enitkv@key{enumitem-delayed}{ref}{% \def\enit@ref{\enit@reflabel{#1}\@ne}} % #2=0 don't "normalize" (ie, already normalized) % =1 "normalize" (in key ref) % Used thru \enit@ref \def\enit@reflabel#1#2{% \ifnum\enit@depth=\@ne\else % no level 0 \advance\enit@depth\@ne \@namedef{p@\@enumctr}{}% Don't accumulate labels \advance\enit@depth\m@ne \fi \ifcase#2% \@namedef{the\@enumctr}{{#1}}% \else \enit@normlabel{\csname the\@enumctr\endcsname}{#1}% \fi} % \xxx* in counters (refstar) and widest (calcdef) % ------------------------------------------------ % \enit@labellist contains a list of % \enit@elt{widest}\count\@count\enit@sc@@count % \enit@elt is either \enit@getwidth or \enit@refstar, defined % below % The current implementation is sub-optimal -- labels are stored in % labellist, counters defined again when processing labels, and % modifying it is almost impossible. \let\enit@labellist\@empty \newcommand\AddEnumerateCounter{% \@ifstar\enit@addcounter@s\enit@addcounter} \def\enit@addcounter#1#2#3{% \enit@toks\expandafter{% \enit@labellist \enit@elt{#3}}% \edef\enit@labellist{% \the\enit@toks \enit@noexcs{\expandafter\@gobble\string#1}% \enit@noexcs{\expandafter\@gobble\string#2}% \enit@noexcs{enit@sc@\expandafter\@gobble\string#2}}} \def\enit@addcounter@s#1#2#3{% \enit@addcounter{#1}{#2}% {\@nameuse{enit@sc@\expandafter\@gobble\string#2}{#3}}} % The 5 basic counters: \AddEnumerateCounter\arabic\@arabic{0} \AddEnumerateCounter\alph\@alph{m} \AddEnumerateCounter\Alph\@Alph{M} \AddEnumerateCounter\roman\@roman{viii} \AddEnumerateCounter\Roman\@Roman{VIII} % Inline lists % ============ % % Labels % ------ \enitkv@key{enumitem}{itemjoin}{% \def\enit@itemjoin{#1}} \enitkv@key{enumitem}{itemjoin*}{% \def\enit@itemjoin@s{#1}} \enitkv@key{enumitem}{afterlabel}{% \def\enit@afterlabel{#1}} % Mode % ---- \enitkv@key{enumitem}{mode}{% \@ifundefined{enit@mode#1}% {\enit@checkerror{mode}{#1}}% {\csname enit@mode#1\endcsname}} \let\enit@modeboxed\enit@boxmodetrue \let\enit@modeunboxed\enit@boxmodefalse % Short Labels % ============ \let\enit@marklist\@empty % shorthand, expansion: \newcommand\SetEnumerateShortLabel[2]{% \let\enit@a\@empty \def\enit@elt##1##2{% \def\enit@b{#1}\def\enit@c{##1}% \ifx\enit@b\enit@c\else \expandafter\def\expandafter\enit@a\expandafter{% \enit@a \enit@elt{##1}{##2}}% \fi}% \enit@marklist \expandafter\def\expandafter\enit@a\expandafter{% \enit@a \enit@elt{#1}{#2}}% \let\enit@marklist\enit@a} \SetEnumerateShortLabel{a}{\alph*} \SetEnumerateShortLabel{A}{\Alph*} \SetEnumerateShortLabel{i}{\roman*} \SetEnumerateShortLabel{I}{\Roman*} \SetEnumerateShortLabel{1}{\arabic*} % This is called \enit@first one,two,three,\@nil\@@nil. If there % are just one element #2 is \@nil, otherwise we have to remove % the trailing ,\@nil with enit@first@x % Called with the keys in \enit@c % Returns enit@toks \def\enit@first#1,#2\@@nil{% \in@{=}{#1}% Quick test, if contains =, it's key=value \ifin@\else \enitkv@@sp@def\enit@a{#1}% \@ifundefined{enitkv@enumitem@\enit@meaning\enit@a}% {\ifnum\enit@type=\z@ \def\enit@elt{\enit@replace\enit@a}% \enit@marklist % Returns \enit@toks \else \enit@toks{#1}% \fi \ifx\@nil#2% \ifx,#1,\else \edef\enit@c{label=\the\enit@toks}% \fi \else \@temptokena\expandafter{\enit@first@x#2}% \edef\enit@c{label=\the\enit@toks,\the\@temptokena}% \fi}% {}% \fi \enit@toks\expandafter{\enit@c}} \def\enit@first@x#1,\@nil{#1} \def\enit@replace#1#2#3{% \enit@toks{}% \def\enit@b##1#2##2\@@nil{% \ifx\@nil##2% \addto@hook\enit@toks{##1}% \else \edef\enit@a{\the\enit@toks}% \ifx\enit@a\@empty\else \enit@error{Extra short label ignored}% {There are more than one short label}% \fi \addto@hook\enit@toks{##1#3}% \enit@b##2\@@nil \fi}% \expandafter\enit@b#1#2\@nil\@@nil \edef#1{\the\enit@toks}} % Pre and post code % ================= \enitkv@key{enumitem}{before}{% \def\enit@before{#1}} \enitkv@key{enumitem}{after}{% \def\enit@after{#1}} \enitkv@key{enumitem}{before*}{% \expandafter\def\expandafter\enit@before\expandafter {\enit@before#1}} \enitkv@key{enumitem}{after*}{% \expandafter\def\expandafter\enit@after\expandafter {\enit@after#1}} % Miscelaneous keys % ================ \enitkv@key{enumitem}{nolistsep}[true]{% \partopsep=\z@skip \topsep=\z@ plus .1pt \itemsep=\z@skip \parsep=\z@skip} \enitkv@key{enumitem}{nosep}[true]{% \partopsep=\z@skip \topsep=\z@skip \itemsep=\z@skip \parsep=\z@skip} \enitkv@key{enumitem}{noitemsep}[true]{% \itemsep=\z@skip \parsep=\z@skip} \enitkv@key{enumitem}{wide}[\parindent]{% \enit@align@left \leftmargin\z@ \labelwidth\z@ \setlength\labelindent{#1}% \listparindent\labelindent \enit@calcset\itemindent\enit@iv!} % The following is deprecated in favour of wide: \enitkv@key{enumitem}{fullwidth}[true]{% \leftmargin\z@ \labelwidth\z@ \def\enit@align##1{\hskip\labelsep##1}} % "Abstract" layer % ================ % % Named values % ------------ \newcommand\SetEnumitemValue[2]{% Implicit #3 \@ifundefined{enit@enitkv@#1}% {\@ifundefined{enitkv@enumitem@#1}% {\enit@error{Wrong key `#1' in \string\SetEnumitemValue}% {Perhaps you have misspelled it}}{}% \expandafter\let\csname enit@enitkv@#1\expandafter\endcsname \csname enitkv@enumitem@#1\endcsname}{}% \@namedef{enitkv@enumitem@#1}##1{% \def\enit@a{##1}% \@ifundefined{enit@enitkv@#1@\enit@meaning\enit@a}% {\@nameuse{enit@enitkv@#1}{##1}}% {\@nameuse{enit@enitkv@#1\expandafter\expandafter\expandafter}% \expandafter\expandafter\expandafter {\csname enit@enitkv@#1@##1\endcsname}}{}}% \@namedef{enit@enitkv@#1@#2}} % Defining keys % ------------- \newcommand\SetEnumitemKey[2]{% \@ifundefined{enitkv@enumitem@#1}% {\enitkv@key{enumitem}{#1}[]{\enitkv@setkeys{enumitem}{#2}}}% {\enit@error{Duplicated key `#1' in \string\SetEnumitemKey}% {There already exists a key with that name}}} % +=============================+ % | PROCESSING KEYS | % +=============================+ % % Set keys % ======== \def\enit@setkeys#1{% \@ifundefined{enit@@#1}{}% {\expandafter\expandafter\expandafter \enit@setkeys@i\csname enit@@#1\endcsname\@@}} % The following is used directly in resumeset: \def\enit@setkeys@i#1\@@{% \let\enit@delayedkeys\@empty \enit@shl{#1}% is or returns \enit@toks \expandafter\enit@setkeys@ii\the\enit@toks\@@} \def\enit@setkeys@ii#1\@@{% \enitkv@setkeys{enumitem}{#1}% \enit@toks\expandafter{\enit@delayedkeys}% \edef\enit@a{% \noexpand\enitkv@setkeys{enumitem-delayed}{\the\enit@toks}}% \enit@a} % Handling * and ! values % ======================= % % \@gobbletwo removes \c from \c@counter. \def\enit@getwidth#1#2#3#4{% \let#4#3% \def#3##1{% \@ifundefined{enit@widest\expandafter\@gobbletwo\string##1}% if no widest=key {#1}% {\csname enit@widest\expandafter\@gobbletwo\string##1\endcsname{#4}}}} \def\enit@valueerror#1{\z@ % if after an assignment, but doesn't catch \ifnum \enit@error{No default \string\value\space for `#1'}% {You can provide one with widest*}}% \let\enit@values\@empty \def\enit@calcwidth{% \ifenit@calcwidest \ifnum\enit@type=\z@ % ie, enum \@ifundefined{enit@cw@\@enumctr}% {\@namedef{enit@cv@\@enumctr}{\enit@valueerror\@enumctr}}% {\edef\enit@values{% \enit@values \@nameuse{c@\@enumctr}\@nameuse{enit@cw@\@enumctr}\relax}% \expandafter \edef\csname enit@cv@\@enumctr\endcsname {\@nameuse{c@\@enumctr}}}% \fi \begingroup \enit@values \def\value##1{\csname enit@cv@##1\endcsname}% \let\enit@elt\enit@getwidth \enit@labellist \settowidth\labelwidth{\@itemlabel}% \xdef\enit@a{\labelwidth\the\labelwidth\relax}% \endgroup \enit@a \fi \advance\dimen@-\labelwidth} \def\enit@calcleft{% \dimen@\leftmargin \advance\dimen@\itemindent \advance\dimen@-\labelsep \advance\dimen@-\labelindent \ifcase\enit@calc % = 0 = labelindent \enit@calcwidth \advance\labelindent\dimen@ \or % = 1 = labelwidth, so no \enit@calcwidth \labelwidth\dimen@ \or % = 2 = labelsep \enit@calcwidth \advance\labelsep\dimen@ \or % = 3 = leftmargin \enit@calcwidth \advance\leftmargin-\dimen@ \or % = 4 =itemindent \enit@calcwidth \advance\itemindent-\dimen@ \fi} % "Normalizing" labels % ==================== % % Replaces \counter* by \counter{level} (those in \enit@labellist). % % #1 is either \csname...\endcsmame or the container \@itemlabel -- % hence \expandafter \def\enit@refstar@i#1#2{% \if*#2\@empty \noexpand#1{\@enumctr}% \else \noexpand#1{#2}% \fi}% \def\enit@refstar#1#2#3#4{% \def#2{\enit@refstar@i#2}% \def#3{\enit@refstar@i#3}} \def\enit@normlabel#1#2{% \begingroup \def\value{\enit@refstar@i\value}% \let\enit@elt\enit@refstar \enit@labellist \protected@xdef\enit@a{{#2}}% Added braces as \ref is in the \endgroup \expandafter\let#1\enit@a} % global scope. % Preliminary settings and default values % ======================================= \def\enit@prelist#1#2#3{% \let\enit@type#1% \def\enit@depth{#2}% \edef\enit@prevlabel{#3\romannumeral#2}% \advance#2\@ne} \def\enit@preset#1#2#3{% \enit@sepfrommarginfalse \enit@calcwidestfalse \let\enit@resuming\z@ \let\enit@series\relax \enit@boxmodetrue \def\enit@itemjoin{ }% \let\enit@itemjoin@s\relax \let\enit@afterlabel\nobreakspace \let\enit@before\@empty \let\enit@after\@empty \let\enit@format\@firstofone % and NOT empty \let\enit@ref\relax \labelindent\z@skip \ifnum\@listdepth=\@ne \enit@outerparindent\parindent \else \parindent\enit@outerparindent \fi \enit@setkeys{list}% \enit@setkeys{list\romannumeral\@listdepth}% \enit@setkeys{#1}% \enit@setkeys{#1\romannumeral#2}% \enit@setresume{#3}} % keyval "error" in enumitem-resume: all undefined keys (ie, all % except resume*) are ignored, but is treated like % resume*= \def\enitkv@err@a#1{% \@ifundefined{enit@resumekeys@series@\@tempa}{}% {\@nameuse{enitkv@enumitem-resume@resume*\expandafter}% \expandafter{\@tempa}}} % keyval "error" in the optional argument: all undefined keys are % passed to the keyval error, but is ignored (already % processed in enumitem-resume \def\enitkv@err@b#1{% \@ifundefined{enit@resumekeys@series@\@tempa}% {\enit@savekverr{#1}}% {}} % Process keys in optional argument: \def\enit@setresume#1{% \enit@shl{#1}% Returns enit@toks \edef\enit@savekeys{\the\enit@toks}% \let\enit@savekverr\enitkv@errx \let\enitkv@errx\enitkv@err@a \edef\enit@b{% \noexpand\enitkv@setkeys{enumitem-resume}{\the\enit@toks}}% \enit@b \let\enitkv@errx\enitkv@err@b \ifcase\enit@resuming\or\or % = 2 \expandafter \enit@setkeys@i\enit@resumekeys,resume=\enit@series\@@ \or % = 3 \expandafter \enit@setkeys@i\enit@resumekeys,resume\@@ \fi \expandafter\enit@setkeys@i\enit@savekeys\@@ \let\enitkv@errx\enit@savekverr} % +=============================+ % | LIST TYPES | % +=============================+ % % Displayed lists % =============== % #1 #2 implicit \def\enit@dylist{% \enit@align@right \list} \def\enit@endlist{% \enit@after \endlist \ifx\enit@series\relax\else % discards resume*, too \ifnum\enit@resuming=\@ne % ie, series= \enit@setresumekeys{series@\enit@series}\global\global \else % ie, resume=, resume*= (save count, but not keys) \enit@setresumekeys{series@\enit@series}\@gobblefour\global \fi \enit@afterlist \fi \ifnum\enit@resuming=\thr@@ % ie, resume* list (save count only) \enit@setresumekeys\@currenvir\@gobblefour\global \else \enit@setresumekeys\@currenvir\@empty\@empty \fi \aftergroup\enit@afterlist} % #1 = either \@currenvir or series@ % #2(keys) #3(counter) are \global, \@gobblefour or \@empty \def\enit@setresumekeys#1#2#3{% \enit@toks\expandafter{\enit@savekeys}% \xdef\enit@afterlist{% #2\def\enit@noexcs{enit@resumekeys@#1}{\the\enit@toks}% \ifnum\enit@type=\z@ % ie, enum #3\def\enit@noexcs{enit@resume@#1}{% \csname c@\@listctr\endcsname \the\csname c@\@listctr\endcsname}% \fi}} % Inline lists % ============ % Definition of \@trivlist inside inline lists. So, when % \@trivlist is found in any displayed list (including quote, % center, verbatim...) the default \@item is restored. \def\enit@intrivlist{% \enit@changed@itemfalse \let\@item\enit@outer@item \let\par\@@par \let\@trivlist\enit@outer@triv \@trivlist} % Keep track of \@item and \item changes \newif\ifenit@changed@item \enit@changed@itemfalse \newif\ifenit@changeditem \enit@changeditemfalse % List % ---- % Arguments, as before: % \enitdp@, , , % About @newlist, see @initem. \def\enit@inlist#1#2{% \ifnum\@listdepth>\enit@listdepth\relax \@toodeep \else \global\advance\@listdepth\@ne \fi \let\enit@align\@firstofone \def\@itemlabel{#1}% \@nmbrlistfalse \ifenit@changed@item\else \enit@changed@itemtrue \let\enit@outer@triv\@trivlist \let\@trivlist\enit@intrivlist \@setpar\@empty \let\enit@outer@item\@item \fi #2\relax \global\@newlisttrue \ifenit@boxmode \ifenit@changeditem\else \enit@changeditemtrue \let\enit@outeritem\item \fi \let\@item\enit@boxitem \else \let\@item\enit@noboxitem \ifx\enit@itemjoin@s\relax\else \PackageWarning{enumitem}% {itemjoin* discarded in mode unboxed\MessageBreak}% \fi \fi \let\enit@calcleft\relax \let\enit@afteritem\relax \ifenit@boxmode \global\setbox\enit@inbox\hbox\bgroup\color@begingroup \let\item\enit@endinbox \fi \ignorespaces} \def\enit@endinlist{% \ifenit@boxmode \unskip \xdef\enit@afteritem{% \ifhmode\spacefactor\the\spacefactor\relax\fi}% \color@endgroup \egroup \ifdim\wd\enit@inbox=\z@ \enit@itemerror \else \ifenit@noinitem\else \ifhmode\unskip\fi \@ifundefined{enit@itemjoin@s}% {\enit@itemjoin}% {\enit@itemjoin@s}% \fi \unhbox\@labels \enit@afterlabel \unhbox\enit@inbox \enit@afteritem \fi \else \unskip \if@newlist \enit@itemerror \fi \fi \enit@after \global\advance\@listdepth\m@ne \global\@inlabelfalse \if@newlist \global\@newlistfalse \@noitemerr \fi \ifx\enit@series\relax\else % discards resume* list, too \ifnum\enit@resuming=\@ne % ie, series \enit@setresumekeys{series@\enit@series}\global\global \else % ie, resume, resume* (save count, but not keys) \enit@setresumekeys{series@\enit@series}\@gobblefour\global \fi \enit@afterlist \fi \ifnum\enit@resuming=\thr@@ % ie, resume* list (save count only) \enit@setresumekeys\@currenvir\@gobblefour\global \else \enit@setresumekeys\@currenvir\@empty\@empty \fi \aftergroup\enit@afterlist} % \@item: unboxed % --------------- \def\enit@noboxitem[#1]{% \if@newlist \leavevmode % ships pending labels out \global\@newlistfalse \else \ifhmode \unskip \enit@itemjoin \else \noindent \fi \fi \if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter{\@listctr}% after \unskip (hyperref) \fi \fi \mbox{\makelabel{#1}}% \enit@afterlabel \ignorespaces} % \@item: boxed % ------------ % % We don't want \item to be executed locally, because it sets a flag % (and hyperref adds another flag, too). So, we redefine it inside % the box to \enit@endinbox which ends the box and then use the actual % (outer) \item. labels are stored in another box, to detect empty % boxes, ie, misplaced \item's. Note the 2nd \item ends collecting % the 1st item and ships it out, while the 3rd \item ends collecting % the 2nd item, puts the itemjoin and then ships the 2nd item out. % The flag enit@noinitem keeps track of that. \newif\ifenit@noinitem \def\enit@endinbox{% \unskip \xdef\enit@afteritem{% \ifhmode\spacefactor\the\spacefactor\relax\fi}% \color@endgroup \egroup \enit@outeritem} \def\enit@boxitem[#1]{% \if@newlist \global\@newlistfalse \ifdim\wd\enit@inbox>\z@ \enit@itemerror \fi \enit@noinitemtrue \leavevmode % ships pending labels out \else \ifdim\wd\enit@inbox=\z@ \enit@itemerror \else \ifenit@noinitem \enit@noinitemfalse \else \ifhmode\unskip\fi \enit@itemjoin \fi \unhbox\@labels \enit@afterlabel \unhbox\enit@inbox \enit@afteritem \fi \fi \if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter{\@listctr}% \fi \fi \sbox\@labels{\makelabel{#1}}% \let\enit@afteritem\relax \setbox\enit@inbox\hbox\bgroup\color@begingroup \let\item\enit@endinbox \hskip1sp % in case the first thing is \label \ignorespaces} % Pause item % ---------- % % To do. % % The three types % =============== % % enumerate and enumerate* % ------------------------ % % The following has 4 arguments, which in enumerate are: % \@enumdepth, enum, \thr@@, . % In user defined environments they are: % \enitdp@, , , \def\enit@enumerate{% \let\enit@list\enit@dylist \enit@enumerate@i} \@namedef{enit@enumerate*}{% \let\enit@list\enit@inlist \enit@enumerate@i} \def\enit@enumerate@i#1#2#3#4{% \ifnum#1>#3\relax \enit@toodeep \else \enit@prelist\z@{#1}{#2}% \edef\@enumctr{#2\romannumeral#1}% \expandafter \enit@list \csname label\@enumctr\endcsname {\usecounter\@enumctr \let\enit@calc\z@ \def\makelabel##1{\enit@align{\enit@format{##1}}}% \enit@preset{#2}{#1}{#4}% \enit@normlabel\@itemlabel\@itemlabel \enit@ref \enit@calcleft \enit@before}% \fi} \let\enit@endenumerate\enit@endlist \@namedef{enit@endenumerate*}{\enit@endinlist} % itemize and itemize* % -------------------- % % The following has 4 arguments, which in itemize are: % \@itemdepth, item, \thr@@, . % In user defined environments they are: % \enitdp@, , , \def\enit@itemize{% \let\enit@list\enit@dylist \enit@itemize@i} \@namedef{enit@itemize*}{% \let\enit@list\enit@inlist \enit@itemize@i} \def\enit@itemize@i#1#2#3#4{% \ifnum#1>#3\relax \enit@toodeep \else \enit@prelist\@ne{#1}{#2}% \edef\@itemitem{label#2\romannumeral#1}% \expandafter \enit@list \csname\@itemitem\endcsname {\let\enit@calc\z@ \def\makelabel##1{\enit@align{\enit@format{##1}}}% \enit@preset{#2}{#1}{#4}% \enit@calcleft \enit@before}% \fi} \let\enit@enditemize\enit@endlist \@namedef{enit@enditemize*}{\enit@endinlist} % description and description* % ---------------------------- % % Make sure \descriptionlabel exists: \providecommand*\descriptionlabel[1]{% \hspace\labelsep \normalfont\bfseries#1} \@namedef{enit@description*}{% \let\enit@list\enit@inlist \enit@description@i} \def\enit@description{% \let\enit@list\enit@dylist \enit@description@i} \def\enit@description@i#1#2#3#4{% \ifnum#1>#3\relax \enit@toodeep \else \enit@list{}% {\let\enit@type\tw@ \advance#1\@ne \labelwidth\z@ \enit@align@left \let\makelabel\descriptionlabel \enit@style@standard \enit@preset{#2}{#1}{#4}% \enit@calcleft \let\enit@svlabel\makelabel \def\makelabel##1{% \labelsep\z@ \ifenit@boxdesc \enit@svlabel{\enit@align{\enit@format{##1}}}% \else \nobreak \enit@svlabel{\enit@format{##1}}% \aftergroup\enit@postlabel \fi}% \enit@before}% \fi} \let\enit@enddescription\enit@endlist \@namedef{enit@enddescription*}{\enit@endinlist} % trivlist % ======== \def\enit@trivlist{% \let\enit@type\tw@ \parsep\parskip \csname @list\romannumeral\the\@listdepth\endcsname \@nmbrlistfalse \enit@setkeys{trivlist}% \enit@setkeys{trivlist\romannumeral\@listdepth}% \@trivlist \labelwidth\z@ \leftmargin\z@ \itemindent\z@ \let\@itemlabel\@empty \def\makelabel##1{##1}} % Description styles % ================== % % the next definition is somewhat tricky because labels are boxed. % That's fine when the label is just placed at the begining of a line % of text, but when the box is placed without horizontal material, % leading is killed. So, we need change somehow \box to \unhbox, but % I don't want to modify \@item. The code below presumes \@item has % not been changed and arguments gobble the part setting \@labels, % which is replaced by a new one. % % The default value in description is itemindent=!, but some styles % (those whose item text begin at a fixed place, ie, nextline, % multiline and sameline) change it to labelwidth=!. % % We must be careful with the group and the whatsit added by color to % boxes. Alignment is applied here and some adjustments in skips are % necessary to get proper line breaks (including a \nobreak at the % beginning of \enit@align, ie, after the first whatsit, see above). % To "pass" the inner group added by color to the box, \enit@postlabel % ckecks if the following is }. ie, \egroup -- if not, the box has % not reached yet its end. \def\enit@postlabel{% \@ifnextchar\egroup {\aftergroup\enit@postlabel}% {\enit@postlabel@i}} \def\enit@postlabel@i#1#2#3#4#5{% \def\enit@lblpenalty{\penalty\z@\hskip\skip@}% \ifenit@nextline \ifdim\wd\@tempboxa>\labelwidth \def\enit@lblpenalty{\newline\@nobreaktrue}% \fi \fi \everypar{% \@minipagefalse \global\@newlistfalse \if@inlabel \global\@inlabelfalse {\setbox\z@\lastbox \ifvoid\z@ \kern-\itemindent \fi}% \unhbox\@labels \skip@\lastskip % Save last \labelsep \unskip % Remove it \enit@lblpenalty % Restore it, after penalty \fi \if@nobreak \@nobreakfalse \clubpenalty\@M \else \clubpenalty\@clubpenalty \everypar{}% \fi}% \def\enit@a{#1#2#3#4}% \def\enit@b{\global\setbox\@labels\hbox}% \ifx\enit@a\enit@b\else \enit@error{Non standard \string\item}% {A class or a package has redefined \string\item\MessageBreak and I do not know how to continue}% \fi \global\setbox\@labels\hbox{% \unhbox\@labels \hskip\itemindent \hskip-\labelwidth \hskip-\labelsep \ifdim\wd\@tempboxa>\labelwidth \enit@align{\unhbox\@tempboxa}\unskip % Removes (typically) \hfil \else \leavevmode\hbox to\labelwidth{\enit@align{\unhbox\@tempboxa}}% \fi \hskip\labelsep}} % +=============================+ % | (RE)DEFINING LISTS | % +=============================+ % % Set keys/values % =============== % Remember \romannumeral0 expands to nothing. % #1 = list name, #2 = level, #3 = flag if star, #4 = keys/values \def\enit@saveset#1#2#3#4{% \setcounter{enit@cnt}{#2}% \ifcase#3% \expandafter \def\csname enit@@#1\romannumeral\c@enit@cnt\endcsname{#4}% \or \expandafter\let\expandafter\enit@b \csname enit@@#1\romannumeral\c@enit@cnt\endcsname \ifx\enit@b\relax \let\enit@b\@empty \fi \expandafter\def \csname enit@@#1\romannumeral\c@enit@cnt\expandafter\endcsname \expandafter{\enit@b,#4}% \fi} % To do: more robust tests (catch wrong names, but not easy) % Internally, LaTeX uses a short name for enumerate (enum) % and itemize (item). To be consistent with this convention, % a couple of macros provide a "translation". I'm not very % happy with the current implementation. \def\enit@shortenumerate{enum} \def\enit@shortitemize{item} \newcommand\setlist{% \@ifstar{\enit@setlist\@ne}{\enit@setlist\z@}} \def\enit@setlist#1{% \@ifnextchar[{\enit@setlist@x#1}{\enit@setlist@i#1\@empty}} % Let's accept \setlist[]*{}, too, because an error in <=3.5.1 \def\enit@setlist@x#1[#2]{% \@ifstar{\enit@setlist@i\@ne{#2}}{\enit@setlist@i#1{#2}}} % #1 list names/levels, #2 keys/values % #1 star flag, #2 list names/levels, #3 keys/values \def\enit@setlist@i#1#2#3{% \let\enit@eltnames\relax \let\enit@b\@empty \let\enit@eltlevels\relax \let\enit@c\@empty \protected@edef\enit@a{#2}% \@for\enit@a:=\enit@a\do{% the 2nd enit@a is first expanded \@ifundefined{enitdp@\enit@meaning\enit@a}% {\edef\enit@c{\enit@c\enit@eltlevels{\enit@a}}}% {\@ifundefined{enit@short\enit@meaning\enit@a}% \@empty {\edef\enit@a{\@nameuse{enit@short\enit@a}}}% \edef\enit@b{\enit@b\enit@eltnames{\enit@a}}}}% \ifx\enit@b\@empty \def\enit@b{\enit@eltnames{list}}% \fi \ifx\enit@c\@empty \def\enit@c{\enit@eltlevels{0}}% \fi \def\enit@eltnames##1{% \def\enit@a{##1}% \enit@c}% \def\enit@eltlevels##1{% \enit@saveset\enit@a{##1}#1{#3}}% \enit@b}% % Deprecated: \newcommand\setdisplayed[1][0]{\setlist[trivlist,#1]} \let\enitdp@trivlist\@empty % dummy, let know it exists \newcommand\setenumerate[1][0]{\setlist[enumerate,#1]} \newcommand\setitemize[1][0]{\setlist[itemize,#1]} \newcommand\setdescription[1][0]{\setlist[description,#1]} % New lists % ========= % When defining a list, \label... and counters must be defined % for each level, too: \def\enit@xset@itemize{% \@namedef{label\enit@c\romannumeral\count@}{% \enit@error{Undefined label}% {You have defined a list, but labels have not been setup.\MessageBreak You can set the label field with \string\setlist.}}} \@namedef{enit@xset@itemize*}{\enit@xset@itemize} \def\enit@xset@enumerate{% \enit@xset@itemize \@ifundefined{c@\enit@c\romannumeral\count@}% {\@definecounter{\enit@c\romannumeral\count@}}{}} \@namedef{enit@xset@enumerate*}{\enit@xset@enumerate} \let\enit@xset@description\@empty \@namedef{enit@xset@description*}{\enit@xset@description} \newcommand\newlist{\enit@newlist\newenvironment} \newcommand\renewlist{\enit@newlist\renewenvironment} % , , , \def\enit@newlist#1#2#3#4{% \@ifundefined{enit@xset@#3}% {\enit@error{Unknown list type `#3')}% {Valid types are: enumerate, itemize, description,\messageBreak enumerate*, itemize*, description*}}% {}% \setcounter{enit@cnt}{#4}% \count@\@ne \@ifundefined{enit@short#2}% {\def\enit@c{#2}}% {\edef\enit@c{\csname enit@short#2\endcsname}}% \loop \@nameuse{enit@xset@#3}% Uses \enit@c \ifnum\count@<\c@enit@cnt \advance\count@\@ne \repeat \@ifundefined{enitdp@#2}% {\expandafter\newcount\csname enitdp@#2\endcsname}{}% \csname enitdp@#2\endcsname\z@ \advance\c@enit@cnt\m@ne \edef\enit@a{% \noexpand#1{#2}[1][]% {\enit@noexcs{enit@#3}% \enit@noexcs{enitdp@#2}% {\enit@c}% {\the\c@enit@cnt}% {####1}}% {\enit@noexcs{enit@end#3}}}% \enit@a} % Changing the default nesting limit % ---------------------------------- \newcommand\setlistdepth{\def\enit@listdepth} \setlistdepth{5} % +=============================+ % | PACKAGE OPTIONS | % +=============================+ \newif\ifenit@loadonly \DeclareOption{ignoredisplayed}{\let\enit@trivlist\trivlist} \DeclareOption{loadonly}{\enit@loadonlytrue} \DeclareOption{shortlabels} {\def\enit@shl#1{% \ifnum\enit@type=\tw@ \enit@toks{#1}% \else \def\enit@c{#1}% \enit@first#1,\@nil\@@nil % Returns enit@toks \fi}} \DeclareOption{inline} {\newenvironment{enumerate*}[1][]% {\@nameuse{enit@enumerate*}\enitdp@enumerate{enum}\thr@@{#1}} {\@nameuse{enit@endenumerate*}} \newenvironment{itemize*}[1][]% {\@nameuse{enit@itemize*}\enitdp@itemize{item}\thr@@{#1}} {\@nameuse{enit@enditemize*}} \newenvironment{description*}[1][]% {\@nameuse{enit@description*}\enitdp@description{description}\@M{#1}} {\@nameuse{enit@enddescription*}}} \let\enit@shl\enit@toks \ProcessOptions \let\trivlist\enit@trivlist % If there is no loadonly, redefine the basic lists: \ifenit@loadonly\else \let\enitdp@enumerate\@enumdepth \renewenvironment{enumerate}[1][] {\enit@enumerate\enitdp@enumerate{enum}\thr@@{#1}} {\enit@endenumerate} \let\enitdp@itemize\@itemdepth \renewenvironment{itemize}[1][] {\enit@itemize\enitdp@itemize{item}\thr@@{#1}} {\enit@enditemize} \newcount\enitdp@description \renewenvironment{description}[1][] {\enit@description\enitdp@description{description}\@M{#1}} {\enit@enddescription} \fi \endinput rstpm2/vignettes/multistate_fig-1.pdf0000644000176200001440000004762615040662765017414 0ustar liggesusers%PDF-1.4 %âãÏÓ\r 1 0 obj << /CreationDate (D:20190708173734) /ModDate (D:20190708173734) /Title (R Graphics Output) /Producer (R 3.6.0) /Creator (R) >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 7 0 obj << /Type /Page /Parent 3 0 R /Contents 8 0 R /Resources 4 0 R >> endobj 8 0 obj << /Length 16186 /Filter /FlateDecode >> stream xœÅ}M¯eGrܾÅ[’ ^Õçù$/F¶ `à †¤ÅhHÊ G29†aÿzWfDdåm²›¯{zÆ‹i)xëÝ{NªŒÈ¬Ì<õå×/õåw/ÿóÍýtÿ{)RðÏ,ÃþÏ1.û??|óòß^þðæ¯~üû¿ûÕËo|S×,/ùß«ÿöËŸùøË¿ýÏö_Ï—ÿýæþ饼|ý¦¾üzýïwoªÿÜzóžŸþU\ߨ1_F__Õ^êhs¾Ô»?Žþ“K,»µ—ü¯]âû¿àÛ_º…ò˜}ßByëøåG}\íåû7õV„ÿæK˜e>®¾§ã~\# NÖ_3 ¶Çý˜§nð{£ÇÏkmöc1€8˜Ç£\ipñô 5¥÷ó]ïkWºkâtSí|žà4à¬ÏÓ¼u>M ±8÷Ø÷˜n鮸h~˜o¹Ç8Ò¤ççù8kœF_Fù_[R¸”¸ùõ¨›ÁëQËú«¹VœÁûQíK¦ßñìÅþfÁþ¨}ÁnW»àº&ƒóqœçã4¸¾ê0x>ʂÿqÁëÑÛ‚Í-x?ƒãqÚW¶e<ìlfðÄïý1›/ËæŸŽÇU_æºÖîðxTƒkíwó1 ¶GqxÙ´ôß=±å×tûÝõH;àylÃàxT‡ýqN[Zç|ÔÛáy\kp>J5xÚ6XýÓûQý"¯u±€Ãîèªãr8ío¯ö¸ íšm9Úe\þ7<×™¯ù&ôºpØà»m‚íöo›ûz̹gã¾mí<ìªj©¶„bîji¾§î—ã5åñ?ÓºŒR.øüxôáOæÆßŸøÄ÷_»;žöóuÅì+¨ÖjóaØWíŽá‚ñÃ×òZwu¼f¨a ÇÇãžøûËö™a\½}=/Üüï[y\vþû­ÚÏI›Q[·†1?kŸN`Nµ-ÛQû¬kƒVàê÷¿vè(¾èo|ÿm;Çði;µšž§ãua76‰ßo÷‰2Œë]å.þýýðÅ-Ó_ûif×»¶õ Œë]ûºãz—IìÀ¸ÞµÑ—U˜‹T} ×±$0žßXkxâû»pþPëÚû0Ö‡}ñá¸øý® ‡›ˆËÿ~MÔ |úßÛƒömQmáMÇÝ­êØ·«±Î ŒùXöªM·H~ïv˸ðá¿·,Öì;¸.“U»ßï²Y¸büðõ¾pÁøæ‘”Q—ÙêÀüþËD‚aìŸÅ¬70®Y.7‘¶¸.Ó5‹ÿþ²] ,æÇŒ ®Ï‡Y¯êëôaØçÿË7õw_¶õÑ¿˜´iN!û_—6ÁÍ8p3‡Ï¿˜£árÄà êfŽ “Aæ\ëbš1ÇaV3Çm¿ÌaûæÞÌaÛ>1Çú=bŽÃLæfŽÓ~`3Çe;g3Çmƒ6sܸ 2ÇÁýEæ°Uqoæ8¸›É :7“9ô½Læ°tnæX°ÏÍ β™cÁ£mæXÐy”ÌaðØÌ±àU6s¬›9âS0‡ýmbŽ£ÁÀ9ôCd»Œ¾™ã µ$s,sØÝ›9 –ÍvûwbŽ…a©É6[gb“¹31ÇÂXÙd›ìš˜ã¥%sس‰9†e$s.;7s²¼dŽ…Ï;1ÇÂþpÅ Ã29l¥‰9n-1ÇÂø=1Ç-KOæ¸ñ\‚9nL}0‡,³˜ãÇsÜ´DbŽ›–BÌqaés\dB1ÇE¦s\2bm1ÇÂu$æX»ì¾s,ŒçGæXø,‰9ž31Ç£$æ˜'™Ì±pÍÌaýH̱ðÕs,ì²U̱0™̱0˜žÌ±°›1‡¹)™9Ö¾gbŽ…¯š˜cR&‹9fXv0‡i²+1‡D™˜ÃTYIÌa:ìHÌ!'æ0%v%æ0%6sLZz1‡)±31Çôe¾™cº—¼™cMÓu$æ0eÖîº^Ž_¸e&Zxé÷Ìèézºæ×»0Öï§³â~îy>Æýr¾Æõq>†²ä|w­>…¡lø¼v¬ç¹ðq§ç½ð•׃‘Û•ÖËÂ-¯§…±_¹Þ>²’Y˜Êëµß\o\Ï c¿q½/Œëã~è·ööËÂPºRbå-¥Fw*”·Pz¡4© í±”båó’¬Rž°Cö˜öd0L!{3Ú³=ZØ ^öjáq&{f—}'{·ð]’=\·Iå {¹pÏöta¬ÚÛ!Ï‚öئ)+ý%GÀO´ç¦”J²÷ ;#‹Lye¾t£Ä'Cû›|3èŠÆ$Ÿ¯L)ŽÄg¦$Gâ»…Ÿ<)ó¥[âKS®%ñéÂàòí ½$›0NnÞ‚-Qù‚#¹ˆ¦²ýSÈáþ· ƒ–ž¼z{ƒû„òc\PA'ãÂ* t¤…A Ù3.<Š"ù”Lñ)•þ–rË`rãíwÝç‡T³‹t]!g·àÊ 2Ïî×!Dà8±³)m&ý‡ MÇzÈòrÐlQ|Ææ(Mm‘ØUQ¸Úš³oV@¤Ãd*\B1¦`Jņ‘`.Œé@N›¹q±½6±[wqø»êZI2¾ÂÔPä·ÏW.…‚qþÇË·oÅUÛúž5}?W5ïã2ïãUÖw}Õ·öEuÍŸim&~ëŽ÷ï€`/n bq`îzœÜîŸí7ý5EZy£Š´Žeì&b’´+1@‘×4‘Õ=‚‘×4âg"­Í ¾kà}Ímý÷§Àé¦ÖŠxºkà4àlÏw}6Ý5ƒ¹fcS(–xGZãžxÝ·„Ðj|ÎÀkºeDV÷¤0òšF@Ð쌼îZcÆ$`[ôÆÀ 6MÞR}í?s`ÃõÅÝn$°»QÓö›»™®qí“^6z—³ 3ÐÍM¨a$º¼.˜~P$ÂÀôe…æö›ûqe¿¹Ûìaºú²oÇŽ¸öeýÜ ÀìÙ#uwFÑ ³ Lf_†tÌ0¨ë`nû9àJÀôû…©6èŽ ¹A×0óg€Ã#(Âa ñ¯šA/Ç&ÿÝÔäWµ‰Ë 3@kªV¤gЯ ”è÷[‚0 Öí7ûä´ [ƒî9€Š Ží7„NÛ¼C—ƒçý9$¿Ù0t#t‚=6èjèÃÐІ¡s C —qµU@?ØuŒaèZØÃõÜ:È®:ÉðL~³aê"×Y}­.ètè0ÃGЏfÄÔuœ­Yè6è<Ãð»  ÃO€N4Œˆ"td?&ý^èLÃ#E\ CWB§vìб¾…üz s #BÜ×Ö¢Ÿí:ÙðL~³aúÑ®³m‡f¿Ù0t/tºá‘üfßÑÀ®ó»ÅI ûÝ0 ¿~‚aFXÝèGQÄÖýŒq ø!†{ò› —äǘ¹à'¹Ÿc¿?È0ýh÷“ú2Sð#àG>“Ÿe:~˜á ¿Îý´>åwÁ3 ?ÏpO~ a¬_ø‰f¡ÓáGÆ~Ÿi¸'?Ôpßê~j?;Þ0ýl_(†{òƒ —ä7÷ÉõóÚˆ«1ÇzÎßs4ì?1ÝT2ÇZÏs0¨Cæ0Ÿ?3Ç uMæ8xbJæXóuÙ_gdŽ“5dŽu³M sœ”ÓdŽeª¯ÄË6ƒWÀË6·-˜ûÕyæXðÞb»/Ë=·ïËr—}VgÐَ̱à¹E¾AÙ9–™÷Mæ¸èP‘9ìÛ¹pØ7ssØßÞ›9â«ÀöCc3Çuð€ ÌaWU6sØ5›9<s\´NdŽK'y`Ž‹2‚̱®Ž˜cÁc$æXx¤³º~Ér‘9®®,˜ãêOWÃãṈpK¬aœ}9.F©Å 3b æ°up$æX(2Çz0gfŽ…GòРò‘9.E,È…¬˜cá1s, ŸÌqFDÌqÞb0ÇIi%æ8yŠ.æ8# æ8/F¼È'=R1ÇÂ5ÕõµjÁœdŽ…áÑ“9î)âj¸¤³:Û“WŠð†¥#s,Ü[bŽS–ŽÌqÊÒ‘9Nž@‹9†¥$sœ²tdŽSLIæ0µu$æ0}Us˜¢:sHR‰9ÆÙ!™ã¤—*æ8uÖKæXãÊÌa¤&æ0‰z&æ8#Ød޳2ÂDæ8u–KæXJÌaòNÌaJ+3‡)­ž˜ca(2ÇÂŒÈØ<Ûs·˜¸Æø¡~ŸEøÒÙ á#E€ ó¬×k½#ÝψûÃý.ŒýÃùÚŸœ/‹à¥³OÃdVÌ÷ÂXÏ|£ë÷ð¼=O‹Ð¥{·™ÖÃOg»†áÇzZøÎJÅ–õÖã iÕz]Ê“ëyè€ë}ÄþÁ~°ÈÎö‹ÅÌò~q¢ýg×ÜŠ9i¿ÚÙx:{7|çý>¤¤hÎ'4†a¯hOììÿJöfá#E\ CiÒ^Ù™êLö̦)å&t¥ØÈšã™"®†áОš$IWÃ3+y;QHWW'3ÙóIÏNö~êy’LiÍÄ&rZâ„;6ß,ŒõE>šÆE)MçS’™{IÖNÍ)zíLÎ!$±exä…¡ž SNÛvö¨ Äöày—‚8 ‹‘B]§= Ml=‰ü†§/€I=r.ìûŸF\á+|Š€ë;¾é“Æ[ל%¥WvÜ´‚‚¾-ÓçÄiÀô#§=`ò*¬Ít¤À$ñ޶â.lmG*lÕ犽¦061€¡×4àç’Z=d–¢œ°çº\HÿøXž@Ü9†ùvÓ BåÛN‘Üz> ÞaV݃®ûnVÕÇŒ¹¦›EP5fƒ1×4€FrÝ^b À>0èû»ÄYîŒ=d$ïÖw˜sæûÏ(Õ­/v§1ð½÷®´›ìlÛHyõ}ot?ö9LC·&úNM2íPvˆÕ¥ÄÖÈ ÛfØ*ÈTrKVuì;gÐý)XAƒnç`#îÔ¤j'Z;Äêð ë»á‰m®Án•*2åe׫Òtaõ©ŽÄ ~Uw0†A_Oü¶£\ut.òû=ƒ© :Á‚Ç zä,g°l´©óËC<÷‰¥AÄc] Žb5ˆüXgfƒt„¸ý™¥k ¡â7Ì£U†$ Ïb­‘Ôááú±mab8 [QÑÁìFÈ Â§†ð…02ŒÔ§º®/Ô% 9Ú7Ö³R? Ì\¿Bȹp3 áagŽ „Ÿá#Åû†H޲ážB¬†™DëÂÓpI޲í/8N®†¯”šä,”eÃ3…Xk¤@8î)•Á0C .¼}?Ñua^ñp·ÿLáîÂÞð GÀ…¿a„LážÉq¨áHÁ±ðŸI©I†[r” #¤ ÇÅ.ÏŽM Ç Ža¬?8Fn®RˆÕ08V†GJM2Ü“cf뎛a:jë½p?Àñ«ý~JM2|áûÝq4|¦«a\OÃpìá˜F`Ž«a¤–À±uœB¬†[rŒ × ‘W„Xk÷}÷}0QbnO1Ç…Ù$sØâ¸7sh¯Š9Nª>2“rÈö»Â·¯S2‡ù?e3‡šïÍÊW#sLZC2‡eÏí¤Vƒ×±Úº¨‰9ìâv9„Á¹ç z¢™c2£›Ìai„m3‡Ábuxnæ˜< "sh0™C_Eæ˜} 0‡òɺ*2ÇdlÌ1ùŒÈwˆÕàØå~ûÇf%6’9 &æPš#™cÁ²³hlžï”dS·Ëæ°ç™Ã’ Gb;Ì8sL2¾˜c*)Ìa93ÇTHÌI“dŽy>ÎÕ8!sN.·”ž˜c*=žÌaþQ ±>2sÌC‡w`ŽHº$s„KNæ°E™c2®.æ0œ™Ã»{bŽ©Ã=2‡%i¦«ãt8gøJå†ÏTá6…dªjrÄSÌNæ˜:<$sDˆ‚Ì1'C|dU‰9¦ÉSéýdŽH%sÌ¡$D0ÇŒ+˜c*ýŸÌå:dKÍÌ1u˜Iæ€Û̯ÙÌ1‡B~`Ž©#2‡%•¦Ã9Ã%ÎÙeâù9fWÈÌ1&sÌÎçCæX˜Læˆò 2Çì<Œ$sÌΤ;2‡YÜTaë¸Iyq|㋾oáš’Z ·|=MI¾¼Þ…GJj5|äûm aq>š’9_mŠi1ŸM!.Îw“råóh¶z^íx ±Î!uÃ,§ÁzXøJIІï”ÔêÛ4¯·FÅ®õ¸0˜›ëµ©<‡ëya²1<Ó‘ÍÒ¶GMJˆöª+¤O{Ö£(ö®«|‹ö°K¹Ñ^v%åÒžö(ƒ½]?[SˆÕ0”íuWQíùÂô`ï{}JÖ°Û*)Äê·™=‘ÞžÊï ㈋|dNwK|Õy<->³ÒÒ–ønaI‚;#âË.{@>íLÂß. ²w漓¬ûxr;%‰Þr°vˆÕU_r/ì;Äj0 ŒÎC[ÊË]w­qÒuÐ éÒuX aÓ¹'){:)“¢ÈÒØw>“A7øTåk”[2ÅØ‚îçPªY†»Ÿ†CÈu:Û”yýäÑ9D Aÿ[HÄN¡A©¿¥¼ì̦ø´ËHAN£Aáª;¢¬ÕíSô.è‘Jb«H‚¹óˆ‘rºó›bÛVK’â¶ø2ÄóT›æ[eçQØNrf  `×®y‡–|æk]û¸Þß-àµAÖ_ø®OfÕ¯¨ƒ@ÇöM8"ZpDj! ê! »‡€F¨‰€Fì&g¼R9ßøüð2lUÃØ•þp³9°+ KoÀ¾¿N7ìyúñ[n s¼§×Æ÷ïh`ëó‹úÃÎK u$†Ý#hÃ¥Ù\BÏozÌpözRîPšI}`È´éÙ)¶±^Ì5öXY›Nj†ñ{D0ÌsËfõšÀ®€i± »GÕPßkøÄçÝËÄc­m±£­÷õØ]µã@9s’Ûq¢Ú‚±ÞfyµÀNrm1³•±5–á5d§vÒoȱ7<‡‚4­—Ó{D¾ñ÷‡¯÷ƲÇvz^®a÷pÚ’ ×·ÉÆü^N*†ñ<-­¯:Æþ¾\›™½ÀóE®ža—íòP„a<便zÙö¥™vEßn?æu{ä×·„šwyáÙE»ýAxç~·7²ðzvŒ÷5ì:¯Ýîºxu ¾ÿòõnÛ {Ñ‘yvÿ}Ù³ì¿ß—=›À.~zñl+ž)ÀöóÆz³Ú‘Ü€O/—jŒ}öeÏ °ï—^ Ö;c§½VØOÆV{õ ºèûõUú{ñÎp<±Þoœeôê¡ëýâóÕ«çÝ:Æ÷ß^FÖ îÍ]‘‰Ð©a—W†ÝþõæAÇ~=ͳ§tùÆð,/¯‰Õ&†AñˆæäŠÃ0Ë3†õÁ0²àd³%1Lc4<†…ÕÁ0 &Ã0M/†B:FU sðúÄ0¤f0ÌÁ(†á™`0 E~0 âƒaNÞ¯†y¼Á0ì ÃBÕ`¦!Ã0h scÃÜ´b®‹aÌ‚—Ä0aÁÉ0>­Æ,ø•fa2¦±ð_ Ó˜–$†ilÙ"†i<-ÃØóï™au†éˆ‘Ã0F ØW0 chÁ0íý^£ýÕõ®ézMè~3t¿¦ˆff\¦|#3!›{Áè‡æŒH1PP¡…b˜RT“ÏSŠcâÌ& Ï8B±° % ÕCñLÚ)"ÊB11{!ÕÐú¦âbãŠPdƒû]Šiâ¡èä Å'û+EÈjÁPŒRÔR”,. ÅÙqrŠ´#†Š•g¡hÙþ.ì‘øCöŠiÍaÏ¿_ö®É¾Ñ¶·y£–=e› °·â;ÙãÊ땽®²ï´çÌ{ÏEÁLf ¾‹O ï—|Syº/>ªlù$¾²mù¬Þú{ð]ez¢øpaü>ù²òôY|ZÙ›P|kúª&>}C¾^¸ÕÄç•!Òð(yÆçAM)³yÂcå_x´ 7<^ñ»°“zc6wš *ît߉& [ÂN5&ÂN6AËÞÃrÀ˜à2‡¥0CKà–Ä—ÅÜ–Æ<}X"Ã`*X*øX2Ã5y憡„` ]@¥Ø¯ý<5XRÃWŠýÚõ²-±í,zân© #¶Kn÷‡ïƒ¥7 %&èåb,LÑÃ2ƒI ƒÙÀ4& ‹™Às‚© _s3™ÍÿHL×k—'ïLhøLž¹ Z(0©aX^0­?ßÄÄ&«S>Rì·W*s2½a(+(Ü-)ÃT&®$úV"®4 CiB‰˜ SC©öS>*™Þ˜AN¥cx&ÏÜð=¶R²õÈ,–áóÜJË ü”˜azò®Ô C)AÉ™ƒ‚ç¥×u6C%høN±_ÛÆˆTAIv){*Í.Ï€J´GdJÕðv%kJJ·7í7(aÃ9öÛ# %møNJÛì””xH”zØR*y/lçîJß*ákŠýÆ~‚§ÐuJKOÂ0=m÷4¬nJ žHWì’žŠa(x2†±áéFd žá;yJÖÔÅ•=)ÃôÔÝÓêŠÐ3œ=sÃŒ%»'gøJž^× 6=AÃ5yæ†{…'Ù•AOÓðLž¨—áïÝSÖôd ßø>÷t{g䔞°aÜ/<å®lzÒ†{ò´ ü½óá‹ývDã¿ß # )†™b0Lcl$†íƒaÎg†©,1ÃTÞ‘Æ,䙦ÅnÁ0U+J s+6L†‘ï$†at>æ¦E!ÃìïÃÔ¢ÓK0L­dX2Le湦¶§ÓEÃØ!d˜*$įB†±Ë¼ÃÄé*¦2=#æà|‰aX‚ £Ó[1 Û;ðKY0 »þÃðôB Ó´cÉ0™òb³Ø31Lkò-Á0æ«g†1 }&†iÌ(ô!FÃ4Î’a ƒadÅ0Ì †Ñ鏿|Šýº…}b¶Ö †QlV £ùÃÜŠå’ad1Å0·êTe!® Ó }{2Lg\1ŒòÍÄ0]¾Æ,ZK c,Å~Ãb‰a:KÆÅ0½)v†éR dÅÅ0ùŸb勉aúPì ÓÙU Ó‡ ÓÙTU £ª11Œå#™a&׫FŠV 3Å(dÆâ‚a&€æÐi!†E‚a˜/ ÃöäÁ0T”Á0‡bd˜ã-†áú †9Û%ÜȖ†a¾y0 ×k0 K¨ƒaX CÅ óˆ`–ÌÃ04†gÁ0Œðƒ™°ÎæñRú¾Ænýž)”3]Ït½%üºŸÆ¾‘ºßFÅ®ùhŒei¾”ÿªù´³™–æ»1ÏNÏ#b×|^f/Žô<[ì—ÆJ¶Pl:K“¢c‹‡P|¬T EÈæZ¡;íŸ%û®…âìŠS‘ò¬#+ËÝCÑ6fHñê¬QŠ˜•`¡˜YyŠZgGRÜE±b*r6Ý ÅÎÊnÙÛª³/Úãz?Å~ ƒohÏ#Û†öÞ²q2ÔKgƒà‹ð¨È'UÙä›Ê¢JñQU¶ùªj}Ï"vJ¾[¸¦Ø¯-{d¯È#Sv–<6y”òèºb»ôøxv!ÏÆÂc¬âsz”Š…ËãÔ|S/˜ÞßCOX„!Å~ÍÃfìz¤ÐžH¯¶øž)<’ÞYüL=Tdÿ©— _®;_½Î&äñ7EžQÄ *{ŒÅú¡}'½h˜±\_X¶­gÊ5°m}§Ø¯aæ6øÆ·m~§l9ÃGÊu0 ý=lx¦ˆŒÿ}ÒÓöýWŠýÚõÕ§ˆOåzRD¨sÿQÏ—ÐóÔûLòˆ+uÃ_(¬‘?¡úù'ÆÿLì÷SôVxÿW}Úȯº+(á4º+ðóh¯À©½‚F¨¿‚Fìþ ¡ ±,0ΫŠ…wÅHZ`x`”W~W‹…¶¢ÇBÄZÕcŸ«É?ßMtKj2 [Ú]4Bm4b·YPXY}VÞ}"”ÊFŒÿ¦iA|7¦…áß4áÝÀèoš7i΃¿¯íµÀKÚÝ&°5ªÕ¸u¼§î­e¥BG:v± –+mM«`áÖì(5ªÚš¥HìCÉ­o,WrÅ #q¦Ã*Z²+^#ÓcTÓ䟟ÛtÕ8¦„i«‘¨ Ógx¤`ocP˜N»Þ’‚½†{rÅk»Â4×pUaºkã´f0ØM¿Wø¤4¬ÚâXЩÃ0-ZjHPÏ÷µ©É0Ó¶œºj$¦‚Úìyá~@}5‚‘ F¯Hš›:kH9l±(•#õzi\:–5Œ`=¨»F¨=JÝHý¶žHõ. ª¤+¥C”²QZx)[rŽt-¥ayÅÕÜÒÅKÕú–6^ªV¶ô‰R5J£ª¤ªÁNH«‰¦^¾?®-ͼ,Û{©Ú±¥]´*H?/Uƒ+]PÚÇîR”Ž^º©éÒ²*±”Ò³ª5¥©á‘\q/evi%/”¾^ÁWº ´QǶε±´ÒÚqrÅ«I)Í ƒÚ!ݽÒýBÅßOAéï:)Øë8%úz©\JÃ2 )×ÃqJKñR:¤µœ(¥*¼¸65ÒÂàúx©\¯Š:­¢4›†2®JW®•ã”vãõFøü@XUZ׉²*×Þ¤ãäúy)_r #¨¡|­2 ®¥ãäŠ;NÁ^ÃÀuuŒñ7Jë˜ÆF××K¼m(Í£}¢ë¥„t­ ŸÉ¯ ½:Øë+°ì`¯¯à‘æR"Fâ\ sr…ˆaާÄ©ìd˜6ŸÄ§ë&qZÙ%ÃD°™ Î-¦©Tƒ ³ÇOû¶”èëÅÂ31Lã+ƒa&Ä0JtÃ01,æ`ðP s<•’l‹(†ap'&‰É0§œ!2ŒœI1 ƒ#Á0-ˆF‰b‰{1Ì­Ä`2Ì-g¯¨¸öN‰;n1’sç!{}Ç߉a´ƒÅ0½ª c;*%úÆÃØ ¾Ãt6ÒÃ(QS ÓÙ¥N £ã1Œ)²–FõŠb%ZŠaôV1L?É0=JMÀ0¯ ÃôþìõbÚÌ0]ŒO†é ¶a,X:Ãt¯“aºJUÈ0] ÓÙX Ó™"†é:.'Ãèíb˜>žŽ«^š 3ŸJI§àPà¬F¥1b•R‰a¦ŽÉ0²b)1ÌTâ"æ9Øëxd†™b$2 Kq‚a¦ŽÉ0t^ƒa&ƒ¥bç‚aXR 3UšB†™ Ša¦[«* YÒT }§`¯ãÜt|d†™J&Ã(1U #,†™J´%Ã&Ã&Ã&ü…u<­ño”Ó÷5¯ù{:LÔõ4–Oëzuü­ûQóݯcó|Dâ0ç«Ïói|t¤ù6ûœŸGc╞W$óyJñêy·çàØ­—‡XO:þ×zkl®¢õØØ\Eë5Òy¸žŸ¯Ö»µÚTpû%J͸ŸÚÔq=ö[ð÷c$s¿6vÒÓ~nl~®ýÞ¦‚»#šu¤`o4óÅÊ7v…¢:¬¢âe»€PÄC‰¼TÌ*Õ”¢Öa’÷ ¿H‘‡}¥bïO¥{îÉ·°ßô¾ÓcèJ7¡G¡`©<Žþì5ü'Eé)òhü–ÇÓž‚½îq^‰ÏÛ¦…Gé0ô¸*ïGYÕa'=6+åÑ)X'/sé*ýB£Ò™äQòÐãŒÒQè‹ àû ', .»‡ŸÒ›<€Ãjè•ÊÒ>é™z)˜ ½SùJ1é¡(´¢^ª§ôôT=ŸJw çÒ^ëÉq¤D_Ã=nYD,¨÷ê|:ü7Œë§^¬ZßÔ“&K¡?ÑÐzTÄ£ó0T¾*b¢õ£ˆŠÝqÑá‰"2M…tŒØ4îwEtTJ«ˆo©×«ö3õ|åá–ô~eÓÎðªÒé/ 6o‘?ÁBð7.¬·ìõÇúiš<üÂw}¢p¯~EMÆå´Ôä#¢ÉG¤&¡&±›Fõ| ÇøÜó; ã›Õ[U:>{>£c{þÝSûõ4ïdjØK*2Žûõ4CP‡—àlì.TÂJxô}ègæ¿WW”ñ=‚£{~cŸÞQBÄ´·Ñ'JŒtý@ ’î¿»¡qì÷k]ÝŒáùŽýû‡÷|ãuXþ<|~ÌžãsÏ_ôç‡Ï0£žïðC-þ¾ž†É}}øüš=+i½L?÷õäß7=ÿÄ×›_ïtCæã¬w¦Mé.è^¯x »c¿ÞéÖ×·Ï^üàëßÿþðŒ}ÃÎwãðÚWß/þû‡×fγŠqø!Ší¯‚ïóCßo~¿‡¿¬Í÷£ß^QcØcÑ/ôýë×{6¬w¶H ß8¾_^ûÍ ã%2›aÈ8Á0HdÛ ‹$†aÑ{b2æ ÅÃ0¶ ÃFcÁ0LD †a“€`I‹aT¤M†QÛ1Œ1RM c‰¬53ŒÚtˆaxz s‰È0V £Ä91 ÛøèÈY à s¼Å0,Õ†ái]0Ìd¬E ÃØ[0 }ï`1:Æ á¦²ÈW SëÈ0•¯DÃTž^Ša*AÅ0•ïÃT¥¦“a”-†©|;‰¦6î2L¥âÈ¡Å0•±]1Lå LÄ0•Eùbó…FbùRb+Å9ÃT¦ö‹a*ÝÅ0•M0Ä0•±h1ÌÆ`) 1Ìþ ßG†1|'†©€ cx$†©l£$†‰û#ÃÄý“a*O³Å0•%Å0•EÖb˜Ê";1Le)ƒ¦ò]`b˜Ê7׈aâù’aj—Åè͗¦2{A S;¤¦26/†©|G„FmÁÄ0jK&†±õ\ÃH!Ša*ß$†©|{½FmÅÄ0–hw&†©ŒU‰aÔvL S™-†±"Û;1LeѾ¦òô_ cû½&†©<Ã(1P S›ÃT¾"A S{ÃT6CèíY0N}_x:ŒÅ¶`Áh• PŒW‘hŒHŒÉÄÂ`Tbã2vŒÌ·¬c³(?½P1Šñ‹ž7O«C1­* f—„â`)[(’"AÅÂÓòP4,ºÅC  B1­g**òW(.™‡"c¨Pll²ŠŽ±»P|Ìž E˜Š10e`*Îø>*Òø=*Ö"{FEËì‚P¼º?)bž-†b.o)ê"NÅÍØd(r=)vf#„¢×ó•⧇ Âcà»-ãÐú“ÇÁ³ÍðH*÷—<žu†GÃwi†ÇÃÓþðˆXšß£Ããâ+6Â#S“yljJ#N®<>•šÉ#d›ÆðÕ$F%ƒ‡ÇÉX{x¤Œu†Ç:äÁÒ£ }BwJ@¯žÝIÏ6 Þ):k¡’‡!½TtÖD=U¤g©·Š ¨Ç ÏÊ¥× _‰zޱíÐ{EêAewH/6E8¨'Yêz³3b¢ˆÛ FDDg‡Š˜Dz·Ò£¶Ø9"6ÔËÌî =ͦ^¡· ¤ÇC_S¯Gˆzž…)¢4ÞŠ8A¿oó—"Vþ<’¿ñv“Fñ>I“‡_ø®Oû&Œ;¦&M8"5yÐ5yЈÝäA#ÔäA#v“ÆzwƒÆ‚wƒÚ¡¡XpXïÁXð»š<èÞÕäA÷¾›²Àd†»u¦³Ã~Æz “Ùœ) “ùœI-àH±_È|€‰½ÄãØLí%"‰É ÷ä™{2AŠý¶[Y-P †¤$ ÷û5\“gn¸¤Ø¯%'@iCɆ'¥c±U(!ÃP‚PJ†û¢»Y²C¥e¸¦Ø¯á’”šã²•œ%GÜs+=Çu+AÃþÞ•bÓ •¤ãûMØ•h®T'Ï|”îþ=(á}=PÊŽ¡´ J|ØnJÛ+qÇø¼£„ˆYTò>ˆõ(Abž9=Ÿïä)øó@¬×= ^ðDÜÓðç ÏÚ=OFg2°ÞYâCOÆ0¯—ä™ûzÂ÷»§d¸ÁsOÊןß<-Ãð<ቆ§ OÍ0"Cðä|}ãï}㾓gnû±f÷ ·äIúþçꞦ—X¥Ø¯ï7x®î©¦§îèûž«{º¶ñ¼à û~Nž2““6ŒÈ 0L¡’a§Ø¯ßïÜ ãóÑ6ÃìùÃ01Æç÷Ü ãón†ñçsn†ñ"Ùûõç™&Æ0cLJÚrÇfoÓuo†±õE((¢åK¾È0®àR¬Ë×çÜ E¾d_Ïs3Œá;ÅÚ|ýŸ›a¼h¸o†ñôβ¦Çé/Æ}·¾Æ‹Ëf˜§×`o+67Ãøþí›a #ö†éqº†ñýn†ñ¢èÄ0n/ÆfÃX?`/ªn›aÂÞa<Ý51LÇ6†q{um†1ŒÓs2ÎÅØŒéb³ëb^ª횊eƒñ.±‹/1:óbž¸uáv$ƽ´^ÈÈ×Ôé*{™A2<}á+3þ5xzMEp Åz¡.Æ®¤(.) *Žk0VKErElŠåZ¿P4óú¥x®û*Et }@1]ÚŸTT×Ð~⺴Ÿ©È®®Óu(¶«?í7Çi?:N±_ÇmïgÇeïwÃ<ëâÜŠtc(Öø{*Ú‹ÙDR¼ñûTÄW(b(æ‹ C¥¨/)x*îK ŸŠ<拊ý Šþ’¦âçCàâ[Ìä1\lx*âb]…<[/çæ _oÙc¹æS6‹¯ß¹ùÈ×{ß|åû£o>óý36ßù~;7ÆõÓ#»”§NíRÞ;=º‹¯ “ÇwOÙ@†‘­DÑÞª–²‰ #vHóºäÃ#½nyÀðX/6Õ–gáñyÀôˆ«ô=æ¦Ø2=ê&ØõyD8[†^ ˆzŠéñ¡·ÂC ‹¦ Ôk®¸SÄÀ<ðžôžyðh ®ˆÞGD‚MJ"b¡³mE4xÖ'=ZT—A½ªìéYÙãлl“z¸I_3"æI±‰ì?èm½`"ô¸²Ó¤×yÖzž¯3½¯º•qª)W¤ë0ÉŸ@Ä%ùöùÏÄ~?E“‡÷Õ§üªÉƒN£É?&šÖ;lÄ×å¢ÇL>/lË(¾/Š0P½/™z!e©'Ê­B#è ½'<^½ÏX± ±ä13Q;<îÊÒey䑎EM1£oJ£ÇÏÔ̈èmšŠôg½…PÔƒu¨° zÑ )¡€ž¬ó9¢!Jz´ò0PzÕÒçRi´G$ O¡w-¢}L=¬ô8ée›¥§ù¶¶ÐÛ*Ü’ç%B¯*¼£žWSé}•þÊàÛ“¿€ÃíO@¯oc¾Ýäaø{YX¯­¿Gœ±ÞW úÙ€ðµ&;ÿk®Ï{¿éÛ7¿ú*}•½;Ù‚Éû_û†¿úke¾|õíËý`ÿ8¼ü}¡G÷õñÕ÷/ÿðÙùüeÙÜÏþõÇ?~ñãÿúá_¾ùáó—/ÖÞûìÿ|þO/_ýúÍøêÎÂ[]’áë~yÔ«gõý_õ§O«u•)3ÍëgÿÍïóo?~óõç/_ýN“ø©nû­sˆ_ø¾_õêi|ÿWýéÓhüùû«åúÿ¿ç¯=ŸœRSôyÎ(È29¡ '„iIù–ç߇¿Ýò#ž¿¹îu~Ìó·â·»|ÔóË¿¶ŒŠxþŸnËxlÄ#e.?>ûb ‘W0üñåï4å·WoœaçÐV…Ë?^}àßèÁß~àïxm%þv¼=íŸf{yUãnènnîˆÏ£m >O]ýóÝ4Ð?Ï=ñy´ Äç©c ¾ÂÍÞýÿÂkÌZ Žó#טõ××G®1…ÜýqkÌb`³|ܳøê¬5¶ ”ýçúd|åÉø> endobj 4 0 obj << /ProcSet [/PDF /Text] /Font <> /ExtGState << /GS1 11 0 R /GS257 12 0 R /GS258 13 0 R >> /ColorSpace << /sRGB 5 0 R >> >> endobj 5 0 obj [/ICCBased 6 0 R] endobj 6 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óûendstream endobj 9 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus 96/quoteleft 144/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron /space] >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 9 0 R >> endobj 11 0 obj << /Type /ExtGState /CA 1.000 >> endobj 12 0 obj << /Type /ExtGState /ca 0.200 >> endobj 13 0 obj << /Type /ExtGState /ca 1.000 >> endobj xref 0 14 0000000000 65535 f 0000000021 00000 n 0000000163 00000 n 0000016551 00000 n 0000016634 00000 n 0000016786 00000 n 0000016819 00000 n 0000000212 00000 n 0000000292 00000 n 0000019514 00000 n 0000019771 00000 n 0000019868 00000 n 0000019917 00000 n 0000019966 00000 n trailer << /Size 14 /Info 1 0 R /Root 2 0 R >> startxref 20015 %%EOF rstpm2/data/0000755000176200001440000000000015040643250012411 5ustar liggesusersrstpm2/data/popmort.rda0000644000176200001440000003635413416410274014617 0ustar liggesusersý7zXZi"Þ6!ÏXÌæwN<®])TW"änRÊŸ’Øáà[áß^ ·ÖnŒÊt¯°@$Ü"áz©ÃPaô–;Ìt1s69cÙð´[û_ì›<B?Y*F‚ÑŒMˆ}|"¼ÄZÛ¥·n›\ u1D¿6o«<´Ç-.žéVÝ’Ë!Π"†P½ß¸HiÝ››žÀÊ —ë˽ä6o¦ »oyšÙmÕû»œÈÂh½˜µ‹„ï…†KWÔ —g…ÛÉf’ÔUÇX¡j¥kfgS$Ê Ä,¨j⮎.˜dÚ k¬¼]…üÞ­(p»ÅhÑô\½0x/ ï8 st™¯5bž²žÑ‰{ƒ b×R¹÷+/Hñ?]);|nLÒÎ*¤‰*ö ¹(ÛÌ‘†ÏîZ5 _ þíðKrÃ}®Nšk4Eˆ!;‘Åô ñ¤ze( €¯]!¨p¶5ž!‚­Ýü­™†îE턺ýÿ¾Eb¿œÊšÚËlvH-Ó<'V`€&î†zÕ dåþ©nÁ`^‡X„^­Ìa¡èê©ê~u^™ûA&^ÈA`‰a…”ŒøbŒ”o*Óµc=5¡Ô+nÛ}/È"€  t(Ï:3sŸ9¦ð*o§×]É áœôl«ÆÜO³'Z¾K‚S©ÅåÄÉÝ”ºkÓc¦à¦g^âó&‹™=¨}Jļ}²l½ë$LöÊAMÝ{Aï¬fkE2®®ìÖ^Ié‹:±›e8ÂÂ6e~Z2ãì–© ®€FœàñHS(·tž/ž#äD¥Î¹àÚq3KJ`3W¾¡t7$MÝÍnë®]0-½¬ÐïÍ€¬'˜êózÅÞþ,´U}DMõ„“%!†›]„'»½½#qS P›…LRժŅcÒÄã­ÿ:‡ƒkY ëàýï+˜ÿ´0´…¾Û^g1í…È EHw½xÂTjÒEy)•&Þ1^MSÆ×4¾Äù¥_IÝejrÓaO\ÁJš†':Lï)„û¸A&(Ë™``ç®?p¾œ½Êàc‘—jŸwî¼·_ÉŒŠãB—épÁ?ÜÑÞ3=꧈®„Ê:#Žâˆ¼]›b\; ÝspŠdF-¾À.Í3P>Y{2T6$šPÔÔ§Â|`ÌZšÑs@³êÔ\7ÄÃAÕû+U6ÎÌ ôbBµÜUÕd .q%65ñúCñc&´yÏMÃ:o!Ç7"~,}x]¡>úÔ' »ãUÔñ¤õÏëÓ^0¬0ÐÞâiõ~—ÖùøÇ^ÙàéÆ9ƒ Oø7dÐ,ltDšé-Q™HxcCÎòƒzÔwàC`u¦@p–©ç-©½@^û˜ ÀŒŒýÇ5,Ì·>›~k6täù6æÈ<æf8Õµ9lú<`Ž0¤ZýT5!`Vµ‹gîEPE`’a”e#ÆŒ×Ñÿ=V¸§xr-æÏ5 &|ô‘°ÝrJˈУ€žë¥yœeºSÕeÌÀû°{ÖÚQ¬écì¨:›oÓX2™§7lΊ asIÝ’8¦[@t_}À¬ åŒ×7î.²¢êJ o…Þ€Ï+#ùpoir/þ˜Þ(ÿBI ÿFn–!áçR=Hq9OÐê†@J5ÝVZåÞå,ͬ±™Åž6’™ËN#»âê‰.zž{ÔÃŽŒÝ¼xÓA¹xùuɳ8I»¥è”’$ˆ öÎïGÝ/¼?¬gI50nýfÈU¢E¢At”h‚œäü¯5©@-.f¼$”«üò,ÁˆM+ÿm+:Ä«,ð¥M›(4S §êE¾Ø"ïxÊ W£ü1¬ü×)3ã´‰32à(÷Ä®»Àê/Ç%႟jH>ž¡©áC­Øà1^°é£åoîÚÍz\í¾¹{rl”K$gŠˆŠ«ý±Œøû‚iWѱ¦NNÓnrÒyl•»&½ö$¸âVeŽ®TóÄÌ–AŠˆ6Þ’# ý\¯3˜§4ÓÛ³½j)2Y2ž=j"î@èýY ºÉ¯Ž¡¦©Å·"~â†Xon-ÏÎä5Z7ŲüÜ C¶]#3£¢ó‰jVI6aªYíÝkaýMÊŸ¦C?Éfà'U0Ș óJŽÝ+OÄtCÁ¥`Õ: «á­Å¬}iYšV”ñ H[ë£ñÖæc¬‹Íß+kiúWw©åáW­ 74Jç}ÖÖADþ ¾(Ü03ÊLñÜ?B´Ƙš³€Gîº £éÀë¢óØÅÚŸ$”E9naü—0œŽN2Jù¿†ã@ Xº!Ó:…FÊþ^ÝLZ¨´™wêc+Ž'!ÈfÁã©Ì÷yq‰B: µ;êlïužR*F˽9¯šýïÿm$Â~£Oœ5mg%ʺÌvÝŠ‡¨RŠà÷ŠBiÔ ŸæNçUX?ÔêævC¤¹‹Juš=¤ß.=Y(½ õœýí6ƒyÂÆê¶1w‰æëc-³NiC¨€»ü.)Œ¤È¢2¨§àÃÌ ";GSuáú¨pÃSø5ŒÐ””…=ØÖMü–t ‚‰îl6ÕRel@4+Ž–É`@ å'á4b™æ_¾éÿí¸=Üùó~8Ä_ë €%5þÒ’¦>&ï¢DàÆX÷é®Yx†?Rù™Øh"d…é‚ 3œ1ºGKëåÍBòS3Þ:˜‘Í£k–!é•_·'Â^¶Ì]š `k(PÎ[•r/õˆå• ¾…ÈWðÎP\|¹SSiÜv$ÜöVÍGÉÁþ ?¶ÿ’Kñå.Uûበ‹@jà|``ªÛk!lŒ÷üwÛ¯¥ªbù¾ãZ´6¸àµF)[Dü\ôwSÿÃr+tÀ³lÞ›y2ÐÓvÈ­ÞÚ)g:µ*âG–b.¡Ñ„¦tØË/FqÒÀT˜,ßáI’­éîÁcÂof¯b÷íCë5r>Ù¶«”ã>ÁKÅDûà´8Šç^gx‘“°¨¬]‹vÏ÷¥vgyŸòÒsÈ/6Ô<{ÿá5ð Wõ˜ø„&Í`?@kH§Ø$iŽÏŽ‹ŠI²@k)]–l'½çšFj›ý/BD$k–ØÈnsu ­ÿ¡}:S´ä^³BU,ìO»ê¿½ öÌͽ MZÁþÊšÂÌ?DÝãvù•šÌgŽ:Ö–F2_‚°ÂܳрZé‡OÔE¿›±6N¿ ”,‰Ã "½}nʽNv޾Dw][ŒïVâ¶4Ç&c·|)Çþ÷¿ªàÀظѭÿÞ6¬UáœãÀ^Ã}…€ßÔ¸;<ý>$¶+Ýü#™"í—ÀØï© ¥7ê^j6Ͱ®=¹Íò yÓÑÛè‰2öoóAN¹Ðœ‚ÆÍùþ' 8îÛŸä¥kZ&½ŽŸEòC›.10 äc¶YlÙ GC€&Z¹>‚Œld?˜ûãž<¹Ï§wL Ÿ$’Ú*”Èàc†w¾UZ»§Áu‹ n!GèHUÙ¹™mŸ%ÎÔLÕ "Øî¦?‡r d›çRsVTDNˆWñضƒ_9€&`ùV3k<ЮŒ n¢Á¼Ž)÷éð¶¢±)¶=bu6ª°2t½Já‘Ôf­†‘s=ÂX6ô†¦‹YÚgæâáŠýíÏi:Ùê¢7ºÔ†´€rõã¹Ç$²0ÇÒ3Õ&`n1ï©þ¨ö¿ ÂŽ¢~5Ag¡³yCZî QÀ\—Ä8žnÌÇõ’V>õC”l„»°ˆ1!ò"£ ±z$éþç b¦wdÏ#hE– S48ßÒ2÷Í>)q ”ú)#¼•ä–‹7Ò©â›jîòGi}°¹H äíÀCß<*Õ-ü4ˆ<—þIöê{*ãœ/bùãí.¹öƒ!ïŸ GäóÆ€k*ôПg_ ö+ÖµŽŽ/öíá¥Ïy;¨ÔB œZRýaqi€h#ØËÐî-ÜúÉ£BÀà:†ÏÚÏ;×Ë*H8¿×E)$Jnꔿÿž»ÒµÚ¥æüü=FÑ#m{ïO¶~³SAKKò÷/}G—pTŒ?ó=jŽ–ÙŸV<,F¯RãD^Q(¶"œàÖa²H:EOi¼[Féãç3ÆjY÷Š( Çþ…×ýä‰N„±…iˆÀÉ‚ÆÓ?¦"ÍŠ>ö’ÏUÏéZåé¹ÝüÙÿ§!63Èú…þÒ±ŠÅE—¯¬3fª¬_ÒÜl?WOd%ÜØ®åËzNAÍÂxÐöû•XÛNK?ÏËÄþC,‰µmikèÚŒ%SK-÷àÐA÷37UÅhþz[t®·, @*h²ÑG#Zóæ»ÂÌ×Ŧˆ8aªèä)|ƒ™@ÈllyÌ!HðpØØ^š`G+§‘ZX{B‡·GÖ ˆs Ódîì•%ÐK0~#šÎÒ;X#l¼: bQ¬€m ´‚tC£ÿMâƒe*Hq|‹élr¢F|ä;øZ˜"¨µêÅ,†TÛ§áàŒbžšItìÔùWJ¾ÄtµClÏ@üp+ÿ>Úè<`:~˜‰7Ï\v ±êp&ÝùƒŽ·–¶Æ Û4BÓ¢šŒèwL Ïôê:^¾"BáJI,Øû£y¿»W<çiV,:U©ñü©¥Z.©¦ãB‰ôˬX=V•ýˆ•Š&É— zÖo :!]‡¨fH“íÐ9i«wXŒ|¼mb$o[N{'EÖµãô‹In¶ÕÅáI;Äb°ÌµyJYÝ¥¦Û·“YpZšÌ^«Ø±ê€:` ~ùVéÁ¸®"]õý z’åOA®0†Ö!ƒT¸ÜI¸ û€Æ©¾‰Í»TË ÍSÔñVßfW¦h®jHpÂOö{AÑpÕ´k2®øh3¦ATêðÙ5Œz¦5; Fª¾Ñe¾QÁJ|Ÿ³‚÷ÔÆÁú¸r&2Bø a‡/ ²…Qɲð$$s2]óðÔNñCæÕ† èT#‡qrë¿)o‘{•/'n{ªî0rë7§S¬yL :Š·{ZŠs¶’½O ‚Þwؿ⇎W3® »©»ïKWl¡F~'Öd©J5÷ðÙH³ƒ1CÌ_X}Ëw c6Kh‡s)xUžPÀV¶ùŒ3®sĽ5 }Öù%ï•ß—}åõEÕAÑžÂúêhçˆ>õ‡ÿ4/ëÔr”°ÌÂ"¥‹ö‹öo!%-ÍîÄÄ!*UhQ#«¡–'e23ÂíLn/pN^¶ÿÃË/Ûa‰Xy¿ÃÀv!`»û¥#¦ 4 õi0^=×ñ¸ŠÁk9tÄŸ›`L’P1ÙÕlÈ÷=ãMûI+tI×}­ð‡)SyP+™ïƾßHm¼/ðPÑZ5.…|̥䯖@±ø`¥˜Àc%jt þ36D@¹'Ùž»Eàøüô˜nüU[ßXÓf„ÝD_j§«Û“1ì†èF„Ç¥så1¿#<x€{¨þ9^=•ý¿?NN:m&|A¡Áï]²­7ߥ2/4wè‰Ò+ë>ÇÁ©]‰¸$PU­ÈNùÁ)É®çZ2L‰p~³˜·Bµ6”]é­xülb?]ðÁù!]˳ÀZ ¦äÏ{Uz9›}ý™U9=x‘2ÿ¤ŒõéAÊ·©UZU”yâѤV*d Óª®ù˜"%HÌ[í­ž´Âa0¸;•è—›]’7=X¯Â)|ÐÿR БÆf]PÜ/Üc7,öX³¸h¦èï©ù:kP"VÆ™ñÃÎ-!ø–2|÷ò ßg©ÚzEÜÉ&Òú 5(øÍ£¢¥e"IIDf‰—å¾jö rc ¯¥Çhmƒ¾«œI›>—d­ãë;»´µGúÙˆ×måbN®1¶…t •cÖlº'l a@¿Õ<iíÀä»_<(@!§Å„T“zßÝñ~ùæ²:c¢¯tÌ­Äp…hTG7®Réeca< '©N‚÷‰“·ô§´×¦?k¢MÅܧ½#ô™Uy’ŽÜcá¼e6ã§Ì ® v³nÄ"ͼ@_߬צãÛ±ÌØC¼÷þKXÞu±ŽÆ¶KÕÛ·Q‘VStí»‡îþ«Ò·t~…@V‡\°K‹}K1Kîâ[¬)Íñ¬g hiöš ¡×s’ç=°ž,,"Z…ý‘ØÂÍc¡– šÛøÚ÷ZzGDÒ`À‘Kgƒr­çÞÉéCÎ7"O¡NŽ=GGš>nâÏÁöy¡à0–ôº 8 …¹×Ç,\L¼¸ýw÷v'¼vë·úñ,‹ˆÿ‹>ç;¶çíñ ZtŒá'Éõ <Þë luá ÿä-m+z ãþ8.l·B•æxžÀáƒüer[7È=Z'ú'L™mß'3 ¾ßÒaçç߯«*;n–ü„êQQH¿"€þ¸ jâ͘üD|ZtÑUmy©8uþçû-ñâ}¥ÈÛ§øS_°Ý=й/°ÚI[uñy‚Æ«fw)÷§]ÙªÐCÚ@ÐT™E†*aœ&s5ï(>õ쮡,Ÿ|÷xì@!UXIQl’£¿÷|ä5ÃbÕEP:|Xÿ56³ž¨[ žEÕQ7‹Ø6çtGR¦[°pÜýñÇþ,ˆGì멹¦»ÛQ"z}… —«ÆHýÓXe$ÀtK0„»KyX;m”ôíF½¥2ïPï%Ç …«OµpÓR‘w­óÌòkRnr'œű›ûùÀ‰‰è_Cô'XUW<‰Axªtx\mš×¤zp â{ïÌ4^ºÿXÛIÐÈ4y¼HJf€w­ ã]D Ta»òØË·å@xŽ ¬X‡qU'[|F4€(M®8õËíÄîÒq Ë?™÷õöB<&ŠÉÉrƒk¿UbÎ3wô§yÛŒ$`8´Qç¶µ3tÖ9ñž…Æ\œ …Ûj¦,ZªfפËî€ëAtqÓ¬aÿºÙŸÐ=´ŸƒBÉ›ô³9kæØ‰wùÎ.·úˆpÅ/b årªré*ÕÀ"hí' 3y…ÀKŠ—J]{!šwƒu—żŒUE [Â"¬™G*õ•ÉX8DQÓƒð×F©4¾õ©¼Ð1F6s­¨’ÆÌE/ 6±Ÿ¬Ê]½­>ü4ð¡Ê~,á8—Xý¹’Š4¿A´:´²Iöð;(Òëe¿]ršÙÀ5W(!÷ˆ ÈÝ…¡Á¬J=ê<\úd„‘ÐòM:¡ØèšˆL£+½JrÑÇb”:Tܦz/ðýÚðø24¢}£ªPCÚß¾¥Âw3óWLйÓw5ƒL¿*,ê©Åù-ÂO³Ìª܉o®ô`žÅ’•‹B`òI7áÏà¸æžñ»ÌÐÆ4Ø2Ðñî5Bj™öeØ…«omÜÉóUjb¸€K¦'14o2YUÉ|Y¢Kå *ƒY™ü"â‘óY›ïQ„Št§Ð]<Á³XjìÊ€À,"«DäíYm?xº7;õañO¬ôMV¾™5¶^¨¿¥f1Yno¬Q~úP$YÈÂýA4(§¨–Z–ëà±ÕAÒ¢'qãß,s s$ò/&ZÚ­3ǭ߃ÙðÿµÎ¨P²yÇ·hç†mtÑB­Í å­ë>¾¦5:>nzº<®`HŽNFæa¿Ì·¹ŠzØX—ä>0(÷/2/{r‹æÐâ²ênñˆ>äóf•ÓW;¼:t`©\_ õÌ÷ï¹úØúÚ¬-vXãÑq¡!1k Õ‚Ã}Â%_Áÿç rŽg?Õ Â¨X8üz áõ{²/ýèqvÐÄŠžK‰¢ôÁÏÉÛE»úÈP„L>P©†˜ÙüÆ?ž¼SX$ˆ%<~ˆ#§òÀ ØZ¤D«[e<‡®Ìúª­æXf>ý˜¯h0*àíËãV#YyIªøeì®â%iÏ(ðN™*õ¨@Õ@"“?ièrÛߟgÄZw’IR#lZƒ0è:§mеž*a—¤þÝÂE|޵]®¬¿ºÔŒ·ÿT ¢âÊ_tMè¬IkXê G›õñ‰(ÑyYwÅå!ðż?S{*mÀKF|œ¦ãfâEYJúYê‹¡‡… † V*vA QÕÜéô'æÝõÍ\pÄ:cÕö¥«q¬vƒEæ:÷3ÿ£ÒNËÙ߉7(Kƒ8¸¨ UŸÏ[¼Ëàx5=ÅVÞ¼–·ÑHAjȼTAy‘†k×BF“KûuLŽiCWï}²UêO‡mòÆù½ãé0uvzP&¦±‘ʉž1Gõù¬‹F­·rR›}pÇÞ)n Šd§Ê´GŒE”øN ÿ îOQ¹ZÀ6ÆEv‡šÉcØè<{ŽÜ×ô\¼þYœFÛ+ m7ƒ¶ç«ÿãÒ 8s!XÉœ~®'áp@PFN}íÉÁe†Í€Ëïh¶K¿ Z7$èbÙŒƒØ ZݶòħB^jàÑwÍTïådWG`”q(âѪØ/ºíÖ•Ç€væC¼´oÒ¹Lã! Ût1õ“³”èIû¸‚IÖÀâàT;Ešöä@ˆÖÎøEðºöOé ™é6¼•ˆÖ0Ûê¼ß`$ZçkQèí¢ ùpÔMzXa¸DcvÜŠ¹»Có `ö‹~wÂÀS/Ø4Rï·à¢ÅŸRI ¾±bIq*¥®ÎþÂ!بƒp¯±×ëã4:Ù!ìÚßœxhßÿØñÖ¼š²©D`tàXß9ãr5V{áHùÊpÌM4íöˆðÅts×ÙÙÖ<µfBÓ˥ϛ!4<5@ ˜2ÒŠŽ€/#d4J~Y=TMJ9¤µUøZ%|ýøŒÚŠ‘ma´>_a|dÒ’UQ;#n¥ÁR3\šûôÊK:§-Vû‹AÙ:!ðHd¬+ªZôÏ×ħ*ÓÔß÷Ñ?B'žEb}~0Ä)’È¡ã'ð Ì—~¸y-Ùîs<ì­c(÷oŠA¥Nna™^7 ðYszÜ`›Â"#»v D¡×èp<õ¤´jô‰(ê6] ûé\ñE=â~–NñX¥sØ'â†öÚVü!%t™æsʽ5<µëkðÒÈü/W³åCáµQßVÏóéXçèBDѰ¸4 Yå,Œ2–-šªW‚ß´ÑÊðÜ}ÃÎg²ŸÓFÏ0e¶y"îDØÅÖ!ÇÁÇÌà•Üùc· €Ó‘õOa½¬(bÎ^ºŒ9n(V®í¢4ùͨáIt‰0í_§ .^æá`9èø@JåÏ =Eà•"Ê>bl—˜D‚½¡ç[€ f—+;$NÁa„•hIؤlbÿ¶Zj`¬ßîHû”"ºö9´µG¡…ɳÉÓÏ‹¹ùØÐTç.žÚžæèS·ˆ®ñV+%# H ´Œm¯¹ Èsܹ–<ÅTÊŠgp–’VŠª(‰eâcb¾‚µÓŠ<–’'fd÷æ;ÑþÂ+5ðn¿n›_Êa!ú‰>3¶#\€¨åuk³Á™±ø§ôÉ÷|Ư˜äT,÷lK¾úKAΗ%qþöa¸ag rV73¨¬Õݾƒ} Éíq ‡ÎéMµÆ‰!+á™9ˆbÂg°væ2ë¡F‰—÷r Ø2Ú=Ÿ…Ðë!9ÿËXeºÆ9t²È±pKn؃ãÝ´âë@gå>.ˆ(kˆšÎ 9WÂ] _»Èáˆ0s¶ w„Åþ¨ bnRâ²}?x`Q$r2zM4 ôq ‘Àæ=Üæï@âµe8 ‹‘o‹6ŽQ$ú—·(i‘'›a¼/¾ ~̳biÓh{L^wÏÊò¾&þn€¡I衱,­€°Gv{»óu!éy«sîæLrv°ŠMí/ý™àkŽ%ÍÞ†ôN^œáлa—Xe›tvÙ•ØÜÜ:ùšêßI»£ÊVjî»Î›ó|Åç¾;9 îC§t¤ø¡«ëaéòEðœKÈ0ZÎd_1{¶y{úA{®[ÇÏôÚà,è†ðêæ+î$C™ÎãÿUÈùN±(Ûg*µ«JzY0FÓÜÍ…ÚGF¹ì=Çõö8ÂþLÅq³¦9¼ß·V6CLU¾œ´p,èÑ3L/¢>Ò lølÖõÇ× ‹xæÎSYlçÄåyÔ”‰5GFô¥¸T¡©Ý*†¾t&t3Å9\ãK ³–>@{âÁ`œ}Î{·]÷ئ©êŸiHÄlœ^›fÞÜ3b±øÁói&Еsz¶®šçóö[:ô ÖÝEè™Àz}´ÃìœáI®ìxìLÂÈÆÙŠÿ…$Í»cwž<#|Ié)É€NƢݾ¨yB‚8e:æÊ›•ö¯ ïhâÝù”f3O²§mtÒ¢5ü:¹!¢Fm—d6;ù©­Ã72VÛÄ)®¥¢r T„GÒ˜òº˜êEãu–n0Ÿ@RÅJ'£ýÈtNRB<áhàº3…„_,®š)Sp¡xç˲=^óñÏñ!Á[/ÈAhUMÞioIQÞ}dû+9J«%®2Vç!ëή4ïž gìÆŽds&vIòjõÙÛF–ÿÄŒKûˆ»¨V¢  ãÔÿ¯¾DZHãí8ã6!ŒÐ¡ÎåI2Ô©=4PAi‡d± =üAÞyŸ$®Âq[>u%ÃRç¥4¤D݉ùåèì¿?¹Å¶Ðet%\ ¬Ž\nípÔí¡Ÿ?”á2Q/YóW\àU_ .Ù\,Ývænü†¥Ô­lu'%å ¤9³olü\0®¬È~”wû©l¨t‹ÅˆI[Žø½Þ^Õ;ÉÈ‚.bêê‹aê³fNST,ü6§Um¹d‡ ¦‘IÏ2ÿ“xòÇV)ÔSd^¢fµJ°C“Ú#¶ûgWgöÍÇA~ÿãaíá»fC Âó…æ\daÙ b°¼h€Ë ²ÃÆ(|ðFÜ×€– FÏ­ö…ßÚ$gÃç]OkŸôfÄWH2·êùÉ›ô)þÍmD— nç.Î\âžË ©›ëfÊÚ•@ìûûÊîÐ,ѧ÷6ÂèYD¶ U¿<ó1q”/÷r\©ýóP]ÎÄ£ ÓÄ_|³an2ÇTÊðuÃ4¢-Sßáª-ˆE¢…س9 kŒ€ ÀÁ™ReòƬ¬„+…D¦7ļ!+«¹Ï=ßez #çÊzšXPÛ¬€òöð–Cüÿ\Ýr»oÃwHx[•؉â­âB|°e73£+S6¶cÀlR¿—r¿+[?!½~Y©²““ 5¯6)Í&ŒVfu £3À#u¥‰õÒ®ërêú+{Ì9r}%;æl"†ylM(}-îÚoø#ª½)[ܾ@vݲCwußiöqjÂðu^?À]=#ÌåÊ”¹R nÒmÔ<¹ 2ŽqN㊔Æ:¾A >™î42ó9Sã±mÈj#"\Q¯éâdî×Fë·v¸aed‘™~\æ·±iµH™\>Ëùà†vò2¶w>Ewàh`)\òd(¾È0çÖIƒ*|'x)‰Jüzª8·;°X‰ñŸË²#9”t•Ó?aC%Ÿ®¿õñ/_Ðeôû61BSÃ_—¡€üX ;ä¹"lÝÖÓ¯ê\¥§c‡Ë1¹òåâk®@歚؉ @bšýoië×8[ÄtǺ. X«t…˜3Ë]B€m\q²sG Ô  nÓOœä:—©¯ÈïÅSë¬l«ÁAÃ7}㩯˜*¤”é‰âµ|E/…OË ûZLîáoX[àBµN™£¤PÖ d<•»õ¢vEõð!ß yw’Aoh>‡¦Àï -:B$é† ÿT`ÀÛjÙÑXcãŠEÙÄ/Eÿ¨„t*¢Óäó 윎BŽ9–`…WtåœE#-¾Ï÷䙚çñêÎŒÏ`í™\+ÓµI|Ó@÷+þ(ö:ùmèóéPø·’h€“ùB Ü ÌÔC[&Y®>p…L²ÓF3¸4'…ÁX¬ÞqŽ£ž&¯«»«ÄLaˆŒ;oƒZä}0áóÒCJAœL½gggJ‘[;Q—üŽÍWÑk ŸªTAC;Ÿ´Hj`|àæöfîàËñÓáŠÍ#”±s ù{(éÑ•šNÊôg5‚÷FG“¿ºBk¡­ žßHšÙrˆºqÑÓ¿ï&|g÷ÊSãÏ{¤õà“·¡´Ï]óŽÏj„Òî“[]uoγܞ‡‹ÑnÆ.tb3÷§‹š^–Ò|ƒÌ‘ÀTAŒ™×—,ž†h†5Àä.mQ>Ú52˜™bW’MˆÏ3€ÝlÙˆ3l툱ŠfðÆ÷¿¹¾^Ùr#Ù ¬Bì6³eoÔö‡¶ÎsÄ¿‚MëÜúò€“ KŠÕµwÔûº{ú }xs:µgi`WèöO“ éßv“¥SëHç <âåÓËf EVtsãB­ýD—å„X‰ù›o"ÂsïSv²ˆ{…Æ›1)eMFƒÏŒjAÁuÀ¼‘M¾éó¯½<‰hî_+?šºZQdqreº í={îÉ,¥uéLøì}ž2w1ýñ¹Ê!ߨŒï‘O†HyÏ:–ù¿é@]?‡&åj‡Wíä†yÉwô(zRç­Å¶ze‘Œ¤¹Â~޲ÃÑ–&©dA³u&b­N.¼8X…Ž§ßŸÎCM3vÞ3ƒãP¿Ò“jdQ!ùô Ä©[ÑSD…Æz÷%|´@ËëGwRC…I;l¿æ¸]Ç wA¾ÚѺ÷ň¹ÔáçtŽšéSºô·ˆ4LÓÛ&Þ¾í\‘¢pá¾Í')W‡{ã†Ñy"ù ª %§Àêܚ ‘†+öl­ÖZ_…™FªïÂS²ÀÕK…Á1džXxëžã•úd£zºÇY,áÄ€aÐÝ3 ô]2ÐûæÁúä)Ðâ=ŸÓ*\Û†žòZÚDé¤Ä|åï^6êïÚʵyÛ¯'ßÛriÆ^ƒ¦+€ÿ¢Ÿ¸P lÈ’V:ÖQbýʾ­ÙòùeåÉ¢f³XKœ žêNîð¬—éEc$!AéCIÊ ˜Ì¬Ï½æIš*`\äNrg8›fÐÛFÜã™"¨%|ÜÞ ¤I‡þà ){ Ÿ°ˆ`ÆOšµ~CÝ¥à– Ë¼%vV§ŸXòHy¸qª'[µwUì©6¯WËéÂ@àÎ|¢¢S>©+™x7³ZN«L‹Ë=¤OŒÝÿjñ´ÆÈ6 î,‰ö†Ä`¹=¯ûï·ƒ)01¼E4ŸõÈ.£!¿%‘2(Gª‡ìVÐy·ÞïxÖ-:…3e­¬¢¡× ¤C9Ù]U¹¤Šþ4¤Úz“w!b$C„¢É™ ÷¬Žu ýÙ>#<îÜó5—’ÏE­^·¥©­Õ4¤`Í”·˜£Kö2_š¯cöì”lj®³÷BÄ û«1˜eÁ—ˆ¨ £p PG^&í=×àc8)á3BÜesªàÀgð¤^¾ýT¥] ©6Í.„Lœ HˆlÏB¥Vت³ó )ölÃÊUþë¿8­CÏC*.VeŸŽä;›˜¥FR/5’Á~«Eлt?¸ßÏ-º._EmH•E¬ëŠòbòîÉäYÁ-iiÁl’ËŽaCRÌ.O¥NQ%l†ä`šÈ‰Öô&Ú]óEúC{¼AÙªkSÚó_¹³6ò–3p(H±8úö|¸8Èjz®Œÿ¡fqrèFU•…fqàuv>A/c›s’Ù :75 »(Áºø=š¾C-g¢1„NØØºª±ípŸžl®@}lÎMÅLüÕE5ÁW|æàì›ÐÊFÈÄæ0óD>òM|Û¼øf‚UOûQâ•“ÁìÒÆ¬ŠƒæT^Øì>~Œ²>“‰ºW ….צZMsˆëNÖ‹Gò‹¥ÜÓ”Y((ÜosПnޏG¢Ü$ÒˆïàÇqAoï+>ZGR…øù-OQÂŽê+¡À-´jyð+žÂBíÀéxu `¬ÕQFJÃ\ÎlêšEÅâµ_1³°-„­V*´–ڵܒÔLJ6“½ó™z QY·óÅLú¬;UöÐïÿ,!ÕÑŽ¢C3‚» âZ¶d b€ÞÒ†ü?Æù4{Q’Ù´bâqüˆé3NÜXã ~üÙÅ"Zßd“­ô’‘=0Àµ\ùquiË&ìd—Ljá·4 - Ïúî ž}ÞÒSª£R»°·ŒÂ7 2¸¸-K5ë_~¼Øg“–4Ÿ¬xªV_øªuCû_:EõîÓ¬Aá]Q§Œp¾W^|þÝ5ìȇDY §ê»§ §U©ê'`Bü)•û|ðRŒF,ö` M–žšq]øflç“pÝq˜ðttä3œ96 wâs­ÎYþîmØ8êqÆv¢¿ç;µ³_8îJ‡+õh3bÛ„Òy¶D=;FÝ+`­'…cd“ŸnQÿkB‰ZEÝ`úI!xuÁo:ÀjçUÓ‡9Ë3(n3ætj~P>Äþ€¬XA‡ˆ)þÃÔåõ  ŠéL: 6¾îI4@5w Ÿ”Z?­VÍŽ1sô gnº§f‹|ÓÛ¶®yÉ ŸÓ†î« ÁìÀEL0®UÙx›Ä«åÿ­ØÅ¦IÒ­H°)¿ç6’k ZÚ·}ßÏÁ{¢O¥!_Ä8²´'å8=ñ¥4ÀØÂõȇ{q”–x›Õ<Åç‹¶ÎS˜?=`J¿ý<ÃÑU• ‚ÉUGÛ rª±Álô÷DËÙ»!¦B*m2oè[•CT4jª<àîºxÝ$ûYðA7ƒiÕP˜fçGv^‹ÓnOF^òÒŸÿº•oqÔ&|h½å캲µ ¾V2N¶+LXGj²Kºlîa‚)ñ¾/sƶü FÞ¢7O‘‘‘ßH9©.G ݳóf™1'¯}™>i¥œþxÄP¹† wÒ‚úF?¸šécCìvüm!&–´Õ¼K¾raíØìÓŽNq›•í»ÝÚqÆ;\Z—f%jo#/&¹›þò¦e‹Ÿ—‡­Ï€S!±Az£»"ÎûRy%´ãé¶ÅÝ·xݨt§s°*¡ä+Œ¸`É“Kî¿%i®ŒK] u\2«5Ýçäõ¶ê¶ èTc[wæ¤ Þ€É¼‹ wæ!.LûG§î88à6¨,„‹ƒJt'ê^nnHà†V§†·Ÿ…n,Û¨»Iʱ‹‹Št^<9]ø>tÔò†+ùF¨‹ìaÛˆe£|ö©ø¡¬8øÖ­ÿùŠ Æ“zý¼hYMyïqK×ÙÑÄ…;êüÉË^Î/¬)µ¶’ó¡ºáêsÌéU,Ãìžd&½Â7ôSº¶^«Æèˆ‘Òñöšö”¬ÂþîoÙ?ÈHò1%ME‹á®ÿCC‡‹\ÇíKfª„k®Ÿ uMÌŒº;IxŒë?ÛäM]ºØTšxZÍ`o7Ìê Ѩ AÂAØôG`³ç+tgËöï/Xw6 TÄÂ@ÈÿgI Á© 7£ÏŸœ„ ð‹d¤ÑÌu„Xµçqã`ŸÄ¦º¼…íêZ^ƒœ•ª¦°ÞÐnÓ7B „>µDSwnÀƒ¼7ò®rÅ\ÝWY üØu\Sv}nå“ (z@Oú R'€s]$t[)£ø/Dí&¦X³ëµ .Á·I z֚Ÿr+MÔY&ÃÖ_\Qíäqp BÖá͘‡­VõKk‡> øóÊ*äâïYØF™t‹â¬1ØvPÏ¥0·=Ê)Aæ> µØ\&EòŒ¬Îk‹èkÚ–›N7§Ž©P¤e‰±g4€«ç £%VÀ1€ÏeX0«‘õå~‚k<{97D-0[fêçÒRA‘ž, z)LíÁ¥¡ôÔj»gÜm-.âü7äÆ7ˆJï}ƒ¼9º"[¤â1«\Ê-¸~}"ÛHÀ*ö>ÒÿÁÐÚìQåC’÷,lTZø<4.|es×–SÊÛšïÚ²ú=çÃ'H´Xïiæùr>n.1\w^1*×¾ÂùÙ2Ô2-(O¬Éáf}î-̑ՎLŒJ€w'&y—¦@2\¤ëÐă­gh4YÇCò‰TàF*7G'ã8\}޵\Pô‚#âM&cF-mï´b¬ëˆ,—¬_ bÇ@¥P]Šp%‰Ò§Ï%Ú38Òô䱋’Á%G¬Q%¶]uE¬¢Ÿö!¢µ§t.ü„ÿ'ú>Ozæ›F¨\—–«9<Ib‘=v ó¤.½«w‘~­³„)ˆ_XyɭƘÞ9µžpW5[j7è”d©x‡TǤéA¥’ô€J˜qY"‚å¢YØ~•Îf2@·qÏ  {_Šýv˜çŠ\ïn7˜É8¹á6Û;ïtº&¥G]µtÈ94Ý/* ¼ýmÝ4¥[¤Ù8ÁFŸ8IRÏ…þ©ŽŒý@e®çð®.¬‰m†jF½›Æ~'†árö^Ÿ*¢¿Xƒu¥rɳì{áUÜ3û ³ áÝ@‹7 è ó;  N¾€™ä±Ú.ìp#œîÏ¿´RUl=MÚê®&:ײ–­ª_FZƒ|ÕiF*¸U\­ºlÆoÝ«D }>×ñ}ЮÝÀû%GFð Nk·Úl¯ a/Ó#"õ•^FK¦âݱX‚ø9wjIÞ/¸ÏS÷tû)Ït‹ $›²˼§|+•æÝ¦ ººoŸ]ÂÿqO÷דËÚ3¸ØÜZu}cBHÜQ²AW ‹M3QˆŸ†ôeq ­ØõóþFjmÁ¸†Uüöík›â›Hw å0›È½õ&CéQn:új…Gê Uùš¡g´…]ëi™à'Ä”ÿ€ƒWÏ$½*qœ‚1Jšc)~H¥Àoùi}Â8»jÒ-D€çønä7Ãù š»Y¹ ÓÐtœ}7±À—ŽÃ(_úŸîAàñ7ÒqY( ÌÄ™p©£–FÏõ…ìõÔ~>–ˆk+gº,:P²s€—Û[“¨-ZÍ”ì0Ë~/PÃg8Cõ®ôýíX³ÀJ›1à!&^{9õ.y¡Ôu%°]×~2]„wïÚ§á*¦h€ "¨Þ”ýj¾";ƒ\à¼iÝ ¼¡N»}ìǤüŸ›(iVàÒPôtÄ+a´yx|04ÔÄ&䘢fúÓ‹ú-ôiqÍ´‘ 9s³œÿ…õß}{_-:4ˆAûïmÉ\e¶£1Žªr†è9""Ú„œŠü4cn¾¤Â<<Êo ¨Þð-+й¹zß¡L“`b ½G@-É;pFª7ðÚJpî€J'¶$”8}6Š /»ó:úDÊ¥aâdüØþ®cµnÚè@˜¢É7‘  Ã0ÇÌ×L³˜¤Ýfì°PAÂ=~j–pT«¥ÿÙ^ÕýõÆ Õ¼>™ (/ʨlr]±‹±Ÿd¬ßí—³«7Õ×Íj?~ÜׇÖö׿†™qéHS6"Ù îÆ6ÖyÈl¡dÑõÄôòbƒ¶BŠd¿‡3ñÚTð­°†K98½*Ül­ÉJ:KƉƒ°‰kö ©G3\›Å[´xµ :+ÚP½Œ#´B {Ç€E*¥,%§¡¸š™YXJD=^§Áq†Ý%zÓ`Œò_Z‹V[Ü¢åÇoXf-€$2õgA’9–ügqŽDñÿA"ߎ^š¯þ¹™8¹´ì,ÆyÏî(tæ>0 ‹YZrstpm2/data/colon.rda0000644000176200001440000027447013416410274014234 0ustar liggesusersý7zXZi"Þ6!ÏXÌë¶Éïþ])TW"änRÊŸ’Øáà[áß^ ·ÖnŒÊt®Ø¼O_ e÷ ƒ=/;á±™jŽ-1» S‰6fˆd,öu7‡bO“•¿8%8‚AûJN™Ä[‚`` »ÏHØD‰"3ƒ;´ª*–¹&oèC-y®Y<5”‘m‰;üUT7|Ýn{3xMèäD…Œb]†hÎ=¤£Mí.Â@ªOt[y·Ë Û|[?>êG•u!h62PÉP)žù¹S穈"Bªç¾GµÅ¶@îd¹¹çš«ÈÍŒ.M’¹ž±†ûCñÆäÆ•Yoƒ…"’Ú°ÂcV8Qá)G:lËøøûy‡“à`¾S³ûöòÚ܉¼s`• }m¦yä^„qUÅ"Ú¡Ÿ|cF¨…*êº}YŽ $MM‚‡f•0R &¼xá·Õ }C¯©•øÞ„¨¾hïï/™fF¤48ñfÏøý3þ“N™Ü¬"wÄ*mr®!ýyN¶P½îÉBÎàÀŽ Mñ¾ïb:Yr2fææÎ*˜Æý'ýN£fFµ~«‡•·r±0&ô¼Ž°Ÿˆ›Í¾D±²Còÿ”½lPó·vÖ˜›×8=êºàd¿˜ÑAURˆ!t!bvwud]~ [Q7V'cÐ ­™ÿª(­yDÜ´äÈÐÝM5aún»¥²~2úÅÀÐâ@h¼ ¸˜€^P! 2ãrÆÑ73C2}¶ºfofÙR4Ä“>ßãÒ¶òço0©êšf²îßADÚZ¬)Fé}{p8Ÿˆ°¡´6ÏꔽcôßpÚNgσ¬GýøÁD”þ@ i2]vJOòðL=÷oò\Byéù»ësŸ¼œ$i7ìFc1%">ûJá¯÷¡ ,—D(]Ù{¼VY; Pú4W}^\N³A§ÇøpÒ5ž…&Ž’m›Ëöê.Hù¸±K0¾ŸUxl€/Â-t“ Ä|‚ òÁA‚ 6’Šä•ƒóó=Ø[ßé‰ìH&Œ­W»‚Ša»Xé´|Yƒý®Ýi°»¯G‡*¼’ʳºÆŸ4‹ÆŠs¼nK®¤ú9²zVIžòM‚ŒÜolTìÙ“VK*ùí¢Š@eMë&é9,nº¹ä²(C­îÛNl˜ÙDãf’34Èߎ4t ÷i‚%®‹­®&C`ää5·¶°¸‰YÛøÂq¼ëÔÂßÍví¦‰ÂDß͘ýš[òC"aÜhÐ<¯z첌áüÍ)öö->"ž¥{š0µvîÒ~~˜ ":8”dvVNÉí·}Ezc…ÖE‘w}Ï8Aþ.èË©G¹ñæ560ä?Ф6ÇŠ0ƒg‹2µå¨ R¤úIWó©Š*‰™¸[ßðÌŽ¹*‡ŠŸž{®½u}Ú°¬,MÚ^óÔó£ÞÁ:f‰ÆdöÑs¬jᇯ›5-?áªG‰è ¬uk"Ž1vüWôqEÈjIK²§•)¦·<äQŒœmªiCìî‡U´íb*4œëëº8xÑëQJ'ò³ñ±ôÀhþâ)NŽÖð«ÆÔ(‰ZÞ3<î#Ç+‡¾=I}ûæë7º*’õ]Ÿ¦s†ñ÷àhP+t¼¸q[›?}»o«Ÿ‘‰*UÁÇ ,ƒüT:_ë¾e¼ñ6²R YZo­-®ª â¼QÓëµ °9©ò‹Sý9°¼¢?Ô°ÚÏ!T”´WžÜï©ô Ò4xÛȈɖ9ÆŒ6¹ë ¬M+HöÅ©z¯¬Ûhžípé–ýÙtºG¢è»&¨;ñ•C~³¬àœ ¤!_6>Ÿ>CYý‚«f³oêmœéõª}QîaÎ'œÞº½Üª–æ1ëD¦›&½ƒc}V¡ÅÏ?)•ly¾­š¿éèM“Óc\täù´€öW¢®&Fê2Ày!£Ï¹ö9­q[ÖÀIJ^îá»ÃÅì–BdLòH{ËiGHüÊ-}^s‰3&XiMø¼á˜â9¿±ch)ÆZ«8(ÝS¬†ª™9¶ñôí˜Ë ‹øe:$ŽËTíYت×ü°Ü±ÑGRWfgf8ºëû#Ž2°j :»¤úd ÇáÁO!îù×y újê_Š…à¿g~ DÒDw|ÕR®¸Ú(;ªïWsÀîµ737øN Ñ-]¸7p8ŽG—oä$Õ©:¨lÕGáó¹BíJÙRuޝɄ‹R¼\óîŽUHucœ{óH”¤±ìŸ¥”ùš™#T¡í€ñ‹‰üo^Ö#ª¸–ÍópÉ*0M°°²´çz'tXä¿A¾ÎªÑŸt·´µ•̧JÈi³ñgëbÞrªˆc‘íå!]>¨ø¿+4 Ä@j°ñjz¢ æÆ´âÒíaã$ã©y ã ˆ £^«á¯Ì€íŠÚÞ&¿C%ûß®óvÔ¨qVªˆê˜kþu’WšBåhE §šø&—aÙÔ¥u¹‘1:–E™“[ìèۋǦñœ3¢²O!!Äßâ{ Ûûÿ»7‚Si»Oc?éfè¶?›®~é´QsvU°ä¹U”™’"¶]I­@>?2I¤Uð‹ÔITÖvH‹NÝ](Ú•mB9Q6öBưHbá@çr“ZÇi5´¨„æVsêŽ`8\ÉqáK¦¨° ¯oøƒ®Eq ˜‚ÓÊ6 ­<î3ÅŽ fül‰Âzsö~Ø_ÄÑ-’"+ÜÒ?B”ä(%GkÍ#õÊ3×<¨'qzŸ'çø8øGyKÕœÒ9.åÃò[rßd”²RŸD½g(KÜör{…ØÍçZa ‘Õ1¬ƒ|žK6»ä>I3ˆ'½±Ïh•ÂCþ¤…R”šúƒs¾kÕëx™ÞÙèQädí Š° §2âùªµöÝÇpÖNMê««äHK‰e2TsüUÖ·ý GÔq¨+ÿ‰OÁ²u~ËiÏ÷¡ý’¤®Ñ&Îð‚—Ú¼¥-0Qñ8Š$®×'=Ø?R|r†Ú™Á©ÜìëÐéÿt0žOl­ìÂ¥NQx0Â+šÆÐ¬L‹_ÀÊë?y£òzüÄ.8 ŠæË¶Úe}y]íWºûP LÛÉEPÛ7?Ó·‡Š«¬hžbCöè?9¤ŠôfìU>²b?WÉS€°s±$$òðÁÐû<ˆnJþ Z½`c*×ÌçKµ:µ @áEý ©ïE+n=­˜æ÷"¡'=ÈDø‡Îþ‘ïðÆ]DÛz«¢:–QÁv3ó ‹ÍÇÜ™½û¾ÞÇ »Ò%ýÌ4ì°ñÄù º´H×ç„ÕKùZ ½Qö䆈2œ2EíõÒEVªë瘫H,ôµÈË5€áÇ—‰#¾0úÅó|E»µÀ´›º»æ¥¾ŸbÓÃh¦¤ ”¬›µž~ìïEù7)w# ˜P‚!#Óˆ²ñëqܣ̔R6q1—°ˆÛÞ M/2M€µ·C©a#®æØô‹w”?®%Û¹N]ÎI?8öªN¨¸jbÔ<óu„×knôI]e´êO#ÐCñ°ïú'øÈ\WMÝ'Ñðp<[#eù¾¹ËÀ)Fº²è&wðÄùæd÷‰¹”QÞõ‚¸jxÅ(êÙŠu?!«Û±H¥„ŠŠéWY…°m4#¯‹ýœ›†¬ÍOèc o*9ZϱñÉwµ’o !À»ÎjŠOj€Þ¥WÚ˜q®@9²`„H‹°†”–Zâ4Ø/’ Æ>?\Ƴf„ŠX„¼L‹KÑu\Ýô”êdŽAXWÙ |«Ýò…æûڈמlóép²–xqe5ôŠ‹€4*°ÁŽ7›ã–—|d[˜^Zíº´×ÿ ïx~ó(îTÒ¿c1—5çÉáZ×5Ä´·“Sw—êw›­õÆ5Ê6Û…ðw!Sz›½nðΖ‹6úâ ënNÁˆ1?‘ÔØ«ûFR‚ª»Šh¡ŸpÊw‹ãø˜°“w%#‰Å÷Ûà<Ÿ°”Ö*×ãì¸qCÝLŠNà¬èž~‹†Ì²½<äøÄsßSh¥]Û&ô! ­ÓNO &t$Ès²®Ùo¯ÛZn?¨ÕPvp®±!—ÂAGä;9$ÚÊ=–·ÝúwÕSk¥8è5ü"¸qj•Ìé?Ïë£ö‡Ý…ƒû0à0Þ‘Ë=„ô%­êù\è^X¦ËB®éo¸ü) ‰=I/—Ct‘`c²š[†þ»Ç[*cðWÁ@žDEá‹îœ ;΃F‡­šIÉÆàl l@ÂÇÊøÏˆ¡ùDA¤(¼^!E+<âEvú¢ÑSs2M:ßK“Â"Eá‰_j:â.8ÞÏËÀ׎ßÍØ°ªÂÚ¿(ÖkëÌŸsƒbŒÀÒƒêþ6-Du ²¨ûÀÿ›A ,é3)Èh“ç€ðùhRúÀ½{"¶øñ (³jÒa(‚,”dšz‘/ým¦êxäÙLýÃãý8»ãˆÚIyN¼‚Ùx3S8wâõvŒór2ÿ‡ 0«cŽd.¹O[á3ÃQܼyÿ®¢P,œ;¯é;z9(ó<Ðu;Q©Ü‹t:sGG&*œa;0–OøKìhöÝfmy#NÖ¦9pYž¡` µ”Çê¸)þðPW¨¹‘ÏÔ±JþwÈ…Ÿgðâ \-´*­%æíì­éÆ·;þ”¾”›’€&™×ÜÝ4_t*÷0aÉjôîOïÿ}ÔF{΋Îpé¥,`AJ2pt_Pkµðçš-ÌæÇê¨u¶=G}uãD7ÉhÙ9xyÞu¡ÝצJ¾,ÙÞnÏŽ*§Ì¸ëêòÙ+ŒÛ `lÉýîŒO6e&aÜ/¿ÁXôäÅÈý(ÀŽ3¬¯bì2Þ*_Ô ·%FŒâ<noub¼v40n­¾x«Û:kŽalX»+÷ Ó˜Í{ïéé..ƒmX0 µ0yêÑ•«> \Èmò+£6N¤ykæ²y¼ \Àš5%…¿^2hG.±G®aIÅ‘ ™±žñ7b"̃ õ?ºÒ†÷4÷nû G°pôÛ`f«Ha(cÐ[Õú"ÕØé¢d>ùÚ[*yU‘íøa jg}ÿûfŸ?¼å[Wµ$ÝÌ;Àμ2]e»ýû>o¯ŸRÏïpÍS¡çÿñœ†Rñíµšš Ƴ²à>GŠU È/on&BD.äýêGùD-Φf/Ñõ—šÔÄá<œL,ôÿLˆ›ÇSœ@ ©Ý$ÉE¬Ydådcå°ä%i±tŽôÃQ»<7'ÎMD‹Ô4>–séSüX"Cßh8œ¿A±(•óIâE=ìf|×S)㌙SÉîø=®]íMFÈy?õÊ^@i°]0Ç‚\®,|t>Bi—’îBF†ã§†> øÞCÌÝ=:ÙÐR‰Q#R &:WùÇP‹J9Ð=ÊœƒÆö¯äCôÞÒÀøTiUK©·}ÊÌÒ•&;ˆú¤#) S½ã[C_yÅ’Óôrù=ÍЀö+-òPMBsåÂÎ| že¿Ï¼„kUÚRç,öƒç÷"}( pÐVŽŽy7Îë¬Ím{vŸðT ]T¶N`wNîëªåÆê“Ï ³@UÔ·ªšª“ßNyð³™Â¨ød¯Üªº;†ÒŽœæi`!ÇDûè©\2ï z]ꀦä>w@ž“ÈfÈÖÉFüšÇëX8ÉN°ÁÁcºòã–,õª—ÐŽ%ÙPz£(—CtâÌwÌ€­hÎ4C©c8˜yJy¦ó„¿ziÂêÝ8®ÿ¼'-h|¼,ƒüˆYÁ|©ô"÷ÈÌWU3 ÓÔz{¶åCÇI»ÌävRáŽÞ#F+›ñwá[6A]…Ûs îŒòiÒÞ QÒ¨Ò,óØ–£ŽN¢PßÀvK¢{Ê‚•øãƯ¤¦VÛz[—4ƒðX,ŒÀÊ 1M*…rÊD¥çµ”öò—¿,‘:è«¢ñ„.)4€T‰¿°®üC²å«’’‚5\ J¨)~=ØŒ£¼»‡}åtšKµ>ý_ ‘“eÂz‘RÞŒ3®ÿ•d9úŸkon1û\ðt¾8^k’©›£R÷5²tÄ÷@9/V¤ïyLù9 }÷K–TN«Òìþ¨w9F•ÏwÚÍÍ._uG—IKlƒMè×5€ëø*Çì›KkÆ æÝÉÌ^Ρn2Éb¶jfµohüRdÁÛªlØÝÑ¿ªhp)›»V$ {ÖvTÜ¡–Ò„¬ûè7Û3rŽ)öHw¢£62³ |™g‰\>mKrx¾ÁœGûW²‰JL,«§Ø§ÄÝpS¹»ØòçüéŒæ™ZQu—}ÖemœÀÕ]ù<’?é8eX^’Á/,9é¯^/Å_J`_ÿ÷†7º,§´Q8mùaAy1—á -tâh[µ ô*@_~›´èF±9j£rxN}Œ9÷ÕžyʆËZ”öõsžž5Ë *Hвgò  èývve¡æ€»¡…y;¬ca¼ƒƒÇR)~‡Ó°E>Ÿœó½ÿh Œ›!!`Ó•ÁW*Âw¶ã*66L÷ÐÄúøœúKt‹¼»NûÊgÂ*‰ýÚUL¦/약Sò5?y|ßj`ÅØZÎ} ±àê LðCŒ´9½w”ÒÇ£ (¢ø[ÊQFÜ„ƒ«wp¬ÇMHÏUò.fê#5±éöú˜äð]f ~¾Ç qxCP¶ç!ýIH‚N_²*ƒ_˜$“C\Ö ñinÍ|ÖtIJd?Pìh÷1[´¦æÁø³¡ÒŽ~* ³ªFô¤ˆX5ç~åo„S¡IîsgVJ˜ç–Ýï‹ÉšŠ ³É|”Mk;ϯÄ}ngÕ>[%¯L%æY\ÁÚSî¨!ãý%­R3;KgÚQî7+—‹Ë´’èQðòöYæyÃÝôRƒË«ŽR C)¦‚½4Ý”óEFè,©*Ì©ls•¹x°ÓI3ÞA»ÙŠßý³ù{«²fY•P—1(ÑÞnÒM,fB²·ëÊÉá¥tÌ^]?ju½:0J¹‰¤'ÊQJÐÊä^BkòÔëuoÄv&CÎê9 ‹·óÜóK+í¦'tõ0‹™hšP|eu³jþsú{)£\†tð;1øºæ ‘ÙÕŵ°Îè³köð¯'‘P vO‰7J‹±`nÖ¶=1ßCno."DmŒS/ì{|ÈÀ«Õ`PXá+D&#M5³’ÉE_pk±§º.þ@|kÙÖA•×dÚžš*¯'×KÆžŽ;…Û=¼BŸ/£Æ„¦û ¡üþk£’y“àµC>6¥ËôË8šo~}y¿I²&B©°±ú9/0Ô,@Éú2±öô—DhzîTZ¹[o¥~·uŸĆÖé"pÅÝäùù¿ecl\1g††¼¢î˜Æ³†TI5g—?G±'§Vas<4¦ñ´5ìVuw"®ÊM™›Öœ87„ýÙºÞ$šûÍ@$&©_ÝÓÛå¤ìÊibÄy ƒˆH·Ç0¤Ë€ ž°ö±–S¾¤}•¾àiÁ +ÈHÅë8Ѫ[E½ &ÖØªÖÆÌä»çqÛõÁ¸°dû)ØðíX0œ ´ï®*.}µLʤ‚Ñ Èú\HªÂû$MO‡z4cÏO çåo*¾ÜŠÏKjÌÿ<§'Üy ÈHO¢ñ(FDòIâErÑ]o€ØQ”ÈʤâŠÛr àd™y™7.æÅ"S:Ú|­Aë_àH‰8þMaàÇzñ î¦+мcYvÔ ÒìùÌ´X ¥W Í·ÄJABùÉóLx¾î _]Ép_u®m¢_¦¡šÍQÙ1äF(ò…½Ãe˜Û‹z+“ mbàîÅaÐ/MÓ¸¡óÅrf„ÎÔ¾G޼²F}!õW™ªc Ÿ5š$õÿ=ÓlVë­aíáÿÖ;Ñk¤ÆðOšÖH^\ˆ„A ËJ,sY&¯3µû})]Æ]…(wÑWÊ ¹ÍÐè¤s›Ã+2$Gæ¸&Soeys…R´0SߥKKiþ4š<²`åÞ´Ÿ.lÁCWQ¢67åÕ×ð^fèhËz3nè´«D!ùTQƒì Å]pÅÉ 87„ "Fä´¾¥x¡—w¶ïà¶q£Ö?³‚9Fd OÁÃ¥¿Òˆ"°Ï7ÿ·ž šE;åf”¤Ç‘I›ÛQkhWª®ˆ›ÑBc^;A9†iÃ[?Úv6×/ç ~æ¸íLÏ Z-q‘1Nu ‡j]©¼\ty,¤^$³Ë‡½e6¿„õ¤oV*òaå 5~ý (  þ옻÷;“1ƒ·ÄÒC™;ØÖÍ3¬ éGRâZÕClÐÎÁ`ÑÅKÝ»Íþ«nu­Áý U¶¬¯®›B¼iþÝt¯ª]vǾO#k9êóÒ]n ãzÅ\ Æ `4Ýìzû¼vsÀ 4¡„þP6¹;õãe¡SuÆ#žÙ3è’Êè€6.`_‘SN;";9r*3Ô+·øŸé‹h„€7Œ[ú~æÐð\jÍ-66„u¯E[X° ṉÌ׊:q•h}¦ kÂi ‚Y<ÆþËx[ÿMX³5µ@ÒD:¯¤þvý‡¥ˆàl o­äüÌÙ!­¯¿5R¨z¥óÀÑ¡¢5îpÆ?kE‚æ„;2&åéTö†²,#i¦½Ô…u«)`²„4¯ïóŠ2 ô” BíkâÖq›òÐÉ®!cÇéÙ†ù)}ÈE=©Èc#ø3uhñoúï_Q‹b4÷GÄ›=K”[¾a9Ú×áZ6å]ÂIò^¬ãü‹L Ÿ§KuWxTZˆ “ ?+ˆª%ìÙîŽÀ8+¶ûàÜÈóÃemùW¢¬¹ð½êAåßú´—GóPŸÑû\%Folú:í~wü‡îŽùg™0€¯ßè~züc1 èf‘¬_‚žýÆ|O0žï´qd¿švU_d[úè¶rМHWÿ‚™¤.ª}ŠÒËžäIºYÍ-0î…%~3Ó“ó#7u÷ñ6JÛX„ޝ”b,~ét7aíGhôÄyσ:á Ø1³–°ä›à–AwRºü¨cCspÃö\W8×f m%ÌŒôJ¼9ÛnŸU »NÑ¥f;Ö` Š{öƒû3¦¬×?8Þ{ʦ9¡žÚ2Ø:¢JÆÉ¯&Mˆ[îî§ÒŸùʘàˆ#±l h¾ÕŽäè‰ñZ} )ˆÂO(™tÕ˜¼ªq ä€K®Š$Gaè¦eóÝ®Žk]e⨖fμÇÓQv²{€°}O½STCÎùM@3ôP™[ã)qq…‹“¹þ<¸ ±U¾–/± yÅBÐ-{tjo‘÷®#ÙA7°a °3j‚Ê Å&P?MÇÝ» R÷jžÈ¤Û¹Øð³ÈœHùN˲‡¬;º^”jZ˜éʆUhÂ÷s‚ ós µ{'I®£uõt}-®¯{Q~]ëß2špݹ§7š]zX©—¾œK:t®À}:õî½¼v¹'o3±\а¤Fg×Ë6р׿„¶áÕÑê$E;‘£»ýD` yõCɦ&^‚"¹7ð.¡ÕÍûì`£E}E¦Ñ/¥¾n{Û·ìò• W©KÚoôQÎEcª5 ³g'ó58…EÿžŒùA§t³‹-Ê Û(Š]™‚„8èn ^(ÒטkË{ `¤<Éóø¶ì6›ƒÍß¼RsÚ#±æu³±²}¦q²#퓱ʇ²“YÃjÞï o{*¡/øç×@Ü~C£ËždlrÓP ýZm>BìT ©$Á¬#r­)ô/u1ƒBKU[jº æOæì¡“ímCl–u‚ §«t«pÙƒÇ$îUœy°ƒ`Q_>XÅ)ùHt’Cí PÐd*›ÜüçÆQ9xât‹||Y”qŒ¢ã•öûOEáÞóBÒ7OFç½¾Þtòùß“ºiþ›5âà÷5Ïôm:ΗX4Š—uš~Å8œ%ƒæbßϱ?oI²(•ÎÐiGŒÀºÙL÷ÝÛˆZ ÉâbK¼oÑ¥‹Jþ›rJÅŽM–AiLŽª"`Û3Á—ú}‡HÁŽ'¿U Ómñ.æãW¤&G´³xžÆGØÌJ¯(¬Ù•—…Sv×zY*þ à«ô×–9rT¡k´§/â8‹iŠëw6à ¿‡ÅGŸAƈâ§òH8æ ¦=r¾&?C m¢ÕÍ‘;&~-†¾«u”×-Ÿ’¦@ÑÕ…_¶¾c› RP¾CÎ]ŸJ0óêoÎéÑÄöƒu¢u-3a;+¥#à-¼„ÜæO¬­ùá« Ù)ËdÀƒ¦HPb~`ä©à¸"‹ê_^’Ʀ÷®*ÿ\*HŽZDv|YiÇPëuÍ^“x‹ÂÌ´A^!.£fòÅ5‚ò'@NMy.ÁXo,beÌèÄ6EËH‚êSF"˜“ }£[wSð“¨í_-ç¢'q x<ÕÄi èŒ¡+Õ|ô_¹OØ*(£î¼šTÊP,ɇêmºÃ¶µÍåHX¤SX{çvý€Ïâ¨M1¿m¨,S$ÔY<ÅÌ|_4q”¼?G\œÓ•Çph9øƒÈá;ÒWBAÆ÷úÕ^ê^¶¦qažç‘ÓH€ÖÝHÖZË)ΘiîòÆ´ÈΚ¨&øzÎ…—0È?ÿÊõЈ޽ BÛˆE­#¢kT„ŒÀº´ãˆQ4,Ç:@ö& é‰â¡©’qzýk'./$³»5¿àÊ ûµ²3 ¹_J§Ù+ÿŒèÛWsÓV¸ÄüÎê&ʃVXOa~ßY¨¯Ä•9GÌÄõrû𮵗D¬Þ¢R`Q8&ÎðŸâöÔMÂ1fÏZÊ|*¬x˜PÈ3tÖÑøUD˜7”±(ß§b33Z<ÅöÌ”MHT§¢CäÃ{3:5Âlæ­Jó à -7Ô%¯=p’e²6¢ÄØÆ* óòÙ5Í–Lgwʾ˜Îû¹.ù«¤±\F nÒQ¶©‡mæfP´Y'[¦9ÁÝ„Q€4 ––ÓU7'u^~l¹·÷† @egÍ¢+¥šrØ{7GÀ†× œ"ÄiãÍ*´Íª(ŠâZKìkñÓ(t9G`@}rÞùJ[>Á_6ï!Ñ^&›¬æˆŒ ½rOòäô49ò Q÷µT¥¿? æ`yN½öLlUC8–ÏêE·°?>\oˆl£ü´OwÉ#´êÖXÚŸ¥}e=ð„'`’ð òb€½4„~ÞÁ‰ðG]pΡ֗;4Õ4)ºîm™¹@jMûý:“!}0!°Ï áÒJÛŽÊõ¢ó¥J¤–_{ðiÅ3OÛý1Plj GýáÁ㱤æwQì‚üñ’6U+ÓBö ýUâ~Äоç@{ÐK’ÕøNí^0/˛ٰ5%:ÃÊÜ>aT)Sî h)Ò[©‘½fõ&X_¿ÉêáÙþ ÃxC&0AçûÝÓ²$H'J‹lõàÎòE™·˜ÜÄíw"±Bˆ™Ô f&:£ ‹ ªý_—Þ¬rˆ­^DNçðòãútŸî„Îi!æ°“ª³’j²á1«ËºM!ÈßAXÛ”»×hG†ögCð1Íp1bÊy Ñr¢Ã„V쌥øÀ9ˆ4/ÉÞ5 ¦¿šïó¾z¡:y€ÒÃùaØk9â£Gì-~õwRöÖñî }M&[cו]ùü¯žfÏ¢)lÔ<ôO”vš®Ô×[Î|zswëõäaŠG1ÙFá›Ô«ô#ïÛÑæ^}5]Loû€‘p®”=°e=4‚ &Ó±S¹78 2Ö¢¾:xjágP;ªQƒ•]W 3¬±Dõ£þ‚kqJãÛo¶±šâÔEѰ¥h Ër|ìèhhNŽêG-h]Æ!ó9o÷4€u5ÉUo˵;;ˆ ÆÐ›˜,=*ê¾ñI;5Sø”+¦‹½ML<ˆHzÔ±·&™—k"fÐD!zKÛ½ž|)õ3²%ÖN ѬÖNµÕßÖŠ_½ù²ê1Ä’¥Ü™‹uÁ‹£Ø>aÂ#Ì1|¨@×ÁWç‘‚î!í—×â`º‚§5?2¼þõŲuœéB) îw_àë}=  ´ó9 —+{˜˜ [ÈÌu¦”à,¾Xu5G—Y;ƒ&ÔZ37€Pé«.Ü5–_s"y…D÷wäLkwì4‚(IN`85Ó¢Ó¥Á][FÞá;`êãôá‰Ð±(¹&z?ÉK&ôCp3Œ ×5[·n>¥['žŒâð¥¦-«-M"oûÄϽ P§yçCSDšñhÝ7$âçñPc¢®L¨>‘¶ÿYAA6­>cιЗօþž(HŸ.•ÝBúyÒ§Òb¾jÓ5 ï€é")OÚÄ~l¯9³ãC‘°É©¢]³]œîpPP÷γ š¶òØfÐÈ8ù—å™AI°ÔY«H£?ùEàÛ|­×WÜgm¦&jƒ:Í&Ä—‡ä>¡nJ²ðRcŒ›í´9¡X›‰ ëîâ9ôð¾`k^Ê¢{ûbTþ¾‡Rû ²òD‰LØÓ©sy®aä"Ÿ\,¢^Ö8踌¬YÁu×Ñš˜g³$ ŸªÙ«¬_,bã©ÓX‡?Ö‰­ôdâáÈ‚Z‚D î 59ÄÅX€æƒ’ǃ.Bs#+*Æõk¡·}Û¶ۦބ+9ê!ÔDU÷ üêbH޾¶cF<2Ëhz_È(\í+Püöh´Ð.µ¨su Ÿ9x]D׌jµ:qRxçëy¹zb.¨|‚ƒµ©ÇbÍטŸ²›]Œ̦$˜©EJèÛþœå·”@¿½y¹Éñ¡$Gð8æ£:åuž×w•ŠÌ–‹ýƒ¤P"Ûäi2±ó*0t·å®)bÅ“«:]1 3<_û¡Ž›² 3´.>7o‰dÃF‚Zy©¶kþœ ’—×§ÇhT#’}§´Äà¿nЯ{Mëï<ÁåmŒã½& CíF‘.)S«0_ˆ»ŒHõrúraÎ ’N²P‹þåp#I' :Ï(MÑü?ùøXs /¹¬­ˆ¤¥%ê|×ujî‡!²«Ó¨&«†.v¸G4³8Ië%×7’$îƒ|^=¥”èÝ3üæÊb_•Ÿh[5Ôa²¨£©Îbù˜ÌÙ;ÛÒˆFh#IêªÊD\CÄ \ï\ÙCÔÅ +ßÊÄÞii&›ÃîH↚ƒh(=W8‰ørÉ’€iÿA"c!sHÓOX°µÔ¬cMöÝÛµ×ÉXè¿àP³Êjµ66ë:$#&Ò…æJýØ¢½î.m&‹…@(ns ¼J5 gÔ`ªc²ŽÀtã¶©“.@£OÿæÏ!çõt…$XÈJ$!-h˜çò©@ ¯ïïƒí¢?¥C4g–ç ©dëΘüаvC£Jꋯ¯±äW—«ž<ЮK™? HuÅ^â^!¶fÉ ö÷ƒþ;ÁZQóV€·«h*ö‡Yq ¥Ú½Ð½ÒEë«'rÏCöÜó-S¥?që?3¢4B_%_Ýyuj8ýTž!Û ¢ªµÓiº–Jîø!|‚Kò<¨7r¯³†«*†À¡ÿݸ(‰ ì“z)ÏîÐW^#úÎe[[â !îvKú“á½FàÔçâÞ“] ç3·?ÿälÐež¥ Yz8ðÐ¬ÕÆ"nº²>™•؂٠¬rìœ"`I…½ ïåòÍ0Ö‡eñ=LÄŽŸ7X%Ђú$þªi©MÌ•æΧÃÀgÁ€:`½ÕTýÚF£V”nÑ:³ý]ÁµJv£šp=›Ìži›”2œºû;6ë¯ÈƒYTQú—–‹óEWÜKÓγ¦MçgÚ0Dyéh‘OžEÍöÂ…®AáÔðÕЄrÝF¹#¯ŒPF#óàÑžgª #Yü–ðßàN¾Ì+}/ªÕx‹=˜w2ÍÄ¥á€rúc›à¢êº$ž Îb ±±MOä~þ”jeÞd X§WЇû`=ðëi}Ó³…ø-b-Ä eÌÛü—x•KW2SÿͰ֕Tôà^c’;µõ2*aÃHÑŒí ‘¢MV¯àå?|, y'†·AXfcNO;@â¹SöŽÀ?(>Á©b°I©PÀ Õ¥M§šÄ}—n6ñ ]€—PÇ(ˆq‚±”1O‹Î£zâ7ž¢ …[ÕÎö%]߃m\NdpRÚ“=┑ãîý¡Ó¶lŒŽ…A•ý‘VÛÕ(wMU5†áÜAW¬Œ:••FÝ·¼q†ÌèþHµ´Â©ð`fc†$—$û}œH€D§’ɉEz³‡Ìd„ oÄžUDäB©ÀÙ°px" Ó8ÅvRÒ= ï¥Ê«¶,ðäJài™yÔy[|´Z7*r[„(+°Ë$­ÿo݈1!»‚‹;”’28çì×Ýs€l6WT)ѤûuÂE¥IØÎȲh?à$:Ñ·®,`c•ßMD𹨰 ÌSÙH1ÚLUÿdÐ`1çdN )!¢s˜\œ|UAi€cÄ Ô¼¤U ªsÕ(qd&ájÐ@£ãbXçÑËaøSzÇ|É#é€d2¡ÕRÛ}Ä–P:/ˆÖEt“mPÓ4B2“pxN5Ièò´ðq&ÂÁëÃo¿ÔMŽÝb î<:¨AºaäU½Ä‡~z½Œ$JèäK˜‘øãsl§÷¤Ñ[à@•;]Ø“ÁKL7PuB[Èž‡«–³|"53ÐZ'f2‚<]Å©XŽˆ˜ý{4z]"b‡O¿5£‚2æÅ¦Í8»š4Ù‘^‚ÃÖµ‘à°ßY Üa¤ ¯Ï(Á Þ÷1®-|Î@$c—ƒ(¦ƒ¸F ®é¥d­9½¯Kñ$O©—˜ö¤ÆÔš»Ôy¨°w¹„ô;µ)½`ÛŸ¡$ºø¡Š ’µW ÿ“ „Òµƒ¶Åb‡%á0j9¾SœW¬ [@z…©Y¡¾‹Ó n¸~“#Ÿ§h¸x ½%ÒàØutYøYÜÁ#,êƒ)»]3M¯P`0 öó ‚y«õD¥5œúÖÅtÉ@Ø @¥â›´µÇ%œXn‰úßÓŠqï]àE¢lêÏ’¢sÇÙ'àÅÉh‰l¨ÙwZs'‡ˆX«|òC9îZn¶øBˆÇä‰úPäÞ+¹O’ ‹ÕzŒ¿Š­FrÝà…j·°›m,jC&ÒÑÚÔÞö®×ÓìfSÜz\¦á¤ËwZ$G^Á50m-ÎÕ”EÖ­púÀÁ®çwsØÞQè(žÃ˜£ßëöß³C~"«ßÐïšJü§óD0Ó${GŸMeïlQÞºDkÔAcŒ¥ ¤Ñ¡y:؇V¤žÚéA¦¸«Ù6f'ÙDß:Ž jÄUSÈ…çm>mÂãaá{CöçF1›·U¾­3·óÇ¿ÿú‚¶ú#Ö”oŵ§Ö?bžé8•_âÍ~ÅœŒÎ8ΔÓdÇCIù从»ç&cfà €Çàg…ž ² c$ÒZÏ/àÏ>쬬‘'$ >(S_;·ˆ4°ÿ׎#î…žªÐÞ3FËm^¯Gâ?×Ü“ÈVºAh›ÑsÁDÏÀE/À$•ðþÌžÿfFTµ—F2–Ð1AÃh»I7^Ô"_e‰(y›ë,>fÃH_þÆ€ÆÊŒäê²>BáPOZ+d /ÎýRî¾’8<¸CM-4sÃhÄ{Slp>~Ö.²-'bmשּׁØL×Yðßçžµg%Ñ"OÝìß´ 0‚ S²ºª%©E;Kh9uYQWXâß@–(ŽçÔ†E¸ *þŸ¦Çe@o\ûw»ýHk‰ú,M6Á<øX$›.äÓ]+¾2¾È¢ªÐ½äJñ8@ ðèŠl¯Üþ?‹w›‰O(ê‘ʦp–âů÷£™W#§¥þ‚I.ƒÍw7sº™ÝßÒ-"µa€Š0¬þu'ï\Á(×›e® R1(ý°úcNYÎFþ7°[°ú,tcpS;¦„vfåYÉ¥‹45_GA_ßiuzCr­LOh:Øgí¢ò8]ÿèÛ©žžó^ç’‚ðØÀGº¥]æ8¿OËÉ€mˆ‰SW!}yÈÛ’eP]±j-“EÂŽx^:Wi¶–ôe|BÚÈ…”T-‚ôåY©ŸmUC»ht­`ÖW¸Xí¡Á<áKÕÞâjòrM« úÒô'¾^ 1¡Ktp@vÜr=·£ÿßvK__x½Áš%º3ªŠ€J32Èi.X‹ 7>öÇÄ+Ø óÆ¾Ìæ …FJƒÛéò¨÷0uÇ*!unÔŠÙ𱑽þÅ@ƒ³*½¹“,C§-0IúE«É¢Ýð2ê€Ðˆ‘5Ì)Ix]¶K7%B}!sàþ% ¤£\(Ç>íáñÏUf–Ý©ãŽE†iU6œ¬iièʦä0› ö· rá½æ$€¾Ãs­þfjý=µæPnU÷q}¤u™2—cÇ=Ö)áÁ£ÚþIƒ—IIu¿.Å&³`(NwMÏ—©’¥«Q[ ‡„‚’& ä 5U‹Ã½ôÃZ_ŸM‹ä²×\°Ï‹G IæbÅÑß:²þšiõô× ÞmëWºî’–ÐgZRûð|)>*‚k¤øý“.ƒ]­™¸,|^ñ=x—+1ŽOhM°‡£°·Â^Lj3W×üò+ÌNiËð±=¨ª¼>Gï}&d>^™ß;«12òæ]#DíÁ3~T–{<®T¶áø‘ÉZcÊ$WÄÅ’â{_hDy'ŠÙˆ ƒ'üÒN G,ÔdÙùÃ2‰çS¡5 ¼ê) ó"¹lû¢¸ŠÅL^NñŸ³ ýZż¥Óѵ/0ôY ª<߇øPñ+›¢ûè Q§½¥rÞ|:;“£„øÝqà_¦ÚFdk}&sÚÝfÒΪTÙ+ÃUg69ŒÂp4ððÕ—”E'·ß\è‚w1ѼµÈ“„Ì2uëÊ‹uü(C.Z°Í°•ÕYtTÃhM)³¤àÜ µû¾›vް¥2§«;’¹ðCŠÀšnŒÅAÐ6uÀ´ñdŠºGÔ`ü®žz †# yÃø·Ï(K=ê]{Çqˆ\Hxë°í™«NÕ?ctÆL•óEÛItå5VWgÁ€ÐlO×áfÁ­9‘~«DŸ€Š‡ø sî2 ^¤B*¡)V“éjÚàÖཷ„p­ÄV!-4bé|ªp³g0D¾õ$Z\2á+kg^èôÿ3kþMl¼§Df~ÐN&úêE/ NDŠ–ëÀLdz ‚ u£ã·ÍrA[†>% u6A,ìX«=6ç<¨jPîQÓ¸Ûs:W ¼êÆÂKC¡ì8šŠ˜}èaü·<ÁOHë ˜„ç{ÉV´C转˜ÿ-E¸Œzª&Œ£6¢ å“åvíÌ2ÕŸ Mòͤ@-£iy¯Óû‡ çg‘Ðy9¸Å‡I/™¯µ&:4¿*ü°‚må=ßÏ@fCWßJ°qßI¸ 1â7Ýœ¿Ø© üøh½ä¼2zï óD¦Ñg×&„Û›¿„“È9wâ³’6Y·˜húzåX)³ì¡ó- ²Œ8ê¼Ì86·X´(©eÀïŒÐ®0Y4iò>çŒB;ó“ÆÛž¬ÔÊ}[BÌšaäÌršý ÷9¼^Û>™äª\D‰L|зÎ^•ê++O#ܹB‚qf¸ MMvö9]õ+ìã·—®q–‰,c°•O˜ SqÌiÅ3àfþ«|.+ÎS#ˆªÙÅ!Ö”H LDmµó UÝ¢gµKÃÒX£Æ —),ÂfŠØ]éF$Æ.+“àãÔ½X¬Ø•âGetuí3i»®†’å@@ˆý ì¦63âÍ"™ì`,V÷;a[V‚¯6z‘1r`ãíþTIü «FûåÃ\ý¬°ËDxv4`Øaœh[õê2kv»{¥•üz þzOè/\‡Ý­•¤ê„j¼ 5lʾ.ñ"#i÷*ÎKÛOµQBïd½€`:šÿ]%I© m#‚~š¤¦P9ÓÖf,Á_ ¿ƒŠ÷ÑZÔîR¥šQ¶Ú*>rNÊ}o[(ˆcýy°+ç-½ó"ðª;„Y¸XA‘H–ŸTЇóS¬p9Q: Â…8þŠ;+K¶M4ž¯}¬0îb¹©çL üc¸ løSÐ1Ðh~8ów›óu@ñ{9PÐ@,2è[‚ïæóçÊJ½æ£‘ú6Ô$1ä¾ ’RlÁ%¿Æ0fNŒ(¿k7¹’yaÒAmÙœâdÍ.Ð{Yî0× #œµ3¨Öt`7YÀï{%ž]­ßœÞZ^ÖïJ+›Hr蟸(²Øü"È?ýŠ£µ§i¥_¶gŽ) ÉÚ¿ˆ¨ëØ?k½öíÃÊÆ€‚÷§ÞçOµëC÷,úr•î{­’Φ@Qb#A’/²7¶PoÅWÝ’aBäXQ“w]€%Ø¡I“³GHKþîÀíC¶ èY¤5ÞºÊìu|N˜¼X­ÿîþ2ÆûÖØFN¦1g_ºŒ£úƒÕÍ*Nj Bæ—]SauÍ4|‘–n߃ñ@3ÔM¥áÉ/Å8geøP€á|‹6‡s½¢VH'˜ô}¡dýH[GÑ?5èër`ÝÅÎ]šw¦yaSáÔ^¨ÖÌ´T!w{ðÙLô8Ôì›»¡V¾ WϤΌü5ÊÊóêù}ò´2òËuø_æÝë?·= €ÁÈfÓÚK•B2[‡ëM–ÉIS?h-Kz$b8±p0‚N”%,µŒé¡-«#/ %—†…¿}l"Áæw* ÍK*ëUb¯ ¨Ç*™¹¾€÷óð¬Kü˜_-è&œdŒd`溗w¦Ø(3–ü2 ”ì½ç¢sûvࢎ\v³‰ßuiÏ@»ZêôªË;£A<&¡ªÂnw’ˆÞ¡!Ý¥ò¡íRíÜõ©ó¡N˜µÌ‡­ñæI¸ù?ofÔú9ðï…-éÜàs8‡ÿZª’âßanOѪ‚7C¸¼‹ÐY\ÀnÈôp “Cù)7î+ÈŠ§v¯ÚÛÙÙ‘ÀåÓ¿ƒ¸Ç»¿ÏV5p£v Ì1{ªeð0¨&ú#Áˆ6F”Ï’ô×ôëí‹§\u£áAÊ@¦ò I…âkÏ^†;!Òa r.‘$ € ;wn…§ œ?xsJ>„OdRÓËáiŒÞ"•C,é4' ±L0Y?}O<–Ô¼~ö“mj!*äÕˆç©îcƺ·SÌúq;¿ÂxD4¿Å¾^kE‚CÍX§áŸ{Ã}Œ’âÍ:Å2!¨?”à"Cyðf3<€Oñ3[b@¨oê/×'1šïáÏÝŠ=åy9%kdžú©z¯H¿>혉>%•R°Ì Ï¯T(&êº+¯ù_ v$ïî9%´¼õ­Rò"«]¬²>ºÃì½àÛ>-®*|óûUko|Oü¨:wúà‡Ð‰Ùobbág«P0—ÅA>“O‰°ñØ q—ùuýæQt+ëüh¦¼•Š¡Yþ=÷«<£Ï8©C‰¥¹×âaprXÛD8T…_Äåú“›iÃ˨á4¨lŠæPtMÄ Öwª&!0 –òTvÂÞ9HÑUrBÀüÖQuÑÒ7Óf0Ä“CëÏÉGšÌ ªê"s½=wR¡øŒY© #¥Éøþ|“ÉPÜ!öÞøû¢øå¿1j²ù‹E¨  'q \£ÌÅúañÆB Bpem¹ÍóøVOŒÉ °¾ØÌˆ2™J·2œeU-y•ú‹>¶Ì‚;ÍhްêL¾ÎMÍíw £*˜áhv¨pöD²jôë}YƒÚ_‘GÏÌ^­ô ïˆÜ¡í¦þ8-–kÖc°+s1ÈŠÀɈ3NÑ%‡I~\ž\ý·Ñ*dÅô¯”—Cmé´•O¡9"+Ê+:—º Ô—™9'„‘í‹êpTOAl`GºŒâf–ÂCK|p«(¹~?€ë¹®U–hŠPÿ£÷0L× ý€¥ ~to¯™¿O÷3“ä°ÖArŽ2M—G›²5®Â–4ó*ôHôD>8ª^‚jþÃÑ·/—ØŸKØ8XåÒõ ÷K¡£‹äI ªüÍÏ sz‡™ø÷Û*Ú.•òܰkF®ÃÅ£–@_9Ô¶á×dWçvÀ(ÙÃ>¤—ð'ôã­×¼çÿ{ÆÆçO?(¸ÁÝŠ†'§ Äãòe/à ÏR¬D’¹_GÓãjÑÂñµÎS+R Q­}5ÜŽàEHˆÛâ€ó¨pØPh5”‘ú¢èt Þ„{ÛzVu‰õ9®áãØ™ÅÿR ç ~:s®E¿ŸHê<Û?ÛžêÛZ7Ü:ìćÞ-jð:á|T¾ücÖoNã¡K¤£ÐuJha#l‹»93Ý¢ Ù´./în2µì‡Î¹a*–¢í‹cCdÈ?’LÚná°ÊmÁpõ*ö()­Û-æäí‹nÀÙw‚;ÙFæß•~rnAkêºÊ°®åéàZ{þôúBê›[o¬’ZY=ÉG_³ƒö(eB¯ðaî+Ws¡*µ {ðb|'€ë¨CÃ!TF±HRŒôÔUböW)Á‡³ ­@UUà2ÅÀVFh°ÚMòGô¢©Cæ÷Ü~yŸàý -ðOÚXu‡+±·uý‘'XJCðZ ‘Ľ7ÎÎ7”>X|\þƒîéõÍd†¾N<ŠØíøä?„¿H5Žî‰zW÷yaœÐ˜0¼Ù†O?˜ÂÖP¡ø(h‡Ý÷ðr(±Oôé¶=ga6áhKÖ"ÚPíÌÌZΦӻ÷Õ›Iã «5Γ õ½ÑH—ŠÎAùí¼´—zò¾6¨n* bPZ)KåˆD­§ògœ~CÚí^Ãé,Ûî9´èäp[«ôò„Ö'ƒæ%u‡eê,ÝšFr'®ZÎ1²bß8 lDcû±k&8‹P5ëáL ; Cá&q]ß﯄B³ûO=hMCR½Zƒ‰ÍôJ¦Ÿù@ãx_¤¨Fc¿‹ïåñµg»fz8¸–ÕS¿ákxÅ#)Šô¾A°¨€vûØ›m™®žmü«éå ÿØ÷\ªhQL‰ÔZ§Är­óKžíƒŠ˜ÙUº z¦¢SBÐØo°¨ÊœEúïxxÍ(Èý­•³‰P‹¬Îrà¦o`çëØ„Hˆ&o†—3é!ÂÜûïÊü²"M¸ZfóëûŒð ½ŠLZý—½Àš±+ê¸+øžlž°‚yaÁ(ülFdÌ«†Âýã20¹ø¼ÖŽ› àk¥Á>Á¥±rëÙ÷ˆ)jY¬îg~*¢"7Xïi„­°kÄœ S^\鈴ºÝŽ,®çYð«]n£j½@ÿÕ‘«¬,HoÕÒmIwÞ„å.ÆÕÑOG]úŸþ—ªZ)è ý«KøÆŽzËa ,O±® ¼ãϾtÉŸÆÍqà&â+# îÐNÂÅSB Åþ„š!x!&¡Õ¢¶ï}bÊN²ÆFâ$PxHZ5§,üÞÖqéM5p#J¡vqf!ˆnYç˜.;¢`ÀùW 1F‹îv 4-·0ÞÀR5bÛÓæi(„-]!ÔiÊ1Y±¸y™oñK—`P\ÇË ËŽy¬R›ü?ùH‘Ì %/äÎÙ©ma¬&«/S9(@¾îœë¹j~P¡üÉóÙ}ŽÉÈ‘„µ/G¶LÅE²œ_ì\ùÎ?ª %÷(ÈÑj};š©š†)¾cYD5ò:V ¤ÕÝ–uÏt’ÆCóŽÅó!(&–÷C>Ãì,š+yB5ªÙ‚ž3¹´ä¨ÒóÞî6^ Ë^vÖK×Ü•]Ä6¾·ÞMÑLÍ„÷jù’ÿ0&ȘÊMa\çT)†â8œ™y9c¦hÁI5ò´îâÊ|ÎmË0˜É$ñŠêöƶÀlñõÃÈTPÎÄP<Š0å"g9…É臭 âÙGòîzȨ¢”;¨@‘ptúÍš‚6Î IU#Î|žÉQâCy#8Èó —-FŽÎ=ެHá%ãV¹ºc7U›kîþðˆƒ$SàmÊÌŸïþ}ΑøøoËñþà(ýÉ¢‘5//"\€žm‹…a(ÙÓMÖ$Éuü|i@àæCBôp(%Qœ`å½Êoëš±{oíl37 …VC…E8ÇAѶI÷˜U"„¸ÏUDäñ²…“ñ°´såÅÖ: „¬±ª•At4Tía›¶.!”1“mM±)à‘x¹á«ºÎëP›:™óZðLpü¾† EþN¸ñ£ø Qž¡Hîo5-~Ó wâ™ã—&ß—i->ñ€‡ãA9†ÙgI»a©ÀÝœ™Jû]„¿ûÊKYÜ{J”â&ÄÃæ ¹t.S§E°¿PèÊãLz¦ß„hõ÷®Oó#ÔO,ŽbG:W#¹‰ ý9É32Ù:–qq# ÿãdæÍ¹#Š.¥Pž.\»E¿ó«í4»8oT¾ ûgSúêØ¸5/*Édch=|÷Þ› I&¢% /.âŸ^•@ˆC…2ÈwˆÙòÈJæ½Öû),1–½¤0’ºš%çô¬oå—Š³÷š(ÀRb¦ ©–âWP°Wdî) ¡ ƆÊI˜ ù"s…,ôÏèƒt#!ÆYïg„0*—ª. oO<9CºPû\Œs™¨Ã‘Jj9Îá‰ÏU;( F‡ÎDròÆÿNœ èy!þB£n=¼n¸rrÒÓÖÒ¢7¡/O2÷™D=K#?3gY™ÜéúUT†uÐ_I³“b#Öx':Á&Ù6õ7]€¤¢0誰¨T”JV5 x£v@’ß4:s¦¬€ÚA(äSûy–u"5æ’RqÖWô` Ôýa)wk%Ý~nF,|}½<“pgÖ®¤º–j} ¯™Ìô;Œ~Q¡”6âÝq3Ý¡/»a·o^<±öRx+L{å‚ayšdµô4ÉÕ´elbÑ4æÂðe Ÿ,ˆàGÒ±¡ö&±†ÀMònO +ê5Ìœ®F°+ÒŠÁL€6}F½H$vI~Œ"ëò‹Rm~þJs×À­`Fä<Œ_½£¼•PÆÂÛ‹5ªÉ9),Œæå’‹« VAªU¾=±6„ûXK¦‹À ¿ôÞã´K›;Ub«Œk,¾Øyuh;—S·R×éoÙ°{zb_ uåÀÕëzÆp™e†Y›.Êß’Å¡L™fßadXýef¦„›À­móoÎ0öŠvÛts,5›9 Ã0RˆŒ-ÆÖôa} è‹­”gªÞI@´Lj+Jì¬P ’ôèxKÝ"AÓ›ÿ”©Æw0x1 íþæk+§Mcnxn.¶ 9«8K&È)Å î{@Ñb°åMkke˜ù|}†7„þÚ -¸Ñ°n|ÆwÖHà°RÖï[YL­$eFí„aÉâOÉ?æxÐÀãß«QýÓ?p]Ê[±Yú°šÊ¥-Oñª×5ív~CØöB æ·Ó^É—Ÿ¤t®c¨wúÉl‡¼!v̱í~ý=ÅZî›Ã÷¸ÉÑ¢21Î(°ü¢3€ ¦­µŸKq@¸WQZÔÉOš”™'WZa¹KTßù€SœÜÑ’HŒ,VºL o+®êççÐRzÑ&ë*lÉõT tŸëðÖM.Hû'UJýrË •¶öZQÕBÑ™)]ÄØˆL™Á¾Ã›)k×?ª—Æ;eô»hôœü\·"øj\Ô°Ò¬¬däºõ*#ëD®á]£…p‡ãÞ¨P \Þa¿NÚHÑ7IúgO™Þi¥„wyñ›ÈüêïÉݦ±¥m´ô¡žëZ­¢:ïÀ,Zƒ‚±©T÷wÇУÓxD€2M û6 óh-†>ˆñÎçÙŸ¶­æs¡N0ƒ¨ËÒÊ7É u“Üv$FY£™JWñ×E-†MW9ºï=Å Þ}ìO#ÃÓöm£ÿ—ŽB\­ð[ovøö.”Ànï…ÍÎ*ØûÕ‚ë_­^ô6—š 3“i3kÀÔ7MÁ6\Ä|LîêËÍ’jkº-ù;Žé!ÁZ üÀ|»õÂÌ}íF|G¿ÿ<²’h“À!¥úAC…$÷o÷{ ¬—¹+Qa \)8U~ ¨‹˜æÐ~‚H`‡˜’ˆ×Ï}MðÉOö Jx€øl­û]+–Gé‰Öø6nc»V½ýôèáâ79x]ÈÇÚ׸ m:ÄŸ`b`±ÙQÆÒ–’¼©\M-¢MG´aöìK·rû«u\|h1Lcæƒä#!àKÚd18·˜wá°$Á»»CJ¨5.rO/âêkYŒò!5 3Z‰©-Qî²Ї ®¦UAòc3ÃÆObcÕ¾¢ãTt¬~·Pg!A;¤eƒ¹ù*^K;¾/h›H÷ìŽ;(óD4 ~¤M¦”d¶O§„ÆòR7>ÓU· ­öj`yùv²>4ÉG&Q‡aÑÖûÒܤÑÚÛ¶&£CÿÜÙ¸äìX”Or™´rÁ´»á—Ïk(“0jÜ£ÂÝ5Ì݃µ[ýl½è-ųŒîâÂ'-V¤=ÛUéZ¢ &ïÝÕLy×¶'>#ºLÉöôaIŠbØeÚV’¡ÜAüÓMFr?íhøŽ:£ü# XQm­…\QÏ·¤_}©+JᕵvÊ"rJ´7<%¸ê½÷Ûvư 5 ‰A,\)?j]Q`DdÆr²qà_göG8D:s´šoí÷„ïz«ÁFeó2¿@˘ q)–ÉïŸ޵íó–?d§»m”‘×®yäöp?ñ ýû ˼‡¹“ÊÇÅÿ*yZð‚QSuŽñiÒæ\¦™ÐÅС|µ]MÙEæ/Œ0xØžÐQã@j?ú®Úˆ¬i”¬ÿͶþÃ6pF‰º~àf Þ¾…DWà·&ò 1ʯa`ó‘ñBË*x'ò8K”ËhwUÏ=ýU/ó7÷× Å‘©ÅÑv¹±U’M‡9[´É¿Ú?\\¹®:K֨׻y±1û¦ír`•ÿjÓŒÿi‚ÍžìÑ+èuªó–ÇÒ/ŠöE†/w)ÊSWˆâ>Wp’‰iÿ¥LrnXÕEˆåïñïþ¦ÿź´,b…h¹…©"b¾¨à‘X€ø¥ÒªRw@Ü—§!EÁ×[» "^›[ö¤æˆAOäæ*~ãAÚÞ]Ÿ§ “†Ä./þñ]p½Õׇ{=ÿÜXì³zûˆ†2‚_þt³a,urÜ|~•ÓYÔ²~`OQ'ßòfçÛyaÓ<$bÔ¦!†¯Ñ+ŠG8`&$› :W%“¢èÈæ <âL¯*ö;¸†™!þ=”uj6Ëw"AéïµÀ=‡vWôˆ¿aœ%&biPt‡Üú…ªeXõmÿãEÒןÆ=ÇË9¦¦.ÓxMhªz ŸO">»ÒLxìn—1[ X·'8(O9›3ŒwKñ†I‡(ë¥ ¤Ç…¹q¦ .|œ€R¤¤ñÅ$µæè­é­yô~påÙõPû½6JC*ˆ¸¦[¨C{!ðn–´Òƃ*ݺA?˜œøŒG¡ÀOÁ9ݽÖf[71,×®‘a€qœÝ'9ãµçÑ|ï ïP¨ɲ‹/}”0 ñÕ`MR~PüY’ex£L»(¡6£ž…j.5wçä±ÿ'g’IýÚ½½ó]œÒû[v³JsgÔƒã0˜H\œÏ ´ÔDíäd-Ú_ö´b‘þ)G˜¶ÿ£x>¬2—^ŸL%˸N³Á번ÒÕ#…e+}fýî?¨Ž˜šiÈzl£éêîªÊXÞÚ×6BL|4^³DZfFl/c;pØìóò¶±¬´ »•G8uRàH”ÅWNÀÛæáBݽ›¹i'ó€L~T-;/1Aj>½hO0X 0—¨Ô˜v±»F&›¼Ÿ`$cË2ý/F8ûÏ0þ¥ñÈ H;`ié\²¤ÜÖ˜ãôò¦m=÷çÍ×ÏFò9F•?ü¡vXEJ‡”Øúäç~}K–€÷.‰Àr„˯T|[ ñî šœšÜ3QQRaU÷ÔéBh[0Q›¸€§ËÁûÆþ]ïr=‰)Ùp¨S|¹ç;ÞN1®nêþLÑìP7ï/{ûËüÆ:ÑBˆZS³Îª(yï†k%Á¨cþ„ŸuæÍ§‘q•‚vÑÍB«”P ,ùGšý“ê&«ÁÍ€'?ÌC bª€7æ¯X±/ÓùÙUÝ ¿®TŒ\­T–9¼fô©¸ òÇîÊ·Yï(‰ŠJŸÙJ%°(‹nï_.Û¯ÌU^ÇKı·OÛz(J,ó,II“0… Kü>d¿ÿ„`¿j<Äqy ÆÈ &,ÿë…mú¾ØÏÅѼ˜.>³ܳ÷Íåµ[ ˆ³ñí-Å͉k]Ix¥ËlÐqˆRÎWQ)c£ù×U»èw,Â0ì¯ÆÊ{(%ÐR;ú.4#Wiè0Ù4/Á6ׇÉÿ¡ð!çÍ–冪B'WEž Ži]3ÕrÒ ‚Æ0%1ºÚ¹™’¤þÄRz>n,Å~@¬Zâg:R(mBó­ ‘y3t¿üÃSεKž==_âí±u+Ð ŒÙà>m„ÑW÷èâ¢Û¹ðÑ)k´“oE k]ï0ßfÌ62›ç·îæ`_ Ȧ)Q¤6¶õÉz¹ ~"ue£G‚£žT-;<å;lJׄ.žü¼þËâ³W¼T=ëá÷©.¢°3âù¸}LïÂùVo?p Úiå/Ò~@ßñI ­/™¼AÒϽ]â©5GÖ°À\+:nßm_ù{o—RÜLwE£G…Wc7Ì)pðvÜ¥“â–»ãB~zÊ›ÈzF’ùõÍ :9Z"}¦ù$%Qð7Íma%;xÓ—%qS¦íßß°§É‘}ˆãågEn…$òÏ÷†£¨¥†³1Þ®ýñÖ—á˪=Z‹†d1² $þ¡i*Üß½’Áò›˜/^¾š€ï{ZÊ•"šzÏQ_r—áByÜ´¦ìP†Â—%;†ßã{þM„Íÿ?Kî>”×åÄš²íï·õFd”Ðk'ÅÓôï{p] ûoÿ­ãË—µ¯È/­ø›{ :ð!èfŒ€ æcÛ ™\°¿s”šn°¨qR¯ ¼]ü|„…*ŽwÓ»R„<ãztç¸ßèSó–DãÊÏ?J%òçÑšÐ?moy¬a5L2Ôûm(3ÁèbuÐá!¹ƒƒyþÄ_ `n,gârÉÂJ©CZÈOÿGtþ‰CÂ^ìN`¯»Ö¬8Ýcw†Äukh—¶Xÿu¡SöÝÃâ'Òã*ȼ ûê©‚:k¸ì«Ôµ:̓϶Ï6}éáM‘]-½œaÂÓ„z·¢}lùF­·UQpc\(#"-xˆzµwã˜p³*ø‹5åK{)!w먲cW )¯}6J2ï?!e¥Å4—u·¯È®È4®uŒÚÉ tÐ?¯³TóK+µ7.9tF˜A:D5ú(Ùs\à&¶ÑFßΞ”Ÿƒ+_æm‡žæë£èþ–ÇJjë—‚ 8ÊåGÝ{'`¯Ý•÷ÐÞqªr ììüVåWFäÚ"ÊPν?‘vwÇï‘w?Y˜Àz݆?hŽŸ¶Ü£L«EŸ÷%‘QQcý$ŠQ™ŸÇ°þõÏQ´ÕŠ!OJ»>qœiqù $ÔU&ÕéÐF/š"$ t \¨¢+ §L*ÕÆ²Ó f qäâ¬&¡òeË8$N_a­$™Ž——–Vxñ±èñ@€…‡|,Rí93Șš ‚0q[#1ÚŠïÅ¡…­ƒ¡£) „ó×Ì ,%o[€òã͹ž’+ Ô7}3%°B>·ö‚^ÉÖbT!•vüóýç‡x¹êP‰I´5cõP­b¯Žpbãlá4$‚bĽ&ýºémÅA€Êu¨Ì#^ß#6'|$$€œhr5z–gWNsFQA2áÊi‹j ÚZ÷0ná‰0‡÷\k«“f»{ßìÕ[Fl#ýV ÈÑvìSÉÎíÏY¯Âˆ?µNÉtÆÀ˜ž  È‹Î÷,ó¢´QW¸B!ÝF£Á€ÿCKo<Û¿¹}¡#è")ýk\/øEe€²lÆí`œlÞ¾#ðþP¢ NUb…™]…ûFù7LEZŸÄ:ØÙm?E],nÛOH]×vË¢xs6]Æ¢ï:â¨z‹êVÄ…q'òÀ¼vpüŒÚªQv§Ì?×HAy×èw\¯ÉôÆ·;YÓÛ¢:ž@²PÛÏìêƒGÄŸm×ûÅ‘žuL¿ö…ÉÌ€i™Ï‚wMP¡’°=žÏ‡…¬¨ßA`ÝÆYòË7md슈ºï ¯ ZmñRg<~å!F¦%à „ÖG*ÏR°‰}G†#¶óÿ™vœ7ɪùʈˆ5/«hT$p,èv”×'\¦rý£ßÇ÷§•;B ýÿ$Â.ƒ–ZZ('T1é£'&e q¨uÄäjÈëºV}L(ÿÛc{œg‹½Û wSRvøa;T.±¢ÓöγKD}ò%©Li)Ä=Ž.Ç&ýÌf‚Ì,¯–UÁ_Wñ\"K¿Ø_À¹Ósá·^¤‡açq/Þˆ"ä@6ä§‘(õ*â:â 4×ý³÷øÀBŽèï¨ôK¥Â^õßôÌmÀù—ÀãsÔ¸ ¬þ<.cpï»t™£z|õ9Ûµ’óãÖêÛÒ|½R¤ÓªVø¤4ݻȊ Ð…^․»‘©^{Äš¢Xä@;–ôppü'd.þTöÆ#F®Ÿ?‘9XÍÈóÉߟÛaƒï…` œn‡i$~•áô£×ÈÄ1å[! ²M*f™¶ Ýv߀6ð¸Ap~2œŠh|Èu]Ýë—ßyO ¼ä#¯.2#8›Þ¿$ÔÆÃ®>Â#o‡ÑM™LËŸå|tTÃ걃¬j’þß¹o,\#4Ä ­1O·QA×öºe¸>%.“Rñ‡¸ÕVTQl|â¢Õv‡£öoÖ0¹DÜKµS•Iya+‘þ;nEñm™îÎ3á‘L–äÜ­P1.ˆ³Œ-Ÿ{½M]Hï9je2–BP*ø0ø½ê[%¶!Ð}ò>à Ýgº¢rO) Oš˜^Öêi`VŒ¿8:Mù›üWzi%f>~rx÷ïV<"ÐlÝ4paåÃêµûÜu _Œ-Ãc”²ë‡¢šzÒe]¿í.=(‡ÿ<ÄÃ|áHåÂ:êaÞAîªÝ7LÔ%íªÖt¯ëÙf!ŸŽÆÒªœ™]÷Ý’®Ûk%Ú]Ѷ^…TÎrÞÕUЉ©­7ƒ-’’ìmT­[Aˆù©–"©Í´¶/×¥›¡aÇBH 7ßã§~S ’9||n™²Bˆc”³{åÝ|€õ‡Ú$wÌ,=íŒ6ÎáÉfŽ_­Ý>VDbhê¯rdõwa=U¼¼uÔ*ãpòJ‰qAG `]&ìï–P.ÉD˜Oê“N$UJ£îâŽñörµy¾ô°ÏcP S^C—UC³ÿj­Qš¼ž?vÎÏó;Õ—/0?k›À— ÿ|IYc„ üŸÖ êý›­:ˇ@Bzêè !Ãܲµƒ/\©Kéõ4±U’«4WÏÕu‚½’†°Õ >TÒ ];ØŸ¶L \˜ÁÓ"3ñP}åi'Ó“(`ƒ‹‘¨oØÚñ°¤Å5Iþå‚Ä3vF‡M³è8ð³,~¾ºkbrÇnÈÇóÏnIŠbWOö˜ÊRtƆžš_—8Wôpq§J¼ þ &vݱ%W…œ¹:1·ìn3 ˆæWÿ^KNÙÍãG6ÐÚ¾'äÏ&8!Îâ³¥0ûíë œ‚¾0Y3Û_ºÐ(¼ G‹»žn‹ÿ½uÌUÅÎ0­ûß›¥e6%çÎ ë¬Ë¸žÙ <à­zŒÈ¥JÃn`Ôü¢ãuXâÞµÿÁÆwW†4•ê¬?ÚÚ^1⵪è" çÙY€\IÕ­ààÁ2 £J¯9à>5ud¡. J)*¢“ÈÒ¶ÆÙhC Ð¨À±Ø[±}˜˜Õ'ø¸°–Š ×h•¦ªœ[³9!’U¥JýÜo…0‡;j#W•'ûý>BdØåþd6•ù¾Íáý͉câÑ.ul2ñK߈bÕsß”+ŽNúôG¼^挊 ³­pÚÿ-3Àtóyê¦V"ô«æC¡7´kàœŽE\ã; ·bý 4Ͼ•nA²ÔFafÏ—?kq°'²É;$ĤÞöN¶ ŸÜ§Ÿøg‹Zû¡Ú³Ç+¢ñ<ÅÖVx‡Yh…Íò_…qéöÝ+HñaX‘mÜaÎLI™ú mùe*7¦“¯6æ§I[ˆM_Ï” ŽÑˆ‚¯œÂä‡Án| " yYf`{%«êUU!óÖ‡ýØ@±âó¤ e…]0ZÏZH‘|p¥‡ÍOQ}´ª”ý…(ÌG¹£’@¤.€PÐÅݸ÷ÉØº•9â«sËMHŸ\Ô¼JÎ6ì²hÍ‚[Áu¼ÁN|Œ Ü#˜½sö¦A(¼ßƈ0¡I ظ;ÈI…Äz¦QQ!Lá[¹)`N`á”^‚+—pÃ@ŸÏWýésZSƒdÓ)¸³»:Ô¬t£Z KÇ©~•ÿ¾Ä«)AC¾+¥W7])Q}UTÙó@­ñ ¦þrÍÔCwÈq 1)hIDT$ÝL–Œß!â „ÈD°a9vúoÖÓÒÀ,ë¤Á%r·2´°Uˆ¿-kF}"¿«®‚œ¡$87®{nƒ¸´³£¿ š´›¾Mt„ˆìHì´Êkéš ‡ï(x ßÂ4±|¸æø½iǰg„zQW—‰Sÿ]ØŽÖA>Ï“­M Ekßã["â}¸ÚÛçTu=¼¥»?,ã7|qÙkýòÊj>ëæ©"“¿Cg2Љ¶%ºFÃD\Õ¼eQÒf1x¶ä ŸBwy¡DŘW4¯RYŠüœÿRõ²lÄAWÎ mg  I^‘ƒ6kBxßÚÂ,éÆ-oˆaÉUÖN6»µÄ&Å&1Ã¥p¸°£c}ù2‘¶D] v§_`E¢ÞK÷tÄmCkÿß¶å™<È~ ý…_èö%w 8{Ð~m qd*8?à“ªN˲=UOу½BÏ¥öM5n#Qbƒ].½ê‡]é“ 鄦]VtåGi]§H¦D£í°´¿`x]R¦¸ÉÜ6™æIÎVàÜ4â»r‡á-pÍac*"G´ºå?oF+jjfC ¹À¯L–æ¦UÏiÓ}O³®í÷‹_"šõ®âû¡ù~3ZFÙ0[Û­d!À(§’¥»£j—š9ï¹BD%нÙ\tåé» Ÿ„¤ £|á%uÀKÓ†¤Ölg.†­)ߺ"‹}ÑcÙó<4=D‡´·Èf½µ¨Av‡ŒLuÑk¶†w9›`gnîÑa3SŸ17b§äJçQ›Ú©’`­B¥m¬â˜ÈÊÄÐvzh‘[%ƒÃM_jógàTõÙ%NŒ —ueïb¬R×¾¤”úIH‰éåøó~2LïLo,R”¯J/í¦f–0šª\Æx‘üêP7½ Wü\èFÊIÔ£ãŒâÔ!>2mzˆgfÆ÷Áá©æ§K•¡‚r¸pÕÁ0½ÐůåËêBÔÒümÜãØ6Û|/zŠéäë'3Áf.”ûìIdè¨çßš¯bÖÐðnü_ñàô‚DÞ#EòÄ".£ ÏâöšœÝ%~±ÓÊ=FІ™(Dóæ*d€ìr]`TÏD¤6Î/“IÜμ ¥“x³ã,rx‚ͯÃ_¶VÕ„óÌÿ8”aZ6E+´ UÑ:ÒŸ˜jd€þ‘^²#B-9JŒÕ“Þ]׉°²‹sÄ@Z »ÃÎôç¶[<£·,òÔü¬ÛCeÝ;P*O|ÇhGV·ØÇ¢èatäÑmNëHL{Í%Ri¯É6± "+ª“¾A ¼FHlñ‚Žm¤ ÍŠ.àƒ}÷;¤Õ5IyòïÑÞåMÍ„ þVmú¸€EIì#oš/AšÃ¡ŠUm‡Fï—~f™ðmf–¿+êø?ÓåŠ> ÈJ:À ªd(ŠC¿KGÞ% !ñW Žø¬©)¤Âù E¬pC®^Í5‚æÿÝæ“ØzHyÑxǶL̺PDä|ZùÿU3A¥†§™Û©E׊ô‡£Ñ<|™+;[w•¦(Ž>!·˜6û0Ž› û7ÏvU‡­¹qQmiÿ¯–ÄóãèWßs$gˆCöñ¼ñ»?Ã(¬Ú>çlr,rêk#±”Ò”ãÁ€ŸCÜ‹§P¨3( ŸŒ& 7´±Œo²pÿŠe6n’ˆ‚ûMDûÝXAf.ŸPÓ0Çst m4RúuìIÆbÏàýÇUû=µiðàª4À)Çt4àì[IE û™ ¨ªMG1k¿íÉÛ~´g3LuÚ`2>ÊW~¯9°tvmw6"ª•rÜús”§ hÜŒ “ ½*Àéa*¶f£Ktß_,îO§ÀÎÒýàLiÝÿ ‹J~î8bê«û[µ·‰KGOÒ?¬ãq»˜¾öÙ"—г[ìÚaG×+’!b%ùF‹·ö$Îǹ¾ÏÞˆÔ«Z§ ¾¶w{#·Óýb>¯,±Óö?=Š]¡Z/±IœÿãìGÏ9¨-Ié€]5ëí9ØŒ8nQeÊÚF …¶*YÈ¡¦{ždØW‚J+Ñ<»º$OZ®ÇbÏ8__ Ò˜“䳘™~•› ÓsÕu»Þ¡6?ƒÛÐH üõ·îþÄ O9H·6‰©‚+-‚¼½J ‡ÔØÔÊD=éÃ<ZÿjºL¨…ñçáuì ñ7|ÚxïìŸRé >@$ –Ê=’ –aöŒUô¨îW‚yˆýçÒ5ºQñ#0 :5efm‚Ôvm+3صdÓ)ápTYÚ]OݯÝÈ*˽W!{—¾÷Ȇ—Ü‚âb[¿aúˆpnh,ÊDkûÖ»¡7Wȧ=¤3ä–Eƒø€®ülð û,Îó#™êƒD§C‚ÕÃo´ƒº°ž7à“ì&K³õkÒHÛHö9Ùò ô U* žŽxW¬Í"?{êЬËÌ'j.·`ç9«‰ë ‰,Ý»4«õ°A°.Ÿ}T.D¹’¼—³ ‚S~ •Æ~¹ò2‡Ã)ÖʼnÑ0¯2Üô;‹Ë€û­c>˜‰3À­oøÇßVâ’ÖäDEºxªÿ2àš+<ë&è‰_|™íLŠZ&6ÀÄ’V:Énók#ÇÞ% 5¾È:­8p4jé½ uÔŸ=¸Û{ i÷"/a4+µÊ{Wó ©[PÕˆSÛÍê‚M1™:Éžä›/N ŸDæŽj;Õä& •Vï(õË™AN[_«‹!_îó«:ãT—ÌÚò‡p¶ó,éi ¬Ê‹_¹ÒÑâºBç6G'»7åªÉC-‹úËH§À±}î,ºuÜ¢ˆã™³ß< @ø¡ì¦û¿iý–T:…šÄ'ÆìNLK…6=Y-±·´¾Óqê#v `9fCß–¡ÒÂíäê¤÷œî^e°¢U«´Ã¾hÛº<þm”ÍY™ªAöÍcA§¢(,¤X\ iè>]gч®Ô7¡{«™µvMåÄ®8¯j\¥Óš…y¡ÇgŸF¸MÄäälo|Ød•#öx=ØDÿ㩎Àj›ƒ}¬ìBökyî0.-ßùzÞûÕàZ­¤3†£:ÒÆnØp¡%“ºBY3“$.a1B HNŠ~j±ÛäZéê`º%…bÛèpmLJ\À ‹zÊaÙu7 0Ø "oK¿¶ÈŸl» ßÛŒBŠÊ¶$‰ï/5•É}.Q@I6i-‚t=Ëâ‹nïC–1Ýîá†ÀX—ª×çZ£‡jRcIÕÄ¡óëhŒWæ~™_¾õ+÷b‚lµ¤Îˆz:£³_ ¼hõˆ¢ýÔZE>ZîúdIWe.µ ` ïÌ;=üÏâ0ÁÓ…ø*ÿÌ‹u…¦ ð™_ó…‰xìYþ¨Œão¸ˆxZa8ÅóÔnÈȳW¦;ÒËRgÂ$Z¥ÖÏþMÉ꣙•¦|€øî.Tt€|7ùÔ ­¬ b}hs«6ò ÈÂ~#ïýˆˆ úI'ŸwÍO!bîtÝ=‚œ†í9pVÇê4S6-›Ñ9–DL­s2͘uÑVrQûÔƒ¹^•¼/Ü+ž¢Àutx`ïMA舀õs¯Ðü§2n™Þ"ÿ¹èÚ!÷ÒM MvŸ÷òȈ³»"ËfÚðsPìòïaVŒ2_W¦“açÀ5Ï'Ï[, ºq#äˆ ÃNü€„±õ4â@çiÞáaPVxÍJòu i’/º‰´[J É~wº©’¯M»sZ_Çh¹âƬÅLÛaìær¡™Š‡ ³kïÚ-p"ûóé«/‚-ƒ°Ah¶˜‘!óÍô Åu4¾8r5–7a°v^q/¤I ÀÝ–Øùß3œ4Ïhô˜n£Šh=}¢.rj²œÞè*F žßT·¤¬tr•Õ9ãéfÔ1ùbjÂôç‘ÇÌÝ$^²Ñ ·~Á*(ù·ÏJ]^›„üR'¬<kz4ñ…}ËŸŠHK9€eE?"ÎåRp&rÃÝŽèݬè^?;ó»MÜPØÝ9 Ü‹™Ð= IêVgWçï¹pRQ48fô\)ÓÀC\ 29è™ø‚®Àua×nI$J1bÃ"Å»'¬–$J‡‘8”¬/bmL»W?âä0!¶'Ï’Dz‚1¸9WïÁ¾ÄΗCwdpÚÆÄߣ­dÖ$ž³•±˜èB°RÈ€f‡Ö9âñ. 2Ahé_ Fm¼hɶ¸ù¯3™p>k—Àã…y;-Ý®’‡­14Ù$#Xâ4ŠÖÜwQ¤·/è‹…}–Ôú†j]Æ"Æpg›Ä™œ»›<@öFËÄ:f‘ láKƒ~Ò.³+ûÄ&ý†ÖÙ/"ن¬Ü5_òªÿF«’Ž;ø(DnU»V1nœI-B%ç×Ö’»ŠjG™ÙÊÅû»Pjo‹õ‰]/Š h.[ãNaº@·}HÎ6Wþ³ rFªOK¤Ýë(¼Ø{'âC1oŠÉu¡|ôÂ;ä@ã¿%|Ôk=Ü)lÈ»@iMän|×Gíöþë´•òÄAºücug…ß±¯ÊÕ‘›¨å¸U8Ÿá‰åÃÉýïx6(Ïì_]tR?ÞöÙc)ùÀÀ;¡ ßcîü‚®u‘Êåø "U”RÓÖœÿ=<ñ yA(†¿åfæ¤ùbrÈÿÙÍdUªhCï&hߢ ÞÅŸ½ÅNœ0{˜?‘šÝ7´›‚„eÜðòµ•öñcÁdÑW[îÎ/€Ñp/esKÌŠÆà!ÀwÄéŸ'?vØÁSËótËMäù— Ò‰ @\h+džGê*ÛbfZá hçMÅ» P3e…ÒûèãL™Ú™¿¨êîj'?ªóEÍ.êmUôäKÆ 3‡€¥­†ŽëJaôòVCqèlmlÝWr’ -ÒìKÊ{ÈmüœyOßã½þ‡7øªNc¾Ì¼DïˆY.ur£ŽæÿNÊ„4¯…´3]yØ¿,ôœ™“¤Í>çN6?¥ZâûDQzœ·ï‡ šFÖaB "Pçí)¬#wKiþú¥ç_X—,»¶=M͈hÏ'hûòe²bŒ»'r[Eèï>ÏWIšœ£Õy¤Oc׫wò9+ÌdGé=ø[Ó님â1Ø.ÇW¥jj»P`_9™ÒîM1†E¶Ó]ÂøV{©~ËÃ.\'¹r‹çOÛMªUĺUÇÄ\°wO]aCb'‘€%)µÃŸ±^;Q¶Uùâ· Ü(4™ã7Ž‘>™øJIJ¨¬™WÀ9ØIÒoâNsa¿âhxU0¬ïݵô˜=4ñÄŸ;r½iQZK¬ü_ô ñ«03>‚#gCßyÊ^Ü.º”:Èó‘[~ Óù@ÓH8ù<éѲñÃßkÚUÈ37$¶nㇰmDÆÞÿ¸úÒÔ{H^³ùä…ó°$~“1¥È$Oèáò×] ¢³^©±‘›DÌ9Gâù.Ÿ¤meÉ w&€’ñé„‘¿åï¶‹®P  ƒâ }„ÙLltp8„õkƒPb0Ãßý6ãCwq×nsZ]Ï£åܪ_D§Ž90û3[‚Ž6:z>J¶´øbÙ]bluÅÞ)ª·r¤kÿúQs¤ÃTÈUM&èfú^AÈ$q} ¦[I“«§&! /–*UAÛº[#gÌ`µ4:\ÌO»1šväÛøuÞ1ÛìØÅÒõ]=‰Óâ˜õñx6àœG\ ÿ–ƒÊ¸µOÙ_\‘x7.­2·yv†Éßð†«E|ö¶Žàt·ŸGæÈJPú4¢=^p˜}Ùã—¥#2orÓÖ½7Ùû©uöMT[*¹Žhâ቗(Z•,Ñîå41ÂdŒwJšò=òðÝ-٦臄#ººª-·côTÏO훯?®×eÍ_lW³ñoå×PS_EüÓG´š×idäÍŒÄâßñEEE/ 0ï@t ;ñ™òÑ1$Bä×WÜ+¼iö,d®c_Hôõ³œ¬Œ‹%9æ¹êyQ&C°ñE`— àhHyY‡òžÜv®V;Yÿ”Þd)$ ,¬È2‰;ˆ†½0%>uï{ D,ñAÿâž7G™‹ƒ_¹¢> µœ´n2ÐuVTRºÔ—óùÍYF}XB˜vèo°ñt}UÌâ]yÀit$ ~Šì£éXpËÂkú:^+°;âù5fH™dﱯè9¼c ¢¢ú‹íÿYK|·;MIáï°ÊˆWò(l!oýºEh®XKߊA7ÂV¡æ!ç~Cþà˜>b•§eŬٛ‰ìtþåÓŽ(™*K]úp§-æ·ÿ~¸¤Ì8ždõÐߺ¥wb:>€µÕ³“ñKÛuÉ´eÄ­iE˜è‘z²ÓÈÄ2A+™¦A`…é½±K[Sêî*÷À~ˆýxÜ $ßÙù‘®ˆ¬TÀÓª!¼à†ð¶ÇžzÏf› +FÄY0t,뎴%]û“¨æRÿ—ÄáßdÞÍbç—Ñ>| þ ¡$Ì4¢R4Ì6†DD}ý47죟J?lãúxG~–ŸÑ€œ #´ébOܦºM¤ZD´Ã{dQ+„ꉥ$ðõ4É 0r5‘jT²PçËm 7uK!œ“j-À±‚Ÿ\o@ò£‚ŠçþÌ.îñ44<^{a¡-G#˜NWm¹R"L"}z¦üM‚ñ³¨ú‡ýýcÃŒžZõÌK™—˜»VþñÓ—Žœ Ücþ£G†3>…äð/wæ)C.C…‰9Eñ¤=§¼ì>4ÈÙØŸ/’"œÖ²2“ßnµÑÓìæ½–pö‹ïÞ~jÌfEÊ!(YôtÜ鬋†¡ƒƒ§3èajþŸ<ìÐçžì“t…MQqG>xNø÷ÅÅ)ßÞö„š©,:{Ѫ#ñ6`v¼iïb|¦7Çפ}cHKéF§qÃ;·¹ë éœç3JfcÄ8¸F/¬ôŽõWӃŜUþýÿZ$>PÌ‘œ ð ˜ÐDÃ<0‡n'€¤?˜É ݀Ͱ€±îγ9Š·¬ÂÖ#€ï6 y¡Or͇Ü5FTÉñW·ØXð¸hÙªºÝÆ®Ỷ4UÅ©f¯9ÁÐè^Gá½t¨Ù¶­é{†èlÀ¸¢]}î0ÇÍ ÞÃ]Cb_›G<4¢ë#6mßÒ½4“G®UŒO´^æMÚ‡ÆWòŠ—Û¢2@里è#r^lláobÞŠ]éÿ‘)Û½}»ÙÓ›mL›¹¤ovÂÖPøì^{•âç0·‡aÑ&£e’îtIt1•²–Á,ëZXÁ) ¾Ò(ñl„ º¬Ý.öŠ©ÃN­§/Çœü’>Ó„Åg`òzåoÓ*lC“×ärùè”HÜб³"Òf02"9œôlÀCذÃÓcbª=‡NÌË»€ LyÊ“¥J°EEö{}à»ÎT‡Y"‹ âÀÍÑ3£)¤J¦žnåðƈ3ï€G|ЉH‘21„(€M±BæâGèr¬<ú±vý£ å6´/@­ÕÉé3"Äæ)ª-ϯlA(‡­Ôàó:tZ\B?(ïïCRŽ’Ëñx‡Fسº0›öy¿}tv¤åÿ9Q­•¶0H׌vúiugtåt¸±M¹&+ŸNÇÙÄpϾÊÙËÙL$è¨ÑÒ¹wIé —ý ä«Éó[Ê&«×¤¼îÕR2o3Û22ºF„c=­ŸË<µ `އÈí}Û=»s¿˜= •ƒ& £6ý5ù0O¼;©ÙU3Y«vd {v² +¦«ÃÎýòrɰ°ÖèÆË_XŸQ#•üe©&ŸŽÌKN’ÙM"K¯à … Ëy=Õñµ©ß“Ü%ÓT%R £žÛÏ/¬;˜Pïåœ4_Ì= ih“§éÂa׊’VZw>ý³µ\4âªo|›ÂŽ_¾‡ÕW+ô {%š™Æ^Ðg—UO*¤Éå[÷ÔÕE*þ¼p9KzÆ&SHô:ƒKѾ£(tÂêtµØÛ6aä“–ãÂe² Ä¡'Ý^£ ‰ÕXx ±ÛðràÄÐþ\]£2ŒWñ}¨­í}REDºT©l,ÉñEÆކ %»1DSÿ'1‡¹lU_ÏØÉ³‰¦†©5Fô¸,ªM¶÷þA ÔOñêÿm±cÓ‹TF‚N¶`¿»ÿé®õtñ2¢¥ÆóÏß Â!ÎεªøÜPHë¾PA8Vª}F0¿ iÏ©íDãTt“p͘²_m2üe:Ÿt¬ D‘”PÍ÷ЋœAü–  zf¹NtÍ»ä¦Ò?“aÕŒË⪂¬…¿ÑØ1aüÚÐalÕ-µU,a Ø %Ðl_²1n™Ñp­‡2Æ[›œ>TŽwð4*ó”˜@³†²”<Œwå§cˆyWNÞÁ()½ûU‹ÝçVë«¿É—PðZ÷¨Ú¼2mKzì£bF†KùÀÖ˜[] %ƒ[Š7ãV<¯*ž¾»·T䮯€¾·øvJhÙò±&ÐY““®rÿŽÕÍþû˜ò[VrÅÏ¡NÇÚì¼1$Ü$Mɲ((²ô§ÒOËí¨žëâ¸à.+jR¥\oT#¥/g´š/~ЧÖðpˆxmOçeãEÅK è£'m×Ãv,x¹+`Ž‚Xèü6x9)LZ¾íBú˜iîõ˜M¬ñ†ëÄ; q“'MßÄv}öþ8_oF•ØÇý_Dû!h,­‰Îéc`r¸Âœ2gõ£|Â!Ë6ï›»Öppz;®$ Khkl,”Ξ+Ɖ*ÐõéÊn¨çP¤æºöÐöcx9—ÄÖ0Ø€¥%hG„îüÀ~ʹÜÜKø )Eºéµû3toÊy޼ôÊîSÖ.r¬8’ eÿ‚¯/ÂÎ\&®d÷©gsÚÖ[ɺˆvÈ~ÍI‡ÎtãMÓŒû ;*öºh!"쑤wû€âqŠŒYfʳu·V£ÞÚ"01¦Å zá8žþÖ˜d ´wîl§ÆŠ“òÌ(AšrÔiÌÜu%nÛ¢ ÎwfÄá‹¥û‰Ä^@±ƒH?Ò~Æ¢$««fô˜ÈÚ\í$}áNBw} £â6ÅúýHžŠÁÊvºHà7™™¹&Ç„Û0µ‚´ø¢…|òu”ßÑwl"7L\†¾9ü ·~¾ÓÜ´g^Â#oÚÌâT‘c“WŒŠ¡š‘ì‰`fįŒöi¯gÞöØG~óDùHÊþ¾$ÈàŠ­"#{$4ÑJ㮵³jû14½a¿ôYBɽžòk¥ôäøåŸ¾ôr\hgívì‹¥’o°)¹mÔ3ð)þ=KP©×É8?Ènjâ´|%³#.õNF÷[³O}|–0|ûîÓ|·Q%'e4Ó®„ßcÂtmz Ïä¢J/–1!h'‹ÝCYö =vZõ?]̨ñF}4–‘{œ££bŒ²¶HS&HP?mµh¤æýþî/È‹HWY]•+ mäÉÈ?[B•·ŽÛ%/ÓÇ«èÖt‹S›Zïû"â)Îe^lh£_Z}S_3ÒÜ"†‡ëG¸24¨F@\‚³t©²¦Tø±¸Œpè*.Øe¡·;”›sIoZ7’2Å‹X/f3ï5™à…nÑ_º÷,œjæðyô`0¡OÑÙaîã¢H¿ü4™»©ÝɆ mó:ùñ¨JTƒ—¡äE ÌB ñ+®b{WL…p 6¨“ƒñ™³1·ôÁ΂m0|Ç¿PU„yH÷7Ž™¡ÑQ)~Fz4g½_Gdæ *œ§õÒÊ®`Ñeô7¿…ð|v¦¼ÚÎÎe2û ÆU7n>Ü=[¸kQº³ž«©šV‚‡­~mO‹†ÞEöäuÚÛ’`¿ö«aÙÛÜâªáSò¶…ch*„d[η“!ž¶3W(„-MâîBXíØºUoû=ÒÓØÊä7ä|ðw1ƲöU¶ÐJ\2Ò_Cn_Èøh±K¹,iD¯n#v9/lPêØiÖÛ½|3e[ý—ôXS*Ò¡¢—Ï î÷ݹ^KžØé\Ï—Å2õW8²áp<¿³d·ÏÖ]_N›? ¥v᥈VÇÇ kLdJVh¬ì¾,ä–ªöSš…©§Ç Zù_¹€ùK„ó‚Ø™&¼¾_Ý1si%ó)›n4™ú±‰ª.Ÿ–&T†ä'›±ö›Iô™eóY+,7ÑmÓÀ󣱂sËæ‰ lÐ@½ÌíW&¨ír5¹™H‡ÈÄ¢À@B´E…ÍÍj:3Ê0ňВlî²µ›v|Mé¯éõiæN‰˜ŸU‚K§pÓÉuëzgáI+Ønd†eO ýHÔÃÉö¼ÿd¨Õ»lW«Èv|Â9WZ…ª3é¹ÏäSå?&toOô¹é‚äJWv$oÆ£o¯@Š¢(ÆVð€ÂïWNî©ÈÒÌóGŽhÅNÑÑr×Ñæ„¢ë.ùÒ¿û¿¬¯nK?— ÝA/7¯CûÒ¸&$^õ+–´sQÆc\àŸxŠÇ§ÚíØU5•Ì6å{ „»}ÝòÏ[ë»±b±ý›ŽÃ‚ÌB¢z ?­"ÜL:ϳôò).[_<%Sà©›KJn=BZÖUÇë̘ m/X1e^ú¼NÔ0EhÜw\z"jÎ~è$;xOÁÕ˜ý9TÌùV{‚^iS€ºg7ãULû·×SòqøõÜÖŽ}÷¦è&pñd·Jé¥"Á_ýˆC òoé „ºûó¢ ZјóTäŠÆ|Æ <«¯}c9ˆ®ƒÿÆ\BõZL>hv+ ~ÝÎ?Z5Ü¿²’Xå2£Ý'C0zŸˆf}uÍ p;ýiþuPWHF©j0FLùó—bçÞ†DàŒŒê\ d] $©_$:‹À:¸? º‹kö·áôIÙç_ awè5Dã¤`ÏßU [¤Õõ³Í>Ø£²!joìï b4(´»Ùª$øGý{#Ø×}[4Î;çáþÚà„ãOõôã~ yJ‘^´€Qü7»ô€ÀCÝ ™o 0 ªDÊtku2EF»‚®XSRñU9XÈÊ=›rŒìY¸`0£™cc1 9Î-è¹ñhn,DåÞ1CÐ Öã,É,–ܱܺÆã¥ò¦#¤ÏÍÊÑ∠Ro2ÙÙ„¾  ¬E Ž4*QTŽÁ?ÎAyÛÁUÖ=o8ïá„¿GÞ?ä˜ç¤ížßL\$3n³!Ạ~C‹󷸲Câ[$¨Ý[ÿhS^sþc†­é«ê{¤ù£žªú&7ò~a)5Œ€-&H¯uĦZŸ.â{䯵ªl¤óNq°1£]Lv€*€ ¤*ï3÷xe¢s?tmï.h"‡ú¿Ÿ&@«MgÛ2dëÓÀÅNý'r>©ì|Öó«X{ wTŠL1õÚ«å-î0j+w»õ|ÕŸÖoJóné"ã–çÖÚ·’\E¡¿ÏÀ¤   Kp5žCJs‡k‹ëÆlOž-±ë§MèÝÿÐô!°Åä©Ï"_Ë|iŽ%frŸ7P¶ ¾ˆ6_RíðiÑ6.ÖëÝ;òÞ¥qÞ¥GÍ`Îg„ÀŽL­Mö Q Tƒû C?gà¢;Ók³‡Ê2µæ§{¾|ɆÂŒtÐõêw÷¢0(ýR†½WRšâW¡±õ)e€ƒ6\Ò >oò…(Øc•7ø†´­²A}¡xzàEoæ6ºz iLWÂJÄBåCȪߚÚô“÷/ÁööªŸó ( Ü=Ø|ÑMõ<ð¦Ëh{íxèfå(ˆ7D3ÙiV«}W2¯ö°ªþ—!¯GáQáÑ__Ñ€qþŽ•=ï 7ZÛ z uJqŒ›_VxÍتuÏè. ?fpl*Ý)ùZ³}MYÛ¶V ~c8ýeð §_Bf¾íhè¦þsskê¤tîÂŽ%ØNÌqÌelñNÓ:ö3c˜8!ö¿öâ¿·ééí© ð‘òl±ž”öKOù¶( )]=iŒDd9ÚõB€ SûëŽ&823a(šä£èë>q ÉwRTb33) YSF±z×]œHØHVqmùÉð{ì¤^úªÎ~Êç½×úŽü¿’š–kbK’è½ß-ÏwBÙ@oœ4Âú0•çìTxh·ès>ô½v*.üH ~?„xX°ÀRízp&ÁQ_”ê;œOGΙ¬Lk¾´© 4à›<Ž@&¶)’?šB‰Q‘¯É7DmyÿÚ`¹‚™à˚ثW˶n×á²¥ÚÄç4_j $ù©ŽÉE/ ¾k=·½€$ê @"LŽÕ¢•3ÛŒ 8ÐGåw±^Mþç_ÕY>e :¯4žpý›Rô',_¬{òiºKï„y¿?F|̲(K­Ôµ3Á°·ôóú ÇG»Ø ¼ß9a­¯S¹/¢ABx÷QU2$Ø0¬Ÿô A~zª@ó|ß|{·Û{§…“T>³ç?"lIU¨z"i1¼Ù£ï³­FjÏz^÷UÙ*•®gþÜRViÖRÅCs¿¹…ý=à¼i’hâ ¢Þªä5ÈãÜÂëÞHòJP^9eðÉ1ú•ýüY¿ìÚçÈ ÎsU › È$ÝÁU÷ið8ñR,5t™œö¡¬ 1šL ¤ÊƒÏBñ•ÉÏ/Ž-t(é³âü»kßîtµ«,:°±âbÝñ)–6 uŽ0…ƒ«zÕhúgž¶þ”¿» ËÓ(%*¼Èâý÷mW쩵ÕD'ä* ‘­FME–ñJ{zT}ÒWÞŒö,˜ÈP¡È-cZªmä6ñ"­fxNÐGfnËZžq8sñð@–ó&Ζ?ê øÜó4àé3¼c1Ùaù\/Z0†¹‚Ý/äƒx™‰-ãò£Þ\Lª]IËôYos‹ w'oê^ÈØ'wq‚ó÷€@K+û5Å?èr#bErÓ¯õoVÕ¤Ï( 0ŒÐ…Úm’jt?+o¨$6RkÿÅm`¯Õ(±±MD5ºõbCÎ×H+—[b):1Á™‹%^2kO´F (â¶&b#@Úâñî¢ó½t6ý¸¤6…?Ow™Ûgë @©ÛLä÷_ü˜™Í˜RfÝ{½úI¤+9Dðw¨àÞüîÖ;vµvM»ñÚçfe`X£X4- S2•”ûªÃÆ#Ÿ˜’•’ŸUå‰âܸp’~¦>S™Î–Uà_: ‚û¬&3}Þ³0„2e;sW(t«ÚÝ6ÂA!’h© ¾Æõ1ÕD%·Ÿ½—šIàÚɹžªÉ“d•Q$Á9"˜*ËmW7¾8!œ+QÜ@Z£¸æí Yˆ³6÷p ª7É8@Óš:’b^@H°Ýn°®¯~"t¦ñ"†q{! ȵWÀÚ–åýŧ”š¹e ýŸ9îM˜<Í-N‹‘sŸ™`½»xïí•c/?~¯jX/ýÐ’ñì&-)©‡Û”óšY_tvÍv{ƒ‡ôírS‚9sîðø¤RqÜÐ0fÔÆåƒNn ^–óµÜ³ïH÷VƾÅþæI²ÇB¥-g d;™´‰72®ú¯FÑ~s%ÀÈU®¶üJÜN–G£%[Ú?Ïѳ:îúaÅüÎ>–´ 8®câ Á-×u™»žæüŽ'Ѧ)Iqï²×_ÞÚòß „¨áfÊ"(>`Y£òDÓæ%·pBœÖíÉ-•F?XÀøj<}jýiùܪ_$NEDh‹£ÈóÍzéH yÌæAs|•íÑöô? š{^‡…Ú]¬ëq„@y]|Édhø)ùhI3NÕM PQlmV„úß^Ïr$ønvy,†T Pì(þíÔ.C’N›AZÜæâ‡âÏЩ¯‡[æ*:¢·fT î3l§Iõ»´ œ3{2|&‡P7y0¤=·—Yßü7ùã_©Ó¼ÿÇŽèé`²B„ÿ,f¸ôî+Ø’gÒcXÆÇG¸Hé¥!„žë«¢k&½•LÈž[‚Ì€v¥Xi5ba»ÝV]»®¼-(”âæö® Ê7Ô™öFÂÖ?^çð§B €›_…ufd{8¥ÒR12—?9 Ù[±µ-ÁóTÑ:ªmÁ.‰‰Ø‘ÃG¡>¶…çã"“ºÔìCþ›L„}áDé~ƒé9vŸÕ(Få ôHæÁ™¢Ë˜Í× Ã«Ùs»ìÿÛègî!-J0Èï*I’«á¼Í ïÅr4´Á‰†ÈÎýWaÉG•…ç+Ä%HÚCíQ߃x`%sø-±c£µÑPz1 èƒ.mkù´w¯ z2ðsÅà’ü aÇe(ˆõÓ«Ì“©žÿéø6Y¶ŠûåͰ˜ŠñƱ%ŒJ$w™ Ì§úám³wÿÜèo—M”8 °D+Ú%çvÞX‹„—ì…Š{‚ÐÕÁ›UQ¤·Í}®¡mºrT"wü+¥WvžM±Ž×ÿÎïÝÀì°ôË0³%Õ/Bg/Be¢“ïÓ@:¯®ôÙå[3ÕV´R&i"ªYéÁš.Õ´n(%¯tžu;2fõóXÕSD—C0·ÝaCˆ×[WnJS3Üt>Ó÷’ÂoÔQ° Š)æ]@°ÈM‡ÿ"ú‹5ÊJ2y2z¨ž…ìŠöáʼ‚U&îlX!°¥û´'ÖWxõ´Ñ¡þìG¢Õàën!êâ>î«vÕŒ¶;8õ–œmÏ ¼KçSÝ1²E}+êßAn°•Ðǽ¬„£¢î4(›·×zLÁìÆ8þ¿ÑcEi±KÉó³^o[¯«ú¦€ØTf…`i&›þÛ`nGA1ó‹úN¡ø–aðàìñžéy²L[‚“ ªHŸ^õÕx—Û€©ã3NB#´[n²OF7'âÐÎå>œë_P0ó›I1oyè·&•∠Þ+ÕQŸ àp·Žy¹/`êò]*«ðBOÄPžîáñúþ²îк”!Y)'vë×ü®XG[ã4”­î4«W­öèhXêŠx>ÏO^Ç…w—˜ñÌ…k¿¥P^Å?uš°Q‹ òÅ1±îÐ@Ë#¸B¤ Ÿ½ÚHgíGœÚE«ì$H £ì¼Ía»¥‘½ÒuPmHñ”«îy iý4¶vÆÜšy”ò g!ÈÈÓ ÿHý<¤Åƒ,¸Žs‰ä%Éoã"{3âf1õÞØŠô`±¸¡±vÝ,Ëqì¯p‚×ÃËͧ *ˆ„­ÿi›ãùê®ÆÉü¿‡‹k}rûêήozìL˜Ø¼3ŽÂR“ˆ«vÛ¤ËöΑéw#ÔÍÜT|‰4r¥OàI)§ô¥u'TòuQÜgó%$AŠqL¦ © !4ÞœH5T¥Þ«­ª›Ê½É' N {gªÔ+Ńó}Þ§¢8¿êeÈaË&’Ÿ¬,@Ö¶;;ð§“ØÔ㪢›È_ª*¶|*ë®[J) Ù²&µÝ2Q %·ø8 Ó0m-wƒ‡ÒxsœúñX&8 X="ÀC`÷ ¯ËC#p0Vý| îDû"æv ^U½K¹vùÉë"PâŽBZ ÷ø­ü_Ñà­ ‹->8ARWÎŽ˜÷Сºî@wÆñ#!µCzê@ýI{Ä6JUñêÞ…¼¿bG“þ¤k–û‹º6íÕžE­Î) BãÑâÕ>’*˜¶’[.°Ìеœy`u’+;çò@c º£¥’ƒµ¤p±ÉZšoð)nÔü|ºI%"_‹•{úd{ TŽ›6q„”óôÔ5E|µ¤(‡>Ͳê0{Ò˜Œ9ëø ![ÊŒ@›š{‰ìñqÞU†ËVÚ ÐlÏš ÜÓÐ-FÓØ9/Ë­®÷+o› •þŒÀÇ€m¯HÕ™–u½#“+'§cZ0—«^¬Ë•zaÄ5hzcq>vm³ H ù2épÒÞ6ÓFÜŸÑÝËnp·èQjìz¦7`ÀV‘‹ýFF—X„„y×É/Üä¹íª/õòÀSç†wÓSQðwl…ÉQIŠÔF·’]ÿJÍpöuí«%}Ö A¾=þ%Ú›zó9Áà¾× mËߦCÆ×µI€ëá¢rñc;éî6²ÙV«Ep˜²bXz’®ûÄe©•ÎI¯É ³À7ë=a¡·©Ò)?•»meǨúíŒè ¶ˆûåâÏŒ?ÖZJ͹wÍa×~ʬHf*£Æì[u˜ åêªçþ%‰WHî{ŠÝ;1´^g×eêüD£z3Nó¶Ç~ûA—ʰe4r$‹­w;¶ 8ïpF×stˆÉH|q‘è*·¥Q@7ÓÅLËz©²9Kó‡ÐëÇŠ8‘We5»:£EÍÐd”SIqŠU/øw#nØ?1¹][}ßß@Û*xž®¤taŃ\UF:6€ˆ—€»\Ø‹“ÿ@uîèØ‡/ýòãÐúÖ9WsýD¼ 4…_Q-B¤l½•Ór–°€Ûe/­(ÛÞá[´®$ÛaNÿr>ƒZ>‘쫳5Aa¯Ü8|§õ)W{•O!:ŲtÁ|Ì®ôï¬ÏÐ äóP£K]%û …Œ ™h%XtÊr×hž ñå|™©ë;.©(ëœåÑFl¸aQŒânަÕôIë¹1$d—¼a„†Ò8ÍŠ´í¸>¿NŠ“!¢í‹@~•fI¾3{c›?Ò9)Eó&ŽT|nXL¶/WË奱aªâ7{7 ‹éK)=&ˆ¶âµÅ–øš*ûx©‚ÝòÛø3¦GÅÏ߀n56ÉP‹ëflbü׳%˜¼Dôñ¸wO*$»½š³¸¥çž¾6—m5Rd}#kãúÈâ^<ŒrF‘ÀÙäâ»G<'„†¥óA‹A”¿ƒfob£VÑø_áßa#…#‚Ù½\±ª¤,…lÝa¹e"ãœÂ%I0:mЧ!çY+&6q¯ô‰j ³”žu@¼Ñ7îé‚ÂÜø Èÿ»™(¼WjÚùu<ï©0Õ—Ø'‰í^0Cóÿg|áSe-3ו’ÉÈOŒþÍ‚…1§«í˜rNp~ÊÜOË: «ÙNÓÛžBxÑaÙ"Wl·Ï­¤Å|¤^º·È3Ð4”è¸7HjžÏ'á`´çŸn!A|í̯XsþÃ5iŒk1ì”t­¼†V@Îrò«€möubè@³¤.=tÄÉ$¯²è¢0@ Çbvއ‰äcùLÔ:X=ŽS° ÆqS-‘.õ½õ¡Ü¡ìÉÐÊŠ{as|z&óÛ)ÉräyuÞÛÉB…én£ÍÕyCòˆ¬kG¤ëÿ™$­£üŸ:8ùÇ»¾c¶Vü|ifâþ Øë7Pÿ8¿Ó®‘–î*ÉÔ•½Îe’$%yBâÝrúhÒï$Û’O%àNÍ´…‡¬¨ÞGîpL}±•ppÆML+ e½(Ÿž±u)«§㩸d–§ºÞбºGy}×Ëà°«÷5‹,¨Nûä §î Er-·¨Âg†‚‹ïe$‘0,mn±HˆC27÷ˆžÍü¯ütq%ðiAà 0ô!"«ÒlÁ+‹k89úó=~“zîÜ‘ÑõÉÍ 0D_ž(¥ûmŸä«¥òÓV«\¦ !7л$!ãI\ëWõ7 øì ǘyŒ©¯X·zE2İVüŸÖãŠÌk ;ŠÿÖH /ý´šgh3 žÂV¼DÎmÔËo q kàÊšQ‹¯~ÐO¸‚Ãr½ìjþïÔU{¹šˆ¯HTÜqšÉ_jé [o¨r¬ÌáÊè“‘Ó É¯wÈçn!š;ž½êÑ|‹Ñew;üï/q>YPµ+%`‡ý HYœÏ§r™<Ú&(ÉU%½büêØá£§†]\ú@Ž\³Šýç`KŸ r¥q]=`*æZsÉ‚nœ2Õۻ焙J´´Äöˆßyc%ŠÂua›óÐ^-¾F™1[T!‹0‘uà-âF6ôwÿÙY|Cßʰ©›ºXEÕ)bÓŒƒØg}§€Ó+116"{6Ì>ª N;—_~J‘¤\ò„Ò 7¼›jJr׫˜²,§jNOê-IÅË –DSUhy@p”¬u¼ª9÷ü^Ïr¨1ÔBIæ[¹³“öÚůڢC¨u!g.óïIY²:ÿý8t`Ú'ö=¯\ZPŠR÷Iºx§‰›J˜LPV ‚iaœR…j˜'ñÚ%ßPªr×îpIüˆÉOijA\—T,aª è8¡ó(ûÕ·$+B¹O/ÐÅ䉿·m-ucàÕ>QP,ÁûžeL#Ü}9ܸëep«]˜”äL,ðzÔÍ k³þ‚ë¯Éƒ4³æ7x(qãâ—*ñu¹tþSÊKÉ·è÷a8õã™cçÿlâÁX•]"“ÛH‹ ‰U)F1N"öWhFØ Õ!þT'N®õá|N°yfýIÌFÈG4Ά“ãqJý«f´p™xÀéj-ŸøIƘðqãA2©¸æ<”7ð† Taxs“în>{àÃ­ìæžâz‚——§]llÍBUjTòaœÓªZ€T‡ž"vOÍì^;¡_[49çÍæˆÇÍÅÕ>WáçÚy[ ZÐÉSyÈÀ]PlŸþQî÷\«Â¶ùœÇ„%’Ì”<¹ +ùia”…ÎÌbƒÝ\L8ßߺoiç¾É/VßÏ»²s[2ŒbÚ‚¶™çﺨ.¨svÖïƒ.ZÄÂ0Ò»÷³n”ÇE^’XÉLZ¥X¡܈>ǯѬt³ÝÓi“w²ðÏ’;¯æÞ­V}q…›'Waãë5š¬þÂW~N;T8õÄÔø>ƒœƒ’MÛ–Ö1]Ùógº„Ü/…`Ž˜õi2á€Rw|ß¾ÅP¹/‹T•døu¿ô1 jv¶¸Ñ³ž¯!·¢ ³¡„=¸q2pÓÂÙ8@ƃ%gþ—«K&è ÖCœ´8²)Ó]Y€ €|‡ë/¢hyiËræ‹)ÙôU=zÉ]¦; Ÿ„+1ú¤åL˜,JçQ~4ÂûIá’™ ALoÐE§„´MéAº;…£p¹Ïýa ú$Ïû„}í:\ž;ðØ Ðzïk™#¿ì-cFÂ#A}h«9Í£˜ÖðAh„ÈâÀ(ÐS˜„ÑÙ>^7ÉiÄ­nì]ÚúÇ}Ù÷5éÕ²åÄùÜO‘ÍC ¨c¡évº0¹gë™jëk5…žÁ-é; Ckõ½/bËÒÚç9ã|æq&éè\| '®ådŤ1ÈunH}ìØê\ì VsĬü3?¦ Á÷RšÈúŠxC' ²…ÿûM#Ö ‰ ¥ÄÓqh\Ù­ó1¶Î^‡… —îÇ¥tÜÏ¿«¬äІ2݋ſ‹j)Àª±¾ç¼j çWǶñŠã£®&²Ÿbø}-B–ݾE„¶rˆËË”¦‘áÏ0±•QŠõpî&#¸‡F‰ÕÈü_öÓÜÎÎU ~’çLN¢â\Ü8Éa½·Î?½å¿Ã’Ÿ°q…g3{Ûj©"Tíw¶ÉtJ¡Å’qØÜhæ^‡ü¤cb­q©˜6ÛR~õMФ,«|™•®ÍªƒM B›W«+Šj9Ö ›•þ!.p_²s†‰:·Cë‘ñùÙÕÌàâ˜ôÊ'3 ýŽPZ½ž`ÁÄuoth²Ÿz6gÝÖ0¹¬ ²(gnã%áZæ¢1[&èK—~”û9›B.nˆ_á<»thnàaØ8Æ[Фw£Á‰ ir¾h!¤îSž’_qEX;!égê‹o÷ÁößEìà§ 7û¯ HLÛgÁ¸6jC+—³yä–óÝ>¦xÅÖyýÔ$…¡ºêõ'‘•Ô/:ëçGüô­¤h»¥Õ㨻0‘]Ò=5ãç`kðÜ8GÅíqoö"\ЇÜR|´Dû©ü|}½È)yâ¨i—ÄÚù––SW@.Ô[Ê.¿WõO¡.vÿî£\Áer5çVÌÿȺW·'™œèÒÌ\‚’LÉŠ6©(!Ó5THhA¹úÙ²`ÐsExvpÉJr{O§ÜA…î¢ìŠ¥ý§]eû΄o¿ êOg-nEÀÛŸ;pquÑ!ÂOÙ€%›Òî€ö 5Îz+ªâJ@è Q WJøþÕ…êƒ%6\9‘Ï@À|õH~z«Eì3w_§¡F}Va-ñ;7õµÎkM'a˜Ýû¯hdjAÑ i ®Ñê­{€€‰0zaÄó“%Xþ-,<^ÏO%DRÝrÒ•/”f!HI‡2œ—/aÌl/~XB!øwƒÁ–*)iEvÕOm«Qƒþ†yééO±º°ªÍFuNIAn“QÂ4‚Ïò ç Kë„h¶P1åûÔÞÄ¢'ÇrÆxòö%zåÿ›ï«›2à2zsÓ’UŽÕâÇé¶òŸÆÃÞ ´“hHEoÆ~§Ô ÏdíºòÁžº}±¿—ü’­á¦íõj£€W$"©= l¼µ»›EòqR«Fýóµ2†“R®u`ˆ¨1ÞÓOaÖðâÅ2¨9§üsT~‡µ³­±L&‚)XVί廳%õu»-õ hš»Î0~‰é&±ÔÞÄi3]Ûk~P<ʇ޻ ~jÜò$]¤qþ›Ï'‰sVxr–árá=@ü^ԵРúÚÙ0R£f–®Ý>kªÓÝéZMëí5×áÕy{²îFvàFF°{P…Dâøî‚›®0£XVo×[;Ñæ!½ê;™Z@XYÍ=tV UYˆ^aºÀÎÀ³É5ûô(‘f&.è†ÕÏ¿*©‚&;i~OHrŸ*;+‡â‘XîöYiš²Ç%~2 U`ÓËÕõŸˆ Î a–å&Áå)°±‹e˜2¡+Ìhù>}K`keý2~X²8 Ç…Žu`Þ¬r#–_ébøLõ2ÿP.7oãø)À¹¯H Àdßõx.ïŸû"-ÎòúPšÖ‰§)| I»4³J_Ëš“y~¦x9OŠ}ðlÍ˜àæ™’Ÿ·¥Ûþ1 S¶£ÞË~-”•«¾ã`Îzï,®³?ÏNiÿ­ÙLn&H— !¹Ó/½ò© ýoåt–”G½Ç´eOz‚ÇWF¾t)u †\ ÔòH°ÿoPò…ç\ºŽì¯£·ã,ÌÿšÕ€ú€Ãó˜FùàëQ¾§v7±PFã­Ç¸g©±DÂÀ ë»l`RÚ¶í´žŽ2¹ ‹–ǘôói]¨ÒÒpàòDŸ; õ9f®1q:Q ß©4ifWLɬ‘x¡UÇ}l^˜}ZÂÑôÔÀœjÔô×mšv‘5÷Ñ"~j•aõ8à{A=FˆVËë©i³Uß–Gx´£ÎÒBfñx%âë n¥ê©ÓÔ Ù&uhvEÔQš ;æ·?]9$õY¶“ý´½Ñfk+l ÎEžµ<‹"¬«+uH.„îæ—Ù³!íŸj!Ô£ç¸îTˆ7¥. yÇG ¥ä!¥X´µÑGƒÁªÍ‚jô“ ’ksÞ‹[¹˜3Ö8> :¢®Ôyï.ÛkÜÉñjKb‰J_ìR‘c]·%\ì4üo`Öj (#„f1`y¡Ÿ³ïÖÇñÑ@/7Óõ;FÏš³‹É©wÐâå Äòöëzz¯–HU+¨²TÜ}æ'<¹ÇŠÉÕÉsÒà<¦ï-ž;•¨ *‹dö… ÆÜçüG”ªdš~úÖ¥œ{~®_âB¬Jêˆß‰ÍÍg;‰ƒ”‚vL“{+Z<}üôxy·jbùo!Ef/âÕï®,`™S”ô‡:yK@F…( S¬C3C%+å{/|F²²;­TÍó<'?QÄÝšnC•¿G—oí0/…*^ú=IÁlö´µ˜Û"Šq¬ZÁa…ÎáWaÝ¡0}@¨º 4N];*JãæmöìHf…ÎzH5¢e¸­<¦pY³ÿ£s’uåüñüå}ËHQso;Ù|n7פ ÑÞ¨™üLד)`(È1Þud–KäÖY§P¡¸Þðr{…,7‰-•}œ>D8”ÑŽövÅ?&-Ô‘!{ØÕP÷÷Š4{ Q×B,·t’6*ú˜™¹£Z¥®ºНpOÙÛÛ—$ôí^þ$mÎÝ“i÷ŠQ7ÃÖ,T¢H-ƒ5g»ÌødÙéqÒIEiKÂpKýƒ^L~H_<ï‡9ùðЪq(¢Q‚~€j¨£ŠM´ èîP¶Üö-{OÌ­u±êöl®A7 aZõIL ôÝ>’ðõ®¼f+Î AM­ ÙW:JO¥ˆË á'œ ¬õÝJ0²ã,X~‡Ýßæt¶Ÿ%uK)‡³»^–ãA]áá©,äŽs«g;О,×;Œü¢7O9üÆÂQ;ÑÐ_´M5¦ÉŒ44´8ÆA2èˆ iü§D¥¢bølÔ.{Ò’gµ¤ªÜ¾×G’A¤œêPAÍò%m:¥Â6iÙ0Í‚+Ñ«\yU¶20lÍK4“¿iÜ Ûh‘²×Û’t  °ÎšÎï°ë¦³tò¸ågý5BÅy˜§µ˜lŸ‚[zd‚ò}p¤éy¾‡Üm˜*.³ä)r<8ÓÒëÓKî)‹7!åXŠŸ¶AUÁ KJ0èz/a“6¦i™Xh§QºÛ¿ý9±5kT8áÒ«ûþ—i¡™êß ˜âYH^k$Õ´óDÐÐÕR¹¹lÛR-ú޼Ýa¯¯´´8¨3ºû֥㨃ˆí#f’вRtcÞ–º{’à õÙ¹y0> ot,Vnêm:~ð¬ù™}°\×í4¾JäÞ=ièÆ“¢J}f—x¿°]˜9—ŒúõÛà1ð´®ïe@g±pX8*¡ð5i€ãÞçÌ”©ÏÕ¶ç”Ò*²=UÍ¥pÔ¨p<]22€8Ζ¿´7ŒÏ´ò_ŸÀ×cö–îQ£éQA¯o]ï^íÏNY¢eV)adÝøZà¹U`ÄÛÖĸ²ï?ƒP4X ÝÐÆ ™bpŽ/ô®gxtŸ%M A6ŽæÕB1ÃÜ1©ñf¦ÅëÈIŽŒ;E±9›ú×C¯~ïùéñ+A¼úEX\”‡/úص\r'?`©FWpžr®ÖC4ƒò ‚¦Œô pš£&dí»c(pºÀŒR‡Y R"+y‚r4ÚàÕÓÖî¢æB» ¶(Áü[³¦{½UÎ}z›=ùñP È¿ÏNäþ1KR “e/æ²c0ó±X@­êÄÒêDãuê@v›’NMÛ“¹rzŒ|çÀ{fÔ|asVŠŽ@8_ЃأµW˜h…¥\;.È0ÓWBÝ3ÝѸz´y¢T¼þåk¨Ä-sP[h¨ˆ7SÛ¸@åÄÕ +¡ž}3._‚¥` ùËIp2éÀæ1Ñ9ÌáÆûõ oÿ¾F˜Ä%ã¤ïèoCBÚu›Uôlb]¦üŠæO*âÄݬY2‚¯ztb êE??,òDÛõdËA-*XŠ)4ŸÚL¦ÓÒq}®cµá'/¨§Ç‰Ç÷4w暣ð0ÒÃ4Í}¬ üÞp™É1q.sÖSÕàÌØÊ;ôäÅÒ< ‚ñSîÊóŽÇþ8É*÷Eè@!o¿Nú÷ }U´:F³#jj7øÛ¿Ž¿ç™åˆWœöQ‘¶ +F‰´Âq_’Ï-gj)/l‘'¾[;õf‹Y÷û}¯¤³©1îMz /ÅÒŽfÙ©‹*;{“¯°C…‚´‰:Ýh¾aÙá­õäÉ’šÏfÀ§ß#Šeá·ì—&b›S;Ò×ùÐQoè;mQ99%ŠdÈWQ¡3 {!Ç®XƼôšŠuéÜ>¿ÛÎÇ!rÙôÌ‘ÔYø¨-±Ì([8»°HGHu&›¨J>PR]\2ÓÔ(f‡BWõˆ«ŒiêtTk¢ç4ǧ“Ân¿™ô #ËMšJ°‹rKÃ:¶¼škùÎh%³¼ûÏ6Ò$^_`|µ_«ùüÃêbŒ9‡j‡ÚX'æ„YA Â;sñGKÏ´õâ?bpŠ.5ŸÅL2ø+°,äò_Áư°{7œá<Ù¹§vÏöK¶Ó'Õ+‚ &Ë…D/$ã61´> “:F|˜-WîX3q Äv: …Ù§‡Í¥k÷51Ò¯zL÷ß:Wö¬=\ÿÆÖyú±[ÏB_娴)Ý ŸM-ñõ®Q’‚O˜º!wäâ-ÓèÄz3Fë$ò¼‘ǸíâÖ%ChW$”Ç’¸¦ï¿êÜ¥7JÝÀÌÏÂê³î“Õƒ„ñŠÒI_ÉKª†Þu ª¢0¦¾î‡F%&Ê%ÙÉý‹…€e3*„çTO‡:½J´ý¡r {a”Ž.JœP7­hå=Æ`úñh¡=÷ÍuÈ8éã»p\j ¢©ø#Ø,ê_*_ö¯ÝRy  ƒž8ëQ ¶-¤åBÔŽá4ÊMHËx0s,ƒi¹²Îa—)„,I“Ž‘æw;/.W!ưdÆËEÉfÛE·«yø†°[C’lÆÁ׃N¥,·áªA8Ó#¦ÂÀ)î (í$-ž¤…úèèJ¹ƒÚmP·qu†r‹„¯¿Èöo-ýö`Ö¾lL´¼hzVÿºk^œ/Ü~»Êú'`€sñ€qÞ‹ú4¹ˆ¨õ$A8/¬â(m³d¦e‘qÕæ]Õ¹-?™–ŽÊÃOØ%‹„šFdÉÈFéd!øS*gÓÞ #ùþºûàâ^[#m?»ýÚmë',AÝMÿ0‘½ÔP¦ûg–Ó¢T¨ÞØ…¼@$³(k^¤V:ýëÀè¯FÇÕÑ4æû]ö~¢6ŠÌf¢Z3²‹õÐ1#sKÆÓìÚ‚jlüÁ]·¾1E¡}N÷èQùðfÓ!SÒíOu:çÎV@7Û *ÈaÚnœ­+É£¯…?ºþºÀåqÞ^§¡>%¿d„òܸqS‘ÃÑ‚ ïÜ=Ñ K?"7}/êóþu„z´`Gí¸ñ–”„Ò™.ðÙÇ-*ßµ;-(Ä {Ë¥ç —E½T}—Õí¯˜»ÄíºuÍ }u‰ˆÝ&ÜaGoØzmµÃC­¤ÆtÉPoWYÚÝ?ÔZ&;•òl¬þß‘Í1b…úlЏâÑó,úŠ,Œíš’ 3õ7®”Ô"?‚aEàç¨`Šÿ6ý{¯°:®72™û.n—dH8 vtЉgLÿDC1Ó?7Ô]°ƒgr5þÀX„àR<ˆÀ 3ŠsÍ ¢tHM²ÏÇ™EÓX˜ïÀöøÔ)+! Ž~¶ãœe¢vm>xOr|ƒ“¾ö»@=· Wœ™Å©œuÉ&•./„2&ƒ+¨¥|P yW1<#D¿çS‹çŸ¿¡¥E“ßüÿ±ÊÙ×înÒÎýµækÉ·˜(óÅ1XIÒ[‰ÞüS¢º$FréA.n¼F‹’H¬Í¤«i z;Êhù¿v»ÔÎÚ0U%ü÷Žú'€ß(ÜZ£ÐÿâúÔü7ÉEÔŸ±;ò0+¿TŸ®¡à©žŒŽtòñ½‚Lw U­O[óã»+?»€¿Š•R±ügÒC™îL5B{ Ø)6lعuç ±KëÄê \ÊРÕî@4£0‘€ZEõ8Õdê×ä]Œ7oYâÄ/aìÃ/0çaGù{ms.òòš‘Þ"à†ËçÀoêâ<àwÒ»cÒÝ7þ¢@Ĥ•²/C|NxþyÊ:ŽèÎmËV}+¨2S‡˜z&ÑþQøZeZ‹}œe›LÐ7aú_0÷]@oré&YqùjüEÔö˜D²HwÀ@õ·æ ÀhÇŽ|rè¯r:¸Þ»}¤³9œ>i…oÞ«Íò¿'Š©ËCÑ0XÁÔѤ’G±¤{/\·wO´[õüßÎûÕ‘IVÀÌØ [â—¢ñ¢W/XŸéŸÖüŠÉ˜Yº~<ÙªdòöùÒ]ž±{êÖ`E²} MŒ$¸ ¿S;ÕHÍg²rWWñ¤IØ8ÐEð‹Vž~ %o°Ó.:¨Ðoèï+» ÞÒp:$pgKÄ úeY°TàÕ™§7HcNE1±½ð¡&¡C¥æpIŒ½/ PI M÷·ˆ‚áïÇü¼—’ÞX²²À^Œ-ÆØY¤˜üÒDÅ_ "²~ jU2 fE˜£5ëÚÔýÀ›Ôc¨³ÅáBj¤öpgŠ.TõXÅlËZèê–\o úS]RDRí"À=r¹°Ó¨Ïv‹×¶:<Ì/Cú@y9fh ”hþÌ3ÂX’; SÓs?¤ÃÛÄ=úfâ [Tî£f4¤Y¸ü§Ž¶ƒZ$ PåUüÉÖêNÝ;´˜ýæÒ´QwR\µpTݯ㻉6ÇÏvaœk¬èìñº±ŠhC¶¶—WwA£ßCSÙ¹$M$‰öÿ¢üHÙ;ĽàÛ®ù™š²}iõ1’‡lô/–ÿ¹B2oŒ‘(œçå‘ÏÚ»ú‘¨Æœ îׂ{Äþ´} ž˜Jê'¤eŒN 2ò ‹ìxˆÊ|°p6XêAHz¹…O =fÙ˜êO þ™©R#ý‹ÀsºÜ |(kx¸ !ùo¯5c€Tj†ï’Á9¥ôÝ/s äàçáNåNÞ⑎d´üH/pˆŸå@XbûÐb}×HÕŒF1ļmWC b€¦ü›ð`sÛÓ®qµ§¥*hñUˆ6*ž©±c¹Cµ©óMýFc®L2\¼GVÆS_UI“.T¡”<ó`ò³G€.Gò¥\u–¹Ý˜Žå2Íq¹P3¦ˆ–A¬F¾×µ)œ‚×Gžg [–f ÏPxËeilöUKÈQè%™e–])-š‹KõåÚdÚ8)ð, Ù =¾ô\“kD‰²ÿTÝRdÛø!qicÍÔ@3UHÇe„n`"_Ô… I 9úÃÒÚÝ–â_°‘ÒY½É&ƒq‡éb9„Šl•‘²•›¾õî&Lü†|.¬â`ÓA÷ …Ή›çÚTö>+ ngå"Q+ ‹ DeÙ‚’HÊm”„¹ëNx¯Ã… YÎM÷‡ðЯ"-eöVQŒI>0]ÿnPŒÖpPÉ3ÉPöÜ,æŽÃ=n±Ê7Ü[bnXhL¯rø•z¦ XÒÒQgÀ…Ø=çã\N°j4«äBðüÎÓÔç¶™DieÞ«›€_ÔB<Ù$ä(œf¬Æ^æl²®2›'†ûÿí+…˜Â”~èÚtI“›E¾Y˜:òšö‘^tâÜsj&m²´&(ÜÜÃw„n‚©qÄÈP†9«Îu+ðàC|ß¾Tòa…Ä)ë mŽðãák É]éáÊâ8¢8,iM¿N<”‰u!^ ð†ÙP˜Ï;pÓxú¨…‹ItWƒuU2ØG’é2›M¯”’­úÄÑÙVyõ"ÑìÎÁMò/sÁ‘¶ï<2]Wb"µÁW2‰gkÎE m™Õj‘;=bÃ'>%cÚ#[: `HqEßÑÄæ;¸(±2ý­ð÷µJßZlyHÿäqØà“ Q×ËjæîfSŇJ’âF¢x׎WãVí €Â² ¹¼(ÓcóP’Äèe0™øùÝR£©|`yýuˆûz4õÍ ‘äHÏŒ*%-¥÷)è<éµÜ¹p%(:”^Sõ±Íîè<’ÞþÒ§ Zjä¸Ïç²ÇeÇËdÚ{[\ü9ó+j€$î nH3AYûÍ'Šºì®…IbŒžWJDdLò8¾¿Ìbå%[]EøQÀá‰ð;Jì°”31?pôÑJntæŒ+ËÊv´æåC˜£w[ŸÉâK\v‰5RÊaÃb®rëâ÷ .-ÉrÜòCBùsµúà°— –ΔÝ; ‰áˆŠà{äΩ5`w†¬×e<í_²ó¤èíí>I£ŠJ~$X€RòîáF0ô °—åƒHfWŽçQâgW[¡ç½] Ù†[b:3l0Ì¥û™ßæÒ®µæaí±{“ÿуÁ Žán$Ú48t±VÌœ‘¯çÏâ»ù…UÑÃáü¡wEúý‘¶­Â¨ í+ÑŒm”<q ÔöIj-é\×¼[!­¼¶RŸÕAO+#8£n¾dÀŸ&«%ÀiጢŒvè3ˆÅÞ¬®ÀL©ä!'­ƒp…¡kgRjÕENª*â½âüûZ£´*Q \£Õ+Œ}¥´v¢›°w¤îëbJÐËLÖ–(’Ih`k …2:ÓÌ3½€žè¿5Ò1½Ð79ë)Ŭ¡‚¯2w¶߃º¬÷¿¼t2R¼$Z罜äÊYðŸ$øÚ£…QZ‘õ„ë4 ØÀ ¦*÷ÒS¡*Em¤­õF²ééÕé)Ê¥€ ®½—“€5Ø‚Õ2ÊæT[yƒ¼lK;¶@¬2?@D›f«òhFb¬o”M­ÚeTYºÊÔ¥5OÃQb”=r .Ïv96‚³„}(ý c‘»-9awvRK\æëj6²3Ù­/Ìœ1;K­#åióí8ª¦ÝîŽ(µ\?pÌÕ­ƒX®þóðÒL².AŽí]ÖÑ{ûI¿·ïþ+ÚòsF §PÓ ë‹ ‰ŽwHê¤\W†Ã)ÁC”PoV§¤wW®›¯Þó@(®¥6ùSãL¯ŒÕÖÙ׈ ‡e¦Ãh_î7Çï…ð yç…jm½12V:¥G'€Îf*îüädÎÚRäÚ0ö×ù}âÜý/à< …l$îÿ…±¾a9‘|0˜:Ï7Ži¾·vZôÝÞ¿í¾ˆAø"g’òtÞ+LÚth(aÁ:$Þ?‘ëúö; ­à+òþ,¶0tmü_óñ€ëWoÇÌŒ{2çê}ÚF]ëWÓ@š³ýê_H˜Uy¨2¢"¿à  ãÃIR »O$ìõ…e¡ñÏZï®8gšã•­NÖM±Q‘¾"Øôø˜sÌÑ£Û)’l!pûœ$×sêèñ48´J›d•vÍÆb1Tý@µ ç­kûyêE¡Ho¼NЦhO_¢Cëðšü)úåT ÒÙ–GŸw¸G§jÿëèÞ 4Ø9þ~!°Ä̇Û߬ÓʽSeªý9à$ÑZo-OœãÜúYÊÍ{˜Iž]Õ¬¢3£ÄQË15&â|, ‹G˜„:ºoaH,ò‰Ï-G5OGÓ:„ U ã$›L4µ¢“¶rb«®OË oj`‘v$ͬ’dtæÇnÜÏfÏfóV>µ/vñ ¹= ®ð d­².þf t#v‚¿ú ÓGÍaÇapðxƃ‹¸SóËdjÉÑ.ʬi ð¡Þ±Ø FÆ…ƒ"Öq–®Fæª8'¨ˆ:UPŽn¤¦#§ 6…+„*n¹„§‡kƒdêH÷ ¶ÅÕäD1€{Ù\û6#>â+ãQ¼Gg$ömYÃÒmÓà~l¶ÅÛ¶aVú%Zn¹žŠ¨¨ÃP»×Â1$ùîå~XèÜⱃÏì”MÆ«4Ž4uóFƒEåÂH_˜”¦Ä¶þß» ø‡C²äßöYÏ;ƒ\Ð Ágì¨%•ÄÿÁ/Î6õ eÁWb—%tG¡cKLþ¨IðÇ߯þBL€$’N ¸–ðS惀‘Æ4RˆúÉA'¤#@–t¿=ûtŠÏ`GOñOœmÇùβQ3XèLçt_-,ïG¶˜Ú‹8wû9’zf ÷v…•_¹…S¬*\õu„z{<0¢¬¸@A‡ t,T­0¸éítxÃ]ç•Fƒ­ãV›ùqPŒâtw¦]Û†U”õ55f8¤]ÁkBœ÷{äÝ^³‘<§¯z•\{JUß=z‰hѯè<2K3n‹˜•x^EÇO¸hVœƒj’ä¨ûœÊбWƒ,¤R™ßpå&1Ÿ‰yÂõ‰7¤CÈéÇ»ÃfOfÆ7Š›7œz¸®š—¸É«J,Ôe®ëv›ò©æÂ+¸ÁÁl¥šŠji”^¦Crª)ô ™æ’5>kÁ“Þæ2çO.ãÏL™ÍàsP¬Ù‰`˜4ëµ<@AO£“XM~Q&m캈Œj>`XìŠú¼¯äëÓßÂÚóÖ?ÀУfמÒKyÏÞlíñ ãð¼¬C¢cÏü·Tú|¿_á¾9çü€uí”{FÖkE"jÖÜ,0àl  ÂVV/å´îY¹¯_«¤}áª[gBdDìùJée5ý£•ó&ÑHŒÀ`ÃŒ CÉé—¢n OÉ·Òb}Ê A öÒ*­â4Ûu°[}'~s è)`ýD7gAUEÑ ÅÉ€E%šx¨¿ˆ×y™C&C ¸=zúD á2WE‘Uð…šS¨?u¾'Xy»¸]ÿáæ=•CæÅ¬$; U•0…ve ñÁöL…2J–+Q V[³ÐbúâM›Zï¬B~“²?YÉÂXþº-·o KÛp®³‡6-ñ…À%º,Y™›4ö¯úàNjsÂqm.}Q컹¹9kE&¥ÞboÄŒ\çf‘Bp¿T8¸Ê¿yðpEr²Ý)ôBÒ_»›b[×% ZMò~Ì—¤Ü2€x’9 3OØüèUq>œ}»‘°6µq¥Ë¥º~¾>(½Â¬ÐGN¹·±ÔˆEv•"ðù Zr?s_'üg‰„IX‹!y,ý‡®°E¯B—î>š?/ðZC’÷¨XÜΚŽÅeÕ›‘;8zEJ¸’àªv‰v¦Î{Æ:½wqn njˆ$€ÓYÄ¿ )72!ŒßI>²N({yKsC…%ÊÑ{Box!ÏoVY¿°µá4£L|zœ^†ë|8aÙÝúþ>³“!^ÃíâÝ–ÖcVm;¡Éݧ= _龉ÌSƒÑ+6\<ÒÎÊã“x£Õ†%>YŒ^ÏwX™ó„#›äê’-mÍ­]f¬°Ãˆ® ó›¥9Íuˆ²Ï-J! xâ<ôòÕ-<(3¯RQ¹~v\oìñ!ß”œ¹\YÆÅ ÊcÕ4Ša!D‘•hd7kºb*S„±%Š]Ýâàu¬Ûm!å ùÅFÕl¯<íªxÎôˆTf$•dx/¹ÃûW”rõÕŽœÀù"Öì‚e¹Ù™j̉ÁFys3ù.b2ió £Î]Š£k"숷®.õÇ;Û~5ÛT‡ÜG3½ %>l‘/€$Ð55šäõ%µÈÉüÒtí¶€öà×Í bL?/SÃG¼§ë%±IFhöUrd|i@îÞ—ú²ˆ¶súGñÿ6Í^Ú]y`¾ûìîûÿ$)è@±Ñèx¸;“×^ÅþG–¥{Eµ"ãËí‰÷ù‡|¢WñZÓ©v]Š6,©ñÚ“Q£ôG!Rõé¡Ö#½(–ôÜ‘]}”4“¥Ò^1n;Ú£"Fgë}^{ÂÏîAÐ_°Púr¿œ'ÖFœ¡Fê*vZ=YÚš›ñy &ÿá6Ï–þašpŠRÒJTSÄŸ÷ÐÄÝ®L,‚„›]¤5·ÂqÆG—Ä\b=¸rÞÐlp†ÕL¨äçïº{¼Í&¶PþÛÐu*{:z—Ðç»B‡³;ÅáuR A£5äË™,7-üfßÙ3Y¦Œ<¼G¦écÓ](¨š£-×¢ ¸ñJ*¬ZIJKNw:ÅÚæ €Xc¨ºJó9†tȵ¥¸á¹!+ƒæÀÌÇüú¢]v‘DMu‡=¬\®Ð9¿ÂtW}˯˜ˆ/`Ü[W÷úÑÔÝõ>èp¡ïƇí_hh:nØé¡Æ”ZŸB¼«fÇà9ÞnÛh»(4s°€f.jPµƒ›Ön\uL ©Ö§ô>÷†^ ’3:µG™Gÿ«Ä[6¡ê­`kYzß ·øSÙeR·¯ˆl%ƒæfí€Þîgçâ™7=#|„È ¥ÉÜ÷S™‹Z0¥Ç;Ä!2UŠê²zÃŽpö‡.v  ¶W¶‚Äöh†æ±?3l³vì¼JZÂö,í†L”&’„’f¹ZÏÔs,®Ž§4lŠ9‚0QàJ^î/ëܵ%\ç6æD„¬mî× x4ÓvgÉyå’,Îçª,Mí°%pPöÃ$,˜ó‚a¼Ïøøè”!gmòÖÁ&rKæK¡mê¤*ÓCô!ÝbXdáòM˜çã@„ò—å_t9ÇÖü Þ¬Ú+ÓÐf¶µº&ªO×µ‚~Ùéæª+ìÒwû—_³ó¥ ´ã1HÖbØžÄG:eãj‰L ŠTšÄèsÕ\VµXª:I˪òs+šuVœíl±+$ØH¸Ëøé«)Bôè+oªú×'å~¹s‘·§UÆé쟹ôÄN#ÚrdGµƒ’j¸ÃàØ(ù QºËìz QqO½ÅÛM? ‰KZÓÕŠ„¡Š<2"x"$ÄI­:ÿž¾Z1H|Rz””Óç1ÂåvÁïM+ì°wSK9΋á9G9ipÉb 2ÎÌ„Üf|ÃD lbÙd˜«\DñT,U†=6R¦Â‚(~¨5aàÚF÷#Èüu ÎÿAÖ +#rë™G¡…)þäôGláYò¦áŒ@¨’]6Óû­]÷H}…Rª×0…¯íîêÓº²X²Ål]"ê:‚’d®Zp_ à) c[Vâ™&éádúNã…=g <ÿQ£g[<8í¤¿? »3¡ng;þ¹GM"í¿wP^lh"Dn†í|L:é±g ù¸Å—7Ó‘zzO(ˆèH9B4¿PÕ'®OÌå^ Ö˜þ(Ó·‡h-?B/+¢0ÅñÇÑ ä…×=Ȩ—ƒ•¥aÛÓ7Eµ6,|þç&Òõ%˜€AMÒ%u±B©ÿ!jÛE•Åý$ô6ŒÂÓ'ÒÓ‰þ¬!éi‚¯;ð8½ôæÂ11뽩ɕËÀó¬ËLëhh%*™d.Â't桦DQv1¾Øá„‚ëœAí¬„lvžfoXS Ö­(n…%%  AÆùn7Î2tÅîñNINþúgÀŽÏè_½èì¾^QãðŠÂÕœ¦0Yä×Dõô—3Ê<')æô"!‚‘¾¬éùʇl-0ƒCÈ ¹hÈT‘Êþøú/Ó+w~æ&ãbèÜ ìƒúÕŠ °B)OÂV~ä•»IÜ Rðúm,7þCM<ây©Td‚‰Wò³ÉW#ZYÇ ÏªË¿\t” ̺leTI×rñóYùÉ2d¸w¼ª¬Kœ'[Sk@ÃÎþÖ‚3T*é8‘ã\ä¡ðÈG®º¾L,Wk¼úì{ß…ÌQ2ÛŸX§ 8fÃÜô~ êf]ÝÚ}v»=¾?HHëÀ9KŽu45¥Þ5u¤¾ 5Kk ÅA2ÑnêªÈÍžR¦ýuCàð¾cÓ»®Á1ÛoÂÌ4¹ŒZbå %ù§PUM¢ô4F'µPpƒà¥m¹äâØ¨hL¸R›4a*íÁˆÁVŸÒþOÀ3P{žH²8·Ã` «Ö-ß·:¾áÜ4‹8ùzTôOCòÐ î†_k=àè¸S±æÕ€uÖ=Åܽòõ€,Õ\:œÙ`ÛgH ¢;"ÎÍÅ1)¢í Ìp½O&ñËsëôyĶ£’¶–¼ÂhêõÕjÚO@HÜçý›ÈN¯ØŽl~¢=ÊD°$ÎûœÝ§´çê9"±%‰›×hVÏ‹ñ¬5û‘ò{(#¶¶òÜäÞN ¡|*žÉ›«äÔ'™‰öF{ÛT ° vÇ'Ñwˆ­Çªc3çj°†÷¡a Ú…Vü*¸ãðSÀÀ˜ÔÇ{-Ý4RÒè¢)É!Ø“u7Rlb€³žd·ƒ!-ªß&–¥Ø-d$ c_Ï…}]ö§þè¾MòI\ µÇ'¿T‹ðMô"ÒŽÆrä½ÖîHÊ›”ð9SPY4ìÌOâÚ3‡´±qö[ áfs’Ô9ûZËýç¯êü“Ì· ¹¯ 5š//íM”Ó¬,ñ‡Å÷9'—y¶Ó4…·Ü"¡ÎØQ„‰_ç6Kòo‹«šÝ¤SbQÞ¿ñÙSãô,2ŒV‰é,z`v”*[¸él1%Š Å–t¼Ý¸¹@H)ôÌÅæÁnmÙ/’W9Ízâ™ô`a_3÷Ó[v7QR1óM0³Õ2 çœ_>'ø1œÓ'ùF |-ÿJúõ:IÆÍÀ;0ë˜î·¢ÛC~ëª'ÐȾü'kð–ýaÅMq-“?P'9ß›«Ð ;=1$ Я—•n^ª.åÂZ vÖùå‡tžü¾Ú“Qß,E±ií}JzûÈX¯¯V}#tQar¶8Ó³V«¾5ó£í¯Ôýª‰GTí,¸ø°çäÀyæ~ì PdGn‹WΊz7Ý«šº°iü|ùiøIÝHf[R)uXÛÑ¢ù¾€i¥qx\z—Š"'©…ÆßØe˜hŒÑéW‡ÒywÕ=§ÁiSÅýj¡Û=B¦ŒÒ r}÷ÐiûvAº#Öne¦o =&4¬.kÁæÎwzyò^ëH²¾û‘ oCOyâGE·Sár¯Ë¦&‰î,›2òЙz*o‘ÍÓ†­ù®$Žö$3óûŒØœ²@C÷s÷Êx^ˆ {xümøî9—…™Ê[–³—FJHú=ž|ý1i1 8tåÜPFÛ¡î-ŽºR;C£û+†N5\ãÕ±œpÜê!e¹Q‡õG`·O¡ƒé+Öp%ƒ$oÙñ$ˆ,žŽ?A-y÷ª±±~ÝrRJ9‡æ™3VÚ‚0ÖyV·ò|2nµñTõèŸ=¡ökn¹´U)ÆÛw±¹›Çj??wè2E¨\º*úÀëX„8DókÕ@ Ö2ð^^b¡´ \•1 V¢n(Ø”²¯á™íykÊ#ÐÑ÷]ß¡$È¢¿Êh À[û©™VLzñIª~£Bõ»µßd¢­ éÒ°O}RhNK4Ÿ9³(’Kì"f?……©¢ÎÖGëÞø©5uª²–ŒÄ5ݘ§ªaD1&FKsõ)xôA8¥¿âÀ¤Ë“qAüø÷x<·¨hõ’O@bj&ƒVSý&DŽšŽÃLÈO©ëö”ç´ØÖnÕO™Ç,^ºŽ¹ÔôN#ã «59F¸ÏesþèíIJÈþ=u¡ª§^óë¤dK¦è’[¾éÜõCs¯¦ãƒêoX¹'‹¿H~²ä ¹V€ÊªP5v¸™À<ÍWè]qè—•çé!ÃÉ`lÑçAõ`/Þ½w-3æ±ì#6[]šzâFòÇäù¤ƒÿ‘×]úvPÚ00r„F75ez9?½¹b)þSˆQýÃPðÿ]-OŽZµ—o­ªhiM·@ õGOÁÖ¸þT—RÎHÍP"ݘÒ& î’NžÙÛ¤Ë>ºOJ¢²üb[wlˆu2••aÖ ÀjÈÁ±_BiŠŸÁh€èjõ¯Hpš9ØÙ€maª¤Æ3zË&\påŸÓV0]õ¯\d¹oÍúvú9;çé0=)n–7 0^x沚æ±E3êËG¡’}o^¥Ù ¨©ÒC]­w €(×øfqú²)å2ËÓÉÕê*}z@‚ô* ÷Wœ/8³r5˰6®fßêô¢–!Ý¨Šª‘€6Ï—Å=$f¼€ó3ÑYÕŽ-ýjÿ3Ûñ’Ê è M2+4<–¨7¤óBTÎ\çCP+?ß^‰| ÅVZ›Éž®?÷öv§3ûî8–A©k„¯:-ïÚ{‹#Âø†¹újºoU[¤ýïv9ÿ±ân—ÞLJ+°=&ò–Tû®ôyŒê˜3¼µtÞB${ˆ¿cÏ羪»fA—œÞC)Àš£Q§âíÇr5Áä?A]öæÈr‚û ñSüøŽ¾†ÒU¯u ΟÆ'DÿœÒÑw†z’׉ ñŒïµ_äG] níÅ¡wvg>è,%"ˆúC~?‡ÿ~WxÆÁg–$wo>ãÖÞK÷µ»W¨x˜ú+Çò”¥ ˆ$PGCþE}ˆKÐ¥³éíNIFµ9#ž%³äº¡¨¼olaÜÜÄävJgF0»A> ¹RÙk<¼wç_OE¢‰Pç÷[ ›®®Äì¡›¸’•Ü•ÐÔ/ä K¡žoßñ¨yfŸ,ð'J½r̺ÛÛt-XbEñäéP›ö;¿Â…œ@±Rà†+þ,¯¢Ñ­ËÐâèÉR$ºJ¯¯oAáŠþÈꪻNíW»©Ž+(›ÕP·C‹’¶gVö!çØ¥- ILÜVöL³¢G®#œÓIsËS‰S3¡1m#n¨œYݶÜTlì>Fœ)¿b,t0"JGö²“Œ¤œ–TWjËð/ôñd!¨2 Þ©´™{ah–™ÖæÿÓ­ÃK="¸~5ròu6O ˜gC¬î®ø:Õ"u%£Œ² ¥TPº^Åþ^¼ƒ®'äÞ „ÌÿúR鯋gCD“¡ƒÔ÷»ØfV5ª¯Œ0/ wàèåãÞʺMå`É&«‘x$%ŒFbþï>ˆãRlÿ8»ÃGY!ì ®ÐÐË×»¥üLã-¾Á[C!ØÍÆJãÊiŒ]… cúä€è/ s´Ê·(ÃJ£0‚ Û’vý¾±)-xÒwÜÓ v»ývgp/Œ Ïp¯¨ñBZË`èú#Ë\/¾`.€EÐ>LçŽÐxk:éüæË•p´n§(AÓ]Á’Êÿ¡ Ž³èí5~Ûû:lçJAA´·ŠN/Óô±™5§¥(9!ð’QMö¼ÚüÐÓêÇA4.!d°N^È0~reF;}^E^Mu­¼q ”ÒÃîsT×o+áK…Ô\œ …~üyYäó¶é*ü߈äþítGΑ 6ý܉^Òd¦Tá3¹©Ûï5Ýê¹cFb]á$·û¤±Qµ­¦X%ÅUQ%xH ‘ÃXØÇæ» cj–ü×…pÓ²ÛÝYGÿËeƒŠ9á'_Zªáševø©¯ åš*ß98ª(±-&­ £p¢²T¾ ÝyƒÑ‘Ô˜‘Ä2<Â)ßô†_´Ú ÆŸ© &ŒM ƤðY™©ckœ‹R}ìTn=Ü_KSÛÊ7¹XT÷éøò íCaôÃ3ΊR«`ô¾ÚC°6½VN‚QÞ‰o5ìío¸p«Ù»TOTÖ $bŸ ]â¦æùÜòEB†rƒ:ÓMr¤/Üøƒu È8~ä%ˆþx¼êªê BÖ©5dX¬–ÛuSCôª¡œ3Jn õd†ñêg/o[®e‘=@äFEmb•·?Œlta«C(¨o“é¾aÛ÷²«#FÖKWªìTí³ ÂôþYÂýõ¡>öþÓÏuõ£…¸~2zù"Ì¿«!¢¸ ®ÝK¨‰„ø*’³ÏíT3.)Gõ ýr~yëâ@4 *¡ð]°Ñ'-BÓþ…ÈKÅ ÛíÛ! "Ä"YÚ«mŸ;kÓá$šSC˜°%÷²£9N8®|Íëÿ¥¨_1ÑË6…Šˆ÷bºÂú骷¿ý¸Î hf­¾GHaD¾ëJRÜ>Äq7 êïBúö÷z§(W]‘eS—p*BÏ} ž©Èÿhì·^»0¹ò?-7EãG æ4ku$‹«2{æ“wèèhz;øŒK¸¦”ú3Ì·Q6A­°¥fă¡ÎÇÆÉn¼Á!æFÞKЪl8¸7Av+Z>ÃÚ¤¸Ï”ïŽ#«\]øÉ‰CBÒ›è¯ sÐÉ÷Ë ADOž‡#Át:M»f}pvc“Ø9Ò‹Z2.J[Be°¦C¥U{[!Ê3û"J¼_xAŽSÖs>ʺÈàËÅh³¦#l·@óVw€éSî |¾ñÕ*p¥þž”Œ.h f¦]Iª/ÍݸÏ/ØÁVFrSÅä¶ïøT€Ç$"þÖ^ÿ³~±±‘ÔºÄO“!`EV­Ê 3™lÄhx,×IEê'¹°ÂOÀnn«+E"¢Uoe˜ÄåÞ§bX×X7¿ ÞçðU‚ø3¡%Áæm ¨ßÒ‰Ba½Mªß‚D†5<ȵ݄¢Ø²y7ɬ°.”Üß'Ð5a>@SÀ×ð1/¬5·m÷éœ`ºò´ƒg­woµ¹ž4BT8ˆŠÀ²N`†Ú>ÜÔ Õ&ÞJÉz'ød1÷ýê©+A˜wÎõäCú’¨º.ßmºÖc<âóÂààpi¥8ä´ ®J×5ËrFrPùâæW×b^½=)ñ0×Q•Ü ¾&ðÈ­´`lL%ÿ:‘…¶šQß•Q#u¸P gEhc¶)°@&$ü÷)ôÇýÎ}Êx2Ñes«pšÎcFrÖ>šù3“KÜ>ɹ,©gaÃü‰×é1™[‡ERå,²kݹÇpàÂê£ìÓ®˜øôó–×»¤ªl®D:BÒ ×Ä ÜÈjý~Å›ÓÒ‘FÆ kS½äßX¨æ}JíôÁ5õUëáŽíÖþƪ{ð'’¯ö'B+²´i…´gŠ“©†_oÇ7ö/h4 îÔk8SתÆ{F0È“á¥ñ‹ƒ!}yÞùfLN}†ZÓ%ɽDzzM?œ]Pzõ›ÍZN 0€­ç9ŸC™? ©“èšØ˜ïÄ?$ãÁ0Ï\¾I Á8¿†¬?EÙS|„¬Ù`â†ù/j=*’‹`q§Ä*²ÌôÁàøÖl)™}mv]3QÝœ2,J Om„E¸î/£ÌXÈ Ù@ÆÛ¸èßRú;¤³š±£¦/‹6Xá ‡"ç‚[.££Iìä9­DÝÈ¡uÖGS]ŠÞwÆ KÝg`xª;9[×CM«,ª9ï2µÁH6GÌ¥¾ÇiRMxNòŽ%ØØi’ŽÊÕT°~ñ8UˆQMxêï¢iþ1ú]åC ÙŸJé¤wííÀªªãbÆ}åâ|ïNV(IÒ|$/‰ÊK5å|+6©:Ò©‚åë…¤<Ç/;~M®K7ÊňwÖǾýøðêYµ aè/™õB•’XS⑱÷º€§|ä¬è<Îæ!Chn…°¶?Ïé¹|úßwÕ77_oÉÏÄžŠRã,+Ú.3ò:s@÷**ãöZk?µk6HÝõl1'þÊë‚£ ˆG/Ž+ߎ‡ã?m/Œ/‚(Ço¾g%¦ô óa“„á€Í\xˆB†‹æîm°ZαäTc8ÿ$Ç”¨, N‡„+†~¾¬÷[LÎÈZ4bdëšßÌ~¢¿¢”ÊÆX#_ÙÖTËAK‡¹EHu kÁa"rÁÍ­žOöG"µssPýˆÁ4¶âH¡~2—È",¤¾æ*’/äÁþs*¢€®ŽÿÂBÐ…<1L¢Ú2«Õ•CÙÿýØ,yí4|LBü²HÔpÔJ=”œÂßU&èF¤9¬Ë\ÖÊHù&¶ô±Ó†;‘I׌4ÊÊÔ³¬=ºRŽ’ÎEhtS,m`^‚í>‚9èÕvŒØÓË™·ÆNšÓ¤q sïsôCÚ€%âVG¹€ž¼÷ùˆÊKî©ÖTïºD.V*Št~UÓ‹{´b&=?’¼¸`€«ÕÅÖ±–nØ â9*«à}¹_ÔðÿÄvÚX¦LGõm$‰nGwPh´¢Ñ3_*ëIƒ¬ìÈqÊðÈñ9ÊSy•5€3–ÿú}óI .I‡)¤>8*È^ž1µVû]…"G9KœqÕÚ3Ó¤gGÍüz¤bt$ìðÀ¾ªKþ ˆt³,ð¶A­)Š©‡È\YŽŸÊžƒC‘L1)sÍE_`âÜÑ“^%×>;qcTôqYÿõÝcË<8©¥àb".Sr ©•îH@½‡æÏy®Ñ^Š³ÛØ°:s¬&¤$¸xwdwfh—käà†uHù´BMûSwo®ß³þN‘¥‰Hnš–ÔÀÜ9åwB¨-#ÁÂd(Úl¯Á„¬/pŽÖ+2¿n÷`%Ý_rŸæ™‰0ÇÖ#9º°Õç}ЯórjíÓ›mhI·Ú ø½ë•ú–0–(DÏ\0ˆ3¡fAÕø´gñ׉W@Ûª`=õ=ßh½æÌX0œ:]UØÄ½«¯EJ×I·R'Mq!Ô'·$ði•Ä[6eg'æ:su‰,IõÔHy76—Ãï‹áFm½P‹ L܇CrÌž«bbM|HLÓ—Á;®Óíb¾è(" £ª«¦«Ï0hTÕF¿Žò‘mFÚý y@|.|¿yÜü?¬§±/ŠšžsHýhƒêú¼;îå˜kÝ àªÍÌ|Q›CyîÇ…éþL+ÓsPNDœ5Ž9íÚ$wÛ®kâÏW‰bÁ íkH1¾uêßÎú·‹œÛ 7.g•6xîëÕ Œ9% qô?eÐú¦R½Pê¼Æ$óbiNÄ4øY4šäóÈÏJ[,ãà@;RØ2C×ûú €[Á?åŒO¤o‚—™é²ÚH ˆè—’[@Øt­<*+ꙿ¥$jÎáVÚ¥ÄNIä™ñ!÷0^hf -ùqgôŸLÖQ´$õÐŽ&q·Ñ½kiˆÎ³?*p­ò¨¨ÈnçP °‰ €J„ÿª³'CHX”Þ¶~+!eÁ‹!à ä¡1ßì8™ká[=n¢Uþ¼,Äî'ÆCˆÚ^àCE©M/Î S_qëLt¿ðÏ‹9Åò­³ˆ v'È]k2Û¥<špùÍÉ™}„bËe‘~ˆ†ÑùLPxáO‰Ï•Ø©åÀ¡¹RG¹7˜hè[HzÉ–šÌuÕ+£¸Å¥ØK„Ï=6®Æ nûlo%¤ykßûhš¹kÀK†•|NuÕ"E,H϶ÞQwZlØ\S^H–‘F<¨·B¾»´»ˆ$Ä­øÔæ^ÊH A»ÈÅ:¥â+L¹_jë?xÈ1l—¥y"¬çi‚›–÷¥›z'¿>ޝ,/~.ÙÀ,mÕÙ qãaê¾ËXF'»sûm «wÅ X y¥ë#ÿ40èyă î,Þh,^UÞÍyô`Æ?ìu<#z÷˜'/Xž¡Éš?&ÄÁù|¢‚µpdt”Ì<›y±÷§Óipµ Eho± D :¡ÉªéÙ(‚ÌL½DÚì@Ÿpз—ÊoÀ79ýŒ_aªr³‰ðî¾WÓÌòn(Jð)%Qóâ Ç&-ÚÈÚÆ¿93¥ˆ#©aò÷¨4‰?ïjoÜ¥'#"úW8•OJË‹=ªË37ŹkÁ£23S˜=¥;>jÇVÚN ‡[ó›ãqkO¬U±ÓâÉ^ã]½î8×ßä¼gõcáË›bä°N2À& –ÚJòJ¨¥.?«.|VÇØ±uS4[WDn›þ×–œ{žZ»¢ë#.5ë+øû@Ï/3ó½¶rðF ™‚· ²žºT‹V.¯)m¬FyGƒéa‰v&͉ţZÜÈXOEšÈ¸r{¦ëxÝjí>ED.¹ø3¹å§k(üo C1ÒÐoîÙþ–Tê.² ômwe Ì® ¶')¥9{Kc)ºk‹º(IaþÃ=:\7zûwÿž÷åðš’C’‰ü½ýÓÕóÈcAš_QI¼E”‰|!3£òµyGÄoa÷w ¸„ƒ®O`è nŒÀ|ìßCB³fÞñÉòe wŒ/»=3î£|sôþ2î`¼’ï†RùjQ¢ãõ«n3@Škl†&M/Y"RWF§EÛü’6vkÖ—ô×Úò‰YxlÕ:tâ-õsY&EC"µ•¬-Âï°­måJg3rÚ§¶X9!8é@Œ…Ž,؆@3g'îð»D"6#ïX퉯‘oXÃ,·‹Ž¯ŸM?¯û‘'=²ËÀ§§ñ®ò3ݯâœ5+Õè× Y-|d8密­–n”E¶wX:xæÜ‚8— –®ÔeÙ=‹:A å£3š›Š¥=‹{õ#$ž BLüŒÚaÄ­V¶¾ +é·ÏvKál"¶1L]˜c|GõujŒå´å¾;ƒ»mVt†„kõÃTèÒ«ˆ5r¡’ØHžRн»‚ÍH›„53qé‹u…±* ¼‘ªMLâlqŒ…\tàµØ44ª›wÓ+=àyŸÌW…¹ÒLæ‚|YE}…ôcž"Œ nH 9<×Ûe»ØŒ Ž(¬uN ¢Vc~܆nœQˆanÁMåÙ[žô I93\¸‹Z!ü8“äï¯Ç”Ƕ&¥rH©”üôÏÒ‰Ú®V ¥¾èœù♥ ¬AiX3F0™Ûv. Ò‘‹¢m~~Aê3mÔŽ•ŸU×aša9Î=IMæÔ Ÿ0WÝÈbÚ!ÔÄwAÃJ•|;så ÐHKhsEy6_-­?h¥~UÚ:fäN€4Ì^`rW1õ­hû›$?÷/_8Šj65ð ¼{v+1?|§çL@ù§Ú $„™S¦·Jò¾¤Eb©Ÿ˜-–RþüG¦Ed‘KJıÅ#[éC@WU¤ ¢'‡”Ñ9ãŒâþ,§²P+4ø%/Ù社óàBÂJ?–šI©Z¬cØ×" f¿-u̸*´ÓMý}?¶„\1:;ªˆañº@X²€ùgt^ ÂÂòw»²¬UJà. iôýަiLó‰@ÖG"u//Ù™cÝÜÓ½~ép£+žÑdv—AKc…èO>ibàJËÒ÷ü†]ŽZE-kj'ƘëG)Œœ®íEhÂ,ÛR^ý/S™Hã¡>Êš§<’\®Åú%AÞ?ÿ~ðPÖšP7… ±›ç#¶ž:@7lùºSF»dßúv/y9íþ.â ¸±…­(’ˆ^¯~ÐN*ÑæÊ± %³ÂWI×0ÕR• ^UÐ_Ý;XÃØüv'¼Û ®$Úe`"ìnx†Âû½‰ßM I%ÁðSâ“\ÕÙô›{¸UyÕžBß`´TËqk”ùhöçªGIHÄ!íÐ=.hƒ¯ÉÐæ ïsµˆjþ$V£adÐÅ#ˆÕàº>âìQ-`€.㇮„À¬|t¦‚ þuj‹ÛÚò›/ Ÿé‰û¶¸Ä§;Ëtm^Â|p‡ÃÝÑ iŠ@®±o‹('õ7b˜º+7µìÔ´{ _æñÓbŽŽ¡®®-{”k ú ÷NLS£eÿƒ|Ü(Ë-û‹EóIèuÇs§Ö&+HRyzȤ}ƒR¥'qž^€ïëýÿ²j+»¶5àkž¨š° Ì1N2wÕE¼Y†NL(]ŒS¾Ù˜o ”º» °EÛù—£›ÃÇäê eÞä/ÜÇìÁÕ>™†íåNTx×åeý˜Öbul+2øß™³çÍѨLdR2«. ´…•åáO 7Æ‹÷Á‡™7¥K¥YÞô.$Éã =ž·_£3ôr``Ä'^ȶôÇGDÖ¾l1g ]8käÿ•£©w“¥ú-õì~—m¨Nû¿42ïœ|Ü 'üën–@¬ó“8]’4²Zo1‘Êt©œM¹OûÜs_ymaq…¶UŒžIwçIº(ù “²Õ®i¬ÈÔð]lj“¥s{Ai0¥uŸC™XxÏ»Iˌڲ¥ùi{D,žØ/@Ù&0‚“R˜…už+4ã…Ž:ï¸ ®ÑPܶÎÒä·á¡åéRà0°sË-0»Ä9£KÈÏÛ?odkc0.k?ó ¹—ûøΔ9#âÈ„ufA(X®€.ÈJ`¶ýøwàÔ7çÚ>18S²Q«¶O¿"FR¦îàÔ0¸ßäÐo"ç |¡ˆu‡Ÿô„I¤ Œr$^sD`£aøqSê\ÛD*RüK!'6&ʼl·[6Š Or|>Kºk¼¤9ß2;ûƒq’ÍÉŠò4BIDe½ ‡¯ÎqnṠ}˜¥5=ÜÉj«b–'üa_È”d‘âø¤´cÄ“þ‰4tk"îÐHφ2]bò?D“\„@­¶$;ñCXÖ½ƒI³|¸øÉ –˜ëX­·wfШCé ‚MSL¨P#»aÊ5A¥²òä/oçTÈÚ#ËÞdÑ‚@§ëæÇ­ôÚ{_·Þ8¨;Òˆñ …RÏ“`£G˜wž„ ul¡ä‡$5>AžyYó|²$ƒEÜÅnG‘à{´Š’½ ô`8›/·:›ÙMSŽp;ª®B•ƒkc€uKaÐm0—þžŠŠ*z ÓÛ›Øò …fæÎù(™ƒßé jSÀ¢>}ò¸¹›ŠüÞ¸Z ×õÊ®$óØP|ó8–½æ2kò>í9È_nœÔ£ÆzB’儯:-ÍËSL:ŸVÊ*Õ W»ñ“nEÔp<vA :õx¾U›žºÑý­¿÷³N,¢p—‡²e¥eÍa“JZ•hkþ7œQÎø‚Ù8ïù0jÇî®íˆJùi™"·Ýk$ ž:Û×.ÿsØ‘a.¦Á©4åÛ㸋Þã@2(›Å¿4¢áÇfÇ›ÞB^¸ë%­ï04=‡@†èw˜ ŒäÁÒ‘–ŽñFa.¼_{ ¼¸Æ“ð]a€ÞÂèñ…™Éê<äùCw='wü”v-Øã”Õ¯sßû³zF}ɬ zñ,†ÎHŸç¸3Áçߊï~}xSÆ©Xdâéæ6È‚(SÓuù/å<Û‰§Äá¸E—©º€ ²„dGëwYËWa°²$ë¢otöô/ûëPüÓw¨âÏ_wÇ·ÿœ„À¦«[6E÷¬L‘Ø Ü¯ë3Ž˜VëËç”vú?_±¯äŠoM7ŸÌß’¬•;![S°¾n‰=*…„ŽÚ¶…Òá0%L r¬fW÷ëå‚ (ƒœÚoIò+J?¾syCÎ嫹n´v0Tzî~8õé%Xä1ÿp?9öU¤@qhÒ²¢’ÅDÙõøÄ>ôœÏÙHhÞF³}nŒW$Ùs\ñú‘¶~ß3`yòNmLÆSÁùÒ ²™ÈášßôWm-®>³Âa?žCõ«˜@ys G"}à›àS²ž/åã¢Oýq€c}¼Nïþû:m¶"t»ÏÎ \¯‡ãéÓK ÏµÇ8—³P66wÛî!•‘IÝšI*ÿÄÈ+ÒH¾uJTw» ¸ýtXigý«—×;Q1¿:;ü3¥Œ’:ôF°ž=Žÿn@mñŽþè,h€û*bÄujDÍç—æ„­.‰ù‘‹wþ†üYº˜Vä¼"„‹'XÉ2õ\Æ”ÎùR¿©9³'׫XD©§p‘úk\¨§Ç œÊ59ffÏU8&eâ¡í‹‹Ä”ïÈÝÒ‘#§|rØPå`™P–ˆÝ¥Ö‘—³õÎónJ[aÉ«æènåPé©oê#Ó•æ»ËX?'  6“¾±"()€BÅÆáþSö$I;çk€{?´ñ‰‰ § ³¹B`ÌÜÖÕ·îì— ¦Iµ¼¶‚ËHÕÇù¶ÕEøÙ®sUšyÎW·øšG’LbO¶Ë"ƒéŠŸÓì0Ì«YÕ.h}Ž‘lhíþéþ?CèÔ*2•KlÖÞ3 +¾Ò®…íéj¿ï+8oe-YD> ð…HÉDw°¤b6J|ÉLæÍ-;Ñ —nç#}!&r ÃɪI"j‰±áN“qèyjqTÁEC›ñ"ç<ô}…öGZÁ|cÁ],RÇÜÑúÇ¿}§KÒX C¦05—B`ÏÇgqß2¯zÂvOÆÎïX˜¸f IÖ鸵òû8edn]Ÿö—Ž,¸h$²:ÞC<ìÆðÕ«Ùóî>vûRñÑ?.öà+aR¢&ƒ2+z£øA3+8OÔc¦ñÖV”¾ÔÕZlT~„T ”màÃÈR'= ;’ÅçÕJ²€"QRXÙáîkZSà%%; Œí¯@‹}ø³ó–ì$‹‘‰ÿE‹Ü·@4}®gÔ{¦\*7ÒÉììpò‰’ b h’\ï”%øZõPÑ1'Ô<ÃDˆ!p&ÏP¸šÜ|§Ap;䡯`ÁŒÊ襕@ÎG“MÇ)’°ô­®OV™é©9$ˆ°Nüí<é\fÑKÔ9‹R[Eè e ¿¦A§gë_• Eí5Πô´šE× þ¬2 ±%((ömüL“›-]ÿ,­Cma2·yŸäø"aé«1æðCàE8;Å%zrù1•­ˆø7+ÿÿÆë)FÐÁÒ–±Y˜Fsò(qÎÙ‘u¬šøüF@ñæ¤'tÿ®T º=õ¸ƒW]!ðñ‡Ù ³I¨F§ùãã‹ý2ô¨ìØí#B4®tx5`%ïy0óš´L¹Z'ERŒÎ$ÁvêÛCéKÆUücºÓ¾áŽŸ(AÝó¡xÉéSz$¦y(‚½€„B· A¥7 f=¾Æš§AŒx¡rO—…(a©Ðƒy+ÔÇ1“̵êzwÙbίÏí&ËóB¿éÂÛ™%Wœ4» nî@“DÚôºªÝ©ö®FÌge^/6I¢yˆÙÐí¼?º$3 èúÖ&Ã8v”ë_$6û\¦ÉÒDõœåùó*™õ ‹äx ez¥:vQYLé±*Ì&«†a§0—£IÃË2 Î7Ÿ!ÔóT£À¡üÇ3QL«—¼8 [øpÁÍKœ6VâUÏßFS+ͤ}Hê’ÙÁ*³·¦V'‰ªn8íl±c§ˆ¹G$K›t/xá Õ»vÎ?¶ÌÏ™6Í¢G54*+æ‚pHÎùOq 8³$ ñs)ŠD±«Ÿ2‰Ïj%«9ß”v“¢hÕ©)4 E>:ÏŸ<™rp-ÏݯXz?‘:"‰Oå É­½ô’)Í¢În7u9Å™mîl™9>_zÈoÉ=Ö m XÒõ…ÁH Þ?þþ¹<3ˆ²¶g»ð‰¥j- }’!t®ñÚa¬› D*yß¼ÇÂ<\d¸ Q…Ë÷,ˆ<‘”ì)›~€3K.Mb+×ÓüÞ>øº^3s_2iãUB£#Öú ÙTÉ›%H4(͸n1àÌÛwغÊm†+ %ì¦âÐW®©´£º$$A°ìÈ}4nìs@hϸµ ,9)>R¦ z“Š‘ L§ä+D0N[UÞ#ñ\à×¢'ÏÉÉk•s~A_¢«ÙøZ¡Ñt7P@†ºe=Iƒ.guËg%æøÍvÊb›‡j=‡–ÜÀ7ÃÒ@¢Ñ°§\RŒ¨c²Må¸Ã£EÐZw-­!*@½‚‘ÛÐí¤PZøŸþ1žÇ`ä‚*’‹;!T,Q€ŸÿŸŸ²c¯”mÇat¯$ö„cüeˆã  j.³^DhbIøšÙ[ßXÿ4`¤ú{&©ûÝêVpÏŠ³hsIgnÑ È9INá•E>Wá’ ,¼u8O5ùj ÛÁÈàY…e*ïÝ¡-°6|—•ïñÜT‰ƒU"ñ/në°4ÌYübˆ² ¨M )wi¾R6‚O)ÐPW0ÌUñžëKàZã"¼¢¹Vf%£;îsîeœègŠ[`âü+ÕÝ>GÃÑe‘a_|Û“t-·×š…Ó:ç "â ‹‘Ð6÷-^’ãdœ‰õøRÙìÓS¬>!‡uå#j §_AK§†R©ÅŒÇû…tÎ꽯[Y€ Ñ>a®:|&çå¯Ù)ß>,‡{À&˾= •Å’„† ÉFçüÙá–B=#t1—¡–Å_Š:ãþ›bÃhŽÀŠ™0W‘¹=ê¯_W^7Žå²2«»¹ÅØ á—aÚ(wVD%Ó`i›2|e•³³j—©=¸˜L*gé4“¶@Fd¸fÕz\W‘%rPŸ¤#=šq^Ì•™3T¦1t’uüzC 8.B`»1ÁÔ³Âæ¯c0–DR¦Q^eP]š'q€(IWéÕI‡®C¥úßÝs9ê`$æëgQ?™ã(¹VhΟNøsH®ÉxO78’E‡Q@@Š8=Q[ƒq"èÂY;[ÈãªÃ¡Éº¶€Å†,ÌMÅ&Þ1ã)Šô­tØ@ Mg±ó¶ï¤ÇiÍçKQ}4Vè§ï¼·‘RýT©wŸ,—æ›Ù(KÖÅtZ¿gÃŒªWSëcuÁ.e3´ecøž/Òfcæ{¹¿Åùø;•ˆ\ßÿ$대bÚÙ2ÇCmÎ%§èla„XaX¬ï:ÊÒÆšÑÎÛñk’l}×kŸg)m™¸Éè`Ð’T¤Á¡Y8+›q•)/›ºÐó½¥]mN¨0œ)̧îè2ÊЦ­Ø1žù.Û>½»‚|t_ ÃÖ#’N&E€¶7ÂÁè{k8fb©S­ êÝèMúOùã’Û‡÷w t _PÖ¼2"íz¾–l3|^ËU9tN‰®TxC¡Uõ?c+-(®J(®çÎE•Líë’¢zðL¥ •ÀÎQ¶{¥ü~Q~þ_ªê^“+^+ó©¶Îâš抉X´o¨gûféñ¬÷Ä9q’€KÄ^ñÚZzÚŸé³´…‹>¾+ÑÌHÙ™åÕ¦ŸØF®jþ†ŠI¾ÏLþm9l©©\£fNÜ÷ëeRöU…ŸÌ´ŸÞv­g ª+km«~ˆ(þp³R%X •0ëüb½ãÙßt>ÝùÏjä©ëèäDQBQÚ‚99$¹Á]ú)aK‹ƒ¸)EdÐ~õ“ûVLâ<÷¶Â\¾W‘ö‚ŸLͨ'Ï€hùò*×øïŠm¹×ÿ—\·\Þ‘Á ¤¸/kñsï|'Å¢<õ‚#´}7?0o5ߢD’“ë‡:¶ ´ Š üO-ÅîNÕT-½¨@ºi˜Þbóž´%ÈNQÊ-øþö ð‹mŽŽF¶©¢˜@±ÑÕµ†ƒ§¬ñÊÆt—#ÞZQƒN˜é! ü!ÎöŒ~åð l¢&¼Ð`ÌâÉcT‹cÚVˆnÁ²6Ègó@håP™Á@ª´%Ç0Ò6 ÆÚ:·hTìbéj<¸÷Q¯X× ª0I;[Õ2ƒ›L{: ‘Õ÷SLô¦Th?xâg$ºôµcûìe :ÃäåÙ)ÑÀûvlöž‚Hœ¾³Yec(5ø Ÿ ÞS©Q*ꌅ‰ ‡Âã/"€Ý‘À³~»“ž"÷JúŽÅ‹xOrçê#œÞ »šÃYÄ%ªçä”—Yêÿ°&”£–{û×Pq²anCjz-æ­×@j›4V6?"±ˆtIò²•'ú€ãDÛ’B¬iF‘“¶O›ú¥ {éL&:CƒŒ[^²¶BË·’y¾~yõ88o3ÝF¥‘ö³ŽºÔËÆšºA€'Æ}uf!þ×ÇA"j‚&ïÌðnFpà´ 1æj\ÅR#k Ìrâ-:¥¨1Œ$%)Õ¤X;(í;æb¶ˆ.¼iÀt6º†b”d¿›¶¼ø6ÜíϕĆ~ 4X,unmf_ßÊ'µmμý-ª C %+`mýà uC‰r¨‚’ÝfCiùà¯sÐF,ä`ys§i^_~9‚_ñ9Æ ¸¦v.Iu\x2lÜMµgûP+†à/þH›¸:m[XÊÀÿóMñéwÙ]_4ÅnÎëÓµóViþ=®FÐʹÄÛØÐ@6Ci–°8§BȽÕûÒÍýVäîP0Eù½7@ø—Õ  úßÄKÕÕå¤M(¤mþGÖäNä¾r­îÈPZÑÆ+¯ÖHÚG–hô¸ùíÁÄå¢Ñ#ûSG©.ªvgz±¬ÔÑÕS°v÷×ÔE;õK[ÐÁ†d‰M»ÁŸÙÚÐUµ'¤r C§¤4¥8=®å~‘ïŽûý倵 íð=§Ü“|*JFör||I3x/²V“u<Ë%ÇÞ÷Þsûw?}Œ7²«êelºa÷:¬!¼ŽrBúÁì¡ Âq¡­d2K14øQÐi©Åe[¤Ÿ.WÁ=t’„Mß³=žä™ ¹Íu¦?\@›[Ä5HAÒÁ“ñH×H:—O*L°,ü¹’a8rÜ|Æ|¯4 d”Éîê‚TÓÇâÒÜêXn$~µ%i¯úfßáë_Iá¤NFlÿ* ƒ©p‡ŒÃ†Œ¥*‚¾—e!ÛM+XÙ$m%loºg+Ôf8¤@±IRÉõœÞ2k“ p¢ÍhhÆDŸ ‚ÿó/yŽMEQ P¾ˆR¶­®Æì“U‚§Q“q©hüúþJî¡ÛÌ1ï›, ½ ˜N—/ÐÁ"¶œwsª$化g൪)Ø’†Ã’e¾ µ™“Ǻ…m¸†ƒ¾·¶ÍÞ°ï£ïcw‰ˆvn~€ø¢_ŒéÄ8"8{e+ˆ:„Ð«Ú ˆûø:.¯£Zþ¡4ÿ´ƒLÐ&Œ$–”ѽ'bädD $° G{|o¤JsØE?"ÛÞnÙrsXoÄù?ÿs±~ë¹á™åd1ô®4Ÿ3«L¬`’`'Ñûˆ )Öã·Š¾;7—ß™m,àäèõS¿²ùš6/Ú!ö…‡ª}§*3¬çà§Qý{‚à÷r%%•7Þ8ø[® 5ÒGÒût–‹îÚÛ¹)…áÂ`Óµú‰oá(úÚ¸óäwzË™0¶ ¤ÌrÔ5µYãúŸc iJ’YU3•¤"yŸH’iÂg²¢§c l.¹OÂUc3ý$-¡Ðô%cˆKYËýHxþR+Ð'9‰®ì³VQV+Zw³a†­ÝÅâu Ëš4ëë[w Íǹ_Àí;*Þ X)“:£ÑŒŽ;yÉW2ŽpQrõ$\õQƒHUì¼ÁÀ0¾E™R}µ‡­xI¢•'TõS‰(é}š„sÏò(¼ 4.Ú[às+€¾¡¯Ì¶(F†UÏs³ûÝ 5p•ïÅgw‹vîmyÖ¿->ä)´U[¦hár[S¡ˆ¹8¬*Ûç΃Ò2´K㤉%zP¥BšEÑ[°¾Ë)®°'8ø¿`*ž{Ì`ØâÏÅÚHRiP˜³ù G‰æ˜¼ÍYÿúw&ùIˆ™ˆxÞ?VBlQ\'S€ŒÜ¥7¸œ]Zïà÷dÔvI±ÊjQz¢Á^C$”B¤Å„•|sô§ÈІ´“Öb\Õºz/ʶ¬Ž[Žgüö¼RKC‰·„Eÿò µõ7ÐÜ£¥ÆÏ#.èoÀw 1ˆ¿Ž~ ìaC£•2siéڀ¯ÔuG;éÓlŸfUG‰Pû†ú*!wC¬õ1›ÇËg³ÝÑ$§‰ ãð<—ó©ôü`— ³-õWÆvyŠ5`Ûj)ŽåXØÛ@@xº¾à —ÔK}’?–pÚ4‹’¯…5@.ÙÖŽ‰ü× rE¢Ê:ìæm0a$ÇÆ[„éÏüw7îYO¯ÈìfòËn¿zÕ×ó¶×r縯ÛÏSú”TÓ°?t‡<½WÐ Yp‚U×’Ÿw=¡šï©‘aã*}H¡š:²Aa†(ËÇy{áý”Mˆ ˜]%€ZBxcÄ`µà¹ˆ|A* »K+2ãv\¨æ+À¥™ Z¸=óâò4×m™»aß*þuîßïÿ7v¤[óG')®ž-Ö`-cîj§qºux"ÒaH@'I›mÂbßÛxâF¾(‰¢x¹;‰u §„ó }s¬AˆÙ›‹§¦},ÒôàÁžL¿†ò²uPòÎÓÝ®ŠÒÊøk o|ƒcB¨÷±µiÕ‰óº©0í̓ s'Éi.Â0 dÙ(þD/|€,µª@O—ÔBù½š§°{¶¼½wJƒ±2êlíÀ\½o\Þ€²<~Î)¢?´[E2è 'D: Çq§ÜX'øÜxÌ¢Úk<®ëïá&>)€þegM[K¤õgÖ¥‚ù ÿ7¸û¹©6¼¨c°bþ|BÌü)cåûjºµ‹á¡bESyÙ¦ŒXdú!²MI!¢E¹¤ÚêFM–ô¥´¶¥ªâÔ¦¸2f^ŒWïÜGF;þpÜ¢ÁJ[–7mÏ b22`»[ñ£¢ùn4Õƒðn%'X‰- Ö_Çê9`ÝW—C%¿r刌ûhÓ?©—,QõTÃhº,4vœjôÚI<[@×áÝáAü À!©¤Ìú@cE!Îd[—·Ò.lïåšRŽyˆ-‹o±!67^ ¦<ý+®] Q‹bÁãÖ1˜¤œKÄ/ ^¶à…r†W¨ñð` ¥Œ[eˆ®û.íòÙšûLÕ±‰AoýŠeA»$mev¨X“ÓL±™ìµ¡ZÚ%˜˜lôˆÕ×€êD„ÄXcÇÐ]ç%) Š0‰È—Â7¯¿g¥-öíûÛž³®òƶ¬¨­Wn:øG"޼„ø±0öƒ·Jÿ9žf!Y(m6ߟ &8Û E0s.І<°®þkEi<†ªµëÐK7oå|èļ»gr/‹(…i.5m¿ä–w‹BõHoÁ¾kè] %–¢Î\¯ìŒ Nu&Øö$Q‰Ön‰0j/—ùåòkiŸ ‘õ Wól€—bP–•ßá–£xC?ÅØf¶AéMˆÄljðx“·CÿÌ_€“÷Táû¼å€ún,úѨã:%Ø®´ÙK&[#XúñeE\mºÜÙÉØ£¯S¡‚Մàu ÅÍä€NÎñ*}*"ìôxo2|þ¸ª91_ÅÆ`«Ã¯¾òe[ÖÕ[HE•5Ô­‘ï%¥ý–ä&C]ÉÜdtt9³Aø„º}ý¾Ýº6rW‘ž®LÝ´éÙï1Î i¤Hµ;ˇU­Ð(°±:Úžaà©~ éÏR!‰Çjò:áR´µ Ü;‰}ah|Ž»Áº¯rKÝÆÈXósÛà2;ø›¸&à™èº3˜ô¶¾ çÜ®kÑ­$ªy ¢.çeÉ+Á¦FÞ¼ 7S`žY)WûO@äXåÉ*ó¿9u_ÐV©Ã=DF~& ­–‹U{q¶e tõNSG…µylâó1h‘xw-¶°,æÆ2EÚéaHù"JHÅõ¶D”‹çvåImPNƲ2‘„ùwEàf?jîÁ;™$½pOƒ…DMö©þ:68ðɨݯÚ$ú ûS÷´D9n78®»D7þG»’©öQ½Û¸ç΢Ú8ßGüóÉF{“© [œÐvw÷üØTå_üB“¢ü«5ÎlÝ£1ï'Ë‹O{Ms‚#º¥'[ôÚº Æ *Zk»Ð®µ¼¦miF /ǃŸÉ"Aûh £#qh2ʺù—;nÈòÐQX**nUQùTx=»èÊfÿ¦nåX¯%hIU”Ü3‘¶~ˆu¸^‹ë…9n¿hµ#Ð7‘l Ÿß>̾Z0¸Ù…ä!8à¾Z ¥Ëò¾¶VnŽRCá´:2.–Ì?\?mx†Œ›×CÒê$ÉÔ¼ JPšX;ëR%·\E*)ÝTÉ´Ú:Õod ~B|<Þ·ÌÓºB²9Š`Ðô/Ú» û•¥2jEÙÃèO'e‰þ±/ÚüÄ *§1䈕wêéVéjj.h³ßr)ÿçwÐ#‡n§C³€–Íc+¢îf|hGcçz¶nìÉ¿’ý®)>CðÞÍÓñ³´#><Žäâ·Ë(й§°4ØÂ-õ«T º5ÂÃêØ–¡J•°ãëÄ]ÙèÍñô&¡Üã†.¬wò•³ýÔæv+‰0ru õ»i€ÝS8Æi>Ç5tˆWkûÍ#vkì+ŽºÍ%¡–kföÑh&à½Ø"Ûè¢è_Ò,wwÔ?f#ÜÏRIhÙ#´ÀÉ*N ªråGÑ™Wí;@Þo«rÊ<[o/Z}{à#A.¶ÔÑÉÔ¬Ø/OˆEØ ¦>;¥å/lwŠ5¢^{?#NqM$hó®âØ®¢Ìpÿo”cu¯|У8~øëÌÌz’|0u²»^æYË!M)_ÀJ!b…ê 55±ŸÁÏ*ÙrðOp—‘WW$AþzBAx\ç ˆÎälb,š™)¯ôŸ2¥ê•i9˜ç?ªb¸O x”ÕLO¨(ýÓ";þÿÔAQb=b-qYc=ÐÿÜgÎÚ|ÂÃ5Ð&Óîxد»_î´£òŽ~ 6ä²D6;ðµ\-È(•R¡E'GK¯7Ö‰òôÉ7§(¾Š>pŽ^Wwغ˜Dé1>ò-¬•ü*.FÉ€C÷«®b•©¶¬¢—(òzñÜŸj'¶/Êå Ü…“¦-âŽïÒè7–_ÓŠüÆ^¬ö`\F9ð.T:¢Â%òøÛEð”wˆÚ[Ûð¸% Wú¹{kÉQÒâ47Ÿþ¨u:‡|* p½–CŽ=I³dIUøÙ591S`µ?%²mJ—å4ÅÀ[~d „-i©øndgœmªúg™eÄ­dÀ-¿ú'‘Íiôîg¶›´US (°8R䟕D„y<äÖ†Û =ªìŒC=•…Îu1•:ÐŽÀ½¯µA ¶€ &¼|˜hd‡iÒÖJK°ûæÃ2þeRN­Å¸ò”•õ"Í#Øý?­Þ„pþÜÛ€ïi ëÑT‰’ºìqN± HðŽß‡æ`åÞ·/rF}DŒä8¿NÇÑÂ<˜ÔDä Eµ‰~8Ö¡Ú=Ö.²A¶ {šöa$z\á!Ó;göpç}PsЧò‹±Ã¨Bð;•UþÖº–žå#¡ Ux{Bûr»¤gÔ…ãVغøˆfØ÷½aܤzó|'¢hö‚) °Ä›»ð@)ÙnŽ-vJÅÞº×ËÉ“BÆ<9KØçÃ£Šž«ïŠ~pq…C-YýݶQ›w1R,Óx²e˜$¯˜²=øÛhLtcÚŒãŒPV¾±rCòì‘?øKsf?ß[<û»´`ûÚéY‘žG?·•:CˆÓ$0ÜkØ€ËF8ðû¦?;úßEE:„-Üv|[(T½½R¸ñ´y‚—!²ìœ¾Ö±Ý³rñçíþ¦$žâ+“•Gyùæ ¤ÂÕåÞ÷<Á|ëffÁ…x™(k€8s|±pN‡È$‚Šù—TÄÉVcÚ¨‘ÚU|€Á²+"Bh@ñLv3¸íLhª¸Ç'à馑7| ,dÖÎI6=8ÿmRRk×6Ø•j-5Ù(Èq!Sì\DŸAžÁ¶•;#À+ æÍ%*Â0˜BÆún@C§ÌWUŸtw^Å„M$K쥭v¥éIŠìTÛÉ?¼[c £•Îú®§®\áWÍÀÖ~åòæÄ´™§MY«‘ÏâƒÙ|ç¯åœùXþ%™¢%V/…HIIÜd }Áþ ÎíVìRõÈó?ðÐÒ­L¡¼wdÓêzÿUv‡Û¿•<¨Ù°hDäßb+šT“õ?ÓÍìãP\Þ§~P[sxšt[*T›ú!ŒÐSólðcr™fºJâ‰v¹E¥7ïWN×R,_Û´äÖïµ²n£ZíÙŒ¶).о¤ž<³ 38i²~¢µLIG ,êA°¢‘«•#fÔ€€À» Š(LÕ¤‚è%†ñÕm[+6uƒ¸R€ü¥•êA°÷ôñ k>xˆn°€:°èýpæ I¬èUGdh[¦a§Ñn¡Ë’~úÔm]õ2y5ExÒBÖ/$D@3® øtü|Ö~÷a©Lmoô\'ð6™ðŠŸ3¡uóC•ã¹KU9n¾G¶z\™ ¨ÆÌJ}èXа´ûGÎIïn-2ùSkµmƒ?j±){lf`žUµiìò¿%G„º¹|ós®Ï9cWÊì¶û„»sž^–é"ٶƦ¯æŽ(š‰k»3xw"%tÞŠ…Ôý[ ÛºoO—W%¢ùö`]O°Û®ŒNó°ºa©îü[ÂûGÌæZ;“M—™ì0¹•õ=‚îP›hR%3_¨þƒc|Â&.¸–­A»/Õ€,‘—_L¡MŒ°ê|Å<´Ÿ”ÈlŠì~é‡ïã)†óa-OGQÔÏ=&õ—úuô¢¨Îx¸¾9A[ÌqÕ1Z¼†f!䚀˃CiûÕqêèRûƒŒGpÝpÐêß,É*Wã$pt™Ý#¢( aú>9Ó|ài›ª|¼%eçÝ{ŒÅ¤aB¤íÙX‡Ôp²Ö0øKÓ¹–é?¾å:Ò«ãB£ÿOxᡃ / -Û2+«ZœìÖÕ'ÔóO°'‰«$:sã¤ím¾Ÿ Û_ø¯iTßš d™¤wô…õÔtúHW_xTC­ÕpFºFÈ)U`r±ó³”°N9ÃåÌžŒè(‚d®Í\Ïü15h.ŠY¥zr:}æˆ[GÔ=ÿ†Š_7{Ǧ`8—!?Ì'êÕ°1>†t…$.”¯:µ¡}*©UÃÃÚàÕÕìbP±ÊÞ^m´òDr¿1Ðÿ¹0SK ÈŸøHØ€zC˜‹ 3=ÝõsÝ}”}‰öt+xŒfš¡ƒýBÎ.§íÚ,*6ëÕ3é'(Ò2O7Ö[§öÃPé–¹5øþ£«Èë;¾â¥Y¸œù;fÌ߀·®àŽÒîDMŒî-#Á 'ìÝqÞ„¶Ú$Ü4ðîa<‡Çcc¶Bª3¤Å’¨b¹²$© ° Ü0d» ‚×täàG’4I Ô0n—¿ôIáõWvâíùÝãqÙ²æG‹|y…¥=^ä<<›`àu³Çú"Y"½hß&j$ø°VæÍ'¶­„ª¾´Z—¦Â[Š…ýøÉcRMûÍ ÏÑ"YE‰Fx“„¼)¹Ç>ã|„‡ìH-wRN¯ge#ÒYx4JE§4´$É(<9gD2ºùïË¥åÐpkø¿ÖÎqðM$yüµ¦_“¹7êÆèF¨icÔ<8ƒ½H¬9c\ ÏS £Ž3iPnR3ý›g[aU¢²JÒ*yqÈÒY%#MKUnj@éoì¸eµ‘SC„9¿‡²ÖòDgC®^¦‘o»§6‰ÓÆ6€C¨·5F¿¹-æ²ÐÖ#°oF‚9 üþ•ü~Áæ±=(Ò^°JÿÊ %§2' žßNbÇCàÀ^)L“ƒ}æÞ$W¸‹ÄPÀ(¦»·6j°ZôŸƒÓŒ!)ÊI+`¼¹—ÎŽ¾;ÚËÚÛºŠË/êNKÐ~yºêt(×ÂNVOÌG3rltëÔ²™åú[¥²n·t(Gµ‹œ5 Vg­™‚ ñlôI\c7©Äï)¸i•åHpG9E/d]E=dr&›xÔDþ¸^ª“I ôK²£*L8D´w\RE¯lÔ.3Û#º¯Ä×Ü«Œë¸fb¡µP¥ÓHÛçO©¡RÍG‡ë9ìàu¦ŒV8›/U\eâÓ0C­g5s?¥ŒŒ2¹‹Íà3¶UŸ­¼žÿFLæŽíw=G{?.êD÷€ò­ÙåÝ\ô×y ´4ìgtªj%k úaá0¹lJÖkÜ‘"žÔ•uŠA.:}¨ÜùkÒ[$½Rc¥Âÿ!+×+T̓i‘ɽo¼m›à¥¹É¬ÑU£y´ÎB›|u‘oq›‚§’‰˜ÚHaOÀ`à+x{óDǃY&°p’¬¼k.Ó(Ev¦X¢H CŠxÜ‘£Ÿ}D(¬˜€Ú´I‹cwƒŸ[€KcX¸sÞëà¯ó ûÊrèd®(­A‡Y­ŒëA¡ÉË€öB´â=ö ˆ ;ÕÞ-FXëÓéï-îEÝɃԋäÙ»lâÅÆ;…<4HwhgYov@¾j7î¬ßz‚×£!Éñ‹Ìå9– "Kœ¨µ^ BcÝWÚߵώÃÇU »Äû̓v‘¢CFÕ¦9#ÇLPÚÁîtödÐ!+ÁêÁ’!c¶ÙaÃǺ1}vÖvÝ?,ÏPÒº†;­Æ.isFæø;k«VR’Ç;3l¾ˆöÓf’¸ÓæŸq5˜-.¯ÛÙ©02*$"æ•¡™P¶BvöïzÀ8bÙ,7:3êùÇËxy«Ô†6èü³e·Ä¥Ë+Ì–çmØN'YsÉЈ>©¯LÔß›þPÛÌû¤j‹$ èºÈpp†Õ†b›V¥Úž|Žö±.Û2­’¾oÞzCÁå| ÐèÚZµ‡Õ>Òl|¦C,Ð<á]zdö2 kªâ?:+XÙ´ÆÐ¸kjE“#æ±û͆X|—×÷PB÷Œö¹tõš’[kèÚù›“qjÕŸ`–;õõD1^ypâ©ôÔt\(+ô àâ‰ÇIyR9À/ŽóB9Ïg~ç¸Ë’¯¨\¥—á“—ÂC†Ë­¿Z À7=¥Hb,üƒ[Ó’˜ŸÌɇ¨gîú¤ÏŸç·1 6.«nýz‚P!Cz°5ÿT¼Á3‡+›Kaçˆ)Ÿ°žÑþ %BÀöÖ(!¢•æá^’ ï{»{tae{™ïG¯8 ç‘õeƒåGÜõ&ò§=ªŠ•q0Q½-PýÏÚ©?Á0>èüþw„®âœÍ/QéD9 ÐTê… œÅôÎЩ@˜ŽYE´I”–˱©ëþ¦d¾wçÜŸ7|–(þ«A?¦‰çg–‚€œ.a¥ÆÄ$=þúá&TŒ n_^Cxøê3TC[™JUâÍIx™Dw´hóÏÒãheF¹I(º' Æue3àÊa?-+#Ÿð tv7ôÏ\d¹Çö…t IE†ˆ4Æ#¼æÁ-àô KAû¶N­Ä(e)šM±iHçf#ÿ.MÒ mÞí/’±Ôçü`—åuϦJÐhܸâÈŠAö€»R´æïñNûêÁ c2xsEr»êGñˆG`¥k•oì£ÇpéGz‡¬cË)oð°ªao+Q³–‹žCßuƒ¾ øX„Þ>úó2´Ñ­U•q3tÆÁåÁ)>Ô4¾QÙa£Oå“QE©nÉQx¡ñ²Žî9p0'Ñw×™aIõ—Ÿ`˜½ØÎŠ¿FU&(ƒ¦‰ÎÁR®xÀZ<ÿ§–>6 ù‹…Djìí§O¿u^Ñ–Ú÷KAûûŠ]Ã2 Ò±îZ2©2íóáäÝfHQ¾ù­Ìº­|QQ&žhç‚ÎߨBSã³YÿA$Àty³ª¿hyFþ2,ÞPiÅ,A•çÒ’1eQ²á!òFT$Z›tºt0Ñпˆ•)¼•KAü:Rlõ¡éÂ’^µ‹­:àƒ„I½¦7YØÂ&Ó/!½fÞ)/(tÐíiHR 5¯FºŠD¡èALá’¤ r*ôj5V2éô]ü<ܤ7™¸ ¢Ð³â§›ø‚8ýlLŽÞÛAE·½—!-¹°ÖßÙ^ÿ®[sñ9}G•¥9vŸn%7PjÄÀÛꚃ*kBÕ2×vŽÂWsdX‚8“oƒ¾¼–7S‹¨_L´kÛž‚ééH€Í Ïb»\‰„­ýR ü§µ%ÔY¹\ö aòqG<ªH!£fj¶ôœü»ŸFcgÔ"öYP‘C&ræA6’4¬ˆÂhoÉ%Åä¹"YpÂPƒiÓ® ùˆ>ªÃ_WZ$İæ¥W¨{ÓK,Nâ!.—8\ç×±ž"ØFkÄvÞÀ#‚mL7>ñáw"rÒ âÞþR‘¦'3¹ýÎÃ]'0¶KýùCÜO¼8úx×ÝÜžS¨0éç‘{ª–_½´ó¢zx´Ùº„BxMÔÙäyÒas S¼‘q¸)(º€ñó^ø?Â׎§Öy¥D*è¿ùZøµéa¨¬)QaðÃ<°Ø±-Ñ }ëǸÑ9oébvÂ¥žk@ÓI€ÎÞWëlÜ Ì'óô¾ƒäæóí¶K ÷udëXca9”,WàeãþÔ¥õ¹÷Pƒ5E˜ºb_–¢>EºA1©°LhC„ëQ‚óÕ«CNÆŸ±ˆøpõ¢Êj:IÁ™á8^ùàWÉå…Vý@Ó9[¯ü ¼¨ ëiG“©ÌTÉ6‹I @ý²¡Ô6YûÊîRÕãA§~ƒiÖ£YZãóƒVNÜ—4ÁržÉ»Á­jÆ._аöðÏPKÑTÆB=»—‚æz†…¼Ò‡:»¤Žiš’Sz‰Ùªkß¿V‘jßÒ¸ÅÈE’…ƒÊ‰>ÄýžeËü5*À¬Á´l€QXò1X<œE$ëÉ@Ƭ8L<)ù¡”ä²Ë!¨1£ A°H$—é€ÅÚ¯1Ï}{@?œn' ³IÿŸ5…µ9|èëŠD‰ù8â‚Ð20Ã\,ÓéÕYäÀšâÎ}§ÅdI¬%¦Øt ÞkgdŠ\|ú;5ºðWAÏR¹"sªÓ^÷}&¥Õ¦³FGFêJ‹³@dª&øÇ9xÜÛùØ› .ú01ŒÄäÛÓ8ä@Þ‘¿¾+g¤€ µ‡¥î>®»'ˆëÑJ‡þC0²_JöÖBæêIûY+¡Žù¿ ¯:´o‚@©§M`Æ„9²"<äSÔgÈÞ®õ,ÿ†Ÿ‡Ï-À~fD|êÿUßÿ÷WTÌ)†øf´¯íÎÁÂlL]rXð9šåúΜªÿ3Ð>nb £ ô¶ÉN¡nåîc¹®Ö^ÏÑß/S[?™@ÂÜ*‡;ÅüeŒ•sÈ[zO0î3“«Ñ-a¦Üÿ AAJöºƒÿÁ„àätL¥ àÝIô’m³¿œæEÿCiðÛ‡ç‰ÙþA-øœc;ä^ìESˆ2hÐé;ñU_uyÅ!–áDÉÅ©pa’-KDñ»ŽûsÀŠ4‰ ÿÐ: ´êvŽœ‹Š,NžC±`}ã>\q¢óëª!é7"k©Ã’\¾º`ÁäLlÙ RÄd€Zr𑲝&Z¹i`Úx¸²F`(ÖdÌn»› oX‹þ"bd÷ä5y¤`)Væ§ôQ–©£Ž"Ëž¯;5³Su\©x.$"vëâvNæwé† qvô;DkkëûÖ•1À3èT­ãå¤ÊÛņâw $†É…L÷¾>H¦u 7ÂÆíyT¬æ(@ÈYÿñ?ökÛii‘ÑÜû„¡½QóÚôÀx¶HÕz‰˜Í `jÜõAfàæè÷••Ú¾" A5I2ƒ9ýùÆZ­ÚŠÿËGUçA¨¦Î!È~<ñ/×^¤Ø‰…ç5™‚ËÛÂïWüðõ'Ö’h ‰ |±Ï=-ÛK•Ö„º9g>¦ &lÐ(ƒ.9Üš%…§{†êJ-²‘0Œö&.Ú#ÿ´¿BÞxŠ jÌÓÝÚ®#3¾ ‰Æ®çԃǻ Á¹ÿe{_V(®(:8ü•é«ÜKò*ö Ãöµ=àÿVÙÇ:'9ÍLŽ’ »~ý3€‚¢k%L,/ÁN—Ф·ÆfpØëb+‰ Ž4ÏhH”XüÔ@élyš1á ¡e•|UœÒ~\…!ÚT,âûªB‹õó˜g;¸Úë±Þ$#”Ýþ´FÚ¢©¤o£Ö;#ÌPáo,7mê3%|ªl‡‡Ê…à‹‚Á ìa“f*]¶¤çUŒÄ ºÒö° [àü”¯®á´j‚ñ‰h«N<U@ç]˜³¼Òå˯}­b ‹)âç4ÑâXL27_‡Öþéß¿ã0ÖXv©o‹2BÔ¾Ó¢ZœîŶ©}xpb8â°YÚm^ ñšW¾\8J‹«Ï˜„Kσ­!›«GÜ2ÕeŒ”+Í:šÐÚ×Ä·7GŵխgÞ ~¼©L>fË”3šàÒ’O­ŽÁÔ7ÊK)Nix*aî?xšÑ&Ül,â`f½YX!Üþ8¨°µs/—*Ùq ¾ PÔÛÑr¤™}ض6ï"ÑÊ9¤ûQÌTß“eœRøUx][C Hƒß>wÏ$ÅjYABÊÐ#QŸ4 š2¥¬èÑ.¼5êð‡Þ8é.&>HÕcý.À¶ù‘ðù׃SôàjÖñ lè%ôRw$N‹I«ê’ƒMô&Jç7Þ•Ñ){V÷š¶ï Wæ»ÅŸÕ£8Ū ôZÝU¢¹â‚póÇÞusÉí&ðU¢M˜¶1éš•“ÞÀg«rhRÞX8I›°.hßôß·þ G5L›Ê–ÜéMnr=b¯™Èq:б}›ñüUó$ν7nto°CC0c²äaûp´ü=K_{Ž ÒÉÝ®RmÝ“hîjfe—AEâÄBÎæ¹Lòò~ïŽPRÂh'¸ÑÛø*#."ÕthNC984Îr“HÖ°5ÐbÁô!ÖîwÓ̽êO•„Îצð2ð›Ü#¸à¹º…NŸÚUÍhÀËù/ºoE&eïaH.5 ¯é£uj'»èìƒsĦ6Á1ÊÐ[´È”Z“çMË<+âÓØzXmx FÞ{mˆÛQ€Wqz Ù;pÜk}\‡Š§î6ÃÀ–íi£;ÐOH E“HSÍàì¸ÄÁ˘ùÈòh±Þ¦põÉvÑor`1)ÈxeÇÇ`†bþêV³!»Ô™c²Ñ«dÍ/SÍBD´‰ .åëòpÙnË ´Ùû‡žÚnnaÖ™#§W^‡I£=jל‘Ó·™‚ç2B—RÞ¿†]…›¡-T­/ñDt¬:Þ»?¹-ÜÅèÿBÆÓ~˜C·ŒTÊ$w*0B&P<Ɉ L.låâÐ-u´¤e(€á°$“[“‚BŽÁŸ¤[$ò:L5‘ Iü¹=x]êê §:5” *ÊÅÏP8—ÔwÎ ¢Ó|ó‹¯Ïš³§³A‚vSh¦¬Â8ÐiÄ\8N˜+l>îˆo«†G²Aº _j Üš"òœi€6Û oñÌð³)<íÒpô"×åNäÏ]¬gt’M\9Ò8i÷ü}a'†JÖ&aZ¸ö+­çýúŽtìQ°¬AD3½s¦Cíáã¨%7õîQDüÿbX²·Ü»ºEÒ‹fkýÿTÎIhJÞô¤r[,€  ]˜XCqÔÚô;€Øêðø˜Yy/¯âPï$E ÉúS½ç½êÄíƒÿÁÿ&Ë7VÕä$¶?ÅÖ ¹ìЬ¡˜”ø o4ÕÊb[éL¨æûc ŽZá숻…k'аô3sßð±™­ÜӒعF!ŽB`œC/ëODPŠUSBÕÓŒxßK Z™ YMB!ÂØ&gÔÆàØS5Œ,”žPè=èw¾äT'T/¥–öÌ»YfÈÀƒòsk=±¥ß}ƒœª ”Œ¤KUù7^p±ìf&Ž=À{ùñ[Ã=ë‰Ãv@º‚(f ¸[õßø»œ,«íZ#j~ç`øÛréšù)ó7Æ]¯xeˆI"£»KÖŠ \ü½@®$‡§’ž.†«0óáNŽ£ýÕ™¯ ÅÝœí§ÜûbÀß©Ÿª€ཱུàöÜ0z•áëg‘‹|0Ïëì¿3Ë^ë7D0³ÜtMn-®Xð²ëS¨k›(œ¡g>_é”%Lü”Íd.Nç XSx¤­ÖÜ.YsŽhAÞlS5ŒäÏé’E€ÐàSç­øöu½5žrÜHObøVbÕÚzó£Zþ2§"¦X0¬>°BT™J´ke8c¡;Gñ˜ÍÕI;JAà „›qË(.}7:Ô Û·î¬¶&S…òU–lÉ‹¤ôÀ,PÇ6‹þm¸÷ÔýÕÖU³íÉ5LsÁ¹2¨{JWò)‰.‘t/ÝdËWÖXñc=1~°kËæ8°O¬j² û¿È.š¿úì ur–Xë˨ïGÞ}f»0»èCÔȨ.ò>Q¤óGØ ý@ÑÃkuÛm¸x.Ô¨`¥°½i°¹;Þ9•)båÂK–àë|ƒwA‰ø…ä‘Ã×a”¹×m×÷9vN³èzõÊE…ðvO©Q’C¿^W1ëà7zD´n,³xP‚ffZ-6ŠW`õßذ3¯9žœR¬dÃùyF=#î[ÒtRÊ!ÒöË?E¨ƒTl*aýv’`Œ3Éí÷T³ÉGžÜv(©(ýùP:ö›Ÿ×“/wý¥ed l>Ѧ­˜”Á73þòoM/^ñ@ #…¤]â\YƒçzÃfHÚMùºšÀrÃ5ÓfÏåÿ¢Å HÑÌ+KÎÊxÔOµépc0p'_³iúè¿‚ åRP%‰ü»»]Ôˆ:r%EÃ/¼*z#®š“ZïÒq®7!P0Ò2äb"pò ´wœÒF üA¯@d^Óä¶„†.˜’¡«08˜a)¿¸Á}ßfÏ.¬Pæ†Ûøz¿˜2\Y[•,jŽÛñ¯Î:'TåîµÔçYÿöáþP!Û+Óü/Ýc¢ƒ[¾k+{%ã!›£­x€ó.´ÍXÖڊωŸá‚’ìN(¬î…æ@‚ÈNîãK ¿ðMMðÃüÆ¿Î,[§W©ìg¯-cŸ‹Ïàñ™·{š,Ïó.…Z9C½Hã/¬Ã™Tn¹$Ÿ£‰ ثȤjÎ?Å·å]fÚ\ŽÌB_IÞ\n €Ò?|í7“Ož©Y­.Üø•SÅ- Åt%paâ~Ô)Ø[pÖçÑV:°(O"_¾•UÁÖƒY-™„a¯áÇðf<×íNBëfNNÓ]÷᳨¼ 9¦áhÒ¡)oV]HÞZ§)Ü‹QC»ÂçvÀPIir«ãT|‰ß<‘ï-ìÚl®É–w-¶8¡‘¼phþ¨õ*¿Ì=$)–<ï¤9Ú~ %¨"q˜*„Y®®júQ˜bºZ-4Âl:m™#q h_Ú4ð’&¯¡”›:°—ow“€Gºw°±"'7è}…ªèô‘7—TÖÐj˜ J`‚,åàA¢jèTl1ÞSÙ)}¸ƒÝÞZŒHoUê…Ã_ 4–°#ƒ™7¼U=úÿL¿¼5Ço…j\GaÅ~%”-SKôhx„q•£È&{ïô7élb‰µ±¹AŒÛ}ÄÝ\%}îKÖ¸œÎ‹…¨¸Sm3E›" Ý“ ¼&Açõ_üˆá[Ô­afÖf>FJ{Gz¼–7Š£éxØ  ™öä½.dcøá£ŸÎóÄÐT&6ȉй?œŠ;™Däö¹Î{ï522ÃØ,IzšP£V€µ{iŸúz6cÆ]ÝÚ'{·úö%ofbåùØÔòU (ð…ÈÒ—OÏ«øŒ€«^ÿsXËÅ'"úˆ^NóŸ—ÎËÐ1±“§µézÓ{ àŸíÚꋈ,„ôŠGhrj´§ôø×ÇÉmï'aK°þ:LE Ú2i­^"-ùW­{èýø‚på$Ží?›Ê DEÓ98È=Õð­ß49,û­H!”L¾Ù·¼å@üiA¼_Ë’#V^yiä<ßOè³÷)ºFþo¿&ЭŠ*ŠOÈŽiácÝ­Ì@€B´{°$¼”wvRG , 9o‰C߬¤þº‘iFÇ:ž€^5A»Œ@´®¿€ô¨&å¯7’Ï? 'ü4Y]”³iùL2kù¤9í—u/vaÊ_ôó‡É¡·V Ðs2íYI~_~Ãìš~ŽÚíNØ)dË2(/Ú!°ß2†5. Z•Ö ²Ä±v¥¡“$ø:¼Æƒ–Æ6 ažÌâCWKìgZö §X—©}“öFy!d8Ð ×ïÛöàŒSãX0 AqAž ’kmG öD?ûd:D,°0|³x5+‘ðÔø¾ÔW.…Ìîf’’j\ÙUK‘õ¬ºÛ@2ž}ÿ>.7ß¶€œÍ0×OƉÞE¡2fC³@‹`·âÈ¢:Bƒ@鯽x0Gð"*üñ€¿¢Gìë÷ÃÿQV´[ðÇŽ‡þOO…+Ï%Ì@¨â”ÀkWÂoìdx—Lë+µîÚô ÝæñwyLI%Æåšíj½ýz>0¨¢¸ð`%Wé+Îì=CW{–Ç;ü)u,{"É‚RÅÅsRËjZìÊüÏÕ…SwêP©˜áøxA²b×µ„~=±¾[a†ù¾ðò‡šª ¡ŽþK××CiSeÙ€éÝ™$ŒH%‹$ñgGŽ>ÂäaÖÄ÷)&ñ©ùQ»'¦«Róú {P Áäl>K½—zêÃi I`—_WiMRü4%‘t.Ò6Ňìs×.gWi„›®Ÿˆ´_4YIïäÓ×Çê„Ô«–Z@mlžÔ« ÒÍ£çuÕô,G:²}DÀ¢Ð ÍXZ ('w&è·ÛÉÕBæDK ÅÇ«b=÷7U¢2cÆð̼Gó°-Þ±v<É2xs\ûH˜ÛFœ;}Ûž=rdUüÎÇz`D…} uwË-Bñ —¬3¤Äîèæ,ê.NQ5똟ÀÐîp7î,½éJa"_ŽG°ææ'*ÆÉ6¿ŠßC$¥4 îÂÌõ™ZÊ.wÕ­ØÊÒ¬‡ðég½<âöøf@ 0”"ôL\G×õœ‹ç`Sâ±|œË”ÓÁ+e:ð1pY¸èŽGtþW‡ñIJƒÙ¦©ñþp ´Q+¬Ü˜!î»9¨{~gÒ[†#y¿H§†¸lЩ%j 3îYƸ“†Ë=â•î&÷"haâ8ÊLÒT'Á˜uþû“” #­ruý8B`qXJ%z›ŒXª˜yü g%ìë^¹8*wÁ:°õeœ‡ª2ÛÐ~¦w¸%˜©"7–Ó•%hÎJ`5iËô0Ô¯ŸÒþåTªRNZ.˜\ú¡â¯CóZ̵z‚ÒaÊ¢·£ßÌœ®v”½j8ÄÏ{ýzàr¥Ò ü»ôk"U( ëž¼}K'Š;Ș›ïTÿš:ã<±Ökf³ÝK‰ó¼»@ýòè&ðˆ­•Y¼ämeö%ðd»ÃŽá5-($/üµ]ñrOTºßFÄóoÜF4´jÏ…XóÎyˆpž¦ù§)‰§VŠ‹?„*¦aúsTõå8%gmð\sX©.³Úñl¸PXâ±¼êdBôÃãDç ôê Ð׆ªÒöOºve½©pœŠîO¼~ æú …¤'ÿ-°óÇÒë‘â’ù8…btòŒ{à ÓEQ׬‹ ˜V1x]ÁPt—õ´ü Çâã´yÀ›Å7ÄM~7ÈŽ&~ür¶wºØÎ<†Z4»Èk6šÝ¾8P” þUà‘ž¸@ÈaõE®²Í “@¾ZßüÑ¡‹£&…?|Œšï0qbZñ€’nXTHžZñsÉϺ5bÕpÝ«:U™{bH’—üw‹3¥;C8&:ÏÃA5¤â<ÌÕL\½ÃHî:^æ¡àcv¾bÑ䩵’ ÁÎ}À`òT{ŠãÙ‹ns’¤Ø7“ºù\1†ÁCü:B»ê™pÈIlæÂ䙚œƒê”Úâ-}©…ñà Þ½{u}ó¨R2‘e?°‹ *¯Óü§­JSJ×l‚³(a÷`ÉÞaöeø-ng‹ÉAã­Œp=O|}WòÏdµÑrXªUŸ|êÀmkïˆ뼈6—…ÓÆ…uï²ÖÔ yiŽfͱ°¤å‹ÑŽÎF&ŒÅ*vT¿jKÍ‹M#˜^÷dxµ"Íu2=4ì)…¶œLÂÙnmå?eƒ‹©ÀU’6‡¢íÒ~âÕ}èg£ý‚JÞ°Ã ¿)dÄà ~Þ6 9Y7(ΰLä+\u×H%=ýM}YPäs²t{§…JcõÙFÓýXv\d¿=ÒéÙúÕÉÁ:¼¹Ró'ç‡í#Ø<€&(@<´ÔÝð¶¨ì>ndñò{FgúVÒÉjì¡IÈeÍ3]=ÐOtàÏ™N¹>ó|ZwkÓ’ û)”2¨rá8g 9…¬W4râr¸™qÿ#šõo<%VíÄ+ÚƒpÙ³[{C¹ù›<Ò>`0Ø^/Î<•_Á|¦âB ›ÓèuÀj˜¥Ø…‡.3o¾Ö°ÑWe9–i(ð–_;CsVh•¤qâHÃdÎúîým5ç:r´¿v˜@(OÚ˜_ºnÖV€{£A¤‡½e¯m2:ï±lˆR˜Xð ˆ\Ê uM4 «’AA øQ9ÖGçìŽðÖh[ŠÆk¬¿¯JÔʺ›6•ø¾’¬!ïçò|Ý‹Ï77ÉžÐûì;‹ZÈðíðØsޏAs_Ðä¶å¥›T[yÑͤ‚rŽû°-nFIÕÞ_iåÔHs’K”˜µRª«–F‚[óªÞ¸Áevë´ã¬e×XøÞ:±ü™Û«.V³èN«¿ /j$­üñ7‡ašFž\f‹Q$Œ»ãkbt, \ZÜÞ•:‚ðË2âÐËIh{Esq À6°¡¾šø!"¡B«”«×¼u»:×2и¼•7Æ0|ì•ÈÑÅ)îÈ‚r–û#O”|h«ïÿßfóÉQ½D{ªHj¼1«@(ÕÓ—8`R@¼°•éÍ(ÉœC.”õxuÈ‚ÐD‰«Å%æ6ò´Ûçx_¬¦ìBÎI@;¿¹$ãbð;ÝÊŒÔ +¿ó x÷¾ß|@£I±9؉ 4MJ|[‘5 O>Hx©ìÿüô·ª.z!Þ¼»Ù%ÂÔn¸$I¬¡oÒ°!€€)¢­&ÙV?•J±áæJ8b‘hrt3C7L`ÆÝøÈkØ]\Ú]:²‹¸¬Sl«ŒëÓ†“'Ö7®s«ØhDÁHí­æü¨Dœ+“©xDËû裡”Ýé"ŽD§`ZàQ÷m›åŒ^¦-ÏìåTxgPWÛ9N(âØJ[@ZVÀ̟֞Ö|­¥  ó𗾨bvž¸¥ôjGâð‘l…/G»Ý9QÈë{Ÿ¾5§‘åýtXSMÊY›ŒcôYVØÍaÚàöâù‰·€Bÿ”iü8l=>m&P\ÌHBbD7™$Ä’§P«„WӲў›»È¾Ù šëä,aK ó31púü{:³¡ÎŠ˜ X•£ üQ8?Ÿôc0äV3²eX쑲FNIÏIø&6m~ª±â‰óÌŒú0­0»Î ç«¡Ö2<Vm`??;*¬)û0¶×‚åòQëÍÜO2‘âMî¶Æ¾¾9ÖGWµ?8öh’麽 ?™ÏS¶guÛ²!ieã„j¹¹áŽÕA„zZ˜€-$ô²Éu7F§VXËž'cq õö¤¸—¶ãÚÜ€K>ä÷é¨o6§©X2³§BO\¥À&LŒc-,K{ÃÏÈ\Ìš—Ž—!¿§8“ºd¹«"S®”Ÿcöö;k†G×üdSΪqž6ã€ðMªvžGuž¹èÝ¿q*®À w2M÷ 2qòžh(>pyøj¤:<‰Bö³„Ï>‹ñQïÙadd®ªž°Œ8ÿÙ/&õæ!#HæjúÅáza²E•¡·ªzRöòãçÏÁ¬ƒ#1¾þ¼SZU¿³xã©íLÚ²H!TÛâïÒ7ÞÌÚ”‰¾_{ùêX¾öñ\ ¤~é%·Ÿ×;÷]5LßíÕæ¤ Dæ¥HAˆÝZçì1ˆ«\'-7b&<øAk[¥.{¡‚×io݈è•|J´¦ujĦZ€  |w1bi| —oÇŸw¿foÍØÏ„h6P§1?fTªÒ ÆC\’°‰:¦YÈ…ÍŽÀ}ÐÐç[5ýÝ±ð†º—uJ1ߛЭ°vûH%ò§]‹oK#w±äÝû€—ÅrŸõü£ñ잤=?Ö!Ѝ•ÕÂ/²j“·ö=¶x2Å'òß@Içkõ*RŸw©»• ìå® wè•˺EJdneýã"…„"~".)i×Ãúàt‰ów™ÝðR¤Ü¹bC$y‹ØJ»|Ÿ÷ã&Õ«îK[ )}*Dq;¾M¬;7'Ãп«½Oï7𯬴c¼zÐ,5ÝBºêðÝ…×ÜŠÛ¾pÝW5kF‡†5àÖ]ÿ/xÎÁ9rc"´ ¹peǃ 8!ùwWò±~Ì|%ç›×¼æeØ-Ý©Ö-¢%KKc‡ÿä×r2“léo¸^nLt÷±TÖølË~Õòö¤º >eOüþíxq4Û+§Kj½‘Îã)Pl¯ÁäÃè ôäü1¶’4L®“tÑ zS²ç~{> ’Ò]“‘Ú¶O¨-$) ¨?@ŸNŠ:J¸J‰€¹Š5ùÉÚÈV‰…1,TlI¿m ÉFl2ªO ‰Û&,xkä›Na„‡NLÀ>ýÖTKí:§U‰ßæ÷f³ÇùÕúÙØZÿÊjÂ0ô¤êŽu‘½ÕY¯`âÝuQ lɉEFäTmñÒæ¼Âé@ÑÂØ~Ž¡‹î˜¿'ÈPô>Ý|4gnεVÝr‡‰ÍMõk¬Ê3£?Øì’©/_é›nk¢AÆ/¹ù}¼z €'d$s¦v›ê]¸söÓxh®:§ ܭ控àü‚áÏÉh‹æF p¤ŽVx¢¸¤Ûº‚0JZûYqé‰*h’‘V Ï\3}x×¼)Å)N¼×èAò’Æé³ÛA_Rh¦½±´°Æ°†ÈP½˜Ð¤û‰ nÍ:3Ñ¥ò@ðlï¢ñ*êw•dLCThë‡ÇÆÛ Œ¢v„üÃ&6˜ üÊûlK1?Ãþ5çCù(®Zw¶·-¢ÆY½ 4N¹-ŠXvvz¶¡ "-¯íA,úçWÔ¦e€ ? Š´’´42|ñžo™‹G.íY qÛ½Ðôˆ¤ä4ò4|º„ 8® µü]Õêœ*üÅ$?¡pam¹8·â‰½¬}¹)ÎÞó<#åÓ'ïšÚ2FÕi{µQ9†–¼š±-& ­“üY­¡šÞt7?@20IÄ8ïõ²Ï ÿÃs”¦š26úcç³&ÉAyBæY÷‹)øÈö½t]þÔ‚ÃöŠF¶ç•ÄoyH)XçcU^ÿÞ è¡áj.¤åá®íŒ‹^YÞM™ßÝšW¢à!ÀŠCó&‰ì ‡¹ÚTD}[¹){TŒ‡??Q§`ƒÒ*­Ø+Æ¡õH²¿©…Ø€ I©ho7ò\ÒÆ‹­VKOã7¶è° ¼èD®¼l ‰í`×"-¢Ù¢ì)Å·ÓnúÍyÿzYõÑç-˜Nš—ž·~RŸÆñÒ‘xYÐÀðŸó1ñÌ0 öÏ__dÒ*÷ãýÂ9#¿1ú¡a3¤šÛ^ÎvYŠç2ZDe°·T=`NSÿÞtjTʫ·ƒjHAæ°x WB ïü^½àgý©G¯´UõÕf…\ ±c|}L²Vë?*Â&Ö±Iwߘ´H$Ðn­–b˜Ùï>¨ïî0`¾ƒ!o]2—žÂE¹ûë9[9ÌŽ`ÇvÈa‹>ü€¹o¤‹õSûJž ° Å–ØÇe"åCþ 86^H’‘Ð's]:Â5‘fóR ¡íñR1ÓŠ­Ð!ånRÞQž#γ5aÛ¯yyqFKúG‹0Ýà*" ½üii'ù§º”œ²Õ¦IJÙÅŸTF~{mª‚U$m ê9ä¾gJEæIˆÅ½ªFºø9SIx­¾mO¡sÙ7Í2]9r¾|îHŸˆߪCCorE>¸ö)@¤VµÅš¡³Šâݺ¿²¦|ó ©ýùµú¨ýî…# rÝÌcíw‰`®[eG»h¿£¸iÌU]‘2 Ù‹“(ÛÔÀ<,-‘Âú´øv"åR+Åç ×['Ž™¼Á ¿ßËáÙº‹ØÞìÛ'#!óÔ™OÊSñ3Ü‹•òq`VS¨ž–PfE9Ηž×+¨¼uïÉÉÚO„Ü#èñcT 9ëlÀA¿D}#®.Â;m[à5–aHœdæ`ӝЫÈvãc¥YK´Fƒ;¯Ýÿ©|O?]Ë«ÉäÞ™^9]–`¨…"ã´=V{§ÍD [‡ótRÕÁóªã­NàñfÁǺÀ²xªú%ý[3bU3öÚ°áôÇ%ç?y\£›Á¤žÇÒÎü½E7eÓå­$a`y|æˆ?ÂyÉ"Û2¸ `’•E Ü l1Öéž!±‡Ä8]'¼3#&ÇW¢BÂÙºˆuXAhöJFòCî,÷{8“!‘"´g´ÚédáìÐ Ú¬ƒ­=ÕÑ· KžÚB˜r—¯ NDgò‰ÏÔzÉZp°¨Q0®ÝG}ñ–ªhûKéÈá¾±»úqsáDv3'éÉÜì9[rvðpÀ¼Y„>‰~bʺéú Ú)Ag¼ù…ENÀY¤Iäž\hLzö3.?’¦YÚ¼¦K4Í,)^¨ûG…¦–|:RÒHl ó»©f¢°ÁÑ€ËI}ïx°? 𓵲ènªïE³¹¸¢+\úGÔlŒ©(R™ÏSužþaÙœÌxáhrûA ²Àá)P¿ßÀ¹äêzBw.´£oA6¹.hóhʲ—ä²wZ¸t¿ ÂJ“V<ŠòÂ#Æ´FÓ­Ù‰íq=Ø¡õSÄœ«¦7‡”l| 'sêWýîõ_-‡€EæÙÇœ úô„’$Ë$NÃïG‰2û Iž_T ÷KN{SîÇeÞ¦nfhø:×bþVs÷4­ïšH&˜^&»ž/»Zø#½më=EvíØÊmœ¶Ž‹ðŸù é ]jã“•zèÇn%тڿbš³Šhb,¤·ÏÿµaÏŒ¾>’¬tM² óË‚lQYù«DŒÛy„KQ—%Ú§Âb;E=ÀËYqù=3ý5tÎ-ÈI3 èªWžU‡zokãÍ,L•J5(›3¿¬Öñ&üؠ̉ܿ ¯„÷À¢(š4RbyÞœëX sÞƒ¹ž ‰(Iˆ/”qV! Ç„Wy‰É´ã' =Tu²<ßýg‰|Ë>P~îfLZtƒqïñ „N7e5kBíã0Ÿ;ámì»|Ã)…s:O?m[DD¯Šu¤漇Üî«§Ñ¿aJC„QÜofÊžðVÉÑc›Ü˜ƒHo£×øåçg–H‚³5GþNªKp؇ËBOîòв0Oó-Ôvf¤GÓÑ”tfö\Ùæý}Å‘Â/%? /锇Ü+b—~Xr)SÖ+¹í¡ÜÚšèh@€ôùMFã7äò”µa*œP/—ŽWIœ´j^aÞRA*†“8× ¥QÝÔŸÓ0ÐÏx…=OV|È@r%ÒØä>ôoŸ<uŠ4mÃK›i(ðeF5N$ÃSöîùóüZ?sÄÁílk!G¨¢xïlÀ÷è-]ôJýYV7¡¥.9E×Æë±½‹l†:2¼aÂ6üÐí¨ÔÚÇ2åÍ+ÛMáü’8;A  —”z™ ì¦û°,ŒûBÌÔív,ëa¬ó2ud®wN&qì[tŽ—º¼}ÿ³ËEx*Ì|öŸþ·–%â°ŽÒÍ-ëцŸ™±ÿ:Úÿ­ÔwSiηï|á¯Ö"»ƒbŽ]6¤^îè ³A‚ó`œÂ_¹H¸Ûmè·î~. ÚÉ© fåëXúµÁ‹ ºé Ž NÔŸ¶æ$¯Éé“öžŸZ*®k/±`Ÿ6æQãk ígT~b%nýòŸ·¥ºú;¬5ËQ{d ñ„à‚s8h°÷ú«Ç6Ó1òdÔbÚŒ€Ùû¦U¦™®K¦1?VúÊp°á—?¬p•bê©·YˆN>¹<èb.$9ß•ô åº(´š7X†¯:×fè3 ˜Ž[wÆ1lcÅ—´Ä[5^¨òíDÆêô.Äá£ÁÀ¶¹*ð7o#ýÿ9ÙðI'Á›_k"[9û­³ç·‚ˆq£´M'×áÿ'}ÂçûxÕ ŒÉÝ:Șª,x>» O–Ø›!uJÇíQ=_Qƒd·ÙZc"ÝUÎàþ<ò}Ì{ˆ°ùŸP‘e]ùÛËIyÕ4¿8Šw˜zÐ,a…”P±@+4k™À"¶@Oxý¨ßð;³¬š -Êa:ÚbµÇø­lÚÎ Ú¬®rƒª)ÓÌâ4>ÃÔ@…*Ï¢j'¼~Ûóe™ÛXöHQ9ò[Š>X8åÈêáQ*‚x†EMyxP2˜Áܵ™ Áñã.𾂠ð×íiWÜE%' g;gãIÚµÍ3ÞXJr9Ýs"ÎÎ2+z¯L°Ó»c~owÛµ»uE‹‰ÁüJHµHÆ%ÌK´Çg»:·‹ãF». @4 Q‰ 3‹W®ò7×çÜ,ïKEޝn+2H—ÎVæÒúhesf°@ÂR]÷ëÌ‚@ù¾5ÉP‰à(eiõl8<“Ì «{W)\Ìo?m8¤ò½¢(¨¬=P©é£žFÉsD5ž.œzìÊ5Z¸öÕ[¼®I½ÙQ÷XÞóËÂtFöL8C÷=Ë­þüJcÇÅ5/øÓ– 1Á´—€O:Q Àßœs?’#Ù2ŽºÊ`±\{AsÑx(1:ˆ=}ÎC²Šá°];Úg»½ i$1²~~úeX£“ä?™âÌQp‹³À 1Ù¨´@u7ËÇÊäÓÀVU5 m2k3îǛ֗ÖauT5²ÔÉíG?ž5Ã5—Ž_¢ ª”¹uÅa:a^ôôЬùí/zTô´š–`¾ ¾Ò`QòÉɬW0T©õ²ËLD-9\ãFC9¤*HŠ FR¯IüM$—툞ÖGÐD²Ï =;eñ)ŸQDî¥G _Ì æÜ'›ý…Ǥ´_ùŒç±k¾LTo1ÕN¨Cþ xT«û˜Åt½ŠðŽ¿¬a{ÎO{ÇVp:q©RkfÌŠ«ªgŠ+¨Íò½f[þÝsKoQ~k‚]9fä³gZM6R ô‡,uw1Ú| ¹ÌÔž ;8ꬩßdÇ6xÖ€h$½mT*.ÄWwÓì;óD&ÇidU!H¸Öå-ÛIö‚{¥¶º¶ö•l&b–?Su.é‚Ç£ÚG]+ŠäËù†ë^>åmÒ&“¾4 ÞÀß8d3Š׎zí”`¹eßp‘òñ¼yÒ ´&º|Á­0똚è;¿Í±6ΫÄk,È«Öy;–]<rD'`‘- ¦zIꖸ↺@G©ÖfÒÅ‹³|¿Ä*°g7<Ù×SNKŒs5ÙÄûnÊ ëÃA®”[ ûAr[²²éÃõßo´Ç7Gëêcv¯U35´È ÿª]ak… ÖÔ[Gâúà”Ϥ§“P<š‘PœÐ4ÛíH)Düà[ëY£(ý†Àb†jÞû¸ÿt‰¢¨—5Ì·ïûæÛdß}¬Í ÓÔ¨^æÊ ìÔ»ãĦc7|Þ-0•ÎdÇÁäI»Œøò¼Öëc“¦ù½1hð$‚'nU­‚ý%ÇPsÅIL?ß«‡Ž{yCcýgí ™zv"{ÖžÜ\è$èd¹Ú‚>V윙†ýÙi$±#ÇeÉô¤øŒIX£4£UøÓhððz¿Ÿ–æ“rÒl/|žk÷;®Y§ØgïT¯C5:-®ÙJô~è´ßš¦–Ezž æØƒ~†Û#¸¯ÔGÅê@r$æµnxMÚT×ÿÔ ¼õh8GFÑ2)Z|˜ç¨ÿ$F0Yk3Ásm›>a[vÁqý0E|¡ÏäøïFÍ.Ôó`.ÄQ|ý üJ€}†r¼“¨ ðMƒRÝ(aKTÌœM¥©áEÂ}Bö`åÍ9P¼0ǰ)ÆëÆõ\Ä@[E2q;°á'ï¨#.Òô¹èJ_ö£ýC?_e|¬,JåòM#[©0a|٘ˠ¥ÎgLߣ;ñ˜À¯M©J¸ÆÔ3Ü:8à„†q»L:M…{âƒ/ÀF]Ëq³‰ñgmnEnjMäHüYúr»Ï8¢ÕÀåìV…Ïÿû%Ív1>˜¨Ñ9=áöoÄD8ØÏì >ã{©-LÛMXž—¤w}k;%jòò[›êÅ#1oàAXi;ŒÍ Ó –úy9Zë+üxFÁkpãC€QŠh|»$€Uãjßâ=xÅhQ¡-‚ÐÔK™$ïNDôÏšl¤:Ü l–Ü"AÒñä–lýÚœ¢Ãž)iþ0K¼³Šƒ êÙο âýh3£Ÿ¬.nàØ¶ùT ^!@ú…Îø §Øé ¹DÂ(ÒnvŠTáJ!÷I‚‡Ï°Ž1kîvÓ ÇÑÀð(M#w| ±+6/ÊM T ÿ¦ÝXS û€ðP/Î4A6E¬7ÔG#‚iQ~î_ë•íi•—” sv-üÌS&‡­{wnÐh]¦u6&B*+gàÆp´g›ÜÔùºê•Ñ~JýóFÕçzÝ`hŒ! Kñf{€zIÅnT\Ãê|Ì#rÇÿ•ÂoÕ5óeÑÂóLÖ³;5KIáaŸOµ­>â2­/ 7ÔÚ÷e™ƒòðiPvdü[ã–r§l-Spºßš«,ñ8YNìñoì` ‘ ³ÌàDrªð.Læ6S×­N¤°Åà×h„W ©Ö¹ËÐþÁVa@.A_ŸO{i±Î¦æ$c€ECŽ¿ö[ZU¾ÄuGyE]3¡£eÖUûµ›!|Aœ¿  wTŽßijmŸj×…Øjx¾kÂŽÉPB_ǽ޽§' “òÕìDµU>0 ‹YZrstpm2/data/legendre.quadrature.rule.200.rda0000644000176200001440000000431413416410274020315 0ustar liggesusersý7zXZi"Þ6!ÏXÌà eŽ])TW"änRÊŸ’Øáà[áß^ ·ÖnŒÊt¶IæßÔK×ê”OetæýAþÂz;ù™êšB„Cœ-ãáBªf™kñ&…Ò‰@›]eüðž'“QOœ6=Çd¨b` ?óòÛ;]ùJEÃÅ!6ø~гcÜÁ¤ÉQ•ïâ˜Wƒ'º}*q›'IbàáLð¹Æl›Oó9{ îg60ôì½Ä°ôdú6JŸÔi@ʰ! (ŒXÑ^]Ó)¿ó5›oמpõpBRÔÔ¡÷ÊiIDª*NáïboQØçò2_/nÕPoš-µ9w%Íòl3éuägßa®æ©ÞiÍÞ2›NÚm‹½±=Öíj+Uêbî$¡õ#ó¯A¢ªv0&ÚY×¶—µ¡Ú‡ÐÏ !Ûº¥;O¤ž´ v–¾£ÃïhîÃÍÂW¥ž”»]Ý+æÂÉÑyÐg[|•BU‹©ºã+°é*ýÇTba=œ¡ tË]8&ù¡^á~ŸU/ÖþÿêØ#“w$´,N‹ÚëÖ·T¸]ú³÷å¬ïlIÞ“ÈEö;Ô?Gй)äh4Sˆìuôì02+?""èIèÌ#>Î ¹ÇmÕÔw¡ï&°"g%8B>r¥3‰)Û;&…89[Æ–ö˜Ò­K ùOœhʳn»A9Rl„mНíLÂBoÓœ?((tHcŸ¸5ŒÆPæ¤ ð‰›^Õz‚ÙÕÊÈE…£úŠÎ‘†'Á£îš*äLîÄQ `‹º—P™A€HL¾Qö ˜~ypfT>ÿã¹öð¯I|ÞŸ¶*¡Ÿ;‘Ísµ -鸪Õ!‰éž 8[{P-õG_„ü ’QfêËöÓxTyÊd!ɤ_yb5YŽFp\œyûsÄÀ«Øä#¤Ø{ÑPçÜÎ̹-»Þå‡pî_ÕT IYP¢_˜˜ ß#º0©Y"µNò!iª£“Ê4 /T,æNÿ@“å4±#ÿ݈0.>ŠŒÓñ7EàûªÔðíK3¥ý±ÖâªE ֮7eºghõ)™ ýMú2ÎoS‚šäDÂ;Õnѯ~N Ý RöÏ!§§ù+ë>!Áæ'󙀆Uφ¹zv[8« ;ÄKöÓÉ CX!ð>»hò‰üÒ«¦[}ÒCVèwïj°ÎIŽpÑ&ÓŒ"œT”i¡ ütçÊ¥ݶ÷*k^J*ÌŸsò7ª×Í™ñ{¯pSê6¹Šô[-’JO’Aí1u˜àŸ€[?$$­$O$ñƒ¿v­šp‰ERþüçÜÀý#r¨úú‹UfúÌ´¼†%¯Ït5¶o&v ×T-’æmì.GY?ÄË2rZÙa-” úq³¬Ù 5Õ 2 9"LAÉ|üª…¥"yÀrK3z¨1íྊ6ÖïZ€í;~Å+3‰åUnríxwàÅ Ž2Ý¿4 åߦ{5®3 !ÜÒuÈHÙC‚a_%]i^r…2×-sphƒæeï°âVŽ1%Ý`tˆµSö„à[·$º&uT`@ãJ­¢yX´8Â#ê(^M1Ñ6[Ì/æÊY‹Æ/£ðö‹Š_Ù,ÆÊ:Ù)(*Ù÷ŒO’%Ÿùü‘IóhÙ`À”×ÒgJwTŠøÊÔh;%ìÍtíð)ž²ÁÐr]øN Ю5ügWJñõ3˜9m8¯ŽV¦§Rö ™arŠHU"¬¥—L× feQÁ~wr‡dÎû2 eæRyÿÓ›¬÷jçT{­¬"zP[“œÅ w¢–q”}àÞñüZTžöYúŽD Ȩ̈¯Rv}Ÿ`rу¶e&°…õœj"û÷ØÍhl>½™§uRDZiy8­^`WTÛkÙ³wò²4 \ð»fGtÀ; í´R#„ñøTjr¥³3ŽJ à I ¦Ïhü]:¿¦æ^ 5³>0 ‹YZrstpm2/data/brcancer.rda0000644000176200001440000001630013416410274014663 0ustar liggesusersý7zXZi"Þ6!ÏXÌàÃm‚])TW"änRÊŸ’Øáà[áß^ ·ÖnŒÊt°ý¨Ý:š›`B‘ºÛx›;ŪuŽÏOËšézø;Ó÷ª&¼‰|‚ÖçÞå³oÔ RÆf|}³$gc>\gû^)™ä-î™§ z)FÊr†ê¥O^² ÀT|G§2—@†Í9Í3XðYb3¬ѥ­,£ˆ,>¤LéŽ6_²$Vt9ËÕ|Oº­ú2½Èt.IO(>ç ¼PÁ#8 ‰PágÒ´87,Íɘ½ƒ2ùI›T± lÊ÷ÖZ4ªí.ø{y%oÓ1.Ì ¥œ8”š+ ¿®XÖÕbµ|›¼Ã{v2¾¤ˆ§èP2.˜ëɱ¿uã¯Þ‚{ˆYø¤å»‡ ÂT7ôúºh„Ä»l¢çþÍÁV‹",Szò–FG°CbÓŒ³J¸kV‚úFG VûcUdš^sUMœÖà—[Ÿ‰ħø¤ñs~jT¸J5p##rÂ45MWÃD'U2¼*9ÄÙ§Û\-ä§Î¢8ÉJðK^¿x°:&ý£¥Š†Hj“ÜfBéEÖ‘ã¶«ÂDlMdÞ›œ{OÞì)k/ÁC/jF©ÍÊ'#9Õ'@´ì 6êÊ|‡?\ã>ˆW‚´\RÙGäÌ,b‹ê d°FßN·÷²™†Î¦eFbÝdt#­%a®JÍ)XÐk'K6t…¤Š£Êç±ú-Ðx^ˆsY £‰ˆl¾Ã^¶Ânª”5C m‚ôN¼ó%޼¶øº}èèôÿD §Z­2TÊ7>LO"€$eŸVŒÛsusjWO‘»ŽiT ð5g÷Ôg$>|’v'þ ãÂ3™n±à0¿P·-ï½Îã>´YE`'¦ßòw;½ø oE£C¿¶RC0gü{1„÷(ËÉâ¢hÏš’Ö ÅsÒ¨nKtùNðSŸƒ°7Tj . —´ihÌ >ˆ-?¸ÇÚ=!aëyÛoÞhæ®÷sÕ·åW[5& Y·y†jábïnYˆú‘8‘ËlŽnU•âŽýK.ð4Wx0Š$k'ÏRçtaôMZÜŸ¦Â·A£ëLœ¹+ Ú{ã=pÄ`?äøéÅË`4þ_嬥ª6€ïû*#˜¬} ‰#ê寗ŸŸ•¦5ƒ PeÄ^?^Öú3h§Ñ5ý›ËŽßüq¥bv lYQP]c¨§!Wåùó½ðÒš¸@8­wÑÙwÉ —?Ê[Hu~íõ§»Eh)š?s™3j<úë1¾Áó>Y*ßõ'žY³ Õ•ë(#¹¡áPõýŒKä: í6N’º£f~¿Éý¬{v ù@LX˜ïΖßnFC7ûðó1n¶}µˆH “Šù{/L³;ͰlùåÚAÊíªå,ÞIPÖa韸+£d5¾Â ›0«òðKLCü|ˆ½†N‹³•­šÔùþ:—Zºw~cãÝ¡Z F»4l­•h.§¦c¬÷¸6ãKP?ójÛôS"©A'^«©¥õ%0MfÑ×¼‘ e‡å /îo„¥³f¨}5K öÔWÀÉÁØÓUG—pðbaÀÝŒ\6 Ú˜¼lyVm žRgj%´| ¤¼V>Êä¾ÇÛ?¼µ;\pG튧¶ß<Æv“?ÉLi•Ü ™>ØÆB%ÑNÚÀt!%PRJ”þqÉÿùMÚPB‹ÄEë›>²ë¾ÇÝ’Ï•ñ–îP !ûÚ$¯)Ï迳ïM׸ÂPžÑ}ŠvŽäC¼ÜåeÈŸ&¶Ä´±ý*¼Û¿¤–]NåP­«ZLxDQR ö}Ó@†WÛl8¹fðæÙ÷‘k£Åð_¨4X.ãsáƒxm·ä&!F5¤L&³ZÐNÈGK€hû‹HÜ7ÂÚZ{¾_¿'úp¬ŠjnÆ/<ŽZšCS!®re³aÖàM4=¸ý³ŸŽ)¥€SiF°…‹ƒ³jªϨ¶È;°c/fÝ'|Yw{K¨!MØAô­§· >Bj¸JîÉv¶¬/ÖÉ[ÚB(**¥D|¤ytsf8¾Q‘s»=÷ÁW„¯ñ3‹c”ÝQô|? )c‘Ǧ_öÞ`­ö$ß.;+2²¼ïÚ©ƒf^h‰íËKwºC òüªgw-ÃÊ“+b;¯'Ïí53wÌûÐåÙ‚Pö•U*ùš¼¯mŸXÚYÙbëB@=ËůÌÎföÙxœ³o©ýýOà±=!O¢»éuHw>\}¥š ¥ åhR NO)a‰–Çøìx½ñ8궉F#ŽšÈ~¨Žls—ü~• ’‚Ï`Å›ÝZúõ|Û={Œär3ñ)¹1Ð*vWúbluP”bá³E=†Xí®Aì˜OI¤`”ÅBòƒÕ¾íïé--Ö ã× ÇÚŠñò¯‰ñá)G-˜²"B ýº‹¦Dí[ )zÔŽE¼¢>Ø`®C¯ô€™—(ÁÆ™ñÜq½ Êgª*Ì‘/÷qO|¤Ü}öh ˜Š<ÇR X–w{M‰ÅC—´)t±@F^u!â÷¾Ï2òYz€ãÆUØ.dRôa4eç\¥~‹ò¸ÿp~N Ú+„0à—‚޵…´ûPzY–DäÔTG¢X&€_U:rW­W$Ï–æ²Ò2˜dç®M%$¹YÄê°CÀJöÖØÂìéH5éøä1‘O§wT¶àÒ Š–é J uZón“ˆG ¦¥oy~€–±çÚÞÓ9. •ÉD4Õ“4œiEµ°LbUð£ú6ä*Äs)D'Ö÷™£¢ÆÜ¥å@ÐdBŠx¾ûAœâhFX#ý“ pN…"ƒ<ÎIÞ¹Ów4­­I-*M8™tµäòôªkÕ •Yâ̶»¤“ñ/dYèf™«Ng„¶ÏX(XC<üw×8º2¹­˜v?x_ýlsŽp1ôYYvtZž¿Šr•Ò½2™=‹S9E5Æ÷ŸÏ‚«O+¤QÐW;ç¹²ª°•ŠNŒF ¡°JwüvlÛèþçö€‚²v’Ÿ˜ JÉW ô³ltN¼<ŽfA:ñKrwtµŸ…Æó“\q°ÔÍ ŽÂSJ4Þt¤óvÈ™6yTHµ.§3TŒú ªj]Î>>­ÆM¸C›ãAÔïs[Ö2Ü›‚ð±óåæêŽ2w&R•ä6äxÅ/:=À¤¼½¤ªm€n—‡–{kZö‰{w?šd«ºêW±°,½½` Öà_¯2àêVcs½ê×)Gá}´ËXEÚÅÙšL©jÃ툥GWÁÇÒg§(·†#²šznóì rc ¥ç›F «X»Ç»nØí úžÎžRH³¡cw½¾,ÏòÝB¹ÕßQŒÞ•W\±ŽÍCI2¿BVæñI†B¬R昂¦càÀgÑJ&jÕýŸ ¯)k52ÞsP~͇è(Û¶,ÃkRÙòÚ<“ã‹yÊ*/@Ñhãq%*Âi= Z‰­¢šk}ÑX“at¨U‚.äÁI¤qÃLß&™J5’h&H½wƒ?±ùèßÞk¤ÆNú†0ð7ÈÅm?„[¬Â0ÆL¼LòP0'ͺ;áN¨ˆ÷w’þtN˜©À2ǦCÁÄT”ŠŸâ’Õ‰2’ÞÏ,h­…ˆ½}º6*, LÖPÝhסOÃñ–mí= XHæÍh‘#Á ¼\¥\3â L4êhõ>’2â÷ 1I˜/ W¢¸ðµ0)tS$>ô·„ ºkTõJßoµÓ’ÑPà_¢ãzèÒѵO›y5Dƒ«Òqý5ØááXCaoýÏU+Ÿ }¨H¹V%M7‚L÷bÿ_l]Ò0bHpƒµÐi*ö:Ç?ôV᡼Ö't 3ä#á©pà‹3e®Ÿƒ'WU–38•” {}@îktÑKnÚéɯ̖né³½žÔUdî©MúXê†4Ø"CÒ‹7ûE.tBÁE¿J) :úÁËÛ¹v,ò{;ÿZO½wûРÆ"íý„ëÖ)U>È˶T’4¤?ÌZšÄ)É¿­yźŠp¹Q~—¡Ve¥:å—·tÐÅáôÅ€fL] !ÓÍVÝeˆ¢sEc;Ma}ž?É©jôž$ôÄ e;Þ“„ñ Óö'J7úù׿Ö|HèтѱLòJÒÈråûC;ÏÝÊÕ[à›ÄµÊqRl?YOü•—1&@èÀˆ6§n=NÁÇß6»ºÊ5Üõ6JkDÈ— ƒP;$¤ôFuBõgfýtçHí.ˉAôœ#:GèÝeܦ—¢ýV‘',šH‰J} Øð TÈtúeœ7"‹{·Øfà³.²OåM0¡7u³(3äH¾t×—;XXàŠl1nü±7äñcÛÃÿyȽ×Á]KNx”¥Noè {W¶'(žb+§ü1ï(@2eÌÂÙ°³Õ¾g:Ju X°­h7ö½ é–ÿ…™ä˜¸÷jüš5),Ý1ǧj²¶D¤î³ru)B:éH“6ïmÔÕâ7{nh‘¶{§‚AeøàBSÚ¼kDcËñ×g±È+\L?#½­‚¤9V¨É`D™ÚJÍ-j{KÝÍ0«ü=¼{Æ÷¸B¨×Jó±Ñ˜€ªéV~oÝ"*† >Ãç-³‘÷éí` ).A\¡"øš³4ÍpòKC“²‹ÉØ3„hrÇ$2$\jc ØÀi°C ¤XŽOæ8iûÖ_5Åp!Ñ£îæRîG’WÙv‚)ð[ÌMÇì°ëß½M­Âg3à•¢|˜í³I5ˆ"®eõuþö¦ƒˆ’±L4u»Ç"q ö*n¤ü L ,I!J?K>BŠZµ—;IÕ‡ šIòm —ê½áJî¬Q•ÍË3¹sßÓo>xj®Ø”Û†. .RŒ%Smª2Ÿqż2šIDéu[À§ª¥a/6ð¯fãj%ùÕÜÔÉ=ÿþIkÚ[íÄh!mY*à ÇühXb*²±üTOˆg£iÇHP# uL,ô´“IÝk¤ªmýY»n~(DÝêŠß%B2Ù­Ížd@W™M‚Ö=$ù’°še‘.|ÈÔ>¹ )çWSj„<>ÛR$ògä®t]S/`ø‚Gƒks¿8Öàjη¢ I»?*¨kx…©ú.*ì-çP )NYf./%3Ò¨ ƑȢnl£D^3~À—b¶@âxç þ Rû"a)ºM(Q 㨂°W`Dp°„üyïÔ3“vÏÞã‹":<E³çûìÖY抇^n7«ËŒÖŒ¸¹›q_Þ]AZ[å(ž§;Ø-ÈeN1×›'º^òETGð¦Ä¾IGWÊAl¬»çIó§¯Ch¾½N'ñt‘ˆsõÊõ„þîƒWùFž*ÑåÑã¶R®Bä GeeÓ\€êõcøêÌR7øÆ¨KL¦¦J«x]> Üм4¨å׺] þõ};¨ú¸­åCÍpÌ›À6r%e~]üÔää“ýø95(× _—DůֻÁ/C_›P¹wKbÚ×Ðÿš°ǨÿIHå ö¤Î[¾Žeóí%Üð× r©_wW$U ª¢!ê)|ßÊS¤Š£ªÆßC; «ØÏ1\ý­óÖ™ðÕ”†~Ÿ=¹«×$MÉ$Y~§+i¦P’-¢^9óŠã9îc¤ŸXŽé¦GµÛ,}Å_>.ÚYÄxÀÜXëAIIø<ß±‹myi‰PŸ?»Ø¿ï(5Œfß0G*[ÿžóíôбe‚„þ®‡âàÄ¢§Rýj¯Ok÷2s% &Ík„ö+’Y<¬8Cþ—Â?=ê¶e1Ã[ÑI­ÄÑ@£ËÒcWs*xq’ÞeÛÖ«ìù•HôØ–Ò;ª‘ ¶_Á’$ðˉÛ+€PÜ­b.ÓÑd®ŽÏ€·ô¢Öáfî'NFè­º!™¨s¥g c x§l݃j÷øB•&IÕÂðË—^Ç‹÷UÌhü¦ÄZý‹{]ã: y—|ïx³#Gž£ãxr-)ÿ ÛÔQÂQ~² ¬ÃieÑòå”|ÖÏ—Ô`,1®µXœU? n)˜(ö,÷)³}jd«YTg>Ÿ­é™8…¨”pݰíùj$i•üÁͶ.iü÷ÒLÇHè^÷,†:9©úœó*>âó|®ZˆgîÌ$,E'–p„ Ÿ¥'°t/b·ke¸?à8 °ÞÍq¾Ë=ñŠ`ÌZ1óm7µvšÏÕü|OuF˜;¬¥-³\ªl=›õ墀Ýuý!§bI"œdñ!|¯N~ ÞElî“×þÆÈúÞɯÖ]XX˜rà°64{C,mc$)Pø ™{mžpÊ VY,QÜ…´FÙŠ™À˜¯‰fÂfì8·àð Hëæ'/Ë\¯í3)áWk$k+w_[޵„Q„9Í,òlÿ[$¤k&·¦´ôãìZžû*=gPÓ>^Èç›;¥v#S¼½«MûHò”ÀÉôu͹Ô3±æt‹2ŽÂo.iB×?ÑPoãˆwt5M ;…˜ú ]á/}[í¤¸@ÜBAÔÒ)°~lŒ¦¡ÇNÓ|pûCVÕs›jüX5Ò»ql“‹Î+`=`½*DLë W¹·‘:5~z¿—ŽÄåÅ|×óØ ¬ë2S6@Ÿ-Îç€ÚC÷KoZ@k³¶€y/V ñUKAðÌ¿ýšD@ŠºàÙT¤ ßW¤]K8°q7ÈŽhn¿üû‚S2]÷1Á9ꆑ¹¶JP¸Mìžo¶SQäl¿£É;W~—éSºæâ8ÇáÙf6úô3`,SHOy!,É’Þ–·Ú/uGÐ|ËÚ=±ç?•Ùë'Yâ\_9̇@Ƚ-š*I¼¸¯™¿ë·ÊZoñÒãGF»SD¨LpñÁÉb¢£]»ÃqJ3&‚–Gv/WùþW‰sõ`n‰²–?`]6†¼}mÓ!@$§æ#дöðý0~‰ÿô*Ýè¶¼œû¿OÏÆÄàÔ1åhù^Žá;¤ª(7j~ ËÁñ—.…²h³½S‘€x Þˆ8Äa‰"ÑHm–‚¿Ný2ÎM2˜jâ³i!…÷›ôYða¬­Àzžo¼¾MG÷Ëù®ý„˜0=æѯ“€±—]ñÏ•p0¯:€«÷ÒCÜŠÖ‰ï"‹ê¶øìÞš¸_TÁÔÞ/çZZÈdÒe½;@¿èa›Eú–¢—<‚ëýaezû_õå8{àmGÁ¹¢ÛN)ë¶XÎÞä‘ùô¾.ìS ð*¼gu¾w¥{ sN~=ôC~'¶©šÝ¼`Hòàœ”Ü_Ñšj·cv:ÿÙ•É 3ÀóŸ•À…0_Q¯rZ\ì!†€•†G@ÑÛ­Gàß½ ó„øù>vR ÜÂù:…Úmï,õ•âi– ƒÕÆBЙ8£lÞ‘MÒŒŸ]h4íYUÒ=¿z.ƦFnäwöiÊfÌu @Ùiàp·›ª±6(‰…U!Ôôõì=mN—v%¨ˆ=8yBð( “µoC•¬@$ô x²zùépk4€¢¥‘gWåôã8Bºþì[L”M•WÒUaöÆËineZ­€Í“mÙP\pjNo”çÉ^1© Á;†¥°€ñ7r-F’Qb/wW%øÖåËÜÈBgKçOX/È f(4iT‹æÄˆL³å ÊÃÕo†oYÊ·dzàÀY û‚!-+#ý¯éI±òîU|(£ÇÕÏkAfÛ}üCŒù“ÏÔ¼@KŽÝî13ÜÍx»`1Lºñ!T–L­^tµ‰ó0°D•w5„ž”¥*äúšçÏ,;]úpdWßvÁa2Þ¹Êu+g—ÉA‹³7{Fù”,Sÿ:Bôç7k\Š˜£-0öAûü;KsÇwÇûWvµ 2ëžÄÓ.é@„.Êß,"z¤õE#T«€; ݃t£ !e ·¼ÖÐH÷Fî2äs -çßðÊ 5 w¹¾)¸øë‡€aïi1UÌVÄêP Xa …îìºF³*`ìt #ðéZYÐN|AUˆ!>§PóÙ;{ö;¢koݲü^ suèš9î†õ9¬+>0 ‹YZrstpm2/src/0000755000176200001440000000000015105126152012266 5ustar liggesusersrstpm2/src/package_init.c0000644000176200001440000000645014706157711015070 0ustar liggesusers#include #include #include #include // for NULL #include /* FIXME: Check these declarations against the C/Fortran source code. */ /* .Call calls */ extern SEXP model_output(SEXP); extern SEXP test_cox_tvc2(SEXP); extern SEXP test_cox_tvc2_grad(SEXP); extern SEXP fitCureModel(SEXP,SEXP,SEXP,SEXP,SEXP,SEXP); extern SEXP aft_model_output(SEXP); extern SEXP _rstpm2_vunirootRcpp(SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP); extern SEXP _rstpm2_voptimizeRcpp(SEXP,SEXP,SEXP,SEXP); extern SEXP multistate_ddt(SEXP,SEXP,SEXP,SEXP); // extern SEXP runMarkovODE(SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP); // extern SEXP runExpM(SEXP,SEXP,SEXP); extern SEXP plugin_P_by(SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP); extern SEXP plugin_P_L_by(SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP); extern SEXP test_read_gsm(SEXP); extern SEXP _rstpm2_vdqagsRcpp(SEXP fSEXP, SEXP aSEXP, SEXP bSEXP, SEXP epsrelSEXP, SEXP epsabsSEXP, SEXP limitSEXP, SEXP nySEXP); extern SEXP _rstpm2_vdqagiRcpp(SEXP fSEXP, SEXP boundSEXP, SEXP infSEXP, SEXP epsrelSEXP, SEXP epsabsSEXP, SEXP limitSEXP, SEXP nySEXP); extern SEXP _rstpm2_vrdqk21Rcpp(SEXP fSEXP, SEXP lowerSEXP, SEXP upperSEXP, SEXP aSEXP, SEXP bSEXP); extern SEXP _rstpm2_vrdqk15Rcpp(SEXP fSEXP, SEXP bounSEXP, SEXP infSEXP, SEXP aSEXP, SEXP bSEXP); extern SEXP _rstpm2_test_vdqags(void); extern SEXP _rstpm2_test_vdqagi(void); /* .Fortran calls -- thanks to Gordon Smyth */ extern void F77_NAME(gausq2)(void *, void *, void *, void *, void *); extern void F77_NAME(laplace_pvf_e1)(void *, void *, void *, void *, void *, void *); static const R_CallMethodDef CallEntries[] = { {"model_output", (DL_FUNC) &model_output, 1}, {"test_cox_tvc2", (DL_FUNC) &test_cox_tvc2, 1}, {"test_cox_tvc2_grad", (DL_FUNC) &test_cox_tvc2_grad, 1}, {"fitCureModel", (DL_FUNC) &fitCureModel, 6}, {"aft_model_output", (DL_FUNC) &aft_model_output, 1}, {"_rstpm2_vunirootRcpp", (DL_FUNC) &_rstpm2_vunirootRcpp, 7}, {"_rstpm2_voptimizeRcpp", (DL_FUNC) &_rstpm2_voptimizeRcpp, 4}, {"multistate_ddt", (DL_FUNC) &multistate_ddt, 4}, // {"runMarkovODE", (DL_FUNC) &runMarkovODE, 9}, // {"runExpM", (DL_FUNC) &runExpM, 3}, {"plugin_P_by", (DL_FUNC) &plugin_P_by, 7}, {"plugin_P_L_by", (DL_FUNC) &plugin_P_L_by, 10}, {"test_read_gsm", (DL_FUNC) &test_read_gsm, 1}, {"_rstpm2_vdqagsRcpp", (DL_FUNC) &_rstpm2_vdqagsRcpp, 7}, {"_rstpm2_vdqagiRcpp", (DL_FUNC) &_rstpm2_vdqagiRcpp, 7}, {"_rstpm2_vrdqk21Rcpp", (DL_FUNC) &_rstpm2_vrdqk21Rcpp, 5}, {"_rstpm2_vrdqk15Rcpp", (DL_FUNC) &_rstpm2_vrdqk15Rcpp, 5}, {"_rstpm2_test_vdqags", (DL_FUNC) &_rstpm2_test_vdqags, 0}, {"_rstpm2_test_vdqagi", (DL_FUNC) &_rstpm2_test_vdqagi, 0}, {NULL, NULL, 0} }; static const R_FortranMethodDef FortranEntries[] = { {"gausq2", (DL_FUNC) &F77_NAME(gausq2), 5}, {"laplace_pvf_e1", (DL_FUNC) &F77_NAME(laplace_pvf_e1), 6}, {NULL, NULL, 0} }; void R_init_rstpm2(DllInfo *dll) { R_registerRoutines(dll, NULL, CallEntries, NULL, NULL); R_registerRoutines(dll, NULL, NULL, FortranEntries, NULL); R_useDynamicSymbols(dll, FALSE); } rstpm2/src/gsm.cpp0000644000176200001440000000476114363600352013574 0ustar liggesusers#include #include #include #include namespace rstpm2 { double gsm::link(double S) { return link_type==PH ? std::log(-std::log(S)) : -100.0; } double gsm::linkinv(double eta) { return link_type==PH ? std::exp(-std::exp(eta)) : 1.0e-10; } gsm::gsm() {} double gsm::eta(double y) { double eta = etap(index); for (std::vector::size_type i=0; iindex = index; target = (tentry==0.0 ? link(u) : link(u*linkinv(eta(ymin)))); double root = std::get<0>(R_zeroin2_functor_ptr(ymin, ymax, this, 1.0e-8, 100)); return log_time ? std::exp(root) : root; } gsm::gsm(Rcpp::List list) { try { using namespace Rcpp; std::string link_name = as(list("link_name")); tmin = as(list("tmin")); tmax = as(list("tmax")); double inflate = as(list("inflate")); tmin = tmin/inflate; tmax = tmax*inflate; etap = as(list("etap")); List lterms = as(list("terms")); for (int i=0; i(lterms(i)); gsm_term term; term.gamma = as(lterm("gamma")); arma::vec knots = as(lterm("knots")); arma::vec Boundary_knots = as(lterm("Boundary_knots")); int intercept = as(lterm("intercept")); arma::mat q_const = as(lterm("q_const")); int cure = as(lterm("cure")); term.ns1 = ns(Boundary_knots, knots, q_const, intercept, cure); term.x = as(lterm("x")); terms.push_back(term); } log_time = as(list("log_time")); target = 0.0; index = 0; if (link_name == "PH") link_type = PH; } catch(std::exception &ex) { forward_exception_to_r(ex); } catch(...) { ::Rf_error("c++ exception (unknown reason)"); } } gsm::gsm(SEXP args) : gsm(Rcpp::as(args)) { } RcppExport SEXP test_read_gsm(SEXP args) { Rcpp::RNGScope rngScope; gsm gsm1(args); return Rcpp::wrap(gsm1.rand()); } } rstpm2/src/RcppExports.cpp0000644000176200001440000001406714706157711015306 0ustar liggesusers// Generated by using Rcpp::compileAttributes() -> do not edit by hand // Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393 #include #include using namespace Rcpp; #ifdef RCPP_USE_GLOBAL_ROSTREAM Rcpp::Rostream& Rcpp::Rcout = Rcpp::Rcpp_cout_get(); Rcpp::Rostream& Rcpp::Rcerr = Rcpp::Rcpp_cerr_get(); #endif // vdqagsRcpp Rcpp::List vdqagsRcpp(const Rcpp::Function f, const arma::vec a, const arma::vec b, const double epsrel, const double epsabs, const int limit, const int ny); RcppExport SEXP _rstpm2_vdqagsRcpp(SEXP fSEXP, SEXP aSEXP, SEXP bSEXP, SEXP epsrelSEXP, SEXP epsabsSEXP, SEXP limitSEXP, SEXP nySEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< const Rcpp::Function >::type f(fSEXP); Rcpp::traits::input_parameter< const arma::vec >::type a(aSEXP); Rcpp::traits::input_parameter< const arma::vec >::type b(bSEXP); Rcpp::traits::input_parameter< const double >::type epsrel(epsrelSEXP); Rcpp::traits::input_parameter< const double >::type epsabs(epsabsSEXP); Rcpp::traits::input_parameter< const int >::type limit(limitSEXP); Rcpp::traits::input_parameter< const int >::type ny(nySEXP); rcpp_result_gen = Rcpp::wrap(vdqagsRcpp(f, a, b, epsrel, epsabs, limit, ny)); return rcpp_result_gen; END_RCPP } // vdqagiRcpp Rcpp::List vdqagiRcpp(const Rcpp::Function f, const arma::vec bound, const int inf, const double epsrel, const double epsabs, const int limit, const int ny); RcppExport SEXP _rstpm2_vdqagiRcpp(SEXP fSEXP, SEXP boundSEXP, SEXP infSEXP, SEXP epsrelSEXP, SEXP epsabsSEXP, SEXP limitSEXP, SEXP nySEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< const Rcpp::Function >::type f(fSEXP); Rcpp::traits::input_parameter< const arma::vec >::type bound(boundSEXP); Rcpp::traits::input_parameter< const int >::type inf(infSEXP); Rcpp::traits::input_parameter< const double >::type epsrel(epsrelSEXP); Rcpp::traits::input_parameter< const double >::type epsabs(epsabsSEXP); Rcpp::traits::input_parameter< const int >::type limit(limitSEXP); Rcpp::traits::input_parameter< const int >::type ny(nySEXP); rcpp_result_gen = Rcpp::wrap(vdqagiRcpp(f, bound, inf, epsrel, epsabs, limit, ny)); return rcpp_result_gen; END_RCPP } // vrdqk21Rcpp Rcpp::List vrdqk21Rcpp(const Rcpp::Function f, const arma::vec lower, const arma::vec upper, const double a, const double b); RcppExport SEXP _rstpm2_vrdqk21Rcpp(SEXP fSEXP, SEXP lowerSEXP, SEXP upperSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< const Rcpp::Function >::type f(fSEXP); Rcpp::traits::input_parameter< const arma::vec >::type lower(lowerSEXP); Rcpp::traits::input_parameter< const arma::vec >::type upper(upperSEXP); Rcpp::traits::input_parameter< const double >::type a(aSEXP); Rcpp::traits::input_parameter< const double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(vrdqk21Rcpp(f, lower, upper, a, b)); return rcpp_result_gen; END_RCPP } // vrdqk15Rcpp Rcpp::List vrdqk15Rcpp(const Rcpp::Function f, const arma::vec boun, const int inf, double a, double b); RcppExport SEXP _rstpm2_vrdqk15Rcpp(SEXP fSEXP, SEXP bounSEXP, SEXP infSEXP, SEXP aSEXP, SEXP bSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< const Rcpp::Function >::type f(fSEXP); Rcpp::traits::input_parameter< const arma::vec >::type boun(bounSEXP); Rcpp::traits::input_parameter< const int >::type inf(infSEXP); Rcpp::traits::input_parameter< double >::type a(aSEXP); Rcpp::traits::input_parameter< double >::type b(bSEXP); rcpp_result_gen = Rcpp::wrap(vrdqk15Rcpp(f, boun, inf, a, b)); return rcpp_result_gen; END_RCPP } // test_vdqags Rcpp::List test_vdqags(); RcppExport SEXP _rstpm2_test_vdqags() { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; rcpp_result_gen = Rcpp::wrap(test_vdqags()); return rcpp_result_gen; END_RCPP } // test_vdqagi Rcpp::List test_vdqagi(); RcppExport SEXP _rstpm2_test_vdqagi() { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; rcpp_result_gen = Rcpp::wrap(test_vdqagi()); return rcpp_result_gen; END_RCPP } // vunirootRcpp Rcpp::List vunirootRcpp(Rcpp::Function f, Rcpp::NumericVector lower, Rcpp::NumericVector upper, Rcpp::NumericVector fa, Rcpp::NumericVector fb, int numiter, double tol); RcppExport SEXP _rstpm2_vunirootRcpp(SEXP fSEXP, SEXP lowerSEXP, SEXP upperSEXP, SEXP faSEXP, SEXP fbSEXP, SEXP numiterSEXP, SEXP tolSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< Rcpp::Function >::type f(fSEXP); Rcpp::traits::input_parameter< Rcpp::NumericVector >::type lower(lowerSEXP); Rcpp::traits::input_parameter< Rcpp::NumericVector >::type upper(upperSEXP); Rcpp::traits::input_parameter< Rcpp::NumericVector >::type fa(faSEXP); Rcpp::traits::input_parameter< Rcpp::NumericVector >::type fb(fbSEXP); Rcpp::traits::input_parameter< int >::type numiter(numiterSEXP); Rcpp::traits::input_parameter< double >::type tol(tolSEXP); rcpp_result_gen = Rcpp::wrap(vunirootRcpp(f, lower, upper, fa, fb, numiter, tol)); return rcpp_result_gen; END_RCPP } // voptimizeRcpp Rcpp::NumericVector voptimizeRcpp(Rcpp::Function f, Rcpp::NumericVector ax, Rcpp::NumericVector bx, double tol); RcppExport SEXP _rstpm2_voptimizeRcpp(SEXP fSEXP, SEXP axSEXP, SEXP bxSEXP, SEXP tolSEXP) { BEGIN_RCPP Rcpp::RObject rcpp_result_gen; Rcpp::RNGScope rcpp_rngScope_gen; Rcpp::traits::input_parameter< Rcpp::Function >::type f(fSEXP); Rcpp::traits::input_parameter< Rcpp::NumericVector >::type ax(axSEXP); Rcpp::traits::input_parameter< Rcpp::NumericVector >::type bx(bxSEXP); Rcpp::traits::input_parameter< double >::type tol(tolSEXP); rcpp_result_gen = Rcpp::wrap(voptimizeRcpp(f, ax, bx, tol)); return rcpp_result_gen; END_RCPP } rstpm2/src/splines.cpp0000644000176200001440000001605014363600352014455 0ustar liggesusers#include namespace rstpm2 { // mat qr_q(const mat& X, double tol) { // Rcpp::NumericMatrix nmX = Rcpp::as(Rcpp::wrap(X)); // Rcpp::NumericMatrix nmQ = qr_q(nmX, tol); // return Rcpp::as(Rcpp::wrap(nmQ)); // } SplineBasis::SplineBasis(int order) : order(order) { ordm1 = order - 1; rdel = arma::vec(ordm1); ldel = arma::vec(ordm1); a = arma::vec(order); } SplineBasis::SplineBasis(arma::vec knots, int order) : order(order), knots(knots) { ordm1 = order - 1; nknots = knots.size(); ncoef = nknots - order; rdel = arma::vec(ordm1); ldel = arma::vec(ordm1); a = arma::vec(order); } int SplineBasis::set_cursor(double x) { int i; /* don't assume x's are sorted */ curs = -1; /* Wall */ boundary = 0; for (i = 0; i < nknots; i++) { if (knots(i) >= x) curs = i; if (knots(i) > x) break; } if (curs > nknots - order) { int lastLegit = nknots - order; if (x == knots(lastLegit)) { boundary = 1; curs = lastLegit; } } return curs; } void SplineBasis::diff_table(double x, int ndiff) { int i; for (i = 0; i < ndiff; i++) { rdel(i) = knots(curs + i) - x; ldel(i) = x - knots(curs - (i + 1)); } } double SplineBasis::slow_evaluate(double x, int nder) { int ti = curs, lpt, apt, rpt, inner, outer = ordm1; if (boundary && nder == ordm1) { /* value is arbitrary */ return double(0); } while(nder--) { // FIXME: divides by zero for(inner = outer, apt = 0, lpt = ti - outer; inner--; apt++, lpt++) a(apt) = double(outer) * (a(apt + 1) - a(apt))/(knots(lpt + outer) - knots(lpt)); outer--; } diff_table(x, outer); while(outer--) for(apt = 0, lpt = outer, rpt = 0, inner = outer + 1; inner--; lpt--, rpt++, apt++) // FIXME: divides by zero a(apt) = (a(apt + 1) * ldel(lpt) + a(apt) * rdel(rpt))/(rdel(rpt) + ldel(lpt)); return a(0); } /* fast evaluation of basis functions */ arma::vec SplineBasis::basis_funcs(double x) { arma::vec b(order); diff_table(x, ordm1); b(0) = double(1); for (size_t j = 1; j <= (size_t)ordm1; j++) { double saved = double(0); for (size_t r = 0; r < j; r++) { // do not divide by zero double den = rdel(r) + ldel(j - 1 - r); if(den != double(0)) { double term = b(r)/den; b(r) = saved + rdel(r) * term; saved = ldel(j - 1 - r) * term; } else { if(r != double(0) || rdel(r) != double(0)) b(r) = saved; saved = double(0); } } b(j) = saved; } return b; } arma:: vec SplineBasis::eval(double x, int ders) { arma::vec val(ncoef); val = arma::zeros(ncoef); set_cursor(x); int io = curs - order; if (io < 0 || io > nknots) { for (size_t j = 0; j < (size_t)order; j++) { val(j+io) = double(0); // R_NaN; } } else if (ders > 0) { /* slow method for derivatives */ for(size_t i = 0; i < (size_t)order; i++) { for(size_t j = 0; j < (size_t)order; j++) a(j) = double(0); a(i) = double(1); val(i+io) = slow_evaluate(x, ders); } } else { /* fast method for value */ arma::vec valtmp = basis_funcs(x); for (size_t i=0; inknots = interior_knots.size()+8; this->ncoef = this->nknots - this->order; this->knots = arma::vec(this->nknots); for(size_t i=0; i<4;i++) { this->knots(i)=boundary_knots(0); this->knots(this->nknots-i-1)=boundary_knots(1); } if (interior_knots.size() > 0) for(size_t i=0; iknots(i+4)=interior_knots(i); } arma::vec bs::eval(double x, int ders) { arma::vec v; if (xboundary_knots(1)) { double k_pivot = double(0.75)*boundary_knots(1)+double(0.25)*interior_knots(interior_knots.size()-1); double delta = x - k_pivot; v = bs::eval(k_pivot,0) + bs::eval(k_pivot,1)*delta + bs::eval(k_pivot,2)*delta*delta/2. + bs::eval(k_pivot,3)*delta*delta*delta/6.; } else { v = SplineBasis::eval(x, ders).subvec(1-intercept,df-intercept); } return v; } arma::mat bs::basis(arma::vec x, int ders) { arma::mat m(x.size(), df); for (size_t i=0; iboundary_knots(0)) { if (der==0) return tl0 + (x - this->boundary_knots(0))*tl1; else if (der==1) return tl1; else return tl1*double(0); } else if (x > this->boundary_knots(1)) { if (der==0) return tr0 + (x - this->boundary_knots(1))*tr1; else if (der==1) return tr1; else return tr1*double(0); } else return q_matrix * bs::eval(x,der); } arma::mat ns::basis(arma::vec x, int ders) { arma::mat m(x.size(), this->df-2-cure); for (size_t i=0; i #include "c_optim.h" namespace rstpm2 { using namespace Rcpp; using namespace arma; // assume right censored values in ascending order of time RcppExport SEXP test_cox_tvc2(SEXP args) { List largs = as(args); vec time = as(largs["time"]); // length n vec event = as(largs["event"]); // length n mat X = as(largs["X"]); // design matrix, n*c vec beta = as(largs["beta"]); // length c+1 int k = as(largs["k"]); // column to use for tvc int n = time.size(); int c = X.n_cols; double llike = 0.0, lsum; vec eta; vec eta0 = X * beta(span(0,c-1)); for (int i=0; i(args); vec time = as(largs["time"]); // length n vec event = as(largs["event"]); // length n mat X = as(largs["X"]); // design matrix, n*c vec beta = as(largs["beta"]); // length c+1 int k = as(largs["k"]); // column to use for tvc int n = time.size(); int c = X.n_cols; double logHk, lsum; std::vector H, etimes; vec eta; vec eta0 = X * beta(span(0,c-1)); for (int i=0; i(args); // vec time = as(largs["time"]); // length n // vec event = as(largs["event"]); // length n // mat X = as(largs["X"]); // design matrix, n*c // vec x0 = as(largs["x0"]); // design row for specific covariate pattern, length c // vec beta = as(largs["beta"]); // length c+1 // int k = as(largs["k"]); // column to use for tvc // int n = time.size(); // int c = X.n_cols; // double logHk, lsum; // std::vector H, etimes; // vec eta; // vec eta1 = X * beta(span(0,c-1)); // double eta0; // for (int i=0; i(args); vec time = as(largs["time"]); // length n vec event = as(largs["event"]); // length n mat X = as(largs["X"]); // one covariate, length n vec beta = as(largs["beta"]); // length 2 int k = as(largs["k"]); // column to use for tvc int n = time.size(); int c = X.n_cols; vec grad(beta.size(),fill::zeros); vec lsum(beta.size(),fill::zeros); vec eta0 = X * beta(span(0,c-1)); vec risk; mat Xrisk; for (int i=0; in; ++i) { if (data->event(i) == 1) { eta = beta[0]*data->x(span(i,data->n-1)) + beta[1]*log(data->time(i)) * data->x(span(i,data->n-1)); llike += eta(0) - log(sum(exp(eta))); } } return -llike; } void test_cox_tvc3_negll_gr(int ncoef, double * beta, double * gr, void * e) { Tvc * data = (Tvc *) e; vec risk, subx; gr[0] = gr[1] = 0.0; for (int i=0; in; ++i) { if (data->event(i) == 1) { subx = data->x(span(i,data->n-1)); risk = exp(beta[0]*subx + beta[1]*log(data->time(i)) * subx); gr[0] -= data->x(i) - sum(subx % risk)/sum(risk); gr[1] -= data->x(i)*log(data->time(i)) - sum(log(data->time(i)) * subx % risk)/sum(risk); } } } RcppExport SEXP test_cox_tvc3(SEXP args) { List largs = as(args); vec time = as(largs["time"]); // length n vec event = as(largs["event"]); // length n vec x = as(largs["x"]); // one covariate, length n NumericVector beta = clone(as(largs["beta"])); // length 2 int n = time.size(); Tvc data = {n, time, event, x, beta}; BFGS bfgs; bfgs.optim(test_cox_tvc3_negll,test_cox_tvc3_negll_gr,beta, (void *) &data); return wrap(List::create(_("coef")=bfgs.coef, _("negll")=bfgs.Fmin, _("hessian")=bfgs.hessian)); } } // namespace rstpm2/src/c_optim.cpp0000644000176200001440000004265414706165735014457 0ustar liggesusers#include "c_optim.h" #include #include #include /* DBL_EPSILON */ // #include "uncmin.cpp" namespace rstpm2 { using namespace Rcpp; double min(double a, double b) { return a < b ? a : b; } double max(double a, double b) { return a < b ? b : a; } double bound(double x, double lower, double upper) { return x < lower ? lower : (x > upper ? upper : x); } // void nmmin(int n, double *Bvec, double *X, double *Fmin, optimfn fminfn, // int *fail, double abstol, double intol, void *ex, // double alpha, double bet, double gamm, int trace, // int *fncount, int maxit) NelderMead::NelderMead(int trace, int maxit, double abstol, double reltol, double alpha, double beta, double gamma, double epshess, bool hessianp) : trace(trace), maxit(maxit), abstol(abstol), reltol(reltol), alpha(alpha), beta(beta), gamma(gamma), epshess(epshess), hessianp(hessianp) { } void NelderMead::optim(optimfn fn, NumericVector init, void * ex) { n = init.size(); coef = clone(init); nmmin(n, &init[0], &coef[0], &Fmin, fn, &fail, abstol, reltol, ex, alpha, beta, gamma, trace, &fncount, maxit); if (hessianp) hessian = calc_hessian(fn, ex); } NumericMatrix NelderMead::calc_hessian(optimfn fn, void * ex) { int n = coef.size(); NumericMatrix hess(n,n); double tmpi,tmpj,f1,f0,fm1,hi,hj,fij,fimj,fmij,fmimj; f0 = fn(n,&coef[0],ex); for(int i=0; i mask(n,1); vmmin(n, &init[0], &Fmin, fn, gr, maxit, trace, &mask[0], abstol, reltol, report, ex, &fncount, &grcount, &fail); coef = clone(init); if (hessianp) hessian = calc_hessian(gr, ex); } void BFGS::optim(int n, optimfn fn, optimgr gr, double *initptr, void * ex) { std::vector mask(n,1); vmmin(n, initptr, &Fmin, fn, gr, maxit, trace, &mask[0], abstol, reltol, report, ex, &fncount, &grcount, &fail); coef = NumericVector(n); for (int i=0; i typsize(n,1.0), gpls(n,0.0), a(n*n,0.0), wrk(n*8,0.0); double norm, fpls; NumericVector xpls(n); // stepmax calculations if (stepmx == -1.0) { norm = 0.0; for (int i=0; i typsize(n,1.0), gpls(n,0.0), a(n*n,0.0), wrk(n*8,0.0); double norm, fpls; NumericVector xpls(n); // stepmax calculations if (stepmx == -1.0) { norm = 0.0; for (int i=0; i= 2) msg = 17; } double Brent_fmin(double ax, double bx, double (*f)(double, void *), void *info, double tol) { /* c is the squared inverse of the golden ratio */ const double c = (3. - sqrt(5.)) * .5; /* Local variables */ double a, b, d, e, p, q, r, u, v, w, x; double t2, fu, fv, fw, fx, xm, eps, tol1, tol3; /* eps is approximately the square root of the relative machine precision. */ eps = DBL_EPSILON; tol1 = eps + 1.;/* the smallest 1.000... > 1 */ eps = sqrt(eps); a = ax; b = bx; v = a + c * (b - a); w = v; x = v; d = 0.;/* -Wall */ e = 0.; fx = (*f)(x, info); fv = fx; fw = fx; tol3 = tol / 3.; /* main loop starts here ----------------------------------- */ for(;;) { xm = (a + b) * .5; tol1 = eps * fabs(x) + tol3; t2 = tol1 * 2.; /* check stopping criterion */ if (fabs(x - xm) <= t2 - (b - a) * .5) break; p = 0.; q = 0.; r = 0.; if (fabs(e) > tol1) { /* fit parabola */ r = (x - w) * (fx - fv); q = (x - v) * (fx - fw); p = (x - v) * q - (x - w) * r; q = (q - r) * 2.; if (q > 0.) p = -p; else q = -q; r = e; e = d; } if (fabs(p) >= fabs(q * .5 * r) || p <= q * (a - x) || p >= q * (b - x)) { /* a golden-section step */ if (x < xm) e = b - x; else e = a - x; d = c * e; } else { /* a parabolic-interpolation step */ d = p / q; u = x + d; /* f must not be evaluated too close to ax or bx */ if (u - a < t2 || b - u < t2) { d = tol1; if (x >= xm) d = -d; } } /* f must not be evaluated too close to x */ if (fabs(d) >= tol1) u = x + d; else if (d > 0.) u = x + tol1; else u = x - tol1; fu = (*f)(u, info); /* update a, b, v, w, and x */ if (fu <= fx) { if (u < x) b = x; else a = x; v = w; w = x; x = u; fv = fw; fw = fx; fx = fu; } else { if (u < x) a = u; else b = u; if (fu <= fw || w == x) { v = w; fv = fw; w = u; fw = fu; } else if (fu <= fv || v == x || v == w) { v = u; fv = fu; } } } /* end of main loop */ return x; } double R_zeroin2( /* An estimate of the root */ double ax, /* Left border | of the range */ double bx, /* Right border| the root is seeked*/ double fa, double fb, /* f(a), f(b) */ double (*f)(double x, void *info), /* Function under investigation */ void *info, /* Add'l info passed on to f */ double *Tol, /* Acceptable tolerance */ int *Maxit) /* Max # of iterations */ { double a,b,c, fc; /* Abscissae, descr. see above, f(c) */ double tol; int maxit; a = ax; b = bx; c = a; fc = fa; maxit = *Maxit + 1; tol = * Tol; /* First test if we have found a root at an endpoint */ if(fa == 0.0) { *Tol = 0.0; *Maxit = 0; return a; } if(fb == 0.0) { *Tol = 0.0; *Maxit = 0; return b; } while(maxit--) /* Main iteration loop */ { double prev_step = b-a; /* Distance from the last but one to the last approximation */ double tol_act; /* Actual tolerance */ double p; /* Interpolation step is calcu- */ double q; /* lated in the form p/q; divi- * sion operations is delayed * until the last moment */ double new_step; /* Step at this iteration */ if( fabs(fc) < fabs(fb) ) { /* Swap data for b to be the */ a = b; b = c; c = a; /* best approximation */ fa=fb; fb=fc; fc=fa; } tol_act = 2*DBL_EPSILON*fabs(b) + tol/2; new_step = (c-b)/2; if( fabs(new_step) <= tol_act || fb == (double)0 ) { *Maxit -= maxit; *Tol = fabs(c-b); return b; /* Acceptable approx. is found */ } /* Decide if the interpolation can be tried */ if( fabs(prev_step) >= tol_act /* If prev_step was large enough*/ && fabs(fa) > fabs(fb) ) { /* and was in true direction, * Interpolation may be tried */ double t1,cb,t2; cb = c-b; if( a==c ) { /* If we have only two distinct */ /* points linear interpolation */ t1 = fb/fa; /* can only be applied */ p = cb*t1; q = 1.0 - t1; } else { /* Quadric inverse interpolation*/ q = fa/fc; t1 = fb/fc; t2 = fb/fa; p = t2 * ( cb*q*(q-t1) - (b-a)*(t1-1.0) ); q = (q-1.0) * (t1-1.0) * (t2-1.0); } if( p>(double)0 ) /* p was calculated with the */ q = -q; /* opposite sign; make p positive */ else /* and assign possible minus to */ p = -p; /* q */ if( p < (0.75*cb*q-fabs(tol_act*q)/2) /* If b+p/q falls in [b,c]*/ && p < fabs(prev_step*q/2) ) /* and isn't too large */ new_step = p/q; /* it is accepted * If p/q is too large then the * bisection procedure can * reduce [b,c] range to more * extent */ } if( fabs(new_step) < tol_act) { /* Adjust the step to be not less*/ if( new_step > (double)0 ) /* than tolerance */ new_step = tol_act; else new_step = -tol_act; } a = b; fa = fb; /* Save the previous approx. */ b += new_step; fb = (*f)(b, info); /* Do step to a new approxim. */ if( (fb > 0 && fc > 0) || (fb < 0 && fc < 0) ) { /* Adjust c for it to have a sign opposite to that of b */ c = a; fc = fa; } } /* failed! */ *Tol = fabs(c-b); *Maxit = -1; return b; } void BFGSx::optim(Rcpp::NumericVector init) { optim(as(wrap(init))); } void BFGSx::optim(arma::vec init) { n = init.size(); std::vector mask(n,1); vmmin(n, &init[0], &Fmin, &arma_adapt_objective, &arma_adapt_gradient, maxit, trace, &mask[0], abstol, reltol, report, (void *) this, &fncount, &grcount, &fail); coef = init; if (hessianp) hessian = calc_hessian(); } double adapt_R(int n, double * beta, void * par) { ConstrBFGSx * model = (ConstrBFGSx *) par; arma::vec x(&beta[0],n); return model->R(x); } void adapt_dR(int n, double * beta, double * grad, void * par) { ConstrBFGSx * model = (ConstrBFGSx *) par; arma::vec x(&beta[0],n); arma::vec vgrad = model->dR(x); for (int i=0; i mask(n,1); if (trace > 0) { Rprintf("optim_inner:"); Rprint(init); } vmmin(n, &cinit[0], &Fmin, &adapt_R, &adapt_dR, maxit, trace, &mask[0], abstol, reltol, report, (void *) this, &fncount, &grcount, &fail); coef = cinit; } double ConstrBFGSx::R(arma::vec theta) { using namespace arma; using namespace Rcpp; vec ui_theta = ui*theta; vec gi = ui_theta - ci; if (min(gi)<0.0) return R_NaN; vec gi_old = ui * theta_old - ci; double bar = sum(gi_old % log(gi) - ui_theta); if (Rcpp::traits::is_infinite(bar)) bar = R_NegInf; double out = objective(theta) - mu*bar; // if (trace>0) { // Rprintf("theta: "); Rprint_(theta); // Rprintf("R: %f\n", out); // } return out; } arma::vec ConstrBFGSx::dR(arma::vec theta) { using namespace arma; using namespace Rcpp; vec ui_theta = ui*theta; vec gi = ui_theta - ci; vec gi_old = ui * theta_old - ci; vec dbar = sum(rmult(ui, gi_old/gi) - ui, 0).t(); return gradient(theta) - mu*dbar; } void ConstrBFGSx::constr_optim(Rcpp::NumericVector theta, Rcpp::NumericMatrix ui, Rcpp::NumericVector ci, double mu, int outer_iterations, double outer_eps) { constr_optim(as(wrap(theta)), as(wrap(ui)), as(wrap(ci)), mu, outer_iterations, outer_eps); } void ConstrBFGSx::constr_optim(arma::vec theta, arma::mat ui, arma::vec ci, double mu, int outer_iterations, double outer_eps) { using namespace arma; double obj_old = 0.0; int i; this->ui = ui; this->ci = ci; this->mu = mu; bool hessianp_old = this->hessianp; this->hessianp = false; if (min(ui * theta) <= 0.0) Rf_error("initial value is not in the interior of the feasible region"); double obj = objective(theta); this->theta_old = theta; double r = R(theta); tot_counts = 0; int s_mu = mu<0.0 ? -1 : 1; for (i=0; itheta_old = theta; optim_inner(theta); // originally object a; we now update this->coef r = R(this->coef); if (!Rcpp::traits::is_infinite(r) && !Rcpp::traits::is_infinite(r_old) && std::abs(r - r_old) < (0.001 + std::abs(r))*outer_eps) break; theta = this->coef; tot_counts += this->fncount; obj = objective(theta); if (s_mu*obj > s_mu*obj_old) break; } if (i == outer_iterations-1) { convergence = 7; message = "Barrier algorithm ran out of iterations and did not converge"; } if (mu > 0 && obj > obj_old) { convergence = 11; message = "Objective function increased at outer iteration " + std::to_string(i); } if (mu < 0 && obj < obj_old) { convergence = 11; message = "Objective function decreased at outer iteration " + std::to_string(i); } outer_iterations = i; barrier_value = R(coef); Fmin = objective(coef); barrier_value -= Fmin; hessianp = hessianp_old; // reset it to the previous value } // R CMD INSTALL ~/src/R/microsimulation // R -q -e "require(microsimulation); .Call('test_nmmin',1:2,PACKAGE='microsimulation')" // .Call("optim_stpm2",init,X,XD,rep(bhazard,nrow(X)),wt,ifelse(event,1,0),package="rstpm2") } // namespace rstpm2 rstpm2/src/utils.cpp0000644000176200001440000000154314706157711014150 0ustar liggesusers#include #include namespace rstpm2 { // Complete Q matrix from a QR decomposition Rcpp::NumericMatrix qr_q(const Rcpp::NumericMatrix& X, double tol) { // Initialize member data and allocate heap memory int n=X.rows(), p=X.cols(), rank=0; Rcpp::NumericMatrix qr(X), y(n,n), q(n,n); int* pivot=(int*)R_alloc(p,sizeof(int)); double* tau=(double*)R_alloc(p,sizeof(double)); double* work=(double*)R_alloc(p*2,sizeof(double)); for(int i=0;i nu=rho*m subroutine laplace_pvf_E1(len,deriv,c_vector,rho,m,L) integer,intent(in) :: len double precision,intent(in) :: deriv(len), c_vector(len), rho, m double precision,intent(inout) :: L(len) integer :: i double precision :: c, L0, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10,& &L11, L12, L13, L14, L15, L16, L17, L18, L19, L20,& &L21, L22, L23, L24, L25, L26, L27, L28, L29, L30,& &L31, L32, L33, L34 ! &L35, L36, L37, L38, L39, L40 ! &L41, L42, L43, L44, L45, L46, L47, L48, L49, L50 do i=1, len c = c_vector(i) L0 = exp(-rho*(1-((m*rho)/(m*rho+c))**m)) if (deriv(i) .eq. 0) then L(i) = L0 cycle end if ! (while (re-search-forward "L[(]\\([0-9]*\\)[)]" nil t) (replace-match (concat "L" (match-string 1)))) L1 = -L0*(m*rho)**(m+1)*(m*rho+c)**((-m)-1) if (deriv(i) .eq. 1) then L(i) = L1 cycle end if L2 = (-L1*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-L0*((-m)-1)*(m*rh& &o)**(m+1)*(m*rho+c)**((-m)-2) if (deriv(i) .eq. 2) then L(i) = L2 cycle end if L3 = (-L2*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-2*L1*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-2)-L0*((-m)-2)*((-m)-1)*(m*rho)**(m+& &1)*(m*rho+c)**((-m)-3) if (deriv(i) .eq. 3) then L(i) = L3 cycle end if L4 = (-L3*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-3*L2*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-2)-3*L1*((-m)-2)*((-m)-1)*(m*rho)**(& &m+1)*(m*rho+c)**((-m)-3)-L0*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& &m+1)*(m*rho+c)**((-m)-4) if (deriv(i) .eq. 4) then L(i) = L4 cycle end if L5 = (-L4*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-4*L3*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-2)-6*L2*((-m)-2)*((-m)-1)*(m*rho)**(& &m+1)*(m*rho+c)**((-m)-3)-4*L1*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& &*(m+1)*(m*rho+c)**((-m)-4)-L0*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-5) if (deriv(i) .eq. 5) then L(i) = L5 cycle end if L6 = (-L5*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-5*L4*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-2)-10*L3*((-m)-2)*((-m)-1)*(m*rho)**& &(m+1)*(m*rho+c)**((-m)-3)-10*L2*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& &)**(m+1)*(m*rho+c)**((-m)-4)-5*L1*((-m)-4)*((-m)-3)*((-m)-2)*((-m& &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-L0*((-m)-5)*((-m)-4)*((-m& &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-6) if (deriv(i) .eq. 6) then L(i) = L6 cycle end if L7 = (-L6*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-6*L5*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-2)-15*L4*((-m)-2)*((-m)-1)*(m*rho)**& &(m+1)*(m*rho+c)**((-m)-3)-20*L3*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& &)**(m+1)*(m*rho+c)**((-m)-4)-15*L2*((-m)-4)*((-m)-3)*((-m)-2)*((-& &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-6*L1*((-m)-5)*((-m)-4)*(& &(-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-6)-L0*(& &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& &1)*(m*rho+c)**((-m)-7) if (deriv(i) .eq. 7) then L(i) = L7 cycle end if L8 = (-L7*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-7*L6*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-2)-21*L5*((-m)-2)*((-m)-1)*(m*rho)**& &(m+1)*(m*rho+c)**((-m)-3)-35*L4*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& &)**(m+1)*(m*rho+c)**((-m)-4)-35*L3*((-m)-4)*((-m)-3)*((-m)-2)*((-& &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-21*L2*((-m)-5)*((-m)-4)*& &((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-6)-7*L& &1*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**& &(m+1)*(m*rho+c)**((-m)-7)-L0*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*& &((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-8) if (deriv(i) .eq. 8) then L(i) = L8 cycle end if L9 = (-L8*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-8*L7*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-2)-28*L6*((-m)-2)*((-m)-1)*(m*rho)**& &(m+1)*(m*rho+c)**((-m)-3)-56*L5*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& &)**(m+1)*(m*rho+c)**((-m)-4)-70*L4*((-m)-4)*((-m)-3)*((-m)-2)*((-& &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-56*L3*((-m)-5)*((-m)-4)*& &((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-6)-28*& &L2*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& &*(m+1)*(m*rho+c)**((-m)-7)-8*L1*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-8)-& &L0*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)& &*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-9) if (deriv(i) .eq. 9) then L(i) = L9 cycle end if L10 = (-L9*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-9*L8*((-m)-1)*(m& &*rho)**(m+1)*(m*rho+c)**((-m)-2)-36*L7*((-m)-2)*((-m)-1)*(m*rho)*& &*(m+1)*(m*rho+c)**((-m)-3)-84*L6*((-m)-3)*((-m)-2)*((-m)-1)*(m*rh& &o)**(m+1)*(m*rho+c)**((-m)-4)-126*L5*((-m)-4)*((-m)-3)*((-m)-2)*(& &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-126*L4*((-m)-5)*((-m)-& &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-6)-& &84*L3*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rh& &o)**(m+1)*(m*rho+c)**((-m)-7)-36*L2*((-m)-7)*((-m)-6)*((-m)-5)*((& &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& &-8)-9*L1*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-9)-L0*((-m)-9)*((& &-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m& &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-10) if (deriv(i) .eq. 10) then L(i) = L10 cycle end if L11 = (-L10*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-10*L9*((-m)-1)*& &(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-45*L8*((-m)-2)*((-m)-1)*(m*rho& &)**(m+1)*(m*rho+c)**((-m)-3)-120*L7*((-m)-3)*((-m)-2)*((-m)-1)*(m& &*rho)**(m+1)*(m*rho+c)**((-m)-4)-210*L6*((-m)-4)*((-m)-3)*((-m)-2& &)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-252*L5*((-m)-5)*((-& &m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-& &6)-210*L4*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(& &m*rho)**(m+1)*(m*rho+c)**((-m)-7)-120*L3*((-m)-7)*((-m)-6)*((-m)-& &5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**& &((-m)-8)-45*L2*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)& &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-9)-10*L1*((& &-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m& &)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-10)-L0*((-m)-10)*((& &-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m& &)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-11) if (deriv(i) .eq. 11) then L(i) = L11 cycle end if L12 = (-L11*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-11*L10*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-55*L9*((-m)-2)*((-m)-1)*(m*rh& &o)**(m+1)*(m*rho+c)**((-m)-3)-165*L8*((-m)-3)*((-m)-2)*((-m)-1)*(& &m*rho)**(m+1)*(m*rho+c)**((-m)-4)-330*L7*((-m)-4)*((-m)-3)*((-m)-& &2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-462*L6*((-m)-5)*((& &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& &-6)-462*L5*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*& &(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-330*L4*((-m)-7)*((-m)-6)*((-m)& &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& &*((-m)-8)-165*L3*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-& &m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-9)-55*L2*& &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-10)-11*L1*((-m)-1& &0)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)& &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-11)-L0*((-m)-1& &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12) if (deriv(i) .eq. 12) then L(i) = L12 cycle end if L13 = (-L12*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-12*L11*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-66*L10*((-m)-2)*((-m)-1)*(m*r& &ho)**(m+1)*(m*rho+c)**((-m)-3)-220*L9*((-m)-3)*((-m)-2)*((-m)-1)*& &(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-495*L8*((-m)-4)*((-m)-3)*((-m)& &-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-792*L7*((-m)-5)*(& &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& &)-6)-924*L6*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-792*L5*((-m)-7)*((-m)-6)*((-m& &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& &**((-m)-8)-495*L4*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((& &-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-9)-220*L& &3*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*& &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-10)-66*L2*((-m)& &-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-& &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-11)-12*L1*((& &-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((& &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& &-12)-L0*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*& &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& &+1)*(m*rho+c)**((-m)-13) if (deriv(i) .eq. 13) then L(i) = L13 cycle end if L14 = (-L13*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-13*L12*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-78*L11*((-m)-2)*((-m)-1)*(m*r& &ho)**(m+1)*(m*rho+c)**((-m)-3)-286*L10*((-m)-3)*((-m)-2)*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-715*L9*((-m)-4)*((-m)-3)*((-m& &)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-1287*L8*((-m)-5)& &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& &-m)-6)-1716*L7*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)& &-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-1716*L6*((-m)-7)*((-m)-6)*& &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& &o+c)**((-m)-8)-1287*L5*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-9)-& &715*L4*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-10)-286*L3& &*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*& &((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-11)-78& &*L2*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& &*((-m)-12)-13*L1*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*& &((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m& &*rho)**(m+1)*(m*rho+c)**((-m)-13)-L0*((-m)-13)*((-m)-12)*((-m)-11& &)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)& &*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14) if (deriv(i) .eq. 14) then L(i) = L14 cycle end if L15 = (-L14*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-14*L13*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-91*L12*((-m)-2)*((-m)-1)*(m*r& &ho)**(m+1)*(m*rho+c)**((-m)-3)-364*L11*((-m)-3)*((-m)-2)*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-1001*L10*((-m)-4)*((-m)-3)*((& &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-2002*L9*((-m)-& &5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**& &((-m)-6)-3003*L8*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-& &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-3432*L7*((-m)-7)*((-m)-6& &)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& &rho+c)**((-m)-8)-3003*L6*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m& &)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-9& &)-2002*L5*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*(& &(-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-10)-100& &1*L4*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)& &-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-11& &)-364*L3*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& &o+c)**((-m)-12)-91*L2*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m& &)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-13)-14*L1*((-m)-13)*((-m)-12)*& &((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*& &((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-& &m)-14)-L0*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)& &-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2& &)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15) if (deriv(i) .eq. 15) then L(i) = L15 cycle end if L16 = (-L15*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-15*L14*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-105*L13*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-455*L12*((-m)-3)*((-m)-2)*((-m)-1& &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-1365*L11*((-m)-4)*((-m)-3)*(& &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-3003*L10*((-m& &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& &**((-m)-6)-5005*L9*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-6435*L8*((-m)-7)*((-m)& &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& &m*rho+c)**((-m)-8)-6435*L7*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((& &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& &-9)-5005*L6*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)& &*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-10)-3& &003*L5*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-& &m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-& &11)-1365*L4*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& &*rho+c)**((-m)-12)-455*L3*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*& &((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((& &-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-13)-105*L2*((-m)-13)*((-m)& &-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m& &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& &**((-m)-14)-15*L1*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-1& &0)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)& &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-L0*((-m)-1& &5)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-& &m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)& &-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16) if (deriv(i) .eq. 16) then L(i) = L16 cycle end if L17 = (-L16*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-16*L15*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-120*L14*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-560*L13*((-m)-3)*((-m)-2)*((-m)-1& &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-1820*L12*((-m)-4)*((-m)-3)*(& &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-4368*L11*((-m& &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& &**((-m)-6)-8008*L10*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*& &((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-11440*L9*((-m)-7)*((-& &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& &*(m*rho+c)**((-m)-8)-12870*L8*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& &-m)-9)-11440*L7*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m& &)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-1& &0)-8008*L6*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& &-m)-11)-4368*L5*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& &)*(m*rho+c)**((-m)-12)-1820*L4*((-m)-12)*((-m)-11)*((-m)-10)*((-m& &)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-& &2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-13)-560*L3*((-m)-13)*& &((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)& &*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*r& &ho+c)**((-m)-14)-120*L2*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*(& &(-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((& &-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-16*L& &1*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-& &m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)& &-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-L0*((-m)-16)*((-& &m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)& &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17) if (deriv(i) .eq. 17) then L(i) = L17 cycle end if L18 = (-L17*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-17*L16*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-136*L15*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-680*L14*((-m)-3)*((-m)-2)*((-m)-1& &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-2380*L13*((-m)-4)*((-m)-3)*(& &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-6188*L12*((-m& &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& &**((-m)-6)-12376*L11*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)& &*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-19448*L10*((-m)-7)*(& &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& &1)*(m*rho+c)**((-m)-8)-24310*L9*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-& &5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**& &((-m)-9)-24310*L8*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((& &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& &-10)-19448*L7*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& &*((-m)-11)-12376*L6*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7& &)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**& &(m+1)*(m*rho+c)**((-m)-12)-6188*L5*((-m)-12)*((-m)-11)*((-m)-10)*& &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-13)-2380*L4*((-m)& &-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-& &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& &*(m*rho+c)**((-m)-14)-680*L3*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)& &-136*L2*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-1& &0)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)& &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-17*L1*((-m& &)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)& &*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*(& &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-L0*((-m)-17)& &*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m& &)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)& &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-18) if (deriv(i) .eq. 18) then L(i) = L18 cycle end if L19 = (-L18*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-18*L17*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-153*L16*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-816*L15*((-m)-3)*((-m)-2)*((-m)-1& &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-3060*L14*((-m)-4)*((-m)-3)*(& &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-8568*L13*((-m& &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& &**((-m)-6)-18564*L12*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)& &*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-31824*L11*((-m)-7)*(& &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& &1)*(m*rho+c)**((-m)-8)-43758*L10*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& &*((-m)-9)-48620*L9*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& &)-10)-43758*L8*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m& &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& &**((-m)-11)-31824*L7*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-& &7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& &*(m+1)*(m*rho+c)**((-m)-12)-18564*L6*((-m)-12)*((-m)-11)*((-m)-10& &)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*& &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-13)-8568*L5*((-& &m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*(& &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& &1)*(m*rho+c)**((-m)-14)-3060*L4*((-m)-14)*((-m)-13)*((-m)-12)*((-& &m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-& &m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-& &15)-816*L3*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m& &)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)& &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-153*L2*& &((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)& &-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-& &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-18*L1*((& &-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-1& &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-18)-& &L0*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((& &-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*(& &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& &+c)**((-m)-19) if (deriv(i) .eq. 19) then L(i) = L19 cycle end if L20 = (-L19*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-19*L18*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-171*L17*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-969*L16*((-m)-3)*((-m)-2)*((-m)-1& &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-3876*L15*((-m)-4)*((-m)-3)*(& &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-11628*L14*((-& &m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c& &)**((-m)-6)-27132*L13*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2& &)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-50388*L12*((-m)-7)*& &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& &+1)*(m*rho+c)**((-m)-8)-75582*L11*((-m)-8)*((-m)-7)*((-m)-6)*((-m& &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& &**((-m)-9)-92378*L10*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& &-m)-10)-92378*L9*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((& &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& &c)**((-m)-11)-75582*L8*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& &)**(m+1)*(m*rho+c)**((-m)-12)-50388*L7*((-m)-12)*((-m)-11)*((-m)-& &10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-13)-27132*L6*& &((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7& &)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**& &(m+1)*(m*rho+c)**((-m)-14)-11628*L5*((-m)-14)*((-m)-13)*((-m)-12)& &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& &-m)-15)-3876*L4*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)& &*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*& &((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-96& &9*L3*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*& &((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*(& &(-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-171& &*L2*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*(& &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& &)-18)-19*L1*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-& &m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*(& &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& &1)*(m*rho+c)**((-m)-19)-L0*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16& &)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-& &m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)& &-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-20) if (deriv(i) .eq. 20) then L(i) = L20 cycle end if L21 = (-L20*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-20*L19*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-190*L18*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-1140*L17*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-4845*L16*((-m)-4)*((-m)-3)*& &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-15504*L15*((& &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& &c)**((-m)-6)-38760*L14*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-& &2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-77520*L13*((-m)-7)& &*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& &m+1)*(m*rho+c)**((-m)-8)-125970*L12*((-m)-8)*((-m)-7)*((-m)-6)*((& &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& &c)**((-m)-9)-167960*L11*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& &*((-m)-10)-184756*L10*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& &*rho+c)**((-m)-11)-167960*L9*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8& &)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*& &(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-125970*L8*((-m)-12)*((-m)-11)& &*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*& &((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-13)-77& &520*L7*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*& &((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m& &*rho)**(m+1)*(m*rho+c)**((-m)-14)-38760*L6*((-m)-14)*((-m)-13)*((& &-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*(& &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& &+c)**((-m)-15)-15504*L5*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*(& &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& &)-16)-4845*L4*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*(& &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& &)-17)-1140*L3*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*(& &(-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& &o+c)**((-m)-18)-190*L2*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((& &-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)& &*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(& &m*rho)**(m+1)*(m*rho+c)**((-m)-19)-20*L1*((-m)-19)*((-m)-18)*((-m& &)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)& &*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*& &((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-20)-L0& &*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m& &)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*(& &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-21) if (deriv(i) .eq. 21) then L(i) = L21 cycle end if L22 = (-L21*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-21*L20*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-210*L19*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-1330*L18*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-5985*L17*((-m)-4)*((-m)-3)*& &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-20349*L16*((& &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& &c)**((-m)-6)-54264*L15*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-& &2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-116280*L14*((-m)-7& &)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**& &(m+1)*(m*rho+c)**((-m)-8)-203490*L13*((-m)-8)*((-m)-7)*((-m)-6)*(& &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& &+c)**((-m)-9)-293930*L12*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m& &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& &**((-m)-10)-352716*L11*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)& &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& &m*rho+c)**((-m)-11)-352716*L10*((-m)-11)*((-m)-10)*((-m)-9)*((-m)& &-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-293930*L9*((-m)-12)*((-m)-1& &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-13)-& &203490*L8*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-& &8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-116280*L7*((-m)-14)*((-m)-13& &)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& &*rho+c)**((-m)-15)-54264*L6*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-1& &2)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-& &5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**& &((-m)-16)-20349*L5*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& &*((-m)-17)-5985*L4*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-& &13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m& &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& &(m*rho+c)**((-m)-18)-1330*L3*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-& &15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((& &-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m& &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-210*L2*((-m)-19)*((-m)-1& &8)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((& &-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((& &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& &-20)-21*L1*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m& &)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*& &((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((& &-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-21)-L0*((-m)-21)*((-m)-20)& &*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m& &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& &)*(m*rho+c)**((-m)-22) if (deriv(i) .eq. 22) then L(i) = L22 cycle end if L23 = (-L22*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-22*L21*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-231*L20*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-1540*L19*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-7315*L18*((-m)-4)*((-m)-3)*& &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-26334*L17*((& &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& &c)**((-m)-6)-74613*L16*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-& &2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-170544*L15*((-m)-7& &)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**& &(m+1)*(m*rho+c)**((-m)-8)-319770*L14*((-m)-8)*((-m)-7)*((-m)-6)*(& &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& &+c)**((-m)-9)-497420*L13*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m& &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& &**((-m)-10)-646646*L12*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)& &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& &m*rho+c)**((-m)-11)-705432*L11*((-m)-11)*((-m)-10)*((-m)-9)*((-m)& &-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-646646*L10*((-m)-12)*((-m)-& &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-13)& &-497420*L9*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)& &-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-319770*L8*((-m)-14)*((-m)-1& &3)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)& &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& &m*rho+c)**((-m)-15)-170544*L7*((-m)-15)*((-m)-14)*((-m)-13)*((-m)& &-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m& &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& &**((-m)-16)-74613*L6*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m& &)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-& &m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c& &)**((-m)-17)-26334*L5*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-& &m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*(& &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& &1)*(m*rho+c)**((-m)-18)-7315*L4*((-m)-18)*((-m)-17)*((-m)-16)*((-& &m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)& &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-1540*L3*((-m)-19)*((-& &m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12& &)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5& &)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**(& &(-m)-20)-231*L2*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)& &*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m& &)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-& &2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-21)-22*L1*((-m)-21)*(& &(-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-& &14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-& &m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rh& &o)**(m+1)*(m*rho+c)**((-m)-22)-L0*((-m)-22)*((-m)-21)*((-m)-20)*(& &(-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-& &13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m& &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& &(m*rho+c)**((-m)-23) if (deriv(i) .eq. 23) then L(i) = L23 cycle end if L24 = (-L23*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-23*L22*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-253*L21*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-1771*L20*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-8855*L19*((-m)-4)*((-m)-3)*& &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-33649*L18*((& &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& &c)**((-m)-6)-100947*L17*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)& &-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-245157*L16*((-m)-& &7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& &*(m+1)*(m*rho+c)**((-m)-8)-490314*L15*((-m)-8)*((-m)-7)*((-m)-6)*& &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& &o+c)**((-m)-9)-817190*L14*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-& &m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c& &)**((-m)-10)-1144066*L13*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-& &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& &*(m*rho+c)**((-m)-11)-1352078*L12*((-m)-11)*((-m)-10)*((-m)-9)*((& &-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m& &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-1352078*L11*((-m)-12)*((& &-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((& &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& &-13)-1144066*L10*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)& &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-817190*L9*((-m)-14)*(& &(-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)& &*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& &m+1)*(m*rho+c)**((-m)-15)-490314*L8*((-m)-15)*((-m)-14)*((-m)-13)& &*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6& &)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& &rho+c)**((-m)-16)-245157*L7*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-1& &3)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)& &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& &m*rho+c)**((-m)-17)-100947*L6*((-m)-17)*((-m)-16)*((-m)-15)*((-m)& &-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((& &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& &ho)**(m+1)*(m*rho+c)**((-m)-18)-33649*L5*((-m)-18)*((-m)-17)*((-m& &)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)& &*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*(& &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-8855*L4*((-m& &)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)& &*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6& &)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& &rho+c)**((-m)-20)-1771*L3*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)& &*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m& &)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)& &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-21)-253*L2*& &((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)& &-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*(& &(-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-& &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-22)-23*L1*((-m)-22)*((-m)-2& &1)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((& &-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)& &*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(& &m*rho)**(m+1)*(m*rho+c)**((-m)-23)-L0*((-m)-23)*((-m)-22)*((-m)-2& &1)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((& &-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)& &*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(& &m*rho)**(m+1)*(m*rho+c)**((-m)-24) if (deriv(i) .eq. 24) then L(i) = L24 cycle end if L25 = (-L24*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-24*L23*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-276*L22*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-2024*L21*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-10626*L20*((-m)-4)*((-m)-3)& &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-42504*L19*(& &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& &+c)**((-m)-6)-134596*L18*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m& &)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-346104*L17*((-m)& &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& &**(m+1)*(m*rho+c)**((-m)-8)-735471*L16*((-m)-8)*((-m)-7)*((-m)-6)& &*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*r& &ho+c)**((-m)-9)-1307504*L15*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*(& &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& &+c)**((-m)-10)-1961256*L14*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*(& &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& &1)*(m*rho+c)**((-m)-11)-2496144*L13*((-m)-11)*((-m)-10)*((-m)-9)*& &((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((& &-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-2704156*L12*((-m)-12)*& &((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*& &((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-& &m)-13)-2496144*L11*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-& &9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)& &*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-1961256*L10*((-m)-1& &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& &)**(m+1)*(m*rho+c)**((-m)-15)-1307504*L9*((-m)-15)*((-m)-14)*((-m& &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& &)*(m*rho+c)**((-m)-16)-735471*L8*((-m)-16)*((-m)-15)*((-m)-14)*((& &-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*& &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& &+1)*(m*rho+c)**((-m)-17)-346104*L7*((-m)-17)*((-m)-16)*((-m)-15)*& &((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-& &8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-18)-134596*L6*((-m)-18)*((-m)-17& &)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-42504*& &L5*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((& &-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*& &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& &+1)*(m*rho+c)**((-m)-20)-10626*L4*((-m)-20)*((-m)-19)*((-m)-18)*(& &(-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-21)& &-2024*L3*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-& &16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*(& &(-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-& &m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-22)-276*L2*((-m)-2& &2)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((& &-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9& &)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*& &((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-23)-24*L1*((-m)-23)*((-m& &)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)& &*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m& &)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-& &2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-24)-L0*((-m)-24)*((-m& &)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)& &*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m& &)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)& &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-25) if (deriv(i) .eq. 25) then L(i) = L25 cycle end if L26 = (-L25*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-25*L24*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-300*L23*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-2300*L22*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-12650*L21*((-m)-4)*((-m)-3)& &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-53130*L20*(& &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& &+c)**((-m)-6)-177100*L19*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m& &)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-480700*L18*((-m)& &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& &**(m+1)*(m*rho+c)**((-m)-8)-1081575*L17*((-m)-8)*((-m)-7)*((-m)-6& &)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& &rho+c)**((-m)-9)-2042975*L16*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& &o+c)**((-m)-10)-3268760*L15*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*& &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& &+1)*(m*rho+c)**((-m)-11)-4457400*L14*((-m)-11)*((-m)-10)*((-m)-9)& &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-5200300*L13*((-m)-12)& &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& &-m)-13)-5200300*L12*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)& &-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2& &)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-4457400*L11*((-m)-& &14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-& &m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rh& &o)**(m+1)*(m*rho+c)**((-m)-15)-3268760*L10*((-m)-15)*((-m)-14)*((& &-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*& &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& &+1)*(m*rho+c)**((-m)-16)-2042975*L9*((-m)-16)*((-m)-15)*((-m)-14)& &*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-& &7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& &*(m+1)*(m*rho+c)**((-m)-17)-1081575*L8*((-m)-17)*((-m)-16)*((-m)-& &15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((& &-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m& &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-18)-480700*L7*((-m)-18)*((-m& &)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)& &*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*& &((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-17& &7100*L6*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-1& &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& &)**(m+1)*(m*rho+c)**((-m)-20)-53130*L5*((-m)-20)*((-m)-19)*((-m)-& &18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*(& &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& &)-21)-12650*L4*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*& &((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)& &-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-& &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-22)-2300*L3*& &((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)& &-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*& &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-23)-300*L2*((-m)-& &23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*(& &(-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-& &10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-24)-25*L1*((-& &m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18& &)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-& &m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-& &m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-& &25)-L0*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20& &)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-& &m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*(& &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& &1)*(m*rho+c)**((-m)-26) if (deriv(i) .eq. 26) then L(i) = L26 cycle end if L27 = (-L26*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-26*L25*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-325*L24*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-2600*L23*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-14950*L22*((-m)-4)*((-m)-3)& &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-65780*L21*(& &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& &+c)**((-m)-6)-230230*L20*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m& &)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-657800*L19*((-m)& &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& &**(m+1)*(m*rho+c)**((-m)-8)-1562275*L18*((-m)-8)*((-m)-7)*((-m)-6& &)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& &rho+c)**((-m)-9)-3124550*L17*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& &o+c)**((-m)-10)-5311735*L16*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*& &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& &+1)*(m*rho+c)**((-m)-11)-7726160*L15*((-m)-11)*((-m)-10)*((-m)-9)& &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-9657700*L14*((-m)-12)& &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& &-m)-13)-10400600*L13*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m& &)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-& &2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-9657700*L12*((-m)& &-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((& &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& &ho)**(m+1)*(m*rho+c)**((-m)-15)-7726160*L11*((-m)-15)*((-m)-14)*(& &(-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)& &*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& &m+1)*(m*rho+c)**((-m)-16)-5311735*L10*((-m)-16)*((-m)-15)*((-m)-1& &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& &)**(m+1)*(m*rho+c)**((-m)-17)-3124550*L9*((-m)-17)*((-m)-16)*((-m& &)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*& &((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((& &-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-18)-1562275*L8*((-m)-18)*(& &(-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)& &-657800*L7*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m& &)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*(& &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-20)-230230*L6*((-m)-20)*((-m)-19)*((& &-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-1& &2)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-& &5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**& &((-m)-21)-65780*L5*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-& &17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*(& &(-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((& &-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-22)-1495& &0*L4*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*& &((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)& &-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-& &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-23)-2600*L3*& &((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)& &-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*& &((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*(& &(-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-24)-325& &*L2*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*(& &(-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& &*((-m)-25)-26*L1*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21& &)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-& &m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*& &((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m& &*rho)**(m+1)*(m*rho+c)**((-m)-26)-L0*((-m)-26)*((-m)-25)*((-m)-24& &)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-& &m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11& &)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)& &*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-27) if (deriv(i) .eq. 27) then L(i) = L27 cycle end if L28 = (-L27*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-27*L26*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-351*L25*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-2925*L24*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-17550*L23*((-m)-4)*((-m)-3)& &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-80730*L22*(& &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& &+c)**((-m)-6)-296010*L21*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m& &)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-888030*L20*((-m)& &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& &**(m+1)*(m*rho+c)**((-m)-8)-2220075*L19*((-m)-8)*((-m)-7)*((-m)-6& &)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& &rho+c)**((-m)-9)-4686825*L18*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& &o+c)**((-m)-10)-8436285*L17*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*& &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& &+1)*(m*rho+c)**((-m)-11)-13037895*L16*((-m)-11)*((-m)-10)*((-m)-9& &)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*& &((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-17383860*L15*((-m)-1& &2)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-& &5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**& &((-m)-13)-20058300*L14*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((& &-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m& &)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-20058300*L13*((& &-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)& &*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(& &m*rho)**(m+1)*(m*rho+c)**((-m)-15)-17383860*L12*((-m)-15)*((-m)-1& &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& &)**(m+1)*(m*rho+c)**((-m)-16)-13037895*L11*((-m)-16)*((-m)-15)*((& &-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)& &*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(& &m*rho)**(m+1)*(m*rho+c)**((-m)-17)-8436285*L10*((-m)-17)*((-m)-16& &)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-& &m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)& &-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-18)-4686825*L9*((-m)& &-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*& &((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*& &((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-& &m)-19)-2220075*L8*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-1& &5)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-& &m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)& &-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-20)-888030*L7*((-m)-20)*((-m)& &-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*& &((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)& &*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*r& &ho+c)**((-m)-21)-296010*L6*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18& &)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-& &m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-& &m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-& &22)-80730*L5*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((& &-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-1& &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-23)-& &17550*L4*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-& &18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*(& &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& &)-24)-2925*L3*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*(& &(-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-& &13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m& &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& &(m*rho+c)**((-m)-25)-351*L2*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-2& &2)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((& &-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9& &)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*& &((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-26)-27*L1*((-m)-26)*((-m& &)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)& &*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m& &)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-& &m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c& &)**((-m)-27)-L0*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)& &*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m& &)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)& &*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*(& &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-28) if (deriv(i) .eq. 28) then L(i) = L28 cycle end if L29 = (-L28*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-28*L27*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-378*L26*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-3276*L25*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-20475*L24*((-m)-4)*((-m)-3)& &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-98280*L23*(& &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& &+c)**((-m)-6)-376740*L22*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m& &)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-1184040*L21*((-m& &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& &)**(m+1)*(m*rho+c)**((-m)-8)-3108105*L20*((-m)-8)*((-m)-7)*((-m)-& &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& &*rho+c)**((-m)-9)-6906900*L19*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)& &*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*r& &ho+c)**((-m)-10)-13123110*L18*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7& &)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**& &(m+1)*(m*rho+c)**((-m)-11)-21474180*L17*((-m)-11)*((-m)-10)*((-m)& &-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2& &)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-30421755*L16*((-m)& &-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m& &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& &**((-m)-13)-37442160*L15*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*& &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-40116600*L14*& &((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-& &8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-37442160*L13*((-m)-15)*((-m)& &-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((& &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& &ho)**(m+1)*(m*rho+c)**((-m)-16)-30421755*L12*((-m)-16)*((-m)-15)*& &((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-& &8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-21474180*L11*((-m)-17)*((-m)& &-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*& &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-18)-13123110*L10*& &((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)& &-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m& &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& &**((-m)-19)-6906900*L9*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((& &-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9& &)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*& &((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-20)-3108105*L8*((-m)-20)& &*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m& &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& &)*(m*rho+c)**((-m)-21)-1184040*L7*((-m)-21)*((-m)-20)*((-m)-19)*(& &(-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& &*((-m)-22)-376740*L6*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m& &)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& &-m)-23)-98280*L5*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19& &)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-& &m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((& &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& &c)**((-m)-24)-20475*L4*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((& &-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-1& &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& &)**(m+1)*(m*rho+c)**((-m)-25)-3276*L3*((-m)-25)*((-m)-24)*((-m)-2& &3)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((& &-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-1& &0)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)& &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-26)-378*L2*((-& &m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20& &)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-& &m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*(& &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& &1)*(m*rho+c)**((-m)-27)-28*L1*((-m)-27)*((-m)-26)*((-m)-25)*((-m)& &-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*& &((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)& &-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)& &-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-28& &)-L0*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*& &((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)& &-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*& &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-29) if (deriv(i) .eq. 29) then L(i) = L29 cycle end if L30 = (-L29*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-29*L28*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-406*L27*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-3654*L26*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-23751*L25*((-m)-4)*((-m)-3)& &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-118755*L24*& &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& &o+c)**((-m)-6)-475020*L23*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-& &m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-1560780*L22*((-& &m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rh& &o)**(m+1)*(m*rho+c)**((-m)-8)-4292145*L21*((-m)-8)*((-m)-7)*((-m)& &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& &m*rho+c)**((-m)-9)-10015005*L20*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& &*rho+c)**((-m)-10)-20030010*L19*((-m)-10)*((-m)-9)*((-m)-8)*((-m)& &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& &**(m+1)*(m*rho+c)**((-m)-11)-34597290*L18*((-m)-11)*((-m)-10)*((-& &m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)& &-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-51895935*L17*((-& &m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((& &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& &c)**((-m)-13)-67863915*L16*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10& &)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*& &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-77558760*L1& &5*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m& &)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-77558760*L14*((-m)-15)*((-& &m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*& &((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m& &*rho)**(m+1)*(m*rho+c)**((-m)-16)-67863915*L13*((-m)-16)*((-m)-15& &)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m& &)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-51895935*L12*((-m)-17)*((-& &m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10& &)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*& &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-18)-34597290*L1& &1*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-& &m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((& &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& &c)**((-m)-19)-20030010*L10*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16& &)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-& &m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)& &-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-20)-10015005*L9*((-m& &)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)& &*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-& &7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& &*(m+1)*(m*rho+c)**((-m)-21)-4292145*L8*((-m)-21)*((-m)-20)*((-m)-& &19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*(& &(-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& &o+c)**((-m)-22)-1560780*L7*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19& &)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-& &m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((& &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& &c)**((-m)-23)-475020*L6*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*(& &(-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-& &13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m& &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& &(m*rho+c)**((-m)-24)-118755*L5*((-m)-24)*((-m)-23)*((-m)-22)*((-m& &)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)& &*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)& &-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-25)-23751*L4*((-m)-25)*((-m)-24& &)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-& &m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11& &)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)& &*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-26)-3& &654*L3*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21& &)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-& &m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*& &((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m& &*rho)**(m+1)*(m*rho+c)**((-m)-27)-406*L2*((-m)-27)*((-m)-26)*((-m& &)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)& &*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m& &)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-& &m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c& &)**((-m)-28)-29*L1*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-& &24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*(& &(-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-29)& &-L0*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*(& &(-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-& &17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*(& &(-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((& &-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-30) if (deriv(i) .eq. 30) then L(i) = L30 cycle end if L31 = (-L30*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-30*L29*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-435*L28*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-4060*L27*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-27405*L26*((-m)-4)*((-m)-3)& &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-142506*L25*& &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& &o+c)**((-m)-6)-593775*L24*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-& &m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-2035800*L23*((-& &m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rh& &o)**(m+1)*(m*rho+c)**((-m)-8)-5852925*L22*((-m)-8)*((-m)-7)*((-m)& &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& &m*rho+c)**((-m)-9)-14307150*L21*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& &*rho+c)**((-m)-10)-30045015*L20*((-m)-10)*((-m)-9)*((-m)-8)*((-m)& &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& &**(m+1)*(m*rho+c)**((-m)-11)-54627300*L19*((-m)-11)*((-m)-10)*((-& &m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)& &-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-86493225*L18*((-& &m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((& &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& &c)**((-m)-13)-119759850*L17*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-1& &0)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)& &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-145422675*& &L16*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((& &-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m& &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-155117520*L15*((-m)-15)*& &((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-& &8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-145422675*L14*((-m)-16)*((-m& &)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*& &((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((& &-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-119759850*L13*((-m)-17& &)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-18)-864932& &25*L12*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13& &)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& &*rho+c)**((-m)-19)-54627300*L11*((-m)-19)*((-m)-18)*((-m)-17)*((-& &m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10& &)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*& &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-20)-30045015*L1& &0*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-& &m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*& &((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m& &*rho)**(m+1)*(m*rho+c)**((-m)-21)-14307150*L9*((-m)-21)*((-m)-20)& &*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m& &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& &)*(m*rho+c)**((-m)-22)-5852925*L8*((-m)-22)*((-m)-21)*((-m)-20)*(& &(-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-& &13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m& &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& &(m*rho+c)**((-m)-23)-2035800*L7*((-m)-23)*((-m)-22)*((-m)-21)*((-& &m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14& &)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)& &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& &**(m+1)*(m*rho+c)**((-m)-24)-593775*L6*((-m)-24)*((-m)-23)*((-m)-& &22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*(& &(-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-& &9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)& &*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-25)-142506*L5*((-m)-25)& &*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m& &)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& &-m)-26)-27405*L4*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22& &)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-& &m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)& &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-27)-4060*L3*((-m)-27)*((-& &m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20& &)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-& &m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*(& &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& &1)*(m*rho+c)**((-m)-28)-435*L2*((-m)-28)*((-m)-27)*((-m)-26)*((-m& &)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)& &*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m& &)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-& &m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c& &)**((-m)-29)-30*L1*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-& &25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*(& &(-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& &*((-m)-30)-L0*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*(& &(-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-& &19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*(& &(-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& &o+c)**((-m)-31) if (deriv(i) .eq. 31) then L(i) = L31 cycle end if L32 = (-L31*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-31*L30*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-465*L29*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-4495*L28*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-31465*L27*((-m)-4)*((-m)-3)& &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-169911*L26*& &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& &o+c)**((-m)-6)-736281*L25*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-& &m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-2629575*L24*((-& &m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rh& &o)**(m+1)*(m*rho+c)**((-m)-8)-7888725*L23*((-m)-8)*((-m)-7)*((-m)& &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& &m*rho+c)**((-m)-9)-20160075*L22*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& &*rho+c)**((-m)-10)-44352165*L21*((-m)-10)*((-m)-9)*((-m)-8)*((-m)& &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& &**(m+1)*(m*rho+c)**((-m)-11)-84672315*L20*((-m)-11)*((-m)-10)*((-& &m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)& &-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-141120525*L19*((& &-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*(& &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& &+c)**((-m)-13)-206253075*L18*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-& &10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-265182525& &*L17*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*(& &(-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-& &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-300540195*L16*((-m)-15)& &*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)& &-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-300540195*L15*((-m)-16)*((-& &m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)& &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-265182525*L14*((-m)-1& &7)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((& &-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-& &m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-18)-20625& &3075*L13*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-& &13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m& &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& &(m*rho+c)**((-m)-19)-141120525*L12*((-m)-19)*((-m)-18)*((-m)-17)*& &((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)& &-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-& &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-20)-84672315& &*L11*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*& &((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-& &8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-21)-44352165*L10*((-m)-21)*((-m)& &-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*& &((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7& &)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**& &(m+1)*(m*rho+c)**((-m)-22)-20160075*L9*((-m)-22)*((-m)-21)*((-m)-& &20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*(& &(-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)& &*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& &m+1)*(m*rho+c)**((-m)-23)-7888725*L8*((-m)-23)*((-m)-22)*((-m)-21& &)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-& &m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*& &((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m& &*rho)**(m+1)*(m*rho+c)**((-m)-24)-2629575*L7*((-m)-24)*((-m)-23)*& &((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)& &-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*& &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-25)-736281*L6*((-& &m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19& &)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-& &m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((& &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& &c)**((-m)-26)-169911*L5*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*(& &(-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-& &16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*(& &(-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-& &m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-27)-31465*L4*((-m)& &-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*& &((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)& &-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((& &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& &ho)**(m+1)*(m*rho+c)**((-m)-28)-4495*L3*((-m)-28)*((-m)-27)*((-m)& &-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*& &((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)& &-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-& &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& &*(m*rho+c)**((-m)-29)-465*L2*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-& &26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*(& &(-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-& &13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m& &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& &(m*rho+c)**((-m)-30)-31*L1*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27& &)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-& &m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14& &)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)& &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& &**(m+1)*(m*rho+c)**((-m)-31)-L0*((-m)-31)*((-m)-30)*((-m)-29)*((-& &m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22& &)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-& &m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)& &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-32) if (deriv(i) .eq. 32) then L(i) = L32 cycle end if L33 = (-L32*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-32*L31*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-496*L30*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-4960*L29*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-35960*L28*((-m)-4)*((-m)-3)& &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-201376*L27*& &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& &o+c)**((-m)-6)-906192*L26*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-& &m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-3365856*L25*((-& &m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rh& &o)**(m+1)*(m*rho+c)**((-m)-8)-10518300*L24*((-m)-8)*((-m)-7)*((-m& &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& &(m*rho+c)**((-m)-9)-28048800*L23*((-m)-9)*((-m)-8)*((-m)-7)*((-m)& &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& &m*rho+c)**((-m)-10)-64512240*L22*((-m)-10)*((-m)-9)*((-m)-8)*((-m& &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& &)**(m+1)*(m*rho+c)**((-m)-11)-129024480*L21*((-m)-11)*((-m)-10)*(& &(-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-& &m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-225792840*L20*& &((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)& &*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*r& &ho+c)**((-m)-13)-347373600*L19*((-m)-13)*((-m)-12)*((-m)-11)*((-m& &)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)& &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-4714356& &00*L18*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)& &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-565722720*L17*((-m)-1& &5)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-& &m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)& &-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-601080390*L16*((-m)-16)*(& &(-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-& &9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)& &*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-565722720*L15*((-m)& &-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*& &((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*(& &(-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-18)-471& &435600*L14*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m& &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& &)*(m*rho+c)**((-m)-19)-347373600*L13*((-m)-19)*((-m)-18)*((-m)-17& &)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-20)-225792& &840*L12*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-1& &5)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-& &m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)& &-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-21)-129024480*L11*((-m)-21)*(& &(-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-& &14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-& &m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rh& &o)**(m+1)*(m*rho+c)**((-m)-22)-64512240*L10*((-m)-22)*((-m)-21)*(& &(-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-& &14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-& &m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rh& &o)**(m+1)*(m*rho+c)**((-m)-23)-28048800*L9*((-m)-23)*((-m)-22)*((& &-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-1& &5)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-& &m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)& &-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-24)-10518300*L8*((-m)-24)*((-& &m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17& &)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-25)-336585& &6*L7*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*& &((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)& &-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-& &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& &*(m*rho+c)**((-m)-26)-906192*L6*((-m)-26)*((-m)-25)*((-m)-24)*((-& &m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17& &)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-27)-201376& &*L5*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*(& &(-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-& &15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((& &-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m& &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-28)-35960*L4*((-m)-28)*((-m)& &-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*& &((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)& &-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((& &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& &ho)**(m+1)*(m*rho+c)**((-m)-29)-4960*L3*((-m)-29)*((-m)-28)*((-m)& &-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*& &((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)& &-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((& &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& &ho)**(m+1)*(m*rho+c)**((-m)-30)-496*L2*((-m)-30)*((-m)-29)*((-m)-& &28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*(& &(-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-& &15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((& &-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m& &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-31)-32*L1*((-m)-31)*((-m)-30& &)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-& &m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17& &)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-32)-L0*((-& &m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26& &)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-& &m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13& &)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& &*rho+c)**((-m)-33) if (deriv(i) .eq. 33) then L(i) = L33 cycle end if L34 = (-L33*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-33*L32*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-528*L31*((-m)-2)*((-m)-1)*(m*& &rho)**(m+1)*(m*rho+c)**((-m)-3)-5456*L30*((-m)-3)*((-m)-2)*((-m)-& &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-40920*L29*((-m)-4)*((-m)-3)& &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-237336*L28*& &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& &o+c)**((-m)-6)-1107568*L27*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-4272048*L26*((& &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& &ho)**(m+1)*(m*rho+c)**((-m)-8)-13884156*L25*((-m)-8)*((-m)-7)*((-& &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& &*(m*rho+c)**((-m)-9)-38567100*L24*((-m)-9)*((-m)-8)*((-m)-7)*((-m& &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& &(m*rho+c)**((-m)-10)-92561040*L23*((-m)-10)*((-m)-9)*((-m)-8)*((-& &m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rh& &o)**(m+1)*(m*rho+c)**((-m)-11)-193536720*L22*((-m)-11)*((-m)-10)*& &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-354817320*L21& &*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6& &)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& &rho+c)**((-m)-13)-573166440*L20*((-m)-13)*((-m)-12)*((-m)-11)*((-& &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-818809& &200*L19*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9& &)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*& &((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-1037158320*L18*((-m)& &-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*(& &(-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-& &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-1166803110*L17*((-m)-16& &)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-& &m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)& &-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-1166803110*L16*(& &(-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-18)& &-1037158320*L15*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)& &*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-& &7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& &*(m+1)*(m*rho+c)**((-m)-19)-818809200*L14*((-m)-19)*((-m)-18)*((-& &m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11& &)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)& &*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-20)-5& &73166440*L13*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((& &-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9& &)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*& &((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-21)-354817320*L12*((-m)-& &21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*(& &(-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8& &)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*& &(m*rho)**(m+1)*(m*rho+c)**((-m)-22)-193536720*L11*((-m)-22)*((-m)& &-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*& &((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-& &8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& &*(m*rho)**(m+1)*(m*rho+c)**((-m)-23)-92561040*L10*((-m)-23)*((-m)& &-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*& &((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)& &-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2& &)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-24)-38567100*L9*((-m)-& &24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*(& &(-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-25)& &-13884156*L8*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((& &-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-1& &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& &)**(m+1)*(m*rho+c)**((-m)-26)-4272048*L7*((-m)-26)*((-m)-25)*((-m& &)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)& &*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m& &)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m& &)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-2& &7)-1107568*L6*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*(& &(-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-& &16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*(& &(-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-& &m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-28)-237336*L5*((-m& &)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)& &*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m& &)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*& &((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((& &-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-29)-40920*L4*((-m)-29)*((-& &m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22& &)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-& &m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)& &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-30)-5456*L3*((-m)-30)*((-& &m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23& &)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-& &m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10& &)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*& &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-31)-528*L2*((-m& &)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)& &*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m& &)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& &-m)-32)-33*L1*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*(& &(-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-& &21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*(& &(-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8& &)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*& &(m*rho)**(m+1)*(m*rho+c)**((-m)-33)-L0*((-m)-33)*((-m)-32)*((-m)-& &31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*(& &(-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-& &18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*(& &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& &)-34) if (deriv(i) .eq. 34) then L(i) = L34 cycle end if ! L35 = (-L34*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-34*L33*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-561*L32*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-3)-5984*L31*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-46376*L30*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-278256*L29*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-6)-1344904*L28*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-5379616*L27*((& ! &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& ! &ho)**(m+1)*(m*rho+c)**((-m)-8)-18156204*L26*((-m)-8)*((-m)-7)*((-& ! &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& ! &*(m*rho+c)**((-m)-9)-52451256*L25*((-m)-9)*((-m)-8)*((-m)-7)*((-m& ! &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& ! &(m*rho+c)**((-m)-10)-131128140*L24*((-m)-10)*((-m)-9)*((-m)-8)*((& ! &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& ! &ho)**(m+1)*(m*rho+c)**((-m)-11)-286097760*L23*((-m)-11)*((-m)-10)& ! &*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*(& ! &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-548354040*L2& ! &2*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& ! &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& ! &*rho+c)**((-m)-13)-927983760*L21*((-m)-13)*((-m)-12)*((-m)-11)*((& ! &-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-& ! &m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-13919& ! &75640*L20*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)& ! &-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2& ! &)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-1855967520*L19*((-& ! &m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)& ! &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& ! &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-2203961430*L18*((-m)-& ! &16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*(& ! &(-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-& ! &m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-2333606220*L17& ! &*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m& ! &)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m& ! &)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-1& ! &8)-2203961430*L16*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-1& ! &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& ! &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& ! &)**(m+1)*(m*rho+c)**((-m)-19)-1855967520*L15*((-m)-19)*((-m)-18)*& ! &((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)& ! &-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)& ! &-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-20& ! &)-1391975640*L14*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16& ! &)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-& ! &m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)& ! &-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-21)-927983760*L13*((& ! &-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-1& ! &5)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-& ! &m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)& ! &-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-22)-548354040*L12*((-m)-22)*(& ! &(-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-& ! &15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((& ! &-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m& ! &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-23)-286097760*L11*((-m)-23)*& ! &((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)& ! &-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*& ! &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-24)-131128140*L10& ! &*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m& ! &)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& ! &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& ! &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& ! &-m)-25)-52451256*L9*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)& ! &-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*& ! &((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-& ! &8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-26)-18156204*L8*((-m)-26)*((-m)-& ! &25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*(& ! &(-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& ! &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& ! &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& ! &*((-m)-27)-5379616*L7*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-& ! &m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17& ! &)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& ! &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& ! &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-28)-134490& ! &4*L6*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*& ! &((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)& ! &-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*& ! &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-29)-278256*L5*((-& ! &m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23& ! &)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-& ! &m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10& ! &)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*& ! &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-30)-46376*L4*((& ! &-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-2& ! &4)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((& ! &-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-1& ! &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& ! &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-31)-& ! &5984*L3*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-2& ! &6)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((& ! &-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-1& ! &3)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)& ! &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& ! &m*rho+c)**((-m)-32)-561*L2*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29& ! &)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-& ! &m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16& ! &)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-& ! &m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)& ! &-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-33)-34*L1*((-m)-33)*& ! &((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)& ! &-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*& ! &((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)& ! &-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-& ! &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& ! &*(m*rho+c)**((-m)-34)-L0*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*& ! &((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)& ! &-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*& ! &((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)& ! &-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)& ! &-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-35& ! &) ! if (deriv(i) .eq. 35) then ! L(i) = L35 ! cycle ! end if ! L36 = (-L35*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-35*L34*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-595*L33*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-3)-6545*L32*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-52360*L31*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-324632*L30*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-6)-1623160*L29*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-6724520*L28*((& ! &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& ! &ho)**(m+1)*(m*rho+c)**((-m)-8)-23535820*L27*((-m)-8)*((-m)-7)*((-& ! &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& ! &*(m*rho+c)**((-m)-9)-70607460*L26*((-m)-9)*((-m)-8)*((-m)-7)*((-m& ! &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& ! &(m*rho+c)**((-m)-10)-183579396*L25*((-m)-10)*((-m)-9)*((-m)-8)*((& ! &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& ! &ho)**(m+1)*(m*rho+c)**((-m)-11)-417225900*L24*((-m)-11)*((-m)-10)& ! &*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*(& ! &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-834451800*L2& ! &3*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& ! &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& ! &*rho+c)**((-m)-13)-1476337800*L22*((-m)-13)*((-m)-12)*((-m)-11)*(& ! &(-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((& ! &-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-2319& ! &959400*L21*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m& ! &)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-& ! &2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-3247943160*L20*((& ! &-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9& ! &)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*& ! &((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-4059928950*L19*((-m)& ! &-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*& ! &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-4537567650*L1& ! &8*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-& ! &m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-& ! &m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-& ! &18)-4537567650*L17*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-& ! &14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-& ! &m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rh& ! &o)**(m+1)*(m*rho+c)**((-m)-19)-4059928950*L16*((-m)-19)*((-m)-18)& ! &*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m& ! &)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m& ! &)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-2& ! &0)-3247943160*L15*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-1& ! &6)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((& ! &-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m& ! &)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-21)-2319959400*L14*& ! &((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)& ! &-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*(& ! &(-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-& ! &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-22)-1476337800*L13*((-m)-22& ! &)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-& ! &m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)& ! &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& ! &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-23)-834451800*L12*((-m)-2& ! &3)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((& ! &-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-1& ! &0)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-24)-417225900*& ! &L11*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*(& ! &(-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& ! &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& ! &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& ! &*((-m)-25)-183579396*L10*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*& ! &((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)& ! &-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*(& ! &(-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-& ! &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-26)-70607460*L9*((-m)-26)*(& ! &(-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-& ! &19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*(& ! &(-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-27)-23535820*L8*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-2& ! &4)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((& ! &-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-1& ! &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& ! &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-28)-& ! &6724520*L7*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m& ! &)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)& ! &*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m& ! &)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)& ! &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-29)-1623160& ! &*L6*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*(& ! &(-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-& ! &17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*(& ! &(-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((& ! &-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-30)-3246& ! &32*L5*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)& ! &*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m& ! &)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& ! &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& ! &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& ! &-m)-31)-52360*L4*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27& ! &)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-& ! &m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14& ! &)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)& ! &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& ! &**(m+1)*(m*rho+c)**((-m)-32)-6545*L3*((-m)-32)*((-m)-31)*((-m)-30& ! &)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-& ! &m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17& ! &)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& ! &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& ! &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-33)-595*L2& ! &*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m& ! &)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)& ! &*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m& ! &)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*(& ! &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-34)-35*L1*((-m)-34)*((-m)-33)*((-m)-& ! &32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*(& ! &(-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-& ! &19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*(& ! &(-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-35)-L0*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-& ! &31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*(& ! &(-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-& ! &18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*(& ! &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& ! &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& ! &)-36) ! if (deriv(i) .eq. 36) then ! L(i) = L36 ! cycle ! end if ! L37 = (-L36*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-36*L35*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-630*L34*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-3)-7140*L33*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-58905*L32*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-376992*L31*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-6)-1947792*L30*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-8347680*L29*((& ! &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& ! &ho)**(m+1)*(m*rho+c)**((-m)-8)-30260340*L28*((-m)-8)*((-m)-7)*((-& ! &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& ! &*(m*rho+c)**((-m)-9)-94143280*L27*((-m)-9)*((-m)-8)*((-m)-7)*((-m& ! &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& ! &(m*rho+c)**((-m)-10)-254186856*L26*((-m)-10)*((-m)-9)*((-m)-8)*((& ! &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& ! &ho)**(m+1)*(m*rho+c)**((-m)-11)-600805296*L25*((-m)-11)*((-m)-10)& ! &*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*(& ! &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-1251677700*L& ! &24*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)& ! &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& ! &m*rho+c)**((-m)-13)-2310789600*L23*((-m)-13)*((-m)-12)*((-m)-11)*& ! &((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*(& ! &(-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-379& ! &6297200*L22*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-& ! &m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)& ! &-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-5567902560*L21*(& ! &(-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-& ! &9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)& ! &*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-7307872110*L20*((-m& ! &)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)& ! &*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*(& ! &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-8597496600*L& ! &19*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((& ! &-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((& ! &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& ! &-18)-9075135300*L18*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)& ! &-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((& ! &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& ! &ho)**(m+1)*(m*rho+c)**((-m)-19)-8597496600*L17*((-m)-19)*((-m)-18& ! &)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-& ! &m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-& ! &m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-& ! &20)-7307872110*L16*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-& ! &16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*(& ! &(-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-& ! &m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-21)-5567902560*L15& ! &*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m& ! &)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*& ! &((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((& ! &-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-22)-3796297200*L14*((-m)-2& ! &2)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((& ! &-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9& ! &)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*& ! &((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-23)-2310789600*L13*((-m)& ! &-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*& ! &((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)& ! &-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-& ! &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-24)-12516777& ! &00*L12*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19& ! &)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-& ! &m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((& ! &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& ! &c)**((-m)-25)-600805296*L11*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-2& ! &2)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((& ! &-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9& ! &)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*& ! &((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-26)-254186856*L10*((-m)-& ! &26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*(& ! &(-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-& ! &13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m& ! &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& ! &(m*rho+c)**((-m)-27)-94143280*L9*((-m)-27)*((-m)-26)*((-m)-25)*((& ! &-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-1& ! &8)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((& ! &-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((& ! &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& ! &-28)-30260340*L8*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24& ! &)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-& ! &m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11& ! &)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)& ! &*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-29)-8& ! &347680*L7*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)& ! &-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*& ! &((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)& ! &-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)& ! &-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-30& ! &)-1947792*L6*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((& ! &-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-1& ! &9)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((& ! &-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*(& ! &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& ! &+c)**((-m)-31)-376992*L5*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*& ! &((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)& ! &-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*& ! &((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-& ! &8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-32)-58905*L4*((-m)-32)*((-m)-31)& ! &*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m& ! &)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)& ! &*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m& ! &)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m& ! &)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-3& ! &3)-7140*L3*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m& ! &)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)& ! &*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m& ! &)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*& ! &((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((& ! &-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-34)-630*L2*((-m)-34)*((-m)& ! &-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*& ! &((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)& ! &-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*& ! &((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7& ! &)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**& ! &(m+1)*(m*rho+c)**((-m)-35)-36*L1*((-m)-35)*((-m)-34)*((-m)-33)*((& ! &-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-2& ! &6)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((& ! &-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-1& ! &3)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)& ! &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& ! &m*rho+c)**((-m)-36)-L0*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((& ! &-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-2& ! &6)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((& ! &-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-1& ! &3)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)& ! &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& ! &m*rho+c)**((-m)-37) ! if (deriv(i) .eq. 37) then ! L(i) = L37 ! cycle ! end if ! L38 = (-L37*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-37*L36*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-666*L35*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-3)-7770*L34*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-66045*L33*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-435897*L32*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-6)-2324784*L31*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-10295472*L30*(& ! &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-8)-38608020*L29*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-9)-124403620*L28*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-10)-348330136*L27*((-m)-10)*((-m)-9)*((-m)-8)*& ! &((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m& ! &*rho)**(m+1)*(m*rho+c)**((-m)-11)-854992152*L26*((-m)-11)*((-m)-1& ! &0)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-1852482996& ! &*L25*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-& ! &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& ! &*(m*rho+c)**((-m)-13)-3562467300*L24*((-m)-13)*((-m)-12)*((-m)-11& ! &)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)& ! &*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-6& ! &107086800*L23*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*(& ! &(-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-& ! &m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-9364199760*L22& ! &*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m& ! &)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-& ! &2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-12875774670*L21*(& ! &(-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-& ! &10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& ! &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-159053687& ! &10*L20*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12& ! &)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5& ! &)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**(& ! &(-m)-18)-17672631900*L19*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*& ! &((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-& ! &8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-17672631900*L18*((-m)-19)*((& ! &-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-1& ! &2)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-& ! &5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**& ! &((-m)-20)-15905368710*L17*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)& ! &*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m& ! &)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)& ! &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-21)-1287577& ! &4670*L16*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-& ! &16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*(& ! &(-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-& ! &m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-22)-9364199760*L15& ! &*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m& ! &)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)& ! &*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*(& ! &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-23)-6107086800*L& ! &14*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((& ! &-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-1& ! &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& ! &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-24)-& ! &3562467300*L13*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*& ! &((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)& ! &-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-& ! &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& ! &*(m*rho+c)**((-m)-25)-1852482996*L12*((-m)-25)*((-m)-24)*((-m)-23& ! &)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-& ! &m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10& ! &)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*& ! &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-26)-854992152*L& ! &11*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((& ! &-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-1& ! &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& ! &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& ! &)**(m+1)*(m*rho+c)**((-m)-27)-348330136*L10*((-m)-27)*((-m)-26)*(& ! &(-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-& ! &19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*(& ! &(-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-28)-124403620*L9*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-& ! &25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*(& ! &(-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& ! &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& ! &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& ! &*((-m)-29)-38608020*L8*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((& ! &-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-1& ! &9)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((& ! &-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*(& ! &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& ! &+c)**((-m)-30)-10295472*L7*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27& ! &)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-& ! &m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14& ! &)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)& ! &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& ! &**(m+1)*(m*rho+c)**((-m)-31)-2324784*L6*((-m)-31)*((-m)-30)*((-m)& ! &-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*& ! &((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)& ! &-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*& ! &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-32)-435897*L5*((-& ! &m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26& ! &)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-& ! &m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13& ! &)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& ! &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& ! &*rho+c)**((-m)-33)-66045*L4*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-3& ! &0)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((& ! &-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-1& ! &7)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((& ! &-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-& ! &m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-34)-7770*& ! &L3*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((& ! &-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-2& ! &2)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((& ! &-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9& ! &)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*& ! &((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-35)-666*L2*((-m)-35)*((-& ! &m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28& ! &)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-& ! &m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15& ! &)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m& ! &)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-36)-37*L1*((-m)-36)*((-m)-35)*& ! &((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)& ! &-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*& ! &((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)& ! &-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*(& ! &(-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-& ! &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-37)-L0*((-m)-37)*((-m)-36)*& ! &((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)& ! &-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*& ! &((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)& ! &-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*& ! &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-38) ! if (deriv(i) .eq. 38) then ! L(i) = L38 ! cycle ! end if ! L39 = (-L38*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-38*L37*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-703*L36*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-3)-8436*L35*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-73815*L34*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-501942*L33*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-6)-2760681*L32*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-12620256*L31*(& ! &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-8)-48903492*L30*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-9)-163011640*L29*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-10)-472733756*L28*((-m)-10)*((-m)-9)*((-m)-8)*& ! &((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m& ! &*rho)**(m+1)*(m*rho+c)**((-m)-11)-1203322288*L27*((-m)-11)*((-m)-& ! &10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& ! &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-270747514& ! &8*L26*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-13)-5414950296*L25*((-m)-13)*((-m)-12)*((-m)-1& ! &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& ! &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-& ! &9669554100*L24*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*& ! &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-15471286560*L& ! &23*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((& ! &-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m& ! &)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-22239974430*L22& ! &*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m& ! &)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)& ! &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-2878114& ! &3380*L21*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& ! &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& ! &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& ! &*((-m)-18)-33578000610*L20*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15& ! &)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m& ! &)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-35345263800*L19*((-m)-19)*& ! &((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)& ! &-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m& ! &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& ! &**((-m)-20)-33578000610*L18*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-1& ! &7)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((& ! &-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-& ! &m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-21)-28781& ! &143380*L17*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m& ! &)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)& ! &*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*(& ! &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-22)-22239974430*& ! &L16*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*(& ! &(-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-& ! &10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& ! &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-23)-154712865& ! &60*L15*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18& ! &)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-& ! &m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-& ! &m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-& ! &24)-9669554100*L14*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-& ! &20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*(& ! &(-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)& ! &*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& ! &m+1)*(m*rho+c)**((-m)-25)-5414950296*L13*((-m)-25)*((-m)-24)*((-m& ! &)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)& ! &*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m& ! &)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)& ! &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-26)-2707475& ! &148*L12*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-2& ! &1)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((& ! &-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)& ! &*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(& ! &m*rho)**(m+1)*(m*rho+c)**((-m)-27)-1203322288*L11*((-m)-27)*((-m)& ! &-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*& ! &((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)& ! &-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-& ! &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& ! &*(m*rho+c)**((-m)-28)-472733756*L10*((-m)-28)*((-m)-27)*((-m)-26)& ! &*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m& ! &)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)& ! &*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6& ! &)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& ! &rho+c)**((-m)-29)-163011640*L9*((-m)-29)*((-m)-28)*((-m)-27)*((-m& ! &)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)& ! &*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m& ! &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-30)-48903492*L8*((-m)-30)*((-m)-29)*((-m)-28)*& ! &((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)& ! &-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*& ! &((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-& ! &8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-31)-12620256*L7*((-m)-31)*((-m)-& ! &30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*(& ! &(-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-& ! &17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*(& ! &(-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((& ! &-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-32)-2760& ! &681*L6*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27& ! &)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-& ! &m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14& ! &)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)& ! &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& ! &**(m+1)*(m*rho+c)**((-m)-33)-501942*L5*((-m)-33)*((-m)-32)*((-m)-& ! &31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*(& ! &(-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-& ! &18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*(& ! &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& ! &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& ! &)-34)-73815*L4*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*& ! &((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)& ! &-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*& ! &((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)& ! &-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-& ! &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-35)-8436*L3*& ! &((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)& ! &-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*& ! &((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)& ! &-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*& ! &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-36)-703*L2*((-m)-& ! &36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*(& ! &(-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-& ! &23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*(& ! &(-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-& ! &10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& ! &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-37)-38*L1*((-& ! &m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31& ! &)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-& ! &m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18& ! &)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-& ! &m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-& ! &m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-& ! &38)-L0*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33& ! &)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-& ! &m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20& ! &)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-& ! &m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*(& ! &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& ! &1)*(m*rho+c)**((-m)-39) ! if (deriv(i) .eq. 39) then ! L(i) = L39 ! cycle ! end if ! L40 = (-L39*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-39*L38*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-741*L37*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-3)-9139*L36*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-82251*L35*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-575757*L34*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-6)-3262623*L33*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-15380937*L32*(& ! &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-8)-61523748*L31*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-9)-211915132*L30*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-10)-635745396*L29*((-m)-10)*((-m)-9)*((-m)-8)*& ! &((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m& ! &*rho)**(m+1)*(m*rho+c)**((-m)-11)-1676056044*L28*((-m)-11)*((-m)-& ! &10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& ! &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-391079743& ! &6*L27*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-13)-8122425444*L26*((-m)-13)*((-m)-12)*((-m)-1& ! &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& ! &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)-& ! &15084504396*L25*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)& ! &*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*(& ! &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-25140840660*& ! &L24*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*(& ! &(-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-& ! &m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-37711260990*L2& ! &3*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& ! &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& ! &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-510211& ! &17810*L22*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)& ! &-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m& ! &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& ! &**((-m)-18)-62359143990*L21*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-1& ! &5)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-& ! &m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)& ! &-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-68923264410*L20*((-m)-19)& ! &*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m& ! &)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-& ! &m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c& ! &)**((-m)-20)-68923264410*L19*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-& ! &17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*(& ! &(-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((& ! &-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-21)-6235& ! &9143990*L18*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-& ! &m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10& ! &)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*& ! &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-22)-51021117810& ! &*L17*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*& ! &((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)& ! &-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-& ! &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-23)-37711260& ! &990*L16*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-1& ! &8)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((& ! &-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((& ! &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& ! &-24)-25140840660*L15*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m& ! &)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)& ! &*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-& ! &7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& ! &*(m+1)*(m*rho+c)**((-m)-25)-15084504396*L14*((-m)-25)*((-m)-24)*(& ! &(-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-& ! &17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*(& ! &(-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((& ! &-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-26)-8122& ! &425444*L13*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m& ! &)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)& ! &*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)& ! &-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& ! &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-27)-3910797436*L12*((-m)-27)*((& ! &-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-2& ! &0)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((& ! &-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*& ! &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& ! &+1)*(m*rho+c)**((-m)-28)-1676056044*L11*((-m)-28)*((-m)-27)*((-m)& ! &-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*& ! &((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)& ! &-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-& ! &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& ! &*(m*rho+c)**((-m)-29)-635745396*L10*((-m)-29)*((-m)-28)*((-m)-27)& ! &*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m& ! &)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)& ! &*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-& ! &7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& ! &*(m+1)*(m*rho+c)**((-m)-30)-211915132*L9*((-m)-30)*((-m)-29)*((-m& ! &)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)& ! &*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m& ! &)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*& ! &((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((& ! &-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-31)-61523748*L8*((-m)-31)*& ! &((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)& ! &-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*& ! &((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)& ! &-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)& ! &-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-32& ! &)-15380937*L7*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*(& ! &(-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-& ! &21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*(& ! &(-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8& ! &)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*& ! &(m*rho)**(m+1)*(m*rho+c)**((-m)-33)-3262623*L6*((-m)-33)*((-m)-32& ! &)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-& ! &m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19& ! &)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-& ! &m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((& ! &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& ! &c)**((-m)-34)-575757*L5*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*(& ! &(-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-& ! &24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*(& ! &(-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& ! &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& ! &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-35)& ! &-82251*L4*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)& ! &-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*& ! &((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)& ! &-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*& ! &((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*(& ! &(-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-36)-913& ! &9*L3*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*& ! &((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)& ! &-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*& ! &((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)& ! &-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)& ! &-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-37& ! &)-741*L2*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-& ! &32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*(& ! &(-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-& ! &19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*(& ! &(-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-38)-39*L1*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-& ! &m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28& ! &)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-& ! &m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15& ! &)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m& ! &)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-39)-L0*((-m)-39)*((-m)-38)*((-& ! &m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31& ! &)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-& ! &m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18& ! &)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-& ! &m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-& ! &m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-& ! &40) ! if (deriv(i) .eq. 40) then ! L(i) = L40 ! cycle ! end if ! L41 = (-L40*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-40*L39*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-780*L38*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-3)-9880*L37*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-91390*L36*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-658008*L35*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-6)-3838380*L34*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-18643560*L33*(& ! &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-8)-76904685*L32*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-9)-273438880*L31*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-10)-847660528*L30*((-m)-10)*((-m)-9)*((-m)-8)*& ! &((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m& ! &*rho)**(m+1)*(m*rho+c)**((-m)-11)-2311801440*L29*((-m)-11)*((-m)-& ! &10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& ! &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-558685348& ! &0*L28*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-13)-12033222880*L27*((-m)-13)*((-m)-12)*((-m)-& ! &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& ! &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-14)& ! &-23206929840*L26*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10& ! &)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*& ! &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-40225345056& ! &*L25*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*& ! &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-62852101650*L& ! &24*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((& ! &-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-& ! &m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-88732& ! &378800*L23*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m& ! &)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-& ! &m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c& ! &)**((-m)-18)-113380261800*L22*((-m)-18)*((-m)-17)*((-m)-16)*((-m)& ! &-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*(& ! &(-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-& ! &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-131282408400*L21*((-m)-& ! &19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*(& ! &(-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-20)-137846528820*L20*((-m)-20)*((-m)-19)*((-m)-18)*((& ! &-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-1& ! &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& ! &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-21)-& ! &131282408400*L19*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17& ! &)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& ! &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& ! &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-22)-113380& ! &261800*L18*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m& ! &)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)& ! &*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*& ! &((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-23)-88& ! &732378800*L17*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*(& ! &(-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& ! &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& ! &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& ! &*((-m)-24)-62852101650*L16*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21& ! &)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-& ! &m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*& ! &((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m& ! &*rho)**(m+1)*(m*rho+c)**((-m)-25)-40225345056*L15*((-m)-25)*((-m)& ! &-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*& ! &((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)& ! &-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)& ! &-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-26& ! &)-23206929840*L14*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-2& ! &2)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((& ! &-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9& ! &)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*& ! &((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-27)-12033222880*L13*((-m& ! &)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)& ! &*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m& ! &)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*(& ! &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-28)-5586853480*L12*((-m)-28)*((-m)-2& ! &7)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((& ! &-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-1& ! &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& ! &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& ! &)**(m+1)*(m*rho+c)**((-m)-29)-2311801440*L11*((-m)-29)*((-m)-28)*& ! &((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)& ! &-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*& ! &((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-& ! &8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-30)-847660528*L10*((-m)-30)*((-m& ! &)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)& ! &*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m& ! &)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)& ! &*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*(& ! &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-31)-273438880*L9& ! &*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m& ! &)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)& ! &*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m& ! &)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-& ! &m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c& ! &)**((-m)-32)-76904685*L8*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*& ! &((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)& ! &-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*& ! &((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)& ! &-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2& ! &)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-33)-18643560*L7*((-m)-& ! &33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*(& ! &(-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-& ! &20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*(& ! &(-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)& ! &*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& ! &m+1)*(m*rho+c)**((-m)-34)-3838380*L6*((-m)-34)*((-m)-33)*((-m)-32& ! &)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-& ! &m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19& ! &)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-& ! &m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((& ! &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& ! &c)**((-m)-35)-658008*L5*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*(& ! &(-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-& ! &25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*(& ! &(-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& ! &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& ! &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& ! &*((-m)-36)-91390*L4*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)& ! &-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*& ! &((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)& ! &-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*& ! &((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)& ! &*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*r& ! &ho+c)**((-m)-37)-9880*L3*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*& ! &((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)& ! &-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*& ! &((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)& ! &-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((& ! &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& ! &ho)**(m+1)*(m*rho+c)**((-m)-38)-780*L2*((-m)-38)*((-m)-37)*((-m)-& ! &36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*(& ! &(-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-& ! &23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*(& ! &(-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-& ! &10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& ! &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-39)-40*L1*((-& ! &m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33& ! &)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-& ! &m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20& ! &)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-& ! &m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*(& ! &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& ! &1)*(m*rho+c)**((-m)-40)-L0*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37& ! &)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-& ! &m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24& ! &)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-& ! &m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11& ! &)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)& ! &*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-41) ! if (deriv(i) .eq. 41) then ! L(i) = L41 ! cycle ! end if ! L42 = (-L41*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-41*L40*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-820*L39*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-3)-10660*L38*((-m)-3)*((-m)-2)*((-m)& ! &-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-101270*L37*((-m)-4)*((-m)-& ! &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-749398*L3& ! &6*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& ! &rho+c)**((-m)-6)-4496388*L35*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*& ! &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-22481940*L34& ! &*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(& ! &m*rho)**(m+1)*(m*rho+c)**((-m)-8)-95548245*L33*((-m)-8)*((-m)-7)*& ! &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& ! &+1)*(m*rho+c)**((-m)-9)-350343565*L32*((-m)-9)*((-m)-8)*((-m)-7)*& ! &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& ! &+1)*(m*rho+c)**((-m)-10)-1121099408*L31*((-m)-10)*((-m)-9)*((-m)-& ! &8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-11)-3159461968*L30*((-m)-11)*((-& ! &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& ! &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-789865& ! &4920*L29*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)& ! &*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& ! &m+1)*(m*rho+c)**((-m)-13)-17620076360*L28*((-m)-13)*((-m)-12)*((-& ! &m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-& ! &m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-& ! &14)-35240152720*L27*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)& ! &-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-& ! &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-63432274& ! &896*L26*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-1& ! &0)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-1030774467& ! &06*L25*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11& ! &)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)& ! &*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)-1& ! &51584480450*L24*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)& ! &*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6& ! &)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& ! &rho+c)**((-m)-18)-202112640600*L23*((-m)-18)*((-m)-17)*((-m)-16)*& ! &((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)& ! &-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2& ! &)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-244662670200*L22*(& ! &(-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-& ! &13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m& ! &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& ! &(m*rho+c)**((-m)-20)-269128937220*L21*((-m)-20)*((-m)-19)*((-m)-1& ! &8)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((& ! &-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((& ! &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& ! &-21)-269128937220*L20*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-& ! &m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11& ! &)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)& ! &*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-22)-2& ! &44662670200*L19*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)& ! &*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m& ! &)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m& ! &)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-2& ! &3)-202112640600*L18*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)& ! &-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*& ! &((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)& ! &*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*r& ! &ho+c)**((-m)-24)-151584480450*L17*((-m)-24)*((-m)-23)*((-m)-22)*(& ! &(-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-& ! &15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((& ! &-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m& ! &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-25)-103077446706*L16*((-m)-2& ! &5)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((& ! &-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-1& ! &2)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-& ! &5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**& ! &((-m)-26)-63432274896*L15*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)& ! &*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m& ! &)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)& ! &*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*(& ! &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-27)-35240152720*& ! &L14*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*(& ! &(-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-& ! &15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((& ! &-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m& ! &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-28)-17620076360*L13*((-m)-28& ! &)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-& ! &m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15& ! &)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m& ! &)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-29)-7898654920*L12*((-m)-29)*(& ! &(-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-& ! &22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*(& ! &(-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-& ! &9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)& ! &*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-30)-3159461968*L11*((-m& ! &)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)& ! &*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m& ! &)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)& ! &*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*& ! &((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-31)-11& ! &21099408*L10*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((& ! &-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-2& ! &0)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((& ! &-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*& ! &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& ! &+1)*(m*rho+c)**((-m)-32)-350343565*L9*((-m)-32)*((-m)-31)*((-m)-3& ! &0)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((& ! &-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-1& ! &7)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((& ! &-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-& ! &m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-33)-95548& ! &245*L8*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28& ! &)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-& ! &m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15& ! &)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m& ! &)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-34)-22481940*L7*((-m)-34)*((-m& ! &)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)& ! &*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m& ! &)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)& ! &*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-& ! &7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& ! &*(m+1)*(m*rho+c)**((-m)-35)-4496388*L6*((-m)-35)*((-m)-34)*((-m)-& ! &33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*(& ! &(-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-& ! &20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*(& ! &(-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)& ! &*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& ! &m+1)*(m*rho+c)**((-m)-36)-749398*L5*((-m)-36)*((-m)-35)*((-m)-34)& ! &*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m& ! &)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)& ! &*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m& ! &)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*(& ! &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-37)-101270*L4*((-m)-37)*((-m)-36)*((& ! &-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-2& ! &9)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((& ! &-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-1& ! &6)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((& ! &-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m& ! &)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-38)-10660*L3*((-m)-& ! &38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*(& ! &(-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-& ! &25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*(& ! &(-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& ! &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& ! &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& ! &*((-m)-39)-820*L2*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-3& ! &5)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((& ! &-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-2& ! &2)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((& ! &-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9& ! &)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*& ! &((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-40)-41*L1*((-m)-40)*((-m& ! &)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)& ! &*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m& ! &)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)& ! &*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m& ! &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-41)-L0*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)& ! &*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m& ! &)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)& ! &*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m& ! &)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& ! &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& ! &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& ! &-m)-42) ! if (deriv(i) .eq. 42) then ! L(i) = L42 ! cycle ! end if ! L43 = (-L42*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-42*L41*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-861*L40*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-3)-11480*L39*((-m)-3)*((-m)-2)*((-m)& ! &-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-111930*L38*((-m)-4)*((-m)-& ! &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-850668*L3& ! &7*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& ! &rho+c)**((-m)-6)-5245786*L36*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*& ! &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-26978328*L35& ! &*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(& ! &m*rho)**(m+1)*(m*rho+c)**((-m)-8)-118030185*L34*((-m)-8)*((-m)-7)& ! &*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& ! &m+1)*(m*rho+c)**((-m)-9)-445891810*L33*((-m)-9)*((-m)-8)*((-m)-7)& ! &*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& ! &m+1)*(m*rho+c)**((-m)-10)-1471442973*L32*((-m)-10)*((-m)-9)*((-m)& ! &-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& ! &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-11)-4280561376*L31*((-m)-11)*((& ! &-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-& ! &m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-11058& ! &116888*L30*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-& ! &7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& ! &*(m+1)*(m*rho+c)**((-m)-13)-25518731280*L29*((-m)-13)*((-m)-12)*(& ! &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& ! &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& ! &)-14)-52860229080*L28*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& ! &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& ! &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-986724& ! &27616*L27*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)& ! &-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-& ! &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-16650972& ! &1602*L26*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& ! &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& ! &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17)& ! &-254661927156*L25*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-1& ! &3)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)& ! &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& ! &m*rho+c)**((-m)-18)-353697121050*L24*((-m)-18)*((-m)-17)*((-m)-16& ! &)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-& ! &m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)& ! &-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-446775310800*L23& ! &*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m& ! &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-20)-513791607420*L22*((-m)-20)*((-m)-19)*((-m)& ! &-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*& ! &((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*& ! &((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-& ! &m)-21)-538257874440*L21*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*(& ! &(-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& ! &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& ! &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-22)& ! &-513791607420*L20*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-1& ! &8)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((& ! &-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((& ! &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& ! &-23)-446775310800*L19*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-& ! &m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13& ! &)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& ! &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& ! &*rho+c)**((-m)-24)-353697121050*L18*((-m)-24)*((-m)-23)*((-m)-22)& ! &*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m& ! &)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*& ! &((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((& ! &-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-25)-254661927156*L17*((-m)& ! &-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*& ! &((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)& ! &-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m& ! &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& ! &**((-m)-26)-166509721602*L16*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-& ! &23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*(& ! &(-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-& ! &10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& ! &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-27)-986724276& ! &16*L15*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22& ! &)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-& ! &m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)& ! &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& ! &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-28)-52860229080*L14*((-m)& ! &-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*& ! &((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)& ! &-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*(& ! &(-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-& ! &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-29)-25518731280*L13*((-m)-2& ! &9)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((& ! &-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-1& ! &6)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((& ! &-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m& ! &)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-30)-11058116888*L12& ! &*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m& ! &)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)& ! &*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m& ! &)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m& ! &)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-3& ! &1)-4280561376*L11*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-2& ! &7)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((& ! &-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-1& ! &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& ! &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& ! &)**(m+1)*(m*rho+c)**((-m)-32)-1471442973*L10*((-m)-32)*((-m)-31)*& ! &((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)& ! &-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*& ! &((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)& ! &-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)& ! &-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-33& ! &)-445891810*L9*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*& ! &((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)& ! &-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*& ! &((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)& ! &-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2& ! &)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-34)-118030185*L8*((-m)& ! &-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*& ! &((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)& ! &-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*& ! &((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-& ! &8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-35)-26978328*L7*((-m)-35)*((-m)-& ! &34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*(& ! &(-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-& ! &21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*(& ! &(-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8& ! &)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*& ! &(m*rho)**(m+1)*(m*rho+c)**((-m)-36)-5245786*L6*((-m)-36)*((-m)-35& ! &)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-& ! &m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22& ! &)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-& ! &m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)& ! &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& ! &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-37)-850668*L5*((-m)-37)*(& ! &(-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-& ! &30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*(& ! &(-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-& ! &17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*(& ! &(-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((& ! &-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-38)-1119& ! &30*L4*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)& ! &*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m& ! &)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)& ! &*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m& ! &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-39)-11480*L3*((-m)-39)*((-m)-38)*((-m)-37)*((-& ! &m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30& ! &)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-& ! &m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17& ! &)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& ! &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& ! &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-40)-861*L2& ! &*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m& ! &)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)& ! &*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m& ! &)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)& ! &*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)& ! &-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& ! &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-41)-42*L1*((-m)-41)*((-m)-40)*(& ! &(-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-& ! &33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*(& ! &(-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-& ! &20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*(& ! &(-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)& ! &*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& ! &m+1)*(m*rho+c)**((-m)-42)-L0*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-& ! &39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*(& ! &(-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-& ! &26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*(& ! &(-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-& ! &13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m& ! &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& ! &(m*rho+c)**((-m)-43) ! if (deriv(i) .eq. 43) then ! L(i) = L43 ! cycle ! end if ! L44 = (-L43*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-43*L42*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-903*L41*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-3)-12341*L40*((-m)-3)*((-m)-2)*((-m)& ! &-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-123410*L39*((-m)-4)*((-m)-& ! &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-962598*L3& ! &8*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& ! &rho+c)**((-m)-6)-6096454*L37*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*& ! &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-32224114*L36& ! &*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(& ! &m*rho)**(m+1)*(m*rho+c)**((-m)-8)-145008513*L35*((-m)-8)*((-m)-7)& ! &*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& ! &m+1)*(m*rho+c)**((-m)-9)-563921995*L34*((-m)-9)*((-m)-8)*((-m)-7)& ! &*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& ! &m+1)*(m*rho+c)**((-m)-10)-1917334783*L33*((-m)-10)*((-m)-9)*((-m)& ! &-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& ! &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-11)-5752004349*L32*((-m)-11)*((& ! &-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-& ! &m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-15338& ! &678264*L31*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-& ! &7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& ! &*(m+1)*(m*rho+c)**((-m)-13)-36576848168*L30*((-m)-13)*((-m)-12)*(& ! &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& ! &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& ! &)-14)-78378960360*L29*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& ! &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& ! &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-151532& ! &656696*L28*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m& ! &)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)& ! &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-2651821& ! &49218*L27*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)& ! &-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)& ! &-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-17& ! &)-421171648758*L26*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-& ! &13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m& ! &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& ! &(m*rho+c)**((-m)-18)-608359048206*L25*((-m)-18)*((-m)-17)*((-m)-1& ! &6)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((& ! &-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m& ! &)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-800472431850*L2& ! &4*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-& ! &m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*(& ! &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& ! &1)*(m*rho+c)**((-m)-20)-960566918220*L23*((-m)-20)*((-m)-19)*((-m& ! &)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& ! &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& ! &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& ! &-m)-21)-1052049481860*L22*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)& ! &*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m& ! &)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m& ! &)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-2& ! &2)-1052049481860*L21*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m& ! &)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& ! &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& ! &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& ! &-m)-23)-960566918220*L20*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*& ! &((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)& ! &-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-& ! &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& ! &*(m*rho+c)**((-m)-24)-800472431850*L19*((-m)-24)*((-m)-23)*((-m)-& ! &22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*(& ! &(-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-& ! &9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)& ! &*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-25)-608359048206*L18*((& ! &-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-1& ! &9)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((& ! &-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*(& ! &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& ! &+c)**((-m)-26)-421171648758*L17*((-m)-26)*((-m)-25)*((-m)-24)*((-& ! &m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17& ! &)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& ! &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& ! &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-27)-265182& ! &149218*L16*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m& ! &)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)& ! &*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m& ! &)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-& ! &2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-28)-151532656696*L15*& ! &((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)& ! &-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*& ! &((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)& ! &-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2& ! &)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-29)-78378960360*L14*((& ! &-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-2& ! &3)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((& ! &-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-1& ! &0)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-30)-3657684816& ! &8*L13*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)& ! &*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m& ! &)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& ! &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& ! &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& ! &-m)-31)-15338678264*L12*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*(& ! &(-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-& ! &21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*(& ! &(-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8& ! &)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*& ! &(m*rho)**(m+1)*(m*rho+c)**((-m)-32)-5752004349*L11*((-m)-32)*((-m& ! &)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)& ! &*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m& ! &)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& ! &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& ! &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& ! &-m)-33)-1917334783*L10*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((& ! &-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-2& ! &3)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((& ! &-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-1& ! &0)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-34)-563921995*& ! &L9*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((& ! &-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-2& ! &2)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((& ! &-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9& ! &)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*& ! &((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-35)-145008513*L8*((-m)-3& ! &5)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((& ! &-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-2& ! &2)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((& ! &-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9& ! &)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*& ! &((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-36)-32224114*L7*((-m)-36& ! &)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-& ! &m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23& ! &)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-& ! &m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10& ! &)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*& ! &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-37)-6096454*L6*& ! &((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)& ! &-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*& ! &((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)& ! &-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*& ! &((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*& ! &((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-& ! &m)-38)-962598*L5*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34& ! &)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-& ! &m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21& ! &)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-& ! &m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*& ! &((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m& ! &*rho)**(m+1)*(m*rho+c)**((-m)-39)-123410*L4*((-m)-39)*((-m)-38)*(& ! &(-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-& ! &31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*(& ! &(-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-& ! &18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*(& ! &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& ! &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& ! &)-40)-12341*L3*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*& ! &((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)& ! &-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*& ! &((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)& ! &-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*& ! &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-41)-903*L2*((-m)-& ! &41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*(& ! &(-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-& ! &28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*(& ! &(-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-& ! &15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((& ! &-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m& ! &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-42)-43*L1*((-m)-42)*((-m)-41& ! &)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-& ! &m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28& ! &)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-& ! &m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15& ! &)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m& ! &)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-43)-L0*((-m)-43)*((-m)-42)*((-& ! &m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35& ! &)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-& ! &m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22& ! &)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-& ! &m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)& ! &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& ! &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-44) ! if (deriv(i) .eq. 44) then ! L(i) = L44 ! cycle ! end if ! L45 = (-L44*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-44*L43*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-946*L42*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-3)-13244*L41*((-m)-3)*((-m)-2)*((-m)& ! &-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-135751*L40*((-m)-4)*((-m)-& ! &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-1086008*L& ! &39*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& ! &*rho+c)**((-m)-6)-7059052*L38*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-38320568*L3& ! &7*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*& ! &(m*rho)**(m+1)*(m*rho+c)**((-m)-8)-177232627*L36*((-m)-8)*((-m)-7& ! &)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**& ! &(m+1)*(m*rho+c)**((-m)-9)-708930508*L35*((-m)-9)*((-m)-8)*((-m)-7& ! &)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**& ! &(m+1)*(m*rho+c)**((-m)-10)-2481256778*L34*((-m)-10)*((-m)-9)*((-m& ! &)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-11)-7669339132*L33*((-m)-11)*(& ! &(-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((& ! &-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-2109& ! &0682613*L32*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)& ! &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& ! &**(m+1)*(m*rho+c)**((-m)-13)-51915526432*L31*((-m)-13)*((-m)-12)*& ! &((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*& ! &((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-& ! &m)-14)-114955808528*L30*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*(& ! &(-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((& ! &-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-2299& ! &11617056*L29*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((& ! &-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-& ! &m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-41671& ! &4805914*L28*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-& ! &m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-& ! &m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-& ! &17)-686353797976*L27*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m& ! &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-18)-1029530696964*L26*((-m)-18)*((-m)-17)*((-m& ! &)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)& ! &*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*(& ! &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-140883148005& ! &6*L25*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)& ! &*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-& ! &7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& ! &*(m+1)*(m*rho+c)**((-m)-20)-1761039350070*L24*((-m)-20)*((-m)-19)& ! &*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m& ! &)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-& ! &m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c& ! &)**((-m)-21)-2012616400080*L23*((-m)-21)*((-m)-20)*((-m)-19)*((-m& ! &)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& ! &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& ! &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& ! &-m)-22)-2104098963720*L22*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)& ! &*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m& ! &)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-& ! &m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c& ! &)**((-m)-23)-2012616400080*L21*((-m)-23)*((-m)-22)*((-m)-21)*((-m& ! &)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)& ! &*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-& ! &7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& ! &*(m+1)*(m*rho+c)**((-m)-24)-1761039350070*L20*((-m)-24)*((-m)-23)& ! &*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m& ! &)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)& ! &*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*(& ! &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-25)-140883148005& ! &6*L19*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)& ! &*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m& ! &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-26)-1029530696964*L18*((-m)-26)*((-m)-25)*((-m& ! &)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)& ! &*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m& ! &)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m& ! &)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-2& ! &7)-686353797976*L17*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)& ! &-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*& ! &((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)& ! &-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-& ! &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-28)-41671480& ! &5914*L16*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-& ! &23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*(& ! &(-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-& ! &10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& ! &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-29)-229911617& ! &056*L15*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-2& ! &4)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((& ! &-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-1& ! &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& ! &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-30)-& ! &114955808528*L14*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26& ! &)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-& ! &m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13& ! &)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& ! &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& ! &*rho+c)**((-m)-31)-51915526432*L13*((-m)-31)*((-m)-30)*((-m)-29)*& ! &((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)& ! &-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*& ! &((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)& ! &-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2& ! &)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-32)-21090682613*L12*((& ! &-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-2& ! &6)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((& ! &-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-1& ! &3)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)& ! &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& ! &m*rho+c)**((-m)-33)-7669339132*L11*((-m)-33)*((-m)-32)*((-m)-31)*& ! &((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)& ! &-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*& ! &((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)& ! &-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)& ! &-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-34& ! &)-2481256778*L10*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30& ! &)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-& ! &m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17& ! &)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& ! &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& ! &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-35)-708930& ! &508*L9*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30& ! &)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-& ! &m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17& ! &)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& ! &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& ! &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-36)-177232& ! &627*L8*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31& ! &)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-& ! &m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18& ! &)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-& ! &m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-& ! &m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-& ! &37)-38320568*L7*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)& ! &*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m& ! &)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)& ! &*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m& ! &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-38)-7059052*L6*((-m)-38)*((-m)-37)*((-m)-36)*(& ! &(-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-& ! &29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*(& ! &(-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-& ! &16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*(& ! &(-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-& ! &m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-39)-1086008*L5*((-& ! &m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33& ! &)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-& ! &m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20& ! &)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-& ! &m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*(& ! &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& ! &1)*(m*rho+c)**((-m)-40)-135751*L4*((-m)-40)*((-m)-39)*((-m)-38)*(& ! &(-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-& ! &31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*(& ! &(-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-& ! &18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*(& ! &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& ! &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& ! &)-41)-13244*L3*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*& ! &((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)& ! &-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*& ! &((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)& ! &-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*& ! &((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*(& ! &(-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-42)-946& ! &*L2*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*(& ! &(-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-& ! &30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*(& ! &(-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-& ! &17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*(& ! &(-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((& ! &-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-43)-44*L& ! &1*((-m)-43)*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-& ! &m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31& ! &)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-& ! &m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18& ! &)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-& ! &m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-& ! &m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-& ! &44)-L0*((-m)-44)*((-m)-43)*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39& ! &)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-& ! &m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26& ! &)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-& ! &m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13& ! &)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& ! &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& ! &*rho+c)**((-m)-45) ! if (deriv(i) .eq. 45) then ! L(i) = L45 ! cycle ! end if ! L46 = (-L45*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-45*L44*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-990*L43*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-3)-14190*L42*((-m)-3)*((-m)-2)*((-m)& ! &-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-148995*L41*((-m)-4)*((-m)-& ! &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-1221759*L& ! &40*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& ! &*rho+c)**((-m)-6)-8145060*L39*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-45379620*L3& ! &8*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*& ! &(m*rho)**(m+1)*(m*rho+c)**((-m)-8)-215553195*L37*((-m)-8)*((-m)-7& ! &)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**& ! &(m+1)*(m*rho+c)**((-m)-9)-886163135*L36*((-m)-9)*((-m)-8)*((-m)-7& ! &)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**& ! &(m+1)*(m*rho+c)**((-m)-10)-3190187286*L35*((-m)-10)*((-m)-9)*((-m& ! &)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-11)-10150595910*L34*((-m)-11)*& ! &((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*(& ! &(-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-287& ! &60021745*L33*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& ! &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& ! &)**(m+1)*(m*rho+c)**((-m)-13)-73006209045*L32*((-m)-13)*((-m)-12)& ! &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& ! &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& ! &-m)-14)-166871334960*L31*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*& ! &((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*(& ! &(-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-344& ! &867425584*L30*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*(& ! &(-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((& ! &-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-6466& ! &26422970*L29*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((& ! &-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((& ! &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& ! &-17)-1103068603890*L28*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((& ! &-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*& ! &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& ! &+1)*(m*rho+c)**((-m)-18)-1715884494940*L27*((-m)-18)*((-m)-17)*((& ! &-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-1& ! &0)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-2438362177& ! &020*L26*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-1& ! &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& ! &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& ! &)**(m+1)*(m*rho+c)**((-m)-20)-3169870830126*L25*((-m)-20)*((-m)-1& ! &9)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((& ! &-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*(& ! &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& ! &+c)**((-m)-21)-3773655750150*L24*((-m)-21)*((-m)-20)*((-m)-19)*((& ! &-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-1& ! &2)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-& ! &5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**& ! &((-m)-22)-4116715363800*L23*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-1& ! &9)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((& ! &-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*(& ! &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& ! &+c)**((-m)-23)-4116715363800*L22*((-m)-23)*((-m)-22)*((-m)-21)*((& ! &-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-1& ! &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& ! &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& ! &)**(m+1)*(m*rho+c)**((-m)-24)-3773655750150*L21*((-m)-24)*((-m)-2& ! &3)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((& ! &-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-1& ! &0)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-25)-3169870830& ! &126*L20*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-2& ! &0)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((& ! &-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*& ! &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& ! &+1)*(m*rho+c)**((-m)-26)-2438362177020*L19*((-m)-26)*((-m)-25)*((& ! &-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-1& ! &8)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((& ! &-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((& ! &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& ! &-27)-1715884494940*L18*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((& ! &-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-1& ! &7)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((& ! &-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-& ! &m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-28)-11030& ! &68603890*L17*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((& ! &-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-1& ! &7)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((& ! &-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-& ! &m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-29)-64662& ! &6422970*L16*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-& ! &m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18& ! &)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-& ! &m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-& ! &m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-& ! &30)-344867425584*L15*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m& ! &)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)& ! &*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m& ! &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-31)-166871334960*L14*((-m)-31)*((-m)-30)*((-m)& ! &-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*& ! &((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)& ! &-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*& ! &((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((& ! &-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-32)-73006209045*L& ! &13*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((& ! &-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-2& ! &0)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((& ! &-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*& ! &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& ! &+1)*(m*rho+c)**((-m)-33)-28760021745*L12*((-m)-33)*((-m)-32)*((-m& ! &)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)& ! &*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m& ! &)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& ! &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& ! &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& ! &-m)-34)-10150595910*L11*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*(& ! &(-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-& ! &24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*(& ! &(-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& ! &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& ! &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-35)& ! &-3190187286*L10*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)& ! &*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m& ! &)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)& ! &*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m& ! &)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m& ! &)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-3& ! &6)-886163135*L9*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)& ! &*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m& ! &)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)& ! &*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m& ! &)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-& ! &m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c& ! &)**((-m)-37)-215553195*L8*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)& ! &*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m& ! &)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)& ! &*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m& ! &)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*(& ! &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-38)-45379620*L7*((-m)-38)*((-m)-37)*& ! &((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)& ! &-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*& ! &((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)& ! &-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*& ! &((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*(& ! &(-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-39)-814& ! &5060*L6*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-3& ! &4)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((& ! &-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-2& ! &1)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((& ! &-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)& ! &*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(& ! &m*rho)**(m+1)*(m*rho+c)**((-m)-40)-1221759*L5*((-m)-40)*((-m)-39)& ! &*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m& ! &)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)& ! &*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m& ! &)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)& ! &*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6& ! &)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& ! &rho+c)**((-m)-41)-148995*L4*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-3& ! &8)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((& ! &-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-2& ! &5)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((& ! &-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-1& ! &2)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-& ! &5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**& ! &((-m)-42)-14190*L3*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-& ! &38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*(& ! &(-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-& ! &25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*(& ! &(-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& ! &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& ! &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& ! &*((-m)-43)-990*L2*((-m)-43)*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-3& ! &9)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((& ! &-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-2& ! &6)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((& ! &-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-1& ! &3)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)& ! &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& ! &m*rho+c)**((-m)-44)-45*L1*((-m)-44)*((-m)-43)*((-m)-42)*((-m)-41)& ! &*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m& ! &)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)& ! &*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m& ! &)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)& ! &*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)& ! &-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& ! &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-45)-L0*((-m)-45)*((-m)-44)*((-m& ! &)-43)*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)& ! &*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m& ! &)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)& ! &*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m& ! &)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)& ! &*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*& ! &((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-46) ! if (deriv(i) .eq. 46) then ! L(i) = L46 ! cycle ! end if ! L47 = (-L46*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-46*L45*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-1035*L44*((-m)-2)*((-m)-1)*(m& ! &*rho)**(m+1)*(m*rho+c)**((-m)-3)-15180*L43*((-m)-3)*((-m)-2)*((-m& ! &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-163185*L42*((-m)-4)*((-m)& ! &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-1370754*& ! &L41*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& ! &m*rho+c)**((-m)-6)-9366819*L40*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& ! &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-53524680*L& ! &39*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-8)-260932815*L38*((-m)-8)*((-m)-& ! &7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& ! &*(m+1)*(m*rho+c)**((-m)-9)-1101716330*L37*((-m)-9)*((-m)-8)*((-m)& ! &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& ! &**(m+1)*(m*rho+c)**((-m)-10)-4076350421*L36*((-m)-10)*((-m)-9)*((& ! &-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m& ! &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-11)-13340783196*L35*((-m)-11& ! &)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)& ! &*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-3& ! &8910617655*L34*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((& ! &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& ! &ho)**(m+1)*(m*rho+c)**((-m)-13)-101766230790*L33*((-m)-13)*((-m)-& ! &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& ! &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& ! &*((-m)-14)-239877544005*L32*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-1& ! &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& ! &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)-& ! &511738760544*L31*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11& ! &)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)& ! &*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-9& ! &91493848554*L30*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& ! &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& ! &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& ! &-m)-17)-1749695026860*L29*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)& ! &*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-& ! &7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& ! &*(m+1)*(m*rho+c)**((-m)-18)-2818953098830*L28*((-m)-18)*((-m)-17)& ! &*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m& ! &)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)& ! &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-4154246& ! &671960*L27*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m& ! &)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*(& ! &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-20)-5608233007146*L26*((-m)-20)*((-m& ! &)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)& ! &*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6& ! &)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& ! &rho+c)**((-m)-21)-6943526580276*L25*((-m)-21)*((-m)-20)*((-m)-19)& ! &*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m& ! &)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-& ! &m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c& ! &)**((-m)-22)-7890371113950*L24*((-m)-22)*((-m)-21)*((-m)-20)*((-m& ! &)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)& ! &*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6& ! &)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& ! &rho+c)**((-m)-23)-8233430727600*L23*((-m)-23)*((-m)-22)*((-m)-21)& ! &*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m& ! &)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*(& ! &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-24)-7890371113950*L22*((-m)-24)*((-m& ! &)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)& ! &*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m& ! &)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)& ! &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-25)-6943526& ! &580276*L21*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m& ! &)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)& ! &*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-& ! &7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)*& ! &*(m+1)*(m*rho+c)**((-m)-26)-5608233007146*L20*((-m)-26)*((-m)-25)& ! &*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m& ! &)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& ! &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& ! &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& ! &-m)-27)-4154246671960*L19*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)& ! &*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m& ! &)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)& ! &*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*& ! &((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-28)-28& ! &18953098830*L18*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)& ! &*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m& ! &)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)& ! &*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*& ! &((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-29)-17& ! &49695026860*L17*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)& ! &*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m& ! &)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& ! &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& ! &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& ! &-m)-30)-991493848554*L16*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*& ! &((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)& ! &-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*& ! &((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7& ! &)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**& ! &(m+1)*(m*rho+c)**((-m)-31)-511738760544*L15*((-m)-31)*((-m)-30)*(& ! &(-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-& ! &23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*(& ! &(-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-& ! &10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& ! &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-32)-239877544& ! &005*L14*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-2& ! &7)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((& ! &-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-1& ! &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& ! &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& ! &)**(m+1)*(m*rho+c)**((-m)-33)-101766230790*L13*((-m)-33)*((-m)-32& ! &)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-& ! &m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19& ! &)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-& ! &m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((& ! &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& ! &c)**((-m)-34)-38910617655*L12*((-m)-34)*((-m)-33)*((-m)-32)*((-m)& ! &-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*& ! &((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)& ! &-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*& ! &((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*& ! &((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-& ! &m)-35)-13340783196*L11*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((& ! &-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-2& ! &5)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((& ! &-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-1& ! &2)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-& ! &5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**& ! &((-m)-36)-4076350421*L10*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*& ! &((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)& ! &-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*& ! &((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)& ! &-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-& ! &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& ! &*(m*rho+c)**((-m)-37)-1101716330*L9*((-m)-37)*((-m)-36)*((-m)-35)& ! &*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m& ! &)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)& ! &*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m& ! &)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*& ! &((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((& ! &-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-38)-260932815*L8*((-m)-38)& ! &*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m& ! &)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)& ! &*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m& ! &)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)& ! &*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)& ! &*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((& ! &-m)-39)-53524680*L7*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)& ! &-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*& ! &((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)& ! &-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*& ! &((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)& ! &-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2& ! &)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-40)-9366819*L6*((-m)-4& ! &0)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((& ! &-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-2& ! &7)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((& ! &-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-1& ! &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& ! &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& ! &)**(m+1)*(m*rho+c)**((-m)-41)-1370754*L5*((-m)-41)*((-m)-40)*((-m& ! &)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)& ! &*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m& ! &)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)& ! &*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m& ! &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-42)-163185*L4*((-m)-42)*((-m)-41)*((-m)-40)*((& ! &-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-3& ! &3)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((& ! &-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-2& ! &0)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((& ! &-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*& ! &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& ! &+1)*(m*rho+c)**((-m)-43)-15180*L3*((-m)-43)*((-m)-42)*((-m)-41)*(& ! &(-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-& ! &34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*(& ! &(-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-& ! &21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*(& ! &(-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8& ! &)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*& ! &(m*rho)**(m+1)*(m*rho+c)**((-m)-44)-1035*L2*((-m)-44)*((-m)-43)*(& ! &(-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-& ! &36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*(& ! &(-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-& ! &23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*(& ! &(-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-& ! &10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& ! &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-45)-46*L1*((-& ! &m)-45)*((-m)-44)*((-m)-43)*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39& ! &)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-& ! &m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26& ! &)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-& ! &m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13& ! &)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& ! &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& ! &*rho+c)**((-m)-46)-L0*((-m)-46)*((-m)-45)*((-m)-44)*((-m)-43)*((-& ! &m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36& ! &)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-& ! &m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23& ! &)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-& ! &m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10& ! &)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*& ! &((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-47) ! if (deriv(i) .eq. 47) then ! L(i) = L47 ! cycle ! end if ! L48 = (-L47*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-47*L46*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-1081*L45*((-m)-2)*((-m)-1)*(m& ! &*rho)**(m+1)*(m*rho+c)**((-m)-3)-16215*L44*((-m)-3)*((-m)-2)*((-m& ! &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-178365*L43*((-m)-4)*((-m)& ! &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-1533939*& ! &L42*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& ! &m*rho+c)**((-m)-6)-10737573*L41*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-& ! &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-62891499*& ! &L40*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& ! &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-8)-314457495*L39*((-m)-8)*((-m)& ! &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& ! &**(m+1)*(m*rho+c)**((-m)-9)-1362649145*L38*((-m)-9)*((-m)-8)*((-m& ! &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& ! &)**(m+1)*(m*rho+c)**((-m)-10)-5178066751*L37*((-m)-10)*((-m)-9)*(& ! &(-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-& ! &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-11)-17417133617*L36*((-m)-1& ! &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& ! &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-& ! &52251400851*L35*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*(& ! &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-13)-140676848445*L34*((-m)-13)*((-m)& ! &-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m& ! &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& ! &**((-m)-14)-341643774795*L33*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& ! &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& ! &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)& ! &-751616304549*L32*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-1& ! &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& ! &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)-& ! &1503232609098*L31*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-1& ! &2)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-& ! &5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**& ! &((-m)-17)-2741188875414*L30*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-1& ! &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& ! &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& ! &)**(m+1)*(m*rho+c)**((-m)-18)-4568648125690*L29*((-m)-18)*((-m)-1& ! &7)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((& ! &-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-& ! &m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-69731& ! &99770790*L28*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((& ! &-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)& ! &*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(& ! &m*rho)**(m+1)*(m*rho+c)**((-m)-20)-9762479679106*L27*((-m)-20)*((& ! &-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-1& ! &3)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)& ! &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& ! &m*rho+c)**((-m)-21)-12551759587422*L26*((-m)-21)*((-m)-20)*((-m)-& ! &19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*(& ! &(-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-22)-14833897694226*L25*((-m)-22)*((-m)-21)*((-m)-20)*& ! &((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)& ! &-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-& ! &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& ! &*(m*rho+c)**((-m)-23)-16123801841550*L24*((-m)-23)*((-m)-22)*((-m& ! &)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)& ! &*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)& ! &-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& ! &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-24)-16123801841550*L23*((-m)-24& ! &)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-& ! &m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11& ! &)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)& ! &*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-25)-1& ! &4833897694226*L22*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-2& ! &1)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((& ! &-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)& ! &*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(& ! &m*rho)**(m+1)*(m*rho+c)**((-m)-26)-12551759587422*L21*((-m)-26)*(& ! &(-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-& ! &19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*(& ! &(-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-27)-9762479679106*L20*((-m)-27)*((-m)-26)*((-m)-25)*(& ! &(-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-& ! &18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*(& ! &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& ! &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& ! &)-28)-6973199770790*L19*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*(& ! &(-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-& ! &18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*(& ! &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& ! &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& ! &)-29)-4568648125690*L18*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*(& ! &(-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-& ! &19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*(& ! &(-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-30)-2741188875414*L17*((-m)-30)*((-m)-29)*((-m)-28)*(& ! &(-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-& ! &21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*(& ! &(-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8& ! &)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*& ! &(m*rho)**(m+1)*(m*rho+c)**((-m)-31)-1503232609098*L16*((-m)-31)*(& ! &(-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-& ! &24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*(& ! &(-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& ! &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& ! &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-32)& ! &-751616304549*L15*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-2& ! &8)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((& ! &-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-1& ! &5)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-& ! &m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)& ! &-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-33)-341643774795*L14*((-m)-33& ! &)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-& ! &m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20& ! &)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-& ! &m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*(& ! &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& ! &1)*(m*rho+c)**((-m)-34)-140676848445*L13*((-m)-34)*((-m)-33)*((-m& ! &)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)& ! &*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m& ! &)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)& ! &*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6& ! &)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*& ! &rho+c)**((-m)-35)-52251400851*L12*((-m)-35)*((-m)-34)*((-m)-33)*(& ! &(-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-& ! &26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*(& ! &(-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-& ! &13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m& ! &)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*& ! &(m*rho+c)**((-m)-36)-17417133617*L11*((-m)-36)*((-m)-35)*((-m)-34& ! &)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-& ! &m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21& ! &)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-& ! &m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*& ! &((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m& ! &*rho)**(m+1)*(m*rho+c)**((-m)-37)-5178066751*L10*((-m)-37)*((-m)-& ! &36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*(& ! &(-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-& ! &23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*(& ! &(-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-& ! &10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3& ! &)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-38)-136264914& ! &5*L9*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*& ! &((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)& ! &-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*& ! &((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)& ! &-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-& ! &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& ! &*(m*rho+c)**((-m)-39)-314457495*L8*((-m)-39)*((-m)-38)*((-m)-37)*& ! &((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)& ! &-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*& ! &((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)& ! &-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*& ! &((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*(& ! &(-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-40)-628& ! &91499*L7*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-& ! &35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*(& ! &(-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-& ! &22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*(& ! &(-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-& ! &9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)& ! &*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-41)-10737573*L6*((-m)-4& ! &1)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((& ! &-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-2& ! &8)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((& ! &-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-1& ! &5)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-& ! &m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)& ! &-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-42)-1533939*L5*((-m)-42)*((-m& ! &)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)& ! &*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m& ! &)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)& ! &*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m& ! &)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*& ! &((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((& ! &-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-43)-178365*L4*((-m)-43)*((& ! &-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-3& ! &6)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((& ! &-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-2& ! &3)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((& ! &-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-1& ! &0)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)& ! &*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-44)-16215*L3*(& ! &(-m)-44)*((-m)-43)*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-& ! &38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*(& ! &(-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-& ! &25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*(& ! &(-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& ! &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& ! &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& ! &*((-m)-45)-1081*L2*((-m)-45)*((-m)-44)*((-m)-43)*((-m)-42)*((-m)-& ! &41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*(& ! &(-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-& ! &28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*(& ! &(-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-& ! &15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((& ! &-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m& ! &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-46)-47*L1*((-m)-46)*((-m)-45& ! &)*((-m)-44)*((-m)-43)*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-& ! &m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32& ! &)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-& ! &m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19& ! &)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-& ! &m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((& ! &-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+& ! &c)**((-m)-47)-L0*((-m)-47)*((-m)-46)*((-m)-45)*((-m)-44)*((-m)-43& ! &)*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-& ! &m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30& ! &)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-& ! &m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17& ! &)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& ! &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& ! &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-48) ! if (deriv(i) .eq. 48) then ! L(i) = L48 ! cycle ! end if ! L49 = (-L48*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-48*L47*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-1128*L46*((-m)-2)*((-m)-1)*(m& ! &*rho)**(m+1)*(m*rho+c)**((-m)-3)-17296*L45*((-m)-3)*((-m)-2)*((-m& ! &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-194580*L44*((-m)-4)*((-m)& ! &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-1712304*& ! &L43*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& ! &m*rho+c)**((-m)-6)-12271512*L42*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-& ! &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-73629072*& ! &L41*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& ! &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-8)-377348994*L40*((-m)-8)*((-m)& ! &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& ! &**(m+1)*(m*rho+c)**((-m)-9)-1677106640*L39*((-m)-9)*((-m)-8)*((-m& ! &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& ! &)**(m+1)*(m*rho+c)**((-m)-10)-6540715896*L38*((-m)-10)*((-m)-9)*(& ! &(-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-& ! &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-11)-22595200368*L37*((-m)-1& ! &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& ! &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-& ! &69668534468*L36*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*(& ! &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-13)-192928249296*L35*((-m)-13)*((-m)& ! &-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m& ! &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& ! &**((-m)-14)-482320623240*L34*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& ! &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& ! &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)& ! &-1093260079344*L33*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& ! &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& ! &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)& ! &-2254848913647*L32*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& ! &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& ! &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& ! &*((-m)-17)-4244421484512*L31*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-& ! &14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-& ! &m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rh& ! &o)**(m+1)*(m*rho+c)**((-m)-18)-7309837001104*L30*((-m)-18)*((-m)-& ! &17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*(& ! &(-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((& ! &-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-1154& ! &1847896480*L29*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*& ! &((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-& ! &8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-20)-16735679449896*L28*((-m)-20)& ! &*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m& ! &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-21)-22314239266528*L27*((-m)-21)*((-m)-20)*((-& ! &m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13& ! &)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& ! &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& ! &*rho+c)**((-m)-22)-27385657281648*L26*((-m)-22)*((-m)-21)*((-m)-2& ! &0)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((& ! &-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*& ! &((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m& ! &+1)*(m*rho+c)**((-m)-23)-30957699535776*L25*((-m)-23)*((-m)-22)*(& ! &(-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-& ! &15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((& ! &-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m& ! &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-24)-32247603683100*L24*((-m)& ! &-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*& ! &((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)& ! &-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)& ! &-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-25& ! &)-30957699535776*L23*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m& ! &)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)& ! &*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)& ! &-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& ! &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-26)-27385657281648*L22*((-m)-26& ! &)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-& ! &m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13& ! &)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-& ! &6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m& ! &*rho+c)**((-m)-27)-22314239266528*L21*((-m)-27)*((-m)-26)*((-m)-2& ! &5)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((& ! &-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-1& ! &2)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-& ! &5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**& ! &((-m)-28)-16735679449896*L20*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-& ! &25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*(& ! &(-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& ! &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& ! &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& ! &*((-m)-29)-11541847896480*L19*((-m)-29)*((-m)-28)*((-m)-27)*((-m)& ! &-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*& ! &((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)& ! &-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-& ! &m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)& ! &*(m*rho+c)**((-m)-30)-7309837001104*L18*((-m)-30)*((-m)-29)*((-m)& ! &-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*& ! &((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)& ! &-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*(& ! &(-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-& ! &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-31)-4244421484512*L17*((-m)& ! &-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*& ! &((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)& ! &-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*& ! &((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*& ! &((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-& ! &m)-32)-2254848913647*L16*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*& ! &((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)& ! &-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*& ! &((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)& ! &-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2& ! &)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-33)-1093260079344*L15*& ! &((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)& ! &-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*& ! &((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)& ! &-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((& ! &-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*r& ! &ho)**(m+1)*(m*rho+c)**((-m)-34)-482320623240*L14*((-m)-34)*((-m)-& ! &33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*(& ! &(-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-& ! &20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*(& ! &(-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)& ! &*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& ! &m+1)*(m*rho+c)**((-m)-35)-192928249296*L13*((-m)-35)*((-m)-34)*((& ! &-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-2& ! &7)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((& ! &-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-1& ! &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& ! &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& ! &)**(m+1)*(m*rho+c)**((-m)-36)-69668534468*L12*((-m)-36)*((-m)-35)& ! &*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m& ! &)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)& ! &*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m& ! &)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*& ! &((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((& ! &-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-37)-22595200368*L11*((-m)-& ! &37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*(& ! &(-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-& ! &24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*(& ! &(-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& ! &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& ! &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-38)& ! &-6540715896*L10*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)& ! &*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m& ! &)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)& ! &*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m& ! &)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*(& ! &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-39)-1677106640*L9*((-m)-39)*((-m)-38& ! &)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-& ! &m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25& ! &)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-& ! &m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12& ! &)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5& ! &)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**(& ! &(-m)-40)-377348994*L8*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-& ! &m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30& ! &)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-& ! &m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17& ! &)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-& ! &m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m& ! &)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-41)-736290& ! &72*L7*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)& ! &*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m& ! &)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)& ! &*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m& ! &)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)& ! &*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*(& ! &(-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-42)-12271512*L6*& ! &((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)& ! &-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*& ! &((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)& ! &-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*& ! &((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)& ! &-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-& ! &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-43)-1712304*& ! &L5*((-m)-43)*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((& ! &-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-3& ! &1)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((& ! &-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-1& ! &8)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((& ! &-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((& ! &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& ! &-44)-194580*L4*((-m)-44)*((-m)-43)*((-m)-42)*((-m)-41)*((-m)-40)*& ! &((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)& ! &-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*& ! &((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)& ! &-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*& ! &((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7& ! &)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**& ! &(m+1)*(m*rho+c)**((-m)-45)-17296*L3*((-m)-45)*((-m)-44)*((-m)-43)& ! &*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m& ! &)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)& ! &*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m& ! &)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)& ! &*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m& ! &)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)& ! &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-46)-1128*L2& ! &*((-m)-46)*((-m)-45)*((-m)-44)*((-m)-43)*((-m)-42)*((-m)-41)*((-m& ! &)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)& ! &*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m& ! &)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)& ! &*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m& ! &)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*(& ! &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-47)-48*L1*((-m)-47)*((-m)-46)*((-m)-& ! &45)*((-m)-44)*((-m)-43)*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*(& ! &(-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-& ! &32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*(& ! &(-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-& ! &19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*(& ! &(-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-48)-L0*((-m)-48)*((-m)-47)*((-m)-46)*((-m)-45)*((-m)-& ! &44)*((-m)-43)*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*(& ! &(-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-& ! &31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*(& ! &(-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-& ! &18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*(& ! &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& ! &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& ! &)-49) ! if (deriv(i) .eq. 49) then ! L(i) = L49 ! cycle ! end if ! L50 = (-L49*(m*rho)**(m+1)*(m*rho+c)**((-m)-1))-49*L48*((-m)-1)& ! &*(m*rho)**(m+1)*(m*rho+c)**((-m)-2)-1176*L47*((-m)-2)*((-m)-1)*(m& ! &*rho)**(m+1)*(m*rho+c)**((-m)-3)-18424*L46*((-m)-3)*((-m)-2)*((-m& ! &)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-4)-211876*L45*((-m)-4)*((-m)& ! &-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-5)-1906884*& ! &L44*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& ! &m*rho+c)**((-m)-6)-13983816*L43*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-& ! &3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-7)-85900584*& ! &L42*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& ! &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-8)-450978066*L41*((-m)-8)*((-m)& ! &-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)& ! &**(m+1)*(m*rho+c)**((-m)-9)-2054455634*L40*((-m)-9)*((-m)-8)*((-m& ! &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& ! &)**(m+1)*(m*rho+c)**((-m)-10)-8217822536*L39*((-m)-10)*((-m)-9)*(& ! &(-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-& ! &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-11)-29135916264*L38*((-m)-1& ! &1)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4& ! &)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-12)-& ! &92263734836*L37*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*(& ! &(-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*& ! &rho)**(m+1)*(m*rho+c)**((-m)-13)-262596783764*L36*((-m)-13)*((-m)& ! &-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m& ! &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& ! &**((-m)-14)-675248872536*L35*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& ! &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& ! &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-15)& ! &-1575580702584*L34*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& ! &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& ! &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-16)& ! &-3348108992991*L33*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& ! &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& ! &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& ! &*((-m)-17)-6499270398159*L32*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-& ! &14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-& ! &m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rh& ! &o)**(m+1)*(m*rho+c)**((-m)-18)-11554258485616*L31*((-m)-18)*((-m)& ! &-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*& ! &((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*(& ! &(-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-19)-188& ! &51684897584*L30*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)& ! &*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)& ! &-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& ! &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-20)-28277527346376*L29*((-m)-20& ! &)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-& ! &m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*(& ! &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& ! &1)*(m*rho+c)**((-m)-21)-39049918716424*L28*((-m)-21)*((-m)-20)*((& ! &-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-1& ! &3)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)& ! &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& ! &m*rho+c)**((-m)-22)-49699896548176*L27*((-m)-22)*((-m)-21)*((-m)-& ! &20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*(& ! &(-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)& ! &*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(& ! &m+1)*(m*rho+c)**((-m)-23)-58343356817424*L26*((-m)-23)*((-m)-22)*& ! &((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)& ! &-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*(& ! &(-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-& ! &m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-24)-63205303218876*L25*((-m& ! &)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)& ! &*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m& ! &)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m& ! &)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-2& ! &5)-63205303218876*L24*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-& ! &m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15& ! &)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m& ! &)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-26)-58343356817424*L23*((-m)-2& ! &6)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((& ! &-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-1& ! &3)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)& ! &-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(& ! &m*rho+c)**((-m)-27)-49699896548176*L22*((-m)-27)*((-m)-26)*((-m)-& ! &25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*(& ! &(-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-& ! &12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)& ! &-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)*& ! &*((-m)-28)-39049918716424*L21*((-m)-28)*((-m)-27)*((-m)-26)*((-m)& ! &-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*& ! &((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)& ! &-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m& ! &)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)& ! &**((-m)-29)-28277527346376*L20*((-m)-29)*((-m)-28)*((-m)-27)*((-m& ! &)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)& ! &*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m& ! &)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((& ! &-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1& ! &)*(m*rho+c)**((-m)-30)-18851684897584*L19*((-m)-30)*((-m)-29)*((-& ! &m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22& ! &)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-& ! &m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)& ! &*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*(& ! &(-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-31)-11554258485616*L18*((& ! &-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-2& ! &5)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((& ! &-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-1& ! &2)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-& ! &5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**& ! &((-m)-32)-6499270398159*L17*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-2& ! &9)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((& ! &-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-1& ! &6)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((& ! &-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m& ! &)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-33)-3348108992991*L& ! &16*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((& ! &-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-2& ! &1)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((& ! &-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)& ! &*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(& ! &m*rho)**(m+1)*(m*rho+c)**((-m)-34)-1575580702584*L15*((-m)-34)*((& ! &-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-2& ! &7)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((& ! &-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-1& ! &4)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m& ! &)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho& ! &)**(m+1)*(m*rho+c)**((-m)-35)-675248872536*L14*((-m)-35)*((-m)-34& ! &)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-& ! &m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21& ! &)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-& ! &m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*& ! &((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m& ! &*rho)**(m+1)*(m*rho+c)**((-m)-36)-262596783764*L13*((-m)-36)*((-m& ! &)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)& ! &*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m& ! &)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)& ! &*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m& ! &)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-& ! &2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-37)-92263734836*L12*(& ! &(-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-& ! &31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*(& ! &(-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-& ! &18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*(& ! &(-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*(& ! &(-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m& ! &)-38)-29135916264*L11*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-& ! &m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28& ! &)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-& ! &m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15& ! &)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m& ! &)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-& ! &1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-39)-8217822536*L10*((-m)-39)*(& ! &(-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-& ! &32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*(& ! &(-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-& ! &19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*(& ! &(-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*& ! &((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rh& ! &o+c)**((-m)-40)-2054455634*L9*((-m)-40)*((-m)-39)*((-m)-38)*((-m)& ! &-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*& ! &((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)& ! &-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*& ! &((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)& ! &-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)& ! &-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-41& ! &)-450978066*L8*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*& ! &((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)& ! &-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*& ! &((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)& ! &-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*& ! &((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*(& ! &(-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-42)-859& ! &00584*L7*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-& ! &37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*(& ! &(-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-& ! &24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*(& ! &(-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-& ! &11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-& ! &4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-43)& ! &-13983816*L6*((-m)-43)*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((& ! &-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-3& ! &2)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((& ! &-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-1& ! &9)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((& ! &-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*(& ! &(-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho& ! &+c)**((-m)-44)-1906884*L5*((-m)-44)*((-m)-43)*((-m)-42)*((-m)-41)& ! &*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m& ! &)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)& ! &*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m& ! &)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)& ! &*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)& ! &-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1& ! &)*(m*rho)**(m+1)*(m*rho+c)**((-m)-45)-211876*L4*((-m)-45)*((-m)-4& ! &4)*((-m)-43)*((-m)-42)*((-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((& ! &-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-3& ! &1)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((& ! &-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-1& ! &8)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((& ! &-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((& ! &-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)& ! &-46)-18424*L3*((-m)-46)*((-m)-45)*((-m)-44)*((-m)-43)*((-m)-42)*(& ! &(-m)-41)*((-m)-40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-& ! &35)*((-m)-34)*((-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*(& ! &(-m)-28)*((-m)-27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-& ! &22)*((-m)-21)*((-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*(& ! &(-m)-15)*((-m)-14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-& ! &9)*((-m)-8)*((-m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)& ! &*((-m)-1)*(m*rho)**(m+1)*(m*rho+c)**((-m)-47)-1176*L2*((-m)-47)*(& ! &(-m)-46)*((-m)-45)*((-m)-44)*((-m)-43)*((-m)-42)*((-m)-41)*((-m)-& ! &40)*((-m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*(& ! &(-m)-33)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-& ! &27)*((-m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*(& ! &(-m)-20)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-& ! &14)*((-m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-& ! &m)-7)*((-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rh& ! &o)**(m+1)*(m*rho+c)**((-m)-48)-49*L1*((-m)-48)*((-m)-47)*((-m)-46& ! &)*((-m)-45)*((-m)-44)*((-m)-43)*((-m)-42)*((-m)-41)*((-m)-40)*((-& ! &m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33& ! &)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-& ! &m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20& ! &)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-& ! &m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*(& ! &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& ! &1)*(m*rho+c)**((-m)-49)-L0*((-m)-49)*((-m)-48)*((-m)-47)*((-m)-46& ! &)*((-m)-45)*((-m)-44)*((-m)-43)*((-m)-42)*((-m)-41)*((-m)-40)*((-& ! &m)-39)*((-m)-38)*((-m)-37)*((-m)-36)*((-m)-35)*((-m)-34)*((-m)-33& ! &)*((-m)-32)*((-m)-31)*((-m)-30)*((-m)-29)*((-m)-28)*((-m)-27)*((-& ! &m)-26)*((-m)-25)*((-m)-24)*((-m)-23)*((-m)-22)*((-m)-21)*((-m)-20& ! &)*((-m)-19)*((-m)-18)*((-m)-17)*((-m)-16)*((-m)-15)*((-m)-14)*((-& ! &m)-13)*((-m)-12)*((-m)-11)*((-m)-10)*((-m)-9)*((-m)-8)*((-m)-7)*(& ! &(-m)-6)*((-m)-5)*((-m)-4)*((-m)-3)*((-m)-2)*((-m)-1)*(m*rho)**(m+& ! &1)*(m*rho+c)**((-m)-50) ! if (deriv(i) .eq. 50) then ! L(i) = L50 ! cycle ! end if end do end subroutine laplace_pvf_E1 rstpm2/src/vuniroot.cpp0000644000176200001440000001535714706157711014705 0ustar liggesusers#include #include //[[Rcpp::export]] Rcpp::List vunirootRcpp(Rcpp::Function f, Rcpp::NumericVector lower, Rcpp::NumericVector upper, Rcpp::NumericVector fa, Rcpp::NumericVector fb, int numiter, double tol) { using namespace Rcpp; int size = lower.size(); NumericVector a(clone(lower)), b(clone(upper)), c(clone(a)), Tol(size,0.0); NumericVector fc(clone(fa)); LogicalVector converged(size,false); IntegerVector ns(size,-1); int i; /* First test if we have found a root at an endpoint */ for(i=0; i= tol_act /* If prev_step was large enough*/ && fabs(fa[i]) > fabs(fb[i]) ) { /* and was in true direction, * Interpolation may be tried */ double t1,cb,t2; cb = c[i]-b[i]; if( a[i]==c[i] ) { /* If we have only two distinct */ /* points linear interpolation */ t1 = fb[i]/fa[i]; /* can only be applied */ p = cb*t1; q = 1.0 - t1; } else { /* Quadric inverse interpolation*/ q = fa[i]/fc[i]; t1 = fb[i]/fc[i]; t2 = fb[i]/fa[i]; p = t2 * ( cb*q*(q-t1) - (b[i]-a[i])*(t1-1.0) ); q = (q-1.0) * (t1-1.0) * (t2-1.0); } if( p>(double)0 ) /* p was calculated with the */ q = -q; /* opposite sign; make p positive */ else /* and assign possible minus to */ p = -p; /* q */ if( p < (0.75*cb*q-fabs(tol_act*q)/2) /* If b+p/q falls in [b,c]*/ && p < fabs(prev_step*q/2) ) /* and isnt too large */ new_step = p/q; /* it is accepted * If p/q is too large then the * bisection procedure can * reduce [b,c] range to more * extent */ } if( fabs(new_step) < tol_act) { /* Adjust the step to be not less*/ if( new_step > (double)0 ) /* than tolerance */ new_step = tol_act; else new_step = -tol_act; } a[i] = b[i]; fa[i] = fb[i]; /* Save the previous approx. */ b[i] += new_step; // fb = (*f)(b, info); /* Do step to a new approxim. */ } } } if (is_true(all(converged))) break; fb = f(b); for(i=0; i 0 && fc[i] > 0) || (fb[i] < 0 && fc[i] < 0) ) { /* Adjust c for it to have a sign opposite to that of b */ c[i] = a[i]; fc[i] = fa[i]; } } } if (is_false(all(converged))) for (i=0; i 1 */ eps = sqrt(eps); for (int i=0; i t2[i] - (b[i] - a[i]) * .5) { any_failures = true; break; } } if (!any_failures) break; for (int i=0; i tol1[i]) { /* fit parabola */ r = (x[i] - w[i]) * (fx[i] - fv[i]); q = (x[i] - v[i]) * (fx[i] - fw[i]); p = (x[i] - v[i]) * q - (x[i] - w[i]) * r; q = (q - r) * 2.; if (q > 0.) p = -p; else q = -q; r = e[i]; e[i] = d[i]; } if (fabs(p) >= fabs(q * .5 * r) || p <= q * (a[i] - x[i]) || p >= q * (b[i] - x[i])) { /* a golden-section step */ if (x[i] < xm[i]) e[i] = b[i] - x[i]; else e[i] = a[i] - x[i]; d[i] = c * e[i]; } else { /* a parabolic-interpolation step */ d[i] = p / q; u[i] = x[i] + d[i]; /* f must not be evaluated too close to ax or bx */ if (u[i] - a[i] < t2[i] || b[i] - u[i] < t2[i]) { d[i] = tol1[i]; if (x[i] >= xm[i]) d[i] = -d[i]; } } /* f must not be evaluated too close to x */ if (fabs(d[i]) >= tol1[i]) u[i] = x[i] + d[i]; else if (d[i] > 0.) u[i] = x[i] + tol1[i]; else u[i] = x[i] - tol1[i]; } fu = f(u); /* update a, b, v, w, and x */ for (int i=0; i #include #include // #include #include #include /* * Natural Splines * --------------- * Here the end-conditions are determined by setting the second * derivative of the spline at the end-points to equal to zero. * * There are n-2 unknowns (y[i]'' at x[2], ..., x[n-1]) and n-2 * equations to determine them. Either Choleski or Gaussian * elimination could be used. */ static void natural_spline(int n, double *x, double *y, double *b, double *c, double *d) { int nm1, i; double t; x--; y--; b--; c--; d--; if(n < 2) { errno = EDOM; return; } if(n < 3) { t = (y[2] - y[1]); b[1] = t / (x[2]-x[1]); b[2] = b[1]; c[1] = c[2] = d[1] = d[2] = 0.0; return; } nm1 = n - 1; /* Set up the tridiagonal system */ /* b = diagonal, d = offdiagonal, c = right hand side */ d[1] = x[2] - x[1]; c[2] = (y[2] - y[1])/d[1]; for( i=2 ; i1 ; i--) c[i] = (c[i]-d[i]*c[i+1])/b[i]; /* End conditions */ c[1] = c[n] = 0.0; /* Get cubic coefficients */ b[1] = (y[2] - y[1])/d[1] - d[i] * c[2]; c[1] = 0.0; d[1] = c[2]/d[1]; b[n] = (y[n] - y[nm1])/d[nm1] + d[nm1] * c[nm1]; for(i=2 ; i 3) { c[1] = c[3]/(x[4]-x[2]) - c[2]/(x[3]-x[1]); c[n] = c[nm1]/(x[n] - x[n-2]) - c[n-2]/(x[nm1]-x[n-3]); c[1] = c[1]*d[1]*d[1]/(x[4]-x[1]); c[n] = -c[n]*d[nm1]*d[nm1]/(x[n]-x[n-3]); } /* Gaussian elimination */ for(i=2 ; i<=n ; i++) { t = d[i-1]/b[i-1]; b[i] = b[i] - t*d[i-1]; c[i] = c[i] - t*c[i-1]; } /* Backward substitution */ c[n] = c[n]/b[n]; for(i=nm1 ; i>=1 ; i--) c[i] = (c[i]-d[i]*c[i+1])/b[i]; /* c[i] is now the sigma[i-1] of the text */ /* Compute polynomial coefficients */ b[n] = (y[n] - y[n-1])/d[n-1] + d[n-1]*(c[n-1]+ 2.0*c[n]); for(i=1 ; i<=nm1 ; i++) { b[i] = (y[i+1]-y[i])/d[i] - d[i]*(c[i+1]+2.0*c[i]); d[i] = (c[i+1]-c[i])/d[i]; c[i] = 3.0*c[i]; } c[n] = 3.0*c[n]; d[n] = d[nm1]; return; } /* * Periodic Spline * --------------- * The end conditions here match spline (and its derivatives) * at x[1] and x[n]. * * Note: There is an explicit check that the user has supplied * data with y[1] equal to y[n]. */ static void periodic_spline(int n, double *x, double *y, double *b, double *c, double *d) { double s; int i, nm1; // double *e = (double *) R_alloc(n, sizeof(double)); arma::vec ev(n); double* e = ev.memptr(); /* Adjustment for 1-based arrays */ x--; y--; b--; c--; d--; e--; if(n < 2 || y[1] != y[n]) { errno = EDOM; return; } if(n == 2) { b[1] = b[2] = c[1] = c[2] = d[1] = d[2] = 0.0; return; } else if (n == 3) { b[1] = b[2] = b[3] = -(y[1] - y[2])*(x[1] - 2*x[2] + x[3])/(x[3]-x[2])/(x[2]-x[1]); c[1] = -3*(y[1]-y[2])/(x[3]-x[2])/(x[2]-x[1]); c[2] = -c[1]; c[3] = c[1]; d[1] = -2*c[1]/3/(x[2]-x[1]); d[2] = -d[1]*(x[2]-x[1])/(x[3]-x[2]); d[3] = d[1]; return; } /* else --------- n >= 4 --------- */ nm1 = n-1; /* Set up the matrix system */ /* A = diagonal B = off-diagonal C = rhs */ #define A b #define B d #define C c B[1] = x[2] - x[1]; B[nm1]= x[n] - x[nm1]; A[1] = 2.0 * (B[1] + B[nm1]); C[1] = (y[2] - y[1])/B[1] - (y[n] - y[nm1])/B[nm1]; for(i = 2; i < n; i++) { B[i] = x[i+1] - x[i]; A[i] = 2.0 * (B[i] + B[i-1]); C[i] = (y[i+1] - y[i])/B[i] - (y[i] - y[i-1])/B[i-1]; } /* Choleski decomposition */ #define L b #define M d #define E e L[1] = sqrt(A[1]); E[1] = (x[n] - x[nm1])/L[1]; s = 0.0; for(i = 1; i <= nm1 - 2; i++) { M[i] = B[i]/L[i]; if(i != 1) E[i] = -E[i-1] * M[i-1] / L[i]; L[i+1] = sqrt(A[i+1]-M[i]*M[i]); s = s + E[i] * E[i]; } M[nm1-1] = (B[nm1-1] - E[nm1-2] * M[nm1-2])/L[nm1-1]; L[nm1] = sqrt(A[nm1] - M[nm1-1]*M[nm1-1] - s); /* Forward Elimination */ #define Y c #define D c Y[1] = D[1]/L[1]; s = 0.0; for(i=2 ; i<=nm1-1 ; i++) { Y[i] = (D[i] - M[i-1]*Y[i-1])/L[i]; s = s + E[i-1] * Y[i-1]; } Y[nm1] = (D[nm1] - M[nm1-1] * Y[nm1-1] - s) / L[nm1]; #define X c X[nm1] = Y[nm1]/L[nm1]; X[nm1-1] = (Y[nm1-1] - M[nm1-1] * X[nm1])/L[nm1-1]; for(i=nm1-2 ; i>=1 ; i--) X[i] = (Y[i] - M[i] * X[i+1] - E[i] * X[nm1])/L[i]; /* Wrap around */ X[n] = X[1]; /* Compute polynomial coefficients */ for(i=1 ; i<=nm1 ; i++) { s = x[i+1] - x[i]; b[i] = (y[i+1]-y[i])/s - s*(c[i+1]+2.0*c[i]); d[i] = (c[i+1]-c[i])/s; c[i] = 3.0*c[i]; } b[n] = b[1]; c[n] = c[1]; d[n] = d[1]; return; } #undef A #undef B #undef C #undef L #undef M #undef E #undef Y #undef D #undef X /* These were the public interfaces */ static void spline_coef(int method, int n, double *x, double *y, double *b, double *c, double *d) { switch(method) { case 1: periodic_spline(n, x, y, b, c, d); break; case 2: natural_spline(n, x, y, b, c, d); break; case 3: fmm_spline(n, x, y, b, c, d); break; } } static void spline_eval(int method, int nu, double *u, double *v, int n, double *x, double *y, double *b, double *c, double *d) { /* Evaluate v[l] := spline(u[l], ...), l = 1,..,nu, i.e. 0:(nu-1) * Nodes x[i], coef (y[i]; b[i],c[i],d[i]); i = 1,..,n , i.e. 0:(*n-1) */ const int n_1 = n - 1; int i, j, k, l; double ul, dx, tmp; if(method == 1 && n > 1) { /* periodic */ dx = x[n_1] - x[0]; for(l = 0; l < nu; l++) { v[l] = fmod(u[l]-x[0], dx); if(v[l] < 0.0) v[l] += dx; v[l] += x[0]; } } else for(l = 0; l < nu; l++) v[l] = u[l]; for(l = 0, i = 0; l < nu; l++) { ul = v[l]; if(ul < x[i] || (i < n_1 && x[i+1] < ul)) { /* reset i such that x[i] <= ul <= x[i+1] : */ i = 0; j = n; do { k = (i+j)/2; if(ul < x[k]) j = k; else i = k; } while(j > i+1); } dx = ul - x[i]; /* for natural splines extrapolate linearly left */ tmp = (method == 2 && ul < x[0]) ? 0.0 : d[i]; v[l] = y[i] + dx*(b[i] + dx*(c[i] + dx*tmp)); } } class SplineCoef { public: SplineCoef(arma::vec x, arma::vec y, int method = 2) : x(x), y(y), method(method) { int n = x.n_elem; // if(y.n_elem != x.n_elem) REprintf("inputs of different lengths"); b.resize(n); c.resize(n); d.resize(n); b.zeros(); c.zeros(); d.zeros(); if (method==1 && y(0) != y(n-1)) y(n-1)=y(0); spline_coef(method, x.n_elem, x.memptr(), y.memptr(), b.memptr(), c.memptr(), d.memptr()); } arma::vec eval(arma::vec xout) { int nu = xout.n_elem; arma::vec yout(nu); spline_eval(method, nu, xout.memptr(), yout.memptr(), x.n_elem, x.memptr(), y.memptr(), b.memptr(), c.memptr(), d.memptr()); return yout; } double eval(double xout) { double yout; spline_eval(method, 1, &xout, &yout, x.n_elem, x.memptr(), y.memptr(), b.memptr(), c.memptr(), d.memptr()); return yout; } static arma::vec eval(double xout, std::vector& z); arma::vec x, y, b, c, d; int method; }; arma::vec SplineCoef::eval(double xout, std::vector& z) { arma::vec yout(z.size()); for (size_t i=0; i // struct is_resizeable // { // typedef boost::true_type type; // const static bool value = type::value; // }; // template <> // struct same_size_impl // { // static bool same_size(const arma::vec& x, const arma::vec& y) // { // return x.size() == y.size(); // } // }; // template<> // struct resize_impl // { // static void resize(arma::vec& v1, const arma::vec& v2) // { // v1.resize(v2.size()); // } // }; // } } } // namespace boost::numeric::odeint // typedef arma::vec state_type; // typedef std::vector vector_state_type; // typedef std::vector vector_times; // struct push_back_state_and_time // { // std::vector< state_type >& m_states; // std::vector< double >& m_times; // push_back_state_and_time( std::vector< state_type > &states , std::vector< double > × ) // : m_states( states ) , m_times( times ) { } // void operator()( const state_type &x , double t ) // { // m_states.push_back( x ); // m_times.push_back( t ); // } // }; // struct push_back_state // { // std::vector< state_type >& m_states; // push_back_state( std::vector< state_type > &states) // : m_states( states ) { } // void operator()( const state_type &x , double t ) // { // m_states.push_back( x ); // } // }; // struct Flow { // size_t from, to; // SplineCoef s; // std::vector gradients; // bool use_log; // }; // // old version of libarmadillo-dev: mat.as_col() not available // arma::vec flatten(arma::mat m) { // arma::vec v(m.n_cols*m.n_rows); // for (size_t j=0; j Flows; // Flows& flows; // double minTm; // size_t nStates, nGradients; // StateComponents stateComponents(const state_type& x) { // arma::vec P = x(arma::span(0,nStates-1)); // arma::vec L = x(arma::span(nStates,2*nStates-1)); // arma::mat gradP(arma::vec(x(arma::span(2*nStates,2*nStates+nStates*nGradients-1))).memptr(), // nStates, nGradients); // arma::mat gradL(arma::vec(x(arma::span(2*nStates+nStates*nGradients, // 2*nStates+2*nStates*nGradients-1))).memptr(), // nStates, nGradients); // return {P, L, gradP, gradL}; // } // Markov(Flows& flows, double minTm = 1.0e-8) : flows(flows), minTm(minTm) { // nGradients = nStates = 0; // for(size_t i=0; i::from(times); // state_type x = join_cols(p0, arma::zeros(model.nStates+2*model.nStates*model.nGradients)); // // BOOST_STATIC_ASSERT( is_resizeable::value == true ); // integrate_times(make_dense_output( 1.0e-10 , 1.0e-10 , runge_kutta_dopri5< state_type >() ), // model, x, // vtimes.begin(), // vtimes.end(), // 1.0, // push_back_state_and_time(states, outtimes)); // size_t nx = states[0].size(), nTimes = times.size(); // // combine the results // arma::mat combined(nTimes,nx); // for (size_t i=0; i(_y0); // arma::vec times = as(_times); // arma::vec tlam = as(_tlam); // arma::mat lam = as(_lam); // List gradients = as(_gradients); // arma::ivec from = as(_from); // arma::ivec to = as(_to); // LogicalVector use_logs = as(_use_logs); // double minTm = as(_minTm); // Markov::Flows flows; // for (size_t i=0; i vgradients; // arma::mat g = Rcpp::as(gradients[i]); // for (int j=0; j(P_); cube Pu = Rcpp::as(Pu_); cube Q = Rcpp::as(Q_); cube Qu = Rcpp::as(Qu_); int nstates = P.n_rows; int nobs=P.n_cols; int ncoef=Pu.n_cols; mat dPdt = P*0.0; // nstates,nobs cube dPudt = Pu*0.0; // nstates,ncoef,nobs for(int i=0; i::from(P.col(i)); vec rs = sum(Qi,1); for (int j=0; j::from(Pi*Qi); // is this valid? cube Qui = Qu(span::all, span::all, span(i,i)); Qui.reshape(nstates,nstates,ncoef); mat Pui = Pu.slice(i); for (int j=0; j(_y0); // arma::vec times = as(_times); // arma::mat Qmat = as(_Qmat); // ExpM model(Qmat); // using namespace boost::numeric::odeint; // vector_state_type states; // // times, outtimes and vtimes all have the same data // vector_times outtimes; // not strictly needed - we could use push_back_state() // vector_times vtimes = arma::conv_to< vector_times >::from(times); // // BOOST_STATIC_ASSERT( is_resizeable::value == true ); // integrate_times(make_dense_output( 1.0e-10 , 1.0e-10 , runge_kutta_dopri5< state_type >() ), // model, y0, // vtimes.begin(), // vtimes.end(), // 1.0, // push_back_state_and_time(states, outtimes)); // size_t nx = states[0].size(), nTimes = times.size(); // // combine the results // arma::mat combined(nTimes,nx); // for (size_t i=0; i #include #include #include namespace rstpm2 { using namespace arma; using namespace Rcpp; aft::aft(SEXP sexp) : ConstrBFGSx() { args = as(sexp); init = as(args("init")); X_vector = as>(args("X_list")); X_vector0 = as>(args("X_list0")); X = as(args("X")); XD = as(args("XD")); X0 = as(args("X0")); XD0 = as(args("XD0")); Xc = as(args("Xc")); gnodes = as(args("gnodes")); gweights = as(args("gweights")); bhazard = as(args("bhazard")); event = as(args("event")); time = as(args("time")); time0 = as(args("time0")); boundaryKnots = as(args("boundaryKnots")); interiorKnots = as(args("interiorKnots")); q_matrix = as(args("q.const")); cure = as(args("cure")); mixture = as(args("mixture")); tvc_integrated = as(args("tvc.integrated")); add_penalties = as(args("add.penalties")); s = ns(boundaryKnots, interiorKnots, q_matrix, 1, cure); kappa = 1.0e3; eps1 = 1.0e-100; delayed = arma::find(time0>0.0); } mat aft::rmult(mat m, vec v) { mat out(m); out.each_col() %= v; return out; } mat aft::rmult(mat m, uvec v) { mat out(m); out.each_col() %= conv_to::from(v); return out; } double aft::objective(vec betafull) { if (tvc_integrated==1) return objective_integrated(betafull); else return objective_cumulative(betafull); } vec aft::gradient(vec betafull) { if (tvc_integrated==1) return gradient_integrated(betafull); else return gradient_cumulative(betafull); } double aft::objective_integrated(vec betafull) { double ll = 0.0; vec beta, betac, betas, etac; if (X.n_cols > 0) { if (mixture) { beta = betafull.subvec(0,X.n_cols-1); betac = betafull.subvec(X.n_cols, X.n_cols + Xc.n_cols - 1); betas = betafull.subvec(X.n_cols+Xc.n_cols, betafull.size()-1); } else { beta = betafull.subvec(0,X.n_cols-1); betas = betafull.subvec(X.n_cols, betafull.size()-1); } vec tstar = time*0.0; vec scale = time/2.0; // Can this be done more efficiently using a cube? for(size_t i=0; i0.0) ll=-100.0; return -ll; } double aft::objective_cumulative(vec betafull) { double ll = 0.0; vec beta, betac, betas, etac; if (X.n_cols>0) { if (mixture) { beta = betafull.subvec(0,X.n_cols-1); betac = betafull.subvec(X.n_cols, X.n_cols + Xc.n_cols - 1); betas = betafull.subvec(X.n_cols+Xc.n_cols, betafull.size()-1); } else { beta = betafull.subvec(0,X.n_cols-1); betas = betafull.subvec(X.n_cols, betafull.size()-1); } vec eta = X * beta; vec etaD = XD * beta; vec logtstar = log(time) - eta; vec etas = s.basis(logtstar) * betas; vec etaDs = s.basis(logtstar,1) * betas; vec etaDs_old = etaDs; // fix bounds on etaDs vec eps = etaDs*0. + eps1; double pens = dot(min(etaDs,eps), min(etaDs,eps)); etaDs = max(etaDs, eps); // replacement // fix bounds on etaD double pen = dot(min(1.0-etaD,eps), min(1-etaD,eps)); etaD = 1.0 - max(1.0-etaD, eps); // replacement // add penalty for monotone splines vec betasStar = s.q_matrix.t() * betas; for (size_t i=1; i0) { if (mixture) { beta = betafull.subvec(0,X.n_cols-1); betac = betafull.subvec(X.n_cols, X.n_cols + Xc.n_cols - 1); betas = betafull.subvec(X.n_cols+Xc.n_cols, betafull.size()-1); } else { beta = betafull.subvec(0,X.n_cols-1); betas = betafull.subvec(X.n_cols, betafull.size()-1); } vec tstar = time*0.0; mat Xtstar = X*0.0; vec scale = time/2.0; // Can this be done more efficiently using a cube? for(size_t i=0; i0) { if (mixture) { beta = betafull.subvec(0,X.n_cols-1); betac = betafull.subvec(X.n_cols, X.n_cols + Xc.n_cols - 1); betas = betafull.subvec(X.n_cols+Xc.n_cols, betafull.size()-1); } else { beta = betafull.subvec(0,X.n_cols-1); betas = betafull.subvec(X.n_cols, betafull.size()-1); } vec eta = X * beta; vec etaD = XD * beta; vec etaD_old = etaD; vec logtstar = log(time) - eta; vec tstar = exp(logtstar); mat Xs = s.basis(logtstar); mat XDs = s.basis(logtstar,1); mat XDDs = s.basis(logtstar,2); vec etas = Xs * betas; vec etaDs = XDs * betas; vec etaDs_old = etaDs; vec etaDDs = XDDs * betas; // H calculations vec H = exp(etas); mat dHdbeta = -rmult(X,H % etaDs); mat dHdbetas = rmult(Xs,H); // penalties vec eps = etaDs*0. + eps1; uvec pindexs = (etaDs < eps); uvec pindex = ((1.0 - etaD) < eps); // fix bounds on etaDs mat pgrads = join_rows(2.0*rmult(X,etaDs % etaDDs),-2*rmult(XDs,etaDs)); // fix bounds on etaD mat pgrad = join_rows(2.0*rmult(XD,1-etaD),Xs*0.0); etaDs = max(etaDs, eps); etaD = 1 - max(1-etaD, eps); vec logh = etas + log(etaDs) + log(1/time -etaD/time); vec h = exp(logh); vec ht_scale = h / (h + bhazard); mat dloghdbetas = Xs+rmult(XDs,1/etaDs); mat dloghdbeta = -rmult(X,etaDDs/etaDs) - rmult(X,etaDs_old) - rmult(XD, 1/(1-etaD_old) % (1-pindex)); if (add_penalties) { dloghdbetas = Xs+rmult(XDs,1/etaDs % (1-pindexs)); dloghdbeta = -rmult(X,etaDDs/etaDs % (1-pindexs)) - rmult(X,etaDs_old) - rmult(XD, 1/(1-etaD_old) % (1-pindex)); } mat gradi = join_rows(rmult(dloghdbeta,event % ht_scale)-dHdbeta, rmult(dloghdbetas,event % ht_scale)-dHdbetas) + rmult(pgrad,pindex); if (add_penalties) gradi += rmult(pgrads,pindexs); gr = sum(gradi,0).t(); if (add_penalties) gr -= join_cols(beta*0.0, gradientPenalty(s.q_matrix.t(), betas)); if (mixture) { etac = Xc * betac; vec cure_frac = exp(etac)/(1.0+exp(etac)); vec S_mix = cure_frac + (1.0-cure_frac) % exp(-H); vec H_mix = -log(S_mix); vec h_mix = max(eps,(1.0-cure_frac) % exp(-H) % h / S_mix); ht_scale = h_mix / (h_mix + bhazard); mat dpidtheta = rmult(Xc, cure_frac % (1-cure_frac)); mat dHdbeta_mix = rmult(dHdbeta,(1.0 - cure_frac) % exp(-H) / S_mix); mat dHdbetas_mix = rmult(dHdbetas,(1.0 - cure_frac) % exp(-H) / S_mix); mat dHdtheta_mix = -rmult(dpidtheta, (1.0 - exp(-H))/S_mix); mat dloghdbeta_mix = dloghdbeta - dHdbeta + dHdbeta_mix; mat dloghdbetas_mix = dloghdbetas - dHdbetas + dHdbetas_mix; mat dloghdtheta_mix = dHdtheta_mix - rmult(dpidtheta,1.0 / (1.0 - cure_frac)); mat pgrads = join_rows(X*0.0,Xc*0.0,-2*rmult(XDs,etaDs_old)); mat pgrad = join_rows(2.0*rmult(X,etaDs_old % etaDDs)+2.0*rmult(XD,1-etaD_old),Xc*0.0,Xs*0.0); gradi = join_rows(rmult(dloghdbeta_mix,event % ht_scale)-dHdbeta_mix, rmult(dloghdtheta_mix,event % ht_scale)-dHdtheta_mix, rmult(dloghdbetas_mix,event % ht_scale)-dHdbetas_mix) + rmult(pgrad,pindex) ; if (add_penalties) gradi += rmult(pgrads,pindexs); gr = sum(gradi,0).t(); if (add_penalties) gr -= join_cols(beta*0.0, betac*0.0, gradientPenalty(s.q_matrix.t(), betas)); } if (any(delayed)) { vec eta0 = X0 * beta; vec etaD0 = XD0 * beta; vec etaD0_old = etaD0; vec logtstar0 = log(time0(delayed)) - eta0; mat Xs0 = s.basis(logtstar0); mat XDs0 = s.basis(logtstar0,1); mat XDDs0 = s.basis(logtstar0,2); vec etas0 = Xs0 * betas; vec etaDs0 = XDs0 * betas; vec etaDs0_old = etaDs0; vec etaDDs0 = XDDs0 * betas; vec H0 = exp(etas0); mat dHdbetas0 = rmult(Xs0,H0); mat dHdbeta0 = -rmult(X0,H0 % etaDs0); vec eps0 = etaDs0*0. + eps1; uvec pindex0 = ((1.0/time0(delayed) - etaD0) < eps0); uvec pindexs0 = (etaDs0 < eps0); etaDs0 = max(etaDs0, eps0); etaD0 = 1 - max(1-etaD0, eps0); if (!mixture) { mat pgrad0 = join_rows(2.0*rmult(X0,etaDs0_old % etaDDs0)+2.0*rmult(XD0,1-etaD0_old),Xs0*0.0); mat pgrads0 = join_rows(X0*0.0,-2*rmult(XDs0,etaDs0_old)); gr += sum(join_rows(dHdbeta0, dHdbetas0) + rmult(pgrad0,pindex0), 0).t(); if (add_penalties) gr += sum(rmult(pgrads0,pindexs0), 0).t(); } else { mat Xc0 = Xc.rows(delayed); vec etac0 = Xc0 * betac; vec cure_frac0 = exp(etac0)/(1.0+exp(etac0)); vec S_mix0 = cure_frac0 + (1.0-cure_frac0) % exp(-H0); vec H_mix0 = -log(S_mix0); mat dpidtheta0 = rmult(Xc.rows(delayed), cure_frac0 % (1-cure_frac0)); mat dHdbeta_mix0 = rmult(dHdbeta0,(1.0 - cure_frac0) % exp(-H0) / S_mix0); mat dHdbetas_mix0 = rmult(dHdbetas0,(1.0 - cure_frac0) % exp(-H0) / S_mix0); mat dHdtheta_mix0 = -rmult(dpidtheta0, (1.0 - exp(-H0))/S_mix0); mat pgrad0 = join_rows(2.0*rmult(X0,etaDs0_old % etaDDs0)+2.0*rmult(XD0,1-etaD0), Xc0*0.0,Xs0*0.0); mat pgrads0 = join_rows(X0*0.0,Xc0*0.0,-2*rmult(XDs0,etaDs0_old)); gr += sum(join_rows(dHdbeta_mix0, dHdtheta_mix0, dHdbetas_mix0) + rmult(pgrad0,pindex0), 0).t(); if (add_penalties) gr += sum(rmult(pgrads0,pindexs0), 0).t(); } } } else { // X.n_cols==0 if (mixture) { betac = betafull.subvec(X.n_cols, X.n_cols + Xc.n_cols - 1); betas = betafull.subvec(X.n_cols+Xc.n_cols, betafull.size()-1); } else { betas = betafull.subvec(X.n_cols, betafull.size()-1); } vec eta = time*0.0; vec etaD = time*0.0; vec etaD_old = etaD; vec logtstar = log(time) - eta; vec tstar = exp(logtstar); mat Xs = s.basis(logtstar); mat XDs = s.basis(logtstar,1); mat XDDs = s.basis(logtstar,2); vec etas = Xs * betas; vec etaDs = XDs * betas; vec etaDs_old = etaDs; vec etaDDs = XDDs * betas; // H calculations vec H = exp(etas); mat dHdbetas = rmult(Xs,H); // penalties vec eps = etaDs*0. + eps1; uvec pindexs = (etaDs < eps); uvec pindex = ((1.0 - etaD) < eps); // fix bounds on etaDs mat pgrads = -2*rmult(XDs,etaDs); // fix bounds on etaD mat pgrad = Xs*0.0; etaDs = max(etaDs, eps); etaD = 1 - max(1-etaD, eps); vec logh = etas + log(etaDs) + log(1/time -etaD/time); vec h = exp(logh); vec ht_scale = h / (h + bhazard); mat dloghdbetas = Xs+rmult(XDs,1/etaDs); if (add_penalties) { dloghdbetas = Xs+rmult(XDs,1/etaDs % (1-pindexs)); } mat gradi = rmult(dloghdbetas,event % ht_scale)-dHdbetas + rmult(pgrad,pindex); if (add_penalties) gradi += rmult(pgrads,pindexs); gr = sum(gradi,0).t(); if (add_penalties) gr -= gradientPenalty(s.q_matrix.t(), betas); if (mixture) { etac = Xc * betac; vec cure_frac = exp(etac)/(1.0+exp(etac)); vec S_mix = cure_frac + (1.0-cure_frac) % exp(-H); vec H_mix = -log(S_mix); vec h_mix = max(eps,(1.0-cure_frac) % exp(-H) % h / S_mix); ht_scale = h_mix / (h_mix + bhazard); mat dpidtheta = rmult(Xc, cure_frac % (1-cure_frac)); mat dHdbetas_mix = rmult(dHdbetas,(1.0 - cure_frac) % exp(-H) / S_mix); mat dHdtheta_mix = -rmult(dpidtheta, (1.0 - exp(-H))/S_mix); mat dloghdbetas_mix = dloghdbetas - dHdbetas + dHdbetas_mix; mat dloghdtheta_mix = dHdtheta_mix - rmult(dpidtheta,1.0 / (1.0 - cure_frac)); mat pgrads = join_rows(Xc*0.0,-2*rmult(XDs,etaDs_old)); mat pgrad = join_rows(Xc*0.0,Xs*0.0); gradi = join_rows(rmult(dloghdtheta_mix,event % ht_scale)-dHdtheta_mix, rmult(dloghdbetas_mix,event % ht_scale)-dHdbetas_mix) + rmult(pgrad,pindex) ; if (add_penalties) gradi += rmult(pgrads,pindexs); gr = sum(gradi,0).t(); if (add_penalties) gr -= join_cols(betac*0.0, gradientPenalty(s.q_matrix.t(), betas)); } if (any(delayed)) { vec eta0 = time0(delayed)*0.0; vec etaD0 = time0(delayed)*0.0; vec etaD0_old = etaD0; vec logtstar0 = log(time0(delayed)) - eta0; mat Xs0 = s.basis(logtstar0); mat XDs0 = s.basis(logtstar0,1); mat XDDs0 = s.basis(logtstar0,2); vec etas0 = Xs0 * betas; vec etaDs0 = XDs0 * betas; vec etaDs0_old = etaDs0; vec etaDDs0 = XDDs0 * betas; vec H0 = exp(etas0); mat dHdbetas0 = rmult(Xs0,H0); mat dHdbeta0 = -rmult(X0,H0 % etaDs0); vec eps0 = etaDs0*0. + eps1; uvec pindex0 = ((1.0/time0(delayed) - etaD0) < eps0); uvec pindexs0 = (etaDs0 < eps0); etaDs0 = max(etaDs0, eps0); etaD0 = 1 - max(1-etaD0, eps0); if (!mixture) { mat pgrad0 = Xs0*0.0; mat pgrads0 = -2*rmult(XDs0,etaDs0_old); gr += sum(dHdbetas0 + rmult(pgrad0,pindex0), 0).t(); if (add_penalties) gr += sum(rmult(pgrads0,pindexs0), 0).t(); } else { mat Xc0 = Xc.rows(delayed); vec etac0 = Xc0 * betac; vec cure_frac0 = exp(etac0)/(1.0+exp(etac0)); vec S_mix0 = cure_frac0 + (1.0-cure_frac0) % exp(-H0); vec H_mix0 = -log(S_mix0); mat dpidtheta0 = rmult(Xc.rows(delayed), cure_frac0 % (1-cure_frac0)); mat dHdbetas_mix0 = rmult(dHdbetas0,(1.0 - cure_frac0) % exp(-H0) / S_mix0); mat dHdtheta_mix0 = -rmult(dpidtheta0, (1.0 - exp(-H0))/S_mix0); mat pgrad0 = join_rows(Xc0*0.0,Xs0*0.0); mat pgrads0 = join_rows(Xc0*0.0,-2*rmult(XDs0,etaDs0_old)); gr += sum(join_rows(dHdtheta_mix0, dHdbetas_mix0) + rmult(pgrad0,pindex0), 0).t(); if (add_penalties) gr += sum(rmult(pgrads0,pindexs0), 0).t(); } } } return -gr; } double aft::objective(NumericVector betafull) { return objective(as(wrap(betafull))); } NumericVector aft::gradient(NumericVector betafull) { vec value = gradient(as(wrap(betafull))); return as(wrap(value)); } // vec aft::survival(vec time, mat X) { // vec beta = init.subvec(0,X.n_cols-1); // vec betas = init.subvec(X.n_cols,init.size()-1); // vec eta = X * beta; // vec logtstar = log(time) - eta; // vec etas = s.basis(logtstar) * betas; // vec S = exp(-exp(etas)); // return S; // } // vec aft::haz(vec time, mat X, mat XD) // { // vec beta = init.subvec(0,X.n_cols-1); // vec betas = init.subvec(X.n_cols,init.size()-1); // vec eta = X * beta; // vec etaD = XD * beta; // vec logtstar = log(time) - eta; // mat Xs = s.basis(logtstar); // mat XDs = s.basis(logtstar,1); // mat XDDs = s.basis(logtstar,2); // vec etas = Xs * betas; // vec etaDs = XDs * betas; // vec etaDDs = XDDs * betas; // // penalties // vec eps = etaDs*0. + eps1; // uvec pindexs = (etaDs < eps); // uvec pindex = ((1.0/time - etaD) < eps); // // fix bounds on etaDs // etaDs = max(etaDs, eps); // // fix bounds on etaD // etaD = 1/time - max(1/time-etaD, eps); // vec logh = etas + log(etaDs) + log(1/time -etaD); // vec h = exp(logh); // return h; // } // mat aft::gradh(vec time, mat X, mat XD) // { // vec beta = init.subvec(0,X.n_cols-1); // vec betas = init.subvec(X.n_cols,init.size()-1); // vec eta = X * beta; // vec etaD = XD * beta; // vec logtstar = log(time) - eta; // mat Xs = s.basis(logtstar); // mat XDs = s.basis(logtstar,1); // mat XDDs = s.basis(logtstar,2); // vec etas = Xs * betas; // vec etaDs = XDs * betas; // vec etaDDs = XDDs * betas; // // penalties // vec eps = etaDs*0. + eps1; // uvec pindexs = (etaDs < eps); // uvec pindex = ((1.0/time - etaD) < eps); // // fix bounds on etaDs // etaDs = max(etaDs, eps); // // fix bounds on etaD // etaD = 1/time - max(1/time-etaD, eps); // vec logh = etas + log(etaDs) + log(1/time -etaD); // vec h = exp(logh); // mat dloghdbetas = Xs+rmult(XDs,1/etaDs % (1-pindexs)); // mat dloghdbeta = -rmult(X,etaDs % (1-pindexs) % (1-pindex)) - rmult(X,etaDDs/etaDs % (1-pindexs) % (1-pindex)) - rmult(XD, (1-pindexs) % (1-pindex)/(1/time-etaD)); // mat gradh = join_rows(rmult(dloghdbeta,h), rmult(dloghdbetas,h)); // return gradh; // } RcppExport SEXP aft_model_output(SEXP args) { aft model(args); List list = as(args); std::string return_type = as(list["return_type"]); if (return_type == "nmmin") { // model.pre_process(); NelderMead nm; nm.trace = as(list("trace")); nm.maxit = as(list("maxit")); nm.reltol = as(list("reltol")); NumericVector betafull = as(wrap(model.init)); nm.optim(betafull,model); // model.post_process(); return List::create(_("fail")=nm.fail, _("coef")=wrap(nm.coef), _("hessian")=wrap(nm.hessian)); } else if (return_type == "vmmin") { model.trace = as(list("trace")); model.maxit = as(list("maxit")); model.reltol = as(list("reltol")); NumericVector betafull = as(wrap(model.init)); model.optim(betafull); if (as(list("constrOptim"))) { betafull = as(wrap(model.coef)); // nudge this slightly... for (int i=0; i(list("ui")), as(list("ci")), 1.0e-10, 100, 1.0e-10); } // model.post_process(); return List::create(_("fail")=model.fail, _("coef")=wrap(model.coef), _("hessian")=wrap(model.hessian)); } // else if (return_type == "vmmin") { // // model.pre_process(); // BFGS bfgs; // bfgs.trace = as(list("trace")); // bfgs.maxit = as(list("maxit")); // bfgs.reltol = as(list("reltol")); // NumericVector betafull = as(wrap(model.init)); // bfgs.optim(betafull,model); // // model.post_process(); // return List::create(_("fail")=bfgs.fail, // _("coef")=wrap(bfgs.coef), // _("hessian")=wrap(bfgs.hessian)); // } else if (return_type == "objective") return wrap(model.objective(model.init)); else if (return_type == "gradient") return wrap(model.gradient(model.init)); // else if (return_type == "survival") // return wrap(model.survival(as(list("time")),as(list("X")))); // else if (return_type == "haz") // return wrap(model.haz(as(list("time")),as(list("X")),as(list("XD")))); // else if (return_type == "gradh") // return wrap(model.gradh(as(list("time")),as(list("X")),as(list("XD")))); else { REprintf("Unknown return_type.\n"); return wrap(-1); } } } // namespace rstpm2 rstpm2/src/test-nmmin.cpp0000644000176200001440000030347415053623305015104 0ustar liggesusers#include #include #include #include "c_optim.h" #ifdef DO_PROF #include #include #include #include #include #endif namespace rstpm2 { // import namespaces using namespace Rcpp; using namespace arma; // typedefs typedef bool constraintfn(int, double *, void *); // enums enum IntervalCensoring {RightCensored, ExactTime, LeftCensored, IntervalCensored}; // structs struct li_constraint { vec li; double constraint; }; struct gradli_constraint { mat gradli; mat constraint; }; li_constraint operator+(li_constraint const &left, li_constraint const &right) { li_constraint out = {left.li+right.li,left.constraint+right.constraint}; return out; } gradli_constraint operator+(gradli_constraint const &left, gradli_constraint const &right) { gradli_constraint out = {left.gradli+right.gradli,left.constraint+right.constraint}; return out; } // constants const double log2pi = std::log(2.0 * M_PI); // // Hadamard element-wise multiplication for the _columns_ of a matrix with a vector mat rmult(mat const &m, vec const &v) { mat out(m); out.each_col() %= v; return out; } mat lmult(vec const &v, mat const &m) { return rmult(m, v); } // print utilities void Rprint(NumericMatrix const & m) { for (int i=0; i -10){ double const dv = R::dnorm(xv, 0, 1 , 0L), pv = R::pnorm(xv, 0, 1, 1L, 0L); o = dv / pv; } else { double const log_dv = R::dnorm(xv, 0, 1 , 1L), log_pv = R::pnorm(xv, 0, 1, 1L, 1L); o = std::exp(log_dv - log_pv); } } return out; } vec qnorm01(vec const &x) { vec out(x.size()); double const *xi = x.begin(); for(double &o : out) o = R::qnorm(*xi++, 0, 1, true, false); return out; } vec dnorm01(vec const &x) { vec out(x.size()); double const *xi = x.begin(); for(double &o : out) o = R::dnorm(*xi++, 0, 1, false); return out; } // we could use templates for the following... vec logit(vec const & p) { return log(p/(1-p)); } vec expit(vec const & x) { return 1/(1+exp(-x)); } double logit(double p) { return log(p/(1-p)); } double expit(double x) { return 1/(1+exp(-x)); } // utility for fast ragged sums RcppExport SEXP tapplySum(SEXP s_y, SEXP s_group) { NumericVector y(s_y); NumericVector group(s_group); NumericVector::iterator iy, igroup; std::map out; for (iy = y.begin(), igroup = group.begin(); iy != y.end(); ++iy, ++igroup) { out[*igroup] += *iy; } return wrap(out); } // https://github.com/RcppCore/rcpp-gallery/issues/123#issue-553642056 arma::vec dmvnrm_arma(arma::mat const &x, arma::rowvec const &mean, arma::mat const &sigma, bool const logd = false) { int n = x.n_rows; int xdim = x.n_cols; arma::vec out(n); arma::mat const rooti = arma::inv(trimatu(arma::chol(sigma))); double const rootisum = arma::sum(log(rooti.diag())), constants = -xdim/2.0 * log2pi, other_terms = rootisum + constants; arma::rowvec z; for (int i=0; i < n; i++) { z = (x.row(i) - mean) * rooti; out(i) = other_terms - 0.5 * arma::dot(z, z); } if (logd == false) out = exp(out); return(out); } double dmvnrm_arma(arma::vec const &x, arma::vec const &mean, arma::mat const &sigma, bool const logd = false) { int xdim = x.n_elem; arma::mat const rooti = arma::inv(trimatu(arma::chol(sigma))); double const rootisum = arma::sum(log(rooti.diag())), constants = -xdim/2.0 * log2pi, other_terms = rootisum + constants; auto z = (x - mean).t() * rooti; double out = other_terms - 0.5 * arma::dot(z, z); if (logd == false) out = exp(out); return(out); } class Link { public: virtual vec link(vec const &S) const = 0; virtual vec ilink(vec const &x) const = 0; virtual vec h(vec const &eta, vec const &etaD) const = 0; virtual vec H(vec const &eta) const = 0; virtual mat gradH(vec const &eta, mat const &X) const = 0; virtual mat gradh(vec const &eta, vec const &etaD, mat const &X, mat const &XD) const = 0; virtual ~Link() { } }; // Various link objects class LogLogLink final : public Link { public: vec link(vec const &S) const { return log(-log(S)); } vec ilink(vec const &x) const { return exp(-exp(x)); } vec h(vec const &eta, vec const &etaD) const { return etaD % exp(eta); } vec H(vec const &eta) const { return exp(eta); } mat gradH(vec const &eta, mat const &X) const { return rmult(X,exp(eta)); } mat gradh(vec const &eta, vec const &etaD, mat const &X, mat const &XD) const { return rmult(XD, exp(eta)) + rmult(X, etaD % exp(eta)); } cube hessianH(vec const &beta, mat const &X) const { cube c(beta.size(), beta.size(), X.n_rows); for (size_t i=0; i(sexp); thetaAO = as(args["thetaAO"]); } }; // Useful relationship: d/dx expit(x)=expit(x)*expit(-x) class LogitLink final : public Link { public: vec link(vec const &S) const { return -logit(S); } vec ilink(vec const &x) const { return expit(-x); } // vec h(vec eta, vec etaD) { return etaD % exp(eta) % expit(-eta); } vec h(vec const &eta, vec const &etaD) const { return etaD % expit(eta); } vec H(vec const &eta) const { return -log(expit(-eta)); } mat gradH(vec const &eta, mat const &X) const { return rmult(X,expit(eta)); } mat gradh(vec const &eta, vec const &etaD, mat const &X, mat const &XD) const { // return rmult(X, etaD % exp(eta) % expit(-eta)) - // rmult(X, exp(2*eta) % etaD % expit(-eta) % expit(-eta)) + // rmult(XD, exp(eta) % expit(-eta)); return rmult(XD, expit(eta)) + rmult(X, expit(eta) % expit(-eta) % etaD); } cube hessianH(vec const &beta, mat const &X) const { cube c(beta.size(), beta.size(), X.n_rows); for (size_t i=0; i double optimfunction(int n, double * beta, void * void_obj) { T * obj = static_cast(void_obj); vec coef(beta,n); double value = obj->objective(coef % obj->parscale); if (obj->bfgs.trace>1) { Rprintf("beta="); Rprint(coef); Rprintf("objective=%.10g\n",value); }; R_CheckUserInterrupt(); /* be polite -- did the user hit ctrl-C? */ return value; } template void optimgradient(int n, double * beta, double * grad, void * void_obj) { T * obj = static_cast(void_obj); vec coef(beta,n); if (obj->bfgs.trace>1) { Rprintf("beta="); Rprint(coef); } if (obj->bfgs.trace>2) { Rprintf("parscale="); Rprint(obj->parscale); } vec gr = obj->gradient(coef % obj->parscale); if (obj->bfgs.trace>1) { Rprintf("gradient="); Rprint(gr); } // if (obj->bfgs.trace>2) { // Rprintf("fdgradient="); Rprint(obj->fdgradient(coef % obj->parscale)); // } for (int i=0; i void optimfunction_nlm(int n, double * beta, double * f, void * void_obj) { T * obj = static_cast(void_obj); vec coef(beta,n); *f = obj->objective(coef % obj->parscale); } class BFGS2 : public BFGS { public: NumericMatrix calc_hessian(optimgr gr, void * ex) { if (parscale.size()==0) REprintf("parscale is not defined for BFGS2::calc_hessian.\n"); int n = coef.size(); NumericVector df1(n); NumericVector df2(n); NumericMatrix hess(n,n); double tmp; for(int i=0; ibfgs.coef = init; \ if (this->robust_initial) { \ optimNoHessianNM(this->bfgs.coef,50); \ } \ this->kappa = this->kappa_init; \ do { \ this->bfgs.optim(&optimfunction, &optimgradient, this->bfgs.coef, (void *) this); \ vec vcoef(&this->bfgs.coef[0],this->n); \ satisfied = this->feasible(vcoef % this->parscale); \ if (!satisfied) this->kappa *= 2.0; \ } while ((!satisfied) && this->kappa < 1.0e3); \ if (this->bfgs.trace > 0 && this->kappa>1.0) Rprintf("kappa=%f\n",this->kappa); \ this->bfgs.hessian = this->bfgs.calc_hessian(&optimgradient, (void *) this); \ } \ void optimNoHessianNM(NumericVector init, int maxit = 50) { \ NelderMead2 nm; \ nm.hessianp = false; \ nm.parscale = this->parscale; \ nm.maxit = maxit; \ nm.optim(&optimfunction, init, (void *) this); \ this->bfgs.coef = nm.coef; \ } \ void optimWithConstraintNM(NumericVector init) { \ bool satisfied; \ NelderMead2 nm; \ nm.hessianp = false; \ nm.parscale = this->parscale; \ this->kappa = this->kappa_init; \ do { \ nm.optim(&optimfunction, init, (void *) this); \ vec vcoef(&nm.coef[0],this->n); \ satisfied = this->feasible(vcoef % this->parscale); \ if (!satisfied) this->kappa *= 2.0; \ } while ((!satisfied) && this->kappa < this->maxkappa); \ if (this->bfgs.trace > 1) Rprintf("Calculating hessian...\n"); \ nm.hessian = nm.calc_hessian(&optimfunction, (void *) this); \ this->bfgs.coef = nm.coef; \ this->bfgs.hessian = nm.hessian; \ } \ void optimWithConstraintNlm(NumericVector init) { \ bool satisfied; \ Nlm2 nm; \ nm.gradtl = nm.steptl = this->reltol; \ nm.parscale = this->parscale; \ this->kappa = this->kappa_init; \ do { \ nm.optim(&optimfunction_nlm, init, (void *) this); \ vec vcoef(&nm.coef[0],this->n); \ satisfied = this->feasible(vcoef % this->parscale); \ if (!satisfied) this->kappa *= 2.0; \ } while ((!satisfied) && this->kappa < 1.0e3); \ if (this->bfgs.trace > 0 && this->kappa>1.0) Rprintf("kappa=%f\n",this->kappa); \ nm.hessian = nm.calc_hessian(&optimfunction_nlm, (void *) this); \ this->bfgs.coef = nm.coef; \ this->bfgs.hessian = nm.hessian; \ } \ void optimWithConstraint(NumericVector init) { \ if (this->bfgs.trace > 0) Rprintf("Starting optimization\n"); \ if (this->optimiser == "NelderMead") \ optimWithConstraintNM(init); \ else if (this->optimiser == "Nlm") \ optimWithConstraintNlm(init); \ else \ optimWithConstraintBFGS(init); \ } // struct for data struct BaseData { mat X, XD, X0, X1; vec bhazard,wt,wt0,event,time,offset; vec map0; uvec ind0, which0; }; // Main class for Stpm2 (fully parametric) class Stpm2 : public BaseData { public: typedef Stpm2 This; Stpm2(SEXP sexp) : bfgs() { List list = as(sexp); std::string linkType = as(list("link")); if (linkType=="PH") link=new LogLogLink(sexp); else if (linkType=="PO") link=new LogitLink(sexp); else if (linkType=="probit") link=new ProbitLink(sexp); else if (linkType=="AH") link=new LogLink(sexp); else if (linkType=="AO") link=new ArandaOrdazLink(sexp); else { REprintf("No matching link.type"); return; } bfgs.coef = init = as(list("init")); X = as(list("X")); XD = as(list("XD")); bhazard = as(list("bhazard")); wt = as(list("wt")); event = as(list("event")); time = as(list("time")); offset = as(list("offset")); delayed = as(list("delayed")); interval = as(list("interval")); n = nbeta = init.size(); // number of parameters N = X.n_rows; // number of observations X1 = as(list("X1")); X0 = as(list("X0")); wt0.set_size(N); wt0.fill(0.0); if (delayed) { wt0 = as(list("wt0")); } // if (interval) { // X1 = as(list("X1")); // } map0 = as(list("map0")); // length N map for X->X0 full_which0 = as(list("which0")); // length N map for X0->X ind0 = as(list("ind0")); // length N boolean for X0 ttype = as(list("ttype")); kappa_init = kappa = as(list("kappa")); maxkappa = as(list("maxkappa")); optimiser = as(list("optimiser")); bfgs.trace = as(list("trace")); reltol = bfgs.reltol = as(list("reltol")); robust_initial = as(list("robust_initial")); bfgs.hessianp = false; bfgs.parscale = parscale = as(list("parscale")); which0 = removeNaN(full_which0); } // log-likelihood components and constraints // Note: the li and gradli components depend on other variables (bhazard, wt, wt0, wt, event); // calculations should *not* be done on subsets virtual ~Stpm2() { delete link; } li_constraint li_right_censored(vec eta, vec etaD) { vec h = link->h(eta,etaD) + bhazard; vec H = link->H(eta); vec eps = h*0.0 + 1.0e-16; double constraint = kappa * (sum(h % h % (h<0)) + sum(H % H % (H<0))); constraint += kappa*sum(etaD % etaD % (etaDH(eta0); double constraint = kappa/2.0 * sum(H0 % H0 % (H0<0)); vec eps = H0*0.0 + 1.0e-16; vec li = wt0 % max(H0,eps); li_constraint out = {li, constraint}; return out; } li_constraint li_interval(vec eta, vec etaD, vec eta1) { vec H = link->H(eta); vec H1 = link->H(eta1); vec h = link->h(eta, etaD) + bhazard; double constraint = 0.0; vec eps = H*0.0 + 1e-16; H = max(H,eps); H1 = max(H1,eps); h = max(h,eps); vec li(N,fill::zeros); uvec index; index = find(ttype == 0); // right censored if (any(index)) { li(index) -= wt(index) % H(index); constraint += kappa/2.0 * sum(H(index) % H(index) % (H(index)<0)); } index = find(ttype == 1); // exact if (any(index)) { li(index) += wt(index) % (log(h(index)) - H(index)); constraint += kappa/2.0 * (sum(H(index) % H(index) % (H(index)<0))+ sum(h(index) % h(index) % (h(index)<0))); } index = find(ttype == 2); // left censored if (any(index)) { li(index) += wt(index) % log(1-exp(-H(index))); constraint += kappa/2.0 * sum(H(index) % H(index) % (H(index)<0)); } index = find(ttype == 3); // interval censored if (any(index)) { li(index) += wt(index) % log(exp(-H(index)) - exp(-H1(index))); constraint += kappa/2.0 * (sum(H(index) % H(index) % (H(index)<0))+ sum(H1(index) % H1(index) % (H1(index)<0))); } li_constraint out = {li, constraint}; return out; } li_constraint li(vec eta, vec etaD, vec eta0, vec eta1, vec beta) { if (interval) { return li_interval(eta, etaD, eta1); } else { li_constraint s = li_right_censored(eta, etaD); if (delayed && !eta0.empty()) { li_constraint s0 = li_left_truncated(eta0); s.constraint += s0.constraint; // if (bfgs.trace > 0) { // Rprint(which0); // } s.li(which0) += s0.li; } return s; } } vec getli(vec beta) { vec vbeta = beta; vbeta.resize(nbeta); vec offset1 = (X1.n_rows == 1 and offset.n_rows>1) ? arma::zeros(1) : offset; vec offset0 = arma::zeros(X0.n_rows); if (X0.n_rows == which0.n_rows) offset0 = offset(which0); li_constraint lic = li(X*vbeta+offset, XD*vbeta, X0*vbeta+offset0, X1*vbeta+offset1, beta); return lic.li; } mat getgradli(vec beta) { vec vbeta = beta; vbeta.resize(nbeta); vec offset1 = (X1.n_rows == 1 and offset.n_rows>1) ? arma::zeros(1) : offset; vec offset0 = arma::zeros(X0.n_rows); if (X0.n_rows == which0.n_rows) offset0 = offset(which0); gradli_constraint gradlic = gradli(X*vbeta+offset, XD*vbeta, X0*vbeta+offset0, X1*vbeta+offset1, X, XD, X0, X1, beta); return gradlic.gradli; } // negative log-likelihood double objective(vec beta) { vec vbeta = beta; vbeta.resize(nbeta); vec offset1 = (X1.n_rows == 1 and offset.n_rows>1) ? arma::zeros(1) : offset; vec offset0 = arma::zeros(X0.n_rows); if (X0.n_rows == which0.n_rows) offset0 = offset(which0); li_constraint s = li(X * vbeta + offset, XD * vbeta, X0 * vbeta + offset0, X1 * vbeta + offset1, beta); return -sum(s.li) + s.constraint; } // finite-differencing of the gradient for the objective vec fdgradient(vec beta, double eps = 1.0e-8) { int n = beta.size(); vec grad(n); for (int i=0; ih(eta,etaD) + bhazard; vec H = link->H(eta); vec eps = h*0.0 + 1.0e-16; mat gradH = link->gradH(eta,X); mat gradh = link->gradh(eta,etaD,X,XD); mat Xconstraint = 2.0*kappa * (rmult(gradh, h % (hgradH(eta0, X0); vec H0 = link->H(eta0); vec eps = H0*0.0 + 1.0e-16; mat Xconstraint = 2.0*kappa*rmult(gradH0, H0 % (H0<0)); mat Xgrad = rmult(gradH0, wt0); gradli_constraint out = {Xgrad, Xconstraint}; return out; } gradli_constraint gradli_interval_censored(vec eta, vec etaD, vec eta1, mat X, mat XD, mat X1) { vec H = link->H(eta); vec h = link->h(eta,etaD); vec H1 = link->H(eta1); mat gradH = link->gradH(eta,X); mat gradH1 = link->gradH(eta1,X1); mat gradh = link->gradh(eta, etaD, X, XD); vec eps = H*0.0 + 1e-16; // mat Xconstraint = kappa * (rmult(gradH, H % (H1) ? arma::zeros(1) : offset; vec offset0 = arma::zeros(X0.n_rows); if (X0.n_rows == which0.n_rows) offset0 = offset(which0); gradli_constraint gc = gradli(X * beta + offset, XD * beta, X0 * beta + offset0, X1 * beta+offset1, X, XD, X0, X1, beta); vec dconstraint = sum(gc.constraint,0).t(); vec gr = sum(gc.gradli,0).t(); return -gr+dconstraint; } bool feasible(vec beta) { vec eta = X * beta + offset; vec etaD = XD * beta; vec h = link->h(eta, etaD) + bhazard; vec H = link->H(eta); bool condition = all((h>0) % (H>0)); if (delayed) { vec eta0 = X0 * beta; // vec etaD0 = XD0 * beta; vec H0 = link->H(eta0); condition = condition && all(H0>0); } return condition; } void pre_process() { for (int i = 0; ih(eta,etaD); // mat gradh = link->gradh(eta,etaD,X,XD); // cube hessianh = link->hessianh(beta,X,XD); // cube hessianH = link->hessianH(beta,X); // cube hessianH0 = link->hessianH(beta,X0); // mat hessian = -arma::sum(hessianH,2); // if (delayed) // hessian += arma::sum(hessianH0,2); // for (int i=0; imap0(index)); } uvec which0f(uvec index) { vec which = this->full_which0(index); return find(which == which); } uvec removeNaN(vec x) { vec newx = x; uvec index = find(newx == newx); // NaN != NaN newx = newx(index); return conv_to::from(newx); } SEXP return_modes() { return wrap(-1); } // used in NormalSharedFrailties SEXP return_variances() { return wrap(-1); } // used in NormalSharedFrailties NumericVector init; vec parscale, ttype, full_which0; double kappa_init, kappa, maxkappa, reltol; bool delayed, interval, robust_initial; int n, N, nbeta; BFGS2 bfgs; std::string optimiser; Link * link; }; // penalised smoothers // _Not_ sub-classes of Pstpm2, hence the longer function signatures class SmoothLogH { public: struct Smoother { int first_para, last_para; mat S; bool first; }; SmoothLogH(SEXP sexp) { List list = as(sexp); List lsmooth = as(list["smooth"]); for(int i=0; i(lsmooth[i]); List lsmoothiS = as(lsmoothi["S"]); Smoother smoothi = { as(lsmoothi["first.para"]) - 1, as(lsmoothi["last.para"]) - 1, as(lsmoothiS[0]), true }; smooth.push_back(smoothi); if (lsmoothiS.size()==2) { Smoother smoothi2 = { as(lsmoothi["first.para"]) - 1, as(lsmoothi["last.para"]) - 1, as(lsmoothiS[1]), false }; smooth.push_back(smoothi2); } } } double penalty(vec vbeta, vec sp) { double value = 0.0; for (size_t i=0; i < smooth.size(); ++i) { Smoother smoothi = smooth[i]; value += sp[i]/2 * dot(vbeta.subvec(smoothi.first_para,smoothi.last_para), smoothi.S * vbeta.subvec(smoothi.first_para,smoothi.last_para)); } return value; } vec penalty_gradient(vec vbeta, vec sp) { int n = vbeta.size(); rowvec vgr(n, fill::zeros); for (size_t i=0; i < smooth.size(); ++i) { Smoother smoothi = smooth[i]; vgr.subvec(smoothi.first_para,smoothi.last_para) += sp[i] * (smoothi.S * vbeta.subvec(smoothi.first_para,smoothi.last_para)).t(); } vec gr(n); for (int i=0; i(smoothi.last_para); ++j) values[i] += X(j,j); // if (!smoothi.first) values[i]=0.0; // edf for second smoother matrix: ignore } return values; } std::vector smooth; }; // // TODO: include first_para and last_para class data for the traces() method // class SmoothHaz { // public: // struct Smoother { // mat X0, X1, X2, X3; // vec w; // double lambda; // }; // SmoothHaz(SEXP sexp) { // List list = as(sexp); // List lsmooth = as(list["smooth"]); // for(int i=0; i(lsmooth[i]); // Smoother smoothi = { // as(lsmoothi["X0"]), // as(lsmoothi["X1"]), // as(lsmoothi["X2"]), // as(lsmoothi["X3"]), // as(lsmoothi["w"]), // as(lsmoothi["lambda"]) // }; // smooth.push_back(smoothi); // } // } // double penalty(vec vbeta, vec sp) { // double value = 0.0; // for (size_t i=0; i < smooth.size(); ++i) { // Smoother obj = smooth[i]; // vec s0 = obj.X0 * vbeta; // vec s1 = obj.X1 * vbeta; // vec s2 = obj.X2 * vbeta; // vec s3 = obj.X3 * vbeta; // vec h2 = exp(s0) % (s3 + 3*s1%s2 + s1%s1%s1); // value += sp[i]/2 * obj.lambda * sum(obj.w % h2 % h2); // } // return value; // } // vec penalty_gradient(vec vbeta, vec sp) { // int n = vbeta.size(); // rowvec vgr(n, fill::zeros); // for (size_t i=0; i < smooth.size(); ++i) { // Smoother obj = smooth[i]; // vec s0 = obj.X0 * vbeta; // vec s1 = obj.X1 * vbeta; // vec s2 = obj.X2 * vbeta; // vec s3 = obj.X3 * vbeta; // vec h2 = exp(s0) % (s3 + 3*s1%s2 + s1%s1%s1); // mat dh2sq_dbeta = // 2*lmult(h2 % exp(s0), // obj.X3+3*(rmult(obj.X1,s2)+rmult(obj.X2,s1))+3*lmult(s1%s1,obj.X1))+ // 2*lmult(h2 % h2,obj.X0); // vgr += sp[i]*obj.lambda*sum(lmult(obj.w, dh2sq_dbeta),0); // } // vec gr(n); // for (int i = 0; i smooth; // }; template double pstpm2_multivariate_step(int n, double * logsp_ptr, void * model_ptr) { T * model = static_cast(model_ptr); vec logsp(logsp_ptr,n); R_CheckUserInterrupt(); /* be polite -- did the user hit ctrl-C? */ return model->multivariate_step(logsp); } template double pstpm2_first_step(double logsp, void * model_ptr) { T * model = static_cast(model_ptr); R_CheckUserInterrupt(); /* be polite -- did the user hit ctrl-C? */ return model->first_step(logsp); } template void pstpm2_multivariate_stepNlm(int n, double * logsp_ptr, double * objective, void * model_ptr) { T * model = static_cast(model_ptr); vec logsp(logsp_ptr,n); R_CheckUserInterrupt(); /* be polite -- did the user hit ctrl-C? */ *objective = model->multivariate_step(logsp); } // Penalised link-based models template class Pstpm2 : public Stpm2Type, public Smooth { public: typedef Pstpm2 This; Pstpm2(SEXP sexp) : Stpm2Type(sexp), Smooth(sexp) { List list = as(sexp); sp = as(list["sp"]); reltol_search = as(list["reltol_search"]); reltol_outer = as(list["reltol_outer"]); alpha = as(list["alpha"]); criterion = as(list["criterion"]); outer_optim = as(list["outer_optim"]); } double objective(vec beta) { return Stpm2Type::objective(beta) + Smooth::penalty(beta,sp); } double objective0(vec beta) { return Stpm2Type::objective(beta); } vec gradient(vec beta) { return Stpm2Type::gradient(beta) + Smooth::penalty_gradient(beta,sp); } vec gradient0(vec beta) { return Stpm2Type::gradient(beta); } OPTIM_FUNCTIONS; double calc_edf(NumericMatrix hessian0) { double max_edf = this->bfgs.hessian.ncol(); mat m; bool flag = arma::solve(m, as(this->bfgs.hessian), as(hessian0)); double edf = flag ? arma::trace(m) : (max_edf*2.0); if (edf<0.0) edf = max_edf*2.0; return edf; } double first_step(double logsp) { sp[0] = exp(logsp); this->pre_process(); this->optimWithConstraint(this->init); // this->bfgs.hessian = this->bfgs.calc_hessian(&optimgradient, (void *) this); NumericMatrix hessian0 = this->bfgs.calc_hessian(&optimgradient, (void *) this); if (this->bfgs.trace > 1) { Rprintf("Debug on trace calculation. Coef:\n"); Rprint(this->bfgs.coef); if (this->bfgs.trace > 1) { Rprintf("Hessian0:\n"); Rprint(hessian0); Rprintf("Hessian:\n"); Rprint(this->bfgs.hessian); } } double edf = calc_edf(hessian0); double negll = this->bfgs.calc_objective(&optimfunction, (void *) this); double gcv = negll + alpha*edf; double bic = negll + alpha*edf*log(sum(this->event)); this->init = this->bfgs.coef; if (this->bfgs.trace > 0) Rprintf("sp=%f\tedf=%f\tnegll=%f\tgcv=%f\tbic=%f\talpha=%f\n",sp[0],edf,negll,gcv,bic,alpha); this->post_process(); return criterion==1 ? gcv : bic; } double multivariate_step(vec logsp) { this->pre_process(); double lsp = -9.0, usp = 9.0; for (size_t i=0; i < sp.size(); ++i) sp[i] = exp(bound(logsp[i],lsp,usp)); if (this->bfgs.trace > 0) { for (size_t i = 0; i < sp.size(); ++i) Rprintf("sp[%i]=%f\t",(int)i,sp[i]); } this->optimWithConstraint(this->init); this->bfgs.hessian = this->bfgs.calc_hessian(&optimgradient, (void *) this); NumericMatrix hessian0 = this->bfgs.calc_hessian(&optimgradient, (void *) this); double edf = calc_edf(hessian0); double negll = this->bfgs.calc_objective(&optimfunction, (void *) this); double gcv = negll + alpha*edf; double bic = 2.0*negll + alpha*edf*log(sum(this->event)); this->init = this->bfgs.coef; // simple boundary constraints double constraint = 0.0; // double kappa = 1.0; for (size_t i=0; i < sp.size(); ++i) { if (logsp[i] < lsp) constraint += pow(logsp[i]-lsp,2.0); if (logsp[i] > usp) constraint += pow(logsp[i]-usp,2.0); } double objective = criterion==1 ? gcv + this->kappa/2.0*constraint : bic + this->kappa/2.0*constraint; if (this->bfgs.trace > 0) { Rprintf("edf=%f\tnegll=%f\tgcv=%f\tbic=%f\tobjective=%f\n",edf,negll,gcv,bic,objective); } this->post_process(); return objective; } SEXP optim_fixed() { this->pre_process(); this->optimWithConstraint(this->init); this->bfgs.hessian = this->bfgs.calc_hessian(&optimgradient, (void *) this); NumericMatrix hessian0 = this->bfgs.calc_hessian(&optimgradient, (void *) this); mat Proj = solve(as(wrap(this->bfgs.hessian)),as(wrap(hessian0))); double edf = trace(Proj); NumericVector edf_var = as(wrap(Smooth::traces(Proj))); this->post_process(); return List::create(_("sp")=wrap(sp), _("coef")=wrap(this->bfgs.coef), _("hessian")=wrap(this->bfgs.hessian), _("edf")=wrap(edf), _("edf_var")=wrap(edf_var), _("kappa")=wrap(this->kappa) ); } SEXP optim_first() { this->bfgs.reltol = reltol_search; double opt_sp = exp(Brent_fmin(log(0.001),log(1000.0),&(pstpm2_first_step),(void *) this,reltol_outer)); sp[0] = opt_sp; this->bfgs.reltol = this->reltol; return optim_fixed(); } SEXP optim_multivariate() { if (outer_optim==1) return optim_multivariate_NelderMead(); else return optim_multivariate_Nlm(); } SEXP optim_multivariate_NelderMead() { this->kappa = 10.0; NelderMead2 nm; nm.reltol = reltol_outer; nm.maxit = 500; nm.hessianp = false; nm.parscale = this->parscale; this->bfgs.reltol = reltol_search; NumericVector logsp(sp.size()); for (size_t i=0; i < sp.size(); ++i) logsp[i] = log(sp[i]); bool satisfied; do { nm.optim(&pstpm2_multivariate_step, logsp, (void *) this); satisfied = true; for (size_t i=0; i < sp.size(); ++i) if (logsp[i]< -9.0 || logsp[i] > 9.0) satisfied = false; if (!satisfied) this->kappa *= 2.0; } while (!satisfied && this->kappa<1.0e5); for (int i=0; i < nm.coef.size(); ++i) sp[i] = exp(nm.coef[i]); this->bfgs.coef = this->init; this->bfgs.reltol = this->reltol; return optim_fixed(); } SEXP optim_multivariate_Nlm() { this->kappa = this->kappa_init; Nlm2 nm; nm.gradtl = nm.steptl = reltol_outer; nm.itnlim = 100; // nm.hessianp = false; nm.parscale = this->parscale; this->bfgs.reltol = reltol_search; NumericVector logsp(sp.size()); for (size_t i=0; i < sp.size(); ++i) logsp[i] = log(sp[i]); bool satisfied; do { nm.optim(&pstpm2_multivariate_stepNlm, logsp, (void *) this); satisfied = true; for (size_t i=0; i < sp.size(); ++i) if (logsp[i]< -9.0 || logsp[i] > 9.0) satisfied = false; if (!satisfied) this->kappa *= 2.0; } while (!satisfied && this->kappa<1.0e5); for (int i=0; i < nm.coef.size(); ++i) sp[i] = exp(nm.coef[i]); this->bfgs.coef = this->init; this->bfgs.reltol = this->reltol; return optim_fixed(); } vec sp; double alpha, reltol_search, reltol_outer; int criterion, outer_optim; }; // template // void pstpm2_step_multivariate_nlm(int n, double * logsp, double * f, void *ex) { // *f = pstpm2_step_multivariate(n, logsp, ex); // }; /** Extension of stpm2 and pstpm2 to include gamma shared frailties with a cluster variable **/ template class GammaSharedFrailty : public Base { public: typedef std::vector Index; typedef std::map IndexMap; typedef GammaSharedFrailty This; GammaSharedFrailty(SEXP sexp) : Base(sexp) { List list = as(sexp); ivec cluster = as(list["cluster"]); recurrent = as(list["recurrent"]); this->nbeta = this->n - 1; // wragged array indexed by a map of vectors for (size_t id=0; iddelayed && this->ind0[id]) cluster_delayed[cluster[id]].push_back(id); } } /** Objective function for a Gamma shared frailty Assumes that weights == 1. **/ double objective(vec beta) { vec vbeta = beta; vbeta.resize(this->nbeta); // copy across to this->bfgs.coef? li_constraint s = li(this->X * vbeta, this->XD * vbeta, this->X0 * vbeta, this->X1 * vbeta, beta); return -sum(s.li) + s.constraint; } vec getli(vec beta) { vec vbeta = beta; vbeta.resize(this->nbeta); li_constraint lic = li(this->X*vbeta, this->XD*vbeta, this->X0*vbeta, this->X1*vbeta, beta); return lic.li; } mat getgradli(vec beta) { vec vbeta = beta; vbeta.resize(this->nbeta); gradli_constraint gradlic = gradli(this->X*vbeta, this->XD*vbeta, this->X0*vbeta, this->X1*vbeta, this->X, this->XD, this->X0, this->X1, beta); return gradlic.gradli; } li_constraint li(vec eta, vec etaD, vec eta0, vec eta1, vec beta) { vec ll(clusters.size(), fill::zeros); int n = beta.size(); vec vbeta(beta); // logtheta is the last parameter in beta vbeta.resize(this->nbeta); double theta = exp(beta[n-1]); eta = this->X * vbeta + this->offset; etaD = this->XD * vbeta; vec h = this->link->h(eta,etaD) + this->bhazard; vec H = this->link->H(eta); double constraint = this->kappa/2.0 * (sum(h % h % (h<0)) + sum(H % H % (H<0))); vec eps = h*0.0 + 1.0e-16; h = max(h,eps); H = max(H,eps); vec H0; if (this->delayed) { eta0 = this->X0 * vbeta + this->offset(this->which0); H0 = this->link->H(eta0); constraint += this->kappa/2.0 * sum(H0 % H0 % (H0<0)); } int i=0; for (IndexMap::iterator it=clusters.begin(); it!=clusters.end(); ++it, ++i) { uvec index = conv_to::from(it->second); int mi = sum(this->event(index)); double sumH = sum(H(index)); double sumHenter = 0.0; ll(i) += sum(log(h(index)) % this->event(index)); // shared if (this->delayed && !cluster_delayed[it->first].empty()) { uvec ind00 = conv_to::from(cluster_delayed[it->first]); sumHenter = sum(H0(Base::map0f(ind00))); } if (recurrent) { // for calendar timescale ll(i) += -(1.0/theta+mi)*log(1.0+theta*(sumH - sumHenter)); // Rondeau et al (2005) } else { // for clustered data or gap timescale ll(i) += -(1.0/theta+mi)*log(1.0+theta*sumH) + 1.0/theta*log(1.0+theta*sumHenter); // Rondeau et al } // Note: log(gamma(1/theta+mi)/gamma(1/theta)*theta^mi) = sum_k=1^mi (log(1+theta(mi-k))) (mi>0); 0 (otherwise) if (mi>0) { for (int k=1; k<=mi; ++k) ll(i) += log(1.0+theta*(mi-k)); } } li_constraint out; out.constraint=constraint; out.li = ll; return out; } vec gradient(vec beta) { vec vbeta = beta; vbeta.resize(this->nbeta); gradli_constraint gc = gradli(this->X*vbeta, this->XD*vbeta, this->X0*vbeta, this->X1*vbeta, this->X, this->XD, this->X0, this->X1, beta); rowvec dconstraint = sum(gc.constraint,0); rowvec vgr = sum(gc.gradli,0); vec gr(beta.size()); for (size_t i = 0; i(clusters.size(), n); mat grconstraint = zeros(clusters.size(), n); vec vbeta(beta); // theta is the last parameter in beta vbeta.resize(n-1); double theta = exp(beta[n-1]); // eta = this->X * vbeta; // etaD = this->XD * vbeta; vec h = this->link->h(eta,etaD); vec H = this->link->H(eta); mat gradh = this->link->gradh(eta,etaD,this->X,this->XD); mat gradH = this->link->gradH(eta,this->X); vec eps = h*0.0 + 1.0e-16; h = max(h,eps); H = max(H,eps); vec H0; mat gradH0; if (this->delayed) { // vec eta0 = this->X0 * vbeta; // vec etaD0 = this->XD0 * vbeta; H0 = this->link->H(eta0); gradH0 = this->link->gradH(eta0,this->X0); } int i=0; for (IndexMap::iterator it=clusters.begin(); it!=clusters.end(); ++it, ++i) { int mi=0; double sumH = 0.0, sumHenter = 0.0; vec gradi = zeros(n-1); vec gradHi = zeros(n-1); vec gradH0i = zeros(n-1); // vec grconstraint = zeros(n-1); for (Index::iterator j=it->second.begin(); j!=it->second.end(); ++j) { sumH += H(*j); gradHi += gradH.row(*j).t(); if (this->event(*j)==1) { gradi += gradh.row(*j).t() / h(*j); mi++; } if (this->delayed && this->ind0[*j]) { int jj = this->map0[*j]; sumHenter += H0(jj); gradH0i += gradH0.row(jj).t(); grconstraint(i,span(0,n-2)) += this->kappa * (gradH0.row(jj) * H0(jj) * (H0(jj)<0)); } grconstraint(i,span(0,n-2)) += this->kappa * ((gradh.row(*j) * h(*j) * (h(*j)<0)) + (gradH.row(*j) * H(*j) * (H(*j)<0))); } for (int k=0; k0) { for (int k=1; k<=mi; ++k) // axiom: D(log(1+exp(btheta)*(mi-k)),btheta) gr(i,n-1) += theta*(mi-k)/(1.0+theta*(mi-k)); } } gradli_constraint grli = {gr, grconstraint}; return grli; } bool feasible(vec beta) { vec coef(beta); coef.resize(this->n-1); return Base::feasible(coef); } OPTIM_FUNCTIONS; IndexMap clusters, cluster_delayed; bool recurrent; }; /** Extension of stpm2 and pstpm2 to include Clayton copula **/ template class ClaytonCopula : public Base { public: typedef std::vector Index; typedef std::map IndexMap; typedef ClaytonCopula This; ClaytonCopula(SEXP sexp) : Base(sexp) { List list = as(sexp); ivec cluster = as(list["cluster"]); this->nbeta = this->n - 1; // wragged array indexed by a map of vectors for (size_t id=0; idnbeta); // copy across to this->bfgs.coef? li_constraint s = li(this->X * vbeta, this->XD * vbeta, this->X0 * vbeta, this->X1 * vbeta, beta); return -sum(s.li) + s.constraint; } vec getli(vec beta) { vec vbeta = beta; vbeta.resize(this->nbeta); li_constraint lic = li(this->X*vbeta, this->XD*vbeta, this->X0*vbeta, this->X1*vbeta, beta); return lic.li; } mat getgradli(vec beta) { // WRONG - DO NOT USE! vec vbeta = beta; vbeta.resize(this->nbeta); gradli_constraint gradlic = gradli(this->X*vbeta, this->XD*vbeta, this->X0*vbeta, this->X1*vbeta, this->X, this->XD, this->X0, this->X1, beta); return gradlic.gradli; } li_constraint li(vec eta, vec etaD, vec eta0, vec eta1, vec beta) { vec ll(clusters.size(), fill::zeros); int n = beta.size(); vec vbeta(beta); // logtheta is the last parameter in beta vbeta.resize(this->nbeta); double itheta = exp(-beta[n-1]); // NOTE: INVERSE OF THE VARIANCE eta = this->X * vbeta + this->offset; etaD = this->XD * vbeta; vec h = this->link->h(eta,etaD) + this->bhazard; vec H = this->link->H(eta); double constraint = this->kappa/2.0 * (sum(h % h % (h<0)) + sum(H % H % (H<0))); vec eps = h*0.0 + 1.0e-16; h = max(h,eps); H = max(H,eps); int i=0; for (IndexMap::iterator it=clusters.begin(); it!=clusters.end(); ++it, ++i) { uvec index = conv_to::from(it->second); int ni = (it->second).size(); int mi = sum(this->event(index)); double logScopula = -itheta*log(sum(exp(H(index)/itheta)) - ni + 1); // Rprintf("ni=%i, mi=%i, log(Scopula)=%g\n",ni,mi,logScopula); if (mi==0) { ll(i) = logScopula; } else { ll(i) = logScopula/itheta*(itheta+mi); // Rprintf("ll(i)=%g\n",ll(i)); ll(i) += sum((log(h(index))+H(index)/itheta) % this->event(index)); for (int k=1; k<=mi; ++k) ll(i) += log(itheta+k-1.0) - log(itheta); } } li_constraint out; out.constraint=constraint; out.li = ll; return out; } vec gradient(vec beta) { // WRONG - DO NOT USE! vec vbeta = beta; vbeta.resize(this->nbeta); gradli_constraint gc = gradli(this->X*vbeta, this->XD*vbeta, this->X0*vbeta, this->X1*vbeta, this->X, this->XD, this->X0, this->X1, beta); rowvec dconstraint = sum(gc.constraint,0); rowvec vgr = sum(gc.gradli,0); vec gr(beta.size()); for (size_t i = 0; i(clusters.size(), n); mat grconstraint = zeros(clusters.size(), n); vec vbeta(beta); // theta is the last parameter in beta vbeta.resize(n-1); double itheta = exp(-beta[n-1]); // eta = this->X * vbeta; // etaD = this->XD * vbeta; vec h = this->link->h(eta,etaD); vec H = this->link->H(eta); mat gradh = this->link->gradh(eta,etaD,this->X,this->XD); mat gradH = this->link->gradH(eta,this->X); vec eps = h*0.0 + 1.0e-16; h = max(h,eps); H = max(H,eps); int i=0; for (IndexMap::iterator it=clusters.begin(); it!=clusters.end(); ++it, ++i) { uvec index = conv_to::from(it->second); int ni = (it->second).size(); int mi = sum(this->event(index)); double Scopula0 = sum(exp(H(index)/itheta)) - ni + 1; vec gradEi = zeros(n-1); vec gradHexpHi = zeros(n-1); vec gradH0i = zeros(n-1); for (Index::iterator j=it->second.begin(); j!=it->second.end(); ++j) { gradHexpHi += gradH.row(*j).t() * exp(H(*j)/itheta) / itheta; if (this->event(*j)==1) { gradEi += gradH.row(*j).t() / itheta + gradh.row(*j)/h(*j); } grconstraint(i,span(0,n-2)) += this->kappa * ((gradh.row(*j) * h(*j) * (h(*j)<0)) + (gradH.row(*j) * H(*j) * (H(*j)<0))); } for (int k=0; k0) { for (int k=0; kn-1); return Base::feasible(coef); } OPTIM_FUNCTIONS; IndexMap clusters; }; /** @brief Wrapper for calling an objective_cluster method **/ template double call_objective_cluster(double bi, void * model_ptr) { T * model = static_cast(model_ptr); return model->objective_cluster(bi); } template double call_gradient_cluster(double bi, void * model_ptr) { T * model = static_cast(model_ptr); return model->gradient_cluster(bi); } /** @brief Wrapper for calling a gradient_cluster method **/ template double call_objective_cluster_bfgs(int n, double *bi, void * model_ptr) { T * model = static_cast(model_ptr); return model->objective_cluster(*bi); } template void call_gradient_cluster_bfgs(int dim, double * bi, double* out, void * model_ptr) { T * model = static_cast(model_ptr); *out = model->gradient_cluster(*bi); } /** Extension of stpm2 and pstpm2 to include log-normal shared frailties with a cluster variable **/ template class NormalSharedFrailty : public Base { public: typedef std::vector Index; typedef std::map IndexMap; typedef NormalSharedFrailty This; typedef std::map Doubles; NormalSharedFrailty(SEXP sexp) : Base(sexp) { List list = as(sexp); const BaseData fullTmp = {this->X, this->XD, this->X0, this->X1, this->bhazard, this->wt, this->wt0, this->event, this->time, this->offset, this->map0, this->ind0, this->which0}; full = fullTmp; IntegerVector cluster = as(list["cluster"]); full_Z = Z = as(list["Z"]); full_Z0 = Z0 = Z(this->ind0); // this could be size 0... gauss_x = as(list["gauss_x"]); // node values gauss_w = as(list["gauss_w"]); // probability weights adaptive = as(list["adaptive"]); recurrent = as(list["recurrent"]); first = true; // wragged array indexed by a map of vectors for (int id=0; idnbeta = this->n - 1; } /** Objective function for a log-normal shared frailty Assumes that weights == 1. **/ double objective_nonadaptive(vec beta) { int n = beta.size(); vec vbeta(beta); // nu=log(variance) is the last parameter in beta; exp(nu)=sigma^2 vbeta.resize(n-1); // case: alpha for joint model? double sigma = exp(0.5*beta[n-1]); // standard deviation int K = gauss_x.size(); // number of nodes vec wstar = gauss_w/sqrt(datum::pi); double constraint = 0.0; double ll = 0.0; bool left_trunc_not_recurrent = (this->delayed && !this->recurrent && !this->interval); for (IndexMap::iterator it=clusters.begin(); it!=clusters.end(); ++it) { clusterDesign(it); vec eta = this->X * vbeta; vec etaD = this->XD * vbeta; vec eta0(1,fill::zeros); vec eta1(this->X.n_rows,fill::zeros); if (this->delayed) { eta0 = this->X0 * vbeta; eta1 = this->X1 * vbeta; } double Lj = 0.0, L0j = 0.0; for (int k=0; kgauss_x(k); if (left_trunc_not_recurrent) { this->delayed = false; lik = Base::li(eta+Z*bi,etaD,eta0+Z0*bi,eta1+Z*bi,beta); this->delayed = true; H0ik = Base::li_left_truncated(eta0+Z0*bi); L0j += exp(-sum(H0ik.li))*wstar(k); constraint += H0ik.constraint; } else { lik = Base::li(eta+Z*bi,etaD,eta0+Z0*bi,eta1+Z*bi,beta); } Lj += exp(sum(lik.li))*wstar(k); constraint += lik.constraint; } ll += log(Lj); if (left_trunc_not_recurrent) ll -= log(L0j); } resetDesign(); return -(ll - constraint); } double objective(vec beta) { return this->adaptive ? objective_adaptive(beta) : objective_nonadaptive(beta); } double objective_adaptive(vec beta) { int n = beta.size(); this->objective_cluster_beta = beta; // for use by objective_cluster() vec vbeta(beta); // nu=log(variance) is the last parameter in beta; exp(nu)=sigma^2 double sigma = exp(0.5*vbeta(this->n-1)); // standard deviation vbeta.resize(n-1); int K = gauss_x.size(); // number of nodes double constraint = 0.0; double ll = 0.0; bool left_trunc_not_recurrent = (this->delayed && !this->recurrent && !this->interval); for (IndexMap::iterator it=clusters.begin(); it!=clusters.end(); ++it) { clusterDesign(it); // cluster-specific mode double mu; if (!first) { // double Tol = this->reltol; // int Maxit = 100; // mu = R_zeroin2(-100.0, // 100.0, // gradient_cluster(-100.0), // gradient_cluster(100.0), // &(call_gradient_cluster), // (void *) this, // &Tol, // &Maxit); mu = Brent_fmin(muhat[it->first]-1e-1, muhat[it->first]+1e-1, &(call_objective_cluster), (void *) this, this->reltol); } if (first || std::abs(mu-muhat[it->first])>(1e-1-1e-5)) // if (first || mu>100.0-1e-5 || mu<-100.0+1e-5) mu = Brent_fmin(-100.0,100.0,&(call_objective_cluster),(void *) this, this->reltol); muhat[it->first] = mu; // cluster-specific variance double eps = 1e-6; double tau = sqrt(eps*2.0/(gradient_cluster(mu+eps)-gradient_cluster(mu-eps))); tauhat[it->first] = tau; vec eta = this->X * vbeta; vec etaD = this->XD * vbeta; vec eta0(1,fill::zeros); vec eta1(this->X.n_rows,fill::zeros); if (this->delayed) { eta0 = this->X0 * vbeta; eta1 = this->X1 * vbeta; } double Lj = 0.0, L0j = 0.0; for (int k=0; kgauss_x(k); li_constraint lik, l0ik; if (left_trunc_not_recurrent) { // first: reset such that delayed is true and calculate the likelihood for right censoring this->delayed = false; lik = Base::li(eta+Z*bi,etaD,eta0+Z0*bi,eta1+Z*bi,beta); // second: reset for delayed is true and calculate the likelihood for left truncation this->delayed = true; l0ik = Base::li_left_truncated(eta0+Z0*bi); constraint += l0ik.constraint; g0 = exp(sum(l0ik.li)+R::dnorm(bi,0.0,sigma,1)); L0j += sqrt(2.0)*tau*g0*gauss_w(k)*exp(gauss_x(k)*gauss_x(k)); } else { lik = Base::li(eta+Z*bi,etaD,eta0+Z0*bi,eta1+Z*bi,beta); } g = exp(sum(lik.li)+R::dnorm(bi,0.0,sigma,1)); Lj += sqrt(2.0)*tau*g*gauss_w(k)*exp(gauss_x(k)*gauss_x(k)); constraint += lik.constraint; } ll += log(Lj); if (left_trunc_not_recurrent && L0j>0.0) ll -= log(L0j); } resetDesign(); first = false; return -(ll - constraint); } vec getli(vec beta) { vec missing(1,fill::zeros); return missing; } mat getgradli(vec beta) { mat missing(1,1,fill::zeros); return missing; } // TODO: redefine li void resetDesign() { this->X = full.X; this->XD = full.XD; this->bhazard = full.bhazard; this->wt = full.wt; this->event = full.event; this->time = full.time; this->offset = full.offset; this->X1 = full.X1; this->X0 = full.X0; this->wt0 = full.wt0; this->which0 = full.which0; this->Z = full_Z; this->Z0 = full_Z0; } void clusterDesign(IndexMap::iterator it) { clusterid = it->first; uvec index = conv_to::from(it->second); this->X = full.X.rows(index); this->XD = full.XD.rows(index); this->X1 = full.X1.rows(index); this->bhazard = full.bhazard(index); this->wt = full.wt(index); this->event = full.event(index); this->time = full.time(index); this->offset = full.offset(index); this->Z = full_Z(index); this->Z0 = vec(1,fill::zeros); if (this->delayed) { uvec index0 = Base::map0f(index); this->X0 = full.X0.rows(index0); this->wt0 = full.wt0(index0); this->Z0 = full_Z0(index0); this->which0 = Base::which0f(index); } } // log(g(bi)) double objective_cluster(double bi) { vec vbeta = this->objective_cluster_beta; // nu=log(variance) is the last parameter in vbeta double sigma = exp(0.5*vbeta(this->n-1)); // standard deviation vbeta.resize(this->n - 1); vec eta = this->X * vbeta; vec etaD = this->XD * vbeta; vec eta0(1,fill::zeros); vec eta1(this->X.n_rows,fill::zeros); if (this->delayed) { eta0 = this->X0 * vbeta; eta1 = this->X1 * vbeta; } li_constraint lik = Base::li(eta+Z*bi,etaD,eta0+Z0*bi,eta1+Z*bi,vbeta); double ll = sum(lik.li) + R::dnorm(bi,0.0,sigma,1); return -ll; } double gradient_cluster(double bi) { vec vbeta = this->objective_cluster_beta; // nu=log(variance) is the last parameter in vbeta double sigma = exp(0.5*vbeta(this->n-1)); // standard deviation vbeta.resize(this->n - 1); vec eta = this->X * vbeta; vec etaD = this->XD * vbeta; vec eta0(1,fill::zeros); vec eta1(this->X1.n_rows,fill::zeros); if (this->delayed) { eta0 = this->X0 * vbeta; eta1 = this->X1 * vbeta; } mat X = mat(Z); // mat(this->X.n_rows,1,fill::ones); mat XD = mat(this->XD.n_rows,1,fill::zeros); mat X0 = mat(Z0); // mat(this->X0.n_rows,1,fill::ones); mat X1 = mat(Z); // mat(this->X1.n_rows,1,fill::ones); gradli_constraint gradlik = Base::gradli(eta+Z*bi,etaD,eta0+Z0*bi,eta1+Z*bi,X,XD,X0,X1,vbeta); rowvec gradll = sum(gradlik.gradli,0) - bi/sigma/sigma; return -gradll(0); } // double fdhessian(boost::function f, double x, double eps = 1.0e-6) { // return (-f(x+2*eps)+16*f(x+eps)-30*f(x)+16*f(x-eps)-f(x-2*eps))/12.0/eps/eps; // } void calculate_modes_and_variances() { this->objective_cluster_beta = this->bfgs.coef; for (IndexMap::iterator it=clusters.begin(); it!=clusters.end(); ++it) { clusterDesign(it); modes[it->first] = Brent_fmin(-100.0,100.0,&(call_objective_cluster),(void *) this, this->reltol); // Abramowitz and Stegun 1972, p. 884 double bi = modes[it->first]; double eps = 1e-6; double f1 = objective_cluster(bi+2*eps); double f2 = objective_cluster(bi+eps); double f3 = objective_cluster(bi); double f4 = objective_cluster(bi-eps); double f5 = objective_cluster(bi-2*eps); double hessian = (-f1+16*f2-30*f3+16*f4-f5)/12.0/eps/eps; variances[it->first] = 1.0/hessian; variances[it->first] = eps*2.0/(gradient_cluster(bi+eps)-gradient_cluster(bi-eps)); } resetDesign(); } vec gradient(vec beta) { return this->adaptive ? gradient_adaptive(beta) : gradient_nonadaptive(beta); } vec gradient_adaptive(vec beta) { int n = beta.size(); this->objective_cluster_beta = beta; // for use by objective_cluster() vec betastar = beta; // we use the last element as bi - is this a good idea? vec vbeta(beta); // nu=log(variance) is the last parameter in beta; exp(nu)=sigma^2 double sigma = exp(0.5*vbeta(this->n-1)); // standard deviation vbeta.resize(n-1); int K = gauss_x.size(); // number of nodes // rowvec dconstraint(n,fill::zeros); rowvec gradLi(n,fill::zeros); for (IndexMap::iterator it=clusters.begin(); it!=clusters.end(); ++it) { clusterDesign(it); // cluster-specific modes and variances (calculated in the objective function) double mu = muhat[it->first]; double tau = tauhat[it->first]; mat Zmain(Z); mat ZD(this->XD.n_rows,1,fill::zeros); mat Z0main(Z0); mat Z1(Z); mat Xstar = join_horiz(this->X, Zmain); mat XDstar = join_horiz(this->XD, ZD); // assumes time-invariant random effects mat X0star = join_horiz(this->X0, Z0main); mat X1star = join_horiz(this->X1, Z1); double Lj = 0.0; rowvec numerator(this->n,fill::zeros); for (int k=0; kgauss_x(k); betastar[betastar.size()-1] = bi; vec etastar = Xstar * betastar; vec etaDstar = XDstar * betastar; vec eta0star = X0star * betastar; vec eta1star = X1star * betastar; li_constraint lik = Base::li(etastar,etaDstar,eta0star,eta1star,beta); double g = exp(sum(lik.li) + R::dnorm(bi,0.0,sigma,1)); gradli_constraint gradlik = Base::gradli(etastar, etaDstar, eta0star, eta1star,Xstar, XDstar, X0star, X1star,beta); Lj += sqrt(2.0)*tau*g*gauss_w(k)*exp(gauss_x(k)*gauss_x(k)); rowvec numeratorstar = sqrt(2.0)*tau*g*sum(gradlik.gradli,0)*gauss_w(k)*exp(gauss_x(k)*gauss_x(k)); numerator(span(0,n-2)) += numeratorstar(span(0,n-2)); numerator(n-1) += sqrt(2.0)*tau*gauss_w(k)*exp(gauss_x(k)*gauss_x(k))*g*(- 0.5 + bi*bi/2/sigma/sigma); // dconstraint += sum(gradlik.constraint,0); } gradLi += numerator/Lj; } vec gr(n,fill::zeros); for (int i=0; iN,1,fill::zeros); mat Z0main(Z0); mat Z1(Z); mat Xstar = join_horiz(this->X, Zmain); mat XDstar = join_horiz(this->XD, ZD); // assumes time-invariant random effects mat X0star = join_horiz(this->X0, Z0main); mat X1star = join_horiz(this->X1, Z1); int K = gauss_x.size(); // number of nodes vec wstar = gauss_w/sqrt(datum::pi); int G = clusters.size(); vec Li(G,fill::zeros); mat gradLi(G,n,fill::zeros); vec betastar = beta; rowvec dconstraint(n,fill::zeros); mat likeli_jk(this->N,K,fill::zeros); vec likeli_k(K,fill::zeros); cube grad_jk(this->N,n,K,fill::zeros); mat grad_kn(K,n,fill::zeros); // for K nodes calculation for (int k=0; k::from(it->second); vec likeli_k = exp(sum(likeli_jk.rows(index),0)).t(); // sum index components at all nodes for cluster i for(int k=0; kbfgs.trace>0) { // Rprintf("fdgradient="); Rprint(this->fdgradient(beta)); // } vec gr(n,fill::zeros); for (int i=0; i double call_objective_clusterND(int n, double * beta, void * model_ptr) { T * model = static_cast(model_ptr); vec bi(beta, n); return model->objective_cluster(bi); } template void call_gradient_clusterND(int n, double * beta, double * out, void * model_ptr) { T * model = static_cast(model_ptr); vec bi(beta, n); vec grad = model->gradient_cluster(bi); for (int i=0; i class NormalSharedFrailty2D : public Base { public: typedef std::vector Index; typedef std::map IndexMap; typedef NormalSharedFrailty2D This; typedef std::map MapVec; typedef std::map MapMat; typedef std::map MapCube; NormalSharedFrailty2D(SEXP sexp) : Base(sexp) { List list = as(sexp); const BaseData fullTmp = {this->X, this->XD, this->X0, this->X1, this->bhazard, this->wt, this->wt0, this->event, this->time, this->offset, this->map0, this->ind0, this->which0}; full = fullTmp; IntegerVector cluster = as(list["cluster"]); full_Z = Z = as(list["Z"]); full_Z0 = Z0 = Z.rows(this->ind0); // this could be size 0... gauss_x = as(list["gauss_x"]); // node values gauss_w = as(list["gauss_w"]); // probability weights adaptive = as(list["adaptive"]); // current = false recurrent = as(list["recurrent"]); first = true; // wragged array indexed by a map of vectors for (int id=0; idnbeta = this->n - reparm; } /** Objective function for normal random effects **/ double corrtransform(double x) { return 2.0/(1.0+exp(-x))-1.0; } double objective_nonadaptive(vec beta) { int n = beta.size(); vec vbeta(beta); calc_SqrtSigma(beta); vbeta.resize(n-reparm); int K = gauss_x.size(); // number of nodes vec wstar = gauss_w/sqrt(datum::pi); vec d = sqrt(2.0)*gauss_x; double constraint = 0.0; double ll = 0.0; bool left_trunc_not_recurrent = (this->delayed && !this->recurrent && !this->interval); vec dk(redim), bi(redim); for (IndexMap::iterator it=clusters.begin(); it!=clusters.end(); ++it) { clusterDesign(it); vec eta = this->X * vbeta; vec etaD = this->XD * vbeta; vec eta0(1,fill::zeros); vec eta1(this->X.n_rows,fill::zeros); if (this->delayed) { eta0 = this->X0 * vbeta; eta1 = this->X1 * vbeta; } double Lj = 0.0, L0j = 0.0; for (int k=0; kdelayed = false; lik = Base::li(eta+Z*bi,etaD,eta0+Z0*bi,eta1+Z*bi,beta); this->delayed = true; H0ik = Base::li_left_truncated(eta0+Z0*bi); L0j += exp(-sum(H0ik.li))*wstar(k)*wstar(kk); constraint += H0ik.constraint; } else { lik = Base::li(eta+Z*bi,etaD,eta0+Z0*bi,eta1+Z*bi,beta); } Lj += exp(sum(lik.li))*wstar(k)*wstar(kk); constraint += lik.constraint; } } ll += log(Lj); if (left_trunc_not_recurrent) ll -= log(L0j); } resetDesign(); return -(ll - constraint); } double objective_cluster(vec bi) { vec vbeta = this->objective_cluster_beta; vbeta.resize(this->n - reparm); vec eta = this->X * vbeta; vec etaD = this->XD * vbeta; vec eta0(this->Z0.n_rows,fill::zeros); vec eta1(this->X.n_rows,fill::zeros); if (this->delayed) { eta0 = this->X0 * vbeta; eta1 = this->X1 * vbeta; } li_constraint lik = Base::li(eta+Z*bi,etaD,eta0+Z0*bi,eta1+Z*bi,vbeta); vec zero(redim,fill::zeros); double ll = sum(lik.li) + dmvnrm_arma(bi,zero,this->Sigma,true); return -ll; } vec gradient_cluster(vec bi) { vec vbeta = this->objective_cluster_beta; vbeta.resize(this->n - reparm); vec eta = this->X * vbeta; vec etaD = this->XD * vbeta; vec eta0(1,fill::zeros); vec eta1(this->X1.n_rows,fill::zeros); if (this->delayed) { eta0 = this->X0 * vbeta; eta1 = this->X1 * vbeta; } mat X = Z; mat XD = mat(this->XD.n_rows,redim,fill::zeros); mat X0 = Z0; mat X1 = Z; gradli_constraint gradlik = Base::gradli(eta+Z*bi,etaD,eta0+Z0*bi,eta1+Z*bi,X,XD,X0,X1,vbeta); vec gradll = (sum(gradlik.gradli,0)).t() - invSigma*bi; return -gradll; } mat calc_SqrtSigma(vec beta, bool calc_inverse = true) { bool flag; int n = beta.size(); Sigma.resize(redim,redim); Sigma(0,0) = exp(beta[n-reparm]); // variance double corr = corrtransform(beta[n-2]); // correlation Sigma(1,1) = exp(beta[n-1]); // variance Sigma(0,1) = Sigma(1,0) = corr*sqrt(Sigma(1,1)*Sigma(0,0)); // covariance if (calc_inverse) flag = inv(invSigma, Sigma); flag = chol(SqrtSigma,Sigma); // which version of RcppArmadillo?? if (!flag) { Rprintf("Sigma:\n"); Rprint(Sigma); Rcpp::stop("Matrix sqrt invalid"); } return SqrtSigma; } // gradient in SqrtSigma wrt beta cube gradSqrtSigma(vec beta, double eps = 1.0e-6) { cube out(redim,redim,reparm,fill::zeros); int offseti = beta.size()-reparm; vec betax; mat val; for (int i=0; i(opt.calc_hessian(call_gradient_clusterND, (void *) this))); flag = chol(sqrttau,tau); // which version of RcppArmadillo?? if (!flag) { Rprintf("tau:\n"); Rprint(tau); Rcpp::stop("Matrix sqrt invalid"); } return sqrttau; } // gradient for SqrtSigma for the cluster-specific modes cube gradSqrtSigma_adaptive(BFGS opt, double eps = 1.0e-6) { cube out(redim,redim,reparm,fill::zeros); vec betax; vec old = this->objective_cluster_beta; mat val; for (int i=0; iobjective_cluster_beta = betax; val = calc_SqrtSigma_adaptive(opt); betax(i) -= 2.0*eps; this->objective_cluster_beta = betax; out.slice(i) = (val - calc_SqrtSigma_adaptive(opt))/2.0/eps; } this->objective_cluster_beta = old; return out; } double objective_adaptive(vec beta) { int n = beta.size(); this->objective_cluster_beta = beta; // for use by objective_cluster() vec vbeta(beta); calc_SqrtSigma(beta); vbeta.resize(n-reparm); int K = gauss_x.size(); // number of nodes vec wstar = gauss_w/sqrt(datum::pi); vec d = sqrt(2.0)*gauss_x; double constraint = 0.0; double ll = 0.0; bool left_trunc_not_recurrent = (this->delayed && !this->recurrent && !this->interval); vec dk(redim), bi(redim); vec zero(redim,fill::zeros); for (IndexMap::iterator it=clusters.begin(); it!=clusters.end(); ++it) { clusterDesign(it); if (muhat.count(it->first)==0) { // initialise muhat[it->first].set_size(redim); for (int i=0; ifirst](i) = 0.0; } // cluster-specific modes BFGS opt; opt.optim(&(call_objective_clusterND), &(call_gradient_clusterND), as(wrap(muhat[it->first])), (void *) this); muhat[it->first] = as(wrap(opt.coef)); // variance for the cluster-specific modes arma::mat tau, sqrttau; bool flag = inv(tau, as(opt.calc_hessian(call_gradient_clusterND, (void *) this))); double dettau = det(tau); // logdet would be more precise dettauhat[it->first] = dettau; flag = chol(sqrttau,tau); // which version of RcppArmadillo? if (!flag) { Rprintf("tau:\n"); Rprint(tau); Rcpp::stop("Matrix sqrt invalid."); } sqrttauhat[it->first] = sqrttau; if (this->optimiser=="BFGS") gradsqrttauhat[it->first] = gradSqrtSigma_adaptive(opt); vec eta = this->X * vbeta; vec etaD = this->XD * vbeta; vec eta0(1,fill::zeros); vec eta1(this->X.n_rows,fill::zeros); if (this->delayed) { eta0 = this->X0 * vbeta; eta1 = this->X1 * vbeta; } double Lj = 0.0, L0j = 0.0; for (int k=0; kfirst] + sqrttau * dk; double g = 0.0, g0 = 0.0; li_constraint lik, l0ik; if (left_trunc_not_recurrent) { this->delayed = false; lik = Base::li(eta+Z*bi,etaD,eta0+Z0*bi,eta1+Z*bi,beta); this->delayed = true; l0ik = Base::li_left_truncated(eta0+Z0*bi); g0 = exp(sum(l0ik.li)+dmvnrm_arma(bi,zero,Sigma,true)); L0j += wstar(k)*wstar(kk)*g0*exp(dot(d,d)/2); } else { lik = Base::li(eta+Z*bi,etaD,eta0+Z0*bi,eta1+Z*bi,beta); } g = exp(sum(lik.li)+dmvnrm_arma(bi,zero,Sigma,true)); Lj += wstar(k)*wstar(kk)*g*exp(dot(d,d)/2); constraint += lik.constraint; } } ll += log(2.0*datum::pi)*redim/2.0+log(dettau)/2.0+log(Lj); if (left_trunc_not_recurrent) ll -= log(L0j); } resetDesign(); first = false; return -(ll - constraint); } vec gradient(vec beta) { return this->adaptive ? gradient_adaptive(beta) : gradient_nonadaptive(beta); } vec gradient_nonadaptive(vec beta) { int n = beta.size(); vec vbeta(beta); vbeta.resize(n-reparm); calc_SqrtSigma(beta); cube gradSqrt = gradSqrtSigma(beta); if (this->bfgs.trace>1) Rprint(gradSqrt); int K = gauss_x.size(); // number of nodes vec wstar = gauss_w/sqrt(datum::pi); vec d = sqrt(2.0)*gauss_x; vec gradl(n,fill::zeros); vec dk(redim), bi(redim); for (IndexMap::iterator it=clusters.begin(); it!=clusters.end(); ++it) { clusterDesign(it); uvec index = conv_to::from(it->second); mat Zmain(Z); mat ZD(this->XD.n_rows,redim,fill::zeros); mat Z0main(Z0); mat Z1(Z); mat Xstar = join_horiz(this->X, Zmain); mat XDstar = join_horiz(this->XD, ZD); // assumes time-invariant random effects mat X0star = join_horiz(this->X0, Z0main); mat X1star = join_horiz(this->X1, Z1); double L = 0.0; vec gradL(n,fill::zeros); vec betastar = beta; betastar.resize(beta.size() - reparm + redim); // for K nodes calculation for (int k=0; kobjective_cluster_beta = beta; // for use by objective_cluster() vec vbeta(beta); vbeta.resize(n-reparm); calc_SqrtSigma(beta); // unnecessary? int K = gauss_x.size(); // number of nodes vec wstar = gauss_w/sqrt(datum::pi); vec d = sqrt(2.0)*gauss_x; vec gradl(n,fill::zeros); vec dk(redim), bi(redim); vec zero(redim,fill::zeros); for (IndexMap::iterator it=clusters.begin(); it!=clusters.end(); ++it) { clusterDesign(it); uvec index = conv_to::from(it->second); vec mu = muhat[it->first]; mat sqrttau = sqrttauhat[it->first]; cube gradsqrttau = gradsqrttauhat[it->first]; mat Zmain(Z); mat ZD(this->XD.n_rows,redim,fill::zeros); mat Z0main(Z0); mat Z1(Z); mat Xstar = join_horiz(this->X, Zmain); mat XDstar = join_horiz(this->XD, ZD); // assumes time-invariant random effects mat X0star = join_horiz(this->X0, Z0main); mat X1star = join_horiz(this->X1, Z1); double L = 0.0; vec gradL(n,fill::zeros); vec betastar = beta; betastar.resize(beta.size() - reparm + redim); // for K nodes calculation for (int k=0; kX = full.X; this->XD = full.XD; this->bhazard = full.bhazard; this->wt = full.wt; this->event = full.event; this->time = full.time; this->offset = full.offset; this->X1 = full.X1; this->X0 = full.X0; this->wt0 = full.wt0; this->which0 = full.which0; this->Z = full_Z; this->Z0 = full_Z0; } void clusterDesign(IndexMap::iterator it) { clusterid = it->first; uvec index = conv_to::from(it->second); this->X = full.X.rows(index); this->XD = full.XD.rows(index); this->X1 = full.X1.rows(index); this->bhazard = full.bhazard(index); this->wt = full.wt(index); this->event = full.event(index); this->offset = full.offset(index); this->time = full.time(index); this->Z = full_Z.rows(index); this->Z0 = mat(1,redim,fill::zeros); if (this->delayed) { uvec index0 = Base::map0f(index); this->X0 = full.X0.rows(index0); this->wt0 = full.wt0(index0); this->Z0 = full_Z0.rows(index0); this->which0 = Base::which0f(index); } } bool feasible(vec beta) { vec coef(beta); coef.resize(beta.size()-reparm); return Base::feasible(coef); } void calculate_modes_and_variances() { vec beta = as(this->bfgs.coef); this->objective_cluster_beta = beta; calc_SqrtSigma(beta); for (IndexMap::iterator it=clusters.begin(); it!=clusters.end(); ++it) { clusterDesign(it); if (muhat.count(it->first)==0) { // initialise muhat[it->first].set_size(redim); for (int i=0; ifirst](i) = 0.0; } // cluster-specific modes BFGS opt; opt.optim(&(call_objective_clusterND), &(call_gradient_clusterND), as(wrap(muhat[it->first])), (void *) this); muhat[it->first] = as(wrap(opt.coef)); // cluster-specific variance arma::mat tau, sqrttau; bool flag = inv(tau, as(opt.calc_hessian(call_gradient_clusterND, (void *) this))); double dettau = det(tau); dettauhat[it->first] = dettau; flag = chol(sqrttau,tau); // which version of RcppArmadillo? if (!flag) { Rprintf("tau:\n"); Rprint(tau); Rcpp::stop("Matrix sqrt invalid."); } sqrttauhat[it->first] = sqrttau; gradsqrttauhat[it->first] = gradSqrtSigma_adaptive(opt); } resetDesign(); } SEXP return_modes() { calculate_modes_and_variances(); return wrap(muhat); } SEXP return_variances() { calculate_modes_and_variances(); return wrap(sqrttauhat); // actually, these are not variances! } OPTIM_FUNCTIONS; IndexMap clusters; vec gauss_x, gauss_w; mat full_Z, full_Z0, Z, Z0; BaseData full; MapVec modes; MapMat variances; vec objective_cluster_beta; MapVec muhat; MapMat sqrttauhat; MapCube gradsqrttauhat; std::map dettauhat; int clusterid, redim, reparm; bool adaptive, first, recurrent; mat Sigma, SqrtSigma, invSigma; }; template SEXP stpm2_model_output_(SEXP args) { T model(args); List list = as(args); std::string return_type = as(list["return_type"]); vec beta(&model.init[0],model.n); if (return_type == "optim") { model.pre_process(); model.optimWithConstraint(model.init); // model.bfgs.hessian = model.bfgs.calc_hessian(&optimgradient, (void *) &model); // model.bfgs.hessian = model.calcHessian(model.bfgs.coef); model.post_process(); return List::create(_("fail")=model.bfgs.fail, _("coef")=wrap(model.bfgs.coef), _("hessian")=wrap(model.bfgs.hessian), _("kappa")=wrap(model.kappa)); } else if (return_type == "objective") return wrap(model.objective(beta)); else if (return_type == "gradient") { model.objective(beta); // only needed for updating NormalSharedFrailty return wrap(model.gradient(beta)); } else if (return_type == "feasible") return wrap(model.feasible(beta)); else if (return_type == "modes") return model.return_modes(); else if (return_type == "variances") return model.return_variances(); else if (return_type == "li") return wrap(model.getli(beta)); else if (return_type == "gradli") return wrap(model.getgradli(beta)); else { REprintf("Unknown return_type.\n"); return wrap(-1); } } template SEXP pstpm2_model_output_(SEXP args) { T model(args); List list = as(args); std::string return_type = as(list["return_type"]); vec beta(&model.init[0],model.n); if (return_type == "optim_fixed") return(model.optim_fixed()); else if (return_type == "optim_first") return(model.optim_first()); else if (return_type == "optim_multivariate") return(model.optim_multivariate()); else if (return_type == "objective") return wrap(model.objective(beta)); else if (return_type == "objective0") return wrap(model.objective0(beta)); else if (return_type == "gradient") { model.objective(beta); return wrap(model.gradient(beta)); } else if (return_type == "gradient0") return wrap(model.gradient0(beta)); else if (return_type == "constraint") return wrap(model.feasible(beta)); else if (return_type == "feasible") return wrap(model.feasible(beta)); else if (return_type == "li") return wrap(model.getli(beta)); else if (return_type == "gradli") return wrap(model.getgradli(beta)); else if (return_type == "modes") return model.return_modes(); else if (return_type == "variances") return model.return_variances(); else { REprintf("Unknown return_type.\n"); return wrap(-1); } } class prof_class { public: prof_class(const std::string &name){ #ifdef DO_PROF std::stringstream ss; auto t = std::time(nullptr); auto tm = *std::localtime(&t); ss << "profile-" << name << std::put_time(&tm, "-%d-%m-%Y-%H-%M-%S.log"); Rcpp::Rcout << "Saving profile output to '" << ss.str() << "'" << std::endl; const std::string s = ss.str(); ProfilerStart(s.c_str()); #endif } #ifdef DO_PROF ~prof_class(){ ProfilerStop(); } #endif }; RcppExport SEXP model_output(SEXP args) { prof_class prof("model_output"); List list = as(args); std::string type = as(list["type"]); if (type=="stpm2") { return stpm2_model_output_(args); } else if (type=="pstpm2") { return pstpm2_model_output_ >(args); } else if (type=="stpm2_gamma_frailty") { return stpm2_model_output_ >(args); } else if (type=="pstpm2_gamma_frailty") { return pstpm2_model_output_,SmoothLogH> >(args); } else if (type=="stpm2_normal_frailty") { return stpm2_model_output_ >(args); } else if (type=="stpm2_normal_frailty_2d") { return stpm2_model_output_ >(args); } else if (type=="pstpm2_normal_frailty") { // order is important here return pstpm2_model_output_,SmoothLogH> >(args); } else if (type=="pstpm2_normal_frailty_2d") { // order is important here return pstpm2_model_output_,SmoothLogH> >(args); } else if (type=="stpm2_clayton_copula") { return stpm2_model_output_ >(args); } else if (type=="pstpm2_clayton_copula") { return pstpm2_model_output_,SmoothLogH> >(args); } else { REprintf("Unknown model type.\n"); return wrap(-1); } } double OmegaCoef_helper(int q, int m, double alpha, Rcpp::NumericMatrix &qm) { if (m==0) return(1.0); if (qm(q,m)!=0.0) return(qm(q,m)); if (m==q-1) qm(q,m) = std::pow(alpha,1.0-q)*R::gammafn(q-alpha)/R::gammafn(1-alpha); else qm(q,m) = OmegaCoef_helper(q-1,m,alpha,qm) + OmegaCoef_helper(q-1,m-1,alpha,qm)*((q-1)/alpha-(q-m)); return(qm(q,m)); } RcppExport SEXP OmegaCoef(SEXP _q, SEXP _alpha) { int q = as(_q); double alpha = as(_alpha); Rcpp::NumericMatrix qm(q+1,q); Rcpp::NumericVector out(q); for (int i=0; i<=q; i++) for (int j=0; j<=(q-1); j++) qm(i,j)=0.0; for (int m=0; mXshape * vbeta(span(0,data->n0-1))); vec scale = exp(data->Xscale * vbeta(span(data->n0,data->n1-1))); vec cure = 1.0/(1.0+exp(-data->Xcure * vbeta(span(data->n1,data->n2-1)))); for (size_t i=0; i < data->time.size(); ++i) { ll += data->status(i)==1.0 ? log(1.0-cure(i)) + R::dweibull(data->time(i),shape(i),scale(i),1) : log(cure(i)+(1.0-cure(i)) * R::pweibull(data->time(i),shape(i),scale(i),0,0)); } R_CheckUserInterrupt(); /* be polite -- did the user hit ctrl-C? */ return -ll; } RcppExport SEXP fitCureModel(SEXP stime, SEXP sstatus, SEXP sXshape, SEXP sXscale, SEXP sXcure, SEXP sbeta) { mat Xshape = as(sXshape); mat Xscale = as(sXscale); mat Xcure = as(sXcure); vec time = as(stime); vec status = as(sstatus); NumericVector init = as(sbeta); int n0=Xshape.n_cols; int n1=n0+Xscale.n_cols; int n2=n1+Xcure.n_cols; CureModel data = {n0,n1,n2,Xshape,Xscale,Xcure,time,status}; NelderMead nm; nm.reltol = 1.0e-8; nm.maxit = 1000; nm.optim(& fminfn_cureModel, init, (void *) &data); for (int i = 0; i #include #include /* for fmax2, fmin2, imin2 */ #include #include /* - Adapted from src/appl/integrate.c, which is a modified f2c translation of QUADPACK. - Principle: change as little of the code as possible - Re-factor to carefully use vec and mat -- but use C arrays if possible and loop when required - f2c uses 1-based indexes -- the re-factor uses some 0-based indexes (elist, rlist, elistSum) - As a reminder, function f: R^ny -> R^ny for each integration point and ny function inputs/outputs (whereas integrate.c has f: R^n -> R^n for n integration points) - This now uses templates, which allows for vectorised integration in C++ as well as in R - Potential issue: use of any() or all() in the conditions may be incorrect. Principle: we want to be conservative. - Potential issue: limit*ny and 52*ny may be large (leading ot C stack overflow):( - Limitation: in some cases, this is not much faster than using integrate() in a for loop in R - TODO: can this be extended to allow for vectorised integration in C++? - GPL>=3 - Mark Clements 2023-07-31 */ //[[Rcpp::depends(RcppArmadillo)]] using namespace arma; using std::vector; template vec eval_f(const F f, const vec x) { return f(x); } template<> vec eval_f(const Rcpp::Function f, const vec x) { return Rcpp::as(Rcpp::wrap(f(Rcpp::wrap(x)))); } template void vrdqk21(const F f, const vec, const vec, const double, const double, vec *, vec *, vec *, vec *); template void vrdqk15i(const F f, const vec boun, const int inf, double *a, double *b, vec *result, vec *abserr, vec *resabs, vec *resasc); static void rdqpsrt(const int, int *, int *, double *, double *, int *, int *); static void rdqelg(int *, double *, double *, double *, double *, int *); template void vrdqagse(const F f, const vec a, const vec b, const double epsabs, const double epsrel, const int limit, const int ny, double *result, double *abserr, int *neval, int *ier, double *alist, double *blist, double *rlist, double *elist, int * iord, int *last); template void vrdqagie(const F f, const vec bound, const int inf, const double epsabs, const double epsrel, const int limit, const int ny, double *resultp, double *abserrp, int *neval, int *ier, double *alist, double *blist, double *rlistp, double *elistp, int *iord, int *last); template void vRdqagi(const F f, const vec bound, const int inf, const double epsabs, const double epsrel, const int limit, const int ny, double *result, double *abserr, int *neval, int *ier, int *lenw, int *last, int *iwork, double *work) { int l1, l2, l3; *ier = 6; *neval = 0; *last = 0; for (int i=0; i(f, bound, inf, epsabs, epsrel, limit, ny, result, abserr, neval, ier, work, &work[l1], &work[l2], &work[l3], iwork, last); return; } /* vRdqags_ */ template void vRdqags(const F f, const vec a, const vec b, const double epsabs, const double epsrel, const int ny, double *result, double *abserr, int *neval, int *ier, const int limit, int *lenw, int *last, int *iwork, double *work) { int l1, l2, l3; /* check validity of limit and lenw. */ *ier = 6; *neval = 0; *last = 0; for (int i=0; i(f, a, b, epsabs, epsrel, limit, ny, result, abserr, neval, ier, work, &work[l1], &work[l2], &work[l3], iwork, last); return; } /* vRdqags_ */ template void vrdqagse(const F f, const vec lower, const vec upper, const double epsabs, const double epsrel, const int limit, const int ny, double *resultp, double *abserrp, int *neval, int *ier, double *alist, double *blist, double *rlistp, double *elistp, int * iord, int *last) { /* Local variables */ Rboolean noext, extrap; int k,ksgn, nres; int ierro; int ktmin, nrmax; int iroff1, iroff2, iroff3; int id; int numrl2; int jupbnd; int maxerr; double *res3la = R_Calloc(3*ny, double);; double *rlist2 = R_Calloc(52*ny, double); vec abseps= zeros(ny), area1= zeros(ny), area2= zeros(ny), area12= zeros(ny); double epmach; double a, b, a1, a2, b1, b2, oflow, uflow; vec defab1= zeros(ny), defab2= zeros(ny), reseps= zeros(ny); vec area= zeros(ny), defabs= zeros(ny), resabs= zeros(ny), dres= zeros(ny), errbnd= zeros(ny); vec error1= zeros(ny), error2= zeros(ny), erro12= zeros(ny), correc= zeros(ny), erlarg= zeros(ny), errsum= zeros(ny); vec errmax= zeros(ny), erlast= zeros(ny), ertest= zeros(ny); double errmaxsum, small = 0.0; // vec result(resultp, limit, false); // vec abserr(abserrp, limit, false); mat elist(elistp, ny, limit, false); mat rlist(rlistp, ny, limit, false); double *elistSum = R_Calloc(limit, double);; /* Parameter adjustments */ --iord; // --elist; // --rlist; --blist; --alist; /* Function Body */ epmach = DBL_EPSILON; /* test on validity of parameters */ /* ------------------------------ */ *ier = 0; *neval = 0; *last = 0; vec result = zeros(ny); vec abserr = zeros(ny); a = 0.0; b = 1.0; alist[1] = a; blist[1] = b; rlist.col(0) = zeros(ny); elist.col(0) = zeros(ny); elistSum[0] = 0.0; if (epsabs <= 0. && epsrel < R::fmax2(epmach * 50., 5e-29)) { *ier = 6; return; } /* first approximation to the integral */ /* ----------------------------------- */ uflow = DBL_MIN; oflow = DBL_MAX; ierro = 0; vrdqk21(f, lower, upper, a, b, &result, &abserr, &defabs, &resabs); /* test on accuracy. */ dres = abs(result); errbnd = max(ones(ny)*epsabs, epsrel * dres); *last = 1; rlist.col(0) = result; elist.col(0) = abserr; elistSum[0] = max(abserr); iord[1] = 1; if (all(abserr <= epmach * 100. * defabs && abserr > errbnd)) // "roundoff error was detected" *ier = 2; if (limit == 1) // "maximum number of subdivisions reached" *ier = 1; if (*ier != 0 || all(abserr <= errbnd && abserr != resabs) // "OK" || all(abserr == 0.)) // "OK" goto L140; /* initialization */ /* -------------- */ for (int i=0; i= (1. - epmach * 50.) * defabs)) { ksgn = 1; } /* main do-loop */ /* ------------ */ for (*last = 2; *last <= limit; ++(*last)) { /* bisect the subinterval with the nrmax-th largest error estimate. */ a1 = alist[maxerr]; b1 = (alist[maxerr] + blist[maxerr]) * .5; a2 = b1; b2 = blist[maxerr]; erlast = errmax; vrdqk21(f, lower, upper, a1, b1, &area1, &error1, &resabs, &defab1); vrdqk21(f, lower, upper, a2, b2, &area2, &error2, &resabs, &defab2); /* improve previous approximations to integral and error and test for accuracy. */ area12 = area1 + area2; erro12 = error1 + error2; errsum = errsum + erro12 - errmax; area = area + area12 - rlist.col(maxerr-1); if (all(defab1 != error1 && defab2 != error2)) { // *any* or all? if (all(abs(rlist.col(maxerr-1) - area12) <= abs(area12) * 1e-5 && // any or all? erro12 >= errmax * .99)) { if (extrap) ++iroff2; else /* if(! extrap) */ ++iroff1; } if (*last > 10 && all(erro12 > errmax)) // any or all? ++iroff3; } rlist.col(maxerr-1) = area1; rlist.col(*last-1) = area2; errbnd = max(ones(ny)*epsabs, epsrel * abs(area)); /* test for roundoff error and eventually set error flag. */ if (iroff1 + iroff2 >= 10 || iroff3 >= 20) *ier = 2; if (iroff2 >= 5) ierro = 3; /* set error flag in the case that the number of subintervals equals limit. */ if (*last == limit) *ier = 1; /* set error flag in the case of bad integrand behaviour at a point of the integration range. */ if (R::fmax2(fabs(a1), fabs(b2)) <= (epmach * 100. + 1.) * (fabs(a2) + uflow * 1e3)) { *ier = 4; } /* append the newly-created intervals to the list. */ if (max(error2) > max(error1)) { alist[maxerr] = a2; alist[*last] = a1; blist[*last] = b1; rlist.col(maxerr-1) = area2; rlist.col(*last-1) = area1; elist.col(maxerr-1) = error2; elist.col(*last-1) = error1; elistSum[maxerr-1] = max(error2); elistSum[*last-1] = max(error1); } else { alist[*last] = a2; blist[maxerr] = b1; blist[*last] = b2; elist.col(maxerr-1) = error1; elist.col(*last-1) = error2; elistSum[maxerr-1] = max(error1); elistSum[*last-1] = max(error2); } /* call subroutine dqpsrt to maintain the descending ordering in the list of error estimates and select the subinterval with nrmax-th largest error estimate (to be bisected next). */ /*L30:*/ // Constant values: limit, last, elist // Updated values: ermax, maxerr, iord, nrmax errmaxsum = max(errmax); rdqpsrt(limit, last, &maxerr, &errmaxsum, elistSum, &iord[1], &nrmax); errmax = elist.col(maxerr-1); if (all(errsum <= errbnd)) goto L115;/* ***jump out of do-loop */ if (*ier != 0) break; if (*last == 2) { /* L80: */ small = fabs(b - a) * .375; erlarg = errsum; ertest = errbnd; for (int i=0; i small) { erlarg += erro12; } if (!extrap) { /* test whether the interval to be bisected next is the smallest interval. */ if (fabs(blist[maxerr] - alist[maxerr]) > small) { continue; } extrap = TRUE; nrmax = 2; } if (ierro != 3 && any(erlarg > ertest)) { // any or all? /* the smallest interval has the largest error. before bisecting decrease the sum of the errors over the larger intervals (erlarg) and perform extrapolation. */ id = nrmax; jupbnd = *last; if (*last > limit / 2 + 2) { jupbnd = limit + 3 - *last; } for (k = id; k <= jupbnd; ++k) { maxerr = iord[nrmax]; errmax = elist.col(maxerr-1); if (fabs(blist[maxerr] - alist[maxerr]) > small) { goto L90; } ++nrmax; /* L50: */ } } /* perform extrapolation. L60: */ ++numrl2; for (int i=0; i 5 && all(abserr < errsum * .001)) { *ier = 5; // "roundoff error is detected in the extrapolation table" } if (any(abseps < abserr)) { ktmin = 0; abserr = abseps; result = reseps; correc = erlarg; ertest = max(ones(ny)*epsabs, epsrel * abs(reseps)); if (all(abserr <= ertest)) { break; } } /* prepare bisection of the smallest interval. L70: */ if (numrl2 == 1) { noext = TRUE; } if (*ier == 5) { break; } maxerr = iord[1]; errmax = elist.col(maxerr-1); nrmax = 1; extrap = FALSE; small *= .5; erlarg = errsum; L90: ; } /* L100: set final result and error estimate. */ /* ------------------------------------ */ if (all(abserr == oflow)) goto L115; // all or any? if (*ier + ierro != 0) { if (ierro == 3) abserr += correc; if (*ier == 0) *ier = 3; if (all(result == 0. || area == 0.)) { if (all(abserr > errsum)) goto L115; if (all(area == 0.)) goto L130; } else { /* L105:*/ if (all(abserr / abs(result) > errsum / abs(area))) goto L115; } } /* L110: test on divergence. */ if (!(ksgn == -1 && all(max(abs(result), abs(area)) <= defabs * .01)) && all(.01 > result / area || result / area > 100. || errsum > abs(area))) { *ier = 5; // "the integral is probably divergent" } goto L130; L115:/* compute global integral sum. */ result = zeros(ny); for (k = 1; k <= *last; ++k) result += rlist.col(k-1); abserr = errsum; L130: L140: *neval = *last * 42 - 21; for (int i=0; i void vrdqagie(const F f, const vec bboun, const int inf, const double epsabs, const double epsrel, const int limit, const int ny, double *resultp, double *abserrp, int *neval, int *ier, double *alist, double *blist, double *rlistp, double *elistp, int *iord, int *last) { /* Local variables */ vec area=zeros(ny), dres=zeros(ny); int ksgn; int nres; vec area1=zeros(ny), area2=zeros(ny), area12=zeros(ny), erro12=zeros(ny); int k; double small = 0.0; int ierro; double a1, a2, b1, b2, oflow; vec defab1=zeros(ny), defab2=zeros(ny); int ktmin, nrmax; double uflow; Rboolean noext; int iroff1, iroff2, iroff3; double *res3la = R_Calloc(3*ny, double); vec error1=zeros(ny), error2=zeros(ny); int id; double *rlist2 = R_Calloc(52*ny, double); int numrl2; vec correc=zeros(ny), abseps=zeros(ny), errbnd=zeros(ny), resabs=zeros(ny), erlarg=zeros(ny), defabs=zeros(ny); double epmach; int jupbnd; vec erlast=zeros(ny), errmax=zeros(ny), reseps=zeros(ny); int maxerr; double errmaxsum; Rboolean extrap; vec ertest=zeros(ny), errsum=zeros(ny); vec result = zeros(ny), abserr = zeros(ny); mat elist(elistp, ny, limit, false); mat rlist(rlistp, ny, limit, false); double *elistSum = R_Calloc(limit, double); /* ***first executable statement dqagie */ /* Parameter adjustments */ --iord; // --elist; // --rlist; --blist; --alist; /* Function Body */ epmach = DBL_EPSILON; /* test on validity of parameters */ /* ----------------------------- */ *ier = 0; *neval = 0; *last = 0; alist[1] = 0.; blist[1] = 1.; rlist.col(0) = zeros(ny); elist.col(0) = zeros(ny); elistSum[0] = 0.0; iord[1] = 0; if (epsabs <= 0. && (epsrel < R::fmax2(epmach * 50., 5e-29))) *ier = 6; if (*ier == 6) return; /* first approximation to the integral */ /* ----------------------------------- */ /* determine the interval to be mapped onto (0,1). if inf = 2 the integral is computed as i = i1+i2, where i1 = integral of f over (-infinity,0), i2 = integral of f over (0,+infinity). */ vrdqk15i(f, bboun, inf, &c_b6, &c_b7, &result, &abserr, &defabs, &resabs); /* test on accuracy */ *last = 1; rlist.col(0) = result; elist.col(0) = abserr; elistSum[0] = max(abserr); iord[1] = 1; dres = abs(result); errbnd = max(ones(ny)*epsabs, epsrel * dres); if (all(abserr <= epmach * 100. * defabs && abserr > errbnd)) *ier = 2; // "roundoff error was detected" if (limit == 1) *ier = 1; // "maximum number of subdivisions reached" if (*ier != 0 || all(abserr <= errbnd && abserr != resabs) || all(abserr == 0.)) goto L130; /* initialization */ /* -------------- */ uflow = DBL_MIN; oflow = DBL_MAX; for (int i=0; i= (1. - epmach * 50.) * defabs)) { // any or all or do separately? ksgn = 1; } /* main do-loop */ /* ------------ */ for (*last = 2; *last <= limit; ++(*last)) { /* bisect the subinterval with nrmax-th largest error estimate. */ a1 = alist[maxerr]; b1 = (alist[maxerr] + blist[maxerr]) * .5; a2 = b1; b2 = blist[maxerr]; erlast = errmax; vrdqk15i(f, bboun, inf, &a1, &b1, &area1, &error1, &resabs, &defab1); vrdqk15i(f, bboun, inf, &a2, &b2, &area2, &error2, &resabs, &defab2); /* improve previous approximations to integral and error and test for accuracy. */ area12 = area1 + area2; erro12 = error1 + error2; errsum = errsum + erro12 - errmax; area = area + area12 - rlist.col(maxerr-1); if (all(defab1 != error1 && defab2 != error2)) { if (all(abs(rlist.col(maxerr-1) - area12) <= abs(area12) * 1e-5 && erro12 >= errmax * .99)) { if (extrap) ++iroff2; else /* if (! extrap) */ ++iroff1; } if (*last > 10 && all(erro12 > errmax)) ++iroff3; } rlist.col(maxerr-1) = area1; rlist.col(*last-1) = area2; errbnd = max(ones(ny)*epsabs, epsrel * abs(area)); /* test for roundoff error and eventually set error flag. */ if (iroff1 + iroff2 >= 10 || iroff3 >= 20) *ier = 2; if (iroff2 >= 5) ierro = 3; /* set error flag in the case that the number of subintervals equals limit. */ if (*last == limit) *ier = 1; /* set error flag in the case of bad integrand behaviour at some points of the integration range. */ if (R::fmax2(fabs(a1), fabs(b2)) <= (epmach * 100. + 1.) * (fabs(a2) + uflow * 1e3)) { *ier = 4; } /* append the newly-created intervals to the list. */ if (max(error2) <= max(error1)) { alist[*last] = a2; blist[maxerr] = b1; blist[*last] = b2; elist.col(maxerr-1) = error1; elist.col(*last-1) = error2; elistSum[maxerr-1] = max(error1); elistSum[*last-1] = max(error2); } else { alist[maxerr] = a2; alist[*last] = a1; blist[*last] = b1; rlist.col(maxerr-1) = area2; rlist.col(*last-1) = area1; elist.col(maxerr-1) = error2; elist.col(*last-1) = error1; elistSum[maxerr-1] = max(error2); elistSum[*last-1] = max(error1); } /* call subroutine dqpsrt to maintain the descending ordering in the list of error estimates and select the subinterval with nrmax-th largest error estimate (to be bisected next). */ errmaxsum = max(errmax); rdqpsrt(limit, last, &maxerr, &errmaxsum, elistSum, &iord[1], &nrmax); errmax = elist.col(maxerr-1); if (all(errsum <= errbnd)) { goto L115; } if (*ier != 0) break; if (*last == 2) { /* L80: */ small = .375; erlarg = errsum; ertest = errbnd; for (int i=0; i small) { erlarg += erro12; } if (!extrap) { /* test whether the interval to be bisected next is the smallest interval. */ if (fabs(blist[maxerr] - alist[maxerr]) > small) { continue; } extrap = TRUE; nrmax = 2; } if (ierro != 3 && any(erlarg > ertest)) { /* the smallest interval has the largest error. before bisecting decrease the sum of the errors over the larger intervals (erlarg) and perform extrapolation. */ id = nrmax; jupbnd = *last; if (*last > limit / 2 + 2) { jupbnd = limit + 3 - *last; } for (k = id; k <= jupbnd; ++k) { maxerr = iord[nrmax]; errmax = elist.col(maxerr-1); if (fabs(blist[maxerr] - alist[maxerr]) > small) { goto L90; } ++nrmax; /* L50: */ } } /* perform extrapolation. L60: */ ++numrl2; for (int i=0; i 5 && all(abserr < errsum * .001)) { *ier = 5; } if (all(abseps >= abserr)) { goto L70; } ktmin = 0; abserr = abseps; result = reseps; correc = erlarg; ertest = max(ones(ny)*epsabs, epsrel * abs(reseps)); if (all(abserr <= ertest)) { break; } /* prepare bisection of the smallest interval. */ L70: if (numrl2 == 1) { noext = TRUE; } if (*ier == 5) { break; } maxerr = iord[1]; errmax = elist.col(maxerr-1); nrmax = 1; extrap = FALSE; small *= .5; erlarg = errsum; L90: ; } /* L100: set final result and error estimate. */ /* ------------------------------------ */ if (all(abserr == oflow)) { goto L115; } if (*ier + ierro == 0) { goto L110; } if (ierro == 3) { abserr += correc; } if (*ier == 0) { *ier = 3; } if (all(result == 0. || area == 0.)) { if (all(abserr > errsum)) goto L115; if (all(area == 0.)) goto L130; } else { /* L105: */ if (all(abserr / abs(result) > errsum / abs(area))) { goto L115; } } /* test on divergence */ L110: if (ksgn == -1 && all(max(abs(result), abs(area)) <= defabs * .01)) { goto L130; } if (all(.01 > result / area || result / area > 100. || errsum > abs(area))) { *ier = 6; } goto L130; /* compute global integral sum. */ L115: result = zeros(ny); for (k = 1; k <= *last; ++k) result += rlist.col(k-1); abserr = errsum; L130: *neval = *last * 30 - 15; if (inf == 2) { *neval <<= 1; } if (*ier > 2) { --(*ier); } for (int i=0; i void vrdqk15i(const F f, const vec bboun, const int inf, double *a, double *b, vec *result, vec *abserr, vec *resabs, vec *resasc) { /* Initialized data */ static double wg[8] = { 0., .129484966168869693270611432679082, 0., .27970539148927666790146777142378, 0., .381830050505118944950369775488975, 0., .417959183673469387755102040816327 }; static double xgk[8] = { .991455371120812639206854697526329, .949107912342758524526189684047851, .864864423359769072789712788640926, .741531185599394439863864773280788, .58608723546769113029414483825873, .405845151377397166906606412076961, .207784955007898467600689403773245, 0. }; static double wgk[8] = { .02293532201052922496373200805897, .063092092629978553290700663189204, .104790010322250183839876322541518, .140653259715525918745189590510238, .16900472663926790282658342659855, .190350578064785409913256402421014, .204432940075298892414161999234649, .209482141084727828012999174891714 }; /* Local variables */ double epmach, uflow, dinf, centr, hlgth, boun; std::vector fv1(7), fv2(7); double vect[15], vec2[15]; double tabsc1, tabsc2, absc, absc1, absc2; vec fval1, fval2, fc, resg, resk, fsum, reskh; int j, ny; /* ***first executable statement dqk15i */ epmach = DBL_EPSILON; uflow = DBL_MIN; dinf = (double) R::imin2(1, inf); boun = 0.0; centr = (*a + *b) * .5; hlgth = (*b - *a) * .5; tabsc1 = boun + dinf * (1. - centr) / centr; vect[0] = tabsc1; if (inf == 2) { vec2[0] = -tabsc1; } for (j = 1; j <= 7; ++j) { absc = hlgth * xgk[j - 1]; absc1 = centr - absc; absc2 = centr + absc; tabsc1 = boun + dinf * (1. - absc1) / absc1; tabsc2 = boun + dinf * (1. - absc2) / absc2; vect[(j << 1) - 1] = tabsc1; vect[j * 2] = tabsc2; if (inf == 2) { vec2[(j << 1) - 1] = -tabsc1; vec2[j * 2] = -tabsc2; } /* L5: */ } fval1 = eval_f(f, bboun+vect[0]); ny = fval1.size(); if (inf == 2) fval2 = eval_f(f,bboun+vec2[0]); if (inf == 2) fval1 += fval2; fc = fval1 / centr / centr; /* compute the 15-point kronrod approximation to the integral, and estimate the error. */ resg = wg[7] * fc; resk = wgk[7] * fc; *resabs = abs(resk); for (j = 1; j <= 7; ++j) { absc = hlgth * xgk[j - 1]; absc1 = centr - absc; absc2 = centr + absc; tabsc1 = boun + dinf * (1. - absc1) / absc1; tabsc2 = boun + dinf * (1. - absc2) / absc2; fval1 = eval_f(f,bboun+vect[(j << 1) - 1]); fval2 = eval_f(f,bboun+vect[j * 2]); if (inf == 2) { fval1 += eval_f(f,bboun+vec2[(j << 1) - 1]); fval2 += eval_f(f,bboun+vec2[j * 2]); } fval1 = fval1 / absc1 / absc1; fval2 = fval2 / absc2 / absc2; fv1[j - 1] = fval1; fv2[j - 1] = fval2; fsum = fval1 + fval2; resg += wg[j - 1] * fsum; resk += wgk[j - 1] * fsum; *resabs += wgk[j - 1] * (abs(fval1) + abs(fval2)); /* L10: */ } reskh = resk * .5; *resasc = wgk[7] * abs(fc - reskh); for (j = 1; j <= 7; ++j) { *resasc += wgk[j - 1] * (abs(fv1[j - 1] - reskh) + abs(fv2[j - 1] - reskh)); /* L20: */ } *result = resk * hlgth; *resasc *= hlgth; *resabs *= hlgth; *abserr = abs((resk - resg) * hlgth); for (int i=0; i uflow / (epmach * 50.)) { (*abserr)[i] = R::fmax2(epmach * 50. * (*resabs)[i], (*abserr)[i]); } } return; } /* vrdqk15i_ */ template void vrdqk21(const F f, const vec lower, const vec upper, const double a, const double b, vec *result, vec *abserr, vec *resabs, vec *resasc) { /* Initialized data */ static double wg[5] = { .066671344308688137593568809893332, .149451349150580593145776339657697, .219086362515982043995534934228163, .269266719309996355091226921569469, .295524224714752870173892994651338 }; static double xgk[11] = { .995657163025808080735527280689003, .973906528517171720077964012084452, .930157491355708226001207180059508, .865063366688984510732096688423493, .780817726586416897063717578345042, .679409568299024406234327365114874, .562757134668604683339000099272694, .433395394129247190799265943165784, .294392862701460198131126603103866, .14887433898163121088482600112972,0. }; static double wgk[11] = { .011694638867371874278064396062192, .03255816230796472747881897245939, .05475589657435199603138130024458, .07503967481091995276704314091619, .093125454583697605535065465083366, .109387158802297641899210590325805, .123491976262065851077958109831074, .134709217311473325928054001771707, .142775938577060080797094273138717, .147739104901338491374841515972068, .149445554002916905664936468389821 }; /* Local variables */ std::vector fv1(10), fv2(10); double absc, vect[21]; vec resg, resk, fsum, fval1, fval2; vec fc, reskh, delta; double hlgth, centr, uflow; double epmach, dhlgth; int j, jtw, jtwm1, ny; epmach = DBL_EPSILON; uflow = DBL_MIN; delta = upper-lower; centr = (a + b) * .5; hlgth = (b - a) * .5; dhlgth = fabs(hlgth); /* compute the 21-point kronrod approximation to the integral, and estimate the absolute error. */ vect[0] = centr; for (j = 1; j <= 5; ++j) { jtw = j << 1; absc = hlgth * xgk[jtw - 1]; vect[(j << 1) - 1] = centr - absc; /* L5: */ vect[j * 2] = centr + absc; } for (j = 1; j <= 5; ++j) { jtwm1 = (j << 1) - 1; absc = hlgth * xgk[jtwm1 - 1]; vect[(j << 1) + 9] = centr - absc; vect[(j << 1) + 10] = centr + absc; } fc = eval_f(f,lower+delta*vect[0]); ny = fc.size(); resg = zeros(ny); resk = wgk[10] * fc; *resabs = abs(resk); for (j = 1; j <= 5; ++j) { jtw = j << 1; absc = hlgth * xgk[jtw - 1]; fval1 = eval_f(f,lower+delta*vect[(j << 1) - 1]); fval2 = eval_f(f,lower+delta*vect[j * 2]); fv1[jtw - 1] = fval1; fv2[jtw - 1] = fval2; fsum = fval1 + fval2; resg += wg[j - 1] * fsum; resk += wgk[jtw - 1] * fsum; *resabs += wgk[jtw - 1] * (abs(fval1) + abs(fval2)); /* L10: */ } for (j = 1; j <= 5; ++j) { jtwm1 = (j << 1) - 1; absc = hlgth * xgk[jtwm1 - 1]; fval1 = eval_f(f,lower+delta*vect[(j << 1) + 9]); fval2 = eval_f(f,lower+delta*vect[(j << 1) + 10]); fv1[jtwm1 - 1] = fval1; fv2[jtwm1 - 1] = fval2; fsum = fval1 + fval2; resk += wgk[jtwm1 - 1] * fsum; *resabs += wgk[jtwm1 - 1] * (abs(fval1) + abs(fval2)); /* L15: */ } reskh = resk * .5; *resasc = wgk[10] * abs(fc - reskh); for (j = 1; j <= 10; ++j) { *resasc += wgk[j - 1] * (abs(fv1[j - 1] - reskh) + abs(fv2[j - 1] - reskh)); /* L20: */ } *result = resk * hlgth; *resabs *= dhlgth; *resasc *= dhlgth; *abserr = abs((resk - resg) * hlgth); for (int i=0; i uflow / (epmach * 50.)) { (*abserr)[i] = R::fmax2(epmach * 50. * (*resabs)[i], (*abserr)[i]); } } return; } /* vrdqk21_ */ // Constant values: limit, last, elist // Updated values: ermax, maxerr, iord, nrmax static void rdqpsrt(const int limit, int *last, int *maxerr, double *ermax, double *elist, int *iord, int *nrmax) { /* Local variables */ int i, j, k, ido, jbnd, isucc, jupbn; double errmin, errmax; /* Parameter adjustments */ --iord; --elist; /* Function Body */ /* check whether the list contains more than two error estimates. */ if (*last <= 2) { iord[1] = 1; iord[2] = 2; goto Last; } /* this part of the routine is only executed if, due to a difficult integrand, subdivision increased the error estimate. in the normal case the insert procedure should start after the nrmax-th largest error estimate. */ errmax = elist[*maxerr]; if (*nrmax > 1) { ido = *nrmax - 1; for (i = 1; i <= ido; ++i) { isucc = iord[*nrmax - 1]; if (errmax <= elist[isucc]) break; /* out of for-loop */ iord[*nrmax] = isucc; --(*nrmax); /* L20: */ } } /*L30: compute the number of elements in the list to be maintained in descending order. this number depends on the number of subdivisions still allowed. */ if (*last > limit / 2 + 2) jupbn = limit + 3 - *last; else jupbn = *last; errmin = elist[*last]; /* insert errmax by traversing the list top-down, starting comparison from the element elist(iord(nrmax+1)). */ jbnd = jupbn - 1; for (i = *nrmax + 1; i <= jbnd; ++i) { isucc = iord[i]; if (errmax >= elist[isucc]) {/* ***jump out of do-loop */ /* L60: insert errmin by traversing the list bottom-up. */ iord[i - 1] = *maxerr; for (j = i, k = jbnd; j <= jbnd; j++, k--) { isucc = iord[k]; if (errmin < elist[isucc]) { /* goto L80; ***jump out of do-loop */ iord[k + 1] = *last; goto Last; } iord[k + 1] = isucc; } iord[i] = *last; goto Last; } iord[i - 1] = isucc; } iord[jbnd] = *maxerr; iord[jupbn] = *last; Last:/* set maxerr and ermax. */ *maxerr = iord[*nrmax]; *ermax = elist[*maxerr]; return; } /* rdqpsrt_ */ // Constant values: // Updated values: n, epstab, result, abserr, res3la, nres static void rdqelg(int *n, double *epstab, double * result, double *abserr, double *res3la, int *nres) { /* Local variables */ int i__, indx, ib, ib2, ie, k1, k2, k3, num, newelm, limexp; double delta1, delta2, delta3, e0, e1, e1abs, e2, e3, epmach, epsinf; double oflow, ss, res; double errA, err1, err2, err3, tol1, tol2, tol3; /* Parameter adjustments */ --res3la; --epstab; /* Function Body */ epmach = DBL_EPSILON; oflow = DBL_MAX; ++(*nres); *abserr = oflow; *result = epstab[*n]; if (*n < 3) { goto L100; } limexp = 50; epstab[*n + 2] = epstab[*n]; newelm = (*n - 1) / 2; epstab[*n] = oflow; num = *n; k1 = *n; for (i__ = 1; i__ <= newelm; ++i__) { k2 = k1 - 1; k3 = k1 - 2; res = epstab[k1 + 2]; e0 = epstab[k3]; e1 = epstab[k2]; e2 = res; e1abs = fabs(e1); delta2 = e2 - e1; err2 = fabs(delta2); tol2 = R::fmax2(fabs(e2), e1abs) * epmach; delta3 = e1 - e0; err3 = fabs(delta3); tol3 = R::fmax2(e1abs, fabs(e0)) * epmach; if (err2 <= tol2 && err3 <= tol3) { /* if e0, e1 and e2 are equal to within machine accuracy, convergence is assumed. */ *result = res;/* result = e2 */ *abserr = err2 + err3;/* abserr = fabs(e1-e0)+fabs(e2-e1) */ goto L100; /* ***jump out of do-loop */ } e3 = epstab[k1]; epstab[k1] = e1; delta1 = e1 - e3; err1 = fabs(delta1); tol1 = R::fmax2(e1abs, fabs(e3)) * epmach; /* if two elements are very close to each other, omit a part of the table by adjusting the value of n */ if (err1 > tol1 && err2 > tol2 && err3 > tol3) { ss = 1. / delta1 + 1. / delta2 - 1. / delta3; epsinf = fabs(ss * e1); /* test to detect irregular behaviour in the table, and eventually omit a part of the table adjusting the value of n. */ if (epsinf > 1e-4) { goto L30; } } *n = i__ + i__ - 1; goto L50;/* ***jump out of do-loop */ L30:/* compute a new element and eventually adjust the value of result. */ res = e1 + 1. / ss; epstab[k1] = res; k1 += -2; errA = err2 + fabs(res - e2) + err3; if (errA <= *abserr) { *abserr = errA; *result = res; } } /* shift the table. */ L50: if (*n == limexp) { *n = (limexp / 2 << 1) - 1; } if (num / 2 << 1 == num) ib = 2; else ib = 1; ie = newelm + 1; for (i__ = 1; i__ <= ie; ++i__) { ib2 = ib + 2; epstab[ib] = epstab[ib2]; ib = ib2; } if (num != *n) { indx = num - *n + 1; for (i__ = 1; i__ <= *n; ++i__) { epstab[i__] = epstab[indx]; ++indx; } } /*L80:*/ if (*nres >= 4) { /* L90: */ *abserr = fabs(*result - res3la[3]) + fabs(*result - res3la[2]) + fabs(*result - res3la[1]); res3la[1] = res3la[2]; res3la[2] = res3la[3]; res3la[3] = *result; } else { res3la[*nres] = *result; *abserr = oflow; } L100:/* compute error estimate */ *abserr = R::fmax2(*abserr, epmach * 5. * fabs(*result)); return; } /* rdqelg_ */ template Rcpp::List vdqags(const F f, const vec a, const vec b, const double epsrel, const double epsabs, const int limit, const int ny) { using namespace Rcpp; double *result = R_Calloc(ny, double); double *abserr = R_Calloc(ny, double); int lenw, ier, neval, last; lenw = 2*limit*ny + 2*limit; int *iwork = R_Calloc(limit, int); double *work = R_Calloc(lenw, double); vRdqags(f, a, b, epsabs, epsrel, ny, result, abserr, &neval, &ier, limit, &lenw, &last, iwork, work); vec result2(result,ny); vec abserr2(abserr,ny); R_Free(result); R_Free(abserr); R_Free(iwork); R_Free(work); return List::create(_("value") = result2, _("abs.err") = abserr2, _("subdivisions") = last, _("ierr") = ier); } template Rcpp::List vdqagi(const F f, const vec bound, const int inf, const double epsrel, const double epsabs, const int limit, const int ny) { using namespace Rcpp; double *result = R_Calloc(ny, double); double *abserr = R_Calloc(ny, double); int lenw, ier, neval, last; lenw = 2*limit*ny + 2*limit; int *iwork = R_Calloc(limit, int); double *work = R_Calloc(lenw, double); vRdqagi(f, bound, inf, epsabs, epsrel, limit, ny, result, abserr, &neval, &ier, &lenw, &last, iwork, work); vec resultnv(result, ny); vec abserrnv(abserr, ny); R_Free(result); R_Free(abserr); R_Free(iwork); R_Free(work); return List::create(_("value") = resultnv, _("abs.err") = abserrnv, _("subdivisions") = last, _("ierr") = ier); } // [[Rcpp::export]] Rcpp::List vdqagsRcpp(const Rcpp::Function f, const arma::vec a, const arma::vec b, const double epsrel, const double epsabs, const int limit, const int ny) { // RcppExport SEXP vdqagsRcpp(SEXP _f, SEXP _a, SEXP _b, // SEXP _epsrel, SEXP _epsabs, SEXP _limit, // SEXP _ny) { using namespace Rcpp; // Function f = as(_f); // double a = as(_a); // double b = as(_b); // double epsrel = as(_epsrel); // double epsabs = as(_epsabs); // int limit = as(_limit); // int ny = as(_ny); return vdqags(f, a, b, epsrel, epsabs, limit, ny); } // [[Rcpp::export]] Rcpp::List vdqagiRcpp(const Rcpp::Function f, const arma::vec bound, const int inf, const double epsrel, const double epsabs, const int limit, const int ny) { // RcppExport SEXP vdqagiRcpp(SEXP _f, SEXP _bound, SEXP _inf, // SEXP _epsrel, SEXP _epsabs, SEXP _limit, SEXP _ny) { using namespace Rcpp; // Function f = as(_f); // double bound = as(_bound); // int inf = as(_inf); // double epsrel = as(_epsrel); // double epsabs = as(_epsabs); // int limit = as(_limit); // int ny = as(_ny); return vdqagi(f, bound, inf, epsrel, epsabs, limit, ny); } // [[Rcpp::export]] Rcpp::List vrdqk21Rcpp(const Rcpp::Function f, const arma::vec lower, const arma::vec upper, const double a, const double b) { // RcppExport SEXP vrdqk21Rcpp(SEXP _f, SEXP _a, SEXP _b) { using namespace Rcpp; // Function f = as(_f); // double a = as(_a); // double b = as(_b); vec result, abserr, resabs, resasc; vrdqk21(f, lower, upper, a, b, &result, &abserr, &resabs, &resasc); return List::create(_("value") = result, _("abs.err") = abserr); } // [[Rcpp::export]] Rcpp::List vrdqk15Rcpp(const Rcpp::Function f, const arma::vec boun, const int inf, double a, double b) { // RcppExport SEXP vrdqk15Rcpp(SEXP _f, SEXP _boun, SEXP _inf, SEXP _a, SEXP _b) { using namespace Rcpp; // Function f = as(_f); // double boun = as(_boun); // int inf = as(_inf); // double a = as(_a); // double b = as(_b); vec result, abserr, resabs, resasc; vrdqk15i(f, boun, inf, &a, &b, &result, &abserr, &resabs, &resasc); return List::create(_("value") = result, _("abserr") = abserr); } vec test_f(const arma::vec a) { vec out{exp(a[0]), exp(2*a[1]), log(a[2])}; return out; } // [[Rcpp::export]] Rcpp::List test_vdqags() { vec lower{0.0,0.0,0.0}, upper{1.0, 1.0, 1.0}; return vdqags(test_f, lower, upper, 1.0e-8, 1.0e-8, 50, 3); } vec test_f2(const arma::vec a) { vec out{exp(a[0]), exp(2*a[1])}; return out; } // [[Rcpp::export]] Rcpp::List test_vdqagi() { vec bound{0.0,0.0}; return vdqagi(test_f2, bound, -1, 1.0e-8, 1.0e-8, 50, 2); } rstpm2/src/pluginEstimate2.cpp0000644000176200001440000003702214445004404016053 0ustar liggesusers #include #include #include using namespace arma; /** Value to pass back from pluginEstimateDiscrete */ struct PluginEstimateDiscrete { mat X; /**< State matrix (nState x nTimes) */ mat variance; /**< State variance matrix (nState x nTimes) */ cube covariance; /**< State covariance matrix (nState x nState x nTimes) */ bool vcov; /**< Indicator whether covariances are recorded */ int n; /**< Number of initial observations */ mat Y; /**< Matrix of weighted X */ mat varY; /**< Matrix of variances for weighted X */ }; /** Value to pass back from pluginEstimateCts */ struct PluginEstimateCts { mat X; /**< State matrix (nState x nTimes) */ mat variance; /**< State variance matrix (nState x nTimes) */ cube covariance; /**< State covariance matrix (nState x nState x nTimes) */ bool vcov; /**< Indicator whether covariances are recorded */ int n; /**< Number of initial observations */ vec time; /**< Times */ mat Y; /**< Matrix of weighted X */ mat varY; /**< Matrix of variances for weighted X */ }; namespace Rcpp { template <> SEXP wrap(const PluginEstimateDiscrete& x); template <> SEXP wrap(const PluginEstimateCts& x); } #include namespace Rcpp { template <> SEXP wrap(const PluginEstimateDiscrete& x) { return Rcpp::wrap(Rcpp::List::create(Rcpp::Named("X") = Rcpp::wrap(x.X), Rcpp::Named("variance") = Rcpp::wrap(x.variance), Rcpp::Named("covariance") = Rcpp::wrap(x.covariance), Rcpp::Named("vcov") = Rcpp::wrap(x.vcov), Rcpp::Named("n") = Rcpp::wrap(x.n), Rcpp::Named("Y") = Rcpp::wrap(x.Y), Rcpp::Named("varY") = Rcpp::wrap(x.varY))); }; template <> SEXP wrap(const PluginEstimateCts& x) { return Rcpp::wrap(Rcpp::List::create(Rcpp::Named("X") = Rcpp::wrap(x.X), Rcpp::Named("variance") = Rcpp::wrap(x.variance), Rcpp::Named("covariance") = Rcpp::wrap(x.covariance), Rcpp::Named("vcov") = Rcpp::wrap(x.vcov), Rcpp::Named("n") = Rcpp::wrap(x.n), Rcpp::Named("time") = Rcpp::wrap(x.time), Rcpp::Named("Y") = Rcpp::wrap(x.Y), Rcpp::Named("varY") = Rcpp::wrap(x.varY))); }; } /** Find values within an interval */ class FindInterval { public: typedef std::vector stdvec; typedef stdvec::iterator Iter; /**< Iterator used for speed cf. convenience */ /** Constructor that reads in a vector that is assumed to be sorted */ FindInterval(vec inx) { x = conv_to::from(inx); } int operator()(double xi, int previous = 0) { int index = std::lower_bound(x.begin()+previous, x.end(), xi) - x.begin(); return (x[index]==xi) ? index+1 : index; } Iter find(double xi, int previous = 0) { return std::find(x.begin()+previous, x.end(), xi); } bool member(double xi, int previous = 0) { return find(xi,previous) != x.end(); } bool member(Iter iter) { return iter != x.end(); } int index(Iter iter) { return iter - x.begin(); } int index(double xi, int previous = 0) { return find(xi,previous) - x.begin(); } private: stdvec x; }; /** Construct block diagonal matrix @param bag An ordered bag of matrices to be used to form the block diagonal matrix */ template Mat bdiag(field > bag) { int nr=0, nc=0; for (size_t i=0; i out(nr,nc); out.zeros(); nr=0; nc=0; for (size_t i=0; i Mat bdiag(Mat m0, Mat m1) { field > bag(2); bag(0) = m0; bag(1) = m1; return bdiag(bag); } std::function Fprob(int nStates, imat indices) { return [nStates,indices](vec X) -> mat { mat out(nStates,indices.n_rows); out.zeros(); for (size_t i=0; i Fjac(int nStates, std::function F) { return [nStates,F](vec X) -> cube { mat f = F(linspace(1.0,double(nStates),nStates)); cube out(f.n_rows,f.n_rows,f.n_cols); for (size_t j=0; j Fcombined(int nObs, int nStates, std::function F) { return [nObs,nStates,F](vec X) -> mat { field set(nObs); for (int i=0; i(set); }; } std::function addFlos(std::function F) { return [F](vec X) -> mat { vec X1 = X(span(0,X.n_elem/2-1)); mat F1 = F(X1); mat F2(X.n_elem/2,1); F2 = X1; return bdiag(F1,F2); }; } mat makeW(int nStates, vec weights, int nOuter=1) { int nObs = weights.n_elem; mat W=eye(nStates,nStates)*weights(0); if (nObs>1) for (int i=1; i1) { mat Wi = W; for (int i=1; i f, std::function gradf, vec X0, mat V0, mat W=zeros(1,1), bool vcov=false) { int numIncrements = hazMatrix.n_cols; mat X = zeros(X0.n_elem, numIncrements); cube covariance = vcov ? zeros(V0.n_rows, V0.n_cols, numIncrements) : zeros(1,1,1); mat variance = zeros(V0.n_rows, numIncrements); vec Xn = X0; mat Vn = V0; mat Y = zeros(1,1); // default if W is not specified mat varY = zeros(1,1); // default if W is not specified if (W.n_rows == X0.n_elem) { Y = zeros(W.n_cols,numIncrements); varY = zeros(W.n_cols,numIncrements); } cube gradf0 = gradf(X0); // for dimensions int Xrows = X0.n_elem, // hazRows = hazMatrix.n_rows, numHaz = gradf0.n_slices; X.col(0) = X0; if (vcov) covariance.slice(0) = V0; variance.col(0) = V0.diag(); for (int i=1; i f, std::function gradf, vec X0, mat V0, vec times, int nOut=300, mat W = zeros(1,1), bool vcov=false, int nLebesgue=10001) { double // start=min(times), finish=max(times); // currently assumes start=0 vec s = linspace(0,finish,nLebesgue); uvec sIndex = linspace(0,nLebesgue-1,nOut); vec allTimes = unique(join_cols(s,times)); vec subTimes = unique(join_cols(s(sIndex),times)); FindInterval find_time(times); // assumes hazMatrix.n_cols == times.n_elem FindInterval find_subtime(subTimes); vec ds = diff(join_cols(vec({0.0}),allTimes)); int numIncrements = subTimes.n_elem; mat X = zeros(X0.n_elem, numIncrements); cube covariance = vcov ? zeros(V0.n_rows, V0.n_cols, numIncrements) : zeros(1,1,1); mat variance = zeros(V0.n_rows, numIncrements); mat Y = zeros(1,1); // default if W is not specified mat varY = zeros(1,1); // default if W is not specified if (W.n_rows == X0.n_elem) { Y = zeros(W.n_cols,numIncrements); varY = zeros(W.n_cols,numIncrements); } vec Xn = X0; mat Vn = V0; cube gradf0 = gradf(X0); // for dimensions int Xrows = X0.n_elem, hazRows = hazMatrix.n_rows, numHaz = gradf0.n_slices; // bool Lebesgue = numHaz == hazRows+1; // ASSUMED TO BE TRUE int // k=0, // index in s l=1; // index in output X.col(0) = X0; if (vcov) covariance.slice(0) = V0; variance.col(0) = V0.diag(); for (size_t i=1; i(_n); size_t nNewdata = Rcpp::as(_nNewdata); mat hazMatrix = Rcpp::as(_hazMatrix); vec X0 = Rcpp::as(_X0); imat tmat = Rcpp::as(_tmat); vec weights = Rcpp::as(_weights); bool vcov = Rcpp::as(_vcov); size_t nStates = tmat.max() - tmat.min() + 1; // assumes tmat is well formed (fragile) if (nStates == X0.n_elem) X0 = vec(repmat(mat(X0),nNewdata,1)); std::function F = Fcombined(nNewdata,nStates,Fprob(nStates, tmat)); std::function Fgrad = Fjac(nStates*nNewdata,F); mat V0 = zeros(nStates*nNewdata,nStates*nNewdata); mat W = (weights.n_elem == nNewdata) ? makeW(nStates, weights) : zeros(1,1); return Rcpp::wrap(pluginEstimateDiscrete(n, hazMatrix, F, Fgrad, X0, V0, W, vcov)); } // PluginEstimateCts // calc_P_L_by(int n, int nNewdata, mat hazMatrix, // vec X0, imat tmat, vec time, vec weights, int nOut=300, bool vcov=false, int nLebesgue=10001) { RcppExport SEXP plugin_P_L_by(SEXP _n, SEXP _nNewdata, SEXP _hazMatrix, SEXP _X0, SEXP _tmat, SEXP _time, SEXP _weights, SEXP _nOut, SEXP _vcov, SEXP _nLebesgue) { int n = Rcpp::as(_n); size_t nNewdata = Rcpp::as(_nNewdata); mat hazMatrix = Rcpp::as(_hazMatrix); vec X0 = Rcpp::as(_X0); imat tmat = Rcpp::as(_tmat); vec time = Rcpp::as(_time); vec weights = Rcpp::as(_weights); int nOut = Rcpp::as(_nOut); bool vcov = Rcpp::as(_vcov); int nLebesgue = Rcpp::as(_nLebesgue); size_t nStates = tmat.max() - tmat.min() + 1; // assumes tmat is well formed (fragile) if (nStates == X0.n_elem) X0 = vec(repmat(mat(X0),nNewdata,1)); vec X1 = join_cols(X0,zeros(X0.n_elem)); std::function F = addFlos(Fcombined(nNewdata,nStates,Fprob(nStates, tmat))); std::function Fgrad = Fjac(nStates*nNewdata*2,F); mat V1 = zeros(nStates*nNewdata*2,nStates*nNewdata*2); mat W = (weights.n_elem == nNewdata) ? makeW(nStates, weights, 2) : zeros(1,1); return Rcpp::wrap(pluginEstimateCts(n, hazMatrix, F, Fgrad, X1, V1, time, nOut, W, vcov, nLebesgue)); } // // [[Rcpp::depends(RcppArmadillo)]] // // [[Rcpp::export]] // PluginEstimateDiscrete // plugin_P(int n, mat hazMatrix, // vec X0, imat tmat, bool vcov=false) { // int nStates = X0.n_elem; // std::function F = Fprob(nStates, tmat); // std::function Fgrad = Fjac(nStates,F); // mat V0 = zeros(nStates,nStates); // return pluginEstimateDiscrete(n, hazMatrix, F, Fgrad, X0, V0, zeros(1,1), vcov); // } // // [[Rcpp::depends(RcppArmadillo)]] // // [[Rcpp::export]] // PluginEstimateCts // plugin_P_L(int n, mat hazMatrix, // vec X0, imat tmat, vec time, int nOut=300, bool vcov=false, int nLebesgue=10001) { // int m = X0.n_elem; // vec X1 = join_cols(X0,zeros(m)); // std::function F = addFlos(Fprob(m, tmat)); // std::function Fgrad = Fjac(2*m,F); // mat V1 = zeros(2*m,2*m); // return pluginEstimateCts(n, hazMatrix, F, Fgrad, X1, V1, time, nOut, zeros(1,1), vcov, nLebesgue); // } rstpm2/NAMESPACE0000644000176200001440000000542215040703532012722 0ustar liggesusersuseDynLib(rstpm2, .registration=TRUE) exportClasses(stpm2,pstpm2,tvcCoxph,aft) export(stpm2, pstpm2, aft, gsm, cox.tvc, # experimental --- don't export? markov_msm, ratio_markov_msm, zeroModel, hrModel, aftModel, addModel, # stratifiedModel, markov_sde, hazFun, splineFun, standardise, incrVar, nsx, nsxD, "coef<-", eform, predictnl, coef, confint, predictnl.default, confint.predictnl, vuniroot, voptimize, voptimise, bhazard, smoothpwc, gsm_design) S3method(makepredictcall, nsx) S3method(makepredictcall, nsxD) S3method(predict, nsx) S3method(predict, nsxD) S3method(predict, formula) S3method(predictnl, default) S3method(predictnl, lm) S3method(confint, predictnl) S3method(lines, stpm2) S3method(lines, pstpm2) S3method(lines, aft) S3method(eform, stpm2) S3method(eform, default) S3method(coef, stpm2) S3method(vcov, stpm2) S3method(coef, pstpm2) S3method(vcov, pstpm2) S3method("coef<-", default) S3method("coef<-", mle2) S3method("coef<-", survPen) S3method(as.data.frame, markov_msm) S3method(as.data.frame, markov_sde) S3method(as.data.frame, markov_msm_diff) S3method(as.data.frame, markov_msm_ratio) S3method(vcov, markov_msm) S3method(standardise, markov_msm) S3method(standardise, markov_sde) S3method(print, markov_msm) S3method(plot, markov_msm) S3method(plot, markov_sde) S3method(subset, markov_msm) S3method(rbind, markov_msm) S3method(transform, markov_msm) S3method(nrow, markov_msm) S3method(diff, markov_msm) ## S3method(predict, zeroModel) ## S3method(coef, zeroModel) ## S3method(vcov, zeroModel) ## S3method(predict, hrModel) ## S3method(coef, hrModel) ## S3method(vcov, hrModel) ## S3method(predict, stratifiedModel) ## S3method(coef, stratifiedModel) ## S3method(vcov, stratifiedModel) ## All methods for imported generics: exportMethods(plot,predict,predictnl,coef,confint,summary,update,anova,vcov,formula, BIC,AIC,AICc,qAICc,simulate,residuals,lines,eform) importFrom(graphics,plot,lines,matplot,par,polygon,abline,matlines,box) importFrom(stats, quantile, lm, as.formula, coef, makepredictcall, na.fail, predict, contrasts,delete.response, get_all_vars, model.extract, model.frame, model.matrix, model.weights, na.pass, optimHess, pweibull, terms, terms.formula, .checkMFClasses, .getXlevels, pchisq, printCoefmat, anova, var, residuals, confint, qnorm, complete.cases, reformulate, simulate,splinefun, update.formula, runif, aggregate, dgamma, dlogis, dnorm, dweibull, integrate) importFrom(mgcv,gam,s) importFrom(Rcpp,sourceCpp) ## importFrom(deSolve,ode) importClassesFrom(bbmle,mle2) import(bbmle,methods,survival,splines) importFrom(utils,str,head,tail,modifyList,recover) importFrom(numDeriv,jacobian) importFrom(bbmle, update) rstpm2/NEWS.md0000644000176200001440000000652715053641350012613 0ustar liggesusers# rstpm2 # Version 1.7.0 - aft mixture and non-mixture cure models - aft integrated time effects - Improved initial values for gsm/pstpm2/stpm2 - Bug fix for offsets for gsm/pstpm2/stpm2 # Version 1.6.1 - Experimental: aft\_mixture and aft\_integrated regression models # Version 1.5.9 - Bug fix: predict(..., type="meanhr") and type="meanhaz" # Version 1.5.2 - Add Clayton copulas with arbitrary cluster sizes to the parametric GSMs (experimental) - Add spline interpolation support in the Markov models (faster for some models) # Version 1.5.1 - Bug fix: mean predictions # Version 1.5.0 - Major change: markov_msm function for Markov multistate models - Add predict(..., type="lpmatrix") - Add cluster and bhazard specials - Internal: use Nelder-Mead for AFT if the model did not converge - Internal: refactor stpm2 and pstpm2 to use a common gsm function - Internal: extended the test suite - Documentation: update vuniroot vignette - Bug fixes: delayed entry; missing bhazard and cluster values; # Version 1.4.5 - Fixed a bug in fitting frailty models (introduced in 1.4.4) - Introduced package tests # Version 1.4.4 - Fixed a critical bug in the `predict` function for comparisons of hazards, including type="hr", type="hdiff" and type="marghr" (introduced in 1.4.2). # Version 1.4.2 - Belatedly started the NEWS.md file - Update to bbmle (>= 1.0.20) required due to new export from that package - Possible breaking change: for the `predict()` functions for `stpm2` and `pstpm2`, the `keep.attributes` default has changed from `TRUE` to `FALSE`. Any code that used `predict()` and needs the `newdata` attributes should now add the `keep.attributes=TRUE` argument. The previous default was noisy. - Possible breaking change: the derivative of the design matrix with respect to time now defaults to being calculated using log(time); the old calculation can be found using `log.time.transform=TRUE`. This is expected to provide more accurate gradients, particularly for very small times. - To this point, the following models are available: + `stpm2`: parametric generalised survival models, possibly with clustered data (Gamma frailties and normal random effects), relative survival, robust standard errors, rich post-estimation and plots. + `pstpm2`: penalised generalised survival models, possibly with clustered data (Gamma frailties and normal random effects), relative survival, robust standard errors, rich post-estimation and plots. + `aft`: parametric accelerated failure time models, with more limited post-estimation and plots. - Links for the generalised survival models include log-log, -logit, -probit, -log and Aranda-Ordaz. - Post-estimation for `stpm2` and `pstpm2` includes: + Conditional survival ("surv"), linear predictor ("link"), cumulative hazard ("cumhaz"), hazard ("hazard"), log hazard ("loghazard"), probability density function ("density"), failure ("fail"), hazard ratio ("hr"), survival difference ("sdiff"), hazard difference ("hdiff"), mean survival ("meansurv"), mean survival differences ("meansurvdiff"), mean hazard ratio ("meanhr"), odds ("odds"), odds ratio ("or"), restricted mean survival time ("rmst"), attributable fractions ("af") + Marginal survival ("margsurv"), marginal hazard ("marghaz"), attributable fractions ("af"), mean survival ("meanmargsurv") rstpm2/inst/0000755000176200001440000000000015105126152012454 5ustar liggesusersrstpm2/inst/include/0000755000176200001440000000000015105126152014077 5ustar liggesusersrstpm2/inst/include/splines.h0000644000176200001440000000500614363600352015732 0ustar liggesusers#ifndef SPLINES_H #define SPLINES_H #include namespace rstpm2 { /* arma::mat qr_q(const arma::mat& X, double tol = 1E-12); */ class SplineBasis { public: int order, /* order of the spline */ ordm1, /* order - 1 (3 for cubic splines) */ nknots, /* number of knots */ curs, /* current position in knots vector */ boundary, /* must have knots[(curs) <= x < knots(curs+1) */ ncoef; /* number of coefficients */ /* except for the boundary case */ arma::vec ldel; /* differences from knots on the left */ arma::vec rdel; /* differences from knots on the right */ arma::vec knots; /* knot vector */ arma::vec coeff; /* coefficients */ arma::vec a; /* scratch array */ SplineBasis(int order = 4); SplineBasis(arma::vec knots, int order = 4); int set_cursor(double x); void diff_table(double x, int ndiff); double slow_evaluate(double x, int nder); /* fast evaluation of basis functions */ arma::vec basis_funcs(double x); arma::vec eval(double x, int ders=0); arma::mat basis(arma::vec x, int ders=0); }; class bs : public SplineBasis { public: arma::vec boundary_knots, interior_knots; int intercept, df; bs(); // default constructor bs(arma::vec boundary_knots, arma::vec interior_knots, int intercept = 0); arma::vec eval(double x, int ders=0); arma::mat basis(arma::vec x, int ders=0); }; class ns : public bs { public: arma::vec tl0, tl1, tr0, tr1; arma::mat q_matrix; int cure; ns(); // default constructor // ns(vec boundary_knots, vec interior_knots, int intercept=0) : // bs(boundary_knots, interior_knots, intercept) { // // calculate the Q matrix // mat const_basis = bs::basis(boundary_knots, 2); // mat qd = qr_q(const_basis.t()); // mat qsub(qd.n_rows, qd.n_cols-2); // for (size_t i=0; i #include namespace rstpm2 { enum link_types {PH}; class gsm_term { public: ns ns1; arma::vec gamma, x; }; class gsm { public: link_types link_type; double tmin, tmax, target; arma::vec etap; std::vector terms; int index; bool log_time; double link(double S); double linkinv(double eta); gsm(); // default constructor gsm(SEXP args); gsm(Rcpp::List list); double eta(double y); double operator()(double y); double rand(double tentry=0.0, int index = 0); }; } #endif /* gsm.h */ rstpm2/inst/include/c_optim.h0000644000176200001440000002506014706157711015720 0ustar liggesusers#ifndef C_OPTIM_H #define C_OPTIM_H #include extern "C" { // main/optim.c typedef double optimfn(int, double *, void *); typedef void optimgr(int, double *, double *, void *); void vmmin(int n, double *b, double *Fmin, optimfn fn, optimgr gr, int maxit, int trace, int *mask, double abstol, double reltol, int nREPORT, void *ex, int *fncount, int *grcount, int *fail); void nmmin(int n, double *Bvec, double *X, double *Fmin, optimfn fn, int *fail, double abstol, double intol, void *ex, double alpha, double bet, double gamm, int trace, int *fncount, int maxit); /* type of pointer to the target and gradient functions for Nlm */ typedef void (*fcn_p)(int, double *, double *, void *); /* type of pointer to the hessian functions for Nlm */ typedef void (*d2fcn_p)(int, int, double *, double *, void *); /* Also used in packages nlme, pcaPP */ void optif9(int nr, int n, double *x, fcn_p fcn, fcn_p d1fcn, d2fcn_p d2fcn, void *state, double *typsiz, double fscale, int method, int iexp, int *msg, int ndigit, int itnlim, int iagflg, int iahflg, double dlt, double gradtl, double stepmx, double steptl, double *xpls, double *fpls, double *gpls, int *itrmcd, double *a, double *wrk, int *itncnt); } namespace rstpm2 { // forward declarations void Rprint(Rcpp::NumericMatrix const & m); void Rprint(Rcpp::NumericVector const & v); void Rprint(arma::mat const & m); void Rprint(arma::vec const & v); double min(double a, double b); double max(double a, double b); double bound(double x, double lower, double upper); arma::mat rmult(arma::mat const &m, arma::vec const &v); /** Adapt a function object (functor) for NelderMead and BFGS **/ template double adapt_functor(int n, double * beta, void * par) { T * model = (T *) par; Rcpp::NumericVector x(beta,beta+n); return model->operator()(x); } /** Adapt an objective function for NelderMead and BFGS **/ template double adapt_objective(int n, double * beta, void * par) { T * model = (T *) par; Rcpp::NumericVector x(beta,beta+n); return model->objective(x); } template double arma_adapt_objective(int n, double * beta, void * par) { T * model = (T *) par; arma::vec x(&beta[0],n); return model->objective(x); } /** Adapt a gradient function for BFGS, BFGSx and ConstrBFGSx **/ template void adapt_gradient(int n, double * beta, double * grad, void * par) { T * model = (T *) par; Rcpp::NumericVector x(beta,beta+n); Rcpp::NumericVector vgrad = model->gradient(x); for (int i=0; i void arma_adapt_gradient(int n, double * beta, double * grad, void * par) { T * model = (T *) par; arma::vec x(&beta[0],n); arma::vec vgrad = model->gradient(x); for (int i=0; i void optim(Rcpp::NumericVector init, T object) { optim(&adapt_objective,init,(void *) &object); } virtual Rcpp::NumericMatrix calc_hessian(optimfn fn, void * ex); int n, trace, maxit, fail, fncount; double abstol, reltol, alpha, beta, gamma, Fmin, epshess; bool hessianp; Rcpp::NumericVector coef; Rcpp::NumericMatrix hessian; }; class BFGS { public: BFGS(int trace = 0, int maxit = 100, double abstol = - INFINITY, double reltol = 1.0e-8, int report = 10, double epshess = 1.0e-8, bool hessianp = true); virtual void optim(optimfn fn, optimgr gr, Rcpp::NumericVector init, void * ex); virtual void optim(int n, optimfn fn, optimgr gr, double * init, void * ex); virtual double calc_objective(optimfn fn, Rcpp::NumericVector coef, void * ex); virtual double calc_objective(optimfn fn, void * ex); virtual Rcpp::NumericMatrix calc_hessian(optimgr gr, void * ex); template void optim(Rcpp::NumericVector init, T object) { optim(&adapt_objective,&adapt_gradient,init,(void *) &object); } int n, trace, maxit, report, fncount, grcount, fail; double abstol, reltol, Fmin, epshess; bool hessianp; Rcpp::NumericVector coef; Rcpp::NumericMatrix hessian; }; // class AbstractModel { // public: // virtual double objective(Rcpp::NumericVector coefficients) = 0; // abstract // virtual Rcpp::NumericVector gradient(Rcpp::NumericVector coefficients) = 0; // abstract // virtual Rcpp::NumericMatrix hessian(); // Rcpp::NumericVector coef; // }; class BFGSx { public: using This = BFGSx; BFGSx(int trace = 0, int maxit = 100, double abstol = - INFINITY, double reltol = 1.0e-8, int report = 10, double epshess = 1.0e-8, bool hessianp = true) : trace(trace), maxit(maxit), report(report), abstol(abstol), reltol(reltol), epshess(epshess), hessianp(hessianp) { } virtual void optim(Rcpp::NumericVector init); virtual void optim(arma::vec init); virtual double objective(arma::vec coefficients) = 0; // abstract virtual arma::vec gradient(arma::vec coefficients) = 0; // abstract arma::mat calc_hessian() { int n = coef.size(); arma::vec df1(n); arma::vec df2(n); arma::mat hess(n,n); double tmp; for(int i=0; i double R_zeroin2_adaptor(double x, void * par) { Functor * functor = (Functor *) par; return functor->operator()(x); } /** Use R_zeroin2 with a function object (functor) @return tuple with (root, Tol, Maxit) **/ template std::tuple R_zeroin2_functor(double a, double b, Functor functor, double eps = 1.0e-8) { double Tol = eps; int Maxit = 100; double root = R_zeroin2(a,b,functor(a),functor(b),&R_zeroin2_adaptor,(void *) &functor, &Tol, &Maxit); return std::make_tuple(root, Tol, Maxit); } /** Use R_zeroin2 with a function object pointer (functor) @return tuple with (root, Tol, Maxit) **/ template std::tuple R_zeroin2_functor_ptr(double a, double b, Functor *functor, double tol = 1.0e-8, int maxit = 100) { double Tol = tol; int Maxit = maxit; double root = R_zeroin2(a,b,(*functor)(a),(*functor)(b), &R_zeroin2_adaptor,(void *) functor, &Tol, &Maxit); return std::make_tuple(root, Tol, Maxit); } /** Adapt a function object (functor) to work with Brent_fmin() **/ template double Brent_fmin_functor(X x, void * par) { T * model = (T *) par; return model->operator()(x); } /** Use Brent_fmin with a function object (functor) **/ template double BrentFmin(double a, double b, T obj, double eps = 1.0e-8) { return Brent_fmin(a,b,&Brent_fmin_functor,(void *) &obj,eps); } Rcpp::NumericMatrix qr_q(const Rcpp::NumericMatrix& X, double tol = 1E-12); } // anonymous rstpm2 #endif /* c_optim_h */ rstpm2/inst/include/aft.h0000644000176200001440000000235715040104642015027 0ustar liggesusers#include #include #include namespace rstpm2 { using namespace arma; using namespace Rcpp; class aft : public ConstrBFGSx { public: List args; vec init; std::vector X_vector, X_vector0; mat Xc; mat X, X0; mat XD, XD0; vec event; vec time, time0; vec gnodes, gweights, bhazard; vec boundaryKnots; vec interiorKnots; mat q_matrix; int cure; int mixture, tvc_integrated; ns s; double kappa; // scale for the quadratic penalty for monotone splines double eps1; // minimum hazard uvec delayed; bool add_penalties; aft(SEXP list); mat rmult(mat m, vec v); mat rmult(mat m, uvec v); double objective(vec betafull); double objective_integrated(vec betafull); double objective_cumulative(vec betafull); vec gradientPenalty(mat Q, vec beta); vec gradient(vec betafull); vec gradient_integrated(vec betafull); vec gradient_cumulative(vec betafull); double objective(NumericVector betafull); NumericVector gradient(NumericVector betafull); // vec survival(vec time, mat X); // vec haz(vec time, mat X, mat XD); // mat gradh(vec time, mat X, mat XD); }; } // namespace rstpm2 rstpm2/inst/fig1-README.md.jpg0000644000176200001440000003674315040711753015360 0ustar liggesusersÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀàà"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ *+‹ˆm-e¹¸•"‚2I#œ*($Ÿ@*@AƒzPÑE`HÚ¥ö»}mm©-¤É[«–, $’}¨~ŠÆþÍÖÿè`ÿÉ4ÿ?³u¿ú?òM?Æ€6h¬oìÝoþ†ü“Oñ£û7[ÿ¡ƒÿ$ÓühfŠÆþÍÖÿè`ÿÉ4ÿ?³u¿ú?òM?Æ€6h¬oìÝoþ†ü“Oñ£û7[ÿ¡ƒÿ$ÓühfŠÆþÍÖÿè`ÿÉ4ÿ?³u¿ú?òM?Æ€6h¬oìÝoþ†ü“Oñ£û7[ÿ¡ƒÿ$ÓühfŠÆþÍÖÿè`ÿÉ4ÿ?³u¿ú?òM?Æ€6h¬oìÝoþ†ü“Oñ£û7[ÿ¡ƒÿ$ÓühfŠÆþÍÖÿè`ÿÉ4ÿ?³u¿ú?òM?Æ€6h¬oìÝoþ†ü“Oñ£û7[ÿ¡ƒÿ$ÓühfŠÆþÍÖÿè`ÿÉ4ÿ?³u¿ú?òM?Æ€6h¬oìÝoþ†ü“Oñ£û7[ÿ¡ƒÿ$ÓühfŠÆþÍÖÿè`ÿÉ4ÿ?³u¿ú?òM?Æ€6h¬oìÝoþ†ü“Oñ£û7[ÿ¡ƒÿ$ÓühfŠÆþÍÖÿè`ÿÉ4ÿ?³u¿ú?òM?Æ€6h¬oìÝoþ†ü“Oñ£û7[ÿ¡ƒÿ$ÓühfŠÆþÍÖÿè`ÿÉ4ÿ?³u¿ú?òM?Æ€6h¬oìÝoþ†ü“Oñ£û7[ÿ¡ƒÿ$ÓühfŠÆþÍÖÿè`ÿÉ4ÿ?³u¿ú?òM?Æ€6h¬oìÝoþ†ü“Oñ£û7[ÿ¡ƒÿ$ÓühfŠÆþÍÖÿè`ÿÉ4ÿ?³u¿ú?òM?Æ€6h¬oìÝoþ†ü“Oñ£û7[ÿ¡ƒÿ$ÓühfŠÆþÍÖÿè`ÿÉ4ÿ?³u¿ú?òM?Æ€6h¬oìÝoþ†ü“Oñ£û7[ÿ¡ƒÿ$ÓühfŠËÐ.n®té ä«4Ñ\Ï ‘Sfà’2ƒ ©@Q@Q@Q@Gã/xJòïXm:Úª\,‘]°Ñ¥¼‰e`A}ñÆÞT€œä½TžG¥è1éqhv‹¢¥²iû3 Û Xù$œÓœçß9¬-KG½Ñ–Yô­jþÚÚêõ ZÇo¡y‚»©eÈœ¹Î@çÐé:d:>”$ЬîÒJAyØ»³`’ÌOx€.Ö>Ÿÿ#.³þìú «w×ÓÚ:,ZeÝàa’ÐÀ_®÷_Ò²4 @Þø›^W´¸µ’!oº9ög•l}ÖaúÐIEPEPEPH̪2Äîi$uŠ6‘ÎFIö®*þúKë–‘‰ ü žPoEs¨ÑJ¶³6bnŸá?á]=QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEcøsþ<®ÿì!uÿ£ž¶+ßñåwÿa ¯ýõ±@Q@Q@Q@?ŒâÖWXµº·‡U¸²ŒÛãÓçØÖà4Þb†Rá¢À\ä8$è¼3£‡­£Õ ¦èâg"¦ö1«°á˜&ÐO9 òk‹¹ðV§ÿ ÕýÖ“§k6o<îÖ÷Mþ“½·FÎŒ¥‰sŽržö~ÓntŸZÙ]²£Þv£—XÕ™cV<ŠB‚{-k×1¢ÿÈ÷âŸ÷lÿô[WO\Æ‹ÿ#ߊݳÿÑm@=Q@Q@Q@þ!¹ò¬V?4§Ÿ ÿ"¹jÔ×çóu"€ü±(_Ç©þu—@C]ž“yöËv9‘~Wúú×Zz%ïÙ/B9ÄRü­ì{먢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÇðçüy]ÿØBëÿG=lV?‡?ãÊïþÂ_ú9ëb€ (¢€ (¢€ (¢€ (¢€ æ4_ùüSþíŸþ‹jéë˜Ñä{ñOû¶ú-¨§¢Š(¢Š(¤$($œÉ¥ªš¤¾F™pýöíÖ€8Ùå3ÜI)êì[ó¨è¢€ (¢€:ýü^Zsûèøl÷iW evöWI2vàQÜWioqÔ 4G*Ãò  h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÇðçüy]ÿØBëÿG=lV?‡?ãÊïþÂ_ú9ëb€ (¢€ (¢€ (¢€ (¢€ æ4_ùüSþíŸþ‹jéë˜Ñä{ñOû¶ú-¨§¢Š(¢Š(¬o˶Á#]ÿ@?ýU³\׉¤ÍÌu ~gÿ­@tQEQE£¤êma6×ÉÏÌ==ÅgQ@ú:ÈŠèÁ•†AéÕÉ驲&bM»ûàúý+«V ¡”‚È#½-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@þÿ+¿û]èç­ŠÇðçüy]ÿØBëÿG=lPEPEPEPEEqq ¥¬·7¤PB†I$s…E$“èH rJZæ4_ùüSþíŸþ‹jéë˜Ñä{ñOû¶ú-¨§¢Š(¢Š(®?\“ÌÕ¥ô\/é]…p—ry·“Iýç'õ j•æ `™mmá7n7Ãm ½7;üÉçàÔ×·qØÙËs %c\í^¬{îN÷5™föÐ4—5äíæNæïîöT`aêM@ú…ý˜óoìcãïIk)”ÇîÊUN=Æ~˜­$t–5’6WF«)È ÷YìkÑM>åñ¤ŸáöV==Žà z(¢€ ÖÒ5sh É0ÁþçÿZ²h @V ¡”‚È#½-rºF®mA9&x?ÜÿëWR¬C)GzZ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€1ü9ÿWöºÿÑÏ[áÏøò»ÿ°…×þŽzØ Š( Š( Š( #ñ—‡¼%yw¬6mÕ.H®ØhÒÞD²° ¾øão*@Nr^ªO#Òôô¸´;EÑRÙ4ý™…m,|’NéÎsïœÖ¥£ÞèË,úVµmmuz…­c·ŠP<Á]Ô²ä Î\ç sŠèt2NŽÊ’EVwi% ¼Žì]Ù°Éf'€<@k˜Ñä{ñOû¶ú-«jûT·ÓÝhï¸Èò,å˜~%ãñ®{Ã7‘^ø×Å3D³ª‘h14}Æþþ”×QEQEÄžU´²q ~B¸:ìõ™<½&sêþgÆPeçúf±igÖ8Ú¦àâ0à[›ëiÖf‘û÷½¿<ý¢vTö>Aø¿àU§@EsoÝ´–ó x¤R¬¾Õ-¦ÜÊM>í‹][‡?òÚ3÷_ëØûƒØŠÑª•¤“,wV¸¶Ùh²p¼„ú6?íV,îâ¾´Žâíáa†R ‘Ø‚#ÔPôQE­¤êæÌˆg$Àz¥?úÕ“Ez:Èу)t4µÈiz´– å¾^y^ëî+«†xî"YbpÈÝ  (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÇðçüy]ÿØBëÿG=lV?‡?ãÊïþÂ_ú9ëb€ (¢€ (¢€ (¢€8Ŭ®±kuo«qe¶1¦Ÿ>À®·Íæ(e.,Î@!³‚A®‹Ã1j0xzÚ=PÊn~&pò*oc»‚mó’&¸ýKš·öÎé4]?\ÓÚîâåÒîëhɛё†cbõO@k°ðÖ›q£ø~ÖÆéÑ¥yÄlYc å–5'’ªPOe(Z¹þG¿ÿ»gÿ¢Úºzæ4_ùüSþíŸþ‹jé袊(¢ŠÇñ›tôAüRÈÿÖ®+Tº{=.æâ0 «òÁþ'<(üIº¿IóÛÇèé\v«ûë:Ó¨’äHãý˜Ápï°ƒñ  vV©ccoi%!c÷b§¢Š(¢Š+&çþ%Í|8²¸ ]Ñ¿A/Ó oÀñƒZÔŒªèÈêX`‚2 ¢²¬Ý´Ë¥Ógb`|ýŽV9ÈùDúÓÕG¨&µh¢Š(«VWóØËº&ùOÞCÐÕZ(´°Õ-ï×vÉÞ6<þµv¼ýY‘ƒ) Ž„•³eâ¢Â]/šŸÞxtôU{këkÅÌ2«îô#ð«QEQEQEQEQEQEQEQEQE!`£’րЅ®í“ï\D¿W¢mNÅzÝEø6hÝAµ­=zÜôR¥FÚý€èîßD4§Ec·‰,ÇHæ?ðþ5ñ4Ão!ú(rŠ£¦êCQIDSa“œÕêÇðçüy]ÿØBëÿG=lV?‡?ãÊïþÂ_ú9ëb€ (¢€ (¢€ (¢€ (¢€ æ4_ùüSþíŸþ‹jéë˜Ñä{ñOû¶ú-¨§¢Š(¢Š(”ñîÔÂÿr0?™þµË¯ïüJçµ­¨P}äl‘ùF¿oêÏæj· èÛ.?¥`i½}Bë´×n°ŒÿšøÐ•:8ÞYK3;ÓkªÐôám¸‘} ÈÏð­P‹ÃS´{¤¿ºZͽ°žÆM“/î°èk¸¨®m¢º¡•r§ô÷ÁÑVo¬ä±¹hŸ‘Õ[û«P–ß[=¼à”lƒ‚¤r=ˆ8 Õ[ÉcŸû>ý‡Ú”f9@À¸AüCчqÛ¯B+F«ÞYC}•(a‚Nte=X¢³ ¿–Öt³ÔÈ1Û ÈIý¿Ùö{öîQEQEAw«ðk7Öømê;H3ÿתPC‰»Mmø£CVãñ ‹ýã"¼¿á\Ù®±§¿K•üAΤ•‘ÿ—¨ï±\EÜhYÿÏÜ÷ðPu!ÿ/pÿßb¸z(¶:¥ˆÿ—¨ÿQ¶³§¯[‘ø)?Ò¸Ú(®mO$fú!¨ÛÄvC¢LßEã\­Ò·‰¡vÞCõ T-âvþP>¯ÿÖ¬ (i¼Kt~ì0®Oõ¨[Äç£F¿E¬º(ûkZƒu¸#è J‰µ+Öëu7àäUZ(F¸þôÒ«Œœœš( Š( Š( Š( Ã?ên?ÞÖ·«Ã?ên?ÞÖ·¨ßñåwÿa ¯ýõ±Xþÿ+¿û]èç­Š(¢Š(¢Š(¢Š(¢Š+˜Ñä{ñOû¶ú-«§®cEÿ‘ïÅ?îÙÿè¶ žŠ( Š*©<«I¤þê1ý(…¼¸E72 Ý#nµŸ¢Dðè–K Ä­¼Ÿï·Ìß©4ÍæÑ.!ïq¶ØO1‚ìÕ¥@´›?¶_¢0Ìkó?Ðv®Î²<=k䨙˜|Òœþ§õ­z(¢Š£ªX-ý©Pš¼¡÷ô®5”£`C‚jô ç|A§`ý²%àñ ΀0(¢ŠŽx"¹áž4’'dqG¸¬á¡¦DZkëAÿ,$Þ ÿeÏ =˜ƒþ×jÕ¢€)Úêv—’’B“–‚U) »O8÷{ÕÊ‚îÊÖú!Ô *ƒ•Ü9Sêcî*ŸØ¯ìÿãÆóÎŒË Â[A ù‡Õ·P™ý²–ã”X‘ÖI>h¾¾`à÷¶ŸjÑGY]2°Èe9P¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šèü3þ¦ãýáýkz°|3þ¦ãýáýkz€1ü9ÿWöºÿÑÏ[áÏøò»ÿ°…×þŽzØ Š(  ½oÄ:w‡ Yõ&¹HXæEi,Ê c;ŒjÛzޏÏn†¢Ò¼S¥k7ïcf÷iH¼æIìgƒ œ™G_ëèj…>»cÔ»ZeVYQƒ ÚÙ*@lƒŒšÍð̰ê齟TÔ/¯cµh¢ó´©lãŽ6e-÷e‰TïÛ€9 ÆŠ( ŠF`ªYˆ I=©h®cEÿ‘ïÅ?îÙÿè¶®ž¹þG¿ÿ»gÿ¢Ú€:z(¢€ £¬¿—¤Î}@_Ìâ¯V?ˆßnœ«ýéò4ÂjŸ¼»Òíú‡ºÞÃÙ˜ûè%jÅM2D¿yØ(ük)ÿ{âX@éohå¾²:ÿ¢Úºm;RW#å‰K~=ó ª(Ö(’5û¨ŸEQES]DdpX`ƒÜS¨ /S°k ¢œ˜Û”oQT«¸½³ŽúØÅ'Õ¿ºkŒ¹¶–Òv†UÃ/ä}ÅEEPEPYÏ¢Ú‡2Z,e'%­[`'Ô¦ ±÷ Ö™¿X´ûÑÁïòeü‰*ÇñZzkV{Ö;†{IIÀK¥òò}?+ÀI­ k¢È…C+ aE:ŠÌþõ‹&ÊI¬þŸjûfrŸøíÖmº5¥òµ˜óƒÁhNŠÍþÙŽ#‹ËK»Sýç‹z}w&åêE\¶¼µ½Ìµ¹†téº' ?JšŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Ã?ên?ÞÖ·«Ã?ên?ÞÖ·¨ßñåwÿa ¯ýõ±Xþÿ+¿û]èç­Š(¢ŠÆñP¿oÜ1ä[¢ÑãÊuI<ÅÞ¨ÍÀr›‚“ÜŠçü1a©Ùx¶HïT‘#·¸A-õß˜Ž Èc1®îNÌ$pTŒœíøÊÒÆ÷Ã3E©Í V+=¼³™—r²$èå1ßvݣ݅s¾¸´¼ñ¤ÙúÔÚ…¦p±Gqo ’òÃÁ•€Þ3?7 ’qÀ QEäþ>Ó,mÛVÑ‹ý™}â-Änê@(¾`]™<ÆË‚8¥é6°YiVÐ[M,Ъed–á§fœïbKxç¦â¹‹­?TðßÛ%²ºÒšÎúø17vnÒ¬“Ê+q½w8 ap;WE i#CÑ ÓÄ¢R…ÝSbîw.B®NÕˆ “€  *æ4_ùüSþíŸþ‹jÙ¿Ötí-Ñ/nãœeCž¢¹ï _Zê4ñLö“,Ñh7/O¸Ô×ÑEW=âgÿhÿÞcúõë¡®WÄo»QUì±ú“@µïuRoî­ÿMÿûT×qá¸vÚË1»`}ÿ®¸}絸œõšêfϨUOýò«^‘¦Cäi°&0vî?SÏõ  tQEQEQEOPÓâÔ!Úÿ+ºã¨ÿëUÊ(‡¼±žÆ]“'˜tj­]ü‘¤ÈRDWSÔ0Íd\xrÞBL24Döû€9z+mü5r>äÑ7×"«I¡_§HƒöXPm4¶—0gÍ‚D¹SΡ Š( Š( ©ÜéVrù³ÚDÓ’íãGçW(  ßì©¡ÿMNò!Ù%a2þ%ÁoÉ…&íj½ØîUšø¼ÌV›ý®ÑÿÇÖ›¸ˆLýû,0)ñkz\ÒÒþÜJå“8Wÿ¾O?¥_¦K SÆcš4‘UuÀÐè¬ßì5ÔÛ›oúõ‘ ÿУû2æ?ø÷ÕïvIH¿™]ßøõiQY»5¨¹X\²bxO繿•mÔãÿ]¤ïÿ¯[•ýeiQY¿ÛŸëìuO§ÙšOÖ=ÂøH4q%ü0îÜ(þMŠÒ¢¢‚êÞéw[ϫ놥K@Q@Q@Q@Q@†Ôܼ?­oV†Ôܼ?­oP?‡?ãÊïþÂ_ú9ëb±ü9ÿWöºÿÑÏ[QEÏx¹–m1l[OÕnD̲,ºr#<«£|ä îŽ;NkÁ¯¥«ÿkÛí-œÖòËiöÈbHUg‘$}¥If,Àžƒ"ºVßYŸÉþÈÔl¬ñ»ÍûM“\oéŒbDÛŽ}s‘ÓçxWCÖ|?ck§^jöw¶6–Ë+ƒC'Ë€ 1•à6Ž¾Ø ŽŠ( Æš¾¥§kƒí6Újµ«ƒ˜™gcpªí±¶ìŒÁ$’ ÛŠèü3swáëiõ5qtÅÁ/–ÎØ#² 2b¼`’0+’ñŽ—ã­µyluÍVîÒâ E½µ”VË$TíS˜÷2gr°qï÷‡q¦ÛÏi§CÍä÷“(ù§P;d犫ÇNéëÍ[®cEÿ‘ïÅ?îÙÿè¶®ž¹þG¿ÿ»gÿ¢Ú€:z(¢€ âuû•Žþòw?$C'Ø(çùWm^câ‰<í3Qósº#ÖC°~­@ðí«ÿeévÎ?xb_ýâOçšô°+Сó5X¸áoÓÿ®+° Š( Š( Š( Š( Š( Š( «M§Ú\gÍ·‰ïŒÌUš(ãÃp>L´gѾaYW%í¾HÍ_XÎNµØQ@~ARCìi+º¸³·ºžr9cÝxmNZÖ]¿ì¿#ó vгs§ÝZçBÁ¼9V Š( Š( Š( Š( Š(  sémËn¸Ó­%oY!V?¨¨°tåÿU ×¼ïþ€EiQ@¿ØáaÔ5¿íàÉÿ¡î£û>ýyZ¹cÿM¡‰‡þ:‹ZTPo‘­(ãP±o÷¬Û'ñJ7khÕióúêñÿì­ZTPoÚu…ûÚe«×;ÂOë¥þѽ_½¢Ý“ÿLå„ÕÅhÑ@ßÚ²¯úÍ'POø 7þ‚æí¨ß¶ÔþÜ¥oýMhÑ@~½Šò £N¡YAó x»›ÀÏá]5`øgýMÇûÃúÖõcøsþ<®ÿì!uÿ£ž¶+ßñåwÿa ¯ýõ±@Q@Q@Q@Q@s/ü~)ÿvÏÿEµtõÌh¿ò=ø§ýÛ?ýÔÓÑEÄžU´²q ~B¼ÃXýá°·ÿž×‘ÿã™—ÿi×¢ëyzUÁõ]¿™ÅyÕ×ï5ý:#Ñ#šÄmAúHh°ðÌY’â\tAúò®Ž²|;Í7÷ÜŸéý+Z€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€20zVuÖ‹es“åùOýèøý:VÊÝxzê˜J̾Üʲ¤âr’##Ì0k¿¨æ‚)Ól±«¯£ ÐEu>·“-´GÐüÃük"ãD½·Éù«ë?§Z΢•”«`AA¤ Š( Š( Š( Š( Š( Š( Š( Ã?ên?ÞÖ·«Ã?ên?ÞÖ·¨ßñåwÿa ¯ýõ±Xþÿ+¿û]èç­Š(¢Š(¢Š(¢Š(¢Š+˜Ñä{ñOû¶ú-«§®cEÿ‘ïÅ?îÙÿè¶ žŠ(  É·NUþü€3\_¼ñ%É<ˆm"Uö,Î[ÿAZìüM'ü{GþóÓÿ¯\v’†}GSqÎûµ²ÆƒÿBÝ@¦Eäé¶éŒ|€ŸÇŸëVéB¨QÐ Z(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŠkh.&‰ýáÒ³'ð嬜ÂïôûÃõ­Š(“ŸÃ÷‘dDzQþÉÁügMo4DèÚ®ö€À‚± ?¢»I´›þõºƒêŸ/òªxj“ î¾Ìÿ 樭i|=z™ÙåÈ=›õªRé÷pÿ¬¶]¹V¢Ž‡Š(¢Š(¢Š(¢Šèü3þ¦ãýáýkz°|3þ¦ãýáýkz€1ü9ÿWöºÿÑÏ[áÏøò»ÿ°…×þŽzØ Š( Š( Š( Š( ¹þG¿ÿ»gÿ¢Úºzæ4_ùüSþíŸþ‹jé袊å|G&íEWû‘üÍ`ø6??ìÏÔMs,ãÝLŒãôÅ^ñ%à·ŸPºo»3¢¯ÿZ¤ðE›[Egu¶´T?P¡h¶¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(9 †a‰bGÿyAª’h¶u· }T‘Wè  Y<7lßêå•>¸"ªÉá™Gú»”o÷”ñ®’ŠäŸÃ÷é÷V7ÿuÿÇ]ô«èúÚÈÝþUÚÑ@Á4~)ýå"£¯A¦<1I÷ãFú¨4‰áŸõ7ïë[ÕpÅ|¨‘7rv¨©(ßñåwÿa ¯ýõ±Xþÿ+¿û]èç­Š(¢Š(¢Š(¢Šó¿éž0†ÛW–Ç\Õ.­. ”[ÛYEl²@åNÕæ=ΙÀܬ{ýáÜé¶óÚiÐÁsy=äÊ>içTÙ9ä"ªñÓ€:zó\.§áï²^Þ\ê¾ÑõÏ´Ý“ õíÈ¢IŽ"f * §ž2Mv>Óît­ÚÎòU’h÷“µÙÕbÊ›’ žHQ@•Ìh¿ò=ø§ýÛ?ýÕ½u©Xز­Ýí½»0ʉeT${d×9áË«{Ïx¦[iâž=¶c|N«nâ€:Ê(¨näò¬æ“û¨Çô 6ñ4ž~›x¿óôâûúá?öjëü3ü|Iþê×?Ò¸Í[ç›M·í-â“ÿV~¨+½ðì{4Âßßr§ô  j(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€1ü9ÿWöºÿÑÏ[áÏøò»ÿ°…×þŽzØ Š( Š( Š( Æ~#“OÕí4éM‚Ð=œì×À“1k¥SåüÊBNq•ã½t^ÕfÖ¼?m:F²H]I‹;$ ì¡Ó<í`¡‡³ æãXž÷Q¹ºÞ Æót‰,Æmw’BûròmþñÉÊàWAàýFãUðêÞ\³³=ÕÐBñygÊ[‰?—/QŸZÙ’¥ É97(5Íh1¤~:ñJÆŠ«¶Ï…ÿ–m]Ms/ü~)ÿvÏÿEµtõŸ­Éåé3c«aZЬ_ɶÊ(ÿ½&!ÿ× ã÷ž"²N«¼ÒŸfÊ*þ…ëÑô¸ü­.Ýq“?Ÿ?Ö¼æÔ¼E|ê2aÍ—cú2W¨F‚8ÕE uQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@þÿ+¿û]èç­ŠÇðçüy]ÿØBëÿG=lPEPEPEPEP\Æ‹ÿ#ߊݳÿÑm]=s/ü~)ÿvÏÿEµtõÍxšLÜÁ÷P·æúÕÒׯ̧1bÆ gÐc&€1|/Úu;‰»O¨1Ç´xŒÿè³^•\€a-mc+‚ 7žÌÿ1ýX×{@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@þÿ+¿û]èç­ŠÇðçüy]ÿØBëÿG=lPEPEPEPEP\Æ‹ÿ#ߊݳÿÑm]=s/ü~)ÿvÏÿEµtõç0vºª¡"IwCÿiÎÅýXW£×›x£÷šÅ½¯ioÃ7ÑHýô‹ùÐOáh4™•pªÃüâº*ËÐ"òôµls#þŸÒµ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ßñåwÿa ¯ýõ±Xþÿ+¿û]èç­Š(¢Š(¢Š(¢Š(£4P\Æ‹ÿ#ߊݳÿÑm]=s/ü~)ÿvÏÿEµtõæÚ§ï¼o0ík õ‘ð?!~ué5Ái¶²]x¯RšXÙ|ëö `ùqá"Uˆÿz€;{H¼‹8bþê~µ5PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP?‡?ãÊïþÂ_ú9ëb±ü9ÿWöºÿÑÏ[QEQEQEåZÔz6—­ÞÅ®Øx_T»¸å†}OSŽ9‘’¨VE%Œ(ÛÔq’k¿ðִ͜·žá'pƒG!‘Y‹*+YUHPO$(5ƒu§jžûd¶WZSYß_&îÑÚU’yB…b®7®çd .jè´ $hz4x”JP»³ªl]ÎåÈUÉÚ ±rp¥\Æ‹ÿ#ߊݳÿÑm]=s/ü~)ÿvÏÿEµtõ¦ÛgW¾¹#…r‹õÎOôüëf±n5•°Ó"»KP|è>ÐS~0K #8ÿ¦Ÿ¥mQY~ Ö?°´™¯¼?ËIfý¹Û?\îãñ¬MÇÛ$ºö•²Í;vv¢¶ÜíÞÆ}¨¯¢¸»_ý¦ÇV¹þÍÛýžÐ ¾~|Ï1¶ÿwŒ~9¨ôˆgUOoìÏ+ív2Þ¯ÎÍ™ù~ï9ÇZî(¯%‹ãa–kHÿ°ûC™ûgÝߟö9Æ+rûâWØå‰?²wù’2gíÆ3÷h¾¢¼êã♂GOì}Û.¦·ÏÚqŸ-]³÷{ìéïU_âùO A«ÿa‚eržWÚº|Åzìöô O¢¼“MøØÚ…•½ÁÐyÉ+mûfq±Iþç|WMwñì«§ŸìÍßl·3¯ÆÏÝÆøû¼ÿ¬Çáï@­ʯŒ·\¤?`ûÖjÏ›þʶޞýj…çÄCk<ñÿeîò ’lùøÎÛ„‡wý½ß†=è¹¢¼öçây·Ód»þÈݰÆ6ý§ß·¾ÞÛ¿JØÕ|eý™s<_`ó<«Y®sæã>ZÇNøÆhª¢¸Ÿ üA> ¼Ómÿ³<¶¬­»Ïݳgüg5¯¯x—ûÃíª}“ÎÛ#Gåù›zÎ÷};Ðýgâ_µêßaû&ÞToó3Ö$“¦?ÛÇáWn5_#Qû'“»åC»v>óªtÇûYü(JŠæ/|]ö=KìŸaßȼÜw¸1ÿNÿø÷·-×ǵ6ÝÞoÝùÝ}9û™üh£¢³ìõ?µØiw^Nß·"¶ÝÙÙ˜ËõÇ=1ÚªgX¸ÓþÍþ¥cmþg]ò˜úc¶3@tVx‹{i«ö\}¶SúϹònÏN}+GT½þÍÓ./<¿3ÉMÛ3Œþ4nЦo±¦OyåÿªYÍÝv:û⣻ÔþˬiÖNï¶y¿>ìlØ ôÇ9ÍhQTí¯¾Ñö?ÝíûM¹Ÿïgn6qï÷ÿJ4«ïí=6+¿/Ëó3òîÎ0HëøPÊ+/ÃÚ¿öö…m©ùG»÷{÷c W®¥jPECm?ÚbgÛ·:c9û¬W?¥PƒYóõ‰´ÿ#o—æüûú잘ïæÿã¾üjÑXÚ½ý³$Éöo'Ë‚ÞlïÝŸ57c éÓÞ´üÿôÑo·þYïÝŸ|b€&¢Š(¢Š†Ú´ÄÏ·n$tÆs÷X®JšŠ†æ³D¯·vdDÆq÷˜.Zš€ *Ÿuì¶û~ähû³×qaüwõ©¨ßñåwÿa ¯ýõ±Xþÿ+¿û]èç­Š(¢Š(¢Š(¢Šâüjúíåž›¨èïp“ÚHeKxŸìè÷(¨œŒ+²•!rH Æ+ ðôúuƇo&•h¶–™uë‹Êuv¥G‡ ;æ¹-bÒçÅ׳\éú:”³¸6Æäëi$­ ¹ÆÄÁ "åK{ŒÏQáIlåðÝ©°¶{h¤ŒÄuÖFWËäïˆ;²wg=èåö¦jn§Yݲ )ž¨öÈ⹸n4ø‡Pû:kHï|‘±Òå‘eeF$)ÈœuÅv5›©ZÍq¨èòÄ›’Þí¤”ä ª`•sïó2Ž=h—ü&güúëø#½ÿãUÍê:ä3è–¶ñiúÛJ–b&_ì[±†ÝÇú¯ö[ò¯C¢€8/köú§‡®-l¬5¹fxåU_ì[Á’кŽL@u`?æFvc#¡àñ_LVn‡k5žŸ,S¦ÇkË©@È?+Ï#©ãÕXÆ€>kÑ4=rÓL³†k‰$qÜÙw‘‚ôNäŠíõ¹4q‘®7Ùí rÿÄ¢èmo"Çú¾yFzW·Ñ@D—®/£ézÞÁ¦ùÿcÝ}ýŠ1þ¯ÔÈÔ~×=ÍÓţ댯i,j².FY¯"õÜV?†:׺Q@>ÞÛêh³[¦‰®Y¡!²n„¦埱®—į{{u%¾—­º½…Ô*±î†]âeQÌ}Éë´P‡ø%®tKDšûG×"KdœJ².›i`vôŒçð®Åº²j~’ÆÏMÖä¹3;„þÆ»øäÅŽâ½6Šòû n ?G=ÅŽ³rÈ«mï.E¼`€<¼“û·üž•¯yâYu£p–:Ù‹lCwö%çiQü²ôº}NÖkCF–$Ü–÷,§ mS©Ÿ™ÔqëZTäÚ¦ n5¡q—­´[Ýýv;ÞùçÿMcÿ¾½Žâ«×Ôµ%´Òõ¹ˆp±î‡Ý#=cö¯\¢€<†kÇ}îÒµ³,—‰*¯ö=×*ÉÿW]Wü$–Û3\}‹[òš×Ë ý‰yËqÇúªí( 4Òµxí´8íæÓµµ”iƿطgçò`\ªõF…A¦PÒ¥m3[ “!þÆ»ùG™!ÿž|ðÃó¯R¢€87Ävi Øëk%¬q‰—ûðí"Sÿ,¹äÅg f!â[Ë¿ìíoÈ‘! ÿØ·|•¸.xò³÷NkÑè 3µ×­¤mã²Ö]mn›Ï+£Ý˜aGÔ0#Õ»®øžÊóB¼¶·²ÖÞY#*«ý‰x2«wDµšÒÒá'MŒ÷—¨È9V•™O ƒZTÇ7‰¬Ž…ul,µ¿9Ò`«ý‰yÎâØÿ–^â¢Ô|Gi?ˆô[¸ìu¶‚ÛÏó[ûðmÜ€<¬ž}+¶¢€8ë/YCý›æYkcɳ1IÿKÎ÷|ªÿdþTh&²²Ñ-íî,µ´•7n_ìKÃŒ±=¢÷®ÆŠàüâ m+–VW¶ÜWù›Óûñ±—b9ЊÝÿ„ÃLÿŸ]oÿw¿üj·è ^ÇÅz|6î²ZkaŒÒ°Øw ŒGü²ô"± ñ%¯‰eºžÓYŽšt›F»Ù–ßhÊÎO”ÿ÷Íz fêÖ³\ͦ4)¸Cx²ÉÈPŽ3ù‘@o…u¸tÙîZïOÖãkiÿÄ–ìå’-¬8‹±­ÏøJôÿí17Ù5¿/ÉÛŸì;λ³ÿ<«¨¢€0?á0Ó?ç×[ÿÁïÿ£þ 3þ}u¿üÞÿñªß¢€0?á0Ó?ç×[ÿÁïÿªÖ>+Óá·u’Ó[ f•€þüèdb?å—¡ÔQ@½÷Šôù­Õc´ÖË ¢b?°ï: Ÿùeè Yÿ„ÃLÿŸ]oÿw¿üj·è ] :3Ça4pÈöÉ"HXÄHÜàß"ü n œ´Öɬéq=¢I©Y£ÞmU§PgÏMœüÝGOZ{jzzj)§5õ²ß:ï[c*‰Y}Bç${טj·r\iš¹Ö-–ß\Õ´+E°€®ÜmÝÇžw$¬ ‘O­_»hF±{§°_íÙ|Giu ã÷ù$Ƚö–E' 9MzUQ@Q@Q@âÕ´Ùµ4èµ I/¢¤¶I”ȃԮr)mu]:ùîÒþÖá­›lâ)•ÌGѰ~SÁë^u§j·¬Çm£ßé¶cqxövâä5åÕË,ŠîÃ9TË;`äœ);@³ÙaÔ4áÑ!.Öž–ÛP†;Õ÷Cˆ\|Ì,ÿ)ç“ëÈ©A¬éwV_ÛêVsYÅŸ2â9Õ£LuËбiykkÕÌ76ò ¤°¸taìG¼×PžÆúÿRÔôãÚM¥™!‰Œr¹ñÁ ¦Þyé]Wƒž)Û^»´*ÚuΦÒZ:}Ç_*%vSЃ"Èr:ò{ÐMEPEPUïoìôÛVº¿»‚ÖÝ~ô³ÈÔ“Š±\§õ+EUÅøµ7io±Ë&äòØv<`)=‰És@ž#Ðôëk{›ígNµ‚äf gºDYGª’pÝGOZšMgK‰íMJÍðj­:ƒ>zlçæê:z×Ò,-4k¨|a¬kozb¼‚Ú9-æ’Y–I nQ†\1ðj VîK3W:ŲÛëš¶…h¶Ã¯û¸óÎä• r2 õ OmOOME4æ¾¶[ç]ëleQ+/¨\äzµ^kvÐb÷O`¿Û²øŽÒêÇïòI‘{ì,ŠO@r:šôª(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+*ïĺEŽ¥&Ÿux±\ÇÚ$RˆâÃìØÚ£änIöêEj×/¬xVmZoæxâMN hIÜ”屎3"ô9ëÒ€.Åâí[›Ávé³"ʲÛÉ€¿l¡Îâ~\»¶k.ÿâo,Kk—Éeutex¥chY£þì”?3g<®—Z¥ƒµ@“^·Ù#Ô–{iaG¿¹ºW—;^Ir@>cà*ü¤çæ¥Ö )cl p all (1) -> η := operator 'η (1) η Type: BasicOperator (2) -> G := operator 'G (2) G Type: BasicOperator (3) -> rule1 := rule (D(η(t,β),β)==X; D(η(t,β),t)==XD*β; D(η(t,β),[t,β])==XD; η(t,β)==X*β) (3) {η (t,β) == X,η (t,β) == XD β,η (t,β) == XD,η(t,β) == X β} ,2 ,1 ,1,2 Type: Ruleset(Integer,Integer,Expression(Integer)) (4) -> S := G(η(t,β)) (4) G(η(t,β)) Type: Expression(Integer) (5) -> H := -log(S) (5) - log(G(η(t,β))) Type: Expression(Integer) (6) -> h := D(H,t) , G (η(t,β))η (t,β) ,1 (6) - ------------------ G(η(t,β)) Type: Expression(Integer) (7) -> [D(expr,β) for expr in [S,H,h]] (7) , G (η(t,β))η (t,β) , ,2 [G (η(t,β))η (t,β), - ------------------, ,2 G(η(t,β)) , ,, - G(η(t,β))G (η(t,β))η (t,β) - G(η(t,β))η (t,β)η (t,β)G (η(t,β)) ,1,2 ,1 ,2 + , 2 G (η(t,β)) η (t,β)η (t,β) ,1 ,2 / 2 G(η(t,β)) ] Type: List(Expression(Integer)) (8) -> [rule1 expr for expr in [S,H,h]] , XD βG (X β) (8) [G(X β),- log(G(X β)),- -----------] G(X β) Type: List(Expression(Integer)) (9) -> [rule1 D(expr,β) for expr in [S,H,h]] (9) , XG (X β) , [XG (X β), - --------, G(X β) ,, , 2 , - X XD β G(X β)G (X β) + X XD β G (X β) - XD G(X β)G (X β) ------------------------------------------------------------] 2 G(X β) Type: List(Expression(Integer)) #+end_example ** Proportional hazards #+begin_src axiom :exports results :results output G(x) == exp(-exp(x)) S := G(η(t,β)) H := -log(S) h := D(H,t) D(G(x),x) [rule1 expr for expr in [S,H,h]] [rule1 D(expr,β) for expr in [S,H,h]] #+end_src #+RESULTS: #+begin_example (10) -> G(x) == exp(-exp(x)) Type: Void (11) -> S := G(η(t,β)) Compiling function G with type Expression(Integer) -> Expression( Integer) η(t,β) - %e (11) %e Type: Expression(Integer) (12) -> H := -log(S) η(t,β) (12) %e Type: Expression(Integer) (13) -> h := D(H,t) η(t,β) (13) %e η (t,β) ,1 Type: Expression(Integer) (14) -> D(G(x),x) Compiling function G with type Variable(x) -> Expression(Integer) x x - %e (14) - %e %e Type: Expression(Integer) (15) -> [rule1 expr for expr in [S,H,h]] X β - %e X β X β (15) [%e ,%e ,XD β %e ] Type: List(Expression(Integer)) (16) -> [rule1 D(expr,β) for expr in [S,H,h]] X β X β - %e X β X β (16) [- X %e %e ,X %e ,(X XD β + XD)%e ] Type: List(Expression(Integer)) #+end_example ** Proportional odds #+begin_src axiom :exports results :results output G(x) == 1/(1+exp(x)) S := G(η(t,β)) H := -log(S) h := D(H,t) D(G(x),x) [rule1 expr for expr in [S,H,h]] [rule1 D(expr,β) for expr in [S,H,h]] #+end_src #+RESULTS: #+begin_example (17) -> G(x) == 1/(1+exp(x)) Compiled code for G has been cleared. 1 old definition(s) deleted for function or rule G Type: Void (18) -> S := G(η(t,β)) Compiling function G with type Expression(Integer) -> Expression( Integer) 1 (18) ------------ η(t,β) %e + 1 Type: Expression(Integer) (19) -> H := -log(S) 1 (19) - log(------------) η(t,β) %e + 1 Type: Expression(Integer) (20) -> h := D(H,t) η(t,β) %e η (t,β) ,1 (20) ---------------- η(t,β) %e + 1 Type: Expression(Integer) (21) -> D(G(x),x) Compiling function G with type Variable(x) -> Expression(Integer) x %e (21) - ----------------- x 2 x (%e ) + 2%e + 1 Type: Expression(Integer) (22) -> [rule1 expr for expr in [S,H,h]] X β 1 1 XD β %e (22) [---------,- log(---------),----------] X β X β X β %e + 1 %e + 1 %e + 1 Type: List(Expression(Integer)) (23) -> [rule1 D(expr,β) for expr in [S,H,h]] X β X β X β 2 X β X %e X %e XD (%e ) + (X XD β + XD)%e (23) [- ---------------------,---------,--------------------------------] X β 2 X β X β X β 2 X β (%e ) + 2%e + 1 %e + 1 (%e ) + 2%e + 1 Type: List(Expression(Integer)) #+end_example ** Probit Is there a more canonical approach in Axiom? #+begin_src axiom :exports results :results output Φ := operator 'Φ φ := operator 'φ rule2 == rule D(Φ(x),x)==φ(x) G(x) == Φ(-x) S := G(η(t,β)) H := -log(S) h := D(H,t) rule2 D(G(x),x) [rule1 rule2 expr for expr in [S,H,h]] [rule1 rule2 D(expr,β) for expr in [S,H,h]] #+end_src #+RESULTS: #+begin_example (24) -> Φ := operator 'Φ (24) Φ Type: BasicOperator (25) -> φ := operator 'φ (25) φ Type: BasicOperator (26) -> rule2 == rule D(Φ(x),x)==φ(x) Type: Void (27) -> G(x) == Φ(-x) Compiled code for G has been cleared. 1 old definition(s) deleted for function or rule G Type: Void (28) -> S := G(η(t,β)) Compiling function G with type Expression(Integer) -> Expression( Integer) (28) Φ(- η(t,β)) Type: Expression(Integer) (29) -> H := -log(S) (29) - log(Φ(- η(t,β))) Type: Expression(Integer) (30) -> h := D(H,t) , Φ (- η(t,β))η (t,β) ,1 (30) -------------------- Φ(- η(t,β)) Type: Expression(Integer) (31) -> rule2 D(G(x),x) Compiling function G with type Variable(x) -> Expression(Integer) Compiling body of rule rule2 to compute value of type RewriteRule( Integer,Integer,Expression(Integer)) (31) - φ(- x) Type: Expression(Integer) (32) -> [rule1 rule2 expr for expr in [S,H,h]] XD β φ(- X β) (32) [Φ(- X β),- log(Φ(- X β)),-------------] Φ(- X β) Type: List(Expression(Integer)) (33) -> [rule1 rule2 D(expr,β) for expr in [S,H,h]] (33) X φ(- X β) [- X φ(- X β), ----------, Φ(- X β) , 2 - X XD β Φ(- X β)φ (- X β) + X XD β φ(- X β) + XD Φ(- X β)φ(- X β) -------------------------------------------------------------------] 2 Φ(- X β) Type: List(Expression(Integer)) #+end_example ** Additive hazards #+begin_src axiom :exports results :results output G(x) == exp(-x) S := G(η(t,β)) H := -log(S) h := D(H,t) D(G(x),x) [rule1 expr for expr in [S,H,h]] [rule1 D(expr,β) for expr in [S,H,h]] #+end_src #+RESULTS: #+begin_example (34) -> G(x) == exp(-x) Compiled code for G has been cleared. 1 old definition(s) deleted for function or rule G Type: Void (35) -> S := G(η(t,β)) Compiling function G with type Expression(Integer) -> Expression( Integer) - η(t,β) (35) %e Type: Expression(Integer) (36) -> H := -log(S) (36) η(t,β) Type: Expression(Integer) (37) -> h := D(H,t) (37) η (t,β) ,1 Type: Expression(Integer) (38) -> D(G(x),x) Compiling function G with type Variable(x) -> Expression(Integer) - x (38) - %e Type: Expression(Integer) (39) -> [rule1 expr for expr in [S,H,h]] - X β (39) [%e ,X β,XD β] Type: List(Expression(Integer)) (40) -> [rule1 D(expr,β) for expr in [S,H,h]] - X β (40) [- X %e ,X,XD] Type: List(Expression(Integer)) #+end_example ** Aranda-Ordaz #+begin_src axiom :exports results :results output G(x) == exp(-log(θ*exp(x)+1)/θ) S := G(η(t,β)) H := -log(S) h := D(H,t) D(G(x),x) [rule1 expr for expr in [S,H,h]] [rule1 D(expr,β) for expr in [S,H,h]] #+end_src #+RESULTS: #+begin_example (41) -> G(x) == exp(-log(θ*exp(x)+1)/θ) Compiled code for G has been cleared. 1 old definition(s) deleted for function or rule G Type: Void (42) -> S := G(η(t,β)) Compiling function G with type Expression(Integer) -> Expression( Integer) η(t,β) log(θ %e + 1) - ------------------- θ (42) %e Type: Expression(Integer) (43) -> H := -log(S) η(t,β) log(θ %e + 1) (43) ------------------- θ Type: Expression(Integer) (44) -> h := D(H,t) η(t,β) %e η (t,β) ,1 (44) ---------------- η(t,β) θ %e + 1 Type: Expression(Integer) (45) -> D(G(x),x) Compiling function G with type Variable(x) -> Expression(Integer) x log(θ %e + 1) - -------------- x θ %e %e (45) - --------------------- x θ %e + 1 Type: Expression(Integer) (46) -> [rule1 expr for expr in [S,H,h]] X β log(θ %e + 1) - ---------------- X β X β θ log(θ %e + 1) XD β %e (46) [%e ,----------------,-----------] θ X β θ %e + 1 Type: List(Expression(Integer)) (47) -> [rule1 D(expr,β) for expr in [S,H,h]] (47) X β log(θ %e + 1) - ---------------- X β θ X β X %e %e X %e [- ---------------------------, -----------, X β X β θ %e + 1 θ %e + 1 X β 2 X β XD θ (%e ) + (X XD β + XD)%e ----------------------------------] 2 X β 2 X β θ (%e ) + 2θ %e + 1 Type: List(Expression(Integer)) #+end_example ** Other links The development for other links would be similar. rstpm2/inst/equations.org0000644000176200001440000001317015040165555015207 0ustar liggesusers#+title: Equations for the rstpm2 package #+author: Mark Clements #+latex_header: \usepackage[landscape,margin=1cm]{geometry} * Generalised survival model #+begin_src maxima :results raw :exports both logexpand:all; derivsubst:true; load(pdiff)$ assume(t>0)$ S : S0(t)*G(eta(t,z,theta)); H : -log(S); h : diff(H,t); print("H:"); tex(H); print("h:"); tex(h); print("diff(H,theta):"); tex(diff(H,theta)); print("diff(log(h),theta):"); tex(diff(log(h),theta)); print("ll:"); ll : delta*log(h) - H - diff(eta(t,z,beta),t)^2; tex(ll); print("diff(ll, beta)"); tex(diff(ll, beta)); #+end_src * Mixture cure models #+begin_src maxima :results raw :exports both logexpand:all; derivsubst:true; load(pdiff)$ S : S0(t)*(pi(theta)+(1-pi(theta))*exp(-Hu(t,theta))); H : -log(S); h : diff(H,t); h : subst(hu(t,theta), diff(Hu(t,theta),t), h); print("H:"); tex(H); print("h:"); tex(h); print("diff(H,theta):"); tex(diff(H,theta)); print("diff(log(h),theta):"); tex(diff(log(h),theta)); diff(log(h),theta) - diff(H,theta); #+end_src * Integral equation for AFT models #+begin_src maxima :results raw :exports both logexpand:all; derivsubst:true; load(pdiff)$ assume(t>0)$ S : exp(-exp(B(log(integrate(exp(-x(v)*beta),v,0,t)),gamma))); H : -log(S); h : diff(H,t); print("H:"); tex(H); print("h:"); tex(h); print("log(h):"); tex(log(h)); print("diff(H,beta):"); tex(diff(H,beta)); print("diff(H,gamma):"); tex(diff(H,gamma)); print("diff(log(h),beta):"); tex(diff(log(h),beta)); print("diff(log(h),gamma):"); tex(diff(log(h),gamma)); print("ll:"); ll : delta*log(h) - H - (subst(u=log(integrate(exp(-x(v)*beta),v,0,t)), diff(B(u,gamma),u)))^2; tex(ll); print("diff(ll, beta)"); tex(diff(ll, beta)); print("diff(ll, gamma)"); tex(diff(ll, gamma)); #+end_src * Integral equation for AFT models with functional constraints on gamma #+begin_src maxima :results raw :exports both logexpand:all; derivsubst:true; load(pdiff)$ assume(t>0)$ gamma : gamma0 + exp(alpha); S : exp(-exp(B(log(integrate(exp(-x(v)*beta),v,0,t)),gamma))); H : -log(S); h : diff(H,t); print("H:"); tex(H); print("h:"); tex(h); print("diff(H,beta):"); tex(diff(H,beta)); print("diff(H,alpha):"); tex(diff(H,alpha)); print("diff(H,gamma0):"); tex(diff(H,gamma0)); print("diff(log(h),beta):"); tex(diff(log(h),beta)); print("diff(log(h),alpha):"); tex(diff(log(h),alpha)); print("diff(log(h),gamma0):"); tex(diff(log(h),gamma0)); #+end_src * Non-integral equation for AFT models #+begin_src maxima :results raw :exports both logexpand:all; derivsubst:true; load(pdiff)$ assume(t>0)$ S : exp(-exp(B(log(t*exp(-eta(X,log(t),beta))),gamma))); H : -log(S); h : diff(H,t); print("H:"); tex(H); print("h:"); tex(h); print("log(h):"); tex(log(h)); print("diff(H,beta):"); tex(diff(H,beta)); print("diff(H,gamma):"); tex(diff(H,gamma)); print("diff(log(h),beta):"); tex(diff(log(h),beta)); print("diff(log(h),gamma):"); tex(diff(log(h),gamma)); print("ll:"); ll : delta*log(h) - H - (1-subst(u=log(t), diff(eta(X,u,beta),u)))^2 - subst(u=log(t)-eta(X,log(t),beta), diff(B(u,gamma),u))^2; tex(ll); print("diff(ll, beta)"); tex(diff(ll, beta)); print("diff(ll, gamma)"); tex(diff(ll, gamma)); #+end_src # * Constraints # 1. Baseline log cumulative hazard function: # Delta Q gamma >= 0 <=> Q[i+1,] gamma >= Q[i,] gamma # And/or: hazard is positive <=> B'(log(tstar),gamma)>0 # What if we use B-splines with a constraint? This would lead to # gamma[i+1] >= gamma[i] # 2. Cumulative covariate effects on the acceleration factor: # If g(X,t,beta) = X beta + \sum_j X_j(t)*B_j(log(t))^T gamma_j # This constraint is not needed for the integral model. Should we focus on that model? * Non-integral equation for AFT models without time-varying effect #+begin_src maxima :results raw :exports both logexpand:all; derivsubst:true; load(pdiff)$ assume(t>0)$ S : exp(-exp(B(log(t*exp(-eta(X,beta))),gamma))); H : -log(S); h : diff(H,t); print("H:"); tex(H); print("h:"); tex(h); print("log(h):"); tex(log(h)); print("diff(H,beta):"); tex(diff(H,beta)); print("diff(H,gamma):"); tex(diff(H,gamma)); print("diff(log(h),beta):"); tex(diff(log(h),beta)); print("diff(log(h),gamma):"); tex(diff(log(h),gamma)); print("ll:"); ll : delta*log(h) - H - (1-subst(u=log(t), diff(eta(X,u,beta),u)))^2 - subst(u=log(t)-eta(X,log(t),beta), diff(B(u,gamma),u))^2; tex(ll); print("diff(ll, beta)"); tex(diff(ll, beta)); print("diff(ll, gamma)"); tex(diff(ll, gamma)); #+end_src # * Constraints # 1. Baseline log cumulative hazard function: # Delta Q gamma >= 0 <=> Q[i+1,] gamma >= Q[i,] gamma # And/or: hazard is positive <=> B'(log(tstar),gamma)>0 # What if we use B-splines with a constraint? This would lead to # gamma[i+1] >= gamma[i] # 2. Cumulative covariate effects on the acceleration factor: # If g(X,t,beta) = X beta + \sum_j X_j(t)*B_j(log(t))^T gamma_j # This constraint is not needed for the integral model. Should we focus on that model? * Integral equations for AFT models with $H = B(\ldots)$ #+begin_src maxima :results raw :exports both logexpand:all; derivsubst:true; load(pdiff)$ assume(t>0)$ S : exp(-B(integrate(exp(-x(v)*beta),v,0,t),gamma)); H : -log(S); h : diff(H,t); print("H:"); tex(H); print("h:"); tex(h); print("diff(H,beta):"); tex(diff(H,beta)); print("diff(H,gamma):"); tex(diff(H,gamma)); print("diff(log(h),beta):"); tex(diff(log(h),beta)); print("diff(log(h),gamma):"); tex(diff(log(h),gamma)); #+end_src # /* non-integral equation for AFT model (non mixture cure) # - cumulative effect modelled directly (does this make any sense?) # */ # assume(t>0)$ # S : exp(-exp(B(exp(g(X,log(t),beta)),gamma))); # /* non-integral equation for AFT model (non mixture cure) # H = B(...) # */ # assume(t>0)$ # S : exp(-B(t*exp(-g(X,t,beta)),gamma)); rstpm2/inst/doc/0000755000176200001440000000000015105126151013220 5ustar liggesusersrstpm2/inst/doc/SimpleGuide.pdf0000644000176200001440000033514215105126152016133 0ustar liggesusers%PDF-1.5 %¿÷¢þ 1 0 obj << /Type /ObjStm /Length 3715 /Filter /FlateDecode /N 74 /First 610 >> stream xœÝ[ÛrÛ8}߯ÀÛdj+‚ 85•ZßãØN9÷©<Ðes"KŽH%Î|ýž/âMíhv·¶\2AݧnH2‡¹LŸ)湂yL;ÓÌ×’ùÌà <èã&&¤ëã… ÏÃ%†ê]&E€FŤòQé1×Á@B3×sPïã颿a®í0åx“S ãIÁð5|Y2OHIÔ`úaj߀.WÑšðô˜Q¨t53¾‡wŸu±Z—Þhâ,Ba½Žƒ^ ks$–«°Ga<¥P0ÆcÊ[\}4 KP`””j ± t+°DzøLŒÔD£ #KƒA,[pÌST©à¿pðÀÃÈ®ð0 ‚=â½ôÁ.ŒìÒÚ¡‚†1²ë`ˆR¸,Òì4r`¹ Ù9ÔäSÁ €‘•tÐ#+LöI¾øX‚B’´ÒX)ÊЄ‘•ÁW|Œ¬üã÷ß?Òp¦!`¼ uMw‡i<›²?€9[w§ì3šé$žF Ë»^„×Ñùl1þ6‰ÊF[´¶Ï›whßÇ “Ù5{öÌNº»Hofsöû8GGC†¾ÄóÊqð€øPâˆêQþŒÐ‡8á>Èó($"Â4bO~“‚B ­Œgþéˆ_ç—_ó~˜ëÉYø&úÀ¾Çé »Móy4Fóiôãûl>J Z|Ìë{-¾ÆœAþ=r˜Ñgû99AFÑhiO6‘u1ŸÃt_œ±ã›Y’&Ãy|—±;ŽÜès¹¸ú3¦ì Êoât•DÊœ•¹¨sÃŒ8"¶ Ò7ªëå}ül¡¶]Qý³B:û³Å4…Œùi Æ 0ö?´„P ûÈš€kz|.¤ mšFÓ4¶gˆ8Fq¸7»ÇÈô=/ðv`Œ;& 1.Â9úøDÉl1b<ìð>=¾L‰·®È¡‰áÉ–d€œÏ†—QŠ‘ùÅÁÈ‰î ¸ÏžU)«/SºçIÊrêÎB”ƒ*vK`çß;ˆ’t©>~‚Šíøì¯ç™a ‹ÓÅdBKyI󅲨eåªS“§ *à&%g2±òÉålåDõѳ6gÍ69«ü g•ygs™6‡`w$VTr¨Î•‹yô­DC"ãE.©™ÉU²†ì’3{aYòùñùþ󋃞f·áô º…ót]/&ዞg£xzÍøûxº;Mâe…Åþ za?°¼Àª¬†Â˜±‹í#°‘¾¦–ÄQ0&£ã}äÃÙd6å#ññ8,cþÅBs pΦŠ­>ž–8å ~¿«ª ª‚¼;¢ †Uã4±º.}A ײ¤-\>¿<ü4xUNÔeÎübs,¡Iö© M¯ M·¯£s}Úfo8yÉLL €Öü!r±ÑG¼Ù´I»Yó´â³,Éü{ÙÙøØ.!(r}áìÂÖFÀ‹vóW‹¼7!œxß*õB½›Ql¿ëe߀ä»4°°Ÿäâé:º¬·Ë¡wiJ«k’·{ÖêÊÌò‚ EMMOúИ«ÑR¯®2^Ceö 4üñçPžS~zÉ/ø€_ò7ü-ÇßC¡®ø6æ(-5k8»½ ­~Ùqy4…É ¾. Cé8Ônƒþáþtð†ÃÁ¾‰¦PÆ?KuœÂ…Zê$íú“hœf¥¹ŠJ+)ön²HøWþu1K£ÑÕÄö.^²/Ø·¬HÚ`{ȈNâ{Òõ›yåÿç÷üÿ‹ÿÍë[•ÝÞ;Ôÿ©r²VA§eâgÝTüÏ̬ÖËÞ6@¬·—»lN’¨èµôÙZFâã‹W§ï*Ä46¯uNž-[aš¶¢·Ãct°ʽöÎÇPëv­þS8á*Žý~‡;cê«A˜mUtè8Û §µ?hf耘6d+ıMÆmƒàèõóÁ§ÓʬÙ|ÕÂmn2hM"¦ða©zz»f£ãmê±îϸ@ÖÑËrQï:äÔP„=¦èš§¥mÉ`G¡+Cà¡õ(Ú„ž›Œ¢Ñ¶­íÆx5Ðag¬€î4u^&U«¹ta ÿºbÁ꾋·Âxa‹³­ºCdÔñYH½ÄçJ¤ôF¨ÙˆP%Û=»x=øøóž‡éM6W·CS¢J‡F¶q*[8íëk{{°ø$öÄkÅY©"׸™i3ª‰g GÚ3ë¼ÂmO ÙjQÐr¼Üm£g¯ºîvë*^÷à9œZoá*JC~’gpMáµhôþ™µî\‹UŲl«1¨PÕè ô…©ÛÛË~w¸w1¸È'¼üq{5›$ÐÔE¸¤„fû(U™N×ö9{;…3Š µ¬€j`Õo¸½ÿ/òÁ^íU8ç·ñ~âíb’Æw“|]Û°p2›ÚËÏ˽<ŠF´<ÝÄá&Xô¢³jGo›È“óÃóÝ&òîœï4AØeu…½í£¦3øo#äïùÓ^×ÎíÖ-amç®Ø¿†µ[J@›vªŽ±J¸5·uk$Þ_×^ÇŸö_¨Mf õÛçùç… 7xØŸréÄÐ †©.žiGššaΦ‹FØÆ™@Ús@Wpó©PYs€}¦Þ4¦)èõ¼ï½§›]/ѱÁ]~|]ì¨8IFîlE8©8Ï”"W¦5›ë4DŽõ®Ûâj9–&)ã{kåܧpZA(A¡•& ê»L}“)cW鲜ÞU"WÕ0Z’,mB£8¹›„?–it_ƒ’ðýÕ»’m.ìCs[ œ&’6 ³'š¤³Ê‘Ï96>iþ²†‚¤Ea/äeÊ3eC ²2veI ò²¢ËyY3éeŠ£åe LÕÙ—€¾<9{ù²™,xu5‰¿.¢Ç§zÜ–ëö?™ê©i†›§6'y¼úÕ¾–È¿]•ÞÁj ¨³fC~¯qî Z1³õ2ë}ø\µÛ­ì¼xqzVL~9 §éÓƒ†°åfùý#;œz_¶sŽ_÷CCÂ"T]ÔäÑöFº@M3@½!´‘½–ÈÙϲ3en¦š—)Cõ=U¯B”ÊZƒÀm2‚V mƒLû"Jmgt!êüäèâÝq1ûCý(Õa}Ú~”蛣¡›P ½F–š8‘Ù[#Îûj¡/XÎ\Ÿ)«{Øo”'(ýœçº2 ËLEÿ×Dü;’Ó”ûѺ} Z1³•Âî 2Ñ#ªÛ3ìï¾.½Æüª»¼¶"ˆ²ÎkSN`j­×Ônu5çê¶ Ø}Õµ²¯KßjßFÙ¬t†`èÞ¡=©U…â5…²9=E³Rý[Âx}z||þ¾>_—ÞëV³KÍæaè5¦MÙš0¤¯:„Ñ:Èn`N_alÈŠU2ãïß‘FžÏ¦³î`iŠÁõÛbh¹|²·ËgVú_ý8kÞ6}º¾ë”Ïâ­^ßîÓ=FÍP?Šž‡¯«JÕ¦Ã8¥™ªNÅ!?±yëeÖšrÖa2Œã4žŒ")!œ|áaJ©ìp¾:]$°mê:Ë[/cÙµLÌ$J’Ç¥°m‚z™¸®¦ª¿ELSÛ¼œUGÝöÐèY­CÐ 9¬T‘-úÚ]‰žOŸÎN.öòyçj»ª­©íˆæÃ4µ‰þ‡éfSûÚõmÝl÷^­§M=_×ûïÑÕ‚‚‡iê¡ÍÕï—|¬k*´s¿D©U¼œ)H‡Ê>BY7ééòŠI~§$SL¨¤M4s1Eód8›Gýt4h(©MÇÒ5ÿN-mÝ{\¯-UU}*ÖEWe»ºtµ+°³"˜³Êö×yÙÐ/?²2œR·è¯ì/>ò²"g /kúG^6ô ååÍháäþíÏ\¶–ÃËzÐEè×j+ìI½øyê——„¼Ê†~ÁòðõT\­hò-JãaXu®rk¼Æþö "V¹¶ #ä¶ÂÜ”[妩r3x7wO.‹û\û»¬dÔr ö:;úAýEù@Û(åeM¿Qªñ~J×ñuw:¥67˜U®±ÚÝ&«u¸zKÀÝ|#n3Žw-¡—Œ¿œíùo§lÕ“Û0ž¤³ßnÃù—á$º%îüëK¼“à E”îÍæØXrîØˆÃ¾}2ÐËs{bË–)³C·A¤Ö;B úUߎ"“ë{;Z[v–ŸÅÓ/%A$¨GXùÇkø’iQ…°†Õñx $û?ì±×žF—?)*»>j<ø¬öžÀ–ÆsŠáàõ7È Öod—> stream GPL Ghostscript 10.02.1 survival, splines 2025-11-12T16:48:58+01:00 2025-11-12T16:48:58+01:00 LaTeX with hyperref rstpm2: a simple guideMark Clements endstream endobj 77 0 obj << /Filter /FlateDecode /Length 3773 >> stream xœÕ[Y#·ò(äô*±:Í›tà vàœ6Çó`7½;ò¬li4–z/ÿ‚üìTÉn²I;Þ}0ü`M7b_U}ìýaYW|YãñÿÏ÷‹zy·øaÁéé2þïù~ùùÍâ÷ÿæ|Ém%¸VË›oa _ŠZVum—V›Jq·¼Ù/ž°ãiµ®«Z;®”`íà ÿÎyÇöø[ ífbõß›àÊ2_YËJzX©^ÞÜÂZŸ¬Öº®Y³ZK«*ï<;áÊ©%Ûîv›øÊsv÷r{»ÉVå•×ZàªkâÕ^-×JTF VÿŠ5VúZ²æø=.¥ábÞmö›û•äUÍ¥c-íª9œCÄõ5h¨òµç´¾ªLm_®¹¬´«ÿ³9vÛûp| Û³Ó÷x)@ZÁþ^¼i·íËìïv“tè lO‡úâfñ5îl—w§…e,_ƒÉþº°Ò‚”bi¬‚Íùr¿Ð ÍÊêîÉnñͼaÝÒWÞSØÔ`aE *TÍÊ>{vjÍóvuó]8~?k͵¯\-àô®R6*÷æGsi=Û‚OkÀY${µ½‹G÷\–Nê` kñàÂZ|˲QÇÃJX8³Ö0ÿvnzÚ…;tZ§vì~’ÍØÁoÇ’‚¥Í”çɆ w E5ká§w’}4'Ûí³|³n¶/ÎÓ›}˜fàO%Y{Ü>Cg{ÜÉô²ÙÓîè¸Ä1ÐÕm<‹VìÙ ÷?boSøð̾R©ÊrŸb²‹ï`±|ç}Ô¹ȺrÞÄù¬ $ê2€œ”˵ÏóÎÅZiÎ6oƒ#Iç{}8Â3°0øÇíi5ŒJW &ƒ)%;û*'¼gÇWÛW+€"8kvÓжf§‡lX½Q{^ÂÑÙ©êc2 öŽW8}¦'gJURQD D.<[jн‘6 +¯a3D‰n,ÀÞë€T‚ݾ|Þn÷“ŠYsã+£4(YB¼J^j8rr«Œì\![CˆŠ[k‡¾”’|Ô•ûB¶èJ%ÒùŒæ9ù­‚Ÿß7wìáµR¥íòèÕ—Š³Ã±MîPº–Ó”šâ~m >w¥U%¸ñCð*R«½e¢!,%Z½ã%zN³Ã':Ê` ¦Ñ·›|ÝißäÆTÆvÒ´‡xÈZ„ǰ•*…|îv!ì&/Œ‰ñÕn÷›u{Xo^mî{´ÎFƒÎØÎù^MÛ¿†<)ÁïbBS)g]…à/%= H¥Ïä„ãx0ba@dk9KËÀo³½òܸ۽ƒjYúO‡©Z{9bjKÇõÂP@‘ðœò¾(…¤ç`ÚS¾i@ ÄZÈèAQ¬&„½säx^$s Ïþ„´5ayžŠM£±„­U1j×<¹=ÇOÒú€¼P9À©„Š€ô¿„rŽ}‘ožÝ´$ßÁêÞÒIóà ÑrEÅ3'¼*MqÂÕ0骑¯à.€,·Róc¾KsÌ÷9AJQëu}iN8$¨BÌ_'(ÏsŸyYáY¥Ût¨Ë–IvåÂ4¨.½ž €Òì›):ËV’ÛnÈSéåb…µ”KY¡ ZyG!ãïâS©%t´qÈ›iY¸µ$Ã<]¡Y ]B|~Â{ö¯L7GxêàÒU†{žVºßôÔ ²?Æ5y¼¤ÎÈÀ¹ƒˆžŸ;ˆïÔ¾  8(òÚ1ú´ ÇÙné°µ­tªÒ66>H*QãCmO-‘«Ú6Ãò¢ƒª))*û¢Ž@EçàH¿wluÓ¦ÞÁÛ”ðºl’JµpÝ­>âe7Fe‚g<7]m›²ïˆìÂlf¦¶ç¬†`“9ͧ ŽŠ /£[ ;piá–&¶dqU'7`4¼†à<÷ªÁµK%¨å2“+è‚ÅTc8K© öë ½Ý¨R"ݪ¢|:àÚãÕ2^M"ƒ¯ÜO‡‘.ÂfqDvð>q$X2·)u ¨ôÞ< aTÖù(ÁÊ¥@d¨=m[ã¶3¿ÉëO!y‡q•åxñ· ã’fþbÆó$^(EËŒ^8¼3v`™‘tI$qI¤',^ÏCUà§Ò¥®8—¦ƒ§lw€&ž#@Ù4BTÚ(~.üÉØuÂÚ§«?L™zHgì-‘Éí-%Õß­¦t†Àc<0å‘üOv-”G²†B½`-xå¾(T ŒéµHÆ»¾`ô_MB7ЙLBÃ0nFÐ0 6øýÀÔŠÅùÓ‚x‚š“Ë|.“\¤óîâíèRT XW!B@§Î#WÞU@’32p’ÄÐ_æ3%k¼\—OFP7xênô¡ÅžÞ ü!ª&‡þѹÓÑ!R5yù:t|9y­Ct‚6 ª‚’±«MæCAÉ,\öDÅoð¢UηåUÊtnuPn9~^2 'Å ÝÊ©å!–ˆ…BŠ¥Q%aºôó„u‡æ#F‰üFúa6Y yÑtÓ;µá'OyR¦è~ù!ýI"8Yˆn¡'ÅO®Êo[F3äÃXW„;ÕÈ•x(’ÂG0ªì~q(We¡‰z ­+º0eJÃâµÔ_yÕÕ}Ò±¶P=#Q6ìa6î…dp7bëjä‡OaÊ{]5ƒÆÕˆî†¸ Nl«Š{nºøÅcZüH‚X“:ô^´[ø) J íqˆ§{âJÂ\ûQB§€QIæp,ïù›@zÓj˜§N}lˆ¬ ‹¸TØ„ö´1¹QΟìƒûÀþÅ÷M ,Ê*Mb’/]“*E—:sß%ä^>¾fÒê1ALÍcî26a6^í7Irú£¥tŒ^iº÷;ÄF'JÓWú}T!Œ‘™*|!W2J!j&{¥HrìáÆÍÊámÆC¯òr.—ý ©ÀêéÂJ éJ’ÿQõ:ôt%?NRýË“ï²K»\r» âFµÌ#ÿ,ÌHjŸ8B©IÙ(¸Ñœ·F>Û¸Î4¹µ3&hrš [än|mdjº3˜ÐP4gLT¤˜¸{¡óLÞÒeÓ‹ †î0ŽïðYËD|GÚ|ü ‘ &|~Ókàãžå>–©'ùг¡iuCÕ º%/³áî-¸=¬=UüœÚp(n)bBþ[˜þ ¦ B¨‡uÏ«\SηÂõ%&Jò®0šm…]Ö»å­ðýí¤u.yóÍjÏ …f¾ñ³D‰ƒv“'•Ìž«‹Z»ÈC~¥õj%…p}Ÿ®x…Dµé‘ èI)ráýtìª6¤cïósèØÁÒ±c—îBÇ®lèØÃ¿n˜kÙѺ¡ÁÆÎખ= ¼ÈVµìܨé–}DÛ ]WH á¿×àÖVèÅLÛ锽‚·{/`U;s)î|æ¶C°øOR G¬pH¿‚ë>)çNƒÂìÒsSIµÜ/¸/œý ¼»øA9Çï aÇ+%dü§:㶵̘cl¡7L²·­Ô Ð÷ séDw|燽 ¹â^cÖ@BÅw VǨ.ùî<¦p@Ei/ b¦ÛyTì9逊µuà1/¢âÏ—ÇU6¼âJˆ’ÿåSUKf†g³ L×ßVçBúC¦ç÷O¨£ÂV 6ªïUiã!Õ<X9¸xW`5uG7¶t_/þ¥| Gendstream endobj 78 0 obj << /Filter /FlateDecode /Length 5087 >> stream xœí\K#Éq|lè`ß×/†ŠÞa©ò9v–Ù’%–¶a˜öý˜îÍYVÍ£}ÐowDdfUfUÉÞ™],ÌaøÈÊGdÄ_<Øß-šš-üþ¿Ý]4‹‡‹ï.}ºÿÝºøùŸ˜‚Oj×8¶¸z}áa #jÓ0¾0NÔS‹«ÝEÅ—WßÂBgYs-à¡«»‹WÕ¡íÞ-›ºQ°ÆU;¾üï«ÇlúµÜƇ^.WRʺiDµ^®|묭ÚÍÎO¥œ„·Û{ÿU£eõð>Ycs—¼AøÆ2«­_9?ߊ7¤+¡j«¥õ;øÃ~ÉáóFñêã \GV¯iVi¹sÕþ€ŸqØ–©:Y}ôÃ¥®öqæjÃâNÀª®ÏÈjÿ:¼¦ºMÁ²¦n«>,•F˜j}ج»ôUdÈsÁKWÃÊ^†Õ'7²Y˜ÚÁÍáS3 «/V¬Ö„H™˜KÅÔFsÆÉÀWÕårÅ œ’ñ꺊[àÙTm”åG¶ k.¤1Å-ÀýA‰„pA#ªoK›”µ°¼ù&¯—^þ Ýjý˜(B¢%éqWã«Âkt¾s>+<ë~$áñ/*<Òuêlªh_’UoA®IÕYÃAGIé™ðCÁ`¥¬º7¹õÑÊäSü©³æZsTð»` ²:¬»Í¾(žÓº6vb¬%7t²7¥“”¬îí„íåÃóÓsÉ¢|º0Bfˆ¶‰¶’‰0W8—hûEtFÖ$Þj2 üõÕÅq´Y<´¸)»øèý¯³ZÖÚ, W¬V‹Ýg «¹‹l/¾™Eø‘Þ„‡k‰32YãvGä‹{ülùʆ‹òåN»så« Ÿ´D¾qœ—¯Å3;8u-ÁÑ—ø9ã5ªê¾ç o JýÚŒMszÝZK0i¸+¹"U3&á4aôuµÝ?,WŒ<†ž]×JK–‹:Ÿ—T9Î Çþ‡’°þÀ ã Cؘ¢÷ÒµÖoS}Ýz³pµÃöT Vi [Ӏ㡙ÿ½W°„bx‹ \ˆ+Õ>R½Ü‹bH@`ÐO “éšÑÅe6Wœ­ÿ°ql ºÖÚ°¨ýUØhk„[¨Z0‰ãîŠÛ2êqª-ÌÂtÃǚLj Š—Ý ²\ïF“6ƒ;Kµn¢j-•é\6‰ª×° QÉkÀg0kð›P"€!C ŸCÀ\Ž…]&H f=Å“§ìq©ë·Ä¹iàÒHÿhÏä2鿏œ®ZjÜÐ_0è/ôðæ/ƒAÎü?Å ö ûH0(|òý1¢RíÜs0hÙ2 ¨ÄqÅÁª²M‘Y()ؼ áÒŠ q$ØFíW¿¿¨þyù3àR†y.³ØIÿWXÄ2a wÂUÜØ$̈yKÁ—JM3\œg{œeqàtvÎ<=|$sMÆFg3ÚÖOæ$Ò£ÇÅ]}Ðè…@#S”% mafX³ú¨È4ý¢L­•\¬„†ûeÜ+Ío1?&àTŒ'}ÞãÉÜèë8m‚*-4æMƤ,Ë›øQm˜ÔUûÇdÒíSüÜei—ø±uÕ Í/™®žÂ˜‰“ ‘.~ÁòëäcJÑÜfòR£ËuºVJ»ôÕ bÂô~))¢p¼eápEÂ)ä“0èg‚ÒN-~¾ÞTiFí³RNÁÄý,?κ+ç4à5Äpçæ4bhö=É5¸³VqªË¢å0röÇw…‹•Ëçî æ2hÉT¯€«¬˜—ç8LK"UZJXå˜ÔÔLÍ>$æÉUö<ÑJNÝãÑœŽà`ÓÖ¨ÁË0÷Z$\{âÔ™ù®ágßÂ÷;%ž5¼^1̶D¯9JþuÙíAf®ŽQœóªHE›’Ž+m£“‘º´Û&,W0aÜIéÉ4à€ä>u=FÝDaP‚Sh– „+F”R}i(ÕG+r}ðVW›6|ìF¬ä»†Ö[MÜ¥Û‡×B>?$bÀ²Œˆª÷\fšvǧîÀŸd±Ý7'‘Rev¶ ¡2^Û5ÂõÈš 2tÁlßϸ¥ª¿M z-§~Œ¦3¼Ú‡/üÃ÷iŠ×[ à«¥‘d[ 6!Fge¤½'?îÈkšU"XøýÅÕß¿ªþsi1N΃°áóÉARðRT»}·¡%àX¢‹h—«5j&}Áà¤ÎèU5Wbª¶4¼Z÷ñaU¥Gªš»áôÛ;ß+#éÓké&ÊN[ZNèH:1ÊTÀ©»ÍÚo¡ ¬Õ‚&v¢â8j¿iÛ0% |”M§ÑÕ!›ú!ÛÒ¾‡mÔ  y’(—Õ2e‡›’ ²ö}¢?»1CBQñ®³;ò±âÖ’¢Ž1 œQU¼Ã” roÑ&qÜÀœ­LibÛ­½ ¥°Užh„/Ùf¢=q¦mrñâX0Í.®e&õ)ÆÁûpÅÒ€ºMv1t›ÀO?nýùçÅèŠÚ8³ù¾2’E“!´Òá¶ÇDÒà1t¤É\§Æl½}¢5T²-PÞ0êq8n® x)FSqšh!Š×´9¡díø` ½Å€œ²ë9¹Übh*°‘Ôì7mwØÜ$3¤8J÷ä<\½“šJÚ„mÅ¢Xâ)ò?Þ`=’ØùJMÏsçC[ ×N•ÂúÜÝù¥šIâÎõŸP§EŠ6{_Úç»r@ie¤~3ùíéT»ÉŸ©e?Ó_b\ÌJ!•VR‘InĤ"ðÝ£”¤1żÆ|N1üTœ°87ø7ˆ*­Ó qê ž›RxñÍMªëmÛÍ8”Ægä©¢ñQûX Áj°ò@6?SA"Ù+*–'dñŽb¹ÃÊF;çÊ‘‹φqµÜ¡?À¤&hNõaXŽ P®\i¤ˆ’bU椺Ìåé.o0¢6òÍœæc\t*˜û|¨€pWŸ€ ë’"Ä2¦,ÏJ^&H‘ïÍA\…ð“ÒºðR4ÜÄu?«Òò¹š¦jE’Ì4íëå Ír²ã˜´±³%àçuıP"ksð¢6À×(b¹œP Ù^MÑžYMuQÌ_ŸÝ9ÜY6î®—HláºQ¯F‡lÞÈêoçèø§M …ÛøÔTÇÖ‡uF+`· ú€ŠC°ÈÕ(  <ÚcÅáCŒsO‰Ë`£P»ó™6tðˆ=Œ(Ò w:¬·›¶ïÍ›†‹±!è5A¢R¦ž]L<¦8 tÀ( ?QÌ9×…”cýסÜÈÎ3@šÖœ.ŒæˆfÝí‡Ãv¿KZ¬Zº:$ÂBQÔº§Lò¿Oz%§2 nôçájËzP¤ú1xS¡~ìò±ÕýÅΗYsº|ˆ+<(Úà9U]øRaõœ6z(á|îþme­9ë‹ø—¬ä×q“Ø„‡m0˜ÑÆ‘¿,8v[sCÐnŒ„âí\ÚE2ðìué{+²‰,Æ­fì«FµñÞW8¥M„€[‚ ÇHæOô±Ä÷YÃ8}2ÞÆNºç²s²–œ isù¥¤íɦt-Bö_7”E‚—Ø\/O=aOMü&kû (<î\¥óïŠA @TŸZy5ÏÔF™Øq"ߟɧ’ñ5¦¥RŸ.:“aØ~‡ÌW8JÑÿaNvð]Qv…< m Ù©Fow°s?Í©&=æ8¹aóiE"Å\`#³ÌÿWÁ‰N<$UGvÑÑÂhýÒrÏ”§Éf…lškÆñ=xnO³:_ ãÊó¾Œÿ¦S¥J‡a- ¨uãÏ¥Y~…]/ÏlªšW—~/¢Ú„”·U^¬8¤Ö°î+YMf½RÖ†E§õöqßµ% '‰‰Áê«älŸÆ´†6&0TZa²]áip“XylýȆ„çì„ „ûäó6T pAÃ¥c‹¥Çi åÉAg½¨´Àìï¶ðƒ¸Žmp^1’=“ÖÂi¨ý3ç…z g¬q°Ð˜É§Y,7 ƒZÂF"}³_ £AT(ÚjŸ“¦§«}–énÇ44n{8Ú´àÇHPŠA€û.l©D÷s±az‹ëÃ&8rF*a¨˜|7óò‚†¿2¥@R^€RÈÌβÕÛ°o0ýY:`´-Ï@ÂXb¤Ûâb È4“ŽuRÔB!á’@xoÓ›#B–„@¿É®7ãMÛm2Yo·O¾B*qj˜’ÐpÜ3·ôóµR@ú; H„€·ÆW<ð,Œ='+BÀÝœÔ>éÁݨ¾ °z tN´…ªa-ðm/[ýu:ÿævФÁ»ýÍ’ KkÐqqÂÈ_3Ÿ‰¨“¶D®\o% õ@H†Híæuó«KÊ”è.L»ßÐR†âªv B(Çòg‰ÐÓÖúß Žü© _ÁC×ù¾êŽvyÏY›áÐC؉“¨L~ ÀžÃ¼ndW2jw»Nõn€™Sò—-\TØ›¦²?]ËÏ’)E”° ÚùMŠ©ënM¿Åƒh‡Tæcª2¹s‰J2ü•Tª¡LQš„ œgÔ¢8EÜ«Ö)äV¾öá6è)¢)Ë)rP#$Ó„_§ÈßÒPd”¡Ph\ìuß¾|ùX¤˜ß@%>8$}î3¿€<ópD r6t‘ë0¸ÝnÝ6Ÿâ{1ÕUÔÇo“âZ¦GÓ­‡½ØÀòýëd™+¸1"ËùþóàŒ¸idŸgÒGHUïÑôQŽhÏ$yô¥LÙTG)ýæ¢7ôW¹÷ã?›/¤ E®ØP$¬ïrú*Ù.nUŒÈpk«6TáCºÑúx¿ç¶ùñ²†~Ù‡"Ûf$Vô‰ÚÝúÓf÷~Ú¶,·©¿½ÏÞ¾Ù/öýrlòPØèÆV2Àµ{ »5éX)5Æ€ ÅJvGå`:Mxx34V‘6ª*øÏRKÔþ0†QšXOiès%ªœ…§Uê¸:Þ\Á‰2å£.—Qõn–Õ˜ÆÊ+1iª0IòP°þÿðºÅ9uÐÌF†¨xø—Œ™Kð=¥@†þ)¿ùÝ‚pœu¶#¥lƼVsE)o£ ° OÑÐ8…³nŸvé<ݾËY‘S¿EP·ÇLvë-"±4‘Êã(ÅúnöÕ²oBü @7 L *‚þŒ¡M†¾³éÍ‘Ê{Õ'Ãe5"ÞÙÛ,®œRÂS¥s¡"çü蜬%ï+M»÷).ÇN.¡ˆ¿ÜeÑ­ã4«C¼à¾;ó®Œ@4$‹‰»:øj± ú±æ”³d¨údÌ„NkF¢¢ ¿@í6¾óêþ¼»›]ïÞÁÿžC´°ò <·rÑG½¡šÔœ>7ô°¡ÞKEž#ôtà;Å|!.NÐÿE’¤”+ì(SèáCƧfZø¤& <Ñ8í·”4¢‚š­ÜÒî„.Ña°£ú9¤L4ØíûEn·ëÇÛûbUB{(å/s¢ÑQ¿(6ÄðxcÆ7–G0‡¶‹’“Ù]h6Æ¢·s#f³ö-†èµ©>ñSFÎ諼¥žU.]üq Ø‹ ºÖQ‘-( NŒ×àcioc‡#(Ïæ1)€@™„V ùµè:ߢ;v¬~•³Ó\¢³ß‘}&(œ$ÏÍ,"®Iò4liÍRëRG,úÁÌ»t›QhLÉt±[ׇ•žqßcÓ`Fwî§3Õ~·‡_™ç¦ÄËÞ£;eà{¦™çÀ\rEYwyª-äã@SP©ÑVý )5e wÃ’ÇKí b”g{7Ó/Ñ¡sÔ’6•Å®B7”}Ém,ίKy•cÐYç1vN8B2ÔÒÝÑ‚pwTÁ]¡ÒµíÞ£¢U£´Üø÷iw~d÷Ó’JÖñ8¦ùC­\Ä„—“d¹R©Îlš¹®~ó§Ë¦Ö.¥8ú»X¡PùíË4‘¤†ÿ¸^w`Pík¸ÿë~à‹ø,–oŸîׇKøß§˜é1Wý|"´ª¹L¶ª }½éêÛý§á©t ðÅ»7×Õ7pêë¸â‹ÛûÇ^_^²ëåŸß~¾ˆŠ‚G¹ŒûMÅ44†'«·ïw;SØFx`ìê’›©~<õåògcÙ‡­¢¼Þo×Ãq.‡Åòc CÂ’g.ãyXÅ0_ßüy“Ü€· †eY5°2%ý¥¦'G—ƒÔµÕ/†™ßïn¼Š(Jƒ`^!޼ÿpÿص—Ã&Àphúmü/þè¶Cgendstream endobj 79 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1178 >> stream xœu’mLSwÆÿå–Þ+ƒ¢½TT–[Q§t:u‹‹Ë‚E«ˆ(6Rl…¢Ä°p  –‹¼Š–Q°NÇUØâœ¢â†|@7·…E]T6ã¾ì\ò'q­îÛ²“œO'çyržó“¹‘ÉdÓ7Fo5íO2®Õïß»ô½w·ê Ó“2}“Y@&F&¢ü!@yÏÛòëªgÓFƒïL%¾šb:iÎ2¤ï_Fˆ–l!1d‰%ëI4ÙDxà'r²‡<—EÉþô[ÅÌ`¢˜ûòMØ¥”lʼnwËÎbnÆFJC“×?¥³¨zÉ2ú÷l%ò8ãÉÎhHtW¸·0%5Ë© o.¸lí‚Aè®8\5½=-=p ºŒŽ4Ç>Ø œò•ßB;¡ÛE wK21Í£CÆaH(?Ur¢Y ?¤òĤ#ÆTáËÿA#¬þ:Ö MP[ê´²¹Éã‘:UvTÙüÅHŒ`Ï™»ó{À¿~Ä…2ÎŽÛÿizç9‹€§Y>ä|Ûm_… x6Ð`ò•Ìu“€ˆCnMn¯?Ce(¯•æIrõ·Úö] Iæõ…²ß|']és¿U )zëk/Ü·m¦ø>®ó*6 ÿc°ä“]Ù®3Á«_–AŠÝXïzá’u¼©ap5j¸‘~þHý¾.Cuò ]Ml \åï•;Um8T!”çUk®ªZ4½÷:r¬ÙEŸ ¹5¦zàÖ,Ï ïȨË׸Òz­}G=ÖÁ|ˆæ´‰y‰kŒâÝ\áØÉ2»83gi¨ŒµÀÑÓÕPwZ¨ª<騲{L_Bƒ7¢àÞ{£¾JÖ‘bÎÍÆ"c²U¿ B'>Cù¿ñ7Tª¯ébÙØÃ{Œ‰0äÐ…A" Â[¶ÂDóq–?›v((ùùÐÐýÎn ^vh‚Ãx¦?7¸ UíÈS åýˆ”#…«[òº“ó ¶½z—œÝ½³ÒFƒ´æÜÝ™¥IßmK…<(¨Øy!ã›ÉáâmY[gÅ÷}‚¸ôûÁa\Lçå„-ŠŒŠŒfèáZu ð3¾)ªwçÜCåw#tÖjêNÔVž¬,³•–@!—Ù˜ÓÞÞèlèöEê°)2nõ üõU08< Ñ;…ñÉ uʾsèûún^†Fá™âÁ¥ÜD_Tj-ÒcQwMõI(߃mÓÅȉ0–~çk<&û}xÛý•¯˜Õ±>¾Ä >¾Ÿzù^ñ¦Cù_'F¼»ØÀŽšïRfí®”¸‚åÑGö4X;’›¹²— þ]õêþe]Ï"ó@ì?ÕT²\ Q¯qÚÿŽü½oœ†×q®[”õã<œ‚#Åb¦Z§°™‹âó—X?Ž*:ZïÜîhmr~}¹ÉyµÿŒú-ý‰*ÃW®[¡½’×êò4÷_ÌhÛs\è8×[ÕÜXíüäKäê%ºŒÆæC)XfæHrVYP+i˜x¦¦V!àœ·„ù6Sà”.{eyEeyuuýЩÀ@Bþ LG’endstream endobj 80 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2741 >> stream xœViTW®¦—*ÑPi‰Õjpßp9ÑIFãqEATÌ8j7¢€ (û&6Ø,Ý·eW@l‘¥A(· MÌq‰&3Q39cNBâ$DoÁãœÌkô8“™3ýºþT½ûî}ßýîw¯ŒQ802™lèJß5Q;u‘ÓgLYlå dS_Q¯Ÿœäà¤8ñ†Ó]Ô¼öpèÇÃûoø‚ȨE»¢cbã–é·úo ØùöÔé3†ͬfü/ÆŸ `Ö2ë˜õÌDf!ó>ó3•YÌø0K™åÌJÆ—YÅx2C†— fÆòwù¢óê kÌ»©}u‹ó¯3ôLf³4Ü&k@',A'¹T‹Qjôœö#™NfÏz“¸·GSp:ÎþúGtˆS‘zލ‰+à ûgá/ÍBåÉÓ‡Eøšw•G @ØH–OÖ3{E OÀ˜xLe—q”dn—÷¦c¢º<Óœšžz“A&uàtX3\ m ¿(À¥wÎ^¼Úõ¸ètÑÕ“÷,…P\Xª5ÉVAnœ0QÀ¹¥Õ Àƒì#Sɲá2èƒ,:££†BJÖ‹8Æ&qbT³KÅ4ÜøaÒŒQ£0õâé·!!|«pžå»É‚xöüžkÙš¸SÑŸ‡#ž>À±âäJÆ,Ú°B«­<!`>Ë¿~îDgY«çµK~Ä]ãü«ìªÞÎ&ɞОžŸ‘sãGJïJ¬º#ðØÆ?†ùèöÐLÊUüM2çÕLvQ¿upª©çY¸œåÇÛòq&öè ÉÄÙ’kjlåmõr®“É´áðzQ­^ÖrSnÈ¥ ¨Qùݶ„ÃAMayëŠV¯.†sܵoÀŠò¼ÅÑÁœV`‡Ô ¹Uš‡lä§f!#UÈÎѲr¢Ê¶ç…·“Lâ:‡Å5dij³l™ûádÆÉhÐqó¼!~Ãʲî(!óˆÉœ \<äÄjË&‚¡4ßeG„£§C?„Ãàq_+A;"í„cE Hpù eºvÒîÆwKŽ8LÝ© d—파X ׫lB/‘xa€Ž5ß8~|·ƒÒùiPº{ûî©‹wšÝLÛ.;¾ÚŽ— f­½`X_´j$ËÛˆÏÀÝÀ¾»yÕÜùÙ5Þ¿gùº—¿¦³ã®G>­¾ ÷DÁü¶ÊYš ¢Ô-ÊðMt—Kn®"QHݨÙã8ÐÑ5B,œýÝD¡e›-¡®ÇÐZx™Œ ŽY³uIµõuÖ– ÃáäbÁVX ÀÝhÛöÍV–Ì 3·¹7r 7?ÿ ýÔ ¿a;hÿ%t¨¬P©!8H=evRøŸ‚lgþ‰LÃ(9ü;íìeÒWq1Kæ¢9ô(>XXðf¤'%ÆÈ°äh£åÄS©Óªª-×)“ë¡“îᜥš|·fY U›%è(—BiÌ%zHO1™öf †Ä]K§GFN>}ÉŒnè–ɘ&£Ñ¤ÉÉIK…hN×”\cm9xö>aóÖŸÅTŒXòÆwÓpNo@.ŸÞY1i4óÉ»ïÆsŒÔ.y©«“uÚ ø¤xwaªƒ‚ 7xaí¼ÅEAíašäĤPmÕvk Çÿ Éô]3ÜïÚR\‰oùa×?üë¢K„Õ+`&DÃÈ2kó÷¶Ð¢)0—<·û"”Rµ.|þYGdóÞ"M]YõþrKNmÛi\ü¡Ä£GUX²m¢zøÌøfÜÈá¼>=J×€Eõ§v }‚v»Ü=ƒ‚V]Œ•4ÖØJ—^ KûÛ+«,·(µpëÙ"¯@±Ö¶ã¥ág˳ǿÑ7æÙô(ø\endstream endobj 81 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7125 >> stream xœ¥YTT׺>ÃÀœcWÆ‘AÍ5&–c=ŠÝXP{)Ò{¡ Sþ™¡÷:0ˆ`Á5V5ÆX"– æ&–ÄÄìC6ïÞ· ñÞxsߺÏY˵˜Sö_¿ïûÿQ–”H$²^²t¥¯÷6Ÿ±c>\éâìµ-@øv 36þ®jµ‚îbènY3pèÇÖhO4°×ùÞ”ðo¡Ïlß9~sýçÌ Z¼($tÛâ0§%áÎKwn_æâºÜÍ}åUžŽ^«½×L˜ØçãÉS¦N{oưÞÃG|0pÔ;ÊF;N3~E ¡ì©w©åÔPjõµ’zŸr †Q«(GjµšI­¡ÖR³©QÔ:jõ!µžšK¦6Pó¨¨ùÔj,µZD§>¥&P‹©‰Ôêcj)5‰ZFM¦dT?*”²¡l©þÔj %¡XŠ¡vP]¨®TwÊ›êAùP=)_ªÕ‡²¦¤TÕWÔ•ZDâBYRáÔKQœè¡Å&‹Çâµâ³–v–µVYÝ•L\¥'Ò3•]>éòc׺nÓºåu×=µÇ¨ =ûöLíù÷^î½î÷¾Úg…ukéir_¦o¥ì=Ù6ÙWýbmæÚäÉÝålým[û§õo0| 5pñÀôwdï¾s™Ì6²¼B£(R4(®Z>(g°õàIƒ/Q£ªž­±À¡u¿)TÔº­NÛCdв {µZɲ´)UB$vnûA¾Öy—£Žñ¢6"ZcÅÑëÌ¥F}ºÞ 8„l¬HNàõjƒ Ô¶ÞàÇzÑ5Æ+°Ü¥Ép°Y¢›V=ÿañ‘Ž·â”&kdq¹\¶‘Vð•ý8z €n7ƒh¸œWMdžGá ˜ ·ú.e~¥¥—ñ`¥•}%5~½Ñ›•°œ‚¬ŒÈR0h¡*ÐZZñËÕS/d8®dqäw gŸv$g£&ªã¬‘¢y2û¹ô`«-–Áƒ)×±8óIÁå‹ð5óà£;¸ÛfáU"¹aPº)ÚJh7­ò6Ћ(‘!Û‡-SàÞè®lñúIXÌâ÷NReHidQo‰ôÆ“êW+Jp³lîš)CYÜG²Q›R¥@¥h9-µ|Ö0z¡¢'¯Qšù1&Qy3ÚÝ,æ=‘‡ õö÷À}Fbîƒe¿|€º ?=ERvrª ÜÀ1xKðæ->ë`+l)ò;pÎA ÔÁÉ’e‡‹öÁØ\ºµt+¬†ø{u2̵~ȉN½àýv‹[?D‘²tH‰R‚*FÇÆáwMÁ"`–áµ{Ð1t­Ùs‰ZÆà÷ †HÐd“ Æ"Š¡ó E©VCt»ÎεfíÑÀÛã‰x<ÞŠÑÇx,Z†&=E Ä(:rŒWsh”‰·å"ÍÖ//£Üfio>yÉtä3l9cÛ–àP¶‰–>ÁC…¬^MQmQ´¹¿Î—¥Yý‘ÕétÑàø 0¨Û/O‘L1¹î1o’³Ka½Yz(dP -í{¬âHű×ÎÇV‚%ø;’ñV'Bìý#ÏQÔsqëÔ"C+ñ4Ï|{†-$h:bÑp´\1¬`q˜½ÛúP¿•+ÞæýŽLò{éöd?—œ‡ËÁÇæî_ž6f!ïuö•ë#Í¢=Í(÷²˜/Á«e®ð§ƒi—1QåN¦‘2CFâ~¸Ï“÷s¥~…I¼+/t[žá¾ÁQ‘ž~™½¬Ѩەæ¯o7LX-øW!t:ËÝçÐ$âäÀ´ÞŒ>0ÍâÖA(C À£ƒfãY¤m;‹°ð!ý$Ãóc…åH&*½F²cQ|gíÊ$èC([•‹ŒYâ‹‚­ÚξŽOÑëø|-éù‘š{ÝÇ/›^Þ·‘â)¾¬Ò«bël·…[#Yd!ô¬âm=+1îƒFا±åBh;mF¦¥ÃŸ5´|“bÕèB£ÁŸñ-ÚeÊ7gV²ÄQýYÁÑF"­;°Å¹åVK€½k¶‘Öò¿ñdíÆú³±©ÞX}êÔÃ#¨Ñ0œ-]9 ²ªHwŸþ1ýU &Åx|ÀNDÉ鈎Pt— ‘`vÈÅ,I«HçO)M†~puÕaät8è°t2jC}epÂ{wt¦GåöÔm© ³à S]ZY$õ2°úØ `² ©@ñS{%h!:ŠÕ¨cbÕ—r'ØERÓÓe¡ƒ{®oY°¢Ò¿\õU$#½fR߉˜Ó­»óŒIn§ï…±š,]b 0Q®Àrz'Äg$éõ¬Á†ü‚ÛêŠHwЇ¾øŠÔ…(þ;JiFÓBQ‡–„Zÿr™«? Öïèê-;°Š¶óvq]òXÄ¡w9ü®$º)ÞƒF¨™`ZÊÝÃÜëûèš«åW/²|qžC{:êìx‹¸uk?.þDH _B×2n°%œÄ]c.ä3 ÜŒW Ýž…£¨¿¾ç”T¿&ܱ®C5IYç(Ç9o¿§t”&%w˜Cû9¯†×äòi;¹Ì‹K9¢@ˆ–îÇÃþ¨Èùô„ fOR7g¥ÝÑ=ZZßqõ&hÆ)ðHzŒA£N(?_ÁŽ¥ITw |…&[Äè~?Οž®éôÞ˜q‹-<›NüÚÓÛ=+¥o;=Ó(§³þ‚Õ·ˆÍup«Ój‚é!üGœ¨€óIüP‚AZ]L0ʽèZ]F„A¬V­V¾‡SåØUª² À¶´òYŽÆ"8ë½ ¶^ôHTey¡¡É“# Y@îLKLG6è¦<­8o“¾“È‘".‡å·Ú‰[Ú &‡ÃháÐ)|@Ú„¨18M>Uª3uH²-«ƒBræ»oðé8²rµéQIª ï”°‰8A> &d‚_ÝKìM Œ> ™šLOd“'EãÛ ÉIÙ?¡ùϸ6Q)|e›FÁÞ.è[yþQ.«šØKxÒ´“C¹›¬+o çË×HGñ¡-²SôŠ•ÒC}0‰Eih€:·Úíuër73eþÆEÞ…;KËó K3ª6éeÕG2*9rzû8…+½V3O³Ä{ÖŽ€5°…‘*§> ¸Ðth_c+íœX¶­q@ѹìoxÚ1™T?jÎŽÍëª~ÖÐŒ¦$4w9ûF!´‘s„Dï8}/G ‘]jê‰cßêm9Ú_ã ~„»WÂRô>]rÄBDLL\§QϳµÞ:ð†Õ†(=1[:¨H›ÑŸ• Z:C>ã§Øt’åd[ÈÉI+Ô3Ò,’iJõ~BY\½®Ñþ–É7ÚƒvãÊ +–kC€¼©ÔÀéK᜜?+ØŸ•ÓLUç¾úf˜ƒœh(}FnÝ©ÏRKà Ôø—¸”:W‚Ó³ÕŠ„24”×ÉC¨†Ôã%þV;Û*ß‹$Êm.)?‰tL‡RØMïìØ*N"®qN¶ÃŒÎ K¯ý«ôÈ—tjˆm¦ü»`â·pÖw‰Dý32pºÜD1Çè´ Ñïc‹‘I®M$WZ ÿ‚ ‡‰CÙîhd›H°|À˜ñ9l´:< ˜ ÜÐ²ŠœÂöµ@ß[Š.pÖÕ/à¾ñrxa#ý­Õ’WÉžÿ¿Ãâ—žAþ ØÇ¢4ꎨoŸ+†öÛ¤‹Æ³RÌ¢âß"AãaðzaºÄNÅh噃ŹÅŠ£‹­Ñøëäe×m¤´’ç‡Ëò¢+·‡nQ9mc¥XYµm›1xÀèùó?Ùbr1‡(¢v…{€;xe¹p¡ö;=·‚33çÙ*ÔuýåØÍêÈckËÙÕå+` ­¯÷L á ’¨’â¼Â:ßzM0ß_¾|£6¢6 XQ³§&)Ÿ`¬ Œ:¥:A ÑÌάèÜô‚”bÏÅ” ütž»⢃|™Ï‹Ëô•9f…ô¢23µ¸|߀0,H,ÚºÉç®ñþüc'í­=`d?—ÜG–0Qñz±`ÛÙG¯äßµ¿Ø-L‚-önŒý$y5‡vPFÞ¿Ý.üûݽT°‰¤ú„ ïH5<´ú}'K† 2rÇÆëXÕ\÷ðXqÇ"¿º-¿¸¾jUÁ“’›çà&ó#–ÜÅÃXüÅÕ õyU5Æ«í˜tµ}ˆyUɈ¦s‰î©Þ±× ¼`!| Îõ.Œô˜[ýgªÝnæÝ)Wà`~¼l~àT<œ%‘)bÈ4Ó PÌCd©Æï -!;ÛÑ^ HôÒúÞoS ™à-R'Õ)x1-= 1º”¦"(dzí¿…±ªµ{t¶Rù*þ'YYP©÷ŽPß¿bÿÝ{ ËÍlGn‚94C3¹sšZ.:uñ‹‹hÉE1¯FËdð|ÑI…¸/'_š³ý$ ®œBÅëtÑñ¬ûJï §úq†Ä“Æž|böM?E†úXô•eñ»ãË]‹üÓ=Àƒ™»nÎ$Ÿ™IGV³+Nj.êjtéq y5Hml¤Rô†ŒÀ˜Xu‚ÛqÑ­… v—ÛO‘E'T2ÎýŽlŒóãc¿-"¡ù¹®“ñJBr#M(›AôæØ‰‹‚ ËŸÍI,̆2¦4¼Ð×7<ÔÍ)ßÓ×Ï_|ÄJû¶±|[ˆˆ*'ñ_‚Vs¢3JmA©dˆ·ã×Ê„ÑIÂp0¡”l41§ }ùP éÚ"5(!ˆ!•²"‡°Î^’zãÏpˆ|^@=©gzd︓$;;?1ÃPF„y<Ç#O|-$ôºæeÓõ¦:â]3ŸJï ÁàrKѹÎL´Qâճ驎5Š‘裉_¢m—"‘X KWB„FFm;÷”óA´´úí}%2"‹×}õ‚¾øÙÁ n¶Sƶ ¿ ¨ÐUá×Ìñç¹ÆŽ©sJË î55uÕàn¯© ?§ñ‘ÓFmÄ]Íh%Ë÷ùºº#“·"úá÷H’Ç ! ö1è]ÛIÖ)ó<“°Ô"!,‹œ¿ Û·ú&&xЫ iý˜Lu­Ä­>íæzi‰¤ÆA¼×ùŧQiUxq[ˆ;ðUvû\WqÌD½¹iæ›±T¸ý’ Þ\Ю¶ßå)aIš,ÈCRR6 äïɳkË*¾æ:±ã¿lVÛðHëÉ¿À.‘ì26¿±hýöÿ¸h=òv0ü?¦¥ø,¥ áŸr\ gÿ{ tíïªöHyk½tÞ@rK\ÿBWèA`•&ŽDjd›“Oà£t‰Úd2î>¥í‘Z Dª§p»tòi(‚L7Ó<9V´ÙቼRg$bÃøÖ›O\‡Ä„LW´±­UnŒ5ÆdA6R³Ð>Iަ¶%w|iÛñ-#Œø»ù§÷§×EÌkÚ÷çøàP:qUØàN‘qÃø t!$GÄj„])>Û¶ÃÊ LhÝŽ Úó8ë8ÑÞžRâ=—“aiø.Vä½ÁåÈâéÍh Ù4Ï{ê[b2†Z}Òòñ3$k±‘öíÍ;¢M2ÔmÊsLmØáîÆ¢5´”)RVÅW@½®<ÊJÖ$Å+¤]( h—  ]º°å ›R6ÅÕÂ^Jºwx ÄE(ð:â²S ÆäD6#·öä·pÌ›RÃs] Û‰ârûÀmÛ]ý7‘:YybççŒtÖ,ѨËP•g.)ÙiöˆtߤÉ'^‰,óóHÊöä½ø{/Eh‰ Í2‰‘_v6ðàV÷p?ÿ<¿šÂìôdðƒž˜†Hµgüœ%KÑÑDj˜ø$uRFó7¨+‹V÷ûok$?¤¸ùÑ>³uÃCd÷Ð÷¡´ß„¶’yqÜX¼Àuí†P¶„&<Ú»æXIƒj‡‰Ýå ›½Jv™rw§ÕÝrx2î‹‘í 3÷{…ô3$þáoH®KfÈ °n§›·ý&ùKÀû¬*'¼n“òfå󇹇`)Çæ»ÂZXÏ´›ÒÚË,j8ZtiŽŠ‰ÓeP£<èÒV‘¾xßWµGŽCóxÜé1æÚ7lnØÈfDטw®ð™èÙÁ?/üYýÐü;ý,ƒ•Û7Ø»ãÞ·å›v«÷@sîRÃÕk×Ìa‹Úd2»Yk¦Lœs¾ùLåÅ{,ê5£<¬Ñ–Ù¶ÛQóønñ3>>>%%%,¾iù§ï:ijBã_?l$ê±Bûµã«:J2êMÑgRSÍXl÷G}u1l¨:˜6 ML֧Ο3ÿbFSÏ£•dî?~¢uQ«,#6M“¯b×-Xè7æÁRóªãay!9žÀÌœ; wÁ=¾šzýÚéd™ !Ç—\&ÔÀ7pŒKNÔëämŽÿ36–HÿÊôØôtCbF*ËÉi#$Û6·‘ÄÐËÌý——±mîDÊcjÍœ5¡‹²ÐT4íRVщcvCXÞ¾mØXÒ¯\ìØ`!Û}hô>Ñ©ÖÅ­.蹬0 "Ù¶%‘aZ9 þo’œ(TàÕ–äÚ.¶ío’]ײü’láZGôù Bô…Fÿï»\ ö%r }Õ«xYéÎ2·ÐÈ•ŠÕiµ:áÚìÄÊ”¯.œWd kF#“’˜ œ<wµ/Ù¼¿:¿¬T€‹ÿ汎­9ù}W¨èÙ1º‹ãeDóvæá>ÈÚ­ô! Ù{ÑlÔ õÉê|Ú¨Š»K—³k±E4R‘{|†­Îâ^÷?M&9ј¢ø§·£òúd”ÁM%ê± YÙ£^/Å£R«UЄ+ž?Ç&T5Ó•LH½±uTGÀT‰êäô‡_"éçì1d‘‰Äp—éÈçÒÔ´5…Šx«}BFÅ•¨J’ ¡¡FþªÂUtä«,"ò—$ ¡ ›EU¨’îÌêëßi‘´¥Fø‰½×D}Ö¾˜è@b[ÇFè„ÛjuZˆVÈJ"m{vßùÝ51A…¬“Vå ŒGiTAqqîîÏW5ØÆÝÖb‹%ÿ½4}ú§ŸNŸ~éÓ[·.]ºÕ!(®" -F]:o¡ÑI` l>Sw–Ü|·èNÙ™+$ŒwÆŸúàý™ö3=La\¡©âèF‚ŸÜ‘¦¬`ê? ­]á¿Eá½a‡&@§ ÔÆCœ.^1Œ2òØ’;µ Fàó}¶l•÷¹»¢:3Á^¦Æ¯Ð'Ð3r˘ï!êùèÑÏBI/èÔý(É$BFÒ¥Ð$neZ{ÉjÜ÷8,ßâ¢N`}j’ü€…™5˜ú¥ìúö^4GÚœ¡[7|ûÞ GWÈ"4¡Ât¨Ò”Å’91¢LãÈŠ~r§áÒ‘ò0`{›ø9yÈ'#Ù$áº^îÆvµ\åÛ½‹IoØ"Å`0žëÞ¢þendstream endobj 82 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 940 >> stream xœ=‘mL[e†ßB{ÎYž–gΙKƘÌmjŒ‰nc°%†á™–hULÇ7[ …Á eO)£"ƒAÇ Åv‡r&Ù !,A‘àtñ‡n&›!jfÌsð]‚í}~>?îûÎu)ˆ2‚(ŠØÌ#ÇÊJ Kw?›’VvÒ~mûÚâZ– b"!FyíŸç5?Æ/ÄÎÄ‘ð±*«ª ‹Œ„l!9$—ä‘4r¤.”F”¤š|§°*æ"r"#_ÁqõzäÛå$L’äÅÚb‚ô K;×T Wê¡Ë ¥é| u>þ}£ý¬£ip§ F¹>Y¸æH”XØ=b{÷4nP¡‡™£Iª&èú &aîßÁÑ;x^G­ 28¦R¯+~è÷ý)f4#TŸAµžO–³d¥îVž÷õ ãñÌjU,¿L_jRØy7˜D:ÈÀ¢Æ„„ŠŸÃƒì·¡ú°Ö–ù,^¯Ï3!„â¿î#vŸ9 oòi‚KX¿¤ç­ò^ܬƒI‹¿øªÉkîx¹ç÷«] qó``%Xš{Qpžu6{€†‹Câ]v:kZZÁj*zŠ;ŒÀ•ÐT zã`ù`­8Q´ß© ØWlp”Û¿ N=]±> stream xœ­WyxS÷•}F <…WÊò^ )2!M2t:!ŒKØâ˜ÍØPï˲e!lI¶¬ÍZ,ëJ²öÍ–,aI¶%ÛxÇÆØ&8Æf™²Ð)iI“~mš6Ó¤íOþóÑ'Û|I¦MKÛ‘þÓ÷ž~÷wι瞛„-\€%%%=¸{ÏÞ²Ò\Þ¦§6î(Ï-áä'~|X@åÎ|:s`,eÀÒ…§y s"ü`ùäXâÃæ•ñ'Ê+„¢Ü]â¼Êüª‚Â"·¤ôÑ–н‚¥aû°ýØì –ŽÂ^Ä6`Ø6,ûOì0–‚ýÛíÄvc{°—1¶ {ˆ.[ˆ$±’®/È\p±o!caõ¢í‹Þe^½¯¿´xÃâ_ßß²„µäõ¥Yßxî§–µ-ï\þ j_vgÁÓ›1E0¾1˜O÷M1âï¡5,‡ Ô2¨«®%T|þú4À…z¯'äۚɦs}h!Làïîf>8U,#Ôg9m9p Då’Rq¾ìe\é³Û`š ß5ÿÙ(àaà)$:q­„|:W§ÑkAÇVت›\V¿•èEϘƒ–€9Èv‚¡±ÕÓºá¥Ë_“—Æ—³Æv:‹t,£BB(Îø‹ÿAºÚ¬­6#qy ¦AÄzØfh&i‘BÇ-.³‹Ã¾¨§'AŽûç49¯½ƒžœ¡ zr­xmbÁÿî˳—YŽÙ`oL¿éR8 n­ŠJ\a©jn »†òzvP‹ó¾›þÃ+Ò qZ9¨„8—¿å±Š4ó¨„5Ãiºp¿Ì-,/«ÊzyâØè‰n´l(qöîYE³£(]D8É@ñyIËA_©"*ç¿°p>„¬Ð`m!ßF#‹n145 !·0»ÐºzÁÌT™•¥n„ê{‹žeV)@,·CùsÕ«¯­•€”Ñž?ö?£sª\°*zW•ÿ:ågÄ'îž­×Whé>ñnàÇ!â™;ûMÔg´Ì`b;U^Q©š§ª#^¤µ•PW#c‹Ëx¥Ù€gÕœnŸjÿ(4MÚføñ‘âhΓEÔ:ÍsFO=a‹F>žÜéÔ?¡äK Èã)Ç·B:þÌïÕsmmÍ„ïÀ€Æ]y£¾n×$ß²xÎ|±OMyÆÑâqe|)«Så• ÊËeVµEM47qéÞ+;BÕS÷PŒ´OÄ>ˆ¼I˜,Þ{,¥äYQ*ÁŸºÌ»€~0„þ7œÊ}ü.P›¦Ü㷦ж3{¾ætÈ箮ʫHçæýð I_¿ÝÐìÚ1Cé¹ W×ih``ïcIŠ&]œéfÌdøY´ºkˆc¹U¥V¢OW¡ÝhãIÿôkÿeaÛ 4âÖZ³Z(ÐA9Q…&ºn Ä »ÞLzô.-H¡²ªZ"£~O ­ºÞ´Ål¶KÀØÁçTÕ…y:( ó!ÏT0÷¢ÜþhªtPW+%©‡o÷ª8Õv`K]äSwŸ zÈ^èÓÑökuÏ­QØì[Ìì#;ÑcˆD÷}NÅ,ÕPG[·P/£›¸Ra­³žê1AÑ1]+àv[½7á|Ó ×iø)š&»‰Fhï«þ‚ ‰–à?£ pß5Öì°uèQÏXäü`›  Ò|%Ò ßu²Ñ4oq¦XITLfÚ€?~€ZY>«04˜ÉÈûc=½€·úËóOÈ3kŽ’åOIv ·¤[' ÊÓf³‡À‹‡…™@ ,.è/nïnk$šöžU„ÿl=ÔDÞíBt´? Ý÷âÓ#'{~är„\q µÓŽï`Û5&•N©×ëˆu*¹^¡1[áϰQ­Ôé¤@¬»MêuÊ<(d?׿ý-´-FOÐÓïËDP¸~ÚÞÙŠ˜¤µŒÞ¦ÖÞîŽnÀ¿:D>2aTn½(lÅoÇ6³•ÉŸÄ¿§cý&N,ÆÿkYgÔ¼üÔW€ýÏzÕP´Ùí& ©ç·fg~XÚmƒÑj £fWð€ÄYI$›åš}é}œóŸÿâ³ß†æDÝ7ç²@î-F¼ès–YåTÕêõJ±uãÓµU€ Nœ‹ü>õÞh—Aä :/']Œ¯eÄSÚ’ƒN®×Éj‰ÊŒÃœÄ*²—ºåõ"Ђ ´z«-jiAßAkV]˜þ ØqZZr Q¼W¦•@%(â°¼¡ê$m[s6Šj¬u6—Áè2“¶`k¨ šÀ§ *Û«à…ꪅDBm¦ž[µoÿá­ôÌTÚÁâ¤1ª'<È`7Á¦ð D^1=É?yýK3ù%šFûTìë}Êki&Ñšøô=j.’UGù‘\`ß›ƒ½$d©J^Þò—Ì'õ¾2‡ÄÁ1èôµuš¹…øA´…f—yi»ÿ2»;oôt;­²‡Ù¯›†ý7bp¬øÐÑž]«©5k©”MÃÏ~<Çg²±¾M=Å„9€6frÞ{’Ïù3¤nÍfâØ½gâ—ŠŠJKˆ·Ðà=‚G­»ý¾N¯ UØ«ýw£ÓD  ­óØ~Ê`ôÅšb—®ýÍ@üô|ôøÃV oŽŸ9¿2ù¿ÑͯVÎã—®\%5DÂîvwyý‡£ÕHû4û|aèèFµ^ûE›ÚÛÿœmSmù O-&K7]'-¬U€ˆ]М7ö«vôD=‘ü­H¼ˆ¨–r¹%ÜŠak,s´MÿÌ=‡ã™Ëè®Es²Câítºá×l:im1˜Is à†é”ÈnûIO ‰Ž]è¡sžMd®Z[ªYo¶øºÃ•Ysró9ÄÞIQÕïâVÍaŽÿ˜·Y[ìFbewi/ ! j¨ÕIiM©éîÚvFÐu:ØîwÁnϘèyÝ1Ñ@ϰú“~E‡Ëöù;i5 ÕjAUŠ8· ØÿP'QÞ¦E¯A5ûà©£ÃÝM‘›hìô\ž=—±ir>gÌÌ®j3÷¸ªÝLk:’’‘]J¨®¦û³ 2‹9?þ]Û΂Ñh˜¸ øªæ«yu5äNÊý÷¼ôõÒ^°k21üï¼5›ë7Þh ®ÜŒ/˜¬¹¹2ùÛX<þ×3Z¿B§ìzzdÑOIˆj¦ôz¸¦hUòu…ž }¨ Qàäšø@mñã\êE|çaÿ"3…ºSB=ª*‘¥¶* òÆ6³§šð`¥C"ˆŠŽ Š;>DkÐêq½µU$6„EÉßÇ[‚ô¡Ÿ]PÔKÌÛàwP‹1]—¼ïyû|£cž~Úý!$Æ“W)Ž«eâ‡*|ʆ¦F·ÃL˜tNb(u<é}daÐ}}˜e´X‚P'–‚JgŠèŒT+«Óhʼn]Ì>ígúÔ.|YE0¾Í‰N‚ÌàýãKˆûî/[º8h2Ô'¾=õ–¥K1ìO] UÍendstream endobj 84 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2314 >> stream xœ•ypõÇW>ÄÆ8!ªH!ì¦dBš  å % !;×P’&Šo|Û’-Û²uK«}«ÕJZ]–e{mÅg|c 8!HÊp”I'…¶LO~2ëþÔÀô:ÓÙÙvßï÷~¿ïç½ïSi„B¡¸ññíÛµºâ­:mYIÞº;ÖæéË´5©_7µÈ¥_.œÛ“ Ùé1²,ëÁÐâë?»î½ÅDšB‘™u¨@§-Ò–—k ‚X´±V·E¿ÍP¼ó™]f/$ˆÄ.b7±šØC¬!ž"¶wÛˆ» ZáR0Äu85‘AŒ+Ö+zÓBéflÎ$2'•UÊ/®9J¦/ t¢#‹¾NûÂLÀ:+¡ñÅ\.*SÁÛ9§n ýµýoá3òâÖ3r6%_V,Po¡:ÁÝFÇÝ" -àbÆ$/R[òݶûl¼§Ñœ­GY(ët!úXuçÝkäE”|«òUĉÃ~4H¥¼Ôùäz§ü+Õªõ·ÉY”¼LÙ nppŽá Àù(tSrTñ/€æ0Þ$d†–¿ÇÈ*>ÓfþNhn¦å ™Q˧”¿D&q„¾ý/ý/Þ V Ñþ +äîM Œ·ú÷#Òo¢žLtJù¨Üg)5°ÛAcü_ë0ã´ûõ)×b¾Ä™ÐéôäDJf+0ÖÕÌPÍ; ›µWe–ÂÇÃt/"øÖà˜·U#tǰ¼qŒÚY͖ب òIÖ•wßFÐìµL¾ÒûÞást¸_ˆB;9U:úÔšBy¥Õrž˜@%>RŒ±¥µæ ‡‘.\U·~N®9WsòìÈ”ÔF… WOÂ0tuÅÛF"¯OÎŒgNÙ03X©C\‹h–oA¨YÞ•ªdˆ·†hºIýé¹qo?à‚ÄI/ã·ék¨¥Š Ÿ/Òn‚z»ÀøYZr‹Nh††rÃ9¿TžV¿.~ƒ9!B‡hó8¾eeoÁõƒ¿Eâ,¦cnæïèM3Ž ÿšû#ÿbå÷I|+=Ö¡ÕˆD¤,…«Rí¨)?ÈZÍæ«À&žåa‚’à$#)D®»Ï…E.#í判軂޸’ž´ÍêvÙÝÔ3Ë7×–™ß48$ù¤ÐsôºÙw¸ëÊyÐÐ -•Îú¨%›B†i0>qâÉhINñ‰ª9»;XäŠ\YU“Bà=¢‡úûÙÄíÃÖœ²Æ-…òrºi{±ö8@u‘„ uâîÑŒå5Õ¥û_¬îìÈyO… GòOù—¤J¤¾aÕÕJC…Ï*Ðǧ[Ϥ''¿-6`ŒNʸ§ô‘]X:{°+!v‹›œB×Â)òõ¼g7<þtÙþBê]ôV&@¨E·Ñ殦l¬™Åí‹i´÷Ø-S/¯œ¿àú§¯itN1 Gªýé·>¬„Ð¥ñøG8/¼2Ô#ÅÚ'œ •í.µ;h›Î‰+‚Ü7\|ìÓÑ«vV°ŽÐÌÝÑ«@›Ï#ãùôä‹È¤‚s%Cƨ®Ëè]ßµ%®®Kú`šüàý>ûpö œQêj` 9¾ÍKD•™¼Ûou²l³‰z:·úØÞÄc ‘—ÈÙò5òŸNïÉHQ9j}Ù÷jÖÝ»võ69]B‹»…nl9œ—Ã%MíœÓéÆuF¹\;e0¤CpùŽ‹†©f&sÞl>…}~´8åÞ±7Y+?IòúþeEËTñZzòs™ªöæ¶Z]¹®¼>ÚÔÕÓs¸‡Òʯ«°YF'g´ÃO­Ìý¦UEŽkP‰Ùçg_2wiuŒÙÕH¯_`xèéÜ q€Ä~ëaè cæöªšŠº¢¼ ýñó¿›þ<‘ÒoËAܯIyT1wO²RÕƒ6âë×`—n¤æO(keí†'äGÔ¬ÛÙ„ïéœþ 'Ä|X¶ÛÇÑ* Ç•½à²9‹séü€µ1/M‘÷X|=½è¡?â>dû ßÝ š`ÊmP]Óžjº‚·ñŸ·i’½j¯×æEÏl·äŸ¦\]ù®jšu¹M)Uy»òZ=©a°`–ø0‰ÒçC¼ Â6Á,Ì¿„¢ê¿ ÍV«Ù*8¢v:)ÉÜ<~›íNX5fÑâ=àPI„5XŒ»; ùá:´MB_I‘.$tÝ,yµå•—d$;Е ñtÀ„e´~ÀÔÖÜÚ úð˜èï?š"—|ÉG<áðR0÷5HUƒÚø>³áùæy™üãyYmóº|” ÀËs^<Ôm9Ïç½ 30Û~bìøÈèKÑir« 2í×ïË/.xfŸá›½üVÌÃ#ô4r¢ÞE*”š!èmŽU‹F¾ Ðänt6Z  Ê*lv«Ýê¬è„Z(-Ø«X781·Ú£0œHxű[üMä’»‚u^]ÍR¨t–Û+Èí¨Xet™fÐCp^^<‚Í(awˆÁÆž–yœ÷Ô%ý¶}•Às(y¯*h``g¨½kò~˜w+;À¾“ÿ‡ÚÙ¼R¾þgòš2‹AÚ+Œ£k‚ áøQHÞtÿg£½žÖo,—I¨&Í‚= Hc!ªë7Áï€'â‰x#ƒŸŸA«'Þó‡ÃxÉEz)¹)Š rI)e¾–ÊÊØU™½@â<<®”X”kå²³ âºQ!Ìendstream endobj 85 0 obj << /Filter /FlateDecode /Length 185 >> stream xœ]M …÷œ‚”RÓjÒ°©›.4F½…¡aQ ”.¼½üXc\¼I>fÞð¦ÆóhtÀÕÍ[ñ€€•6ÒÃj7/O0kƒjŠ¥áC¹Š…;T îž/8€*|å T÷S›_êâVÂê¸ÏÍ ¨'„õJ1FþµÅ0©ŸÉ$JkÊ"RVDd±iYišcÄ–³,B:‘—ïkÒ?)ðž‹Í{0!_•S§´ÚÀ÷pg]rá(ôž\æendstream endobj 86 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 406 >> stream xœ%ÁJãP…ÿkjÕ:c!`6é £"®f-ºQÐE㢢UÁª©2Ñ$5Äú{£×6édÓ"ˆº1ø 30 Wn}€Û4âLŠ8›ïp‡@ª!£³ssŵ…ý¯[¥òøØ§ù•ÕÝRq»ÇdŒÝh&²úQPLýê æ^Fž?<}ìÁìæÊjqg}k³\*–× 5Ù߀8p7° ýI=¤à ÜÃ_’æ?³ñÒ^wJ#<ßq„(ÍJ—öÝ´í#[y]|ûè´†Ž|̱&S:‹]`Í3ŠçröŸ0ô¢Ì„õ5ü¸ÀÕQž˜ïSŠuÙ·FÕq,K‰ÕDË\5ü­¢lš–Q=wVžPˆ ¦yb£-žåÕ)õ}…«=Ūg²†r³Þðóï{ü $Ñ w¥vuåõ1­WPÓZä;é …í$G¤ßïïu¿'džCOÄRwz À–¦aEWÞ¦t¬´ÛØ ”¬é…Qîöá*fÂa%#,}‡®\Öp©wÆ\z-Šÿ´ø¯‚endstream endobj 87 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 732 >> stream xœ‘]HSq†Ï™ýµ5s:rR[ÝuQ7‘¥šZ¸ù±M7µ9§“9÷¡Ným;ûÒí géL¦éά )£iBV˜‘åEAD ] õŸ¤f¼wïÅÃÃû’D2‡ I2ûZa¡D#¿¢‘(5§òN4+k÷z!°²þNI p“€›Ìì\åÍüœñé Á!É”tiF"“¨T‚ ’:¸â&i%ûÿC‰d"FnpnàÞ_Ž'•°0ñ†œÃ<¼‰yIñoø¸€Öƒ¹» VQSÞE•P.øàž?æŠ#øpàUd:B'ŒÃ]½Ì¤S€µ´ÎD¢áÅXY¤¨¸¾Zg©çKF‹±üËlFCW¼>7ø)qøÇÆÔc@sA]cGW©Y&V°GôE2•„} ö3œ… 4Öj×7Ý*‹ÉWW¢O‚~Ñ„äeÇ Ì_Ç3â=÷‚½ ÅE þÈ„ÜÊðãöí­CYÉñŸ¸Là Qã ÅyãÃÖ©¯ÅcqÏO‡|OQÖ*` й0kšÖŽ7DÊéR`3Mcy ¬ÍÛMÉ4ºz=€FSÝà¤ì®7Ø®\R­Ã¼§W-1sËô b9nñ¶¾ªV.o¬2T:_ÛðÛi-~!ŒÑæüá4„M~µËh7€´}šÞ6‹Â$S7·x•”*àú ±zÐ VèGõKÖÅHÄéŸÙû±¢¬|w§Cב ¹Yêð-A»©­¯î€ì^*…0a¤?Ћ“í#Øbmü9æñÝx€î³)î ”å_bO›ßUârödâ—cgØ£R= Þaøœâ±·_†^À2¬f+'k> stream xœ’{L[uÇoy4WlØ4ÖÐÅܺÇ?ËXÔ_ÿùJTltÌ=X8`qÐåöMËmïãÜÛÒw{[îÊxTX+eƒ¸‰JFdÆ—íú‡_ú+\ŒÞyÎçœ|ó9ç|UXU¦R©žnljê°œÏÒÑ×söÕƒ†®sƒ}¦GKnßzm³¡4• ©šÛ²>ùóww|³{ÕfË¡Þ0¬;†Õc‡°FL­èaU§ª¬ØW1[éE…ÚU¿żùÅ ´ï‡ù¼ =³VY~=§…õýRw¤-Ö|,{çù+ÃF‘°ÐV˜p[Ò=.Î&–n7L6É»:êOxá\©Ÿ¸dË2_x?¥nyá8ÉÞ~²Û|Šs€Þ ™®. ‘kÄg"LJžÖ#·»¢7KhÇ¡PxæŠòÎzH…¢½Ú„Oðs´“"†ÚN¾Ý ¸Õ“.HÁD0¥¿®Wÿ©–’ ¥Ý`×?¯žC{B"„t9GÜÞC |0LôɵÕÔ¤HW ²úuõa™ò›|çÁ¥;|³çË¿×Ðî$Q»õÊÿT›“’6í?ÑÉ»#Ž¢ü"ú©ÎŸȦã݃U„ýXÈ-_.å–BQ>ÍÃñ‡)ÀáCgÕv0§ SPj” HàÝ"§r<ಳÜUÇ04`¶ëå›uÐÝØœ»º‹ÊÀ¥¤™åH}£úƒŠHÀ©p'![ø4Ç1n½¼k»èëbGÞé’zSÒ„ÀKz¤Ug¸+>*˜è»B ØõV áÈd0“Xt·^E/£—^‡42Ha/°@뺹aïÿÀ®L|^àcĪz&¸rQI¯|¦XÂäö|ù×<Òn¨œ¿!˽Êò ›UZÉ)™?6öI‘œ˜™ÊOò·Ú`Rˆ‚ˆ¯œ¹Ò²»I~Öí‹ÐÑ#ÄÌ÷ËËŸžKºz]Œ’úƒÛ5ÎæS Í s€3Äò³bhbø„-e½0`êí*™n­¡Šy¤™QüQ±ÿuÅèúº˜G]Kªò˜âøHò°~M¸Oß= ¸Ñ?>â“£—ô|(”ü²oìD¤4^,&S+_-•n@ ’LÔ{Œ‚6|0럞¿V4Ïl9~Æ` Z ¦aõWyo/ÓÊÈ(óÐ} k!ŽÒƒ¬—›Î•†ä ðû`6BÞ³}‡v¥XÏžvIÅèåtˆø Vüß‘`ÐA¬—q³.àGÛW¦f¥1QÊ| a¼Öš+¿O$Ð@N¯¹÷8QSÕÚ¯ylJx!É_ §Ãþô°ïendstream endobj 89 0 obj << /Filter /FlateDecode /Length 183 >> stream xœ]O»à Ûù þ€Ð¢*CÄ’.ZUm€À]Ä@$ú÷å‘tè`$cûÎÇúá:8»Röˆ^¿`¥h‰°ø-j #LÖ~¢ÆêugåÕ³ „õ7ÞŸ4+¿«Ø“7õ‹×ö– 4Då& ]ÓÈQpæO50âî<'g¶0ÊD¹,À/‰Š¤ˆªšL“"ªÚ–áǘ¼'7> R½Ån-g•Ú¹­uð»<øS4|j·^^endstream endobj 90 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 776 >> stream xœU]hSgÇß·IÞ5ÆuRIå˜(JEeC/,ÛD¨ŒÍß’^($$µÅô#éiÖ6mר¦IÎsNN±­J ˆ(J½p0[½´—~ Ì‹Á``§Ï{òžZÏj‘íîùxŸÿïÿþ)qÖJéÆÃGŽ„”–oz”h{WkGûžÝŸŒžëŽ…ÿn7ln]çuÇçmóÁ§øu-6®ÃÏ?!ŒR¯çÞ¦Ã]Ýmm!žV¢=ÊÇ&ÒÚÕ õv†ÑöDë¹Eé\®cÑf%¬|,W¦Ë/ !„?µ§i÷B³4GóT¥@5â¶Ý'‰¤A:[ã­‰ãMï’3`wýsÕMwi5µ8\—`‰¦ïŽ6¶§F¿íÛA²ö3|Í”ÊzŒz0T-SOùIßÌöÌ‹cÒ Û‹ƒ®ÅyÖ©ª±§–*Ð:4œVó­*ÃU¿9ϼK®™8‘«¹W²óŸ_¨Ê»G6/²uËAánKŽîˆ‹  |Íx‘ÿUºhÇê`l¤b5›µ>þ3Ãðç@9ÿûð«¾g§gRÏÞúÊF‹µxË%‹0S@Us5=0ÄZlñYÖÛôø`Bv^c^sI6w%ewí”ÇÐáàÏesKݬ8 ŠÕØÂALŠ}ËêyMÕR õC {¹7€ VßSëomñKi Óþ96EÐ.IËâÄñž-n¾´auö/ ;¶?xx;ÿM5G¥ñ tûƒ,i[S‡¤ˆ,D*ª7‹:Ä îá‰^cÔÈ몦N‚4Y‚Jà¿ÖWÔ¯×UF •ÊC>ïÏæÄzÑРΟ¸ò…¸ßl‘\,)" Ò6B*ÂHslºãÝ<ñ‚?Ã7| TàÎWbÙ0ëV/e Rug``›*.Ä…øÞõ¢*:ÄÑ µÓabR]÷\ x}xå%Þ¿ÃIáÆFÓ’7]áÛÆx RÐØÝÕOÖøW;ƒžUÓ“zI+jF¡4~Çã!ä=Ž’šendstream endobj 91 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 936 >> stream xœ…R]L›e~û÷­bW ¥ý23Eð'AÎ)$&Ë&ç³ü˜®tA6D`¥üS,ë´=¥PJáZ¶Á°]+ Ã}±‹q ¸ÉbÆêftÉŒ1^,»1§øšÌ¯zkâIÎÅÉyržçœçˆˆTLD"Qî;ßmm®mÙßÐÜøÊË/–Õ}ÐhêhHw¸>Zµug+_ (¤—þ¬Qýœ½‘y3‹¤ƒ9ÙfnoÞMÈa¢#¤’",Ù&Œ$R©E_Š Å›’cW>ú­â1/‘ñM˪5dŠYœ5ÌѰY©khVÏásÅw©Œp´¿¶eì²–- %v»! 30áæB.}¨KÎz^ÿË/+aTùPåã…‚­Žâ›Ìqë"p˜¸í‡9,”ÓœÜvúÔ¡*=S¤?º‚!môââÜçp¢:i¦\ùH[#ÀãzøÖ„ê7$Q$€J [žªMIÕÁkŽ@ Ô˜ßKîa¦•±qZ,ˆºcà¨çÞ£7z»Yß"| ..ÀËö0Q,•±ªÍÉOPöË€ŽÞÁgÝÇ]ˆ@â¬9Íë1g§bb"ÔoHR,>©®š.Z§NÆOŒ ƒÕÁÀÁ¯o{Ãp¸;=ïÐ Ì‚wtäüÔ]­/<<ÞvèèwôMØ/µõæÙõçLAë|Ó%ûŠmɾj8h+?b1‚|tòÎ[îÓàë3xœCí=T¤uu»m!a™a˜™ôLû} ­ŸÁ4`&$oOn¦¥–ç2æw¡ƒG]— ŸGÆÁŸæ5ìïø*ÕÁ¯dÆVi«ì8Ñœ&Ö}á+ÓâvF8Ýΰ{b¨0–"ežrײ‘›Œ‘Î÷Pò}ç:pßÁò·Á5J²·2íÆ4¿”~’‡È`Ñ¿©aÚÚÈ ¤½^ÁéÉÍoQ pû¡²þxõÐýb_“°üáºú2Á£3eìº÷?=Âl×?3°!„’{|¸ <Øÿj ×¾Ædù0ëÿ12eʘ×1?Á«’XP†(Á6žêÅ6µq˜-zKŸÓþÈ©‚Á'P2^]9æ®'#üøÕŠß¸C•»Jû‹älyù©+–Ùì 1¸|n<éÿ´s®Ñ‹.Žž{0ø¬£î”®¹d÷.ª£z­Õêq»ºå쨫G–’2ʉTù8Ï'>Ÿ~|g†´¢UñXÜ7âñŽù½S?*„ü ,ÐСendstream endobj 92 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2224 >> stream xœVyPiï[Ez3¤7[ë5–gy­®G©8‹8ŠèˆÈ! ¢á&"H$iò’Î…A W œ‚: ^£®3Œ;ëèJY::SÖÖ®ké¸_3Ÿ{t”g§Öýc»ú®zïë÷«ßï÷Þ÷„¿!B#6mÍHKL’'¦çΛûÞÖ”} yb¶/$Óã=ß)F¢E „ÿŽ_ŒÛ‚‚ïO "|OpúÚÌìœ\Eâ¦ä”}©åiËb3Fl!¢ˆmD4±XCÌ!Öë‰pâ}"‚ØDD2"„/KøFA° Ëo¡ßcááYÿQ¨C2…ôŒ•=‡Zÿå7‹%Àˉ¼jwš8Ä¿¡”‹kyÇâÝÙ`n¦[PÔñVov­ªJ¯Ùk :!ySõ·RjOUë䟃­´8†ŽÇ®’85„­“#1‹„ŒÅj°÷ÐÍ(BD5=¯¾{é†ì:˜¢‹·&ãBéël\Êg‹x7— ïÈ{^=ŽlC…ÓQ£­ˆÿ…AËhâ©8`)@$ਸ਼s¨ÿ@±m× àsõxYh`ŽWY;©iLU&›h=èA£ŠX-•w$ž›x3àð‚TœŠ“ ÏC‘€ D¿t"’|MÞîE³Ýí-¬y0´yè·÷ÐG÷B© î’K\ˆZþûà ØŸ«p J©)xšZD…éä7Áª-‰§)fÅËý¥?0áÏ"Ñ(¶šŠò _›ÊMGZ£¿4á¯.$!—¼“‡',^¼’`MÞI ŒlM'Ê‘žè¿ÐÔ_À™‡±ˆ(Ð{P«õ >zJ½Ë­â‚%––¬¦^œØpE‚ùI©p<ù?ÔQåq%<,j Û ½ÐÅЯ蘚½Àaíh@s¤•O.?úl`“1(Tº,}FµÒ ÕÐXamñ!0dj·ÉÉMv Ðî¾»}B.ýLR~>»YS‘Ù’bßcv¼ìèÇÖöÖ“ùfž^N;Ž-NvRÕS¶ÊèGe TéõêbsÀ³”€!&\¥Ý_‘Q«ðd5j‡ Ýú?Q­-ù01i‹!ó²þ¾á˜Á¬"0”2ù ,•2†RXÀh¬ušxÜ.ggbÁh \þ´â>Ì¥ u=Zž‡J¼("/ýfÈQ?P¤>”Z^  IùeQ¶˜ê/Þ¦Z½7e/ÐáPù©ªy¥hª˜çOóùåÒ]ïN×3 é}ñnÜtOüFÕôMè¾é¸1êµ[ííó¢Ó^ù©*üU'­ƒR[ùYú B"ªÏx#K:^¯\øÁ†5@/s¯}€¤ÈKèþ÷IwÀÀ(çÓÙxfÑ å\4èKpÖÓõ{å ´Ìv«};2AjÏzyS»O¯^ tÿÃìgÐt| Ìä»äEÝh¯OÁÏï¡õ÷>ãû?YÍÕ½‘ò)÷\DUªùÞÿAË}XžÛ‘Ò̓Ç;yÆ!,9„©áéH 7 ¿­¹E½QJ­"ÜH"aò eE$ÕMìJ‰Q$Èâà`CÁ‰¼“¶Ë¶“ÖΊ«=ÞÓ­ º•µqö(cò}6>›å³qš ­q 8Ù Û€ÆóS²Ä¤ƒb`´LÉö°y °¿ùH§¢Ï1hí Q‹Ø ,°®ª')ÁÁ€IÀ‚°C88ÿüÑL¾GP Ü@BÖIÆ#Z‚5¼Ñg<¬oƒg Â²Òd’wÞS‹¶~ÜS[Y‹ VUò»S·ân}87°ãÝÊ€PÊß;ËM—°UÚ–dȃ8mÌ’K´îÝÃ*ds`Ùú¢•$5E]_™â:¤TæÐî×Ém)ž¼ˆ‚¤mï²5kU_oC24ÿ±;Öv]¬‡¤r¥ž][ R– Pj”›x--F³¹¶¦¦-ã$ã„ÇpwèØmkgq§¢öT[§¥€`¬TéKÕe*¦À¡ª„£à²±µ$ÞŽ ‰>S{0/[£ÊÌH’ ¡òoæZ’20–Fk‹³þh…ÇÓ _AÁ¯ô¹dßËñ’âèå;gÀ4ØÜ_~ž÷ÿ*Û™žÎXþ+슘qþP¸È'äêëÙ,?…/BN Ö êÿJÕ#à}³‹­‹¾Æ EÔ'x o›OÀ®-‰¡ã°ûͽ)dÛ¡­¬Í@S!g¸§sc~C¤Bv†>[—éÌj†6¨÷˜ë}V8Z eùlЦ ¢¶ÁPj˜³óÅö‚ÒÏÓ3уIo5²4˜‡¯VØoöŸ6¹Œ¯4)‚ Ø‘¦B#ßANƒ]]V¤Ï;¢*.Å‹p ô.—Ë_Ø?6÷¢—UoPú±Hðæv¯zöÅÅ+“[£˜|š9œ¯?üª'lx Meô÷´ðCÀ3ˆÇ؉|GO?ãþ)≷•ò÷­ÂÕÑ?YQªF÷”‘ oßSCôæœãWkqÿïÎÒþ¿v–ŸdW?çS~ë~óІ(ãEÈŸ_ìxJ !;(±4åÕ¥C:däèÒué59MÀóVgi"£ñÑ I¹þK> stream xœUS[PSW½!!¹ˆ&éEz/mµ@}éG;>ªâ±ŠRAJd"*Ñ@b@žá‚;M‘G'!H‚((⣚Ž#SiÁieôÖi+Ž:Zô„{íL»ÏßY3kïµöÚ‚çAp8ñ¶¨ÊÃò#Ÿ¬Øy E“.WÍ}ú6ÎTÏ”x‚ˆ "ÞÙÏí’)ñØ|×b®„Êý)ékÖ‡„® #ˆhâ3"’ˆ"šð"¼ 1!!¤„ˆe'x„‚ø‹3éâQæq‹Ä-çyðvðÆÓ畇tQÜî~ÇÁ9=‰ú'¹n=J£x "ðB¼p &°‹_„ ·õüÓaµÈ*c•òŒä½9I° ä­šNU¯~.B7|ß~®µ³Ïr.Á9•-Õ.7ì‚d’í²} QìÈqº8Ч⼤sÉÇã~Ò-îa_§`siõã~*žÇ!Ež Á­š²§R»-q@²3p?Àžÿd)’¸†Nf›@ºùó *ò³I©=Y)S'.–Ar‹º+£G7àzm¯­³¥«ß1 ƒ0¨>G¾–‹åm(r¤oäH’µh“œv©\Ñ÷',.?é Âmr/¥š ;’r¿¬ËhÕÉýM‰@‡G¬KlMµf3Ué!PÃ>Kzs.)ý)#®`ß~™ÿ¦g1h!#á‰+‡úMtt{„ÃO7ªìpZNÔV×ö©zt-@>½Ó{FÝÊ4˜œÖ!C…^§ƒ<2§¾ðdCS­Æ;)8¨ËÌÏÖ(•å)5XWÂÃæ®ªV³…i²9Lv ÿ„eyÎò©]ŸÊ‚iiø‚ õW¬®{ÌC¾ùÁÆç'h N÷Ë9Ó‘7kx²°†oÕB?ãžHGÿcøl½`¯¶Ò Añ;h \=ùšoÌB»@\:Ú\”äRÍÊ4M†2Í®qt4Û´qÖ“rVŒÅ*4™G[3;›N«ªiø<다øòÒÊã #KjË«êoßEBÚçwõAÍ@«8®™8îL5rS65äÓ/½øùj8zÔffFÌ7[ÀÆàTž-{óó³Y¬eóâ›[XŒòäGÎÉú;?›ól„‹žã ¾>n(¬Ço#* mô! ^$D‹‡ê ¨"«*ª‹óâ÷””ÒØ*q$`à£p$ XFÖ˜Àô^¤g‰o #Syˆ…¼þ½Ë®§X_¦«€J“–AxѼðJÀßb!Ø#+,<>§Zg,«k¼8\[C#è@‘€Do™å˜ñvpz'‘=À4FÁ‹¢ÅͤßV7Ç–€lE2%¼2â`‹ñýÁ5o»Ì†ú¾ùâã®1ã$Œa& ¢a•6&ë݈¤ADcÖtÑ5xÀžâ(üøÍUëÓ;u§ Fs-¡¦XØ›ß4gÓqÆy“Õ¦àºc|©‚åzSã¾$°W2è}É»ÕËTìl®ÛÉÙ:ÁA½v9ªà÷ïC?û~…^ý¿d÷ГéGNÉå騩¤iä;å'µ»3Ñf*¯Ï.×+/]yìEGðÑbäÓhîs66,ºqÍu~'‘0è,¦¥ÑX´64,¡§¬ÁÚnîf¤ŠKñ ¥ÛÆ85Ħ~píÇï…¯ÇÞxƒ%Ø×SZ­-‚J•¿›áûdYÝ›ÌHYWcå;½ÒÞ¼X¥ÈËa˜«ª*ÃW5×D"‚ø`·Š endstream endobj 94 0 obj << /Filter /FlateDecode /Length 161 >> stream xœ]O1ƒ0 Üó ÿ Ô ±Ð…¡UÕöÁqPœ(„¡¿/ СÃY:ß|–ýpØ%èñE ¬ciñkD‚‘&Ç¢ªÁ8L+g„ìo:¼?`3Ýù]Ï$Ÿ•º”Uµ‡ÐZ‚FŠš'­R]km'ˆÍŸtF{8›Í™Q«¦.þSÉÑ\â¼ ¸ÆHœJÓÒ$pL¿g‚9Ä(¦S!endstream endobj 95 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 184 >> stream xœcd`ab`dd÷ñõM,É®ÌMÊÏ)6Ó JM/ÍI,IItw¿þã0k7s7˺ïòB7¯ò_ɱeæ¦200000¶3012²X~_Ã÷Ÿ1w/PS—èÚœEyYÕ%e-r¿ÿ¸·ÕuwtwKÖ®n˜2e”I}rßÃ~MšÕ7±{º$_ãÔÍ~ -ß´m?×~n9.æp}ÎÕzzfôôL˜0¡2jÏAbendstream endobj 96 0 obj << /Filter /FlateDecode /Length 161 >> stream xœ]O»à Üù ÿyL•¢,é’¡UÕöˆ1C "dèß7Ò¡ÃY:ß|–ÃxÙFàðEŒehu[@‚‰fË¢n@[Œ…剋òB7åßO°Èü®’ÏK›7õ‘A§iõ )(žItUÕwÆô‚XÿI%0™âlwgBSµMöŸJЦçIÀ-☋æ"©€eúýâO)Ø!¾ðâR÷endstream endobj 97 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 184 >> stream xœcd`ab`dd÷ñõM,É®ÌMÊÏ)¶Ð JM/ÍI,IItw_öã0k7s7˺ïòB7¯ò_ɱeæ¦200000¶3012²X~_Ã÷ŸQÁ¨©WteþâÜ䯬ú¹ßÂܺ:Ûkº»%ëV5MšØß?m‚ÜwïV½&Lëž&É×8uó„ŸBË7-dÛɵ“[Ž‹9\Ÿ‡sy_ï„É=û{&ôLãáa`ð"?üendstream endobj 98 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5493 >> stream xœ…X\×ÖŸ˜Ѩ0)æÍ&¾D[Œ-ƨ¬5 (±¨ô&K[X–²,õÒY¥ìÒ—&ÁH¬Ø‚eQ“¬5c£¦h’Ï|g’Ë{¿ïî‚B^’÷mýÍÌ{Î=çþçGDYŽ D"‘ͪի#Â#Þ˜9ÝÝ/ &ÔWj:ùB&Ž´¿¹Y¡Ñh´å/LȶdãÆÆQ¦×¢ðˆ%»–I£¢c\cã|eÛWÅïX°ÓÏm@ {‡gÈúÐ0¯9sç½9ÿ­¯,\4yñ«¯9M™6}ƶ™o$ΚDQïQk©—©uÔ$ʃò¤ÖS¨)”õ>åBm¤–PÓ©MÔRjµ™ZF-§VPoP+)Wj6åFÍ¡æR«¨yÔjj 5Ÿâ¨ñ”eO9PŽÔЦþAñCI¨‘”5õ5ŠzŽC¥œ)Ê–ÚJ±Ô󔵘¬š²¤’¨ã¢™¢F¼1Bk1ÝYüÛr¥åV®V—è0ú²øeñyæEææÈÅ#[O°VZßus´Çè?ç3fä˜cžŒõ[9nɸ_l|m®Ùn°ý€Æ6±ß<¯xþ 7’[ÆåqWÆ¿0^k7Ã.À.×nÝûÙöö-¯8t´…ö1B-2@¯ÁÓ`ûƒ#U•Ágg¢ì$i°~«î}Ä`ŽxáˆÝð»@þa<0·ûî™<ÆR¼n€ÏâuÀ/’ˆÙ ‰&ßÇÎúñ¥ÍÞñ¡A<û¨9[ã÷‡Põëÿ6TÛé.ßýÊ6Ä€è‡ï€•,?u™Û²EwðWĬí™Ó'Î]=í2‡HUŒ|̹²34n!Örº¸>±Õ¢Ø8~9ÖA ؉·#yÇT«å ^“oç±øÐldo e(f) ÄFkúî ¾$‰ÂBQ…¤¥_öÔÛ ‰ ¡ÙíÅê6É0°Àt#XÑ7vìLA.ŒâtÉÍÿÝøUžü1{Ý<#A'JÉŒõ¨Rò%î]0tºÂ´þH”(Á`C³/?<ó=<ÇçFUÅ5 ¦VWÙ4„˨6X>`áÿÁ\MHáŠ2ûð‚eèC¦±­õ»¯4a‘ù|nB^Bë`bæ¼Fe*TÙ¼O’‘Œ¾ýVÀëOî+$Ýi7“ÐÆß?xæÒR>£:³41¦èI¦ˆåHÚ¢®Ìí,ã»NdëIZfµ}udÐÏ "ÓÊg¸­[®ÕçÄ&ð9«ÝS£³o€æ‹+Èú¢H~ñü[ô³Ü¼5g HXïâ,zêgW®~¹¿7ÏîiŠ­-4ÂŒåÆå0ÃŽMÔ­\K$RðÞp‹6õåD³Ýo,HYˆÚÛx¨ÿy„šžjŒºÒÕµ[ßɳ[BrkPõ„+tejH¦  ’‘Õ¸“š'éà1%(€–ž½C°ª_©aÇ{ÍãL3UÅ ÖQ=l¼-„,áeδxJºžÆ"| ‹àš•ž ÏHZ5‘ÄøAYÕ -ªC¥í †‡ö-æá&3™ŸÃ1ƒ¨6?„ÍB¡ð ×…ây,¦ã£ˆ™:¤•tÓñ1«:³1éPrWü¹¬Ò@”J“¥ÚùÌ8&‡ö‚cVÝtu=ñ!É$Oo¯!FÎ⾂èüÄ}ÈaÊWWîæjòk™\ºÐ«,H+K¨Fe¨åWÔž…>û–šPš³wÉ`{ÔrR”2¡’dNŠ}S óÓx_Zÿ5~yÛ+È%¬F^_¡Wwæò¨$7W—§É-GjÄ|~ZÓô4̓‰ªEMçIïüdÕHŒ™ü7_‰¤î}4XãWñ8<×jÍ6<;#‹B%·alk3˜TrÍde°~®ÀÊ "ìUD0÷¬ np‡b éøÿÂ’äH3¨EFH7Ù0q#©¿¸XÂé‚¢G<´ìyCèëìWø £é§”‡e†5`ëc6la#^y –ÃF;Öñïp¾%ù§Ç«Brè ­²F¥*û†¿}+ ño©( !„¤o&IVî˜Ã Bu¹„ujˆ¯–òìþ] ñ‘¾{vt?>ö¥x]Øl5TdyÅQ}‚?ˆ8}8J—§fÇ©øô$ÙgÄÌ[rñÛ#zRRj>DJIn VQ˜úšªæ+ÿDÞØé=üÂl<úá+` ’=?V ¢é-TlOõlë¹Ù/?;¶N( hŠE!¼ ·™*€k ïAoG™ eäJìmŸ  O'Õ–zx6”e¥ÖK‘1æHIØfRnm|¿BbB [h k`5ì§“GæŠK·žÇžI%Ñå~…ª¢´2U*Gš’M~Ñ7PTv‚Éí¤MS˜ƒÉ¦Þzs!ˆºÐE`ÑÅj‘~¸V  »F—›ªöÄ ÐÁiiÁ’­âg±òÄøîŽËÉB AµHË céÚ"¤CÌÓ¢ÿÌéá¬4ÄÚBÑ_°ö,:¸y{å6Ò“DS§aVÂæãq÷¦üÚóQS³žg× Å>~£ñ x“c;<¼ç/^úÞ¥¾ï/^¸x¾ÛÃs ] ³ŸŸ…ç ¶ì.aç`ºãÓ²d*>æýõÊ䄜ŽÊo3pŒ®Ñ¢N ßýÇ£¦NÆc%l'óÓ$àÀþð½~)Lä°–Ö\9óñEtõJÕ/3Oã6¤”V¸c!¸ '¹³o#ùÛ‹·Îá7Ljd?áÞIÚBýPó˜½0fìǦo|ŠZøLõÎ]]¥~PÒ¬2@–™²I¦¢'îó=,æqôß)à†l„Á*" €¹rïá„ Û–Oå_‚¬_éï÷/ß`®Þø³à|êã³ðÎÙ°³¶Í§eFw#¬4FžÎ4®;mÇŽ£„"Áž«“µ®OÙ”´•g­©Ry vë„éKæm« ®IX•"WÆ„9¢@TLÊsœ³7Z‘â8÷ÉxžÒû Ï:¿ˆ:ã¾ß”Tì[ûb–Ñi( ¥å%¢t”¬a؉))šœZäˆ ò4»ó³÷Fw#æþ•Ë}v–jQ6'èkÊê Ês‹vÕ©v#¦ª®¬Y‚Wb ÎÝÇÇk½ïá<{¡ðÔÇO~´eƜӶɓö¨V·µéø†J5º‚˜>°BsñÿÙS¶õ$ýkUkþ‚tÿEÖÿ¿¢žØ 6}lïÁÕèkÔ‘vø }ÀµmNDRXŸ–íŸ8‡J”u|rst¢”aŸ|Ò©5t9Þ~ç¶æñ²!ŠlèWH‡Ž`Ô¢¤|ƒ¨«ÔÁ°¿×Æ¢_Gä†Â´!UazùÄœ«ÿd¯Ï‚_¸MÞëfòK ø2ÍöÝ?°vó3ЏúØ‚»/ Ã6ɉOåž8 ÙV¸?7 …Gä;Oj9}LmDDLLDDmŒ^_[«¶?±=~ÁÍxØ£ß;6T…:ðQrùö}»ŠU/¨¶÷-óë@‡™cÝG.uÅôÐ">?¦4]÷tŸb? g3ÂÒøíë˼ wX8-œ·òëWQï²b+ôé_ÅÍqôÚ¶vaĦ‚¦¼oSæG9Õ9U9Õ!ƒÒÛ›µmm‘¦MÍï 3ÈÏ“fÊ\¾Û7$?5Þ'o !CHçžî & ð¢Ë/ž‡~…—xHÎ;eÄ‹ÈGûa»‹gD2ŠÉØìÑãa–nƒ¥ñk°Ƃتc˜èœ1¬-ÓxžfOÜqj´ÝýŠMÃö3†œØô%}ó*ŒÂ¯[Ä=Eõ3­J’BèæšRÈJ«„&®&—Æ6ø!ý¢«—×·ãÿËÃÃ1¹µµÅìÙF=¢ñØ;¯?~|ç>ŒåáQ‹ø/„u@Ë Dÿ´0T]㉤æ†ÿGÿ";­=0Êô±c»…rsÛ à!ƒh g…mOÚÁ'F!(Lð_¶dÇ¡ø !ŽÖ $¸W;X¨w¢L&‘À 1ÛÝ×u¸«N“àÆc…Xö´š¯ýaÐbò3ík!Ü`[ s”0§æØ±„ÝÂõô.VÄ´¾¶Få•AdQúù-°)§HY”DžÇ¡T"Ï·à-«‰`@…9ZÕI/áÅášiဠÕ#µ$—¾Ü¯³b¯Ö£² jÒwëò‹OBRÁ>"Ô ¼OâøÜìbi#*&R½v\tö¥MÏÂJ„ĉàjOo…›´žÐíª’ >‚ŽB9IqX†·W&¡lÇ«U­<bjõ0"Z9äÝj n d»´rXJƒ~¶2ƒ Z 0× ºk„‡Ppç~Zü#¶ôQÅlçÁTÃöеt°J"ÁZq<Šn«.(Ü]Â7µuUŸFÌ­ƒ.no/}ï͈wK>Ž–#Ó]›¦Ü9ÿëe` 6îÅíÀˆ^°ì%ÚÍöÄ¥¥_@æ^„ß !°žzváå•°Ý›×ÀKoÝE{PeJay¥£x&ª:®±AWÕÒpr v$ïç°7NK—G<{D?~ £I£ëê¾Ämg·!ŽO­Ï«G¦÷ìÑÏ¿<±ÒÙdw¬pÚ :` }wŒ8~¼ªë ŸŠÇ-zu*Áw@nleAaaªbêãu‘Ò¸„°ê¥D9Øâ³Mü¢ëœçz÷ù 6|zõÎ¥žËûõÑq•<Ë´íTË–:š0KF¹‚¶€Ü,¹Î°Æ?ih¨KdÛÞ†ÖVŸ±üÓ9rçü^˜Ø Y½ðÏ^QÁû¯&̃ŸpŠ»±³gó&¿uN‹>ô8Ò½÷ô5d¸êΏ(•,9ƒÇÿZ–™šT²J¹¶¾¸º´€‡¦ßVìÎ+DÅÇûå®úŸÙ¸Ñ­³sçÚ£G;Ï\åqŸPÂùÈ"’“eú]Õ-ååÕaãíý¦³»ÈÙ¦´MeeÚ]>&ç„Ào9¤M*I)ÆûÀÕÈOiqy Ò:ÔÉÊäʬ¥‚Ç·ðezR’9 2r· nc?{2?‡ì™+µeu¦Ì€×Å[EB‚`ËuøÝMˆYáÛQ™~§ËÚQ‡O³ìFÉ<þN&×:MlûˆÖt’k&_J‹ Ý`Ië»îß¹=8>2j—.º¥¸8ñH™.ËZ²p«$-#5É™ø*…¦þW#جÎp¨<­4µß?{…:+W‰¹,9ZFΪ$°»bòMQ™­M®Tççª5<Ü‚ê"ó’MËp&õ⺞Cª‚ø2<îë­à€À=Þ pü¶²´¸€ì;J2t‘áx¶Çj<êÐù.×<ÈF®±PWbŽÆF xbr Fm½xtçž(ÄHÓãÒKU…Y˜Ex.J“ý±O˜™˜š–™´¢¸†fØF`©Øa3@ ùèù¶–²Œ¾Éé#PjBJMåCüR‚ˆ¡¦ᵟ~þE0uM$+ÏÔ˜·Ýæb+<êâ‚«ÝßÎÈñRü‡íˆ°]c°¼xïëS͈áx»oÛâ{öÆ×‡>þèàu L@ü'ÂæPU²:;WZµ¢=RÔû²âòb¤e Pó[’טû jvP£öà`¬ ÏuÍ‹ä1uN¡ÎF*ä—Ÿ(+M/'‰­ÅÔÚdUR:ŠsÈDáûxw9;2Ç…;(Qp{;jW7ç|’ÝÈ‚üu}›äy¨1ºòê É@šjp’8×sèüMG=郭¾5Ï_ŸRUSW¥/Ë(Wó‡·~L:êõ­³—mZçê)Á‘x2-=)B¡ÞB¸O³ÌÓ@¦®s6‘®Ó÷^_yXwÂúÎ¥-g\[z>ПB'™«.Ÿb1½lóòà…ÎdP“¾;+Ÿom½dzÄ÷ÙÑï°ÄÀ]1’Hiv@¶{f"BáŒI¾ò‡hv÷£c+×­ñX5sÇâÒѤÅ‘_/ÓI£cCfý°Žt »oî?0CÁ îp•‰•ò”ôŒt)W•¦N*K*« B»P„<:!.1<†´ty…¼²´¨°¨˜oÑ7VjÐn²ï*O.OÒÅîAMH_YW¥«h®EÕ̘”RaI),*-(¥ ÖÆQ¼µ¥gÄè‘{+‹rM¯B]AÑèÑõ¹¬…endstream endobj 99 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5500 >> stream xœY XSWÚ¾r{Q+ÂmäÆtÛª­ÖºTëR;H«U‹ŠREÁ ÙA¶°„@Iù ¾/‚Xí†TmÝ¢v4®ÝdÚ*­¶ªÓ™Î¹Î±ÿÿŸ„ˆ@gŠÉƒÏ½çžó-ï÷¾ßwP®£(@0aÅÊ•ñqñkc¶Æ%Ïšù⚰𔘭‰ö;'âô»£îú a¬ ŒuÝûø“_z¢<äéþ—ñ”ýga\ü†]K“’}S¤©[ßLÛ–¾}eÆŽUa;Â#ÖD® Œ^ûòÜy“¾ºøµ©ÏO›¾ùÅ¡/Íœ5{NE½EP ©ÕÔdj-H­£ž§ÖSAÔÛ”5Ú@½Nm¤Þ fPÁÔRê%jµœšEùR~ÔÊŸz™šK­ æQ+©U”ˆš@yQ.”„z‚z’zŠr£FS¯Rc©G©×¨q”;åM§<(OŠ¥£B©EÄcÊ•j n ”£fúÒe“ rU׿¦é{™5ncÜòGǾ0¦d¬ÛØêGg=Z;nѸ÷OÇGz,ñ8èëy‡=ýØŠÇD»&&x‰¼¶zµzýƒ[Ι¹oÄ/ŠÓÄ?M|~bÒĺ‰Ç&þ]2U’-¹ùxäîOÄ¢=ãøz°¢SÖ@«ç¿l(ÐæÅîæËÛDÆöDJ¿ƒ2«î„¾÷*ˆ}áíÈ”4†µuõÛ%>´ A£‰m†r`> ƒð)aèð‹h]Í`lÜ® -²»oW^ÝwHrÌñ9o…áTnÇàc-ŽÇ^t>ÆëÔVô¹UÀŠÕ!×naW°S¥ØCŠÙ/§£Q`ÿ¸üT‡<™åE¢ÌÞÞK` l¼Rq³âûÏ>½áˆæLÆá*/·z"¥-Œ8Àßâ?'ž&ÙM{†Î´›«‰©‡FÀÏa§9´ÍW×5B=Ûm‰9tY#TSGÿ Ÿ²u1øMaâð[h ]Mß$Òl@;zmD'„uÎ[v“p¢½dEçì8oK´íµ©lÿ$Ö§ø:‡Ïî>?ÿ ‚!8}G Ã>Kí6ByØï£Ïê¨Ù÷Zš†UQíF’ {JJw¡m[(;@Œ€„?Ö!–Y6õ¡¦Éú/•,†ÔëÅ-—8ÖCq¢äì‘Ó’Ëð¡OæË!D)Vj‡K™ m°Å[ïñ¦¢Š~}¡>Ä'Õ¦f/ãp-½¥‘­Ú¦•uA'êõ5•79}ž,Œ€|™jƒ½èN*Dù4Û£\¯MËKéqêôµÄc{^I$0÷ÜHtÑm† `Úè÷äÂØ!Þ’‹üSô0›ÌT£WlHþ;•ïáLjôµšwçÃÛà›î·ÂÔɱ¶v#Ù_‚G OÞUšŽÈh9IÛšìXÀ.4A¤úC啟УmRYjKC¥±år‘§eZ]ødä!ªúö¨‹1úY¸8ƒŸ¥èCswûðW0Çêò3tíàôÛÆVšb! Ôr­j[](¤^á Ôá²—~Éè—Ìý"K¹^½sKÔLØëJ³¿`ò«óK` ø²8­,/± ÌPYPÝý^ø‘üV@³áÿtšvŽ„&Ú` ´Ý$,ࣧH_m¨‹€(ÐHµŠ•9Éð˜švË~¤¢ùÃ!Íàù4Ë”÷ ä“$^KÎ&—å „/¦¦Éž¶ÿ:½ keÓN…_ñe¸þ^E¿3KR+ ±zþ )”˜ó#ùíÅ^Wð†6Ñ`åôñraÓð³ñ˜áÉi¢#qˆGÐìTª…I¥Ü‚a'ì“§$ä!‰é«> ‹ì@J~ýÿ©ÝãÔ>$¢: KZê¡ ´#Ï­B3Ð /v_Þ.2¶%€˜úÔ7iñïJ8G ÙfeÎÏŽ–¼ ¦=ÆŽPÃýøÝê-Ø,›öi‰æx¯ä@+ÃúFçÕAµä]i7¦ÝnL•”m|6ô¡ .üþÙû1ÅnÃ]h¥ñ+øJ º"lg·á¡i£ã›¦ÈZ¨q 4@Õä~àÚ†D ï3tÈ*ø+ þ»ðùçˆ÷INöz„N·ïEm€`zé)øPGC³æCÍÜÓºÒÈ!H—§hT+ð“ªTFGç£CÂ^ºšp²Ý¤drwè6uÐÜÏ%CæþýF³µõÉý×õåEõLTÝ sÍÕ`n0U×#õsmÄòà82uÁêÉnáëì²üVPUú½(†+½°ýkü,lç ÛG[#k$îï6uÔ–”‘âú zb²ßÀKµ˜Û ›Æ°ŠeŠÃþ—tÃé¢Ãí ëSuP·OÒêPOÿE¤MΓnM' 3v„@®d%DtšÞ1÷ÞèFÏÔÙ£IG›É÷2šåÅZy­½’!t­IWˆ]Ñ>­@{®ˆm»ìØš3ÀNÅf\Ã}€j„õNÒbØ0eI›ì™g?¯w”@Šó2Ã6ÅhÈÉíA¶sh7[”B×#1"·Ÿ±^îX+vîqåþ÷y׳mÄÐF#ùõÚèÅ^âóíN8xs;=ÍEO¡©ÂýDZ†ªÛn™“¹€;͎؉ò‹Ý†9Éì§oâ©xž+ÜN³»‡ÝBnƒ@–B ü ¹sç°{<¤%âûuîæ4Àɉ—­HH»“°ËïÕ· ù?´çÝ3iSó¤] î}­±i@]‡Š«lQVTÖ’DVá¬â4ë*äj僭ž×ÑH¾óÈ÷­¾U}…}@þ7m ]AÀ©bÊN" •¶S™žc¯ŸM]^ ÃzP둊(û5œÃ=(² ëJ T9ÃzR±$ýÖx¤îÃwõ9:-€`Ç+‰a;ó3uEæÂ2oªÉY(a?xz¤¦ç%¨¶¶lï…Ûpq¦R$ム/°Ôø¡äèD oˆŒ­q &Vää+Rs³vmZóà­óßìA ÷; Sj"ªä„ªŒ»Ë¥g °7,ÀgÎIÅc?yz >úY_åÄß+ª$§ôòÏ…7Û‘'…h 2Âu8jÆ §µô6"°ò„)8„K—Ç)âìë AIݘh¯ªµƒ®ƒ …ÂEƒôö Y4|Å'p´~s,Ì2$…T†ÜR•Ê ¢¸´Ü`B,2Õ!ì´è^ÂÀ>â –àW* q’•&°ª0×ÓèPocm^_%6u¦8xñ&Ê\uTîfN›¦%mTèI7alæP!ÿ÷&¥ê´Ú ±:²ÞN¿¼;Ý`Ò×ê+Éðœÿžmÿ°]'"œ9L¸¾áM®]xvüî°Ê- ÆÒœO'm9a8<^zù…_%G¡§¥c7Ãú„«óåû¨fÑ+"¶k­2`þk’7 øBEåOW?=gàµÊÀA2ürYI¿{Ыÿi¸$5ѯދ'22™×ªöÈõ»@¼|do0 ñÃ.þ:Râ¿äã…ô{Ú¢ˆJ]3ˆÛ LoÚGÜæš†É;œüì$zŒÈÆ.^:ˆátPjsÒbß^«Œoðû(ÿ[¢ëH˜MÝ5ˆþO<†gŠ»3l7—úõd$’ N}G¬Mh’×ÐÍ—Î}rÃñÄÜg‘€9‰þ|2ö¤gÅñ6™m=i ß·ÁñÕ6éqÇuçD†yû:PÀF]P$ÞÝQ*®Ù,y^ñ–ÏSm±D•¦eɲR4±êˆ’Ä¢ì!Šåù ùÜW¡ÇÀþyäTù7¦nåG›ZEÑŽúYÀ,¥s! T…™$ï9åÊr}=h ¨ƒ¡ÜT°Okó ;“{%7à›‹¤ËegÛòvg·6X å»êU%PMÂf8»ˆ”k‚Bƒ`Dö˜0ì_Æ+9ôþaÉÇй‰xzc‘*tÁ–)0–¿Wô¾¾º¢£«¶µÒ —È¡”k?QÈœëLˆ£€ŽAÞå?ŽñíhÕCµÌž¨?2ÈWÞ&S<ˆÿØOŒ‹²>¢m¾6£cïWð]7EÆŽ$’¡Hu¬.W¹3â¡øC{80Urº°XÓ»;­.»ôb÷nkÑòoWöáÑcKGÁêå÷¢(át ÁtK|4/Eµ•Œ'”Â_[Ͱ?*b-M²NÉièúKÑ>f úE”»1põL`^wÂ!±#ÃA#Ư%Ã3ä˜Gx›ð€PÇX=›Q0žO¾O¼Šü'ˆ|Ù£^ìo¾d0…14fÐz4 ="ìÌŒ·¢ÝHîJðŒÓd¿w7ðôèŸNwü‡[Úë0#M¨ià:Ãj© ¹'A3§U£sZeUÔFºüêËBVIÝÄ/ Ù*R‡@{ô¾›Àp1ZdC Rû¿ñ_8¤ÛÞ3‹F2ñüCúÓÞAA ^kWÿë˜s€kvtFyh5¾•ŠÝ/¼tÄ·á—µÈý8ºE{0lÈ5R’ãc‡wV­ kJ$‰†¢‚â„•dÙy mšF›šŸiɨ"ó.rù¸zà;:¸U„˜»oÞçs¿J<Æ£~#VNqÝoÈ‹yâºÀ—ûî^îº0Òèë§þcqàEdÃ5˜ûCò—îN髳«R!r2s³î­þm—#Ó.W›nɨ…z(©(.ãWß]Æ•TÀŽÍ–€\DZçEÈ‹P’ýÏPîxb,öÁ«¾Â^ö¿BJsGÛ?ã[*JÄSçáÑ‹a1„ ÑMhj#šüí­Ë¤q?ò|žâ”ÌqV4ŽÈÁ›¤%òboòk•s&}¯hÐÄi›­Êš·N‘šÏ°6™Nš¯‰ÏK¬ÒT ó]Ó¡}oÜ[ÈÍ¡†a*jïø8R ID†æÁ?ÕtÇ3XIŸ;„¨+í¿xôØ™²¯Qι‚Ç‘ äóÔ;›UPÍU†ÖBK~YnQý‡GÚ?¦l›3ç(–¬öÄF¼ŠSäª5Z¹ó­ º1$ë„Ü Ï VϳýýdšÝD¼âMÈGd¹°óζS{»™?.»¼ò,™ñXXœ½LU/¯uœkl-,Ï+Ñê»Û/Î`ÎÁûá¹!šXiDlÊ΄ÄüðüÕy™ ‰sÂíCš5ß‚ý¾9«sVù®˜I°î]šÞc2›ôµ†ÆÌÚD2g$fj¢3g_[ÜyÁdØ´£C‰®‰ +³+edQirÕ‘ñq29LTf…%§,£.vAŒ,1#93*E›ž/³ÈÈy¥PDöîjm­,‡(R–f—fUJ;¡Ú+›«ê+öÔë«™qŠRþõR´¸ÔPJ[GÛÆ<9Ú50~¬Û¾JSýÇXk0KQÿ$r>™endstream endobj 100 0 obj << /Filter /FlateDecode /Length 2454 >> stream xœÝXKo7¾ë¾·,0#AÝÛ|“B”à ^ »6¬ä  àöLÜëy(Ý#[‚üö­"ÙMr•½-tÐ4õøêÁªúuR•tRá_ø?_ŸU“»³_Ϩ[„óõäï7gû77°RÚÊÒÉÍòÌ_¡¦hYi=Ñ–—••“›õÙ-y[wŸ¦ç°D5¹^5Ó¢*+i¨Q†¬³¯Í”ø°’ìúé/7ÿFT¦Œ˜ªJa 0»Yœ>½ù*=Rp[•ª¢“‚ËÒ(aðè-™o›å´L”È7÷3·4›†EcHßÄ5N%ˆEÉ3nKøÅÉÝŒ|ÿÛóo°¢R—LóIAy)…ežÍÇm·ÞnÂ¥JPŽ+QM F«Š€`VØiA¥F–ðM™¬’Ó¬´”¦ûUÅUÜ??w¬Gн9#EQL¿u+¿oÎoÉ»önÓ.Ë(ù|»húK [y¥Ž”‘÷çççß ˜cHãçû°éAûñëý¸eœ 2Ù*³-?ÞG¡®”ê´@LX0 ÿƒÕŽØÉúÅ"[¦«í—¦‹¢—VF¶÷÷û{΄ËÐÔ„¬²(FC— ´Ü{¨œܤgÑÖwj [x£\o7óm·¨7óæjDûûÑ03ðÁ(õU wET ¸`âÈâMû©Yµ·ÛED¥«wíÖ]$»¦ßy’Ä”†y®Ä;+2D;Œ Ë ç†’Ü_9/t ‘ËÏõj¤/Ñi¡˜Wÿ*:–)…~ 1²xH5^ÒØõ®«7ŸRðL3¦ò…LùÑ4Ã1jG\ž†|!m€¥-ØUJ2yK ÅIîbUi9'ßLqkZ á<˜¬'ÀiþšœÈÒßcûÁm x’Uã¯@B%÷xÌ*ÆPgz­)©óô¹ëÚyà((é>ÝçöóT" ®­aÈœ<Õ©Èâ”\þ8ùÒî>Æ#·<÷2aJ]ñž»~w¿f——îŸOÕ9ÌZchQü–¤òöí&ùºäµä³{"Д™ˆÝÓ¨R߮۠¾韒w¥~¼ð±Ï™*¹Õ>ø¥—ÀiXðJÖΨ¼È€¾H “âÔBx¥’"´î>عîî’kƒ­,ìO‚q7=%嶤Ô(Ë+q AÐ ÆwÛÀ‚¤Ÿm+*™C5O?Úe"üÓ »$éò6s$w0²Aäœ1MSöÑ¢ ²]†ßÜfŒ:OªrI>½›"¾]ãe jr)»AzJR?EJ¸Ïç‡ÔP½ç ˜R ù*ó·&°€Ðî]„¸ÀÕd‹î"‚[Q’HÛyŸ¢JBâ {5Á LŒ1f¥&O÷‰G´yA×±ßU…ÉIÃâÃaTzêÝñ€'è0°|Ðß/6¬–§#ü.@/…’‡fsB)o6 ©PRàŠ8H©ÖnJñ1«ö þÇDšðÖ;¬Ù_ÔlZâs‚ÉZ¸Ä *tþ ?4¬SŒå.º»O>² Èý¢2®”:NIÇ„ÈÅ&D'sÅIÊ«îörž£úc¯vpPÁ‡“_ÇpòˆØqç}QN)…ŽO.î=3.¹œõÎ…pŽ{sà¸<’|LJ„çéœQ<ßC5ˆ‘t:aíc¶¶>|Ø\"`PgdðÕ»c]œF_ RgÛ1àeÅŠ:ˆÏˆ•¯†ƒŒ\ÿp9|`=-• ZÊ`#fÓ!Š©$_R‘!bä2É ÇL Œ™«ê±Ä‹ß—¢»¸°‹nƒCkXE¸W:Ͻ5:‘» ëM«°ÎœÖþ:êÚµþ‚&¶]·õe ÜøÎT2©3k|ãŒÍŒ†T|2K¥)s‰§sÄ2>¦\yÓ;d®BBEµë­ãàõzŽ“îà‘I_–>/Ê¡2§Kñïc­¿lw±Uú®~Ã‹åæŒ¼{è>Ï@‚ùSSwófÓÃï«+:›þî;¼‹á T¾õ®¾úÐͱ;ëÆuáÊ®¤×’GÄèÖëº{š¡<áè~)—«ð¶~l×ëØ’¬Ž´mw0hì%}¿]¯V—¡ã±½ J/A³‡U‰'ÍQH2ðÐ$w®’Ö)ö]”üÏ$†Æ <Ò“A‚auš0„e¯ã^,£õè‹áÒØRCE| íÿ²·Íf×_biL¡»Q\í‘~=Fê`Ów»E} ¡—L’qÏg(½°Sþ<å¼b÷Ãf×tóæ=¡0Ü7Å…*µÕš3 Í”`‘QaK.µ‰ ßÅŸ¬d T•Íó0B›ƒ J+è”äIl(6é|ÝlIl…‡KRñM2^]}Ó?º|ô—¼N[ŽŒ,‘î-Žcý©Ò:ÊYC2‡\´4¼­“ùÍy:øŠNÿgecQ6QBç‹£• ›0p5‚QL©R/·ÍŸG¥‘7dWd£¥ Le¸QÍiÄM—œSˆâö¿H$R°4Ö6#XœW4Á†Š’I!_ÖÿÑ3fiT¢`Q€=’xs7¨2íú²§¯Á4^œ[vñËÑWï¸Ié‡fWc>b¾­S$‘õ*Î.­.^ëUÜ(ÔHVÅYVh\itÓ¸d„€^’}Ålíf¿S•Ø×¼hFæ®(vªà÷›yêjy~4æ&Ú×:xª2_9ë‡ "¯×\q$±aÐ$ Åå ¯æù¸k¯Yö7¡uümö^± :Õá'Õy–÷=®H3ÚÏz‚Ø®¯wüN‚x¼krJݬ Zu}ÄÁû1\qíc½¾ß³^¤w.ê›­/¾­ð–Ì)˜5±nâ*±ôÜ«Ìë¾]=…K=Qµ3é«ß##ÒÄ}Ã:L·Îì^y¾Î¡­ýTÑÝâ4C¸Û3{,ÑÛŒøÞ±´¡AIh³Ã&ÕK ³N £T–¹ÂvæØ`yìl<Åÿªƒa™ZeíPñ6³B›}u¡…°"7p¡Î¨ÚŸ€ !LgEÜwSžÐö|ý¼Èuo£Gr9R4‡uìרžÕ;j÷P„Ÿ(°ow^ßœýÿ #®Žendstream endobj 101 0 obj << /Filter /FlateDecode /Length 14359 >> stream xœµ}]9rå»~Ã>\ôÓ-[ºÎä7• l¬í…gF c12ŒjuµZÞ’Ô–4íÿöÃ8Á$³8ö´c€iÕ¹‘™Lf0 FþÛe»í— ÿãß¼¶]Þ>û·g{C/üÏ›÷—¿~õì/~µGAnu«ûåÕ÷Ïô’ý’ý-o»»äêo[—WïŸ]ÃÝ«• |š.Èáæ’—‹^}÷ì7×OŸ¿üx·Ý¶èó¾Õë{w÷ϯþ.*ãEÞߊwÅ.úË»!„Û¶ùëýÝ /¿ÖR®Ÿß½×[ÅäÏÇýiKáúö·Ã3Þ}7ü!Bø£ì%}r˜žüÂmE^(]^øx+I~l-ø«»ÑÅ›¼ñõÇÇ_^_¿÷å9° M©×¿ÿîþËýKüßíûO÷ï^_øøéýÇ/·×wÏyñæ®x¼ÿöå7¯Þ½àÅ5Ê{|xópˆ|÷îþ퇟ß}¶Û—ëëëO÷Ÿ>¿¾ûæõ]ë¯Ýßb¨îòêú³©uï><|žš'OøOš·OÍ{üòÓKÇg¬oüù·Ÿ~'7}ýµüãõõÓÃ4íù›‡Ÿåß/q¿ÿÐ[ëm¯íÁß~zs//ù‰Ó·zóññå7ß>þöá›S ö¿tÃ{ÆÕ[>¼}øðÝëë7_>þøéÝÛ¾·È×7‚ÿãß·´ñÍóÞ}ïÿîžÀÛÇC¯°ø.*º×*/f¯ÐßÔ·7E«¾}¼óÿäÆÇñòúŸ×w|ç_¼zöK »|yûYeö¯|ñ9¦[Ø/>w“眯7.Ÿ.ÿtùð,ÜRŠþò{ Ò¶Ë¿Êþ›gûîœ(û%8i­ —÷Ï|Þò-¦Ž<>ûõBª#{*·U*Fyn¥ ¥äuo¥ŽR† R.ìáVÆ{ud”*!Þ²¥ ¤¼Ëé–ÊøŽ†ŒR§÷zbúÏÌ`¬—| )À"fpÓ±‹¡ [¼9Áß\7|÷=ß¼¿îíŸòÙêÕ¨?þ(¯ñÓ¡r{XÏKˆ›6ý4ŠÄ(/Yv~À'R[¬7i©!“TIbîÒ(Ed”’Æ|¶CÊIŠ­¤†výi]‰n|þ”Ñ“2¾®|ä]Ô_{ó&}ä¥{å_©ÿ«ð_ûm[t¿±ßœ|ázÙÃzø“ÛdŸ×‰VúR.¾ä›+I›ë}iFûÒmõELôÛ`AÂUmukX¹²ßrr2¤r¹e4íNbCï^810‡¿{÷»;Ø‹÷ëýãñZ¿D›ÿËWkF`»e±oÆ ý ¡i£“¯”’|7'N¾— 2å³íÎC•åowKµ2õʳÙD=ÌC”A $ù[@äÛ¥†d‡ß"Œ„^$vËyB½¹Øºcœ ’n›â7ù¢ˆëÚ`ˆåËŠT™˜ØA ®ÝQÍñ"ñR.aÊ­»]$mÇ52æ´Á^º¤à5w'Cº!¢Ê¯°É/í|iöGýæZçø*/,HÿF¨ýäSEéÀPÚ€²ÃaâùæÁù›—· ò„Üž¼%jˆôÁ$qï!îx›¤“‹^•äDgñMñ§\ì+ ¹Šº ¢mÚÑÌjŠÔrKòŽbo¥µ6ÂÂɵïÐGP𰉱SĵA½|A|º9y!/¹´î”VŠ "þŸ~\è´Æ§Öe@Dç™ÚööÒQüJh2뵎ÒiÒ|Qí—X›bFñUaÓ&“•¼#µg§}oJÓ”§µ/ÉØ¬¸|¸]¯eñòRPº+R›Ò@Q³"¢ª;Ü´H,Ð' ß›6¦”a:#†o“ÅŠC ùÊòRN:)´O55­q2Œ]ëœ,Œ¬vWÞCÓ8¤úe²ƒ5ºDø¹uN7g bÛ‹æàqǸ‹ÁIíYY ÔD.ûÚÚÑ,}Ñœ¥Ã—PÅÊekz³chêåd2*0(R›êÈȦ¥([…ª ²±{ÄÏÆ+Ç]¾ˆ>ªÈ+¼„ÌL¾½V‘;Bw¶j¶£ÈS1»›Êˆ†lÒÍ›è³Î"Z„a¶IÓµ=%·O £Õ[{J€îlr±k}Qdµ‚ûÎdÒoX¾ÙÙ9uo¦G&ÎÀÏWa3p´¼~‡!`góª ¸ŒÆÈ7Ó1SãÖFچѤ22AF<\TPq‡"¢0Pœ %Ó‹¤ahY¾oó3\s¹á­d0îz•(yhg A*¦wûQL½ÃKHC›Ö&1k©;cÂÄ…·‚FµÛ$±—М,#Eµ6‰&Bs2ÆëÒ$o,ÏNbÔ´5I 4'5K @ìüÖ€ ƒˆØy¬Z0­m|êŠÛÎÓ—Ëì.ȦөËb$2ÜÌ%8z;Ï1„.À8K2ºT-²o+#A’z.Ëø‚ê$sË‘éˆxÕÉ,ÿ’Ž$¡@D‰`¤Å-·öÀ€ã-½—ÅÖû†ÈUŠˆ›ÝIÍkpekóX £D,=L4:VHiñ žæ¤ø6xBrU'wYEûf¢¼ãÖà›g*ˆW¿V;ͦ8Nj¢aè6 2ì³"bê¡9 †Oï, #-‰9×ûÔ­}¶¶ÌûÔ­Mn‚x¶§Š­‡ê$‘ÕöTØ#y¯(z¡ïUÅI€ŽÕ ^[ïèïÒÕrÓˆù²u&?ØçX¿·¬¬Ú(‹h¶>X~ƒ}Ž2ï:mœÜÞã®"Û¦m¿I3¡78mÂÒ·aSÑùLVc®éMLíszƒUT[xxH¬ê¯øMÆ?ìs4÷Äobç]C¼Ž*Aê­]ÄUØëÒæv¬™ôÙ¥…/ðÖšÚVe‚ÐFŠœ›âˆ3Žv‘˜tô²„ƒf ²k—ûs:ÞJ>Fkž,IšÞ &ÖºËÃalG«éáS&4ß´5gÏM¡+éż5½«¸ÐñÿÔ€{§««€uW»…8 Í8#šQT&Ú/*S¨McÄ RGÉË|r« D@ÄÆ‹‡$È®ÖЋ9lLfz<HjëAA¢jy‹&Am– Ÿ 5mm¥·߀¤¾Š—¯Ýls@˜¼ÝE:¯) –hÚ>i ´=`VÑöµè5â)ðSz±ñ¡!œ$eîÝ›mÆìÔ¬¾÷ò”«Âªw–gàžÓ‹`ÂÁ,HmZ#íѵ˜÷2ëBkho/…õŸkÀ®†×q`›ƒon*×–i‚D]ÙøK„·òî¦"â`VÇ$õ6ÒPØæà¸øõí…âõkʼ×t&è² ˆ˜v´wç2ЋóØÔ¶(õâ7ËÄ®7ã#}µ7½ pCÚm°þß’84ˆèâM'j3ÌXí6Ûâ±€aF5“ï£ô>ô« 0и,mYã£xØftuÔæ`9³Iü¾Q |Ð$ñ ð¤B‡B>nÄ¿‚ÇÒ@u͉¼o’A¼5ÄqxÈ„Ñôš <‰2@o¼h[›’|ÓË ×,*’Û"(@£²6GÚÅ‘†òÍ1 ‡†$5 I\y¨ž=š¥·ñì¸é"ËÃÀmrwj¿±93Qn¨ ^ |!Œ2ÑCõ‚[¶Ùcª7{ ½‘qBM‚C·7ÄñÅ3ì?žîL°eÛ ÏV‡bÁZ´!V¿ì­‚ìêü‰sÚL\ðˆ‚êUb)q‘Ø5Õ¸Þ°Íb9ÕòEú iŽ(b›ö©ª92ºÔÌ1ñ0Ο^o,ߺiÎæíÎ¥EÙTI‹NŒÁ™¯ìëÖ¼¡[¤jÅT‹Vz*+0g‡¨22p¡:NmI•Á½‰Ói¡FÆó‹“*zãà7êUˆ,K£·-mé"HT+P(rèÿÈèÚšyÇL×’âÚoÍ<; %*ôÆaV-_ÊxI@(¢Ž·E„ޝÈGcòÐiÖZGœÃ7è3޽$‚aÍÕêå‘:£[g!`¨CÞz3ª±zü˜üì« ¨¦æÅ¾¦Lvöua­Úz +@Ĥ±J‚É8„Q‘¢Ë7?êZt•onúˆI^‡¢é,–:_S­#ÞÅšŸNÐ6:”­aAð9T‰m”a™B„#1ˆãh…3ÓÖ–}DGDhü8êá7Z,wtR4ëc°gÑÂÀ·Ò^¦‚åÖY’f K$}O³dž}ü:šcÄ(fÔ…ÑhFéýæµwà Qm‡_D7i²i ágæÑ†cÖбhv>æÊQesv÷F‹×öæô ^¬oeŽQBEÝ4úNøˆµµØü«dÑÒśzeꦥà48Ô=¹$„^#½½7M/¢Gˆe£Nyæ5BÉZ¼£{–I†ƒ^Dç3‰»«c*Ö¬ê?« ÝU×μÜ$«N8ý`D¼Õ™¯œr{µÇßNjOŸ;‰¢«Sf~9âä ÐuÇZ]=óߧ@*6IÚ"!‰bG]zp!‘êÎŽàBÁ5\¶Aü=éê„ë ~Uu[Ó ` wá²q ½† £êè‹§¼ot2l•wú",#:« I.ÔšiR„‹¹‹éë=Äþ‰mI˜±u ë=®«POØV–ØئÕgõjöºÒ±¡ðÖ¶ÐÍØœÃ9Pú‚Á,RØ¢/®Ý¹ðn¦¼…LlqŽ@‰H¸~ÇÖ„±¹¼Ç„ ·e‘7 °y¡ñM $d1¼-ƒ ˆ¶èmÀ‡×(cˆ¶ÆYXÅ0…>2\yEɵm® !”ŒxŸ" ³ žÙüÌŠ9bž®)[Ð@é”Íb½ö)°‡—!,TvšÕ:*{ftÐÂKÛ2¼ÄTÁ"«õ……©ŠK:ôPV*iŒá®â-2d!1„•5êca³âé…õÐZ œ¢{ø [;íÆ¡+¡òëYqoU.‹ô1åYãzŒLãSÀ_¤i¿Å±A¤½caGæ5@g¡É’¹ù××%G» Cœp´ô>…‚$ÆN5RŠ&wM…æÑg‹¸1KªN•-ˆLh|•‘[8~uŠîÖÍ”›àºµ’=FŒ íd‹#cÓDw,Ö\wÆyz<ºî ”ô˜õ±cqíŠ GEú®ÒqI†Ç±Ïø;CèU´ÜMavŒ]}#ñØ@Òx¹Æê+ƒ=šÑ¯#Í"þØ—*ºGÁ] C­»Ü9¨‘ñ­¾»P“íàØDMAá¾IQ“½“ícTÀ¶ÑQaNZûm3»oº•e&µìÖÝRÔÁ`».UT‚{5Ü™ÁÒD§íÞ`/PCî¶ÃSk±ûè.PÜ6Æ7l§H¨ÝÉÍ$*‡7œ"mùcß”$±C¹q%ž˜Å_¹¹%ˆYn€ b/¡{d²ªrÜ¡à6š ¶§È­6Aª†ql;.nÁvC¸e'H¶«t[OTש[a[m#—tº=1÷yÝSl;ˆ ÁÚ&£ f*¸7QÝáf¥ ™1mnhʺÏ:™›ž‚0 Ä6FãÆìÛ;ÀÚÇýÕˆFpU·`‰ºyÄ]Úˆ†«¾q'WƹÙÛöÓußûÁ‚0Øg{Æq—ùÜé.²î+ ’teÝ·žwQª2ÜžFï‡i {ÇŴͽG&ZØFøžRï›å{æìß7Ôw1!A7óuϽùb è®ü^¸'Õ7î¥UúÁûæ>œ¼ ‰LpÌ`†´4çò"6šÀLnê1ôl„–âÔ:Ø2IJÄPªwß3\Lê¦õ숖2&PÈħ¨çX``«Ó0Äu`v‚¥j¸ìÙLç𛥠YʇøŠÌX°´¦s0uD¼o¦ Yz –A¦ ø`Zbi*²Üâ÷¶T„öÚ*Ʋ]`:5ùÀbiTÕ²¤,o´K-±9sšÕ“o°ÆÐ3A'lŽ '–İs¤ÉAÌóÁL“x˜ œnBöd¡à-×ÅŠ¡ÖöYÒÖ~^󇘘„l*B–¼b¹MéMXTjROO’ÌÜ%K“ÊôÃTª#ÍËÒ­ • §cUëQKÙÂF†&dAI0mkºŒå|!ì¤Y@–÷ÈÆYîXt=í‹ùe-8¤céÌübž¶€¼æ»1— a½ªç». œ8$µöô¼¹P©û–Z-Ì’ï·¦w±ü<éñ4çða ¬Yž_òjÑ\ÀDwðÈÄÞú¢ç"¦é‹–w˜igÔÄlÐÓ³¿žâ˜¹v<Ò ³®ª{¢d6cÒS)³Ùïžn™“Z¶žýõ3MÍ>~ x…13kÅñn® MP÷éh¥¼­ôþ&‰Êñ¶ÒkuÎÄYÍ©ìÓ”ˆº›¦o~NŸz°tóãì´˼´ l·Då>Ém;Õ¤çb"Ø™ÆÉÒKøë¹˜¹'?Z.&–A~œ˜ÆÇ>NÞ²æb`Ÿà—¦‡à½%ZšŸ€É;Œ®D+˜¼­2wµ{$Èf–oFÇF½ôÁ÷‘ûS‹{&&²]ÔÉ¢µ'ó†ÌÏj™¡S&fóÛ@_MÆ•«ûsÞ뺩»|.™½':šß¸sƒèð-7Ëáîþ'òÕµLÌê9ÕôLÌB쉘¥gxZ"&Ì´^D¡µª2ôª±œPãnž÷¹#dÎ9Vº²2ÿK™¬¹™ôñ7DmÇLLY1Û— XHíórB>FaúŠÃò,ŽUÉžmb+—ÝqUb‹›­7Ç@ÒÙºø²DÌÊü?ËÃÔÍ›Ç!³Xî\ÏÃ,Lã>ò0¡¨º6df͉ïmy˜Øisãâ0 ó5%Êò0±ùÆÅ¡æaâ‹1y“y˜È[Õ¥4Ó0kdNGOÃDA£+–†YƒeYf…½ g8ä{fÅg×ßqG?eaVz¤Ç2Þmlp_ê#N0%aÖÝÏI˜ŒUŽAQ(½¨6Çg÷,ÌZ,aY˜52'¯§aÖÝâ"–‡Y2?pÏÃ,=ÈÁhJË~Õ2âRrf0Ê¢2%{v»EnJfî·ÅvJJL´èOIÞr, ÂN¥ˆC:²a-ÎÔ¢‚S&"‡!µxÊæâû”†Y|±K†ÆŠ·ˆŸ…ÏÚèbC~,³%5 ‡üXUu ÔÇ4™#˜'_Qó{ÀQ8}¸-1ànÜa;‚‹[°‡[iS2WÎG&†°ÆU-³rb:ò0E T·3E \cVÅä£Zj¡WD–uˆXx6g&§÷nF< ŒòfùfÌ–d 8£ø@‹sÚ,œÍ€2²h·)èŒMÕv L·"¼Ææ„Æ¥߯<¬ ãZÅ&Dzæl[(=‹YVófáöÖÇŒÆõ³ï›4=®7ÑÌH†þón¯oˆRh†{ßBØ÷ó6Ãf1è¾±Y °oWlLP<²0«nŽ$ÌKìI˜2²ãœ„Y*c¾¶¿—ÉM{0m_NÝ¥9Òl¹ƒ,[&fr«Y¶yÊÃĶ¡†ÑmËœNÛVÂîcÔm/n=%KšvbÛSð¹5Æ-,(¯Ÿv¹°9ʬKî„ÁŸäþwË0tOßvÔ°K¯û¥ÜtK¢8Nwê¸/‡ ^ݤ¶½;l3“û{Éï–/É=À„)¤]eû„Ç´í%b—zNÄL»¥0Ù–$rq§DÌc‹¼olîÔõcóþ€Þ†û£b`Š>ɶP·ýœ‹Y-Ÿ³'cZ°óHƬºì;ºÈ1ÐÜÛôE:Bœ6†‘» Y/¶yŒü\ÝE· æhU?} jí@Û§ÆjES–¸•E²¾¸mvcMÌíynˆG+Eë{æHØõÓ¾:VÀqÊÆÄ ¸LûóQ×áþ¬1í>ºÍŒ–4e`U¦÷e²Rx¹ËÏ„¤ÓhŠ% …Ws,1¡%êhs¢•wôüdé'·$ i—Zžæ:ýX–Kô Ý—¶| ¤(é7gJòšt÷ݲ6âi™ÈùЮ°ì#«Ê2Dxµ1¯D³H®™WÂL“mc"Œe£`Å̼f¬`š×¼!ËjÁªÝM ™âD±3,9é¿nÌŸAö¯æ0æÅôÚßÌÁ‘9X#W=O•½Ú7–Ë#s³ ,ÝùÀL$bJБliCˆ¨±Ô¢X8ÕÓPÊd#¦(…d™²–ÆÔ¢™šú¤™N!2dg¹P«Š)] µ]–R‡Œ)UL»’GQO,5«qsh"Ó·3¬ØR¼èé=i`ÐMMzµT±à¹wÓÓÉÔPÕ±”3øLBcZZ°-IË\CÜÃO ™ Mnc|ÓDD“äYô*æÑ¡$Vs+-×ñ£2åãÁëMšÇœ=DT¼&J2¯/ ôA“)™û‡È”æ²Y~ áqÊÈDú±¾…åÂ(¨y°\Dļô£[¾"b5j,¥±•èjž!Óantª±ÔH„ê›êöôI_˜ÐS,Ûªàr$aŠ%eøåŸNS!ŸSfÌxæ©pÈ»Ù$F]`üñPµxƒ”!£TlIk£”!£Tj9º£”!ƒ"IOÅŒR®”ŒR†LRÝ$Ed’jJ7I™¤ÚØž¤ˆŒR¾m~R†|…T8¿£!“`““L=¿¡!£TÈçç2JÅn¥ ¥O˜„Œ2ˆfÌ=jÈ$UÏú`È(%“Ht«#ƒTÛûšîÕ‘I*µHÅ(Ed’j‰“‘Q ‡©·:2IÅs» ™¤4Š1J¥ÄcšÇuG¾B*t¾#£æ´IˆÀÏ–i³ð$Dä+¤Ô¿¥ˆŒR¨ñ™ßÏI*·v”"2JÁ…ž„L2áÜvC&©xn»!?_ª†³f2HasfÖ¬ŽLRå¤Ë¥ÜÙ~wä¿MªUGNRD&©|²¥°¥3 ˜dÂiìtd’:Ï¥B«¥ ™¤Î3AG&©ÓL`ÀÏ–I§Y³#£T<Ï™¤Êéy~¶L=·ÉQJI•F)C&©–‹4I™¤Âùû2I¥“éÈ$Õ¶‘&)"£TN'ëБQ ¾ü<& ™¤Òl ePX0ßÉA «±ytud”Ú[ZÝ(eÈ$Õˆi&)"“ÔyfíÈÏ—ráÜ.C~¾Wöƒ”!“T9ijGF© ±…AÊQ*nóÈ0`’ÙÏÏ3d’jµ«“‘Q*m'VºŽLRáüDCF©¼V™¤ÎskGF)„oæ{2I¹ÓŒØ‘Iê¼ éÈWHÕÓêÈ(UÏ3uG)4Ì6¢#“Ô~Ziuä¿M*ú¾#“T=ÆŽŒRû~šƒ;2IaçzR`’‰§±Ø‘I*ÆuGF)WÏR†ŒRÞŸ|¤ŽŒRa?·ËIê¼âìÈ$•OóTGF©¸FvG&)²7™¤Î~FG&©“aÀ$s^qvd”JûiŽíÈ$åÏohÈWHÅ“…ëÈ$uöm:2Iüþ;dòÙ³éÈWHýŸŽ|…Té}GF©p²ô2Iù“ætd’ ³¯q £TŒç'Æ'³†CªÐÌÆß‘Q*o3ÿÿLRî¤Ñ™¤ümnÏÄ™¤ÊI¿:2J•󼨑Qªús» ™¤âi udB²ÚäíÈ$•OÖ¦#£Ô~žc;2J¹r~¢!“T=éWGF©pŠ‹È(ëYÊQ*m'ÍéÈ$•O£¶#£T=ϤÀû:¡ŽŒR~?ÇŽLRî4¶;òó¥âÙ3îÈ(•Î>oGF©zö@;2I-yG©¬ä•ƒTGF)TMíêÈ(¥¤A£”!“”¿Í$0Éœ5µ#£T<­œd’jõl“‘Qªæ“ÞtdjYS»:2J1Cs2d’ ç{2I•SŸvd”JçUGF©¢ÕLƒ”!£T '·#ƒÒg½éÈ(åöÙ73`’ '+Þ‘Qª6Ò™QÊI*|úŽRiˆ“ïu £T<õüŒRõ”µs ƒÔ> Wþ9ý^æq £”+§vwd”BEÔÔRõd™dr(ÁGÅŒRÑÍ_ð@&©0[­¥ÒÉšÈÏ–j‰§Ó;vd Êu7Hud’j¼e“‘Q*5z®QÊIêäûÈ(UëlEd‚g1¿cGF©=Ÿ¾cGF)·Ï£ç@&©<Ÿ¤v £TÝO­ïÈ U´`êÈ … ÈÉRÈ!Õ^M¨‡ÌÏ8þê7ù¹VùUý2Y_þù²]¾û#gã 5ÊÃcÄè ä6I :O„pspIØv``¨<íç``è, !ñ蜃ۂEeÿ…VøVz}00–œTìÒƒÃÛ“Œ¯ƒÕ:¥iþÚpS‘Î ²Û]:{HfYÿÈ0Òž<’ÄQI2¢„NfâHêrž”ÿ 6ÝÈšRÉ»q°ªD’ÿŠHâL΂ý³ËÈ¿€úù(,¼ìÌ¿PH•uð/dr¥ü ý(¯Î¿`Õlÿ‚ò(uò0i背Û&³‰±ß„ÎÏ`9àH˜N ÆUzíÈô<‘/4"u!ùÖ­•ˆ’/àPÃ2„å+k¡:ùBõdÉèä %Só:ù‚¢s°e#êLEIÏ8ÈŒ°#Ñ>v'<Šö:)R¨TˆNœ¤ùŠ÷ÈÂyr/´ìöö¡Œ{´ßʤ¤Ô `”P2/øÝ­™ü–Œ®Ô  æ&¿•qJ¡V]ϼ2Þ©b‡ØunªÒ Œ¿*§Hç¸Ê;M: –ŒO¥ãéDY‰l¾|&4ާ`—ÂŒ\8 ¬=ȸŽº Ô 0»}‘zÁy@vêÍ™A å€JnaÜ 0µ;ÅRîgu3{Ám™­!õ¼†ô¬{yÑj0£N«+†;½Z‰Fÿf l…,hK[¶¢\£^À©ÅZ¯lÔ v’æÔ 0ðõx3´®Ø¸ÀÖJ;÷°ÊMju{äÔav{('š;ÄvµTÖ¨ð@å¦w![Îù‚ vj’±î#n›˜ùvg,ÆÞ'S+‚Ið·;Ö„uÀ¶CIȸï¤é\‚ýÀ·Î7ïx<«1á…‰¶pGÈE)ŒÙ,<íáý°R÷}¡‘¨ˆ²/°‘D–ì „·QöAHºFö…Æ¢§Â}!¢ÄWÛGö…ÆGjȈ/?qG6‘¬÷QöA’–a“|¡P§ HòAx’œ‘/ÄÍ&p#_„ ÊF¾ÐµÜœä q3.’/øH¾Ð˜•ö‘%y‚l!d_ˆ›/¬ï&ûBãtÔÌȾÐèJ”ÃAÉ"öGò+üI¾ ˆ·£ª”|AÐk½Eò…¸¡ŒD%_ˆÉÊL¡ä Êp¢€’/4¾KecPî…¸‘Èߨ"vQ·‘z¡Ãç!õB­é•Ô  ã$Ù*©j¥UêÔ `F!-©j±êŒz{Ï:èz|¡:ÌH½³§zcÔ ¨“WÛaÔ ØZçI½Póf7&õØL•?¸ª'Ó¹p  6Ù¸`—• ¸8À¯È½€ªÃ4û^I¬Ü ¦K¦Ø!M¬d_¨ÁŽë3ö…NÃbä àmH¾RY%h0ö…j¬~¡:ëØéª3BNã_@†2ÒÿÖ%<ÏŠü Õ™éü ë }:ù0EêI¿Feû0ú…vPáĿи{•ü  ÷Íwu©ÊØéJMv\÷‹yýø]”'†ô È™ˆ¶q´¡j—±/ ŒÄ¹È¾¾ýRƾ¾-N6öÐ#k¶±/´ó•cœì cMä ÈÒªg#_()رX$_(PÉËÀ½€º\ã7oÜ p~´šÚ¸ Ö^ÚH½ÐD/ó­Pz/çZñæó8/ ÚWF¼r5F/€w‡'éxžÂtüÎæðÓ=¨…Qûl¼ m1?õD?¸ñ.àL¥æ!ï˜yÔtïNÙõ"ò.àDLžDÞ…vH‰EDÞ|åˆ1ÞTñ°,ò.´%}8yRè',‘w_žÇZ‘w!aqhéˆÓÑMàó ÓñNÉ›E4Ú…ä½ïDÚ…äõr.€Þ‡O&çŽÚT iœ MwÑÞιŸf:ç‚5mê·¸(<ÌæýúÙoÜÜäÿ÷˯þæÙ¾;ÇPdÑï;‰‚!#B 5 …’l¹X‚Ok„n™Ñ',‘MWöäNXˆkhXQ)–Í&Âd22„%âI(®Ì «¢ö·ò ¬;¿ždKd#o©r ,ÇÃ"h`‰X܉+dWWÏxV€VOR€%²];À“?·HæsR,‹è`àà60³À‰x Ù¶ªüP‚˜µØ~…d‹±ˆ~‰8ò©²„~…˜!dý ¢•ϯh\ò,‹_"Œ YQü!ß++âNRS®^-‡_"6ÒYÀ¾B-èñí×gf+^_";7/´v}ìŒû±n}¸NÔ®£x€QJo«ÅèK$Þ½•™?ù#j#ÐJÌ—ÈÎØ¦Ö…/€b¤·, _!à3#ëò¦Qóõe©÷á9ÚV½B隬€{‰Ã8‹®WHÌF³¬ÅÔK„ )+¥^!¡r¯Š%ÒK„{Ao{úÓÛ9 ,y^"œK­ày…8²~Y¹ó ÜÃÑjç°Wná±Ôy‰Dn:±Ðy‰ñ=ËœWÈ–IÞÏ"ç%¢Ë5«p~ Ês"´¼y‰’¼³Ôx… ¦ íÓBã%²ÛAZf¼Br¶M›û ÄͶ–¯dìá, ^"tu­Dw…D]Ø[Mí °™µ+$d¦X9íáRߊiWˆ'¿¯É.Z2VÈ®€“¨ÖÇ.Çh£•ª.‘{\,T]!;9‚­Lu‰8îXjuéÀúM5@‹FÈ^«]¤Å K$Úi+Zä¹Döδ®öpò×Z¹å±k–Q®Lr¿V!ùôO_[qä »Î}ÆÝë=ˆm{³äq…D¥µzÇ`sËWH —¨1.Û#f ã ñvÌK—ÈÆ9’…‰+ÄEÛsm‡+€ÛYVn¸Bv[/±p‰8êH'ªŠÓªþ-o{¬Zö·@žÆ—´œo‰‚ÔÊôV‚]JœÏtˆx¸ æ–ˆÒÃr¹’¹ubÅrKÄö¶¶Ñsú±kë7j‰Ø¡z,“[!‘Ç­[‘ܱ³ÆXü¶B‚m"²ôm‰Ð˰·b 2Vö¶Dx ‚•³­~‹Ù–ˆgLŸEj+dçaIV|¶DèÇYéÙ  ­ôú,<["ÆJÎR±§H¨•l¿½Pl…nÈXØ)<Òµ—­cd·²®"##ò Ý€Y!ç€ZI×I•û^VеBxžY/çZ ‘iN½˜k…?½•r-@?µr­2•Z…ÖSÀóÔr­ªzò§%.X©ÔqÕŽd¡Ô ±\+“Z âwsÛŸåO+„1ß^ü´@6Ò¦[åÓðÖ>–==Ep.ƒæ)XÑÓ Ñƒ(Y}tþG˜èÞ= Vˆã&¶•-lZÑÑ Ù92¬˜h lçá9O‘h_× vHàì½\g…0§Ãjuž>÷ƒ´Pg…I¼—é,—nL7Ðê›`G[éÍÙÕáîu7OÍlªݬÝb7Ol‡kÚ€•Û¬;ÁÊhˆX9=>ÀŠhŽ¢W@ó´€ÍµV³@RäV¾•Å,¨‡Ó÷š˜àôó[=ÌS D;ÖXkSžÞr±¬0e…0í°—¥,‡‡¶ÿôÙíø_+IY!zðW¯Gy lg«Z™ÉS¤enuOR˜ñcE+„§¦õ‚œgžÎ  ä8¯å +7éµìb#·¢ŠâyW/©X Ž©½ bØÑ<½œb -•GÜk™ÄSä8þ€u OD}ëÅ  ÊNÏDþÊsÝeÿÙxúkO⊠)ºê¾SøȾ©c{PO€–¨ M {h¹–òë?š“¿Ø­"iö°[Õ‘TíøI¥¦^!1poŠÄÔ+$X20)§WˆçïFí¼D,9™”Í+Ä1cO=ÙžJd¼B¶Ê˜)ƒ—w­û^ÂS;¥Ö é^ÝKˆ–ãþÉÅâîJRºDv;h5Yfü$yÛ'PºÐyŠ4ÙB@`Î89@WÀÆ} ‹/ž¨ŽOþË®%¤o\!ˆZ_†@äS Ÿ²H"Â%Â#WŒ†pøìÀÆB¸JÒÍ?r .€\,þ¥Ä‚K„ q£ï[!vˆ—‘é­h5¤Ò[!ùŠ=ʸ@¼í=1<øpV²c‘¿²ÛA‚ù[ [±3ž•îm‰09ÌÈÞŽ—ÔãgIâ¶BŠ×Lr¶’{4MI×VH²³¡IJ¶DìDiÒu­h~åØZj•Ç’'ˆ/v΢Rb-;£•$V+Äù½rŒ5?AöÈC0Î@r¢ G^'ÙôJJ±BàÛêÊTéž"Cj¼­ìã'x ä ¹šœ`$Vùuj‚=O_´²ý"~—S@kŸÞò¨­¸­ýÉ*üóŸ[±Y€ÿAB·øgå÷ ¤0g¿°/ìxàT«M?ÿ5¼W?ö¬‹º²:™(«eØ d³ôi+Â~ŠäÜ×9,Á^ 10á–õ×OY»i.¨•U?Epýü±š—Hb\º—T/oÇÛYáòS%¾m`S\1Aïo­œÔ"#Æè/p7¶ÔV`7™~/ŸZõ¸k¡p; ý½&×êÁç<ý/¨úÕ!4E®&²Ìì—yÍM.#ò'=T4¾óp5\½]Þ¢ˆÏ”§êÞ¼¿üõ«gñ+¹¥xCI\÷Ë«ïŸí*rAúIÔ³Ûå&îòêý³ß\ÿño/?|üt÷¢¥ïáúþ㇗ÛÝ?¿ú_Ϥsb–Ê«¿öêÏÖ‚{į÷ǯ¥ìÃmþدzí/^=û¥V£/_DF$â›xÉËàÐËv,VÀÛE_äŸîp6V©ñúp÷ÂcêõÍÝ $y”,zv½ÿ€0Ѹëýãç“wùñR2­lõúøñ Øöë—Ú/2>kí÷Méúî+÷ñr§‘ŠôËt½ÿô]“U,Ëõ³Ê×®¿ðù݇᯷­äM÷éM±‡‘œ¼í«ïäÝÞ¾ÕîHG ]5õ&eÜò¢ÛÝ‹ÐR†ÓõÕÃßi»®ŸØ9â«–ë¿M|7ÿöÙz*Z‡¨Ø½õÔ~ýý"@›gïçܧnï¨Ý¤ÿ~÷füå ¿QñB§‰£8vöýÅßmï}ûéÝw/_ýêÿüâîÕ¿>é)Чý{ýò2/ ôÄ»zjK™ƒØ÷£Ió²hwQ'üå°õúåÝûþk{òÐØçòKv×ß¿ûnÕ~âŠÓÅF}ÿÛÇÇ?Þ~”ÕÝ>µ¼€>}sש£¦®};tlao{™¿¯áyŸoô±}ìÝÅëïîb­wÿå¬0Ú5ñúý¨߯?|cSÜ뇇ßwÿå~õÚ~vëÖ±ª*÷¦WÓ§ûü'tz«ß¶>ÿüpûþÝ—?Úë/09‹PCÄí½D¸ZòSmA”liI°óûªp@®? BÿãÉ×êW,>¶þ`ÈM#PH#ÓèU>ÒâÑÒOøvÒ´˜` oöaÊôaðž%ÛðWw/b«t×Çwß~ºÿôÓk˜&Ø£×wí½_ž\ð㧇ïþöã'±üÀBÓÿù‚ÿ–/ˆßß½ùòú*à9/‹Jex‰ÿ»}ÿéþýÃëëí6/·¿Ü_ß=ïsÌŸß½Øe*&ê§^~óÃý¿‹5þæ¹=!áùÑ‚>È:–G%Þ*~Å;}ùtÿáó÷"ðz}®ÿyxùýý›/?Ùë<¼ÿöáñóË7¯¯ßüïß<ÿæÿ>|þæõþ÷_ô¬~éc§ÍߺÞ?|~}ýÃËOo~z¸ÿôü§—¿ø,fKîóŸÞ¿ûðòñãï}ÿ‡—¿ýñGùç÷ï¤kØÖÖ } “{wwI¬€¼É×Aÿ¾¾þG¿äèù§WüAÞV^ôU³›Öubãß´?ãõ»w÷o?|üŒ©JoR®¯¯h÷ç×wß·.¼õôì?é3þVái{N=j—½}øøþ_>½ûöÛ^_ûk‹½úMôñ¼ì•_‰îÌÿ6µ endstream endobj 102 0 obj << /Filter /FlateDecode /Length 25724 >> stream xœ­}[¯fÇqÝûù ÉÃ_r&zwï¾ (0,IKicrH=z†Ž$ÿúÔªµªwï­KyŠûÛ—î®îªU«ªþù1= ÿ§~ýî!=~÷ðχKõ¯ß=þìåÃOY†IžgšÇãËoø“ã1·ã9õþØgyN³>¾|÷ðwOÿýÕÇzñE)&:úÓ}ûúÅé9ÕqŒ6žÞÝþzÿ"ûcÖ§>½øû—¿°uPnéùœÃöò›‡§úâå?>üÕˇ¿Áuýñ»Oöº½t{N~¬ÙÞá8KöÏñ˜ËÏ}>~|ýø·ïí¿{Ï£×t<þÆþú…ýÿ?ÚÿÿõŸpƒ‡Ÿ=Ø#12¥>Ÿçc­µã¿åèÏ%?Óäö¾z”½}Îö¸?~ù÷çs™-'¾ÏúÙ;ýñÝC.5?÷¶$o~µ®j§àY·«Br»jvÇý" üš\¦MâzÍwKÒO‘΋ZêϹíI²_4{Å“·‹$Ù.Êå,ÏíÜ. ÉvÑ6S1í¨ÏõØGC’ÛwvÓ³ï*Éíª6çóYö«$Ù¯êù<žÏ¶]^UësÊû·J²È™Ës>ö‹$Ù/êóx.·‹$ÙGí¨óyY ¶KlÙõbê|6ÿß|>~Äœõ¹”Ç:Óù<²¿¦}*7‹=sØ?›~›¬O—tü·:G}¼æ°OÏ-çs’ĆÉ'TŸ‚‰Ûغ0Iq‰}¬Í~;ìáÇIIÇ8·£´g ì-lI·£Mè„K*&¬eûQ¯”اڣò™â{hµ·É}è6g®öìr4—Ôã¹ÚÌ–Úž?ÊæÇÆ¦•Ùãm ÛaSÆóÁG5»±½ÎÙý‘.éÏÍîSó]’~`¹¶Úòsã¯l•Û›cr\`7¶×i§é7/±Mž¦µaCÁñ6•ö:Ý)ñ•mÚí÷­Û¦7x›=Û^[·W.|¸Íî3J~®~çlOµ™m£5Ì«Kú³=|Ìñ\ýÆÙ&o@éó„ʺÄ&Önƒ)?%ñ hÓö˜äÊöböÝ6Çç£PÒŸ§éA²Ùëü•Mß4]±=üyR€ÿ>ìyüËÄã±)k8³Ína÷zÎ|¹s`¹ôÔ‹¯oÚfºß1;ºÄæûÑÑ;4 ’†CÄ$ó|æ‹4WS¾|¬û6›T”¤yË=cè;Èßô†eÙsÃ à’‘ð©=Ûº×0_6%åød;ìðéåð9†dÚ3í>ÅVnã}f{¶3 —šž‹¿MIé9ÛH[`ã äÄ›ÚñS±ä\2 «½ŒúÌÙÇ`(¦ä£PÒ°L2µÎKNPÕ~Ú2˜•[tØNSÜÿöÁ+¶vp“Ó¾)óÉPÇŠÛ6Ì$¦k§¿KLB±µ|b$lmg¾Œ ä‰/°•Çu²b$0…¼Æ¦®fŽ$6ux”­ÀÎGÙÔUÌ‹Í%—t±©³ëÙ4R±¹k˜Í³iÓ*6y6lë¶óÆ6y K jÄ;Ûäá`q­–ÄÎtà{y›»†jFGáml LÃlW=ê´¹³GôÔ|Kq‰íMahbN›;B g¼Äi“MSIškê´eìCzÚÜ (áÔÛØ®ME=³Ö sWÔܰ~ ±ÙsE=¤/§}Œé©é{‹—±É¶m Ûtʤ䄞¶aÇ>ïks7±kØÀu}ÚœMlØJ%iÐUÛkšNöžíY#¯Gµ Ýiþ›kéln<´a#ÂîÄP±‹Å¦zÚ˜¶6t™c3ð5­ãù#~Û‡Z7õ™’ uµíQú‹³ïÀŠyá]lŸ<°ƒÖSïgV´µuû^Þ¸B pcJ5Mhk³…¬ƒ¡£m’D•©ø<Ü&Ÿœuð¹BUíO³e$™‘f I³[‹œIìX<(éPU3?M™£ÂÄ€ Ž’zV?U¿Þ%ÓOU%7®ÅOUs->Ø 8Vmlô6F8Uí ð­.©¼M‹S¿ÚÌáTµcë¹ù*©6s~ÉËØgJk´C >ø& í­Ã·A“:ª½;NÕf“À#ݬ?U›é37ÚjS‡SÕc(Ò[˜Nn“ÚV›M«v¬tI&ïSàG¸Ä&Çj³É¬’t\m’ª²ÙÜáXmåÔ¹ßlúüx¶)Ê'%Ó•µ™ºq²ðßüáöc^b³7%Ü;ðªÃoÃ_ØÜ —¤åØlî «›Äæn JhÜ`l¡«¸-•ã?3%œq\WV¼Ý!Éte…„úb+Ü•ïM;ÅÔË•ßÍUlzû<'Ǧñ£pþWŽŸOL›vÔžbš¶==œª3–oœ)nò=¹r™$kîl÷te½L"³ \Y±¨vf¸²Ú:áŸÃ5ƒÆ¡éÙW¯/-žSû"WµÃUÖWhÓ†Ôík³¯Ð¡÷µSÍ•µÁÐòqÀfeµ’…ÔyÒ4Œ4•¡ã0?©0\#Øf èIGP‡èEöZ7#ÑocÛOn§¥+«MwŠ_ ¯c“qò>6u®­ËZì}Hé ­>2•Õt«gJš++N4ÞÅfΕuV:„&9©¬6ašû7(«\Zöšï[§>sØÔá>Ÿ?jØÔAY1…ù äteÅþ§K†ëª¾Òða“]µ³ì’&8ˤ6{ÐÕnú¨GÙì¹ l!çsßElŒÃ6{¯SÜòq VoƒoOå6yØ5|œ¸ |‰J‰Ÿæ SÏ…2lö ®æfiÃʆºöšeýáH…ºöZµ¹ ›=¨+V×Űكºâ¤âlö ­Ý¶ÚÁ±n&˜¤kM;¡­Xƒ¯cÓmí¶¼¨ÃŽT?Z{“Ë0ípºv3ÓÆ ¤óhÍz,?Z‡;.©ØM2ô¨‰I*<¡¹ÛÍìðHÃâWMsy'\qð)X f1qu@cΨìh½¹œ²ƒ,&)?†enö+lÌ‘6Ë<F¾NlŠÕ%¶¢¡¯P¸“רþ}G§µd¬/¡ô3Ù$§+ìÌ\‘&ðÓ “ƒ?*DçL†}…–r™˜“âú:m“M|øéç‹I2ÿ®¬Ó,†écVì³ ê³þn®«¦%v†BW¡Ö|7ÛÒ2ÞÄŒ.¢£ùü5(z£¤gÞæ¬ÜLâÛAƒêsÚ³xö©ãÂ$§«êä·-ÓõtÖÌ-Ê\ÁìŠ:«ì“4WÔiïíKÜô .‘n0æÌ)v/¬S0ˆ™Âdæ%6køÄVh› ¹šNûV÷ž²ýÊÕtâtÏ”œ®¦³ ©`¶YƒšÎ6µ3PŒÔ‹ïg³Ö°ÍÄ 2P¯æ^ãIgÎ$=ö©ÁÑht, ¿Ç“ß&'0”îøNâ©™¡@Kç8x d€(î²YA ´t¹(ÊØ`¢ ¥»¤œÎ@QpdOœ&‹áþ˜ùÂ)¾ÿ ¯3å»e (PÓÉn’¬‰ÒOìÏçºß‚y{²mñ.z;`biÿ¨oñ˜w]¢q€„ceZO;s'$=ïcžaå}^ ÛÌ+cŸ\HfÛÖÜy[$¦ÑØ)¶…I»-6Sá缯GúÜ×, ?-.kfÝW>.­eWÓÏXúR H¸ÿ‡Ž™BÒ¨\zÉ,»®­©sWf¼(OPxHÆmS°7•RÅÆaß§å› $½îðËRö= ’yÛÇ0n­n;]†Û !™cß-m5ÄÆ¬Àh9ö]סÒÛÎŒI‹íœ»·-p-ƒØàVr±Ç!KqPråˆÃ äÈû‰ÎIÙ¶tNiœ[nÑØ¶\j¢<ý h·«ó,ûší$Щ¯sÎzœÅ¹,;@ç5€aÎhéЄãvì/¸?,„_t€ËxÈf[QÏÃÀ¾,cFFˆ#Îc7T …ãØ™lçw¡0xh”ÁC£(ÛýÞY†$²Td\AỌ4`ù”“¼Œ´˜ð2ä²½;ÇB¶^øtÙƒÐ+ɘͤÿVeÆ¡w³¨Üf?|y¹Ö9Âr¾óÐ)²üó$õÀ2Ž^lÐÿ¦$óÎÂÌxxÜp ØòÎ…] ÜOà Ä4 ‚@ áL’¥”‚PÏ!(%é>-à "2yêtX  $CØq DFb?Œ>”¹¥D$7˜ a¦ãEABxChüð¬’a§yA"ìL¸$±;ƒ$Ð4âkx·IÓm?’I¹¡}þpŽ–à@c]CÈpû(ÁŠÛ‡ zÄØ´<™©o‚y z€œ˜˜@F‰ƒ^³X)Ö€`á©X'!!æê‹‹ð©pY Í%v‹U‹Ô¼ê.&yndïÕYS0J®¸yÊŠXáIàDÁê> E.a…ç r¡Ó ëDŒÄÚmY"i±"VG]¯±ööõ¦&"vd›qÀƒÆo,KßÃðÕß>$§òJŽàeí;û²W¡ãëþ;ãö pCDfÔ[ºKT·@FnߊЈš ª(‡±YKp5ª zö}àŒtn“c¦Z–ƒ~™Fl®Á¿Äò!½-–È}±8Söõ­£Çš»`ˆX—pðE‹µ[°íìôËR‡â~¡e Á_ZúíØé’Tve;G°C!a!õû²žá¿…bÔԶHÝo©i‰Åö֣ܱ…Àî§¡ÛLÃÖ|î[Ž+míÚ®:ÙÙÛ–Ö[‰ÒO›–Þ÷M¡Õó¶q"¸Yn›ë¨9öpb«Ÿ9Ø•< âÑA¤óq•±0ÛìaµÇ¹3×*fÒ ˆ} Rª¥b_¦ä˜`_¦ÀWûÒѽí$íéL Åù ¡šb_&XäÛ™m‚÷ù2~¸È—¸ ÇWìK@2xD¿L·.úe‚ x£_â£v[Å¿{ô͞逹g†Íƒ ýÜ0‹°÷ʨ å„0U½Wˆ¢q3 ûkÂj½™hÓ>—[x˜qrñQ2õp! Nœ[ðEi0‚`¨ûʦyq8ewŽ#>a›:Þ²“/[7•“, Ý“°ƒûy†á.[[±$4§ûGiÜ6\ZÔa”7‘eµ7FŒÞ^–=øGCxÞÜ{ÂAh9H~áD ƒ!\: ›3R¡s”Èa±s!~%§¦vÑÃï©5ŒŠðàpêÆòŸêƉ\¬Š-Ó«9k‘„ŸV€•«©IÂ݃»"7]áéÑ„·—Óx.zu8–g•ÎçiknŠŒIõla¬„{š-@¨(ݳÔž0FVTP9Ë}Q4åPc†¨Tò¹Ï3vÇp˯pÝÏ(n¸÷XýÀF¬7þ%VTp@áÌa;ÖpæÀ¸G`aŠ[)Äbcj@pÃ= HâcÙ$ÂO® bY· Oæ«Rs½\ 9øŽ^ >øÈ&tÚd Ü#3nÔKŒEàO𨇢:KSÅ:™JõöBºNÄ£ˆ˜ ÃÔ•bv¢¹¡jÐZî¼a !xDçÎ3Æ/<¬Q"…òÁå'$ð\Œõ@ OÝâZQÄŠä2 ÔñáÌ&ÏƼ°Ë³rð&Vz(Jô¬eI“ÂáÎPêeÜŠ'$„d¡U’¶½ !»'l¹ø{¶…Ñ Æv‘¡À ÕÐ|.S&Àè³1¤½ðjßõ„q;¢ Á!“ ÷Ù `›-èü´=<È–„×±yŠû)þDLèÓC2oP>šBû±qEˆ€ìÁ"Œ*h‰ø« ,œ=Xu|8‘¢pDÓ}ÚgüKHè!Dœ»{#“l­åFÀ„w«ðŽ*t…at9G0ø"0ƒSBŒLÆn 7þå‰1QÄÇC@'I¼¯‚D(˜£@¯ólòãÁŠGA ²¥BV§u¾…µ QÈG¡/òâc2:všý‘n4H8yeÃIG˜>"qŒ[´îœIJDô ᲈ¨Î<Æô3B…O$$ax’¸†!Hœ²\¦<í¸ E(ó\i3î<ÍoÑ5 ‰B×xÔôœ5x” ¬ž3Rb"ø Ip- =WZq!©T^G+U0’[¸ø´Q#&!eHDÙTع¦@à"4 Éyc_B¢p¬âÛnqðáŠC¢;+N^M¿‚¡é¡tÈ[‰h;$â6*"ˆHÄJÆì!ª%ãú Eúû¯é j„øþH&ƒÿ⸑tã"@RoäKHô+q`‡¢c’÷ o#jƒ¬Ñ'jêÁ¹ ÃÒƒ„ ÉuAÔ¨IqèEæ¨I„øEø€¤ŠðAR$ä‚q¦Ÿ¨ "—@Rvþ º(*è6¢±TÛ ÓêI¹ñ/!©7Ê $ãF«ªNnPo !•$è9 y_HDêÍ1#EªGRèBðÆbApò#Ä:‚D7&1 >ZÔ%ʺ­èMn:‹qI $åF“‚„L— RA"†‘èVŒ% 2]‚¶Oà¸Q»–o°è_œ7&$dà ’.b©fõb¬‰ŽVƒôŒµzÔ`‰Ô _'ˆoðu‚‰Ø‘âÏArçØA¢þHT=ì(3Rnµ⪫öA\µ×>XWEíƒuÑUû {4ëVŒ@’=÷×ÛknI²]TJqŽ. É~Ìðr»H’­}°FcÕ>X£±Õ>Xß¹j¬Ýj¬«VíƒuÕVû ®ºjÄU{íûWým@$ÙGͳKnI²ˆyÓØY·‘d¿¨2W|»H’½úÁ£-v›yû_Ó¥¶á¢`%¸ã›sF+ìWnŠp€vÀÍ”tÇëè‚|3 ó÷‰”© ƒÚvñ:—vï¤=hÙíSYh±ÂDDÌc¬Û˜Ý–)±½õ„î²ŠÉØwÓD÷2ñìQåÓdeØÇó¬É8Å~Y¼†€“¸ ܰŸëΙQL€ÓÜ8k¦¿åíŸU £¡ ½‘ÐYjqòü¶Œ@3,/€š<+8™l5ùó&¡Ë8ž›U­ŽBžGœæžÜ o\%ñl=wŒøÆ-Ë~ {%ˆÙüáûuz\Àhx"Ø<´-èÚ$ƒû¸ m¨:Ú>䛤)n}ÆWMz\ hÔIÙS×8°ÔìZ ™‚wŒ¨€£™X•~›v…,§r2ü-3–3ž”å¡bø-gb™p;%ÌwC@œ*JOYŠoñÜ™£ÅmŠrÀsØ]HלLY¢1‰ÜL`~ø£JkPw\¢ð`ddZÂîžÍÃy•©2+‡·AÍ…“2 õ6&L{I3Þ¸‡œ°%“y/&8|¤*:4M¾.FÿXM}ðÈ]§D¯<éq!醟“gÅ!ÂHÆœùÛDJ²Á¤!.ZsŸ[6öJOv35#;óìYj0ž]•ìVOö=„E1üì‰>/Ù1 „IÜŒP„z¨d #8u¡ÅÙŽØ=”@ ³t,NxèÚ•uzCþjº[>h|Vcx4ƒ[eT¦wçõyº/‰Ë¾4qç ‡#!Ñ™º+ò¾ ªSXœIäk eX!÷Ð5µ‡×Ôgu‹«Å–‰’nqÁHöÇ ÑÐ-.ÛÆÈ‰ d-B‹3¢ nqÙs G•Åfí8.W‹«zd‚áòš Ó< #ªæ%˜÷0I%–ÙƒO>G—"È]=á_ðéC di##X˜‚A0ÈÌió`EŽòíœò9O’+2Òë ªeŠš'ëÑØîÕåỄìÒqÊ{L*1I$ŽÌ|’]Úµf*á#•.q]{äÙ æ<ÖžâI§8³-6 ‰Þ" i¢Ô¹gœ*„ÖœVÛ²öøIºcC4NŸÙBz›·ižïe‘¦32Éüd­á( KÌOÖ •d„Rý’Skù^PÖRÃD.”Õ«Zñ6ÃÅ%\:!V#®™! ± ·%‘×çßVMBeoÜ. 4 ø£ƒä.¡£µý(ƒÜnŒ0ļ=<{J‰K\EJ*N®¼>¢x™¢ƒ]s…Ä`øx™Ä3ø\2(bêÈU-à=Œƒƒœù‚Õ#>ÙÍ£>W‡$!1Ÿ‰O²ÙóOM¬¤NO ‹àà³çú²›½¤áa_:•¿!±¼Û7Ép…-N"¨ÊSø.ÓË&™D0~91ÈÒ”Îf’êÚº–ºI&ïÓev”ã  ñÊ$^JËuˆ+ÔÕ!ýII¥ºvY¾&™TW¥¡–£”¥®ß1I§º¢ uTW'y c-&QœÚ$“ú:F|D-ä¦c‹”„Dì™7F® þ.4M@²L¥Ç'suE˜Œwé„ ‹Cˆ.è®­¾¹ñeÆÁA’Åh’ÊЃµFT8²ÈNä}&!H„´ó0‰ֶתXEÉé`èáLY<%÷A`PB aoi&òc’Á]¼ …¯‰ËzRy ªb|Š£$­1T(ä¡ µ¬EÔ×Bò¼æô™½‚|¼|\‚MÐñš°V ö3:úuIcÔa(9º`+b¸€¡œÏ Š ÅN&N†.¸ycsp ‰ºøN0r :ÁÖ( T]3rO® TC'-“y D‚2ä ÌŠud°`’¿Y\ùŽ [.еÚ/|·@±ªLQ΂³Î V,'1í”À•Ú$r"Êy yÌ¢ ”“¹nõrßõ ²ÛÁ¤ì„‡¡¦5ëÏA8 {+¾L’h%옕›T° ¡¥@øúý$xöwq¶‡[äq`õ@Kk”‰+X+n(±ðaf¿è9óî?š1Ms¼<?ŠG ΃±‚ù‚–VÛ!¨·PÀê©§œý″ÃU' ”)âucæQ‚Sh’I„<4>¨ ÔD¡øÇtVh%ø›ãѵhë¬,§Ùjds<zZkÕg;§ŸPÝÁ‚ÿ朞ªgŠŠr2ÝirçI”7“tF š`+3_<÷ê*mi’Ê(AÔ-4Éd´¡)±Æ æz” Ums‰~ıVýàušŠH™¤2ØÐf Æœ¼ØLd(ô#š 0ÇÝŽƒšÚCS+k\4ßÒ9ålj.‘˜@õ¢€v"´ðdJ‚Ô Û’Ö&º‚)Üö›Í ×”ÌÚ%µ–å ‰.‘uœê¹®¡ I¿YÙ SðôKÜ ”ÈZd kŽ“Æ´÷SíZ>á@Òo^CÂÇÓ‰‘g‰\@y)ª&/’ND^ àŠ,‰;:èùB¨uK»!ü%H¸›†K•ZŽkävA×Ð3D×È{sfÉI =<`%Ü`ÄD×ÈM\9GË•„„6J¸›©5Þá’BÂC6ÜV°XäœÉµM­ß½_'ºÐ½”ƒ è¦HB'’›ŸÚ$7oùâpo =õ´¼|úô–ß WW``Ù7ü ueÑ/ŒÁ™8E„C\"¼!¤ýHh†ãOü‘Tn?vP‚S@ aHø!+Ð) ô%õS@}úq á¾@$‹AÂ]XxBh)nDo'`§tQ‚¦v á+—ðQ‚¸¶kƒíBe×ÓN»^0 ·ë#“»>4p;¢}Âö® ü’vÃ!ѯ#^“H#$E¢‘תÀ2E¿júzã£|^«4°Q¬d¥I øZ@¬Ð™N°Q0,ToÜ Z(,O‹€sñê!IºOl cK!\Ð16¢Âkˆ.ã{“àfÐØyòH½¶×d¯=zݾ×?nxøÊx[˜y záê8¼TôŽC‘l¸@çqÜ2ؾgñ¡ün+…î°fÉŽhÃØˆ¸xT¿ŠR_Õ¥Vì<÷ ìF|Õ’8oƒG²*Õ;âô(=“ܯªË£É ÷—£±@”¤ê E(YÉ©‹Y€ÂŒÙûÆ,_Ü:ÃPhê=µl‰UFjÙžƒ\7“¤Nq^–Õ‚ïoQ– €}Y}²~€ãOÙC´€ÚŸ7ò%<‘°´*Ý¥·—5¶b“ËbsÒ¹ø˜S)/±“…åwÎŬ”uˆ(x½±/Ï®Xä²2‘<›o–(`fnB2V ³¼q³€‡¹…Á{‡ŽË0нM‡P†3¨1¼D¶5”L&»Ìï€Ø2ÑAkÒiÄ—SÕN–_ŠòN—/àu/nþB9¢Þqø?Y8ÜŽ=É–k²Êr†÷‚’sE:8«êr‚@Y—$Gi•’ _ ƾî+w uxyš‡K–UúcymùLü³²>ò)] Çï*éÎ!²¸…†‰Z/òµäd›‰S~¨Ww\UT•áoäÍæ•n/RªÎ›W GJ¬XyÎè—wÞ¼k”½a&\xàpȨ á¥Ã,ýðæÝ«^ÿäwïÞ¼ÿòí‡ß¼6é»W¿ýò_¾ÿÞþõÛ7oß~É¿þê…­X>9Û=ã1§-ÙëA¹åúôÛ·¯þá«§¿€à¾€ž\ü÷OK'ô_Çx2å NüB)Ÿ²ßúw¼5õb»öü‘k¿{ýáÝÿþøæþáÃû¯ž^½ýþׯ¾´=mýföë7oߨ×>I?}Þ®£õ@¤ÿ›G+4t?^±ê0ýñ<üìáf'“…Á2bǶÖrêž#ñY]¨?~ùÖ…ŠŸe„Ê^ )$Ü6u•¶ÛU+„{]U¼XàØ® ‡Ó‚xÑwKr‚–T? âÈÛU!¹]5ÉÎØ®’d¿ª´é\¸ëªìWmó_ëåÈ÷W!¹IcvîvU‹|ÝmL2ºoc’£ÅûvUŸpß®’„Wu/`¸œ$ûw#Ÿ,¶®’ä6rÈë²ÙÝFN’ÛȆӷ‘“d¿ê§¿lõñ»O?¾Ã8£³­C„º>íyÂ0 ýêh?Ê‚ ΉÏ(¬¦ ¦ú£ÓX]ûð–4uDX¾ÒÙl”®òú‡‡3Ü?ÖíÌìH“=DËÏþÎ(s¬RùŽ˜e5W€ì6=@ÈÃ@Ú ÷H <¾7ÉÃvU5øù ^ó‡µýY²1£7[eNÍ3G™N•ØÏhJ|¬Šúv—dn:›% ~¾=£`X.|¶Þ ê2r »®”ªbOè3¼±Q ß[²€-ªY_–^®¶‰¨˜`Û‡YŽÑ‚¥y,¸6«Š½=¨ŒèìRÈ)Hmg£ Ç¡lyŸUi‹`';› êÄò2™½Sêd@JvÚ$‹NUw¤¸ M‘*P¦:cƒY‘ ŽOhY|ÿÉæ6ÜîŪuSå'´v®.VžœVZT:9PW怦¨(Œ€³)[A°[í¦wv(ý<¢µceuòòœö7Ú/ø³+ÑîÒYfó-K¬6:ˆËFùtgu¯\DÉé2ËX ù°öQ#2-½4:>Û© ’Ø”<‚´|ŠÞVU5w}.ä NÇ¿mÎxÛé-ë Óú=&;Ir?øNÕaqmò ¢{UuÅù(UËêó€nÜ”ù}4f=• ‹!L¼.è.h®K5Ç#9ß¾( SãàÃoŽÕpð ÆÌ«Ò·Ô* (qEôä•}Íž«G¢ÌÅ7O•èvšÍ\jÛP[L¶º18Þ;M‰¢à[Mìì):ê¡¶vÂrìÑ“õÇì¼p %ZU:re‹XÍÚ:Ù=&©¥äð¢³Å™@¬È=E'/ºUC·¬J.j,º eÞ1ƒ€}™B}R‰Å/zÎk¸+T`¥eô89棃¾l³2¼umAÞ¥9ÉÞ1iÖ íôÄÆqDÓVv>-%R~¬å„Í%2¶Ž™üØsaqŸ62hõÁ+~@a©‰*ø¾Eýnð±5¢1 XgiUaNÜWoI´µ÷S{¨^Û¡Õî{¥ŠKw¾¿ÇfT>?‰Nd(ŒÑ»¾H∪‰ÔDšu‘ËÖnùà8*Íš½ì`S<á‚âï(ù%ˆ g·1æ*g ÎRPBkõ\H÷•)Ûœö[P0N•üº3ÜFÇ v/=2S‡ŸoÝËD¶›ž?ìL†&˜ço”(YòwÝUböá}ûHmPê³s† xïQ<ÏÛ™¤wŒ=þœì RyÕ úïZL"Vã7¬¦P¾Í»‰ÉÜÂqç¬&PÝÆ.Q06G?sÈ$BÿvV]´ä$«Ë âSñBn.`(çLûâÔ|Ã)C° ›£³(Èò*Å»©‰£ä¼‘Wšäï¹›Pk©ëj”=C·tlŽÞ刄©yÐM¨jšæ»vGÏa!i…FA6fŠ»ªã•[[…ÙœX\<ìAÊLñ'h‘|aðI)pÞ´36Š ª5¢½¨9yÒ9Ìù.´G ³‰gã]ÝœÔAÆ –tqITÜÃz…µ}Š“¼¢BAQ6Ò°Ê`jŸ‹êUañœyhø¼ÈÞw²™˜Sa`iŸ‹Ç‰)ÃI‚²lC¬w+"®NsJfñòÞ¤ÔtoÀãì‘OºûuÙ¸ØN¦vG×xŸéóZЦ„‹ß¯îô&©y¨¾ÄæP•ÔHóô¡¤“x2PAã r¦*{4’•"¢ˆ“5K]TÁÊ #NU! ¨6¿í "LsóÙ(’K÷-è" oÀêìÕ š…˜ÓbÈIâØ_žÛ¯\¢jc¼³#ì\#zºKô öz]Ènïoañ.᪲§ÊˆåGuÏ„ò¾%¸D¿â¶‘›’§ccÉh§=‚›gÜhãå’¾íaf­Å£}Î$QhL{¡KDdå~éã¾¥2“§mÛ®ITç>¶f—èäàörÕkƒÏÞ¼®mg€K汞"ÔV]—îO÷ãÆ$3¦<’\"B©ŸZnáöE¶™÷L#VeÓá—»º÷Äù˜ûñÙê.H³Íõ8™:‹=aIµUN}Ã5‚t¦;”uuõ Gª(´ ÜWåÚžøTófb˜Q›ªÌ ”PE‡‡¾‚åkhÊà/q…eíxò” Ó"2I°Õe5e´‚?UMÄ-«Œö€ªBLëËS®H<§u–;{)½]œKT šF^îùnæ^R¤fÐTôÄ-æãÉœ4IŽdšœ&)‘oB³4{oÂÝt¥ÇòxY·&h‘¿áöoöè(/¡‰ì¥oЌέòmhj{Ò3¸dŽ›JDö“Lö „^ÖݨÏh‹¨*´û™i¦JîddýîîC˜[v#{/E%*ñ*Rõ wT²·›Põ }Â9Wi ÷2:0»Sä®[R݈Î?U÷‚n•Iò’èj‰Ô6ºg¹×ÈØ– ç‰q}wóLÒ”v(OÐ$]£'oÑÃ\UåÜ£ôÿ²òóü švøpLMÂê²î¸foÉl8z¶žG?KÞ¯IΨ¸@9{n2]ozÑ.™Ê’Ô°sáåŒû‡Dw }@‘‘I§Þ$sõÝ(Ü» ""–gx¡òñpAß1Ÿ ›d4eVÏB+.aº£à—ìÍ4•gìg'&åõ;Œã’¶²øQõØ”$޹¤í€QFŽ|R†¾#J.Qµ¢N.¡“)d*£•gVÚ¼ƒW.Q>>.—ôs‰îã8™ „JóKAr„Ûn’ÄÓäúa;ÞØìùßÊÏ'öçbv„ý›æ!nß-˜ÑG‹ï+(Ò%\ì‚+™%ÊûÒô¹"€%Øs›O!£¾¸,„žúB¡n aõÕE,\(¬¯@î¢Bj}Ý2Rh®/îB|]EÔðÌAa×+f\ 7výää [v­öoüìÛÀ!@úàY£…`l߃–êö½Œ÷%î;¤Ó1÷}•{ƒPußÓ¼û¶OèNà¼Ç„ßû±tî?ó’÷0€Ÿ’jÈP¶TpBû_ 6ø¡®8nT…1t ¤ò“!ŒŽÌ÷åÃcd—ˆ‚p·X*¢ŽlÑKð+v´ ¢ |C±T#'™ ˆ,9 -²  ê]b0œÌ ÍxºÔΫŸkÞ˜7pzÜÈ9+Ç~xò%‚áƒP"ÿ»H@GfS…R´&[d"0ïøþA8ºÖ}’R–U·ˆKÈ/O;¹Éy^ Ü"ÏK$)Sx¥ø‘*£a¶x^$[y 2mÀƲIJqéZ6Ùj°”.OSà ‹öåvþIB©a—7ô17ÍÉšÅ,£Y“${:åoUÍæVJ'6›Û¹Tï`¼!³‹›u°â@[9Ä¥#sÎÐäÛ‰]çÍ:\ Àp’‚¤ðˆ»¬x|¥ËŽYT?DkÒXUB\”A¨ 7àzY JÄ@â¢lÊ,to,ÓÙ¸GTKÔpáw‹j‰â½i÷ z\ðd²%êÐPsƒl™¢aÒ"[¦”µˆå¸Ì©5Ë·™#¬Ÿð&ª]‘) ­¼ih…5[yÞ=- š;ß2ãŸt¢ä¯¡U7|ºY‚R~* >z¸{ôÜðgVÅò.ñÖr~倢þÑ¿pRg ¶]ø±3ÉØ WXrÛ —n˜ùÇô˜/“)§Úû­?n~7àfBá›}ªÃGùªÝ’%®(€Y'õ/°‚Ѥ¨'Œ ÄõµÈê TbD«Å…\ ¥.G"Ð ¬Ab·€ÀÿÝÒ+}‘… ʰõ  k»ÜÀ$KËÀ yÛ—nÛ à<ùz‡Æb"€4I ¤$ \¡F (9°ªÁk7< ’ã†yAgç s-&–&èl“]»~Üuã鮇ç/ø¸a}þ ¯bˆ‘ b¨"F‹È£n»¡“c `^Ó '¦ªí|K/÷Ö,¬Eµªã¬A‹抅rl|K·¡T´TÀ-±Òw‘ zÜ`,ɪ²©‰Gêë‘Q\Žë8 æk­‹né05:Pí±¸Æ|£$]Ûù–®yçªH CZ^õG²C_çNº4ú_ õÀŒTÑVˆ>bQ\ëúco?+`d`ô±ª‚2z€jwå"À€]GµWƒÀpì¬Kß©D|T(ñŽuéÛ›8– ‰ ÍâÆºôMQ•8=°‚šy¤LGì©B$ŠÏ Š^HÙ)GIlÅyPWP|ĂxÑŒ¼‹Sr@Í ;aëç¡)ôEWÜ Ê€ÓBµÁÛBÖcÚI—î£Åò×¾â[ £ád¤@‘6UÜ"‡D°ó±CÜSe.ÕóúÉDào– Dpp!‚Œ¿PG…çÅ #9Ϩ6aÊyÖˆ0*” h"ªï{´çµJ×+ в€bX*h:U_AUþ2†ªÀë¬=ªÝ36‹üŸy ßN[Ññ€!^Øsg\:Â)‰BÅÈ5R¥?…“çê ®ˆóìGÄŽ”ž=ÊÝGÜzv¥ë­Øöìª;°âß@S£ 4cäsAU}Ž Šk‡•vÎ¥Iš¨²÷û‘èȨ>Êó ÅýQذì¬Ë É]ü9kþÅ1˜³Gñ`‘7!ÖeJj¤KX†Ñª…¤K/¨ºz$]¦…ƒu™ÒX•öȺL)BÁº„zî Ž¹‘b]¢Ê3/éeÏé9’Ñg‡¤ËIu‹téKzˆH—@µçÎMñâŒ;ç ï’è,ä\¢›]Û‹Íùô¨‘’H—0¿Å{é2­NAºôþ”t™Ä’XœË¤Ä¦E¹¼º±åÕÛoŒKwÄ)"ãýÐT´NŒK´J7Æ%–OV­62.‘ïÜT‹ŒK4aKŒKïþñxñ¢å'ã®ŠŠŸ‰q¹uã+•D¸`\¢ò̵˗h5£.·b\&ŽÑÅ+h+Bu Ò%êXNU-#é* ÆšH—+“v‘.aœ “¬KtÙé7Öe Võb]¢& KÁºôöU|ºX—P·|c]¢©Éyc]zO)>K¬Ë«sQ°.½'9•d]’f½± ]‹$×(h—©÷ˆv ]j\¤]¦~Uã"íÒ+vº0Âj°²X—iäÕÔ¬Ë4VWS±.Qã³ßX—¨¿Þn¬Ka$KëòŒÅb]B"*©X—§‚ö$]z»äéRù‚ty¢²×ØFÁ%\³Aºþ¤ö©"]ž‘ú¤Ë“.ô5'&‘òçÑpŹ„dÞ8—g”]^œKHúvyŽà«í’«ý°#ß#ØäA»ôìêº-k—ôívî®. ©6X—n ïZæEÿËu Ÿh—ç ªxÐ.Ù¼ë¼Iò¶)àOîºA¹„@­Źt.tÙ¶—°Hfp.Ϩk½H—¨õµH—˜u´é±Eº„$Šb’u šõ¹m¼.ˆ†é$]ž‘ˆ¾H—Œm‡g?„¼.¹M´yúëu½ëèqc]V–/^çÖ…¨/Ö¥÷âÞS¼CÚÓ\%cI»TÁë¤ÍXñÑÀŽ´KH¢_?=½uh—D§¹øˆH2 Ú%$ºF´Ëï¢]ªÊáeˆd°Ò¹jƒvéÝÂËœqA½Y<5ÝL"tßsU¼ý°¬ 3SÖö]Cû ]"ȹ ÃÌ«,ýö2Á‡§·æb]-m¤„s©kdvB¢ã2MÑ<”0_!QîL\ðê÷¼#Èà–¡ì Ði˘vêýÍà†D¼Påàã{ª”KH¼“mÍTÓú‡€¾‹„š£Ø~x¨|¼¼ oóAˆŽC5çé«€åϬÈðg ™7Ú%*Õ›_T¯1_ÓYeÈ–g…v"ꇖâš0µpÐЯ‚ׄI»Ñ.ëÊ; g°Fïãå/®øçò)=‘ŸùŽ=!Ð%ír^QªSŽ©¼[Ht<`4×5r’!Q·)9Ò”¤ñ’[¤K¸ŽÂiGgµw’cÉžp™+ßû‚  ËNiÑ@s|CÓˆ¨¬Œ¾(ÃÕ€$j–DÌ#*Å,T¤±g!'Ð tu¤‰:Û¥AõSf9’I¾¡=œ7Þ%$Ì"ÔÈ;¢ŽØ¤Ó^Æ[\‰½Éà%|KÞ8X—Þ!‰ÑV±.Ñhi0 +Ö%šS‘z¬Kô¢R!']¢n²ÊÖˆtÙÎSA\q.qÂé&"]¶¦šï‹tÙ¢ `D‡=‰°oñcOžS%†˜=«¬ì¤KÏÉê{¨z+V¦p¶ç1Ò«·'àè> ‹_.:wf.‰ ¯{♄ Á{DÚ¢ôN€U“|“,’%ƒýf-E1¼ÁW’Hf„ÉÏ bSnÛ'÷À{±¼šè &ÙkE™±'$'8î"¡4S‰LÁ#ÎcP]<̃°ªd \°WoLR†ÆÎº4ƒõxÞI—<­„ìÕté’N¾ Y$.QÙ/2MüƼ„dä¦sé¯'ÖËŸî¬ÿpÒ ÄŒñø¡¨›dÏ`8ãÙN°ñþQ"ƒãÆ1iEäèøÜŠÕHs§Èë!ÓÇ3öÒkžPwÂЕÆ¤"§¨«\Ü)ÊbŠz{"'yF(Ù}"0™Žµ( 'ÖeSŸºEºDm8.› ]BßYb,H—-©ÀÄ"]zùwøNÞƒ¤­ª¦Ç‹Öåöæ^iïr= z¹QÈ€µhfÈ/7*B"aŠ­vF¿ŽEhCùãDz+#ª±1®´¡m-ÈscÄÓëÁT Â"ᕨò<½<ú½v"ðn,ÁöC«2üƒ¨ƒµìç2Á³Ðûcñ>b¢¬)¢\.>eP.‹Ê‹ryÈ ¹8—I­ãU§:—Ñâ\vi7ûp.9å½ï4Ktgª·û{'šÛ;`\ZÝßÓ ‚i©v”Ñò‹qéíÊI÷ãÒ;*É %ã²%•.Æ%ôŸç{0.½ûï,Æ¥wí¾1.i— íŒËÕïdQ.QLLHQ.‘ÀÃ)8—¾kû+çÒº@œKx¢Ens.QtŽ|äà\¢é›^OœË#§¸¯8—W™ÞŹœu92Ì´9¸‘*p‰(!y¸Qá‘ͼs.=Kë-Š\"4̽UE.Sž÷ 8ç„–Ý_c4Þªq™R”Î]¤Ë©*y"]FÝ‹t­®/Òeba‹tÙ"ß‘.›*5_¤Ëº²‹X£Iì¡ð†AT‰¤D:̨;oN5êÛ| Ç#Ä·‘oî(–tßQS¶É¡§‹?ùR 0#Ù`Aàñ3&øtþÞà­=…R“‚Îß¶XgÙ‚6æÀOÀâB² ¢l?вÝX`Ìõlá5×릃O ƸÏdjCèMzÞø–G˜.BT€PÈdTAKUXÈã†e#•oxzœŠí)L 3G8)`3D-˜•*d $áó¾9Šà ºYNaYâaÕ¤ÎfU¹1.AHæ ¸Aì)b= @ìÖ¼Q.AÀ4)ôäç|ã\b¥—[òù<ƒüH)b:õ–Ä+H¸­×y.$— ¬¯ þ ·])¤ Úµ‹ë8àßiFU»AijžÑ¼ž ò¼ºÙ g뛣Xô\u¯öè†iƒÆ`CàÞ³¥h˜.l|6õö ô%ª9€°Ï([¿Pø‹HHýäñöBó#yvþ؉¿EP`®ÂŒ8@ Šp*¸öƒK ?@Ðo”Kæo….¡Vn”K„úDÔT4’y£\^,6U°oó. »€ÕU-E¹ì5›‹¯Ø£–ãb\vE·/Æe"°‹qÙq¹Èq‹r9”yQ.G”!årDÉÜE¹9~”Ë‘£‘xP.G‰vÚA¹«&Jp.¯¶áÁ¹‘Á¾8—‘Þpq.GPVé2˜zérôh}ˆ¸§Pb.GT1]¤Ë1#š¤Ë¾Eºœá ÒåTû¹‹t9• z‘.g”G]¼KÐr) ÞåÌ«ƒw9W :x—sÅ ƒw9W :x—&é·= ’%¼x—3b Á»œÑ[¼ËÔÝÅ»Œ\ïröŲïr P¹x—3Êí,ÞåÑ9x—sŠò°x—÷1x—Q¶4j]"ww¯·ä‚¶×drɼU»…R}Uí’è•,ÒbÊÁ ÞeŽmÄKýh/i½l¼Ë$‰Å»,ÁÍ\¼KyŽï2E!¹Å»¼Á» æ"^Ú8æ;ñ2)P~/“2,/âeÒaz//®h/MBú^0/±I æeêQƒ2˜—ÀµÈ° æåU´,˜—©Ga³`^.Zj0/£ÚÁE½LQìnq/“J6_ÜË4ƒIäË4E£\äË4£Io/Ó¼3’6Nì"_Qât‘/¤:k‹|‰ú¥o7òå‘Ôq‘/WåµE¾@D/AgçÔz X†šð%l¨²ˆ=e›IÀ—+¡bá—HøPÜ›øeb 2bÕ0ioálx'·BCt÷ˆo*,×·ìØ¥[¶º±Âë@‹n­y|a<"ÂôÈj#<¡|dÔBV´ôàˆK·BM£ªEÐ ŠÉÔƒQrPÄNùXu¤œÀ€ç1䇑‚_4¸?ŒDU¢Q~Ñ)¼˜á^ç …ãBŠ”±êG.â ^r¹c•ß\‹ Ž&”@jÐH¼—ˆ%*ðu4­½Uì”y S\ÃæÎ ºD}à;t¹ê/èþoº5Cµçyƒ.[äÄtÙ¢òø‚.AÿHÊ 'tÙZT< èÝXUaMÐ%ÂlõÆ+B@û¸qZ Ç<ÀËV#3ÀËnÑA—È‘K4¤¢§È%:žör IºA—ë[Ð%$·î<&òž]nA—Û]n7t¹=\Øåõ‚]^Øe«9$‚/[´¶Zðe[@VÀ—ÞÏüV¶ª>:‚/1è’¾lp%”@Nø²Õ@C¾ 6ÂB/Ȉ®GôNð#ÐKHÄzÙZlè%öceh ½ÄR"@èeklz‰(¨’à%$ôxÙÚˆ*”/…vÙºb »lý–,Ž•¯ú—.qXœ7è²|p ‰Úõ¸„J}à²õ ¹p þÇ¡ôq—ð.Â-pÕ=WºK!pKHMn‰’ðTÃÀ-qº‘Ú*Ø‚qƒ-±Mˆõ+Ør…_¸¥…'´)Ü%à/ ·„dÞÆm![[6¶sÞ€KHº`J—ØÈÊñ ç;€KT…'-UÀeSÁ]¡–«(üB-Q>ÝøÙm[Z¶lj UL¨%jÂsl¹ªÄ/Ø5áup˶€­À-Á "u4pKHXv6pË6?¯> ‰Lá–-:/,Ü’z±ía»¥n Éy£ì¯Òò ·Diy¡5>!p­À-Qmþ[B øS°å*?¿`˰ւ-!Q¢D’NOc¥é¤ 1W)ê­ŒV¹êtÒ%­£dýUö:Eª¨ŒQ½åŠC¢„Œ(°eí¯Ü©fuº£Ðý*墾òªöΨÿÁï©+°Ê ³„DißQz<ÊÆ­êäÐàf ×ýªqõó¯:è)ê6¯Z逫n˜%$Ü WÍõfV]ö4"Ë;J·'U¹ʻ£­ã㕊rÜqˇ„Àg”‘OŠU]¥æDÝò¢°ú•N%ëÅ^VUûC•†®ª÷GŠÛDe|;~•ÑÕó•|Ü*ìG¾çU…ÿPÖ÷*ÔŸ£)À*æ/®ÒVð?GoÕ ÒB¯Æyµ¸š èÎ[fï^= ¢oÉÕÇ Db^´:Pm¾«ÂQ”º:&gäîEWÄeù«è¼p¨öÑÕaõ:ˆ&У¢ÅÃÝ.Vx€;dé=*ÚI¬– «ãÄÍŠVWŠ£ª•E4®8ä«^Í-ŽÈm\L˜ã|xäkz/†Ç ±tAÙK—ðm"3%‡+u’[v© ”î ¨ËX9ª D§[ëÕ"r]!!f¨tX숥KÎ[V-$uG,]ÒvÄ’’=YÜ%÷,ßM¢Là«+Ed /^÷Ê(^E£Wֱ׈ޓÅw s—Wé•Þ I&©èM¢4iHÊ-•æoFºõ&iºmݳÅw‰rº7‰ò¾½÷ßW¹áKò«‡¿yøçoacù"ƒ‹´ò2üXûøúñoß?˜–ØÐ|g?8Ò#þOÿøúÝãÏ^>üô—¶ÑÃ:Me^~ûpð’G/‹ ƶ­¿—ïžÌÈ~ñòÒ£7`3[ôå7»ð”0ÿØ•¿zio¿µš´ël½ýµ½Þá|³«éüçmèÙ^W­¦óŸ·¡ß¯ºšÎÞ†þvÕj:ÿyú{Óy"ï~¯ ý½éüºê³6ô÷¦óqÕçmèïMçãªÏÛÐãª?oBDzæ…í|¶ ý»§ôâ ;ÙAçxÊþ¯ØAŸÎø×ùÔ^üýË_pÊÒ^C(¨UÌfÞ çÀ”Ú«K›mã|ùæÝëÇOoÞýúñ›7¯¾{ÿáÓ›O_=ýî@«1ÚÓëW?}õŸ‹›|»¡pÂôÊJÎ#Âbüù«}õñ›µ {»ân}ŒÎÞͶ`oÎej÷ñµó–ÿÜÏ(t!°ÃÆò¯øù‡/¾@·ÍY§wÞ¿ÞÆÉŒŠìo*‰öñ8—í°Yÿô—ùé/mÃýî~cg-ªŽúÿÚÎóÑoÐ=&ݼ 8ÜÕÎèøgÜ é·‡œ䙟Íç ¶¿=Ï6¤ûóþì 2SõH –;¦ð|Àôh.n_üò¿=¼ü÷ô¿^€Hœ’-„O× þÍ¿ù4SRÄò–ôõ4Ó©î{#:ÙÚ+û¤ýÏO¯_|a÷®xßÓ·/ðï'Lå§á¿;éŸÞ¾ýÝ 7 L+~b³ìµ™êÓo^ —íDO¯1õ¸þxúš7œ(Ãòôê½ý‡‚d@û÷·Ÿ>ð/{§×ûeŸ~xóîÕë&óéŸ^Ì^œOÿÏ›ÿóÆõ8»ÝEw´ç³]ôæßݾäãí¯÷~açñ~ü·«>Å;Þûºõ7ÿ†_oâWÿºÿšÇŸÛüÿ~±ç_˜åñô·œ„îÿÙòœ·gÝ~õï·ÿðþ~‘súá×?*þƒƒõ‡À‚½q¬Ïo¶•ò'|-ï{[&÷Å`/~¯Mðþ"¶AnÏùNÍüô ÿêã²Ç}»]û÷ËöÛ~þVæå=§6ïsóÁ—ý‘ëFÆfþ ×.Lÿöôý¾D~øá>ïõÚç~ÿZŸV~‚üuÊçÓy=à7ßÜžþJ?±I}õñ»ý‘ï>›|QõéSoGíO ðV¦Ÿ¿•ýÑ=ö§÷šŠ–ÿÔeùÐÄ4‡><¼»öa½a‘Å=ºO¿ýÞ."^ËÓ‡ûfïYdçmþÿå÷”áG&ü‡7ÞëçvæÿfÿÌ7_¿ÀÍY²=€—Ø6õërñhý÷¶¿æGæÐ<%×Û?c=.<o>øÇÓoÿåÓ·Û>¾û¤g¦‘ø/’õß|Çÿp{±õ\óuMüþÊÿo–Žã÷Ô¦c)6¨M³ËméŽ?Ð&ó(ÏõŸ_ÄÂø/þ}¶püûä‘tÍìo_½Ûoýövãÿì÷úé/ϱŸ›xÙ†å&÷—/¾`üôý«_=½ûöã‡ß|yüç,Ãì³=q¿ü퇾zúöÍ?yÿú7ߨ„~‰ÿyþöã«w¯¿zúµÍЇ÷_¦¯^ü?A·òöôÃï¾ýå_üú›7ß~û?Ùüÿ `Qbendstream endobj 103 0 obj << /Filter /FlateDecode /Length 17035 >> stream xœÅ½Ý²&Irv?A;¶W§©£ªÊ˜L‚´¦?ò‚äÈtåEs·gÑ@÷ôr¦ôôJ÷¨/#OƒœmFÂŒ;ÇÛ¿ªÊ¬ŒÈȈ¨ˆÿüt¼œOþOÿû»ßOøæ?sú¤ÿùÝǧ¿üþ›ÿñߟe"/ãçÓ÷?|ßœO-½´ã¼žÚH/Ç(Oßüæ¹¾ùþoæR ?hùåªiþèûßóWÏ?ýüùoŽ—£¤vãùãõæ?~ÿáG}ýQJ/=]Ýôo¾Í9¿Gz~ûæÛ4ÿuôþüóû¼Tyþùáÿé¨ùùZîñþ÷Ë“„?úÙkçs¸ó·×Ñç€êÓ·©¼ô:ÿÑžà˜×>Ëüåùüîïÿøéçw¿ÿî‡?ýø»Ïï?ýøÛçß¿ýüö·oÞ|[®ü2F{þüÓÛþáÓOùO¿öyþë‰}úñ»ó·o~mÃ>ÓKÉãzúþß|óý¿7ùûoÿÓw¿úþýÇwþã2ÇûãïìÏ2gâzþýû·øñÓÏïcNÁoŸÿáÝÛŸ~þí›_ÍÇÁ pÕÿI?9¯ç?~øôù·Ï?¼ÿüëßý<Úwøÿ^~øéíÇw¿õ§;ðtºd}þü|÷ݯ~þýû~øÕã¡ËùïÞþôݯx_ý÷ÞÇÏïþ~ŽïW¿ùá‡w¿ûìxzþôƒ_#io?8’çÛz÷öóÇw?~þÕ¯wÿô§Ïï~züùÝãbßÿûÿç7 ñÃûß}÷múõãz¿{÷÷ß/eA~øôãçï.=óo¾ÿæßAªÚÓ~ž2×Ró?¥VÏ—«<¥ÒÓËÙŸ®ÑËüñÓOïžþß§¿©/×\˜OÿeÊߜק¿™û¿s^ézéå)§v¼¤ñôñ›ëLÇKn7òá›ÿðÖ™ ¿6²R¿^æj_X7²°Êüåy®¬YXµŸ/µ®¬YX=Í•u# kô)œ×ʺ‘k÷:ÖMË•ñ4^FÒY´Üy/åJOù,s)CÉýÕóñæÛ‘뜙ñ|â?ÛKšËâÒ–ë9=ù–·>Ây]õ¥Íé«×õ2uàÇ©gk/gÕ+|Å:kRs#Õçdç±²„¬¬ræ91çÂr$°Ò/-­,!UK%$°Æ9Uk^YBV–ûÁZgâ—½>¼ºoOcõ—4§'çñRså œÀ9_×U[+ÝþlsŽìÏùÚ®QçOËóüëøÂëÒ:;r¾íéì}>bžÒ:Ÿñß}A¬Ï6¦N»XÅŠ<Ï9'õ)ÍëÕrqDP¤O¦?Ÿnµù4µå› ŸæžejÓÆqÏMÏ/¹ÌÉŸúåšc²+ýoÿ¿·?ýþ êþM‚ªNéùÝOï ™ïIÀøþÛÁñ½´|Î1¾V_öPaµ`ÍÕãÀxlýW[9eÀÄÀÊ>¯váýÏm>c )/ËgÚ‰@i×SéSg•lÈ\òÓ.)}¾úF ÌqNà,\åé/“Ѧ>IÕ€9©m^·ÁØàuÇTóóÖí¨ºÊèPQ¥Î§Ìö£4Ÿ¼Ìç­×xI‘üÒçeJzÞ£¢Od> o•æ{eþCM2þ«äÚð †´—>8Ï©®6é:±7”4‡ÒN"ó-Îq§ùÄ7¿&²à!.Þj¾È1¯sUUJóߦ@^ó׉Wžëu®¦rb’șʠU(…:m1"ó§ õr6þ möTŽùvt£¹¹OÓ ©b¦ ±wXðvOÞ¨Ìõ1×ÜåÁ©©sö± aÕqL5ayÌu!ó ÆæbÓl5ñD24‘ô20÷Sªn"6o¹Í5ñqÚÀ=r+uªCæ¿A¿·9G¼L¯x¯¹°Jˆ Œ!×¹L/›w޼αhúF…”ç:'–?šJ²ÌݧNhþÃDò1÷ܧ\LÚTè¾\æüñµäÃVG.åz©ö4ù¼°‚ò|¿7Rle.ŽÁ Ÿ7eÙ6u ÜòÜüæÓZ™O“§Š»x™Ë„,g̬½¼œLÈržŠûÌDŠíÿ¢=ˆtú ½4"ù²Aàuålb6Y ˜°×‰ ÎÅ:‘ Ó)f…NBLÎ&0_¹S‘VÜ{NzîDLÌl '/\MÌæ8«ß»ø¯ù«Ì“³yÝys!6•6¥‘nËuN{ÒzËÝäl>ç)É›‹Ûà|œ“+g®WŒÆÞð!ÄÄl>yÆcbb6׉¿ˆ)³9†CÚnêdDKsˆc’–¡„ŠMÆCHZn—«2ZǺóu"&i­¹è•¹$¬õa¶˜!”´‡ÌL%AI›òÐxa“Œ 5Ê)Ť˜ Mv)¬Œ,F‚ÙƒZH¦  ¬[r2% ‚/ m`½ðÂS}¦-’D¤Prç%g³&c6á\í41™HÑ+h§É˜½&.›všŒMÄ­«6·˜n×9õ*ÛE!ÃëlXj«Í=¦â:sªie´D!›ïLj¡MÕqÙu2—~Ë”±¹|| ™B6/t§!Šb"n ¤PȦ(I·")›«ƒö_›ëÙ€JámUB6W··V%dS¸Ó·*!+¾wAÁš”ÁúáÓ`*1íÐ|šæRæÆ]ë’²ì¦HÃrÀݳI›!’²)­q¨n“²ì{Ly=Í")KÒI}*aÄ?«²©·ÿ–ŒM‘å»ÃŽ`Šʾ‘˜Íwx4"³¹Cp?é—Äìrã_³©h9¨~5a® {‰\*|â$9ÃþtiTsÝ‘’%h¸%'KÐæb¥eÞ³m¦4>N¡¤ÍN¡ïóÅÚ°5ðNE’6å‚SQ$h°Åx§¹•³FY%gSº4Ê*9ƒNæu›äìhÚ{“œEj¿Ï Ɔ€÷ùé’3È6‰Œc^fZyÙ.c6A1;Æšê¶ÕL IýuþÓDª6èqh+Ãft)0x'âæË8(fǼÏcNÊ…-‘Ç[C Ä`"‡4ùØ»Kâ¸(gØ9ð1_½íÇst|ácî0Å~åá°mmùåä½ÅìÀVÀË$ŠÙ1…‹ïwÌ Æöãî‰CäÀÈç\óÃÞ€˜aϦ¸Ž)ÜPG«ÚdF¡˜S´5ò© ‚và€ÅW37èŠû8§gPÐŽ9C®ã ¤S·š*¸`YA]˜4ˆPÒŽ9)¶x®cZ¨6 ˜ëŠÚ1ÌŠÚQdÂ\xsº1Y;JºÊÚ1|áe¦¶évó“Rs‰²v)Å GÒ,c®òW .! ²¨®#SÖŽ,=9ì ÿÓ9òLY;ædÚÿÂc˜¬åÂíýÂh†]&Ó¶¼0O&lSC%Þ¼Jذ·¬ÍõZxá*YÃ9¼2—QÂeæ“w޳IÖ·QЦœ¼F7ßìDšÏ^— Ád' 9K…§Û ¢<|Ø!9›»ÃÉMó4ÛUþw"PG&gswh$féäš½  MU$™ ¨‰\µ•ˆÄl¾Ò&ŽÄ Vr.‰ÙE«l™C˜;Ká­.‰O3@’Äl"5GcºbªÎ8öG».Ͳ [ª Ù®LDB6¥~“%dS¥ >ð\sÂÅý‚ñ0ì:'5ÅÄ„ìÒÉú‚ábwp»¸`혌ÚR.ó†V"gbêŒ —9e,_0ÙLÆ&ÂËL fc8ß7ÌE“0v/"”°SáKµê¸¤W×%aÑû’°ùÂ:Ç4$ag¦Âžˆ$ì”yMQÕä‘™%ì¼$asmQÂÎKkb¾Mj x>…H°~„HÂh¶¹.ª‰S»â$b¡\^s•Ù `Û\ 0b"vhs˜ˆDl®^.¥kŠ—©‰‰P ©XÙg_~U±²{Y®lÕ–înȹ<`µÅß–AÂw£Âקɨ‡:– 3$ÕeR+$„o”ón¤^!×òöªÉÐú† «À#/+¥æpz,&®ñXoRÅW®%iHÉ˪5äLË®<).þÊ â!ÕD±-2dˆƒ‰™\’Ä Iä´’V‰®NiJ½!\Ò †pö¨×ZúÅ€ ‚*¤µ_‹š2„;…TY=ÜoâêÎî¾Òˆ†}ÑšB]ú¢Y 9ë¢}+„º­Ú”-^MÌó¢è Ñ–ÂÍ B¨GZ6 C¨Í¸§p.»N…”×e_2€"¤½«B¤ë²½pµeû«hí]MRvÚâxl£Ýë²Õ’ê²WH4ÅC;¶!¹,»úDÚͱß.[Y†ùa@Ôƒçð‡a•쉺òÜV1ä\홉dnnó"#ƒvQ5ãLvn·u5‘‹Î=·À ç” §Ö¤,9Cd½’´iŠsHÒŽãæÐjSЯä–%žxÝús`¡Ñ!DV,~Mo¨[º@²nÔc*(qd1áñË­j ‡šc®VqdÑI…ü˜' ZÇ2ñð':`(:¸è¤äB3gàXFÓ\' :¦ÐZ@=-çÏ^:Û`Šdàëüäb¦Û€æetŠBÿ…Ÿ´Fï~hÒi ÏÍ:°à±ÙÏtx5œûFwªŸ G÷³µŸðG:b"*7ƒŽ¡@’Â!äû¤J(~൅À¯Å£'y­ýÜ „^a?[Ûqèço :ØëŒää½tŽóDÉsŸŸõp‰Ê€Çd÷`]Ê1"§ŠÝñ0‘§‡cbà!åÍ µD¿W°û@Æí,u7 w®Ð•„Þpw·@Fºœ4’±F#ñöÚà1Õ=;@䣑÷žx]F" ¼ŒœHè•sGsuE8‚·j4Hn‡Ê;½€¹ÁN Á]üî<Â1¸ƒ oîN¸ñð}ÊQ„‡owæ­~P)Œ ¹SpEŠFñ@$fëÐý¸Ü\ÊååÅ\!Oç2PyC—ÉÇt™09Uèqäx}¼ wÎŽ‡kXÜÑ<íNÞÇ2pG0y^å,"ï¬ÊXƒt}¹Óù±rÝ1m«›Ï#çõC&ÜÁ=n—·;Ám ‹~¸¤¹xº3ý!Ôò·PÈCùA_ý‡‡×:&Ͼ©*^˜¾ÿñpì+<ðPA°]LqF€ô‰€ºuŽ„m"M1 |htÿ+êäçÐ \×{èdE(møQÀ<¶Ò¡®÷@ýJÁ ‚.Ga輓bF–ïÂw¥¸ÒCµ{ì Ó®¡øÔC%{ ë¡]=Ì…u¡Ø˜Ëš+4–=–»ÔTBšÝ`4…á$lSçç»ÕÃF߃aC€0 ¸L=LÛ  ‘°MWWáÆ1œÎ9IŽG UaK$“qèŠlŽ|ÝRÉZ1@Z`ð+ˆZ`Ðë§@ëo“Ô(;Ùð¯-ã>aI²vúUÜw"§¶Tņˀ•¼„'üMÐ'S°õwÅ¥)kØú>f¤z"¾ë2˜]]ÄW¬x÷D÷È*þ^zõ—¥ýDd~{"îVV¬®·S•0‘â‰L˜È%ͨ´KIÊD˜zP°Û+­€é ÉÒ*Ja˜ˆ\ƒžæPú|#§’#(m=U ”.1‘, «ŒŠ‰\2U•uQ,ØÏt ffÌ5íz†É&‚2!²Ò¨®;Ç‚9 q#Ny"võ©rI ¡=¦|“aNÊú+ó"Ø…•òÁÌ»9&¿L K)AÆå 2”5™BîD›sI/‹É86ɺ•åëØ›¡ÒSJÏ|Ÿî»WÖOu§)fÍ•rIÖ”=dë‹7W†Ñ\ƒhQ’%¯JoÄü5)Ü‚§DTí>Êw2ɪBê‹óT„NyS–f©¼©ª} oÈü«©²¬}¦hAºfqA5ѼöL¯qÇR=lT¹S™.}[B>y 9gؔͦ¼4í¸Œ•»ö8/{~ÛÃá9pæÕékžœ9äx´S.]…7!1åÛUKïà¯,%¯"†Áë2i¯"ì¢ü;&öÕÆ 9TD²¨¢•XjcÖˆR+Iˆ¥έ­…LÄjÎ&82Y±Îµ!sHùŒ‰œ å#œµ&fNîn6ë0€Uȼ°Â8{~¨ÈÙ-(?xäù¿šN°ô|<¿äæµqr?üV:YÂ.o¥£R†Ÿ–Öq ÏJ[Õ‘« ;ËÊéé‘~t›«Â¥ã]AÌ‹÷Ò5qË÷cbI÷YIGÉ9?~Ê×qsÌÏâ:’"]˜§jZçÿ“Kж˜%ytø-Èvå!_dL“'^RÌ4MmL“œ":‹H“Îô³ÒîôGé1qT’~î/øºŠ¿’o ÜßTÈ}€OÔhZ»‡s{/DK–·’§Ï„îÍxlgîñ"޼"xG4€Üs² ò®àWÜCÜDI±tÒ,7—gy@ùzJw'›ûƒ »ò/MÔ0r(j˜œ$_=O)šâPØ0¥4܃…i§à»—«ÀF¯›zhë&W¿­x2­ûúñÑ O¢@ƒBPg1¬05®{ÿz"g¿Â¶{„M rÿ+ÌQ…e!ø;$hB·V!’³ì',·`ã‡!¢(jS²¢¬wd· þÌMM•Gˆ€\B†F<ƒT‘& =IÊê%ÀxrIÈpÄ^Ã^åv?xd ›GÏ 2}•²É%.*‡m¾…@jæM+Á“ïP6”˜¥®õçaClƒ\IZ¢P-£ÅÓ5%cÉ­`aÞ¬G9 TL„E"†Ëñ2 §â›(j(¹)!, „JÞ#·0‘¸`ÛPìeøˆ~¤qIþi•‡‘”j¶ï •x)Kþ…‘‡¬ÔÖ¢DP…¾!<3O‰òå˜< ({Ñçkwjf¹ît¥f©k@ßfayj&3¤f–ù–™ýã©™@ê’_`€.£ÔL J\Pj&,,eP*5³¸CñNÍ’Äaâ]G©™0™¦ÔÌrÕ;{SRvU%…yj&^E™™Ž5Ï£àk~=Ÿ23Ôš $‡ÔL ÊÃdÚ˜P®¦„ìRF½'gPz†’3”5 Æet*;ˆò3˜ @é¦ÊÎÄy¡‡ìL LóðìL ¼•§gá­<=ˆÒ“”ž äé™)Vk¢‘!JaRz&å=)?ˆ²&•Ÿ „YEJÏ ¼'¥g9—ô)å^JήÓ6%f—ç®xz&¦„¯CCðD[OϼÏwz¦!ÊÆ´ôLz¼êrvznhu9;ýù”ž‰³Ýà…›ËÙáÉ\ÊÏ¢Gî.g‡?r—œ)›àNÐ\—³ÃG5\ÎÕp9;|TÃåìPªª'h®ˆäìÐ8=AÈ4WÄíPBš'h.ˆ4'Â?]Êô'S3Ë94Sžš¹"’±Óó¡=5óF¾ü1þ?RccbønëU‘ʯi—òB2^/ß‚.üÿÝN¦B$°:?§]XBk˜re YYéØKu8²³FÞY#ffl·XD" iRd@äX|,ˆ| «Ú×Ñ+‹Hdmþê©»}»½RˆÖT†gd ‰,ó ‘Ȳ”ÚÀ"XÐùñŽB"Ë>H ,"‘eù¤E$°’ýëÊYG,";k´5ö1"è´]+¿ZïÀ¶ùYöûJâGï+'ç}„| «@³‘ȲO®‹È×°,ÆXD¾‚UÌ;¾²„ì¬ÞwVߟkZÛûYm+CäHdõ]¦…D–Y`Eä+XõÚß¶Èjû¬ ¬ù¯%®g!‘u¶ ,"ÿr¬d•%V‘µiùö-ßÌ£XD"«Â ,"‘Õ^â’ 9Ãê!¬$";«ì¤/\iœ;iìëá—±ú±¯!‘•w)²³rÛYyŸ÷_Ìê;iŸ«n¢@"YõÕ³×/<{ÝlG"«m¥¾‰,‹/‘ÀöQßÊYi_¥B"+ï«THd5«f±²ˆ¬¬Œløð\ŽDÖµiTG"+­Õ•>>Èʯ®•¿p­_Æj›†pä+Xç¹Í½#‘umsïHdY>I`‰,;Û‘Õ¯Õ¯56épdgE+È‘ÀÂ1DNÚ4¸#‘e©ƒE$²ê&ŽD–•" ,";+î׎| kX¹¡•E$°Ò¹i^G"+í+BÈΊ2ëÈ¿«X1•E$²X`ge‰¬¶#‰¬¾íŽì¬Mþ…DÖØV*Àɬ1´„D–åG‘Èj[YGG"kÀuXD«‚?㿟VÚj¥ÙYÛ[YpY’;gÓ3B"Ë\xEdgmëEHd•}½ùVÝ<Žì¬QwÖxõômó8ò/Çꯞ¾áé)k”5v‰þ…¬àc`ù VµÁʲ³6iYæ’ ,";kÓßB"Ë‚E$²Ú.ÓB"«ï;ºÈ²t­À"²³jÝYuŸ‰fŽ×•%$²®]…D–e ‘¯cÕkgÕý µ¶ÛB"«ïöÀêi;ƒ;Ymßï„DVßÊ ;ò¬Áªw KHd»–Yi—4!‘õÊR_°”uWŽÈB.w °r¼ö߃äHd±àÊ"YcÓ—ŽÖylzܑȲD˜À"Y–0XDëº6¿™#‘•·áHd•}&„DVß|7Ž’ºq$²N×‹ÈΊº×‘ȺöY²³êØYuŸ/~ùXD"k»Ý«{õÍ›ìHdÍ3íH`!•1^KHd]›_Ý‘ÈÊ›7Ù‘Èj›Ò‘È{ s!…ÒAqÖ…DVÞ<ŒŽDV¾)‘Ów©Ycó:9ò¬juPV–=ÓŽDÖµK˜Èê›÷À‘Àjç¶û8Ye£Èª›åïHdµ}¥ , ã…|k[©B"+¿l¤¼G4~Ç2g‰Hd5$°‘UwÒ>ŸÈÐÜæ ¿:–±7 p$²òvÚw$²ê®„D–e‘ÕwÒ¾ÞÇ«e¼ÞQôϸŽ¿°\YBëÊ›OÍ‘¯a«×»²ˆDVE>°ˆDVÛl~G‹éÆ+KHd•íTæÈΊ1G"«oö°#…¤½x-!UvÉp$°YB"«n~CG‹ßû¯,!‘5ö§X(}gBHdÅ׳û­k/›=æÈ×°êf¡;XãÜÎ*ŽDÖØ|-ެ¬v\›èHd¥ílçHdÕíäàHdõÍt$²Æ6FG E‘‰@ä¤Íöv$²Úvªv$°ð![XWŽì¬xs$²Úfã:XéÜŸ^HdÙ'E$²ò¶¯8Xøì%DNÝ,EG«ì«Ù‘Èjûœ ù VM›mêHdµíDàH`µ¶ù  ,hŒ ™‰¬kó9YuÛ} ¬ñj Ž/¬Áqm;º#‘•·¥#+ YøÑjqdgÅÖ‘À:ó¶G9XHU $ÃÚ˜+IÈΊ>~G"ëÚlSG"k‹¤ œœ·yw$²v/«#UʶN‰¬-S@@äôÍq$°úu$²ö¬#‘µûÓYYÈÓþZGëì›'Æ‘Àºv/…#‘umÏåHdíÑG u'â…V9¶½Ó‘ÈÊû…VÛO“ŽDVÚrlj¬²íÃŽüÙ¬ UC·5ƒO:‡@äl㻑ÈjñÞÈÎ ù›7Xø^7ÞQHd­‰š#Us<ÅßHdÕ¨Mo$²zôŸÜH`ñkï•%deÖƒc! X9sr¢6½‘ÀÚ#¦7²°î–V UJƒ“8Ù÷3Û€þÖ<:Ô%|8‚da%dö¯$Nn):éȪצ ÈÂjøw}Mdam£^çáŸÒƒïB–: ú/õàkw¾rÞ=øÎ¥_{ôà;ï|ó?—|ɪ­>y;¢° ˆÞÞF¹ð…‘iJïaô áK¸kåX(Vw §…ãÈJÂAº¬7sd!éœå¡ÿÌ^y¾™5W¾¢êšh´¿ûÖ>õû+OÝ8ÿ:ÿëÂ_ee^ÇëÖÊøG»æ]æ—ÿçoš‡óÏy2ù§7Í»ªUÛ±¸S×ý‡?ýôæÛd?*Ï÷þïÞ\åùíöÐC–Ëå{èý7gå—µÐK(±oÝ´nÅRîÏÞq+¡â+agH öÅaB;gµ~JÖÈ s[‘Ï„†¶+fUÂJh¬`>ÿ¸q"ÉZ4e}™¬©ƒÝ<óóø„V¦Nsá—åér’fU›NèLafuVë„vvL@¢²Ýü<.¢¨ÌD*SµP5¡Tðþå}B#Kj-úÀ:¡ˆm:^2$¡‰ˆ4ªÊ't)¸ÎÜì9H´ oÍÚžØé°üB=¡YJÂešf$«ªGn…ŸG%TÕ0@¬š»ØA§ŸüÌ/l‹–Qé¢pä¹óÀ×Uû'YCÌ×ÐwC) …oI(9bΘÁúEÉ:蠛ܡF uJk–}’+c™ˆ1òiàŽG»´Ã/Û¬ù`FLPChV¤(#þwòºYÉö%_Ì Dɾ«‡çSû ‘CÌÓ±0y¯Ás†}VÊ_ æaã+X¾‡ë8ØÐ-«.KÂ.o ÝP<©±ã¾hæz»ÎƒýÜŠŠf&T±†n……'ÀœU|ZnŸ¥ë¢¤á#v.œë¢¤áóøÆËL¥ ßáóå]‰’†oþO> ÍeÔèâPÒà©ç¼2%ͪVð^è t²ãœFž)j¨ZavÊD(je æbŽ­¨üQ¡¤¡h…æ¢PÒê1ôúðÉ“µ›=/~»;JªVèÂÓÞ‚º°ªüU£¤UËz4€‚¯4Ó¬tÆÎÆå†ž gh§I™Fm(ôÃKªö1Ê™y‡ù0ƒrV“ºy%Ô†²! àf˜œÕ¬òwÉ>‡ÂófôIøÈ¡ÜêUM>ªö«Áïî>ûÖüÑ_Õ+“³Z\ÎæJ69«^ %¡6\„h‹ËÇÁg:48‰y™‹rV«>$Nøböjað7‰‚V©ÈR¢”¡2ß6ÊÇ$»†ŠÎ'|¹)«M_–§¤<;ÔʸxgeÃÕ¦’ü¡”¡E.4¾Õ°Ä­ëq+… .g tª2ôzN¼y5!«8_ó*BV{ö ṅ‡Ÿ˜Ÿ@ÊjW½´„ÌzëšØUT!¡24ÊrPS ŸRqæã U}HH¯†d~åœP BV‡*`%¤lÛPÌ£¡ÕѵJPªÚÍ¿ÝN( 5¬i¨ÚwÌ÷`BÖM–Œæ‹‡ïȆ¦@§Ñƒ~V;5aMÙ>]¶Æ”(¤ÍBÆÚ¡.˜ •¡ cVu,a˜Æ ‰ðWüø?·Ó•¶kHY;]ÿa/†¢€o™ê%+,ÞNõM–ëˆç9]b´«f$á­ŠIY³Gø»ZcÐ ¨jËD(d¨XròÖ•BÖüÒ¹Dñ“ë¼ÿ¤„¡¤‰#Ïo“y‘N kþeôD(aí*7b]@ üÕ ˆ¡4Š#”±æŸ¬'$óœ‰Í69{è 1CùG2{Íê[ý„ÝRÖü“ÿ)d”²æ¥öKœ®›W¢K¨ )ƒÇšKË>Æ#C×u"üB¡ñ5bb`ð‰4/Z” «;N¤Ë B݆˞XMœ’–˜lD^&SÊZ>¥g‘O)BUgå>0íøBŸã„é…‘gu™JV×Ä®¬ºrÉ2 pó¬r\ÉÊµà‘³Z‰$”®hÞ})¡ÀŒ‰™×I¨dc·R ‚„ð~1Äw.”Ú11›Èà…»ÄŒ †PÌPYB‰Y¹¸Œ±Å²½ª*A$˜MÊŠº}%m±qåf{¬]¦ðO‰ØmŠjƒµ†Ä´°Ášˆ•¦… ÖD¬¨w`Â˰ª—ÙMÈðytIÈŠ $T…2=Qå“HÕ¶ª¾HÂnjBæUn"¦&dø΀,«ªÏ–°wÚ4ÊAfÉXUáÆ„Òd¬ª­bBI(»Œz»¥ªì[ T>µJÄP¸…—©1/”lß»ˆðEb—ãºä{šÉ˜×÷M¨e2æ%´6¬ã"Ò…HÆšÛ”Ø A`HÆšjŒ&ì+&cMus&ÂcÌ[„ýø—ä«%ÿçf©OïêÚd«eýû)Ñjªù“ wM=x1ÙdJ´¬ÚÓªäÊÎ$«©ÞP‚"3ÉjjÌ™ “L= ¼ Ÿ&I´šÛÐP&ZM >dÞôCS1¹éµ[©BRjìÀfˆIµ‰îªî¼w‘huõnJw áÂkU¢åÕ¶ÖŽIWW‹æÔèl^V×¼V&\ÝOu˜%‚ Möèêι™ÿth µÎ|ƒæµ§ A™puÙµÍÖeWÇù's“€tÞxtvpÆ—wFâã«ÌÝD$[]e+ ”šluµËM¨eÊ¡«hB ©"Š~J¸ºÛØýbÊ"ЉÕ\îDx«KQ :êÔØ5ØX,¡®´É¶TQ•CWѯ„bÊ&W] i¢D&W]Ew'b.-C(i¨e‚Ì VW­Ð„à Öð“v¯”,ï:™PjœDø|UÂ5ÔP/õ&ùBqHNL3?jny ”ÉêzññØ|Àž2§_¸KÀ†ÜÅ©ãAí:ë_LD6üDÕ٬Ƭ_Y CÌï—PíÙ Vm&Bj@—PÊl¸i„P½áyxÀ\kDx+Ôy7 ª gÎ[“0˜Í•H¡–Éo~Y!/Cø£$ »}¨e6Ô­%¡”IØPQ›„‚ö‰/›™žf¯’%`#ûL :٠£ªë›¡â¯[$d´é€T³w áW ÙÈþÀµkn6¢ ” Ùðó&Ê@™ ·ÔÑÉ´Ä鲡† e LȆ ¥O$þ9$e£ø¸GÖˆÄl*Ý|(L½"™zb¨ˆQ¶&U- §ÄlA2õÄDlþ2Š¥{D\Έ Ú dݾ€<ªNû¯ 9ÏåÊånÊzwC޼ø!¹:N7jh¹UÄ'‚qgMèE’XQ­MÆ©õU~l’Yqº¡L+³"XBcD–hE@…öŠŒÕztuùpƒ¶¢º B½‘º½h?Šø»é\QµŽò(óº"DY“ ^&¢dÉL¯ÙŸâ\ìJXջ˭ýŠÔÅ´AEŒJÁ3ƒõ]àúѹ¢¢^·v=*Jú >2Ï'-žóz†©Ö¾™7ç9§ZofÚá< Uä[èÔÀãRUÍÁ÷‘ª¢.¡NGÕ¹ÁN¡å­t>|ôõ3dUýÅ÷9ÓzgÒΣ¨õ¸Ô©—§Uë;I¿ˆN´ÖRÇržz­‹#eR'ckÂ@ÓV§gëHë\'lkTx¬§ðGo*?©[§'žuš·.N´7yà·v_cõ °EÏÊô¤ú0J(ßBÁÞÖ…˜ÿÁšŒdù0:;jÜôaXë¥"äbߥCž’Ξ„ÅÝÄò”$ð’t¦”"M«¿e"÷ŒÓ'SFj~aúm&â˜|;™{{ {¥]*wꢂì\HÖ²…+Tަ‰¨N¤;£&â¢(UÁ¾Õ„TkJx\ÒIòzMfww=c‘-,çYé÷yˆþµ‚MJW¡ ®t·“ÜMWzsç¼\yÉ:!ÉÝWúíN‘K° ./߶܆Ö:‡¡4¹ 6¡.‡¤9Å Šóqè¡´ŽJT/tbZû$: äç,¨F\„dµ=ªîR¥¿´`‡ir²6o{Äç¥Óu—? ³;JZ·I~:xK?†T›œÀžõêè(žˆGµåK.¶gÈ™L³£+ýîôI—Æ×"§uïãZÛ¥Ý9¿ V|QrøØø¾åD/Pÿt0ÈÑ^à}¼„PÆ ìiÓÂ[_Ú3“;¿X]pFèò/ðG'(dp†ç%pPàv§þTh¡Àé¿FŠÅÖEAÌ‚FŽ¢E)ùîHGA(†â£hH©Cuˆ=bR k‡b(U)KQ*òRðñ7g ô(¯ËðMAð+X!ž‰ø¡Za ‚HšC&bµ\Ò$ &•š«Gp*ˆe&…©(bøŠ†Ž,® bŒm¨3Eãÿ*õ¼£’"+ÐT e2Š6EöH[ÁGP”¢q‘cE;+ŽÏu¯ Þ£ß€þ¬j<6Œ Z™v= ÇVâ|ˆr°²Šƒ{’}nðd Òj6Sñ)˜ù(òëOë…s­AÑ‚†k œZK ¾]W‹}N€2©9¥Œá{ü¢0¯ù‹U4à¯æ-XÞŠ¤2\lñò: ,LÚD )«’£ ³… –=  M¬ áë‚î6i qÔÑâ2 ^¬ÎZ'PØ"¤VÅèK/˜Z.QÅÛ§Þtë‹!ù’˜dþáŽÚ S.Ù/x(Z2 þÜ )€R.'G9­§†Ë3(WQ ÏE(HÊ<Ö|…‚ä >S ŠÕ.IÙ#z<æEœÌCîDÁ¡TY̯(8¾5ýÊ–¯uËQ ó4 %¼ S9 ÎÜÀ•îQwõ*#¤ÀpkÖH±’ÕÌV`fI9îMJÙ'ÆbYTÊAÓÌ3X¬ß²a,h†–zÙʃÁ±^ù!Ê•¸sw”OcGéscÆ„rnË„aÀÍsw¬¬¾²y˜y€Íš[¼çaã!Om ZÈ%² ’¿bº‘˜‰¥„$EQµ·æ¼§¿ºÂ¸³,[ÒötgY6u|dYB£§u5ä~':z–å¸<‰Ñ³,‡ç7Ý+ï‘Hè«ó<\Õø >ë½ìµÊï•ç‚<ÓÇe†} òd;ò*sha’W©„dP7ºà¢î-á.MMTo€$¼ÔW%Ðõ|R$0™”;*eƒ#¡Ò@¥,®¯J«&F¹V{$¬Iñ!õL¹£Òh(ož6hõ¹Šµ몆k÷¬«jä/é}J#cHJL*¿Ñ‚]¶s³”uë@ÂHL³Df…¶Yî@H:ha“Â)„&»§YÚÙå\v: Ÿåu7ÌpµÕkÙ13œuº²ò,ûaêy–v¬[7ç ïãº}g4uÕn­4Ë®}X9–8ºÖcÙû±]^R{Øí²#m*eå(¿rœžöáù•p \‹Ù“áOù¤ôJø×ÏÕ|Êãöy~åð6•w‚%ZXóxæ –+œBLĈ¨!ÁÒÚsLJ°83 Ùˆ†#J¥e ·”Ròd|š/‹Æ° TëBƒYF,…¸éKC÷@Ord ãK* d0ÃÕ§„EÕ<BhxÅC/nœãs%ýJ¼ie™ô4ò­G8@+’G˜sTü~œÀWIÊsÔ‘Ãܽʟä±ä<Ô ì>ºœt(xo L›(yBã+œ’Noéë)hα&YtÙÐyGç1¸ñE¡-y÷x¼Ou (=V'?Ä!¸}øé]5²R*íi+ù#1¡ýŒ)¹¨ò}TEd‡öã,bF—Á<ò"î¤4LžŠÎJëÁùlî›ò³5boòDèü8_ƒŸÑO~cñá>ÅŸÃß‹ôÑA£­)–*P9Œr@r!»SáÂPø+9ÐA£çN%žtÉ“t 'TÒÉqžÝç~´ÐPò#]%è !¼)ÖÝrM²œH—c̽2Wº]DpÛ\)»D~4ÄÔKï*Q“%ÿ´¢¼ò!¡·ªÒFågº²ZLÞ¾(tÖlB(fWñp¾;´®â."wz¡«r廼Aâí<ÃqQJ9Ø.¶ûðpÂ]ÍS8ÜQw5ϼugôçšdi'S. y¯îž1w^ÝÏÉîX´/©”ˆIç#úÕêNôOBŸ*9R.L(T S^Îkx|Æ=¡é6­Ý[ «|DyTÕ(ãÃÃë: J÷YÊ3‹ïñ’Ò.é½E›Š5Dz˜ÒU¥ÉYòfÕ·›8]·ÇRžd´îÕÀåmFË ¾r9¤ÓåÎ;÷Y£ ª²Bå׆Z®o5…øðpO­§™p:ôtð²§ìÚØ=ñÿ…{ëѱ"äý”}ý¹×ÝCQdº<ÄУ•ËÏã ©øîeˆÄ½ÄÃP뇊ZœÊŸ¤ˆAÑëÑ‡æ ±’TÝÚöx t?# Œ¸¤æÊ`/Pö$å+)ª¤À¶†±¦W”¿çúñQênPy)õM%Ý6³‚QÖ•VÑ) z7KveÁvÒר×D|PdÌÚL§5zV°Ã(,g¶‚êìŠÜ1g±,Š­¿‚/ymd,¯¨û‡;ÞWò}WL°`[:×4Ë‚úçm4'¯ùãèpUü±äÓã)ŠQëmØ›™6)]*sþá‡N¤yâ%C¦Ö³Wác‹ª–|ùl ¼×œ-¶*«’╯ì1KyK¾î.ÁU½Ï5ÏÒÚ…áe[œ• 9”ïNʼ,CºýйPw\åK¢ ¥$ kþU’ò® Kž¥uÛVJ“· ì:Z›Êï2¤¬)`¡S©—’²~éë&e’Ô ö„4K63¤ ‘”õ“Ö ñÌ7‰Y/ž©Ú$fÝ¿™PvÜDÜc­ :C<§NrÖ=5Lä{S‚é˜õv'îe ËÖUºŸ!!ÑÒEOœÈxa†â!)ë#æYb®gÏP,ÙO$Æ¢jÆDGC”ŽxIÊàªYÓ, Iä0©ÒÆ*ÿäöw 'êPZñF–b gêP´óF«±TÖDVŠåQn$°ÆÖÀêF"k«”! rr,nu#‘UbÙ“‰¬KÞÈÎigWwüe¬n>·•Edgmïg¼j«e¾ßPŠéFVüÁ-°‰¬­‰ÚDÖÖÊðFëÜJDÝHdÙ±+°ˆDÖÖÞéFë:cÙÛ‰¬ËêÜÈÎ*ug•}ŒWÙV½#‘U÷ùº^µ[Jæù‘õªÝ’9ÉGœ/!_Ãj±pùDÖˆÅ\oä+XùÜç^È×±jÞYu__Èg‰Ï%$²òþ†ò«C 9Ây»ãØ Ë'4«²íÈΪ;i¿ß/â¤]2„DÖÖéF«^±ôÛì¬QwÖØŸëŸ••c±Ý‰¬]×;Y-–¸º‘ÕËÎê¯î8bñØ ¬vÄÒ‰7Yç~-!;«ì¤ý©~!g[5B"kkŽt#‘U· RŽ|+•^ÍBMÛn$²Ú®„DVß,GvV¬¸åHdX~ðF Gæ@"9e_¥ýU;&öU*$²¶‚7X#¶Hr r¶ö7Yå%*‘ójG_Ø!«ïÚa¼jåó YÄywdgÅyw$²Z,€w#‘Õ#¥¿ú÷Xü÷FëcÁëÙYñlçHd]±8îDVÚß¶5ÆÎ¯î˜w}#$²vËÀ‘ȪûÊYm_9ùUc¤?ƒÕÒÎj»–È=A¿‘5ÚÎÚ}(ÿ¼¬Ý~pä+XåØÇX^µÝúŬ36¥º‘¯a]±òDVÚ¥VHd•XêýFv֦DžDVmn$²Æ.ÛB«RWÿ6ÝHd[-XGvV­;«îµî–›#‘›¨8ðçsz,O#‘5öõR_µ:KW;6Û€@ä”íÄíHd}·k¯Ú¦«o oäkX[›¬‰¬´k6!‘UöÙY¯¬¤þ+©X8ûFklÍ´n$²¶¶47Y–ȹ’X?sá O"zkÓXŽDV‰­šn$°DŽ×Y[{¿‰¬º­GvÖØIû<\Çæ«q$²®MƉ¬­Üú쬨mÙYÛœ^¯Ú_%äŽ\q¶®WM-«/4d¸‘È›äH`¥có ;²³¢7Ú‘ÈJ›ÿÛ‘ÕòÎÚ}éÈv‰dG"klg\G+ÛžïHd]ûÜçW­ Ògâ DNß¼QŽV9vɲ³¢¯É‘¯aûÌ ‰¬kóE;Yy; ;Y[£¯ ¬š¶ȑȪû…DÖÖœëF"kì+µ¾jh9¤Ûºi¯ZxýbVÙWªÈª[ѯaµØúäF"kkv#‘5¶Ÿ#;«ž;k?¦¾Wéw$²¶6†7Y}×BvÖ¶7 ‰,ûZ °ˆÖxµ¿Œ×ûKfUÔ…åH`gl™s#‘µµ•¸‘¯a5+F¶²ˆì¬ÚwVí;kkÅv#År® ‰ÀΉ1rG"«mñG @íåHdå-ÎìH`å]6 ¬©C·ÙY}³Ÿ ¬Z7ÛÒ‘ÀjÇþôB"kkv#;+Z ŽDVÛì3G¾†Õ7‹Ý‘Àê±Y™ÃeV’ÈJÑj9[¿‰¬¾"YYåØÚWÝHdq|"gkzv#‘U6;Ü‘ÈÚ.´_å¼6ß#‘•b‹²‰¬¾ÙºŽ¾ˆ‰Ï-dgµº³Ú>›WÝöG+娯ðF"«Åü“÷5ìÈÎÚæTÈW°ðÍ]X{ŽDÖØNŽªËÀi[ã´‰¬¼y‡‰¬¾í:ŽVµûV`OÛ^îHdÕ-.éH`­eØDÖÕrdeÕ£n»“#5÷ÑèEv$°®k{zGvVÔ3ŽDÖÖÔíF+íñsG"«lsïHdm7w$°rÛVª#‘µç8XøV$h%GKe‘–ÈÚ⯧o^53êæ©ude!?úc‰¬Ý[áHdåøTçÚ£+ŽÖ~úñ퇧Ï?½{ûùã»?ǾY_¾åÜ]ðåpA{¯Ç-ñ™å>[“¡{>ÿ/ÿêÃû·Ÿßúñ/Þ|ÿ7øeyÂ:Ç~‰—4ÍæïÿÍ7ßÿë¿zþ·oúÛ7ßÂ)wœíùýðîÍ·È2é(ýùcøëÇ7Ò}zzþü³=ñ‰ÊãòKýob÷)ôéùoðß¹Ï9z~ûÓç/]j>ž?ãæùÛÏŸ~À£¡n{þ·þ{»Ôåx~ÿ»õ_Þ~ÐÃÏùÍrÇõîïùó2rïÏþŒg¯s|ï?}øô‡ðñçç·?⟲åÏyW=Îùü—ï?ýüyÎéÏŸýö¼çƒÿ¿ßþôéÃû—ýùoßêãùÿ ÿðùýç?-Ï÷9Œõó=µÅ'vØÇ·ï?üÅc½ DVÂOÿøZFÂúú}­âóŽ©Û.û–¥ÙÂù8×ÂËï>¼Ã’üùþÛ÷/?¿Ã ÒÂüÿù({endstream endobj 104 0 obj << /Type /XRef /Length 123 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 105 /ID [<262532e3a04bd217f3bc285c516f5d44>] >> stream xœcb&F~0ù‰ $À8J1ò?ßí@68ùÙ@¤¨ˆdý"¹ùA¤Œ>ˆda‘< ’+D22‚É÷`YS0éù"™Á"`5œ\ ’­,ûL ¢³Å΃m¿6ÿd´L±SŽƒHçk œÎa endstream endobj startxref 112852 %%EOF rstpm2/inst/doc/multistate.Rnw0000644000176200001440000015377015040663044016125 0ustar liggesusers% -*- mode: noweb; ess-noweb-default-code-mode: R-mode; -*- %\VignetteIndexEntry{Predictions for Markov multi-state models} %\VignetteDepends{rstpm2} %\VignetteKeyword{survival, spline} %\VignettePackage{rstpm2} %!\SweaveUTF8 \documentclass[nojss]{jss} \usepackage{amsmath,amsfonts,enumitem,fancyvrb,hyperref} \usepackage[utf8]{inputenc} \VerbatimFootnotes \usepackage[margin=2.6cm]{geometry} % wide margins \usepackage{wasysym,bm} \usepackage{tablefootnote} \usepackage{algorithm2e} \usepackage{graphicx, tikz} \usetikzlibrary{arrows,decorations.pathmorphing,backgrounds,positioning,fit,petri,matrix} \usepackage{xcolor} \title{Predictions for parametric and penalised multi-state Markov models} % Transforming parametric and penalized hazard estimates \author{Mark~Clements\\Karolinska Institutet} \Plainauthor{Mark~Clements} \Plaintitle{Markov multi-state models} \Abstract{ We describe an efficient algorithm and implementation for predictions for parametic and penalized Markov multi-state models. Predictions include state occupancy probabilities, transition probabilities, prevalence, length of stay, relative survival, screening sensitivity, and costs. The algorithm uses a system of ordinary differential equations to calculate the predictions and their gradients, with standard errors calculated using the delta method. These methods have applications to a range of disciplines, including descriptive epidemiology, causal inference and economic evaluations. } \Keywords{survival, multi-state models, Markov models} \Plainkeywords{multi-state models, Markov models} \Address{Mark~Clements\\ Department of Medical Epidemiology and Biostatistics\\ Karolinska Institutet\\ Email: \email{mark.clements@ki.se} } \begin{document} \section{Introduction} % Model fitting is challenging for interval-censored, where the likelihood requires integration of the hazards. \emph{Multi-state models} form a very broad class of models that includes standard survival models with an initial and final state, competing risks with multiple final states, and illness-death models, with an initial healthy state, an illness state and a death state. This model class is useful for representing movement through a discrete set of states. As a motivating example, we are interested in the clinical pathways for cancer screening, diagnosis and treatment, taking account of utilities and costs. Using observational data, screening or treatment assignment may be confounded with patient characteristics, so we are also interested in using standardisation or the parametric g-formula to adjust for differences between groups. % Should we use the negative biopsies as an example? Predictions from multi-state models could include: transition hazards between states; transition probabilities for being in a particular state conditional on an initial state; state occupation probabilities for being in a particular state given an observed distribution of initial states; length of stay in a given state; prevalence for the live health states; contrasts of these predictions, including standardisation; and ratios of these predictions \citep{Touraine_Helmer_Joly_2016,Crowther_Lambert_2017}. Much of the literature on multi-state models has focused on counting processes \citep[e.g.][]{Andersen_Borgan_Gill_Keiding_1993,Andersen_Keiding_2002,Putter_Fiocco_Geskus_2007}. For implementations, \cite{Allignol_Schumacher_Beyersmann_2011} use the Aalen-Johansen estimator to estimate transition probabilities, and \cite{deWreede_Fiocco_Putter_2011} predict transition probabilities and their standard errors for transitions modelled using Cox regression. These implementations can also estimate length of stay and contrasts, however variance estimates would then require the non-parametric bootstrap. \cite{Ryalen_Stensrud_Roysland_2018} use stochastic differential equations to transform non-parametric cumulative hazard estimates into a variety of predictions. This approach is shown to work for Aalen's additive hazard model, but it is unclear whether the approach extend to Cox regression models. Their methods are a non-parametric analogue to our development. Parametric and penalised survival models have potential advantages for multi-state models, including the ready incorporation of time-varying effects and for predictions outside of observed data \citep{Touraine_Helmer_Joly_2016,Crowther_Lambert_2017}. \cite{Iacobelli_Carstensen_2013} simulate from Poisson regression models on different time scales to predict for multi-state models. \cite{Blaser_Vizcaya_Estill_Zahnd_Kalesan_Egger_Gsponer_Keiser_2015} provide a simulation framework for multi-state models with random times based on piece-wise constant hazards. \cite{Crowther_Lambert_2017} combine parametric time-to-event models to predict transition probabilities and length of stay. The authors use simulations, with variance estimation using the parametric bootstrap. None of these approaches scales well to allow for standardisation across moderate sized datasets. % heemod - discrete time Markov models % hesim Predictions for Markov models can use ordinary differential equation solvers to solve Kolmogorov's forward differential equation. Recently, \cite{Jackson_2016} predicted length of stay using differential equations. \cite{Titman_2011} also demonstrated that the gradients for transition probabilities (or sensitivity equations) can be estimated by augmenting the system of differential equations. Variance estimates for predictions can be calculated using the delta method and gradients for the predictors \citep{Gentleman_Lawless_Lindsey_Yan_1994}. This provides an opportunity to efficiently calculate a range of predictions from multi-state models. We have two objectives: first, to develop efficient methods for predictions for \emph{smooth, non-homogeneous multi-state Markov models} with variance estimation using the \emph{multivariate delta method}; and, second, to demonstrate that these methods support the use of multi-state models across descriptive statistics, causal inference, and economics. Importantly, our restriction to Markov models is not a heavy constraint: \cite{Datta_Satten_2001} have shown that the state occupation probabilities are consistently estimated under moderate conditions even when the time scale is mis-specified. Length of stay, prevalence, utilities and costs, when they are integrated functions of the state occupation probabilities, are also expected to be consistent under similar conditions. In outline, we provide a theoretical development of a set of ordinary differential equations, simulate to assess the small sample properties, provide some examples and conclude with a brief discussion. \section{Methods} % Structure? \subsection*{Assumptions} For the predictions, the main inputs are (i) a multi-state model specification, (ii) the models for the transition intensities, and (iii) and the initial values for the states. We assume that the transition intensities are estimated using maximum (penalised) likelihood estimation, with stacked estimated parameters $\hat{\boldsymbol{\beta}}$ and stacked estimated variance-covariance matrix $\hat{\boldsymbol\Sigma}$. The estimated parameters could be from either model fit for all transitions, one model for each transition or a combination of models for different transitions. For a formal development, the asymptotic properties for parametric survival models were developed by \cite{Borgan_1984} and \cite{Andersen_Borgan_Gill_Keiding_1993}. Under Cramér-like conditions, the authors show that that the maximum likelihood parameters $\hat{\boldsymbol{\beta}}$ are asymptotically normal. Sufficient conditions include uniform convergence, that the hazard is thrice differentiable with respect to the parameters, boundedness of the hazard function, and that the hazard is bounded away from zero \citep{Borgan_1984}. We can then estimate the asymptotic variance for the predictions using the multivariate delta method, which will be asymptotically normal if the parameters are asymptotically normal and the gradients of the predictions exist (see Theorem 3.4.6 in \cite{Sen_Singer_1993}). \cite{Ryalen_Stensrud_Roysland_2018} developed asymptotic properties for non-parametric stochastic differential equations under Hadamard continuity. We will assess these asymptotic properties using simulations. \subsection*{Notation} For vectors $\boldsymbol{v}, \boldsymbol{v}_1$ and $\boldsymbol{v}_2$ and matrices $\boldsymbol{M}, \boldsymbol{M}_1$ and $\boldsymbol{M}_2$, let $\boldsymbol{v}_1\circ\boldsymbol{v}_2$ and $\boldsymbol{M}_1\circ\boldsymbol{M}_2$ be the Hadamard element-wise products, and let $\boldsymbol{v}_1\oslash\boldsymbol{v}_2$ and $\boldsymbol{M}_1\oslash\boldsymbol{M}_2$ be Hadamard element-wise division. We also define $\boldsymbol{M}\circ\boldsymbol{v}=\boldsymbol{M}\circ(\boldsymbol{v}\boldsymbol{1}^T)$ and $\boldsymbol{M}\oslash\boldsymbol{v}=\boldsymbol{M}\oslash(\boldsymbol{v}\boldsymbol{1}^T)$. We assume that $\circ$ and $\oslash$ have higher operator precedence than addition and subtraction. Let $\text{diag}(\boldsymbol{v})$ represent a square matrix with zeros in the off-diagonal and $\boldsymbol{v}$ on the diagonal. We represent a vector of ones using $\boldsymbol{1}$ and an identity matrix by $\boldsymbol{I}$. We define the gradient for a prediction $\boldsymbol\phi(t_0,t)$ with respect to an estimated model parameter $\hat\beta_m$ by $\boldsymbol\phi'_m(t_0,t)\equiv\left.\frac{\displaystyle\partial\boldsymbol\phi(t_0,t)}{\displaystyle\partial\beta_m}\right|_{\beta_m=\hat\beta_m}$. \subsection*{General approach applied to transition and state occupancy probabilities} Let the set of states be indexed by $i$ and $j$. We define the matrix of \emph{transition probabilities} $\boldsymbol{P}(t_0,t)=(P_{ij}(t_0,t))$ as the probabilities of being in state $j$ at time $t$ given being in an initial state $i$ at entry time $t_0$. For smooth hazards, the Markov property is expressed through Kolmogorov's forward differential equation, such that \begin{align} \frac{d\boldsymbol{P}(t_0,t)}{dt} &= \boldsymbol{P}(t_0,t) \boldsymbol{Q}(t) \label{eq:kolmogorov} \\ \boldsymbol{P}(t_0,t_0) &= \boldsymbol{I} \label{eq:Pinit} \end{align} where $\boldsymbol{Q}(t)=(Q_{ij}(t))$ is a matrix of transition intensities at time $t$\footnote{Technically, this is $t-$.} from state $i$ to state $j$ when $i\neq j$ (conceptualised as the rates from state $i$ to state $j$), and where $Q_{ii}(t)=-\sum_{j\neq i}Q_{ij}(t)$ (conceptualised as the rates out of state $i$). % The Markov property is based on a single clock $t$ (e.g. age of a subject or calendar time), whereas semi-Markov models are based on a reset clock (e.g. time in state for each new state). % (toggle-debug-on-quit) Following \cite{Titman_2011}, Kolmogorov's forward differential equation can be augmented to calculate the gradient for $\boldsymbol{P}(t_0,t)$ with respect to the model coefficients. Titman showed that \begin{align} \frac{d\boldsymbol{P}'_m(t_0,t)}{dt} &=\boldsymbol{P}'_m(t_0,t)\boldsymbol{Q}(t) + \boldsymbol{P}(t_0,t)\boldsymbol{Q}'_m(t) \label{eq:dPudt} \\ \boldsymbol{P}'_m(t_0,t_0) &= \boldsymbol{0} \label{eq:Puinit} \end{align} Note that this requires the evaluation of the gradients for the transition intensities with respect to $\hat\beta_m$. \emph{Algorithm 1} is defined as: \begin{algorithm}[H] \SetKwInOut{Input}{input}\SetKwInOut{Output}{output} \Input{$\boldsymbol{P}(t_0,t_0),\boldsymbol{Q}(t), \left\{\boldsymbol{Q}'_m(t)\right\}\forall m, t_0, t_\text{max}$} \Output{$\boldsymbol{P}(t_0,t),\left\{\boldsymbol{P}'_m(t_0,t)\right\}\forall m\ \text{for}\ t\in\left[t_0,t_\text{max}\right)$} \Begin{ define the ODE based on Equations~(\ref{eq:kolmogorov})--(\ref{eq:Puinit})\; run an ODE solver from time $t_0$ to time $t_\text{max}$\; } \end{algorithm} This algorithm could be done separately for each covariate pattern or the ODEs can be extended to multiple covariates by stacking the equations. Using the multivariate delta method, the estimated covariance matrix for $\boldsymbol{P}(t_0,t)$ is \begin{align*} \text{var}(\boldsymbol{P}(t_0,t)) &= \boldsymbol{P}'_m(t_0,t)^T\, \hat{\boldsymbol\Sigma}\, \boldsymbol{P}'_m(t_0,t) \end{align*} Let the vector $\boldsymbol{\pi}(t_0,t_0)=(\pi_j(t_0,t_0))$ represent the initial \emph{state occupation probabilities} of being in state $j$ at time $t_0$. The state occupation probabilities of being in state $j$ at time $t>t_0$ can be calculated by $\boldsymbol{\pi}(t_0,t)^T=(\pi_j(t_0,t))=\boldsymbol{\pi}(t_0,t_0)^T\boldsymbol{P}(t_0,t)$. Differential equations can be readily calculated for the state occupation probabilities. This general approach can be applied to a variety of predictions. The other predictions may require that a set of differential equations be defined for several related predictions, including their gradients, in combination with the delta method for variance estimation. \subsection*{Example 1: Length of stay and restricted mean survival time} The ordinary differential equations in Equations~(\ref{eq:kolmogorov})--(\ref{eq:Puinit}) can be further augmented to calculate the integral $L_{ij}(t_0,t)=\int_{t_0}^t P_{ij}(t_0,v)dv$. The additional differential equations are then \begin{align} \frac{d\boldsymbol{L}(t_0,t)}{dt} &= \boldsymbol{P}(t_0,t) \label{eq:los} \\ \frac{d\boldsymbol{L}'_m(t_0,t)}{dt} &= \boldsymbol{P}'_m(t_0,t) \label{eq:dLudt} \\ \boldsymbol{L}(t_0,t_0) &= \boldsymbol{L}'_m(t_0,t_0) = \boldsymbol{0} \label{eq:Linit} \end{align} where the matrix $\boldsymbol{L}(t_0,t)$ is the the \emph{length of stay} or sojourn time for state $j$ given an initial state $i$ at time $t_0$. Algorithm 1 would be augmented to include Equations~(\ref{eq:los})--(\ref{eq:Linit}) to calculate transition and state occupation probabilities and the lengths of stay. For restricted mean survival times and life expectancy, we can weight the length of stay by a vector $\boldsymbol{w}=(w_j)$, where $w_j=1$ for a live state $j$, and $w_j=0$ for a death state $j$. We then have that the restricted mean survival is $\bm{L}(t_0,t)\bm{w}$. Moreover, as $t\rightarrow\infty$, $\bm{L}(t_0,t)\bm{w}$ will measure life expectancy. \subsection*{Example 2: Prevalence} Let the prevalence for the live states be defined by \begin{align*} \tilde{\boldsymbol{P}}(t_0,t) &= \left(\boldsymbol{P}(t_0,t)\text{diag}(\boldsymbol{w})\right)\oslash\left(\boldsymbol{P}(t_0,t)\boldsymbol{w}\right) \end{align*} where the weight vector $\bm{w}$ again has elements that are 1 for a live state and 0 for a death state. Generalising a result for illness-death models by \cite{Brinks_Hoyer_2018} to multi-state models, we have that \begin{align*} \frac{d\tilde{\boldsymbol{P}}(t_0,t)}{dt} &= \left(\left(\frac{d\boldsymbol{P}(t_0,t)}{dt}\text{diag}(\boldsymbol{w})\right) \circ \left(\boldsymbol{P}(t_0,t)\boldsymbol{w}\right) - \left(\boldsymbol{P}(t_0,t)\text{diag}(\boldsymbol{w})\right) \circ \left(\frac{d\boldsymbol{P}(t_0,t)}{dt}\boldsymbol{w}\right)\right)\\ &\quad\oslash\left(\boldsymbol{P}(t_0,t)\boldsymbol{w}\right)\oslash\left(\boldsymbol{P}(t_0,t)\boldsymbol{w}\right) \end{align*} with an initial value that $\tilde{\boldsymbol{P}}(t_0,t_0)=\text{diag}(\boldsymbol{w})$. Alternatively, we can calculate $\text{logit}(\tilde{\boldsymbol{P}}(t_0,t))=\log(\tilde{\boldsymbol{P}}(t_0,t)) - \log(\boldsymbol{1}\boldsymbol{1}^T-\tilde{\boldsymbol{P}}(t_0,t))$, which has a gradient of \begin{align*} \left.\frac{\partial}{\partial\beta_m} \text{logit}(\tilde{\boldsymbol{P}}(t_0,t))\right|_{\beta_m=\hat\beta_m} &= \left( \left(\boldsymbol{P}'_m(t_0,t)\text{diag}(\boldsymbol{w})\right)\circ \left(\boldsymbol{P}(t_0,t)\boldsymbol{w}\right) - \left(\boldsymbol{P}(t_0,t)\text{diag}(\boldsymbol{w})\right)\circ \left(\boldsymbol{P}'_m(t_0,t)\boldsymbol{w}\right) \right) \\ &\quad \oslash \tilde{\boldsymbol{P}}(t_0,t) \oslash \left(\boldsymbol{1}\boldsymbol{1}^T - \tilde{\boldsymbol{P}}(t_0,t)\right) \oslash \left(\boldsymbol{P}(t_0,t)\boldsymbol{w}\right) \oslash \left(\boldsymbol{P}(t_0,t)\boldsymbol{w}\right) \end{align*} Similarly, we could calculate the proportion of person-time in the live health states, which is calculated by $\tilde{\boldsymbol{L}}(t_0,t)=\left(\boldsymbol{L}(t_0,t)\text{diag}(\boldsymbol{w})\right)\oslash\left(\boldsymbol{L}(t_0,t)\boldsymbol{w}\right)$. The development for these predictions follows closely that for prevalence. \subsection*{Example 3: Linear combinations, differences and standardisation} Linearity combinations of these estimators are straightforward to calculate, as the gradients are then also linear. Let $\boldsymbol\phi(t_0,t|\boldsymbol{x}_k)$ represent an estimator, such as transition probabilities, state occupation probabilities or length of stay, conditional on covariate vector $\boldsymbol{x}_k$. Given weights $w_k$ for $k=1,\ldots,K$, we can calculate the weighted sums \begin{align*} \bar{\boldsymbol{\phi}}(t_0,t) &= \sum_{k=1}^K w_k \boldsymbol{\phi}(t_0,t|\boldsymbol{x}_k)\\ \bar{\boldsymbol{\phi}}'_m(t_0,t) &= \sum_{k=1}^K w_k \boldsymbol{\phi}'_m(t_0,t|\boldsymbol{x}_k) \end{align*} For differences, we can define $K=2$, $w_1=1$ and $w_2=-1$. \emph{Standardisation} can be defined in terms of the mean prediction under a counterfactual exposure. For example, consider a binary exposure $X$ with confounders $\boldsymbol{Z}_i$ across a sample or population indexed by $i$. The standardised estimator for everyone been unexposed or exposed to $X$ is then \begin{align*} \bar{\boldsymbol\phi}_0(t_0,t) &= E_{\boldsymbol{Z}}(\boldsymbol\phi(t_0,t|X=0,\boldsymbol{Z})) = \frac{1}{n}\sum_{i=1}^n \boldsymbol\phi(t_0,t|X=0,\boldsymbol{Z}_i)\\ \bar{\boldsymbol\phi}_1(t_0,t) &= E_{\boldsymbol{Z}}(\boldsymbol\phi(t_0,t|X=1,\boldsymbol{Z})) \end{align*} Under no unmeasured confounding and positivity, we could give a causal interpretation to contrasts such as $\bar{\boldsymbol\phi}_1(t_0,t)-\bar{\boldsymbol\phi}_0(t_0,t)$, $\bar{\boldsymbol\phi}_1(t_0,t)\oslash\bar{\boldsymbol\phi}_1(t_0,t)$ or $\boldsymbol{1}\boldsymbol{1}^T-\bar{\boldsymbol\phi}_1(t_0,t)\oslash E_{\boldsymbol{Z},X}(\boldsymbol\phi(t_0,t|X\boldsymbol{Z}))$. These marginal estimators can be interpreted as applications of the parametric g-formula . \begin{figure} \begin{center} \begin{tikzpicture}[->,bend angle=20,semithick,>=stealth'] \matrix [matrix of nodes,row sep=6mm,column sep=7mm,nodes={align=center}, ampersand replacement=\&] { \& |(Z)| $\boldsymbol{Z}$ \\ |(X)| $X$ \& \& |(Y)| $\boldsymbol{\phi}(t_0,t|X,\boldsymbol{Z})$ \\ }; \begin{scope}[every node/.style={midway,auto}] \draw (X) to node {} (Y); \draw (Z) to node {} (X); \draw (Z) to node {} (Y); \end{scope} \end{tikzpicture} \caption{Directed acyclic graph showing predictions $\boldsymbol{\phi}(t_0,t|X,\boldsymbol{Z})$ as a function of the target exposure $X$ and confounders $\boldsymbol{Z}$.} \end{center} \end{figure} % Do notation \subsection*{Example 4: Ratios} % We can also consider differences and ratios. Let $\boldsymbol\phi(t_0,t|\boldsymbol{x})$ represent one of the estimators from the previous sections. % The gradient for the difference $\boldsymbol\phi(t_0,t|\boldsymbol{x}_1)-\boldsymbol\phi(t_0,t|\boldsymbol{x}_2)$ is % \begin{align*} % \left.\frac{\partial}{\partial \beta_m} \left(\boldsymbol\phi(t_0,t|\boldsymbol{x}_1) - \boldsymbol\phi(t_0,t|\boldsymbol{x}_2)\right)\right|_{\beta_m=\hat\beta_m} &= \boldsymbol{\phi}'_m(t_0,t|\boldsymbol{x}_1) - \boldsymbol\phi'_m(t_0,t|\boldsymbol{x}_2) % \end{align*} % Again, the linearity of the gradients leads to straightforward calculations. We can augment the system of differential equations to calculate the ratios for specific estimators \citep{Ryalen_Stensrud_Roysland_2018}. Let a matrix of ratios of state occupation probabilities be $\text{\bf R}(t_0,t|\boldsymbol{x}_1,\boldsymbol{x}_2)=\boldsymbol{\pi}(t_0,t|\boldsymbol{x}_1)\oslash\boldsymbol{\pi}(t_0,t|\boldsymbol{x}_2)$. Then \begin{align*} \frac{d\text{\bf R}(t_0,t|\boldsymbol{x}_1,\boldsymbol{x}_2)}{dt}^T &= \left(\left(\boldsymbol{\pi}(t_0,t|\boldsymbol{x}_1)^T\boldsymbol{P}(t_0,t|\boldsymbol{x}_1)\boldsymbol{Q}(t|\boldsymbol{x}_1)\right) - \left(\boldsymbol{\pi}(t_0,t|\boldsymbol{x}_2)^T\boldsymbol{P}(t_0,t|\boldsymbol{x}_2)\boldsymbol{Q}(t|\boldsymbol{x}_2)\right) \circ \text{\bf R}(t_0,t|\boldsymbol{x}_1,\boldsymbol{x}_2)\right) \\ &\quad\oslash\boldsymbol{P}(t_0,t|\boldsymbol{x}_2) \\ \text{\bf R}(t_0,t_0) &= \boldsymbol{1} \end{align*} where $\boldsymbol{P}(t_0,t|\boldsymbol{x}_2)>0$. Alternatively, we can calculate the gradient for $\log(\boldsymbol\phi(t_0,t|\boldsymbol{x}_1)\oslash\boldsymbol\phi(t_0,t|\boldsymbol{x}_2))$ (that is, the log ratio), which is \begin{align*} \left.\frac{\partial}{\partial \beta_m} \log\left(\boldsymbol\phi(t_0,t|\boldsymbol{x}_1)\oslash\boldsymbol\phi(t_0,t|\boldsymbol{x}_2)\right)\right|_{\beta_m=\hat\beta_m} &= \boldsymbol{\phi}'_m(t_0,t|\boldsymbol{x}_1)\oslash\boldsymbol\phi(t_0,t|\boldsymbol{x}_1) - \boldsymbol{\phi}'_m(t_0,t|\boldsymbol{x}_2)\oslash\boldsymbol\phi(t_0,t|\boldsymbol{x}_2) \end{align*} This evaluation depends on $\boldsymbol\phi(t_0,t|\boldsymbol{x}_2)$ being non-zero. % Open question: how does this compare with log(ratio)? % Representation of different interventions - how? \subsection*{Example 5: Utilities and costs} The approach readily incorporates utilities and costs. For utilities, we have the cumulative discounted utilities $U_{i}(t_0,t)=\sum_j \int_{t_0}^t P_{ij}(t_0,v)u_j(v)e^{-\lambda v}dv$, where $u_j(v)$ is the utility for state $j$ at time $v$ and $\lambda=\log(1+\delta)$ is the rate of decline for a discount rate $\delta$. The augmented differential equations are then \begin{align} \frac{d\boldsymbol{U}(t_0,t)}{dt} &= \boldsymbol{P}(t_0,t)\boldsymbol{u}(t)e^{-\lambda t} \label{eq:utilities} \\ \frac{d\boldsymbol{U}'_m(t_0,t)}{dt} &= \left(\boldsymbol{P}'_m(t_0,t)\boldsymbol{u}(t)+\boldsymbol{P}(t_0,t)\boldsymbol{u}'_m(t)\right)e^{-\lambda t} \label{eq:dUudt} \\ \boldsymbol{U}(t_0,t_0) &= \boldsymbol{U}'_m(t_0,t_0) = \boldsymbol{0} \end{align} In health economics, the discounted, quality-adjusted life-years are calculated by the product of the initial state probabilities and the utilities, such that $\text{QALY}(t_0,t)=\boldsymbol{\pi}(t_0,t_0)^T\boldsymbol{U}(t_0,t)$, with gradient $\text{QALY}'_m(t_0,t)=\boldsymbol{\pi}(t_0,t_0)^T\boldsymbol{U}'_m(t_0,t)$. Costs may be represented as accumulated costs or costs at a point in time. Let costs per unit time for being in state $i$ at time $t$ be represented by the vector function $\boldsymbol{c}(t)=(c_{i}(t))$ and model for costs for transitions from state $i$ to state $j$ at time $t$, represented by the matrix $\boldsymbol{\mathcal{C}}(t)=(\mathcal{C}_{ij}(t))$, with $\mathcal{C}_{ii}(t)=0$. Then the cumulative discounted costs $\boldsymbol{C}(t_0,t)$ can be represented by the equations \begin{align} \frac{d\boldsymbol{C}(t_0,t)}{dt} &= \boldsymbol{P}(t_0,t) \left(\boldsymbol{c}(t)+\left(\boldsymbol{Q}(t)\circ\boldsymbol{\mathcal{C}}(t)\right)\bm{1}\right) e^{-\lambda t} \label{eq:costs} \\ \frac{d\boldsymbol{C}'_m(t_0,t)}{dt} &= \Big(\boldsymbol{P}'_m(t_0,t) \left(\boldsymbol{c}(t)+\left(\boldsymbol{Q}(t)\circ\boldsymbol{\mathcal{C}}(t)\right)\bm{1}\right) +\nonumber \\ &\qquad \boldsymbol{P}(t_0,t) \left(\boldsymbol{c}'_m(t)+\left(\boldsymbol{Q}'_m(t)\circ\boldsymbol{\mathcal{C}}(t)+\boldsymbol{Q}(t)\circ\boldsymbol{\mathcal{C}}'_m(t)\right)\bm{1}\right)\Big)e^{-\lambda t} \\ \boldsymbol{C}(t_0,t_0) &= \boldsymbol{C}'_m(t_0,t_0) = \boldsymbol{0} \end{align} Note that these require the evaluation of the gradients for the utility and cost functions. The total costs are calculated by weighting by the initial state probabilities, such that $\text{Costs}(t_0,t)=\boldsymbol{\pi}(t_0,t_0)^T\boldsymbol{C}(t_0,t)$, with gradient $\text{Costs}'_m(t_0,t)=\boldsymbol{\pi}(t_0,t_0)^T\boldsymbol{C}'_m(t_0,t)$. We can also consider incremental cost-effectiveness ratios, estimated by \begin{align*} \text{ICER}(t_0,t|\boldsymbol{x}_1,\boldsymbol{x}_2) &= \frac{\text{Costs}(t_0,t|\boldsymbol{x}_1)-\text{Costs}(t_0,t|\boldsymbol{x}_2)}{\text{QALY}(t_0,t|\boldsymbol{x}_1)-\text{QALY}(t_0,t|\boldsymbol{x}_2)} \end{align*} The gradient of the log of the ICER is \begin{align*} \left.\frac{\partial}{\partial\beta_m}\log(\text{ICER}(t_0,t|\boldsymbol{x}_1,\boldsymbol{x}_2))\right|_{\beta_m=\hat\beta_m} &= \frac{\text{Costs}'_m(t_0,t|\boldsymbol{x}_1)-\text{Costs}'_m(t_0,t|\boldsymbol{x}_2)}{\text{Costs}(t_0,t|\boldsymbol{x}_2)-\text{Costs}(t_0,t|\boldsymbol{x}_1)} - \\ &\qquad \frac{\text{QALY}'_m(t_0,t|\boldsymbol{x}_1)-\text{QALY}'_m(t_0,t|\boldsymbol{x}_2)}{\text{QALY}(t_0,t|\boldsymbol{x}_1)-\text{QALY}(t_0,t|\boldsymbol{x}_2)} \end{align*} Finally, we can expand the equations to record the utilities or costs for different states. We can extend Equations~\eqref{eq:utilities} and \eqref{eq:costs} to \begin{align*} \frac{d\tilde{\boldsymbol{U}}(t_0,t)}{dt} &= \left(\boldsymbol{P}(t_0,t)\circ\left(\bm{1}\,\boldsymbol{u}(t)^T\right)\right)e^{-\lambda t} \\ \frac{d\tilde{\boldsymbol{C}}(t_0,t)}{dt} &= \left(\boldsymbol{P}(t_0,t) \circ \left(\bm{1}\,\boldsymbol{c}(t)^T+\bm{1}\left(\left(\boldsymbol{Q}(t)\circ\boldsymbol{\mathcal{C}}(t)\right)\bm{1}\right)^T\right)\right) e^{-\lambda t} \end{align*} for matrices $\tilde{\bm{U}}$ and $\tilde{\bm{C}}$, where $\tilde{U}_{ij}$ is the cumulative utility for state $j$ given an initial state $i$, and $\tilde{C}_{ij}$ is the cumulative cost for being in state $j$ or a transition from state $j$ given an initial state $i$. \subsection*{Example 6: Transformations} For causal inference and health economic evaluations, it is often useful to combine evidence from different data sources to transform the baseline transitions. We introduce five such transformations. {First}, we can turn off a transition, where the transformed hazard $h^*(t|\bm{x})=0\times h(t|\bm{x})$. One advantage of this zero-model formulation is that we can keep the same variance-covariance matrix for the baseline transitions, which supports a straightforward comparison between the interventions. {Second}, we may have a hazard ratio $\exp(\phi)$ with 95\% confidence interval $(\exp(\phi_l),\exp(\phi_u))$, such as from a meta-analysis. The variance for the log hazard ratio is $\left((\phi_u-\phi_l)/2/1.96\right)^2$. The transformed hazard is $h^*(t|\bm{x},\phi)=\exp(\phi) h(t|\bm{x})$, with the gradient of the hazard $h^*$ with respect to the parameters of $h(t|\bm{x})$ being $\exp(\phi)\nabla h(t|\bm{x})$, and the gradient with respect to $\phi$ being $\exp(\phi)h(t|\bm{x})$. {Third}, we may have an acceleration factor $\exp(\phi)$. Then the transformed hazard is $h^*(t|\bm{x},\phi)=\exp(\phi) h(\exp(\phi)t|\bm{x})$, with the gradient of the hazard $h^*$ with respect to the parameters of $h(t\exp(\phi)|\bm{x})$ being $\exp(\phi)\nabla h(t\exp(\phi)|\bm{x})$, and the gradient with respect to $\phi$ being $t\exp(2\phi)h'(t\exp(\phi)|\bm{x})+\exp(\phi)h(t\exp(\phi)|\bm{x})$. {Fourth}, we can add transition hazards together, such that the transformed hazard is $h^*(t|\bm{x})=h_1(t|\bm{x})+h_2(t|\bm{x})$. The gradient of the sum is equal to the sum of the gradients. {Fifth}, we can include smooth mathematical functions with no uncertainty. A useful example of this would be to use a spline interpolation function for the log of background mortality rates from vital statistics for use in relative survival (or excess hazards) modelling. The spline interpolation has the advantage of being smooth for the ordinary differential equation solver. \subsection*{Variance and interval estimation} For an estimator $\boldsymbol\phi(t_0,t)$ with support on the real line, a confidence interval can be calculated from the variance-covariance matrix $\boldsymbol{V} = \boldsymbol{\phi}'_m(t_0,t)\, \hat{\boldsymbol\Sigma}\, \boldsymbol{\phi}'_m(t_0,t)$ and normal quantiles $z$ at the $\alpha$ level with bounds $\boldsymbol\phi(t_0,t)\pm z_{(1-\frac{\alpha}{2})}\sqrt{\text{diag}(\boldsymbol{V})}$. For estimators that are on the open interval $(0,1)$, the gradient can be calculated using an identity or logit transformations. Similarly, for estimators that are on the open interval $(0,\infty)$, the gradient can be calculated using an identity of log transformations. % We could present results for the different transformations... % \begin{align*} % \frac{\partial \log(-\log(\boldsymbol\phi(t_0,t)))}{\partial\hat\beta_m} &= \frac{\partial\boldsymbol\phi(t_0,t)}{\partial\hat\beta_m}\circ\frac{\boldsymbol{1}}{\log(\boldsymbol\phi(t_0,t))\circ\boldsymbol\phi(t_0,t)} \\ % \boldsymbol{V} &=\text{var}(\log(-\log(\boldsymbol{\phi}(t_0,t)))) \\ &= \log(-\log(\boldsymbol{\phi}'_m(t_0,t)))\, \hat{\boldsymbol\Sigma}\, \log(-\log(\boldsymbol{\phi}'_m(t_0,t))) % \end{align*} % with bounds $\exp\left(-\exp(\log(-\log(\boldsymbol\phi(t_0,t)))\pm z_{(1-\frac{\alpha}{2})}\text{diag}(\boldsymbol{V}))\right)$. % \begin{align*} % \frac{\partial \log(\boldsymbol\phi(t_0,t))}{\partial\hat\beta_m} &= \frac{\partial\boldsymbol\phi(t_0,t)}{\partial\hat\beta_m}\circ\frac{\boldsymbol{1}}{\boldsymbol\phi(t_0,t)} \\ % \boldsymbol{V} &=\text{var}(\log(\boldsymbol{\phi}(t_0,t))) \\ &= \log(\boldsymbol{\phi}'_m(t_0,t))\, \hat{\boldsymbol\Sigma}\, \log(\boldsymbol{\phi}'_m(t_0,t)) % \end{align*} % with bounds $\exp\left(\log(\boldsymbol\phi(t_0,t))\pm z_{(1-\frac{\alpha}{2})}\text{diag}(\boldsymbol{V})\right)$. \subsection*{Integration of hazards that are functions of log(time)} Many parametric survival models are implemented in terms of log(time), including flexible parametric survival models and accelerated failure time models. Integration of the ordinary differential equation solvers from the origin for such models can lead to numerical issues. We offer two approaches to address these issues. First, we can truncate small values for time, such that $t^*=\text{max}(t,\epsilon)$, e.g. using $\epsilon=$1e-5. Defining cumulative hazards as $H_{ij}(t_0,t)=\int_{t_0}^t Q_{ij}(u)du$, the value for $H_{ij}(0,\epsilon)$ may be poorly estimated by $\epsilon Q_{ij}(\epsilon)$. Moreover, the hazards will generally not be smooth at $t=\epsilon$. Second, we could directly calculate initial values at $t=\epsilon$ using cumulative hazard estimates. Let the matrix of cumulative hazard intensities from 0 to $\epsilon$ be $\bm{H}(t_0,t)=(H_{ij}(t_0,t))$ and let $\bm{H}'_m(t_0,t)=\int_{t_0}^t \bm{Q}_m'(u)du$. The transition probabilities at $\epsilon$ can be calculated approximately by \begin{align*} \bm{P}(0,\epsilon) &\approx \text{mexp}(\bm{H}(0,\epsilon)) \\ \bm{P}'_m(0,\epsilon) &\approx \bm{H}'_m(0,\epsilon) \\ \bm{L}(0,\epsilon) &\approx \epsilon(\bm{I}+\bm{P}(0,\epsilon))/2 \\ \bm{L}'_m(0,\epsilon) &\approx \epsilon\bm{P}'_m(0,\epsilon)/2 \\ \bm{U}(0,\epsilon) &\approx \epsilon\bm{P}(0,\epsilon)\bm{u}(\epsilon)e^{-\lambda\epsilon}/2 \\ \bm{U}'_m(0,\epsilon) &\approx \epsilon(\bm{P}'_m(0,\epsilon)\bm{u}(\epsilon) + \bm{P}(0,\epsilon)\bm{u}'_m(\epsilon))e^{-\lambda\epsilon}/2 \\ \end{align*} where $\text{mexp}(\bm{M})$ is the matrix exponential for a matrix $\bm{M}$. \section{Implementation} We have implemented the algorithm in R as the \code{rstpm2::markov_msm} function. The current implementation allows for: independent models for each of the transitions; a rich set of models for each transitions (see Appendix B); predictions for state occupation and transition intensities, length of stay, utilities and costs; and useful post-processing facilities, including weighted standardisation, differences and ratios. % A basic call to \code{markov_msm()} to estimate the state occupancy probabilities and length of stay would be \code{markov_msm(x, trans, t, newdata)}, where \code{x} is a list of regression models for the transition intensities, \code{trans} is a matrix that defines the multistate transitions as per the \code{mstate} package, \code{t} is a vector of times to report (including the initial time), and \code{newdata} is a data-frame with the covariates for predictions. % The current implementation assumes independently estimated transition intensities. The models for the transition intensities need to provide methods for: (i) the covariance matrix (\code{vcov}); (ii) predictions for hazards (\code{predict(object, newdata, type="haz", ...)}); and (iii) predictions for gradients of the hazards (\code{predict(object, newdata, type="gradh", ...)}). These methods have been provided for \code{rstpm2::stpm2}, \code{rtspm2::pstpm2}, \code{stats::glm} for a log link, and \code{survPen::survPen}. Use of \code{stats::glm} will also require that the argument \code{tvar} to specify a character for the name (or vector of names) of the time variables in the regression models for predictions. A transition can be turned off by wrapping a regression object in \code{zeroRate()}. % % Should I use a common S3 or S4 class? % The object returned from \code{markov_msm()} is of class \code{"markov_msm"}. The object includes predictions and gradients for the times specified for the covariates in the input \code{newdata} data-frame. Methods are provided for: \code{print}; \code{as.data.frame}; \code{subset(x, subset, ...)} based on a restriction of \code{newdata}; \code{standardise}, which averages across covariate patterns and returns another \code{markov_msm} object. Other functions include \code{diff(x,y)} which takes a difference between two \code{markov_msm} objects, and \code{ratio_markov_msm}, which gives the ratio of two \code{markov_msm} objects; both of these functions return objects that inherit from \code{"markov_msm"}. % Differences from the same models are just different weights... \section{Simulations} % The research questions included assessing the statistical properties (including bias and coverage) for: (i) different transformations of state occupation probabilities and length of stay; (ii) different regression models; and (iii) sample size. % We used exponentially distributed data from an illness-death model to estimate the proportion that are healthy, ill or dead using (a) different sample sizes (500, 1000, 10000), (b) different regression models (Poisson regression, Weibull regression), and (c) different transformations for state occupation probabilities (identity, log, logit, and arcsin) and length of stay (identity, log). To assess the small sample properties compared with the asymptotics properties, we undertook several simulations. We fitted a Markov illness-death model with Weibull transition rates with a shape parameter of 1.5 and a scale parameter of 10 for the transitions Healthy $\rightarrow$ Illness, Healthy $\rightarrow$ Death, and Illness $\rightarrow$ Death. We simulated for 1000 individuals with censoring min(20,Uniform(0,30)). We fitted the transitions using Weibull regression using the \code{aftreg} model from the \pkg{eha} package. The expected state occupation probabilities were predicted using the ODE solver with the true parameters. For each simulation, we predicted the state occupation probabilities, bias, confidence intervals using five transformations (plain confidence intervals, and confidence intervals based on log-log, log, logit and arcsin transformations), and coverage. We then calculated the mean bias, mean squared error and coverage across 1000 simulations. \begin{figure}[!ht] \centering \includegraphics{aft-weibull-20190816.pdf} \caption{State occupation coverage for a Markov illness-death model with Weibull-distributed times, fitted using Weibull regression models. The panels represent confidence intervals based on different transformation methods.} \label{fig:coverage} \end{figure} Across the 1000 simulations, the mean bias for the state occupation probabilities for any of the three states across time varied between -0.0006 and 0.0008, while the mean squared error varied between 0 and 0.0002. Coverage was generally close to 0.95 for each of the transformation methods (Figure~\ref{fig:coverage}), particularly given that the binomial variability at 950/1000 has a 95\% confidence interval of (0.945,0.963). The ``plain'' untransformed approach performs poorly close to start for the initial state. \begin{figure}[!ht] \centering \includegraphics[width=0.7\linewidth]{aft-weibull-los-20190816.pdf} \caption{Length of stay coverage for a Markov illness-death model with Weibull-distributed times, fitted using Weibull regression models. The panels represent confidence intervals based on different transformation methods.} \label{fig:coverage-los} \end{figure} Across the 1000 simulations, the mean bias for the length of stay for any of the three states across time varied between -0.006 and 0.008 , while the mean squared error varied between 0 and 0.004. Coverage was generally close to 0.95 for both of the transformation methods (Figure~\ref{fig:coverage-los}). \section{Example} We will extend an analysis by \cite{Crowther_Lambert_2017} of the Rotterdam Breast Cancer Data \citep{sauerbrei2007,foekens2000}. This dataset includes patients who were treated for primary breast cancer in Rotterdam during 1978--1993. Treatment included primary surgery, with either mastectomy or breast conserving therapy, with possible referral for radiation treatment within three months of surgery. Study exclusion criteria included: (i) patient tissue based on biopsy only; (ii) metastatic disease at primary surgery or within one month of surgery; (iii) relapse or residual disease within one month of surgery; (iv) relapse prior to referral to radiation therapy; or (v) a previous primary cancer. For the analysis, patients were also excluded if they had adjuvant treatment but were node-negative, or if they had missing information on the number of positive nodes. After these exclusions, data were available for 2982 patients. Following the analysis by \cite{Crowther_Lambert_2017}, we model for three states, including (1) the initial \emph{post-surgery} state, (2) \emph{relapse} and (3) \emph{death}, with transitions (1)$\rightarrow$(2) for death from the post-surgery state with hazard $h_1(t)$, (1)$\rightarrow$(3) for relapse with hazard $h_2(t)$, and (2)$\rightarrow$(3) for death from the relapse state with hazard $h_3(t)$. All three transitions are modelled using time since surgery as the primary time scale. Crowther and Lambert used flexible parametric survival models on the \emph{log cumulative hazard scale}, where $H_j(t|\bm{x})=\int_0^th_j(u|\bm{x})du=\exp(s_j(t)+\eta_j(t,\bm{x}))$ for baseline $s_j(t)$ and linear predictors $\eta_j(t,\bm{x})$ defined by \begin{align*} \eta_1(t,\bm{x}) &= \beta_1\texttt{age}+\beta_2\texttt{nodes}+\beta_3\texttt{hormon} + I(20<\texttt{size}\leq 50)s_{4}(t) + \\ &\quad I(\texttt{size}>50)s_{5}(t) + I(\texttt{pr\_1})s_6(t) \\ \eta_2(t,\bm{x}) &= \beta_1\texttt{age}+\beta_2\texttt{nodes}+\beta_3\texttt{hormon} + \\ &\quad\beta_4I(20<\texttt{size}\leq 50)+\beta_4I(\texttt{size}>50)+\beta_5I(\texttt{pr\_1}) \\ \eta_3(t,\bm{x}) &= \beta_1\texttt{age}+\beta_2\texttt{nodes}+\beta_3\texttt{hormon} + \\ &\quad\beta_4I(20<\texttt{size}\leq 50)+\beta_4I(\texttt{size}>50)+I(\texttt{pr\_1})s_{7}(t) \end{align*} where \texttt{age} is the age in years at cancer treatment, \texttt{nodes} is the number of positive lymph nodes, \texttt{hormon} is an indicator for whether the patient was on hormonal therapy, \texttt{size} is the tumour size (mm), \texttt{pr\_1} is the log of one plus the progesterone level (fmol/L), $I(p)$ is an indicator function with value 1 when the predicate $p$ is true and value 0 otherwise, $s_0(t)=\sum_{j=0}^3 B_j(\log(t))\beta_{0j}$ for a natural splines basis function $B_j()$ with knots at the quantiles for log of the events times, and $s_k(t)=\beta_{k0}+\beta_{k1}\log(t)$ for $k>1$. The parameters are assumed to be distinct between the linear predictors. The hazards are calculated from the cumulative hazard using $h_j(t|\bm{x})=H_j'(t|\bm{x})$. Note that ratios of these hazards may not have a simple interpretation, particularly with continuous or multiple time-varying effects (see Appendix). Moreover, age is expected to be closely related to the mortality rates and modelling using a single parameter may not capture this important variation. For ease of comparison, we do not further investigate changes in the model formulations and focus on predictions from these fitted models. For predictions, Crowther and Lambert used \emph{conditional} predictions for a patient aged 54 years with a transformed progesterone level of 3 (that is, progesterone $=\exp(3)-1=19.1$ fmol/L), with the number of positive lymph nodes varying between 0, 10 and 20, and with each of the three levels for tumour size. We are able to model and predict for conditional relationships in less than 20 seconds (code included in the documentation for the \texttt{rstpm2} package on CRAN). We now focus on \emph{marginal} or \emph{standardised} predictions for patients aged 50--59 years. In particular, we will compare state occupation probabilities and length of stay under counterfactual tumour sizes. Let the subjects aged 50--59 years be indexed by $k=1\ldots K$ and let $X$ represent tumour size and $\bm{Z}$ represent the other covariates. Then the predictions under the counterfactual $\hat{X}=x$ are modelled by \begin{align*} P_{1j}(0,t|\hat{X}=x) &= E_{\bm{Z}}(P_{1j}(0,t|\bm{Z},\hat{X}=x))\\ &= \frac{1}{K} \sum_{k=1}^K P_{1j}(0,t|\bm{Z}=\bm{z}_k,\hat{X}=x) \\ L_{1j}(0,t|\hat{X}=x) &= E_{\bm{Z}}(L_{1j}(0,t|\bm{Z},\hat{X}=x)) \end{align*} The specific counterfactuals are that all patients have a tumour size that is either (i) $\leq$ 20 mm, (ii) $>$ 20 mm and $\leq$ 50 mm, or (iii) $>$ 50 mm. The age restriction is due to the strong age dependence for each of the transitions. Differences in state occupation probabilities and length of stay by the counterfactuals are show in Figures~\ref{fig:1} and \ref{fig:2}, respectively. There is clear evidence that smaller tumour sizes are associated with fewer early relapses and a lower risk of death for fifteen years after treatment. \begin{figure}[!ht] \centering \includegraphics{multistate_fig-1.pdf} \caption{Differences in standardised state occupation probabilities by state and by contrasts for counterfactual tumour size, for female breast cancer patients aged 50--59 years and diagnosed 1978--1993, Rotterdam} \label{fig:1} \end{figure} \begin{figure}[!ht] \centering \includegraphics{multistate_fig-2.pdf} \caption{Differences in standardised length of stay by state and by contrasts for counterfactual tumour size, for female breast cancer patients aged 50--59 years and diagnosed 1978--1993, Rotterdam} \label{fig:2} \end{figure} We also explored other model formulations, including penalised log-hazard models ($h_j(t|\bm{x})=\exp(s_j(t)+\eta_j(t,\bm{x}))$) and accelerated failure time models ($S_j(t|\bm{x})=S_{0j}(\int_0^t\exp(\eta_j(t,\bm{x}))du)$, where $S_{0j}(t)=\exp(-\exp(s_j(t)))$). \section{Discussion} In summary, we describe how to predict from Markov multi-state models with smooth transition intensities using ordinary differential equations. A variety of predictions can be estimated, together with interval estimation based on the multivariate delta method. The method is suitable for a range of models, including Poisson regression, parametric and flexible accelerated failure time models, and parametric and penalised generalised survival models. Applications of these methods could range from descriptive epidemiology, to causal inference, through to health economic evaluations of cost-effectiveness. The recent article by \citet{Ryalen_Stensrud_Roysland_2018} provides a non-parametric analogue to our development. Those non-parametric methods can readily be extended to many of the estimators described herein, including standardisation, quality-adjusted life-years and costs. The asymptotic theory for the non-parametric approach has been shown to hold for Aalen's additive hazards model; it is unclear whether non-parametric estimators for accelerated failure and proportional hazards models will satisfy the assumptions in Theorems 1 and 2 of \citet{Ryalen_Stensrud_Roysland_2018}. Moreover, it is arguable when an additive hazards scale is suitable for covariate adjustment, for example, for modelling all-cause or cause-specific survival with age at cancer diagnosis as a covariate. We suggest that (smooth) accelerated failure time models may provide a useful alternative regression model framework which is also collapsible. Under the conditions described by \citet{Datta_Satten_2001}, predictions that are functions of the state occupation probability are, under suitable regularity assumptions, expected to be consistently estimated irrespective of whether the Markov assumption holds. However other predictions (e.g. transition probabilities, or the proportion to ever pass through a state) may not be consistently estimated. Moreover, the efficiency of the predictions when the time scale has been mis-specified may be low. Alternative approaches include individual-based simulations, with variance estimation using the bootstrap \cite{Crowther_Lambert_2017}, which are expected to be computationally expensive. \bibliography{lib} \section*{Appendix A: Time-varying effects for log cumulative hazards models} For modelling on the log cumulative hazard scale with a linear predictor $\eta(t,\bm{x}_i)$ given time $t$ and covariates $\bm{x}_i$, the cumulative hazard $H(t|\bm{x}_i)$ can be represented by \begin{align*} H(t|\bm{x}_i) &= \exp(\eta(t,\bm{x}_i)) \\ \implies h(t|\bm{x}_i) &= \exp(\eta(t,\bm{x}_i)) \frac{\partial}{\partial t} \eta\left(t,\bm{x}_i\right) \end{align*} where $h(t|\bm{x}_i)$ is the hazard. The \emph{hazard ratio} comparing covariates $\bm{x}_1$ and $\bm{x}_0$ is then \begin{align} \frac{h(t|\bm{x}_1) }{h(t|\bm{x}_0) } &= \exp(\eta(t,\bm{x}_1)-\eta(t,\bm{x}_0)) \left(1+\frac{\frac{\partial}{\partial t} \left(\eta\left(t,\bm{x}_1\right)-\eta\left(t,\bm{x}_0\right)\right)}{\frac{\partial}{\partial t} \eta\left(t,\bm{x}_0\right)}\right)\label{eq:hrgen} \end{align} We have the following cases for the interpretation of the hazard ratios: \begin{itemize} \item[Case 1] \emph{Time-independent effects}: if $\frac{\partial}{\partial t} \left(\eta\left(t,\bm{x}_1\right)-\eta\left(t,\bm{x}_0\right)\right)=0$, then Equation~\eqref{eq:hrgen} gives the ratio $\exp(\eta(t,\bm{x}_1)-\eta(t,\bm{x}_0))$. This case will hold when the difference in the linear predictors is independent of $t$. Usefully, the log hazard ratio is then the difference in the linear predictors, which has a straightforward interpretation. A sufficient condition is that the covariates that change between $\bm{x}_1$ and $\bm{x}_0$ are independent of $t$. % Is this also a necessary condition? As a specific example, for a linear predictor $\eta(t,\bm{x}_i)=s_0(t)+\eta_0(\bm{x}_i)$ for baseline $s_0(t)$ and linear predictor $\eta_0(\bm{x}_i)$, then the log hazard ratio equals $\eta_0(\bm{x}_1)-\eta_0(\bm{x}_0)$, which is a \emph{proportional hazards} model. \item[Case 2] \emph{Small time-varying effects}: if $\frac{\partial}{\partial t} \left(\eta\left(t,\bm{x}_1\right)-\eta\left(t,\bm{x}_0\right)\right)\ll \frac{\partial}{\partial t} \eta\left(t,\bm{x}_0\right)$, then $\frac{h(t|\bm{x}_1) }{h(t|\bm{x}_0) }\approx\exp(\eta(t,\bm{x}_1)-\eta(t,\bm{x}_0))$. For this case, the partial derivative with respect to time for the change in the linear predictor is small compared with partial derivative for the linear predictor for $\bm{x}_0$. This suggests that the interpretation for moderately small time-varying effects will be straightforward (up to an approximation). \item[Case 3] \emph{Stratified model}: if we have a stratified linear predictor $\eta(t,\bm{x}_i,j)=s_j(t)+\eta_j(\bm{x}_i)$ for stratum $j$ with baseline $s_j(t)$ and linear predictor $\eta_j(\bm{x}_i)$, then \begin{align} \frac{h(t|\bm{x}_1,j) }{h(t|\bm{x}_0,k) } &= \exp\left( s_j(t)+\eta_j(\bm{x}_1)+\log(s_j'(t))- \left(s_k(t)+\eta_k(\bm{x}_0)+\log(s_k'(t))\right) \right) \label{eq:stratified} \end{align} If $j=k$ then $\frac{h(t|\bm{x}_1,j) }{h(t|\bm{x}_0,k)}=\exp(\eta_j(\bm{x}_1)-\eta_j(\bm{x}_0))$, which is proportional hazards. If $j\neq k$, then Equation~\eqref{eq:stratified} can be interpreted as having separable effects (on the log hazard scale) for the time effects and for the other covariates. \item[Case 4] \emph{Linear time-varying effect}: if we have a linear predictor $\eta(t,x_i,\bm{u}_i)=s_0(t)+x_i s_1(t)+\eta_0(\bm{v}_i)$ for a scalar $x_i$ and a vector of other covariates $\bm{v}_i$, then \begin{align*} \frac{h(t|x_1,\bm{v}_1) }{h(t|x_0,\bm{v}_0) } &= \exp\left((x_1-x_0)s_1(t)+\eta_0(\bm{v}_1)-\eta_0(\bm{v}_0)\right)\left(1+\frac{(x_1-x_0)s_1'(t)}{s_0'(t)+x_0s_1'(t)}\right) \end{align*} From the ratio $(x_1-x_0)s_1'(t)/(s_0'(t)+x_0s_1'(t))$, we see that the time-varying hazard ratio depends on both the baseline value $x_0$ and the difference $x_1-x_0$. The interpretation of the effect will be straightforward when $x_i$ is for a binary indicator (e.g. $x_0=0$ and $x_1=1$). \item[Case 5] \emph{Multiple time-varying effects}: if we have a linear predictor $\eta(t,x_i,\bm{u}_i)=s_0(t)+x_i s_1(t)+u_i s_2(t)+\eta_0(\bm{v}_i)$ for scalars $x_i$ and $u_i$ and a vector of other covariates $\bm{v}_i$, then \begin{align*} \frac{h(t|x_1,u_1,\bm{v}_1) }{h(t|x_0,u_0,\bm{v}_0) } &= \exp\left((x_1-x_0)s_1(t)+(u_1-u_0)s_2(t)+\eta_0(\bm{v}_1)-\eta_0(\bm{v}_0)\right)\times\\ &\qquad \left(1+\frac{(x_1-x_0)s_1'(t)+(u_1-u_0)s_2'(t)}{s_0'(t)+x_0s_1'(t)+u_0s_2'(t)}\right) \end{align*} From the ratio in the last line, we see that the hazard ratio depends on both the baseline values $x_0$ and $u_0$ and the differences $x_1-x_0$ and $u_1-u_0$. The multiple effects will be straightforward to interpret if $x_i$ and $u_i$ are binary indicators for strata (see Case 3). % \item[Case 6] Otherwise, the hazard ratio for time-varying effects may depend on the combinationof covariate values of . \end{itemize} In summary, time-independent effects and stratified models have a straightforward interpretation, however continuous time-varying effects and multiple time-varying effects on a log cumulative hazard scale are more difficult to interpret in terms of hazard ratios. \section*{Appendix B: Hazard specifications} \begin{table}[!ht] \centering \begin{minipage}{\textwidth} \begin{tabular}{llll} Class & Model & R function & Specification\footnote{Notes: $\eta(t,\bm{x})$ and $\eta(\bm{x})$ are linear predictors for time $t$ and covariates $\bm{x}$, and $S_0(t)$ is a baseline survival model.} \\ \hline Parametric & Poisson regression & \texttt{stats::glm} & $\log(h(t|\bm{x})) = \eta(t,\bm{x})$ \\ & Accelerated failure time & \texttt{flexsurv::flexsurvreg} & $S(t|\bm{x})=S_0(\exp(\eta(\bm{x}))t)$ \\ & & \texttt{eha::aftreg} & $S(t|\bm{x})=S_0(\exp(\eta(\bm{x}))t)$ \\ && \texttt{rstpm2::aft} & $S(t|\bm{x})=S_0(\int_0^t \exp(\eta(u,\bm{x}))du)$\\ & Generalized survival & \texttt{flexsurv::flexsurvspline} & $\log(H(t|\bm{x})) = \eta(t,\bm{x})$ \\ && \texttt{rstpm2::stpm2} & $\log(H(t|\bm{x})) = \eta(t,\bm{x})$ \\ Penalised & Poisson regression & \texttt{mgcv::gam} & $\log(h(t|\bm{x})) = \eta(t,\bm{x})$ \\ & Log-hazard & \texttt{survPen::survPen} & $\log(h(t|\bm{x})) = \eta(t,\bm{x})$ \\ & Generalised survival & \texttt{rstpm2::pstpm2} & $\log(H(t|\bm{x})) = \eta(t,\bm{x})$ \\ Transformation & Zero & \texttt{rstpm2::zeroModel} & $h^*(t|\bm{x})=0$ \\ & Hazard ratio & \texttt{rstpm2::hrModel} & $h^*(t|\bm{x},\phi)=h(t|\bm{x})\phi$ \\ & Accelerated failure & \texttt{rstpm2::aftModel} & $h^*(t|\bm{x},\phi)=h(\phi t|\bm{x})\phi$ \\ & Additive models & \texttt{rstpm2::addModel} & $h^*(t|\bm{x})=h_1(t|\bm{x})+h_2(t|\bm{x})$ \\ & Hazard function & \texttt{rstpm2::hazFun} & $h(t|\bm{x})$ \\ & Spline interpolation & \texttt{rstpm2::splineFun} & $h(t|\bm{x})=\exp(s(t))$ \end{tabular} \end{minipage} \caption{Hazard specifications} \label{tab:models} \end{table} For Table~\ref{tab:models}, the generality of the linear predictor may be constrained by the model class; For example, \texttt{flexsurv::flexsurvspline} only allows for spline interactions between time and covariates. The baseline survival models for \texttt{flexsurv::flexsurvreg} and \texttt{eha::aftreg} are from a parametric family, while the baseline survival for \texttt{rstpm2::aft} is where the log cumulative hazards are based on splines. The generalised survival models also allow for other transformations, including proportional odds, probit and additive hazards models. Arbitrary smooth hazards can be defined using \texttt{hazFun}; as an example, a spline interpolation for log-hazards is defined using \texttt{splineFun}. The transformation functions at the end of the table are meant to take one or more models as inputs and predict rates that are functions of the given models. Formally, Poisson regression models are models for rates rather than for hazards. \section*{Appendix C: Smooth accelerated failure time models} The smooth accelerated failure time models implemented by $\texttt{rstpm2::aft}$ and the Stata command \texttt{staft} have not been described elsewhere. Survival for these models at time $t$ with covariates $\bm{x}$ is defined by \begin{align*} S(t|\bm{x}) &= S_0\left(\int_0^t \exp(\eta(u,\bm{x})) \text{d}u\right) \end{align*} where $S_0(t) = \exp\left(-\exp\left(s(\log(t)) \right)\right)$ is baseline survival, $s(u)$ is a smooth function with support on the real line (e.g. natural splines), and $\exp(\eta(u,\bm{x}))$ is a time-varying acceleration factor. We can replace the integration for the acceleration factor by a cumulative function $\exp(\eta_1(\log(t),\bm{x}))$, such that \begin{align*} \int_0^t\exp(\eta(u,\bm{x}))\text{d}u &= \exp(\eta_1(\log(t),\bm{x})) \\ \implies \eta(t,\bm{x}) &= \eta_1(\log(t),\bm{x})+\log\left(\frac{\partial}{\partial t} \eta_1(\log(t),\bm{x})\right) \end{align*} such that we can calculate the time-varying acceleration factor by differentiation. The cumulative linear predictor $\eta_1(\log(t),\bm{x})$ can be defined using a smooth function of log time (e.g. using natural splines). We can calculate the hazards by \begin{align*} h(t|\bm{x}) &= \frac{\text{d}}{\text{d}t} \exp\left(s(\eta_1(\log(t),\bm{x}))\right) \\ &= \exp\left(s(\eta_1(\log(t),\bm{x}))\right) s'(\eta_1(\log(t),\bm{x})) \frac{\partial}{\partial t} \eta_1(\log(t),\bm{x}) \end{align*} This model has been implemented in R and Stata for left truncated and right censored data. % axiom: eta := operator 'eta; integrate(exp(eta(u)),u=0..t) \end{document} rstpm2/inst/doc/predictnl.Rnw0000644000176200001440000002073715040663325015714 0ustar liggesusers%\VignetteIndexEntry{Introduction to the predictnl function} %\VignetteDepends{rstpm2} %\VignetteKeyword{variance estimation, delta method} %\VignettePackage{rstpm2} %!\SweaveUTF8 \documentclass[article,nojss,12pt]{jss} \usepackage{Sweave,graphicx,amsmath,amsfonts,amssymb,url} \title{Introduction to the predictnl function} \author{Mark~Clements\\Karolinska Institutet} \Abstract{ The \code{predictnl} generic function supports variance estimation for non-linear estimators using the delta method with finite differences for the partial derivatives. The function loosely extends the \code{predict} generic function. } \Keywords{delta method,variance estimation} \Address{Mark~Clements\\ Department of Medical Epidemiology and Biostatistics\\ Karolinska Institutet\\ Email: \email{mark.clements@ki.se} } \begin{document} \section{Introduction} The delta method provides a general approach to calculate the variance (or standard errors) for a number of likelihood-based estimators. If we have an estimated vector of parameters $\hat\theta$ with covariance matrix $\boldsymbol{\hat\Sigma}$ and a vector prediction function $g(\theta)$, then the variance can be calculated using the delta method: \begin{align*} \text{var}(g(\hat\theta)) &= \left(\left.\frac{\partial g(\theta)}{\partial \theta}\right|_{\theta=\hat\theta}\right)^T \boldsymbol{\hat\Sigma} \left(\left.\frac{\partial g(\theta)}{\partial \theta}\right|_{\theta=\hat\theta}\right) \end{align*} Classical statistics tends to focus on analytical calculations for the partial derivatives. As an example, let $g(\theta_i)=\exp(\theta_i)$ for the $i$th parameter; then $\partial g(\theta_i)/\partial(\theta_i)=\exp(\theta_i)$ and $\partial g(\theta_i)/\partial(\theta_j)=0$ for $i\neq j$. We then have that $\text{var}(g(\hat\theta_i))=\text{diag}\left(\exp(\hat\theta_i)\right)^T \boldsymbol{\hat\Sigma}\ \text{diag}\left(\exp(\hat\theta)\right)$. The partials can be calculated symbolically: <<>>= thetahat <- c(0.1,0.2) Sigma <- matrix(c(1,0.3,0.3,1),2,2) print(partial <- D(expression(exp(theta)),"theta")) partial <- diag(eval(partial,list(theta=thetahat))) var <- t(partial) %*% Sigma %*% partial data.frame(fit=exp(thetahat), se.fit=sqrt(diag(var))) @ Note that we have calculated the standard errors by taking the square root of the diagonal of the matrix. We can also calculate the partials using finite differences, such that for a continuous function $f$ \begin{align*} f'(x) &=\lim_{\epsilon \rightarrow 0}\frac{f(x+\epsilon)-f(x-\epsilon)}{2\epsilon} \end{align*} In R: <<>>= myD <- function(f,x,eps=1e-5) (f(x+eps)-f(x-eps))/(2*eps) partial <- diag(myD(exp,thetahat)) var <- t(partial) %*% Sigma %*% partial data.frame(fit=exp(thetahat),se.fit=sqrt(diag(var))) @ This gives the same estimates to six decimal places. We could also calculate these values using the \code{predictnl} command, which we now introduce. The \code{predictnl} generic function provides a generalisation of the \code{predict} generic function to calculate standard errors. \code{predictnl} uses finite differences (or a user-supplied matrix) to calculate the partial derivatives. The basic call is \code{predictnl(object, fun, newdata=NULL, ...)} where \code{fun} takes the \code{object} as the first argument; \code{newdata} is an optional argument to \code{fun}, and other arguments \code{...} are passed to \code{fun}. The \code{object} is required to have three methods: (i) \code{vcov.class} to extract the variance-covariance matrix of the estimated parameters; (ii) \code{coef.class} to extract the coefficients; and (iii) \code{coef<-.class} to set the coefficients. For the example above, we use a \code{test} class and define the three methods; note that the \code{coef} and \code{coef<-} methods are as per the default. We then define an object (named \code{fit}) of that class, define a prediction function \code{expcoef} which exponentiates the coefficients, and then call \code{predictnl}: <<>>= library(rstpm2) vcov.test <- function(object) object$vcov coef.test <- function(object) object$coefficients # default "coef<-.test" <- function(object,value) { object$coefficients <- value; object} # default fit <- structure(list(vcov=Sigma,coefficients=thetahat),class="test") expcoef <- function(object) exp(coef(object)) predictnl(fit,expcoef) @ This gives the same output as before. Generic methods for \code{vcov} and \code{coef} are available for most regression models; a default implementations for \code{coef<-} is provided in the \code{rstpm2} package. <<>>= rstpm2:::"coef<-.default" @ For another simple example, consider a linear regression with a single covariate, such that $E(y)=\beta_0+\beta_1 x_1$ for standard normal distributed $x_1$ with homoscedastic standard normal errors. For a given outcome $y$, we want to find the value of $x$ that solves $y=\hat\beta_0+\hat\beta_1 x$. <<>>= set.seed(123456) x1 <- rnorm(1000) y <- rnorm(1000,x1) fit <- lm(y~x1) invert <- function(object,newdata) { thetahat <- coef(object) (newdata$y-thetahat[1])/thetahat[2] } predictnl(fit, invert, newdata=data.frame(y=seq(0,2,by=0.5))) @ We can also calculate average values across the sample under counterfactual exposures. We extend the previous example to include a second Bernoulli-distributed covariate $x_2$ with $p=0.5$, where $E(y)=\beta_0+\beta_1 x_1+\beta_2 x_2$. We may be interested in calculating the marginal estimators $E(y|x_2=0)$, $E(y|x_2=1)$ and $E(y|x_2=1)-E(y|x_2=0)$, where the expectations are across the full dataset\footnote{Under suitable causal assumptions, we could re-write the three estimators as $E(y|\text{do}(x_2)=0)$, $E(y|\text{do}(x_2)=1)$ and $E(y|\text{do}(x_2)=1)-E(y|\text{do}(x_2)=0)$.}. Then: <<>>= set.seed(123456) x1 <- rnorm(1000) x2 <- rbinom(1000,1,0.5) y <- rnorm(1000,x1+x2) fit <- lm(y~x1+x2) standardise <- function(object,newdata) mean(predict(object,newdata)) predictnl(fit, standardise, newdata=data.frame(x1,x2=0)) predictnl(fit, standardise, newdata=data.frame(x1,x2=1)) standdiff <- function(object,newdata) standardise(object,transform(newdata,x2=1))- standardise(object,transform(newdata,x2=0)) predictnl(fit, standdiff, newdata=data.frame(x1)) @ As a final example, we consider modelling for additive interaction contrasts using \code{rstpm2}. Consider a time-to-event variable $T$ with two binary exposures $x_1$ and $x_2$. Adapting the formulations from Rothman et al (Modern Epidemiology, third edition, 2008) to time-dependent outcomes, the interaction contrast $\text{IC}(t)$ and relative excess risk for interaction $\text{RERI}(t)$ can be calculated by \begin{footnotesize} \begin{align*} \text{IC}(t) &= \text{Pr}(T\leq t|x_1=1, x_2=1)-\text{Pr}(T\leq t|x_1=1, x_2=0)-\text{Pr}(T\leq t|x_1=0, x_2=1)+\text{Pr}(T\leq t|x_1=0, x_2=0) \\ &= -(S(t|x_1=1, x_2=1)-S(t|x_1=1, x_2=0)-S(t|x_1=0, x_2=1)+S(t|x_1=0, x_2=0)) \\ \text{RERI}(t) &= \frac{\text{Pr}(T\leq t|x_1=1, x_2=1)-\text{Pr}(T\leq t|x_1=1, x_2=0)-\text{Pr}(T\leq t|x_1=0, x_2=1)+\text{Pr}(T\leq t|x_1=0, x_2=0)}{\text{Pr}(T\leq t|x_1=0, x_2=0)}\\ &= -\frac{S(t|x_1=1, x_2=1)-S(t|x_1=1, x_2=0)-S(t|x_1=0, x_2=1)+S(t|x_1=0, x_2=0)}{1-S(t|x_1=0, x_2=0)} \end{align*} \end{footnotesize} where $S(t|x_1,x_2)$ is the survival function. As an empirical example, we can use the \code{brcancer} dataset with the randomised hormonal therapy (variable \code{hormon}, encoded 0 and 1) and stage (1 vs 2--3; variable \code{x4.23} encoded \code{TRUE} and \code{FALSE}). The research question is whether there is a more than additive interaction between therapy and stage. <>= brcancer2 <- transform(brcancer, x4.23=x4 %in% 2:3) fit1 <- stpm2(Surv(rectime,censrec==1)~hormon*x4.23,data=brcancer2,df=3) newd <- data.frame(hormon=0,x4.23=FALSE) RERI <- function(object, newdata, var1, val1=1, var2, val2=1) { exp1 <- function(data) {data[[var1]] <- val1; data} exp2 <- function(data) {data[[var2]] <- val2; data} s11 <- predict(object, newdata=exp1(exp2(newdata)), type="surv") s10 <- predict(object, newdata=exp1(newdata), type="surv") s01 <- predict(object, newdata=exp2(newdata), type="surv") s00 <- predict(object, newdata, type="surv") -(s11-s10-s01+s00)/(1-s00) } times <- seq(0,2500,length=301)[-1] reri <- predictnl(fit1,fun=RERI,newdata=transform(newd,rectime=times), var1="hormon",var2="x4.23",val2=TRUE) with(reri, matplot(times,fit+cbind(0,-1.96*se.fit,+1.96*se.fit), type="l",lty=c(1,2,2),col=1, xlab="Time since diagnosis", ylab="RERI")) abline(h=0,lty=3) @ \end{document} rstpm2/inst/doc/predictnl.R0000644000176200001440000000711115105126130015324 0ustar liggesusers### R code from vignette source 'predictnl.Rnw' ################################################### ### code chunk number 1: predictnl.Rnw:41-47 ################################################### thetahat <- c(0.1,0.2) Sigma <- matrix(c(1,0.3,0.3,1),2,2) print(partial <- D(expression(exp(theta)),"theta")) partial <- diag(eval(partial,list(theta=thetahat))) var <- t(partial) %*% Sigma %*% partial data.frame(fit=exp(thetahat), se.fit=sqrt(diag(var))) ################################################### ### code chunk number 2: predictnl.Rnw:54-58 ################################################### myD <- function(f,x,eps=1e-5) (f(x+eps)-f(x-eps))/(2*eps) partial <- diag(myD(exp,thetahat)) var <- t(partial) %*% Sigma %*% partial data.frame(fit=exp(thetahat),se.fit=sqrt(diag(var))) ################################################### ### code chunk number 3: predictnl.Rnw:63-71 ################################################### library(rstpm2) vcov.test <- function(object) object$vcov coef.test <- function(object) object$coefficients # default "coef<-.test" <- function(object,value) { object$coefficients <- value; object} # default fit <- structure(list(vcov=Sigma,coefficients=thetahat),class="test") expcoef <- function(object) exp(coef(object)) predictnl(fit,expcoef) ################################################### ### code chunk number 4: predictnl.Rnw:75-76 ################################################### rstpm2:::"coef<-.default" ################################################### ### code chunk number 5: predictnl.Rnw:80-89 ################################################### set.seed(123456) x1 <- rnorm(1000) y <- rnorm(1000,x1) fit <- lm(y~x1) invert <- function(object,newdata) { thetahat <- coef(object) (newdata$y-thetahat[1])/thetahat[2] } predictnl(fit, invert, newdata=data.frame(y=seq(0,2,by=0.5))) ################################################### ### code chunk number 6: predictnl.Rnw:93-105 ################################################### set.seed(123456) x1 <- rnorm(1000) x2 <- rbinom(1000,1,0.5) y <- rnorm(1000,x1+x2) fit <- lm(y~x1+x2) standardise <- function(object,newdata) mean(predict(object,newdata)) predictnl(fit, standardise, newdata=data.frame(x1,x2=0)) predictnl(fit, standardise, newdata=data.frame(x1,x2=1)) standdiff <- function(object,newdata) standardise(object,transform(newdata,x2=1))- standardise(object,transform(newdata,x2=0)) predictnl(fit, standdiff, newdata=data.frame(x1)) ################################################### ### code chunk number 7: predictnl.Rnw:120-142 ################################################### brcancer2 <- transform(brcancer, x4.23=x4 %in% 2:3) fit1 <- stpm2(Surv(rectime,censrec==1)~hormon*x4.23,data=brcancer2,df=3) newd <- data.frame(hormon=0,x4.23=FALSE) RERI <- function(object, newdata, var1, val1=1, var2, val2=1) { exp1 <- function(data) {data[[var1]] <- val1; data} exp2 <- function(data) {data[[var2]] <- val2; data} s11 <- predict(object, newdata=exp1(exp2(newdata)), type="surv") s10 <- predict(object, newdata=exp1(newdata), type="surv") s01 <- predict(object, newdata=exp2(newdata), type="surv") s00 <- predict(object, newdata, type="surv") -(s11-s10-s01+s00)/(1-s00) } times <- seq(0,2500,length=301)[-1] reri <- predictnl(fit1,fun=RERI,newdata=transform(newd,rectime=times), var1="hormon",var2="x4.23",val2=TRUE) with(reri, matplot(times,fit+cbind(0,-1.96*se.fit,+1.96*se.fit), type="l",lty=c(1,2,2),col=1, xlab="Time since diagnosis", ylab="RERI")) abline(h=0,lty=3) rstpm2/inst/doc/Introduction.Rnw0000644000176200001440000006404115053637733016415 0ustar liggesusers%\VignetteIndexEntry{Introduction to the rstpm2 Package} %\VignetteDepends{rstpm2} %\VignetteKeyword{survival, spline} %\VignettePackage{rstpm2} %!\SweaveUTF8 \documentclass[nojss]{jss} \usepackage{amsmath,amsfonts,enumitem,fancyvrb,hyperref} \usepackage[utf8]{inputenc} \VerbatimFootnotes \usepackage[margin=2.6cm]{geometry} % wide margins \usepackage{wasysym} \usepackage{tablefootnote} \title{Introduction to the \pkg{rstpm2} package} \author{Mark~Clements\\Karolinska Institutet} \Plainauthor{Mark~Clements} \Plaintitle{Introduction to the rstpm2 package} \Abstract{ This vignette outlines the methods and provides some examples for generalised survival models as implemented in the \proglang{R} \pkg{rstpm2} package. } \Keywords{survival, splines} \Plainkeywords{survival, splines} \Address{Mark~Clements\\ Department of Medical Epidemiology and Biostatistics\\ Karolinska Institutet\\ Email: \email{mark.clements@ki.se} } \begin{document} \section{Background and theory} \emph{Generalised survival models} provide a flexible and general approach to modelling survival or time-to-event data. The survival function $S(t|x)$ to time $t$ for covariates $x$ is defined in terms of a inverse link function $G$ and a linear prediction $\eta(t,x)$, such that \begin{align*} S(t|x;\,\theta) &= G(\eta(t,x;\,\theta)) \end{align*} \noindent where $\eta$ is a function of both time $t$ and covariates $x$, with regression parameters $\theta$. We can calculate the hazard from this function, where \begin{align*} h(t|x;\,\theta) &= \frac{d}{dt} \left(-\log(S(t|x;\,\theta))\right) \\ &= \frac{-G'(\eta(t,x;\,\theta))}{G(\eta(t,x;\,\theta))}\frac{\partial \eta(t,x;\,\theta)}{\partial t} \end{align*} We model using a linear predictor $\eta(t,x;\,\theta)=X(t,x)\theta$ for a design matrix $X(t,x)$. The linear predictor can be constructed in a flexible manner, with the main constraint being that the time effects be smooth and twice differentiable. We calculate the derivative for the linear predictor using finite differences, such that \begin{align*} \frac{\partial \eta(t,x;\,\theta)}{\partial t} &= \frac{\partial X(t,x)\theta}{\partial t} = \frac{X(t+\epsilon,x)-X(t-\epsilon,x)}{2\epsilon}\theta = X_D(t,x)\theta \end{align*} for a derivative design matrix $X_D(t,x)$. This formulation allows for considerable flexibility in the construction of the linear predictor, with possible interactions between time and covariates. The default smoother for time using natural splines for log(time), which is the flexible parametric survival model developed by Royston and Parmar (2003) and implemented by the Stata command \verb+stpm2+~\footnote{As a technical aside, the Stata implementation uses natural splines using a truncated power basis with orthogonalisation, while the \verb+ns()+ function in \verb+R+ uses a matrix projection of B-splines. Note that we have implemented an extended \verb+nsx()+ function for natural splines that includes cure splines, centering, and a compatibility argument to use Stata \verb+stpm2+'s unusual specification of quantiles.} \begin{table}[!ht] \centering \begin{tabular}[!ht]{llll} Link description & Inverse link function $G(\eta(t,x;\,\theta))$ & Interpretation & \verb+link.type+ \\ \hline log$-$log & $\exp(-\exp(\eta(t,x;\,\theta)))$ & Proportional hazards & \verb+"PH"+\\ logit & $\text{expit}(-\eta(t,x;\,\theta))$ & Proportional odds & \verb+"PO"+ \\ probit & $\Phi(-\eta(t,x;\,\theta))$ & Probit & \verb+"probit"+ \\ log & $\exp(-\eta(t,x;\,\theta))$ & Additive hazards & \verb+"AH"+ \\ Aranda-Ordaz & $\exp(-\log(\psi*\exp(\eta(t,x;\,\theta))+1)/\psi)$ & Aranda-Ordaz & \verb+"AO"+ \end{tabular} \caption{Implemented link functions} \label{tab:links} \end{table} The models are estimated using maximum likelihood estimation (MLE) for fully parametric models, penalised MLE for penalised smoothers, maximum marginal likelihood estimation (MMLE) for parametric models with clustered data, or penalised MMLE for penalised models with clustered data. The likelihoods include left truncation, right censoring and interval censoring. For clustered data, we include Gamma frailties and normal random effects. Details on these models are available from \url{https://doi.org/10.1177/0962280216664760} and \url{https://doi.org/10.1002/sim.7451}. <>= options(width=80,useFancyQuotes="UTF-8") library(rstpm2) @ \section{Syntax} The main functions for fitting the models are \verb+stpm2+ for parametric models, possibly with clustered data, and \verb+pstpm2+ for penalised models, possibly with clustered data. A subset of the syntax for \verb+stpm2+ is: \begin{Verbatim} stpm2(formula, data, smooth.formula = NULL, df = 3, tvc = NULL, link.type=c("PH","PO","probit","AH","AO"), theta.AO=0, bhazard = NULL, robust = FALSE, cluster = NULL, frailty = !is.null(cluster) & !robust, RandDist=c("Gamma","LogN"), ...) \end{Verbatim} The \verb+formula+ has a \verb+Surv+ object on the left-hand-side and a linear predictor on the right-hand-side that does \emph{not} include time (for \verb+pstpm2+, it also does not include penalised functions). The time effects can be specified in several ways: the most general is using \verb+smooth.formula+, where the right-hand-side of the formula specifies functions for time that are smooth with respect to time. This specification can include interactions between time and covariates. As an example, \verb!smooth.formula=~nsx(log(time),df=3)+x:nsx(log(time),df=2)! specifies a baseline natural spline smoother of the log of the variable \verb+time+ used in the \verb+Surv+ object with three degrees of freedom, with an interaction between a covariate \verb+x+ and a natural spline smoother of log(\verb+time+) with two degrees of freedom. Other specifications of time effects have equivalent formulations: for example, \verb+df=3+ is equivalent to \verb!smooth.formula=~nsx(log(time),df=3)! for the variable \verb+time+. Similarly, \verb+tvc=list(x=2)+ is equivalent to \verb!smooth.formula=~x:nsx(log(time),df=2)!. Moreover, for a log-linear interaction between a covariate and time, use \verb!smooth.formula=~x:log(time)! A current limitation of the implementation is that the dataset \verb+data+ needs to be specified. Type of link is specified with the \verb+link.type+ argument; this defaults to a log$-$log link for proportional hazards (see Table~\ref{tab:links}). For the Aranda-Ordaz link, the fixed value of the scale term $\psi$ is specified using the \verb+theta.AO+ argument. For relative survival, a vector for the baseline hazard can be specified using the \verb+bhazard+ argument. A vector for the clusters can be specified with the \verb+cluster+ argument. The calculation of robust standard errors can be specified with the \verb+robust=TRUE+ argument; if \verb+robust+ is false, then the model assumes a frailty or random effects model, with either a default Gamma frailty (\verb+RandDist="Gamma"+) or a normal random effect (\verb+RandDist="LogN"+, using notation from the \verb+frailtypack+ package). The default specification for the additive hazards (\verb+link.type=="AH"+) models follows that for the \verb+ahaz+ package on CRAN: for a model specified as \verb+stpm2(Surv(time,event)~x, data=data, link.type="AH")+ we assume natural splines for the baseline time effect and a constant hazard for a unit change in the covariate \verb+x+; an equivalent specification is \verb!stpm2(Surv(time,event)~1, data=data, link.type="AH", smooth.formula=~nsx(time,df=3)+x:time)! where there is default smoother for time and an interaction between linear x and linear time. The regression coefficient for \verb+x:time+ can be interpreted as the additive rate for a unit change in \verb+x+. The syntax for the fitting the penalised models with \verb+pstpm2+ is very similar. A subset of the arguments are: \begin{Verbatim} pstpm2(formula, data, smooth.formula = NULL, tvc = NULL, bhazard = NULL, sp=NULL, criterion=c("GCV","BIC"), link.type=c("PH","PO","probit","AH","AO"), theta.AO=0, robust=FALSE, frailty=!is.null(cluster) & !robust, cluster = NULL, RandDist=c("Gamma","LogN"), ...) \end{Verbatim} The penalised smoothers are specified using the \verb+s()+ function from the \verb+mgcv+ package within the \verb+smooth.formula+ argument; by default, not specifying \verb+smooth.formula+ will lead to \verb!smooth.formula=~s(log(time))! Interactions with time (both penalised and unpenalised) and penalised covariate effects should be specified using \verb+smooth.formula+. Note that the \verb+df+ argument is not included. By default, the smoothing parameter(s) are using the \verb+criterion+ argument; the smoothing parameters can also be fixed using the \verb+sp+ argument. The specifications for relative survival, link type, and clustered data follow that for the \verb+stpm2+ function. \subsection{Post-estimation} One of the strengths of these models is varied post-estimation. Most of the estimators are described in Tables~\ref{tab:condpostest} and \ref{tab:margpostest}. These estimators are typically calculated from the \verb+predict+ function or from \verb+plot+ function calls. All of these calls require that the \verb+newdata+ argument is specified (in contrast to prediction in the \verb+survival+ package, which defaults to the average of each covariate). For contrasts (e.g. survival differences, hazard ratios), the \verb+newdata+ argument is the ``unexposed'' group, while the exposed group is defined by either: (i) a unit change in a variable in \verb+newdata+ as defined by the \verb+var+ argument (e.g. \verb+var="x"+ for variable \verb+x+); or (ii) an \verb+exposed+ function that takes a data-frame and returns the ``exposed'' group; for example \begin{verbatim} exposed=function(data) transform(data, x=1) \end{verbatim} The latter mechanism is quite general and allows for standardised survival, standardised hazards, and attributable fractions under possibly counterfactual exposures. \begin{table}[!ht] \centering \begin{minipage}{\linewidth} \begin{tabular}[!ht]{lll} Description & Formulation\footnote{Notation: $x^*$ is a covariate pattern for the ``exposed'' group; $X^*$ is a set of possibly counterfactual covariates; $E_X(g(X))$ is the expectation or average of $g(X)$ across the set $X$; $X_0^*$ and $X_1^*$ are sets of possibly counterfactual covariates for the ``unexposed'' and ``exposed'' sets, respectively.} & \verb+type+ \\ \hline Conditional link & $\eta(t,x;\hat\theta)$ & \verb+"link"+ \\ Conditional survival & $S(t|x;\hat\theta) = G(\eta(t,x;\hat\theta))$ & \verb+"surv"+ \\ Conditional odds & $\text{Odds}(t|x;\hat\theta)=S(t|x;\hat\theta)/(1-S(t|x;\hat\theta))$ & \verb+"odds"+ \\ Conditional failure & $1-S(t|x;\hat\theta)$ & \verb+"fail"+ \\ Conditional cumulative hazard & $H(t|x;\hat\theta) = -\log G(\eta(t,x;\hat\theta))$ & \verb+"cumhaz"+ \\ Conditional density & $f(t|x;\hat\theta) = G'(\eta(t,x;\hat\theta))\frac{\partial \eta(t,x;\hat\theta)}{\partial t}$ & \verb+"density"+ \\ Conditional hazard & $h(t|x;\hat\theta) = \frac{G'(\eta(t,x;\hat\theta))}{G(\eta(t,x;\hat\theta))}\frac{\partial \eta(t,x;\hat\theta)}{\partial t}$ & \verb+"hazard"+ \\ Conditional log hazard & $\log h(t|x;\hat\theta)$ & \verb+"loghazard"+ \\ Conditional survival differences & $S(t|x^*;\hat\theta)-S(t|x;\hat\theta)$ & \verb+"survdiff"+ \\ Conditional hazard differences & $h(t|x^*;\hat\theta)-h(t|x;\hat\theta)$ & \verb+"hazdiff"+ \\ Conditional hazard ratios & $h(t|x^*;\hat\theta)/h(t|x;\hat\theta)$ & \verb+"hr"+ \\ Conditional odds ratios & $\text{Odds}(t|x^*;\hat\theta)/\text{Odds}(t|x;\hat\theta)$ & \verb+"or"+ \\ Restricted mean survival time & $\int_0^tS(u|x;\hat\theta)du$ & \verb+"rmst"+ \\ Standardised survival & $E_{X^*}S(t|X^*;\hat\theta)$ & \verb+"meansurv"+ \\ Standardised survival differences & $E_{X_1^*}S(t|X_1^*;\hat\theta)-E_{X_0^*}S(t|X_0^*;\hat\theta)$ & \verb+"meansurvdiff"+ \\ Standardised hazard & $h_{X^*}(t|X^*;\hat\theta) = \frac{E_{X^*}(S(t|X^*;\hat\theta)h(t|X^*;\hat\theta))}{E_{X^*}(S(t|X^*;\hat\theta))}$ & \verb+"meanhaz"+ \\ Standardised hazard ratio & $h_{X_1^*}(t|X_1^*;\hat\theta)/h_{X_0^*}(t|X_0^*\hat\theta)$ & \verb+"meanhr"+ \\ Attributable fraction & $\frac{E_{X^*}S(t|X^*;\hat\theta)--E_{X}S(t|X;\hat\theta)}{1-E_{X}S(t|X;\hat\theta)}$ & \verb+"af"+ \\ \end{tabular} \end{minipage} \caption{Types of conditional post-estimators} \label{tab:condpostest} \end{table} \begin{table}[!ht] \centering \begin{minipage}{\linewidth} \begin{tabular}[!ht]{lll} Description & Formulation\footnote{Notation: $Z$ is a random effect or frailty; $x^*$ is a covariate pattern for the ``exposed'' group; $X^*$ is a set of possibly counterfactual covariates; $E_X(g(X))$ is the expectation or average of $g(X)$ across the set $X$; $X_0^*$ and $X_1^*$ are sets of possibly counterfactual covariates for the ``unexposed'' and ``exposed'' sets, respectively.} & \verb+type+ \\ \hline Marginal survival & $S_M(t|x;\hat\theta) = E_ZG(\eta(t,x,Z;\hat\theta))$ & \verb+"margsurv"+ \\ Marginal hazard & $h_M(t|x;\hat\theta) = E_Z(h(t,x,Z;\hat\theta))$ & \verb+"marghaz"+ \\ Marginal survival differences & $S_M(t|x^*;\hat\theta)-S_M(t|x;\hat\theta)$ & \verb+"margsurvdiff"+ \\ Marginal hazard ratios & $h_M(t|x^*;\hat\theta)/h_M(t|x;\hat\theta)$ & \verb+"marghr"+ \\ Standardised marginal survival & $E_ZE_{X^*}S(t|X^*,Z;\hat\theta)$ & \verb+"meanmargsurv"+ \\ Standardised marginal survival differences & $E_ZE_{X^*}S(t|X^*,Z;\hat\theta)-E_ZE_{X}S(t|X,Z;\hat\theta)$ & \verb+"meansurvdiff"+ \\ Attributable fraction & $\frac{E_ZE_{X^*}S(t|X^*,Z;\hat\theta)-E_ZE_{X}S(t|X,Z;\hat\theta)}{1-E_ZE_{X}S(t|X,Z;\hat\theta)}$ & \verb+"af"+ \\ \end{tabular} \end{minipage} \caption{Types of post-estimators for clustered data} \label{tab:margpostest} \end{table} Standard errors for the post-estimators are calculated on a possibly transformed scale using the delta method. For the delta method, the partial derivatives of the post-estimators are calculated either directly or using finite differences. \begin{table} \centering \begin{minipage}{\textwidth} \begin{tabular}{lp{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}} Functionality & Uncorre-lated param. & Uncorre-lated penal. & Param. gamma frailty & Penal. gamma frailty & Param. normal random effects & Penal. normal random effects \\ \hline Multiple links & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ Right censoring & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ Left truncation & \XBox& \XBox& \XBox\footnote{Gradients not currently implemented.}& \XBox$^a$& \XBox$^a$& \XBox$^a$ \\ Interval censoring & \XBox& \XBox& \Square& \Square& \XBox& \XBox \\ Time-varying effects & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ Excess hazards & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ Conditional estimators\footnote{Estimators including survival, survival differences, hazards, hazard ratios, hazard differences, density, odds and odds ratios.} &\XBox &\XBox & \XBox& \XBox& \XBox& \XBox \\ Conditional standardisation\footnote{Standardised estimators include mean survival, mean survival differences, mean hazards and attributable fractions.} &\XBox &\XBox & \XBox& \XBox& \XBox& \XBox \\ Frailty/random effects variance & & & \XBox& \XBox& \XBox& \XBox \\ Marginal estimators\footnote{Marginal estimators include survival, survival differences, hazards, hazard ratios and hazard differences.} & & & \XBox& \XBox& \XBox& \XBox \\ Marginal standardisation\footnote{Marginal standardised estimators include mean survival, mean survival differences and attributable fractions.} & & & \XBox& \XBox& \Square& \Square \\ Random intercept & & &\XBox &\XBox & \XBox& \XBox \\ Random slope & & & & & \XBox& \XBox \\ Multiple random effects & & & & & \Square& \Square \\ \end{tabular} \end{minipage} \caption{Functionality for the different generalised survival models} \end{table} \section{Examples: Independent survival analysis} We begin with some simple proportional hazard models using the brcancer dataset. We can fit the models using very similar syntax to coxph, except that we need to specify the degrees of freedom for the baseline smoother. Typical values for df are 3-6. For this model the model parameters include an intercept term, time-invariant log-hazard ratios, and parameters for the baseline smoother. The default for the baseline smoother is to use the nsx function, which is a limited extension to the splines::ns function, with log of the time effect. <<>>= brcancer <- transform(brcancer, recyear=rectime / 365.24) fit <- stpm2(Surv(recyear,censrec==1)~hormon, data=brcancer, df=4) summary(fit) ## utility eform.coxph <- function(object) exp(cbind(coef(object),confint(object))) fit.cox <- coxph(Surv(recyear,censrec==1)~hormon, data=brcancer) rbind(cox=eform(fit.cox), eform(fit)[2,,drop=FALSE]) @ We see that the hazard ratios are very similar to the coxph model. The model fit can also be used to estimate a variety of parameters. For example, we can easily estimate survival and compare with the Kaplan-Meier curves: <>= plot(fit, newdata=data.frame(hormon=0), xlab="Time since diagnosis (years)") lines(fit, newdata=data.frame(hormon=1), lty=2) lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) legend("topright", c("PH hormon=0","PH hormon=1","KM hormon=0","KM hormon=1"), lty=1:2, col=c("black","black","blue","blue")) @ We can also calculate the hazards. <>= plot(fit,newdata=data.frame(hormon=1), type="hazard", xlab="Time since diagnosis (years)", ylim=c(0,0.3)) lines(fit, newdata=data.frame(hormon=0), col=2, lty=2, type="hazard") legend("topright", c("hormon=1","hormon=0"),lty=1:2,col=1:2,bty="n") @ Usefully, we can also estimate survival differences and hazard differences. We define the survival differences using a reference covariate pattern using the newdata argument, and then define an exposed function which takes the newdata and transforms for the 'exposed' covariate pattern. As an example: <>= plot(fit,newdata=data.frame(hormon=0), type="hdiff", exposed=function(data) transform(data, hormon=1), main="hormon=1 compared with hormon=0", xlab="Time since diagnosis (years)") @ <>= plot(fit,newdata=data.frame(hormon=0), type="sdiff", exposed=function(data) transform(data, hormon=1), main="hormon=1 compared with hormon=0", xlab="Time since diagnosis (years)") @ \section{Additive hazards} The additive hazards models takes the general form $H(t|x;\,\theta) = \eta(t,x;\,\theta)$. As a recent change, the default model specification for \verb!formula=Surv(t,e)~x! without specifying \verb+smooth.formula+ is to use $H(t|x;\,\theta) = B(t)\theta_B+ t(x^T\theta_x)$, where $B(t)$ is a natural spline design matrix with parameters $\theta_B$, and with $\theta_x$ as the parameters for $x$; the hazard is then $h(t|x;\,\theta) = B'(t)\theta_B+ x^T\theta_x$. The additive hazards have the attractive property that the effects are collapsible: adjusting for an uncorrelated covariate will not change the estimated conditional effect. These models have received some uptake within the causal inference field. This implementation is flexible, where the baseline (cumulative) hazard can be modelled using splines and we can model for both constant hazards and smooth effects over time. One possible issue with their interpretation is whether the rates will be approximately additive for different effects. One approach to conceptualise these models is to consider the effects as being competing risks and where we are adding competing risks together. For our example using the breast cancer dataset with the randomised assignment to hormonal therapy, we find that hazard for those on hormonal therapy was -0.047 per year (95\% confidence interval: -0.066, -0.024) compared with those not on hormonal therapy. <>= brcancer <- transform(brcancer, recyear=rectime / 365.24) fit <- stpm2(Surv(recyear,censrec==1)~hormon, data=brcancer, link.type="AH") summary(fit) confint(fit) plot(fit, newdata=data.frame(hormon=0), xlab="Time on study (years)") lines(fit, newdata=data.frame(hormon=1), lty=2) lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) legend("topright", c("AH hormon=0","AH hormon=1","KM hormon=0","KM hormon=1"), lty=1:2, col=c("black","black","blue","blue")) @ This can be modelled more flexibly using the \verb+smooth.formula+ argument. For example, we could model for \verb+sqrt(recyear)+ and include a natural spline smoother for the effect of \verb+hormon+: <>= fit <- stpm2(Surv(recyear,censrec==1)~1, data=brcancer, link.type="AH", smooth.formula=~ns(sqrt(recyear),df=3)+hormon:ns(recyear,df=3)) summary(fit) plot(fit, newdata=data.frame(hormon=0), xlab="Time on study (years)") suppressWarnings(lines(fit, newdata=data.frame(hormon=1), lty=2)) lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) legend("topright", c("AH hormon=0","AH hormon=1","KM hormon=0","KM hormon=1"), lty=1:2, col=c("black","black","blue","blue")) @ The square root transform seems to considerably improve the fit at earlier times. \section{Mean survival} This has a useful interpretation for causal inference. $E_Z(S(t|Z,X=1))-E_Z(S(t|Z,X=0))$ \begin{verbatim} fit <- stpm2(...) predict(fit,type="meansurv",newdata=data) \end{verbatim} \section{Cure models} For cure, we use the melanoma dataset used by Andersson and colleagues for cure models with Stata's stpm2 (see \url{http://www.pauldickman.com/survival/}). Initially, we merge the patient data with the all cause mortality rates. <>= options(width=80,useFancyQuotes="UTF-8") library(rstpm2) @ <<>>= popmort2 <- transform(rstpm2::popmort,exitage=age,exityear=year,age=NULL,year=NULL) colon2 <- within(rstpm2::colon, { status <- ifelse(surv_mm>120.5,1,status) tm <- pmin(surv_mm,120.5)/12 exit <- dx+tm*365.25 sex <- as.numeric(sex) exitage <- pmin(floor(age+tm),99) exityear <- floor(yydx+tm) ##year8594 <- (year8594=="Diagnosed 85-94") }) colon2 <- merge(colon2,popmort2) @ For comparisons, we fit the relative survival model without and with cure. %% <>= <<>>= fit0 <- stpm2(Surv(tm,status %in% 2:3)~I(year8594=="Diagnosed 85-94"), data=colon2, bhazard=colon2$rate, df=5) @ <<>>= summary(fit <- stpm2(Surv(tm,status %in% 2:3)~I(year8594=="Diagnosed 85-94"), data=colon2, bhazard=colon2$rate, df=5,cure=TRUE)) predict(fit,head(colon2),se.fit=TRUE) @ The estimate for the year parameter from the model without cure is within three significant figures with that in Stata. For the predictions, the Stata model gives: \begin{verbatim} +---------------------------------+ | surv surv_lci surv_uci | |---------------------------------| 1. | .86108264 .8542898 .8675839 | 2. | .79346526 .7850106 .8016309 | 3. | .69674037 .6863196 .7068927 | 4. | .86108264 .8542898 .8675839 | 5. | .82212425 .8143227 .8296332 | |---------------------------------| 6. | .86108264 .8542898 .8675839 | +---------------------------------+ \end{verbatim} We can estimate the proportion of failures prior to the last event time: <<>>= newdata.eof <- data.frame(year8594 = unique(colon2$year8594), tm=10) predict(fit0, newdata.eof, type="fail", se.fit=TRUE) predict(fit, newdata.eof, type="fail", se.fit=TRUE) predict(fit, newdata.eof, type="haz", se.fit=TRUE) @ We can plot the predicted survival estimates: \begin{center} <>= tms=seq(0,10,length=301)[-1] plot(fit0,newdata=data.frame(year8594 = "Diagnosed 85-94", tm=tms), ylim=0:1, xlab="Time since diagnosis (years)", ylab="Relative survival") plot(fit0,newdata=data.frame(year8594 = "Diagnosed 75-84",tm=tms), add=TRUE,line.col="red",rug=FALSE) ## warnings: Predicted hazards less than zero for cure plot(fit,newdata=data.frame(year8594 = "Diagnosed 85-94",tm=tms), add=TRUE,ci=FALSE,lty=2,rug=FALSE) plot(fit,newdata=data.frame(year8594="Diagnosed 75-84",tm=tms), add=TRUE,rug=FALSE,line.col="red",ci=FALSE,lty=2) legend("topright",c("85-94 without cure","75-84 without cure", "85-94 with cure","75-84 with cure"), col=c(1,2,1,2), lty=c(1,1,2,2), bty="n") @ \end{center} And the hazard curves: \begin{center} <>= plot(fit0,newdata=data.frame(year8594 = "Diagnosed 85-94", tm=tms), ylim=c(0,0.5), type="hazard", xlab="Time since diagnosis (years)",ylab="Excess hazard") plot(fit0,newdata=data.frame(year8594 = "Diagnosed 75-84", tm=tms), type="hazard", add=TRUE,line.col="red",rug=FALSE) plot(fit,newdata=data.frame(year8594 = "Diagnosed 85-94", tm=tms), type="hazard", add=TRUE,ci=FALSE,lty=2,rug=FALSE) plot(fit,newdata=data.frame(year8594="Diagnosed 75-84", tm=tms), type="hazard", add=TRUE,rug=FALSE,line.col="red",ci=FALSE,lty=2) legend("topright",c("85-94 without cure","75-84 without cure", "85-94 with cure","75-84 with cure"), col=c(1,2,1,2), lty=c(1,1,2,2), bty="n") @ \end{center} The current implementation does not provide a test for differences in cure. We can code this using the \code{predictnl} function: <<>>= newdata.eof <- data.frame(year8594 = unique(colon2$year8594), tm=10) test <- predictnl(fit, function(object,newdata=NULL) { lp1 <- predict(object, newdata.eof[1,], type="link") lp2 <- predict(object, newdata.eof[2,], type="link") lp1-lp2 }) with(test, c(fit=fit, se.fit=se.fit, statistic=fit/se.fit, p=2*pnorm(abs(fit/se.fit), lower.tail=FALSE))) @ \section{Potential limitations and next steps} \begin{itemize} \item TODO: investigate whether we can calculate $X_D(t,x)$ more accurately using the \verb+numDeriv+ package. \item TODO: Extend the generalised survival models to use multiple random effects. \item TODO: Extend the generalised survival models to use automatic differentiation. \end{itemize} \end{document} rstpm2/inst/doc/SimpleGuide.Rnw0000644000176200001440000007674613551274545016161 0ustar liggesusers%\VignetteIndexEntry{\texttt{rstpm2}: a simple guide} %\VignetteDepends{rstpm2} %\VignetteKeyword{survival, spline} %\VignettePackage{rstpm2} %!\SweaveUTF8 \documentclass[nojss]{jss} \usepackage{amsmath,amsfonts,enumitem,fancyvrb,hyperref} \usepackage[utf8]{inputenc} \VerbatimFootnotes \usepackage[margin=2.6cm]{geometry} % wide margins \usepackage{wasysym} \usepackage{tablefootnote} \usepackage{bm} \title{\pkg{rstpm2}: a simple guide} \author{Mark~Clements\\Karolinska Institutet} \Plainauthor{Mark~Clements} \Plaintitle{\pkg{rstpm2}: a simple guide} \Abstract{ This vignette provides a simple guide to flexible parametric models provided by \pkg{rstpm2}. } \Keywords{survival, splines} \Plainkeywords{survival, splines} \Address{Mark~Clements\\ Department of Medical Epidemiology and Biostatistics\\ Karolinska Institutet\\ Email: \email{mark.clements@ki.se} } \begin{document} \section{Introduction} The \pkg{rstpm2} package supports \emph{flexible parametric survival models} to model \emph{time-to-event} data. These models are fully parametric for the survival function. These models are particularly useful for: \begin{itemize} \item Estimating predictions for hazards, hazard differences, hazard ratios, survival, survival differences and survival ratios, restricted mean survival \item Estimating marginal predictions, including standardised survival and standardised survival differences \item Modelling time-varying effects, including time-varying hazards ratios. \end{itemize} This guide is intended to provide an accessible guide to some of the models and predictions provided by flexible parametric survival models. This guide can then be followed by the other vignette, which provides a more complete mathematical presentation. For this guide, we describe the most common flexible parametric survival model, which is a \emph{proportional hazards} model. Let the survival function $S(t|\bm{x})=\text{Pr}(T>t|\bm{x})$ for random variable $T$ at time $t$ and covariates $\bm{x}=(x_j)$ be modelled by \begin{align*} S(t|\bm{x}) &= \exp\left(-\exp\left(s(\log(t);\bm\gamma)+\sum_j \beta_j x_j\right)\right) \end{align*} for some parametric smooth function $s(u;\bm\gamma)$, for parameters $\bm\gamma$ and $\bm\beta$, and for $j$ being an index over the covariates. For this model, we use a smooth function to model the baseline log cumulative hazard function and include a linear predictor to model the covariates. To see that this is a proportional hazards model, we can see that the cumulative hazard and hazard functions are, respectively, \begin{align*} H(t|\bm{x}) &= -\log(S(t|\bm{x})) = \exp\left(s(\log(t);\bm\gamma)+\sum_j \beta_j x_j\right) \\ h(t|\bm{x}) &= \frac{\text{d}}{\text{d}t} H(t|\bm{x}) = \exp\left(s(\log(t);\bm\gamma)+\sum_j \beta_j x_j\right)\times\frac{\text{d}\,s(\log(t);\bm\gamma)}{\text{d}t} \end{align*} Now, for two sets of covariates $\bm{x}_1=(x_{1j})$ and $\bm{x}_2=(x_{2j})$, we have the hazard ratio \begin{align*} \frac{h(t|\bm{x}_2)}{h(t|\bm{x}_1)} &= \frac{\exp(s(\log(t);\bm\gamma)+\sum_j \beta_j x_{2j})\times\frac{\text{d}s(\log(t);\bm\gamma)}{\text{d}t}}{\exp(s(\log(t);\bm\gamma)+\sum_j \beta_j x_{1j})\times\frac{\text{d}s(\log(t);\bm\gamma)}{\text{d}t}} \\ &= \exp\left(\sum_j\beta_j(x_{2j}-x_{1j})\right) \end{align*} If the covariates only vary by one for the $j$th covariate, such that $x_{2j}=x_{1j}+1$ and $x_{2j'}=x_{1j'}$ for $j'\neq j$, then the hazard ratio is equal to $\exp(\beta_j)$ for all $t$ and for all values of the other covariates. We can motivate this model as an extension of exponential (or Poisson) regression. If we assume that the rates are constant over time and proportional with respect to covariates, then we have an exponential distribution with a hazard $h(t|\bm{x})=\exp(\gamma_0+\sum_j \beta_j x_j)$ for log baseline hazard $\gamma_0$, with a survival function $S(t|\bm{x})=\exp(-\exp(\gamma_0+\log(t)+\sum_j \beta_j x_j))$. The flexible parametric survival models generalise the function $\gamma_0+\log(t)$ to some smooth function $s(\log(t);\bm\gamma)$. The default smoother provided by \code{rstpm2::stpm2} is a natural spline, such that \begin{align*} s(\log(t);\bm\gamma) &= \sum_{k=1}^K B_k(\log(t)) \gamma_k \end{align*} where $B_k(\log(t))$ is a natural spline basis with $K$ degrees of freedom. Natural splines have the property that the function is cubic between internal \emph{knots} (fixed points that default to quantiles of the event times) and linear outside of the knot boundaries, with continuous derivatives at the knots. Heuristically, splines provide a flexible functional form that looks ``nice''. The basis can be defined in several ways (e.g. using a truncated power basis as used in Stata), while we use the approach used by the \code{splines::ns} function, which uses a matrix projection of the second derivatives at the knot boundaries. We fit this model using \emph{maximum likelihood estimation} for right censored and left truncated data. Variance estimation assumes that the parameters are asymptotically normal, with variable for predictions calculated using the \emph{multivariate delta method}. % The default smoother for time using natural splines for log(time), which is the flexible parametric survival model developed by Royston and Parmar (2003) and implemented by the Stata command \verb+stpm2+~\footnote{As a technical aside, the Stata implementation uses natural splines using a truncated power basis with orthogonalisation, while the \verb+ns()+ function in \verb+R+ uses a matrix projection of B-splines. Note that we have implemented an extended \verb+nsx()+ function for natural splines that includes cure splines, centering, and a compatibility argument to use Stata \verb+stpm2+'s unusual specification of quantiles.} \section{An example} <>= options(width=80,useFancyQuotes="UTF-8") @ We begin with some simple proportional hazard models using the \code{brcancer} dataset. We first fit a Cox regression with a single indicator for whether an a breast cancer patient was randomised to hormonal treatment. From the output, we see that hormonal treatment is associated with improved survival (HR=0.69, 95\% CI: 0.54, 0.89). <<>>= library(survival) library(rstpm2) brcancer <- transform(brcancer, recyear=rectime / 365.24) fit.cox <- coxph(Surv(recyear,censrec==1)~hormon, data=brcancer) summary(fit.cox) @ We can fit a flexible parametric survival model with \code{rstpm2::stpm2} using very similar syntax, with an additional argument \code{df=4} to specify four degrees of freedom for the baseline smoother (typical values for the degrees of freedom are 2--6). From the output, the model parameters include an intercept term, time-invariant log-hazard ratios, and parameters for the baseline smoother. The hazard ratio for hormonal treatment is 0.69 (95\% CI: 0.56, 0.84), which is a similar point estimate and a more narrow confidence interval than Cox regression. <<>>= fit <- stpm2(Surv(recyear,censrec==1)~hormon, data=brcancer, df=4) summary(fit) eform(fit)[2,] @ The flexible parametric survival models can be used to estimate a variety of parameters. For example, we can easily estimate survival and compare with predictions with the non-parametric Kaplan-Meier curves. From the output, we note that\ldots <>= plot(fit, newdata=data.frame(hormon=0), xlab="Time since diagnosis (years)") lines(fit, newdata=data.frame(hormon=1), lty=2) lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) legend("topright", c("PH hormon=0","PH hormon=1","KM hormon=0","KM hormon=1"), lty=1:2, col=c("black","black","blue","blue")) @ We can also plot the hazards using \pkg{ggplot2}. This requires that we predict using \code{grid=TRUE} to get a time grid, with \code{full=TRUE} to include the covariates from \code{newdata}, and with \code{se.fit=TRUE} to get the confidence intervals. <>= library(ggplot2) predHormon <- predict(fit, newdata=data.frame(hormon=0:1), type="hazard", grid=TRUE, full=TRUE, se.fit=TRUE) predHormon <- transform(predHormon,Hormone=factor(hormon,labels=c("No","Yes"))) ggplot(predHormon, aes(x=recyear,y=Estimate,ymin=lower,ymax=upper,fill=Hormone)) + facet_grid(~Hormone) + xlab("Time since diagnosis (years)") + ylab("Hazard") + geom_ribbon() + geom_line() @ <>= ggplot(predHormon, aes(x=recyear,y=Estimate,ymin=lower,ymax=upper,fill=Hormone)) + xlab("Time since diagnosis (years)") + ylab("Hazard") + geom_ribbon(alpha=0.6) + geom_line() @ Usefully, we can also estimate survival differences and hazard differences. We define the survival differences using a reference covariate pattern using the newdata argument, and then define an exposed function which takes the newdata and transforms for the 'exposed' covariate pattern. As an example: <>= par(mfrow=1:2) plot(fit,newdata=data.frame(hormon=0), type="hdiff", exposed=function(data) transform(data, hormon=1), xlab="Time since diagnosis (years)") plot(fit,newdata=data.frame(hormon=0), type="sdiff", var="hormon", xlab="Time since diagnosis (years)") mtext("Effect of hormonal treatment", outer = TRUE, line=-3, cex=1.5, font=2) @ % \section{Syntax} % The main functions for fitting the models are \verb+stpm2+ for parametric models, possibly with clustered data, and \verb+pstpm2+ for penalised models, possibly with clustered data. A subset of the syntax for \verb+stpm2+ is: % \begin{Verbatim} % stpm2(formula, data, smooth.formula = NULL, % df = 3, tvc = NULL, % link.type=c("PH","PO","probit","AH","AO"), theta.AO=0, % bhazard = NULL, % robust = FALSE, cluster = NULL, frailty = !is.null(cluster) & !robust, % RandDist=c("Gamma","LogN"), % ...) % \end{Verbatim} % The \verb+formula+ has a \verb+Surv+ object on the left-hand-side and a linear predictor on the right-hand-side that does \emph{not} include time (for \verb+pstpm2+, it also does not include penalised functions). The time effects can be specified in several ways: the most general is using \verb+smooth.formula+, where the right-hand-side of the formula specifies functions for time that are smooth with respect to time. This specification can include interactions between time and covariates. As an example, \verb!smooth.formula=~nsx(log(time),df=3)+x:nsx(log(time),df=2)! specifies a baseline natural spline smoother of the log of the variable \verb+time+ used in the \verb+Surv+ object with three degrees of freedom, with an interaction between a covariate \verb+x+ and a natural spline smoother of log(\verb+time+) with two degrees of freedom. Other specifications of time effects have equivalent formulations: for example, \verb+df=3+ is equivalent to \verb!smooth.formula=~nsx(log(time),df=3)! for the variable \verb+time+. Similarly, \verb+tvc=list(x=2)+ is equivalent to \verb!smooth.formula=~x:nsx(log(time),df=2)!. Moreover, for a log-linear interaction between a covariate and time, use \verb!smooth.formula=~x:log(time)! % A current limitation of the implementation is that the dataset \verb+data+ needs to be specified. % Type of link is specified with the \verb+link.type+ argument; this defaults to a log$-$log link for proportional hazards (see Table~\ref{tab:links}). For the Aranda-Ordaz link, the fixed value of the scale term $\psi$ is specified using the \verb+theta.AO+ argument. For relative survival, a vector for the baseline hazard can be specified using the \verb+bhazard+ argument. A vector for the clusters can be specified with the \verb+cluster+ argument. The calculation of robust standard errors can be specified with the \verb+robust=TRUE+ argument; if \verb+robust+ is false, then the model assumes a frailty or random effects model, with either a default Gamma frailty (\verb+RandDist="Gamma"+) or a normal random effect (\verb+RandDist="LogN"+, using notation from the \verb+frailtypack+ package). % The default specification for the additive hazards (\verb+link.type=="AH"+) models follows that for the \verb+ahaz+ package on CRAN: for a model specified as % \verb+stpm2(Surv(time,event)~x, data=data, link.type="AH")+ % we assume natural splines for the baseline time effect and a constant hazard for a unit change in the covariate \verb+x+; an equivalent specification is % \verb!stpm2(Surv(time,event)~1, data=data, link.type="AH", smooth.formula=~nsx(time,df=3)+x:time)! % where there is default smoother for time and an interaction between linear x and linear time. The regression coefficient for \verb+x:time+ can be interpreted as the additive rate for a unit change in \verb+x+. % The syntax for the fitting the penalised models with \verb+pstpm2+ is very similar. A subset of the arguments are: % \begin{Verbatim} % pstpm2(formula, data, smooth.formula = NULL, % tvc = NULL, % bhazard = NULL, % sp=NULL, % criterion=c("GCV","BIC"), % link.type=c("PH","PO","probit","AH","AO"), theta.AO=0, % robust=FALSE, % frailty=!is.null(cluster) & !robust, cluster = NULL, RandDist=c("Gamma","LogN"), % ...) % \end{Verbatim} % The penalised smoothers are specified using the \verb+s()+ function from the \verb+mgcv+ package within the \verb+smooth.formula+ argument; by default, not specifying \verb+smooth.formula+ will lead to % \verb!smooth.formula=~s(log(time))! % Interactions with time (both penalised and unpenalised) and penalised covariate effects should be specified using \verb+smooth.formula+. Note that the \verb+df+ argument is not included. By default, the smoothing parameter(s) are using the \verb+criterion+ argument; the smoothing parameters can also be fixed using the \verb+sp+ argument. The specifications for relative survival, link type, and clustered data follow that for the \verb+stpm2+ function. % \subsection{Post-estimation} % One of the strengths of these models is varied post-estimation. Most of the estimators are described in Tables~\ref{tab:condpostest} and \ref{tab:margpostest}. These estimators are typically calculated from the \verb+predict+ function or from \verb+plot+ function calls. All of these calls require that the \verb+newdata+ argument is specified (in contrast to prediction in the \verb+survival+ package, which defaults to the average of each covariate). % For contrasts (e.g. survival differences, hazard ratios), the \verb+newdata+ argument is the ``unexposed'' group, while the exposed group is defined by either: (i) a unit change in a variable in \verb+newdata+ as defined by the \verb+var+ argument (e.g. \verb+var="x"+ for variable \verb+x+); or (ii) an \verb+exposed+ function that takes a data-frame and returns the ``exposed'' group (e.g. \verb+exposed=function(data) transform(data, x=1)+). The latter mechanism is quite general and allows for standardised survival, standardised hazards, and attributable fractions under possibly counterfactual exposures. % \begin{table}[!ht] % \centering % \begin{minipage}{\linewidth} % \begin{tabular}[!ht]{lll} % Description & Formulation\footnote{Notation: $x^*$ is a covariate pattern for the ``exposed'' group; $X^*$ is a set of possibly counterfactual covariates; $E_X(g(X))$ is the expectation or average of $g(X)$ across the set $X$; $X_0^*$ and $X_1^*$ are sets of possibly counterfactual covariates for the ``unexposed'' and ``exposed'' sets, respectively.} & \verb+type+ \\ \hline % Conditional link & $\eta(t,x;\hat\theta)$ & \verb+"link"+ \\ % Conditional survival & $S(t|x;\hat\theta) = G(\eta(t,x;\hat\theta))$ & \verb+"surv"+ \\ % Conditional odds & $\text{Odds}(t|x;\hat\theta)=S(t|x;\hat\theta)/(1-S(t|x;\hat\theta))$ & \verb+"odds"+ \\ % Conditional failure & $1-S(t|x;\hat\theta)$ & \verb+"fail"+ \\ % Conditional cumulative hazard & $H(t|x;\hat\theta) = -\log G(\eta(t,x;\hat\theta))$ & \verb+"cumhaz"+ \\ % Conditional density & $f(t|x;\hat\theta) = G'(\eta(t,x;\hat\theta))\frac{\partial \eta(t,x;\hat\theta)}{\partial t}$ & \verb+"density"+ \\ % Conditional hazard & $h(t|x;\hat\theta) = \frac{G'(\eta(t,x;\hat\theta))}{G(\eta(t,x;\hat\theta))}\frac{\partial \eta(t,x;\hat\theta)}{\partial t}$ & \verb+"hazard"+ \\ % Conditional log hazard & $\log h(t|x;\hat\theta)$ & \verb+"loghazard"+ \\ % Conditional survival differences & $S(t|x^*;\hat\theta)-S(t|x;\hat\theta)$ & \verb+"survdiff"+ \\ % Conditional hazard differences & $h(t|x^*;\hat\theta)-h(t|x;\hat\theta)$ & \verb+"hazdiff"+ \\ % Conditional hazard ratios & $h(t|x^*;\hat\theta)/h(t|x;\hat\theta)$ & \verb+"hr"+ \\ % Conditional odds ratios & $\text{Odds}(t|x^*;\hat\theta)/\text{Odds}(t|x;\hat\theta)$ & \verb+"or"+ \\ % Restricted mean survival time & $\int_0^tS(u|x;\hat\theta)du$ & \verb+"rmst"+ \\ % Standardised survival & $E_{X^*}S(t|X^*;\hat\theta)$ & \verb+"meansurv"+ \\ % Standardised survival differences & $E_{X_1^*}S(t|X_1^*;\hat\theta)-E_{X_0^*}S(t|X_0^*;\hat\theta)$ & \verb+"meansurvdiff"+ \\ % Standardised hazard & $h_{X^*}(t|X^*;\hat\theta) = \frac{E_{X^*}(S(t|X^*;\hat\theta)h(t|X^*;\hat\theta))}{E_{X^*}(S(t|X^*;\hat\theta))}$ & \verb+"meanhaz"+ \\ % Standardised hazard ratio & $h_{X_1^*}(t|X_1^*;\hat\theta)/h_{X_0^*}(t|X_0^*\hat\theta)$ & \verb+"meanhazdiff"+ \\ % Attributable fraction & $\frac{E_{X^*}S(t|X^*;\hat\theta)--E_{X}S(t|X;\hat\theta)}{1-E_{X}S(t|X;\hat\theta)}$ & \verb+"af"+ \\ % \end{tabular} % \end{minipage} % \caption{Types of conditional post-estimators} % \label{tab:condpostest} % \end{table} % \begin{table}[!ht] % \centering % \begin{minipage}{\linewidth} % \begin{tabular}[!ht]{lll} % Description & Formulation\footnote{Notation: $Z$ is a random effect or frailty; $x^*$ is a covariate pattern for the ``exposed'' group; $X^*$ is a set of possibly counterfactual covariates; $E_X(g(X))$ is the expectation or average of $g(X)$ across the set $X$; $X_0^*$ and $X_1^*$ are sets of possibly counterfactual covariates for the ``unexposed'' and ``exposed'' sets, respectively.} & \verb+type+ \\ \hline % Marginal survival & $S_M(t|x;\hat\theta) = E_ZG(\eta(t,x,Z;\hat\theta))$ & \verb+"margsurv"+ \\ % Marginal hazard & $h_M(t|x;\hat\theta) = E_Z(h(t,x,Z;\hat\theta))$ & \verb+"marghaz"+ \\ % Marginal survival differences & $S_M(t|x^*;\hat\theta)-S_M(t|x;\hat\theta)$ & \verb+"margsurvdiff"+ \\ % Marginal hazard ratios & $h_M(t|x^*;\hat\theta)/h_M(t|x;\hat\theta)$ & \verb+"marghr"+ \\ % Standardised marginal survival & $E_ZE_{X^*}S(t|X^*,Z;\hat\theta)$ & \verb+"meanmargsurv"+ \\ % Standardised marginal survival differences & $E_ZE_{X^*}S(t|X^*,Z;\hat\theta)-E_ZE_{X}S(t|X,Z;\hat\theta)$ & \verb+"meansurvdiff"+ \\ % Attributable fraction & $\frac{E_ZE_{X^*}S(t|X^*,Z;\hat\theta)-E_ZE_{X}S(t|X,Z;\hat\theta)}{1-E_ZE_{X}S(t|X,Z;\hat\theta)}$ & \verb+"af"+ \\ % \end{tabular} % \end{minipage} % \caption{Types of post-estimators for clustered data} % \label{tab:margpostest} % \end{table} % Standard errors for the post-estimators are calculated on a possibly transformed scale using the delta method. For the delta method, the partial derivatives of the post-estimators are calculated either directly or using finite differences. % \begin{table} % \centering % \begin{minipage}{\textwidth} % \begin{tabular}{lp{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}p{1.5cm}} % Functionality & Uncorre-lated param. & Uncorre-lated penal. & Param. gamma frailty & Penal. gamma frailty & Param. normal random effects & Penal. normal random effects \\ \hline % Multiple links & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ % Right censoring & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ % Left truncation & \XBox& \XBox& \XBox\footnote{Gradients not currently implemented.}& \XBox$^a$& \XBox$^a$& \XBox$^a$ \\ % Interval censoring & \XBox& \XBox& \Square& \Square& \XBox& \XBox \\ % Time-varying effects & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ % Excess hazards & \XBox& \XBox& \XBox& \XBox& \XBox& \XBox \\ % Conditional estimators\footnote{Estimators including survival, survival differences, hazards, hazard ratios, hazard differences, density, odds and odds ratios.} &\XBox &\XBox & \XBox& \XBox& \XBox& \XBox \\ % Conditional standardisation\footnote{Standardised estimators include mean survival, mean survival differences, mean hazards and attributable fractions.} &\XBox &\XBox & \XBox& \XBox& \XBox& \XBox \\ % Frailty/random effects variance & & & \XBox& \XBox& \XBox& \XBox \\ % Marginal estimators\footnote{Marginal estimators include survival, survival differences, hazards, hazard ratios and hazard differences.} & & & \XBox& \XBox& \XBox& \XBox \\ % Marginal standardisation\footnote{Marginal standardised estimators include mean survival, mean survival differences and attributable fractions.} & & & \XBox& \XBox& \Square& \Square \\ % Random intercept & & &\XBox &\XBox & \XBox& \XBox \\ % Random slope & & & & & \XBox& \XBox \\ % Multiple random effects & & & & & \Square& \Square \\ % \end{tabular} % \end{minipage} % \caption{Functionality for the different generalised survival models} % \end{table} % \section{Examples: Independent survival analysis} % We begin with some simple proportional hazard models using the % brcancer dataset. We can fit the models using very similar syntax to % coxph, except that we need to specify the degrees of freedom for the % baseline smoother. Typical values for df are 3-6. For this model the % model parameters include an intercept term, time-invariant log-hazard % ratios, and parameters for the baseline smoother. The default for the % baseline smoother is to use the nsx function, which is a limited % extension to the splines::ns function, with log of the time effect. % <<>>= % brcancer <- transform(brcancer, recyear=rectime / 365.24) % fit <- stpm2(Surv(recyear,censrec==1)~hormon, data=brcancer, df=4) % summary(fit) % ## utility % eform.coxph <- function(object) exp(cbind(coef(object),confint(object))) % fit.cox <- coxph(Surv(recyear,censrec==1)~hormon, data=brcancer) % rbind(cox=eform(fit.cox), % eform(fit)[2,,drop=FALSE]) % @ % We see that the hazard ratios are very similar to the coxph model. The % model fit can also be used to estimate a variety of parameters. For % example, we can easily estimate survival and compare with the % Kaplan-Meier curves: % <>= % plot(fit, newdata=data.frame(hormon=0), xlab="Time since diagnosis (years)") % lines(fit, newdata=data.frame(hormon=1), lty=2) % lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) % legend("topright", c("PH hormon=0","PH hormon=1","KM hormon=0","KM hormon=1"), % lty=1:2, col=c("black","black","blue","blue")) % @ % We can also calculate the hazards. % <>= % plot(fit,newdata=data.frame(hormon=1), type="hazard", % xlab="Time since diagnosis (years)", ylim=c(0,0.3)) % lines(fit, newdata=data.frame(hormon=0), col=2, lty=2, type="hazard") % legend("topright", c("hormon=1","hormon=0"),lty=1:2,col=1:2,bty="n") % @ % Usefully, we can also estimate survival differences and hazard % differences. We define the survival differences using a reference % covariate pattern using the newdata argument, and then define an % exposed function which takes the newdata and transforms for the % 'exposed' covariate pattern. As an example: % <>= % plot(fit,newdata=data.frame(hormon=0), type="hdiff", % exposed=function(data) transform(data, hormon=1), % main="hormon=1 compared with hormon=0", % xlab="Time since diagnosis (years)") % @ % <>= % plot(fit,newdata=data.frame(hormon=0), type="sdiff", % exposed=function(data) transform(data, hormon=1), % main="hormon=1 compared with hormon=0", % xlab="Time since diagnosis (years)") % @ % \section{Additive hazards} % The additive hazards models takes the general form $H(t|x;\,\theta) = \eta(t,x;\,\theta)$. As a recent change, the default model specification for \verb!formula=Surv(t,e)~x! without specifying \verb+smooth.formula+ is to use $H(t|x;\,\theta) = B(t)\theta_B+ t(x^T\theta_x)$, where $B(t)$ is a natural spline design matrix with parameters $\theta_B$, and with $\theta_x$ as the parameters for $x$; the hazard is then $h(t|x;\,\theta) = B'(t)\theta_B+ x^T\theta_x$. % The additive hazards have the attractive property that the effects are collapsible: adjusting for an uncorrelated covariate will not change the estimated conditional effect. These models have received some uptake within the causal inference field. This implementation is flexible, where the baseline (cumulative) hazard can be modelled using splines and we can model for both constant hazards and smooth effects over time. One possible issue with their interpretation is whether the rates will be approximately additive for different effects. One approach to conceptualise these models is to consider the effects as being competing risks and where we are adding competing risks together. % For our example using the breast cancer dataset with the randomised assignment to hormonal therapy, we find that hazard for those on hormonal therapy was -0.047 per year (95\% confidence interval: -0.066, -0.024) compared with those not on hormonal therapy. % <>= % brcancer <- transform(brcancer, recyear=rectime / 365.24) % fit <- stpm2(Surv(recyear,censrec==1)~hormon, data=brcancer, link.type="AH") % summary(fit) % confint(fit) % plot(fit, newdata=data.frame(hormon=0), xlab="Time on study (years)") % lines(fit, newdata=data.frame(hormon=1), lty=2) % lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) % legend("topright", c("AH hormon=0","AH hormon=1","KM hormon=0","KM hormon=1"), % lty=1:2, col=c("black","black","blue","blue")) % @ % This can be modelled more flexibly using the \verb+smooth.formula+ argument. For example, we could model for \verb+sqrt(recyear)+ and include a natural spline smoother for the effect of \verb+hormon+: % <>= % fit <- stpm2(Surv(recyear,censrec==1)~1, data=brcancer, link.type="AH", % smooth.formula=~ns(sqrt(recyear),df=3)+hormon:ns(recyear,df=3)) % summary(fit) % plot(fit, newdata=data.frame(hormon=0), xlab="Time on study (years)") % suppressWarnings(lines(fit, newdata=data.frame(hormon=1), lty=2)) % lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) % legend("topright", c("AH hormon=0","AH hormon=1","KM hormon=0","KM hormon=1"), % lty=1:2, col=c("black","black","blue","blue")) % @ % The square root transform seems to considerably improve the fit at earlier times. % \section{Mean survival} % This has a useful interpretation for causal inference. % $E_Z(S(t|Z,X=1))-E_Z(S(t|Z,X=0))$ % \begin{verbatim} % fit <- stpm2(...) % predict(fit,type="meansurv",newdata=data) % \end{verbatim} % \section{Cure models} % For cure, we use the melanoma dataset used by Andersson and colleagues % for cure models with Stata's stpm2 (see % \url{http://www.pauldickman.com/survival/}). % Initially, we merge the patient data with the all cause mortality rates. % <>= % options(width=80,useFancyQuotes="UTF-8") % library(rstpm2) % @ % <<>>= % popmort2 <- transform(rstpm2::popmort,exitage=age,exityear=year,age=NULL,year=NULL) % colon2 <- within(rstpm2::colon, { % status <- ifelse(surv_mm>120.5,1,status) % tm <- pmin(surv_mm,120.5)/12 % exit <- dx+tm*365.25 % sex <- as.numeric(sex) % exitage <- pmin(floor(age+tm),99) % exityear <- floor(yydx+tm) % ##year8594 <- (year8594=="Diagnosed 85-94") % }) % colon2 <- merge(colon2,popmort2) % @ % For comparisons, we fit the relative survival model without and with cure. % %% <>= % <<>>= % fit0 <- stpm2(Surv(tm,status %in% 2:3)~I(year8594=="Diagnosed 85-94"), % data=colon2, % bhazard=colon2$rate, df=5) % @ % <<>>= % summary(fit <- stpm2(Surv(tm,status %in% 2:3)~I(year8594=="Diagnosed 85-94"), % data=colon2, % bhazard=colon2$rate, % df=5,cure=TRUE)) % predict(fit,head(colon2),se.fit=TRUE) % @ % The estimate for the year parameter from the model without cure is within three significant % figures with that in Stata. For the predictions, the Stata model gives: % \begin{verbatim} % +---------------------------------+ % | surv surv_lci surv_uci | % |---------------------------------| % 1. | .86108264 .8542898 .8675839 | % 2. | .79346526 .7850106 .8016309 | % 3. | .69674037 .6863196 .7068927 | % 4. | .86108264 .8542898 .8675839 | % 5. | .82212425 .8143227 .8296332 | % |---------------------------------| % 6. | .86108264 .8542898 .8675839 | % +---------------------------------+ % \end{verbatim} % We can estimate the proportion of failures prior to the last event time: % <<>>= % newdata.eof <- data.frame(year8594 = unique(colon2$year8594), % tm=10) % predict(fit0, newdata.eof, type="fail", se.fit=TRUE) % predict(fit, newdata.eof, type="fail", se.fit=TRUE) % predict(fit, newdata.eof, type="haz", se.fit=TRUE) % @ % We can plot the predicted survival estimates: % \begin{center} % <>= % tms=seq(0,10,length=301)[-1] % plot(fit0,newdata=data.frame(year8594 = "Diagnosed 85-94", tm=tms), ylim=0:1, % xlab="Time since diagnosis (years)", ylab="Relative survival") % plot(fit0,newdata=data.frame(year8594 = "Diagnosed 75-84",tm=tms), % add=TRUE,line.col="red",rug=FALSE) % ## warnings: Predicted hazards less than zero for cure % plot(fit,newdata=data.frame(year8594 = "Diagnosed 85-94",tm=tms), % add=TRUE,ci=FALSE,lty=2,rug=FALSE) % plot(fit,newdata=data.frame(year8594="Diagnosed 75-84",tm=tms), % add=TRUE,rug=FALSE,line.col="red",ci=FALSE,lty=2) % legend("topright",c("85-94 without cure","75-84 without cure", % "85-94 with cure","75-84 with cure"), % col=c(1,2,1,2), lty=c(1,1,2,2), bty="n") % @ % \end{center} % And the hazard curves: % \begin{center} % <>= % plot(fit0,newdata=data.frame(year8594 = "Diagnosed 85-94", tm=tms), % ylim=c(0,0.5), type="hazard", % xlab="Time since diagnosis (years)",ylab="Excess hazard") % plot(fit0,newdata=data.frame(year8594 = "Diagnosed 75-84", tm=tms), % type="hazard", % add=TRUE,line.col="red",rug=FALSE) % plot(fit,newdata=data.frame(year8594 = "Diagnosed 85-94", tm=tms), % type="hazard", % add=TRUE,ci=FALSE,lty=2,rug=FALSE) % plot(fit,newdata=data.frame(year8594="Diagnosed 75-84", tm=tms), % type="hazard", % add=TRUE,rug=FALSE,line.col="red",ci=FALSE,lty=2) % legend("topright",c("85-94 without cure","75-84 without cure", % "85-94 with cure","75-84 with cure"), % col=c(1,2,1,2), lty=c(1,1,2,2), bty="n") % @ % \end{center} % The current implementation does not provide a test for differences in cure. We can code this using the \code{predictnl} function: % <<>>= % newdata.eof <- data.frame(year8594 = unique(colon2$year8594), % tm=10) % test <- predictnl(fit, function(object,newdata=NULL) { % lp1 <- predict(object, newdata.eof[1,], type="link") % lp2 <- predict(object, newdata.eof[2,], type="link") % lp1-lp2 % }) % with(test, c(fit=fit, % se.fit=se.fit, % statistic=fit/se.fit, % p=2*pnorm(abs(fit/se.fit), lower.tail=FALSE))) % @ % \section{Potential limitations and next steps} % \begin{itemize} % \item TODO: investigate whether we can calculate $X_D(t,x)$ more accurately using the \verb+numDeriv+ package. % \item TODO: Extend the generalised survival models to use multiple random effects. % \item TODO: Extend the generalised survival models to use automatic differentiation. % \end{itemize} \end{document} rstpm2/inst/doc/SimpleGuide.R0000644000176200001440000000535315105126127015563 0ustar liggesusers### R code from vignette source 'SimpleGuide.Rnw' ################################################### ### code chunk number 1: SimpleGuide.Rnw:85-86 ################################################### options(width=80,useFancyQuotes="UTF-8") ################################################### ### code chunk number 2: SimpleGuide.Rnw:92-97 ################################################### library(survival) library(rstpm2) brcancer <- transform(brcancer, recyear=rectime / 365.24) fit.cox <- coxph(Surv(recyear,censrec==1)~hormon, data=brcancer) summary(fit.cox) ################################################### ### code chunk number 3: SimpleGuide.Rnw:105-108 ################################################### fit <- stpm2(Surv(recyear,censrec==1)~hormon, data=brcancer, df=4) summary(fit) eform(fit)[2,] ################################################### ### code chunk number 4: SimpleGuide.Rnw:115-120 ################################################### plot(fit, newdata=data.frame(hormon=0), xlab="Time since diagnosis (years)") lines(fit, newdata=data.frame(hormon=1), lty=2) lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) legend("topright", c("PH hormon=0","PH hormon=1","KM hormon=0","KM hormon=1"), lty=1:2, col=c("black","black","blue","blue")) ################################################### ### code chunk number 5: SimpleGuide.Rnw:125-136 ################################################### library(ggplot2) predHormon <- predict(fit, newdata=data.frame(hormon=0:1), type="hazard", grid=TRUE, full=TRUE, se.fit=TRUE) predHormon <- transform(predHormon,Hormone=factor(hormon,labels=c("No","Yes"))) ggplot(predHormon, aes(x=recyear,y=Estimate,ymin=lower,ymax=upper,fill=Hormone)) + facet_grid(~Hormone) + xlab("Time since diagnosis (years)") + ylab("Hazard") + geom_ribbon() + geom_line() ################################################### ### code chunk number 6: SimpleGuide.Rnw:139-145 ################################################### ggplot(predHormon, aes(x=recyear,y=Estimate,ymin=lower,ymax=upper,fill=Hormone)) + xlab("Time since diagnosis (years)") + ylab("Hazard") + geom_ribbon(alpha=0.6) + geom_line() ################################################### ### code chunk number 7: SimpleGuide.Rnw:153-161 ################################################### par(mfrow=1:2) plot(fit,newdata=data.frame(hormon=0), type="hdiff", exposed=function(data) transform(data, hormon=1), xlab="Time since diagnosis (years)") plot(fit,newdata=data.frame(hormon=0), type="sdiff", var="hormon", xlab="Time since diagnosis (years)") mtext("Effect of hormonal treatment", outer = TRUE, line=-3, cex=1.5, font=2) rstpm2/inst/doc/multistate.pdf0000644000176200001440000065361615105126152016130 0ustar liggesusers%PDF-1.5 %¿÷¢þ 1 0 obj << /Type /ObjStm /Length 3988 /Filter /FlateDecode /N 78 /First 647 >> stream xœÕ\Ùr7}Ÿ¯À[œJ©±oS)WÙr¼$’íHÎ6‰h²%ÑC‘²e9óõs.€&).M›’'r³7ôÅÁÅÝÅÓLÊÀ s"0˼wÌ1)¼gžI£ LœE¦”Å1&â¦mTL*¦£ ÍŒr0ã¢dÒ2+4öŽY<ϤgÖh´G'Î&#:ÄÌ S’9J1p_iæn*ü&hZk¦ó&â:ð9ãú S‘ù|Z° ]å"C—Áàa<lhÂ×àYÑ0íX×1B%p=°¨Ñ¿Ž,Zôo‹Ã7’Å€‡b1b|4d! ‡±±80·ˆxP¶äiz5$Àƒ²µ@èAÙº€9eè”!QhÊN¡%˜(¡ye¡À„áÿýãûï?¬›N¯Ót¸#Øã¯.êá£nÓ ÙŸÌtíi¿aoqë²ô‡õSœ¯¿îœÖ‡£^Íø/“zz7]ž@´S›7_àþ>ºŒNÙÇ©×G—ÍÙh̾?©ON„0=‰Â+ìß È®a\Æéze_£Á¦‚â¸îÊ'¦fžüS e%&ƒ…Ä}'ä7B|ómi‡¾tÞÔ¿³«~sÆÎ€i<®Opû§úï«Ñ¸7i±P_Þæ¾©/‡®ér.ËÞfœ =W®¥çÐVuË8ÆFm½»éYŒ <½mX¯Ç£Þe·Æ¸ž½>`ÏÎF“fÒ÷/ˆ|%T%ÑæøòÝûºÛ°8~Óoõ:†/‚ú|îLêô4qðê×ã?¾;8<w†Rí= z˜ÍawÔëOɸ=ž4ûg1ñ9õü¤Îæ–¯ÌðA§4!_B¶¡IS÷²E‘{ý­ßkÎhzù¡41±|ñ®+mt¬ÉûÃýÐ>ñ noÕ&¦­ç)0* "0ÀsúD5À38&#cjå|òñ>]„ûst9@ ¤‡W ð¬Á.M€0íÔŽgÚ`È¢ó ÉRp‚#pjUî\¼A{ÓÞIf€~Óªo§ú1é’XÀŒ’ç»x^÷OÏÚSÌ Âþˆ?æûü ÿ?ãÏù ~ÀùKþšñcþ†ÿÂåþŽwyw4 ñ{~Þá=^ó~Bÿú<ýû€ :~ÊÏ8ÜÚY=ä}þo>àç|ÈG|4¬ù¿ 1Ô'M>Øõø˜Oø¤ÿ‘7¼9×5o®Fü’àùßü¿p$H4˜=ø!È sJ®=IÊãV3Ò=Ø6›Æø6ß}ÚÔ‹Z¦K/;çõZ¡~¡ß}4<…Ÿ£û“ D<É"Ì®7õù¯ÍK뜜/iÏãÃ_÷÷ŸO;{Gõéå0§@aQà= K± AÊnªAmEÅ5 ÐhmA/èC:W€§aihí9EãØ­M7j¯ü¼Ó°Ô›¸Ö_º‡«.£ÆSAÅ:.iŸCz0§}ùtNûŽ®ùü¤8I4çý|ÿº*\¹m¥õºœ.ɤ˜:q„Û‹^7‘d&X ©%r”l*ްիőÿ^xc¬]–ÍŸ_¾ùùÇŸçzÍýÍ;ô’,Ý—ôr«˜Ê@N­ïüÜUwt*Œå«vÁ¶m®Q0T}£Êœªµ³vøïü TêÁhWy^Ôö9PQ®Ú¥'´õUp¸¬©ûåÆl^é¶Ø0óþjY⊲ͻ·iH*n’ì°Ûœ}>¥[ÌÊçæÓ¶õià&mž¿ˆ4§óWç[f1½&ìjŵòÖ®œ‘²Â z«H¯Ú¼ª ½î²ª 6næŒv†ÍëÊ—MÁE_é°l~›–¢rQ­Á†¸ØÂ›–¥¿lZê*†9lÚW>î†q+&F¿Rv-80ÎNÁg«(ü×ÎxhiÁÁá“o¼£i5ÎAÀýpPMò^f,è•-ö÷ ÍŸ'±Å¦øv'ØnÖ†Â6‰Vôª?Tà½B“QVáLÁ¦$ÂK¹l+TÁ_)oÖé)¦ÎiÀ0¦©l”” WJÝ76¨iDÀ×bƒ–zcî  ¯×©‚"UŸ„¨h= Ò¨ÊQ] 6Ù!÷º_lVœ™8oª¨ì]óžº]çí•V•£µ@NTRz ÕAÜ(€^sÝ+8£àîeœÃ´RƱl+¬ ‘2ë´A…XQúc<œ•FÂãC•V`…P ½së{38\åÔ›=„s¸+lÂЋëÕæ—Ä^E<*Vz‰JÐÚ6˜eõ…ÕáÓÁYph ÎÇŠJÜwÎHvpk‚6Z´WÀ)€‹pd_8xSýœA]øJ¦>JÒjGSIZAèâÐZG„è⢸›±!´¾±Ãâ‚Þ ¸Ø $ƒT•] Î («ˆ,f,q¼%µÀäFïï[ 1æRÑrU—ÌHLÏÞ/2 §ªœB³®¢•³wÍaʼ[ŸÝ#T™2Mi„"ñ®˜v32e`(â´‚Ö~ ²#Zº‘»=BÔPÊ­Gd©ƒÑ«èÐ+Z^ŽÉ(´e² ¥Â¿T›ûíåoÏïwpx8Ž>½*,–jtvé­ñÆoèèM™UíÛ³öìS·ùBØú³Ùùâ~ù/ßÙÏ ×&­–ß;›k³ÚòÓT[>¦÷nÍê×Ïëš­\œ±Áz³›×V ¡I“îh\ß´¸J±¾ªMw)D¦q/TµÛ_ÓªöZÙݰž ƒk9[í<î&3¡¨vŠæ0ÿš\;}Ìa(Þ¸ï¸[ëëà,ü&fíŽÀÝR $çM_iX*¯1£‘L ¤¥IÎï›Á¬JØ 6Xú¸æ“°=J/ÿåèÅ´Aþ¾#]zpÖ4“rÞõ«Ñø”-ñç„3Áî ö"òß=÷mzE¸~¬r?rü@_ùP Î…i ¤AŽÿõã‡×u’ÖGz/!VúFI!ûñf§ð¬ã9’Â֨镾0y1 ;ˆÝr]:~Œ¿‡ Pýõ@È¿¾Éã^Ü^v>%­ì($Ê~·Üÿ’Ã(“!C¨ M "ä@iE¤3rÃ"þV£N{þ~2©>ª¾ð[L‚Ý–ô­Z@^cfyŽÃÔlšƒÝø–ñ°ç¡²„ 2óÒ+õ¥mçÕÕUõ~ÒtšÉè¤I£èŒ›~w€¦__qÅVƒ ”<Òׂe†L,ÿ'∾|²²MVgôä™Á—°g6ú-¬°–²²È½¡ ï]áýhù¹0­F»)ôR¸…-VðžÞXz¹lÓÆôág€ußtÕçð\y©¶·¾NÉäëZÕwHõNUÿóp­wVѧ½Eëaj1»D5×× ïLþÚn'æ‰Õ^UÑxL«DÄ[³KWA,×?_©ôy§V[º ‚ªyIj*/VûJoúìÞÀ©±˜TkŒ&I…ÿ£’ÇîÀã?þÑ™‘{Â(1Ð×»ôqwõqcã«´׈*Âo›H6x «« wùI﹈N!¥A|fBTÚlot UôµŸ ‘‘¡ z—ðeð·éBZ¨§í}Eßrª›ÏªõËödEÑÒ×Þôí¤Â´k¹® ntGú¿Àñ¤—`"ñZY9·)¸Î¤¾¡¢÷¤rRë!­:ý3­»?9ÁÖ§ï|éCê$S>³ aZH>ÿE»þI}”\>1šÇÀOi/„i®£•ÿÐÎè¼endstream endobj 80 0 obj << /Subtype /XML /Type /Metadata /Length 1459 >> stream GPL Ghostscript 10.02.1 multi-state models, Markov models 2025-11-12T16:48:58+01:00 2025-11-12T16:48:58+01:00 LaTeX with hyperref Markov multi-state modelsMark Clements endstream endobj 81 0 obj << /Type /ObjStm /Length 2497 /Filter /FlateDecode /N 78 /First 680 >> stream xœÍZ[o¹~ï¯àã.ŠP<¼³‚ú²IŒÍº®Üíî¦ðƒ*Ad)äEúïûÎŒf¬‹-ùŽÀ9Ã!?žû9dÔB‰h„‹"ZA)ˆè„ÑID/l"ƒð?Q„àDL"I RÞ¼'MQ$-È‹w‚¿ÇLŸ$'(Z<÷B+…çAhrA¤(´!ƒx2(`²ÞH¯!ƒãëÑHœ‰Þqñ}ΪGž ¦–Œºž¼œ ñö¢¸¸PÊ&¥|>YüA¼=žynC:Àëüܧúyñn Š_…bœ‘1Äe(n-”“iñç‚7qc=W¯;¸Ì2ò´Š"è$#«ÍMþvu€‚¬ü°Bäkd Õ<ÝE¥µ¡QÒ°úÝDnAèÖ t¦^ù¼æÙp¢­é¦ƒ•PóeTéT~ݘs±Br“~ “ñ“Í`;ëÙ)ÎËÁþä;°)üsÉIÍöœ$Ö?[¬^ó©_Ì&×Ó!´ƒgûéûüÃé|0/²¹ÉÞclsj¬“áiÁûî¾\Þ×À4Êv2¸,–(SµB  é\‡mkiÖѤæH0µf¹ªÌZÙÙŸLÏ‹iM Å+äU[ˆÖK«¡xÖx\j!~½#&Ø¿° k0B;+C€ $ì¨öA¤aôéõç™"ŸÊñ׆:{ãñd¾#´° Í’>é Ђ‚¤fC­dçÉP™«/Š¢—–ªO M2ÏÎY#Uô›x Ê%x4­4P'§µtðÜ’ÀÁÆ‹‚k¸ ‚YÅ!”•A`ÕRÁí¿(6­BE¸œ!‰ÈäÙÀÁlg¢¤°Àfœ’äíëÀÆ^ÞÅ–p&„JžÜç–:m‚ض…6¼lµ6Pª4?ñºVIr„ùÔ<$­q›ä¢TÈÖØ,‘TœÜ¼pà4' 8 f"Â~&p’ ›Î'ÉäÎ ykŽ;°ð²Ø‚—‰éæ+:! Cp€Ì$2ýì“+ƒBÜä7Æ"‚yNÛ´ô­¢"ÃBä—^[£¨ñÿBþ\N>!¥êqyº36dä2gè56Ĥ–é¶ ¶>~òUÔÚ<‚tÕòÕ'¤ÄuS#ƒ¥¦Ü×t¿ÙÌŠi÷>þtp|ú×O¿ô'WƒñaqU’zÓ/.¯Gƒ)ôñpr^Ž/Eï·r¼7ž•태|Á¨ª°„NËoóÉ4—>ùqÄ%”v¼3j6Xù­<Ÿ™±xåÜ„ÿYªœæí¬¾7räîæ;|ûX”—_š.âlá‡Þ Wô¾ü˜y•G¿áÄ}4¸œq¢‘¡ð¢ûMÚ‚×ZÆ“œU¯Þ—£‚ÃDÕf%ǃ«â.zÍ£r¸7¾D¡•³ˆ•·&X@z§óâêßœvtöÞ¡[ï÷z?pnGj:8’nå‘ ’‘²C0r‹@ÂU˜ÀÅ® ¹îe‰ ©Äg+ÌY–î*Ñå*ÿžu“EWKâ#%‹:¶lɵ«Ý“ŧÊ8Ø{Ž÷ŒË1ª1 ´Eß2q×rï Î ³ð¡Î#ÖŠOnytÒ˜h“4Âxã=ã9esÒ«˜±jÿÂØ4†9eZpy$Ù'·.VÐPÐ7 p¼œq×àÚ<ò€kòHUI˜‰NrM[k¤lôäéÐíØLôÒ¸œ%ÎÕüs»£t‘´$öI’ŒB6ñ_ cínE”—‘Ïfjh†Ç õ¹ôÞ8…~]sozkÃ83ŠMVB5m>îiüÕ„ ÎÇbôg1/‡ƒNTÃ%þüå-ɱ"ŽÙ»øCu-â®m7ÀÑ]ó5ŸhZÝ:¾ƒ»±Ï­‚„ni”c•¿I×=…¸Él›²¥‹\03|æ…€°Ë?ÕF‡.8ØW>ãÐ$y­‡*"€iÀŬi'pmüb*êòéVõ[Ç3f]<£5ž1¡Ϙxxfmbð:E„NèbÝ;:ƒÑ »:Ø liÔƒâ*©Û½åÉÑÝ›ï•M[ }„¬:`BD0¯ot| Hêð¸%–Á!Bâ[pUÓÿ5€³ 8ÙœiCm!ƒ³'ÿÂuŒªþë—ÉÕ”Tår·ô±wªÈnFྖfûêÄSë`kìm…Ÿo¬wó¨ÆÝº®q·ÍaöÓÕj;GÃŽƨ¸° éN›Ü;+&vã¼…HY/‘å½ú¸e `[t¶E§‘m%®®82ÈHÍ-³”/ô8V>–Ö²¨A/Ü–zÐ2Ý­c¶}Tf7ÓUÌvîÌÞB¿ ³”vѶ—qêmð}¸¿ÿáÃAS5‹oª:Ùê‹¶Þ¢¾Èƒ¶*/:›VЉ,SbbÕm‹‰ÝB"©Û+‰”ofå)–J‰3P•7eÛ"¢½³ˆ+¬øù§ã£?NšUÃÃYÑÔHwg\à³ÂóÍ»UVøeVl"Ê–¬Ht/VþúÏ“ãÃfÕ´cÙݪ5¼ÐK¼`òmWu‡«à¿e~°·Ãª»àÇ7¶Š£âb^µ¦<¦Ë"¾%TóÈ;çã2‹ø½Fžv‰GaE]6QkK&¹MLº¿KŠO¼ªë Qmòb6!B‡Ì_‡€Ã)ŸÓÔÀ‡{qË2Ó^¯B6·Íú\O¡¸ð;{ S]¹lüåë–MÏä«–ÏŸ$¶ž<¬ñäñáž¼vÛ÷IÀ÷ò§¢÷kÿhÁÁἜŒ«G?\ ÊÑ|ò·«Áô«ŽŠ+Fý÷¯¥œ?æ)7§´¦V¥ÏÕÁ€„€/t@Äàåƒ Ònyl1X þÙxÝbË‹‹äezr‚%zWåøzƀꄾŠùþ»ÕNgendstream endobj 160 0 obj << /Type /ObjStm /Length 3846 /Filter /FlateDecode /N 78 /First 737 >> stream xœÕ[Ysܸ~ϯÀcR©%ˆ‹ª¶¶J¾[Š×Z{åMí%Q³œ#3#¯_Ÿ¯Ácx͈ãÇIMI$Ýl|}M‘3‘H&•ÅQ1i©­Y"4ކ‰Xzœ$LHOWp—Q¸œ8&,î º½hÅLjƒ~4¤“Ô/™¡K1¥n´š)O”¬aZIc0m-]±ÌÄDÇ:f4l=3–¨»˜ØQ'Xbˆ²“,ñO9Ŭ0xÊif• › ³†H¸„Yƒº³Ì c·`ÅYê>fμ±Ì›W½RtE1¯1†ÀkûDÓüõ îæ=õ'xAWc)éXˆµ†@c<'"%&b§5Î@SÄ1õ‚– dC¬rÂFãÉ#a6 ÈìB$g QÐ} á1ž Iï%hHE4hHš´q&Aƒ&S’,¥04“Ä• ;ê ¼3= Š„/I”*‘àÏãLc< Êa‰ëBѬK©è r”44M¬” ¡•Â($M3/i²´Á;HB†6˜Is«-(I¸‰qÄ; #è-hâ\b$€2Æ âL{‚+h`.é>Ð0€E aã©@#‰­úÓ÷ß3~2Ÿ/6köÀbÌÞ’à«£ªŽõuS“êh«£«Ž¾.Ým¼‰ðæN‹âÀoÒ`%eþ6[/îWWÙšÇÏ0F—eß›Õâê<Û` þæÉ3ÆÊ>m0Â?àôó2£¡n34ÃËžŸ°›´XgußÓO›çç›tÓÜp²¾"º¨çÓå‹,¿½«›wéŠý™_®Ò«ß²M‘ÝløU¾ººŸÝÙ'žñì_÷iÁoò¿åŸ¥W«ÅœÏóyÆ|ÿK¾¤ O†³Ï—Åýš¯óO|s·Ê2¾É‹küÿ}Á?ñg«Å_’•Œ}'‰•gEz»†p‚(Õb }R'v-;ŸåE¤%唄Kgé o~öòï§ÏßýõõéÛÅ,‹ø»·Ùí}‘®¹I‹üêd~[dxˆŸæëu>¿ý9¿ÞÜÁráÊù&›½'­¥H£ƒ«|¹Y`„‹JlÚ¨Z®Òu柿zñãû× |šnîJZ þhQ\c:æW‹k  .ÎWë I> D8Üõ:mnÂ]ç÷—›Àq'ÚL2^ƒÐž‘Œÿ'›s´à8?4¦üyÐ0AÓ@ƒ¬¥Ð%Q ›á_?;™XW3c‡Ì˜I &pîÉ)r4º1&¨Iö°»m؇fûÇüÉ_óSþ†ÿÈßñ÷ü~™mR~Å—w9_æüžä¿h;ˆånÄ’É'[K¤z}ÈîCÎTÐBêã àôééËwç'-@Ôô!šŒ ÔöªýD€ÒL x-´ÀÑ_æøòÖÌ—ÍfæÏóÛY XßÁ»æ] Õ›Yٟٲž:©pP{'µqqÈ×äeu¬\œ¯\œ/ç´ã²’Êý—µõ35ob¤Ã½Ø¤ÏŸŸ=}ù¨¯)oµ–ùÖžŠ!Zm̦ØÓÅ»yŽ3ȦzÛq‹°Ð$ôº‘—ŽÃ™¯M qªÁd ŸA<_ò“°’ôg)BŽãpÄxA‹,,ž á‹U¥-%íÒ:œA#É:VvVØ”$Á®&—±QE Ç(†ÔIR½K‚`á;Ü• Iúâr, ë®`Þ¾3M9ìSψMÞŠ<‚U~ìò+Xf²Ëç°Ì<-–wim¯3¨ï5¿Î ´¦,×y±˜ NÝ·« ¸\ñ;žóòßx‘Î.¯S^dë5Ÿñy²lò´¸Îonø2[å‹ëÚÞ#h)Òõßì°ü»b•ïÇÐë :#ÑJmYñΧ LÖDëqrrñ´±HnT¥t_¥t<¢Rr RñD @Ýóî„ç}Û;üRMêRk‡?çÌø“À÷aHN;¡ô6¾Cô<;¯³Ù¼úðÓ»¿WZpþyv¹(Ö;Ì}ÍsƒÍ1hê>4É‘î³ö•³Ekiom+VÝZÌúÜÄÝöØ="Ž·0ê4ö_JÛºdÌ8ú´£×ÖŒxû6Òö}ƒSê@ô?æér¹Z|*Ÿ®V‹ß¯/‹á¡Už^¦«}fA ÂYÙAºS @ù˜#sDï $I‹òi‘ͯ2žÏoòy¾ù {I…Îf÷Ww|–Ï‘Îî‹M¾,>óyzY¤|žÝ¦›|1/-üb™Í/ï‹"+“Õò‰û9tµN‹CT¯Õ˜’¹¾’=ö©º¦ÅT›ÿüÃóg¯žuœÌ¸á¯yÝ››Úd ]n¿vù=ÚUÇEZµq–Èc`¹þI¿µåfGzìFâ³D4Ùj0)û~ D¥Ð{£hˆ ¸«íG”£%Vd*èè®·õ(4=zÅBôSÆ=!êib&¾©#œÜ´B›ÄtW½#| ½^…Ö–ë(º¾ìEÖäèÅOEòù“_ÎO{º3 e9€ò˜Ÿp}$#”߇d+ö ¹ŽKvÇG@²Ö¿îôçÀ˜gÈ;_ÿ6Ã4Û^ÚÕ®é]®òYvÐ ¼ÿÐÂÚAÖýJ&gßñTX¾~ñòýÙ«Š Râl¾Æ[ŽG0ÒO@¦‹ûÈS×ÿ´qáol"•jRS¤«ôDªvÔ´]b½ÜÙŒŸˆCL£m›Œ Ôzw¸³k¤8 Uw€ª;8Íç›ìvEvr½,ÒÏM{“}Úl£òGùm§Ñj]æÝÆm+‚o«[íæeÞkÝòUz_¥õ¬ïaâISjÆš ³aìš`[t5È¿[…¨S(gI=ªW¥zÒÕHî\N榯Î/~~Úñ&Éhœ÷UhlÍÇ Ôxòe<žüýýð¾z¨ 6¶Ô!4·v;¬®Ì: ¡»m2mCÆJ†Azxª—¶©åÞ¹j’Í ¢­UîŸ?œ^üX§²c0ÂtÏO€êí…Ö‚‡ÁS?«œ¼âˆášA’t¢½²ÙÌÃbÞVëfCÛàÝY tÍ„ç{S0XkÚ)’‰ÒLjS…òâì§75%¨ðõˆðI‡¥/óåÿ±ßîžþÏÚvdgõn·hHÜM…õQ…ífÊ$’†²3I¸V??C£0¥:.ï6:÷µº(r}­3ä )¿ ¥HšåҌ߄¬¡©Â‚VBËÕÏ_WKžŸ»ù‚©¨äp§Ë„eb¥‡ÀÁúÒN\L^_Ú¥ÿ­õ%7Äã‡÷ïŸ^œvŒÏ(©’ ïXìiƒKF³Ý#nº¶|¨»Jv¬úòSvd%´‹Ç²¹Ým«SW$±›ÀH€»¢ô%´~9ÄW=[ ¾öÏóDùÉñʇgg.κyÆ(®äW#1¿{°šºœn½LeE­‰(›ÍD„llÌÁô¥Oe2<Ýý`UëYL®½Hþbu­*ÞBû˜¶?ë ­FQ¯º]|ø…ù8’Ž*¾t”Ð~Õü¾(èÞàŠ¶3¯è …^é`¨¥‹H”Q f´–‘1a´™‹×ùü·šË°»Ÿ¹8°×fnË›N"M¯¯­ˆ¬²;˜RET„DLzjœ"‡WTÞFN~cÞLmYó2Šõ8Û;¥&¶Q¢ íºB2”Œò&Áí‡J æ49¤(l¦ê8Òÿ ±rw’“¦áΛ(¢ÄÝ[ªÍ«ÊêK‚êmµÊ€– ”uË„âɺeCádÝò¡h²jQe¡kFý­O=«¯R9`=2•ÖãRe¥«Ï©è±>סƴj$¡¾´lx*J«† ŤUÄ:ÒªQ–V ªG[¯¾­ø‹ËÇ© §<ªê¨«£©Ž%²{„J¾mYUrnË"(þ#e/^ž<{ò䋳70«2î{3ÕíPVSÿœÝ„ÝÌÁ^fSs3–èP·1ñHªS¯–m½ÑN9MôCVS}5›¥báö `4˜ÈäwÆ‘)ùÖ6KIY(UÍ2‘ 2“¯Àã.'TT¹=ÊVpÖ°FxØ}*ƒ!_dpÕªÿsÆÂBÄ»¥6"ò0¯5sÆGZ…»·C'®ÍÎèó{&ŸªûµŒ##˜22™oË›–IDë> oÚGLÄÜÁ~’êÛýÞïÊ㉒¤#µéõkÉ£‰Ö†KøÚà <ÚG£I¬¿3R–U©©ØDоˆ@Œ…iV¡–Ð_;R~€7¤  ©y“0íB™Ã˜û*@þŸ ã*k!+6º –Çu½-@]¿ë†i¯Î~¼8–xô ­÷…jÉpÝIŠþ(Ý41T)ÛÙ_ß]ÿÛ—Å¡tXéî»J{3u}æ¡mÙI.\Vÿt]¸•> Ÿgk°Síò#/‚&'A£ië iFDk> stream xœ­<Ér䯕wþ‚'&ê6à ƒÜ‘ãSË1–G¶"d™>Xs€Hv ê*V ¨îýåsœ·$Pù°ÙbGº •ùòåÛ7ð—MUªM…ÿÒÿw‡«j³»úåJÑÓMúïî°ùêöê?¾Wa£B©•³›Û·W¼Em‚+u¨#üïK«êÍíáêÅwÝÃ}{wjýõÖ[F§‹·×UY¹ÊXk‹c—žÇP¼oºæðpêÚ;|æÊJé¢y¼O_*_¼‡ >_<<6û¶G@6zãLñ0¬Sª8\› :U|ØŸÚ--s¦®c]œšÓÃõÿÞ~s¥\Á×›­VeTðáöðýöz k½÷ÎÀÙÝ;dkS¯ád@².>¦slq8>1V¡¸ØgØàL'øÙ9t‚s¬U›­‰¥©‚8.˜X:ŽA{[üaÿpxxÄC+em¾ƒ‚kè<[ÊXE…À·¶ôU¨¼2¥³Q3ü?7Ýqß>òýƒªbÑ¿kà£k]ü·øåÔž>dßNˆœ«Uí"ÚÝ^ýÎÖj³ë¯LëÍ'”¯¯‚ È­w@UÀâpå@<ÊàÆ'û«¿­Ê“Ö›XF¯}.N¢1¥ ¥©xócêš»ÓõíÏL€ó®­r±¬+ ÷¯Kyÿ~]À Ї»h¤®‹{¾cTÚéŠÁÕµ-ú»táZ™Ptí°'À Šw'l òÈ"ÈÇÃ5 GPÖÿ*ö¶ù·ÇkS9""c"ÚìwÇ®=ý”!sH£ÇSÎÏïÓs €ï³öâ˜ÃôÐ& Äƒú%Î&íc¨}„QU9äNÀÊ)ÖŠ‹äó×>ÑiPq~:k/!m—Ðî:ÁNI0~F1Ü*0¤L¬_ŠÙýžæ˜c9-ð³ƒèÞþ3g:ñÐYQ0¶V#cñ-ê"Šˆt­= _‘ê㊠.x ¦Vº.>äAkC&†6ÈŠJ‡%Ñc ÷}y½ B Åw´ÊoÔg0ïµ­UqÌ)×#&d3‹6.vï?ÌhÍÇ?¤Ýx+¯udZG0ƒñÈšD%8¿ŠÉSâA¥<Ì·ç_Ú=_Ý¢Fž’æy0aÀÆþ†M= ‰›ð—«ÛÿG6DP¨eý°•+#0éåç§ öã‘G«¨/(ÓÇk‹뛤¿‰X±îðJÚÔÞI9¡ÐYÖÅúæX¾ ¸­·ãG` È,Pl"ð-ŽÀj7 ˜€íÁb|$ñ¯“ TŒŸ+ú\Nº°È¡cvî2\>º©!7üÉm‡ÎYô j|fÚÇöDFN5žØÒWH¢‘åÞ ,ŸÚSãÐNHÑ;ö'ÔB§"iËíO™ÕxÀ-ðÜ®nã¤!˜÷´1-šá#ÈËS’%û3ÔÎ)Å µ\ÖÏ4QS:£=‡p~Ý«ÅUšôé@žÖx¥&œNž¤®„›/JÒcäõT3½BéA‡Ø$”˜ž€8Èú´¹rE¾ºaËFí#1¯Rd„i)hy“‹žˆÆZáû–tFW¬/`b(ÊÃGàãûwÃY>Y\ ‰’1ia[‰Æ£àÝxP/@£ …¿!˜JÅ@ºUîOÃéIò/hÏ”°6_Ý®žqhûí((Ǹþסs3ÆLtãC®þdú0ÿ׿†áíü4vðS+zÞ"Žy £A(gA,Ÿg&N]ˆÍ1÷äÇ¥ÂLîIžM„àØLêX Dz"]×AÈ~!ËŠcºx )óÃ_ÌÔÑŸ xw¨þaß÷×K©§u¥õêV ã?™ð)T°µÉ¡†Zq¨@wé9p” ú›§žYmŒ…xÓqa¸A:V˜ø Uc}“V+ÅïSwRh`ÓÇa…w>X¤¼ûDÁqaT/fKÓ÷i“â?GóÁµŽðÖœÒYñœ%Ñòà\DW¥¦?ƒ:;öÙrì„·;‡Õ|óVý(ˆJäÑ|=ŠÉí%™%~mƒd5(…6 ¦J†µžBqé–ÃBZ¶1ÝÙ{Ÿö€†ÿK¶%_Â{Ѹ×CÒxƃ à0l¤=ÆÜÝå; Äv p…î¤ן¿7ód]WÊûüëCÚî—®’¸”ÈP)Ÿ]Åkï7 è‚§ÚɄωÆàWöûÇUAé·«llrñ¤ðùX×Cø;ÊØëûŒö`áVdmUúL!A2M$ÞT®%ÞÓoõ- ¸pX±`mŸÎ^…!Êfü ]\„+¤Ýn,:à.¸âŒÌ|šì îˆõºf4ãý!d1Œ®×–dö6¿tKÈH—Q]8eŸ–WnÑh%$Û~ŒYr7Ù Pɪê¦1_E&méÄîâcòsE‡™WªzÀ-Œ\ßçYüÒ‹o©^ Wž©_:HAÑ[­ÆÙH:Ä7΂°ŒN†–?a€»c®©»ŸÒI6¹@Œ¹|äíÄq$2¸É† MéøœF Ù™I,<–Lj_¼é$àg†Éáx°WÍ™x‹€ûks˜ÚŸ\MøÄµ{j˜Êb'‚¾ ‡Éù°D…ÄTù#V‘£¢D²}LŸýȆÑ|Ð!^ÒË †œ‚WµwÒ$`àðòû¡¾ h¦;$"©¨àSŸöÕƒ¨ó>ª§çò UÇ,‰pFç’ŒLä3“,ÁKŒ)+®É ñkv¼LÙ ç¾oãgV ™±ÄpÂä4§%%ñXS¹ÁM‘Š:§æÝDºwàÆâÖpM²úâË17CKÀS‹Kp+TMÕ° ¼å)¯o&•‘¢®iL@ìDjRA+æªøŸ~ª&š aæä‘_/œA'Ôì˜Ï…ošSƒô Üâú2®]–MWœ]Ë*'Bâ¾ow9ÜÅ=à›³=‡&8ÑÇ.„C‡Š³CãÙ)9§„Ãȹ-Ù9ómÌOt¸ÞR*EÞP$(Õ¾]p&%œÒ†1D+¦FM×ÜMÍxƺ¶?IËC °²?¦û+—Y›Œ(dAé hb³çõ–°yÖž¦ãfö”8¶§L :4f3yÇõ• œà2jkgyAîå²|~©ÒÑ¥•ybÁ)ÃõJråÜjc¶¤&;‚pÅn;Íàˆ€µ Ÿ³¾1± &9E“ãûsö9ßÛŸ†ŒßÌl}‚#®ý» lHe²/€5&å`V¢‰›CM@H˪mà«Cº“¡JNäT.P¡¬ëj¬T·u±jæ»”lÉt2¼œÑõHnœ¯|æ±u¬#ÍH<[Q¡…N¿°‚ëkŠ*eÂ&€ß'í«³g¬‘Y›Ž‰Út„0BXŽ s,th @|‰,`à6V *Ü5•B`ÌÂß#AQCÔ òB'¶\DçÉ#rðŸÚŽIP–ܲ%–‡YB€ÏÑàÌ.Î;gÉ5•h¨ÅÄ !&  ~MP¤AAcŒ¢¨”ÉÞ¾έô¹g\S쿔ϯÙT%u"û”‚§ „“åD’p5q¹rÁôœC¿ÇŒÝä‰*£6¶ ²R{—o_Sü#ýŽ¢’¢fN9ªMEZþBŽ2Ë?~ÆÆÄE/p4»º4þ|ö@6žo—úÄqÁbÒy€`3~6“Hïz‹,Ê"]÷1SÂIþ’ JyÂIe¿3XŒHM. uñóJÁ‹~‹kzmÈþî|Q¢vòÃôË,F§>þüôîr‰¡z»¤Ó í‚cJYÕÌÈ@ÔlÆ7C3ãöˆ´º@;!‚}÷ÍRà.òi¯ïóŒMœ25Ö•&c½XdN•ØÕ`’Gb[£šWÖ:DÊîAV†¤‰çI4IÝ î<¤ÎÚÍv ê¹™&´—"%…Åò­Ž8OÁj¢ëHÙñ¼Â†c,â$ÛlN¢gúÀ਒ò˜@[ý‚øá•õü3>žRMrñTÏÂfª0õg˜«ÁB?óÛH ë²k˜ ÙpͼüL›£Œ[º%jÃ/Gí=‡J9ŸGöéîXiüA:rW~ûB±¦2Ì?ªôäÍZKP C/ðÉ÷°CQ•ZM[|_»]#WoÙøX|Ýî¯U±§'ž<笵ª@ñgT.¸!Þ‚n(r˜¡b4¯ÒBˆ(ƒ®7¯£í—2UÚÄR…êȶÝÏràÐuL˜›î ÕxÃÕÎÎ;QMƒ‘{ ÕLð%xÄ/M5l9×VK²}—QMÙ3Fò…-ÞXü±òªJ_È«Žã–UÚ~-c´wÂÞ°B¥Je‡7 jz¡ 2z|.!àt§À7(¬ÆÇ„@ç° dmñGš8òm[Óì0¦ŸvÏwưŒwŽÎRôæ ˜ Ó¬NÉ ¼Ùïe)úHÓ»ÇRÿ&*8äÜ,:‡Ñ,Ù?4¼À^Šä»vµõ ÁL]|%v<™‰FÄþIÊýYÌé—Í)„Ñå«u#Bm½€ ¡Šz…4Z 2çgÒ8Èžyak‘ûvž”áóŠ7‹‰/Û&­ò¡4Þ²V9v2ßófp"TÙ˜v’!ÞuT§™´&ÛCsâ •#¡ÃŠ2–tðóÂÒ‡´2¸µ² Ÿ3‰ òº@“I5—±èГLãÄÍÍ0¼2ˉ–„í·Ú×P•Þ€VÖ`¾ubäÄÑ}AñþÎæRëjՇݜ§x>Ãóýõ\Y‘Ä.ù…bËļƯ † º¬ƒÿbJÐX™ZÀ}¥R‚.¯U’•Òààó¤lú|!µgh2˜ì—塃›øLÏcâ„áÂôm.ä÷8ýN‹¢{~È€ù‰)çéuGVjÞJ°Ç»'”§Åááʽp:n?¡?ŸÙ¥°œ wì”T¾Š"º€¤7弆þŠêÅ1œÃØuÜ™ÒÚÆÁÐÀΗ)“†¿½XY¡cpäuQƹ="Q{:mUT}ãv)~›ÍùŒæ™‘¢×’ÆrÍã9R w’è §9;\ßJáÏÆ'‹i˜ª|•KU¾›!]qHSÂ7.¸¢à&–“§Rëò´°[ªØ}¼¦z*†ÿ]+ò&¡¸TøªÈ¹.»±ìQZZ¹læçø!«‰Ð4T§Y7.¡#!±ÈPœÕ>»°G‡Õ‡Ùü_ö—\ÈÛn@u^ åÇZ„Bh¶ï³85“«wÔ[& Ààs'ë±Oø&ï{!ý_ ߯k^ú2 óÔß2ð4Ž _{n¸ú‹ú²# ¨[kl(½Jl…hÀO_ÝþþÿØ´€ï~ê÷“LýK¾ _HÇŸŒ.µŽ_ÌÇ*0bx.øØú>D¦´u1¹XǃÖÓ¸×8[b‰­? ¯©†!—1 ²ÐEm/ƒ¯SxWLÇP¡¼Sf6„€%_«ñ:Cmßu}[°»¼É¥WèÒXz7V¾Qù–.òpÞýœ’®¸‘µè4‚„òa½–wí¦lÒ ý© EÃ#/|eeöªçÂË mwîøLFÙ¤pŒ¡¥¤ôçù3Ä9G³ü  ]²£ŒÆŠÁ¿¢7ɤšýq÷Aޚεé­iÃï8È6ãл@°4 §t<戮N—® ©QÏEFsù¤ †ëX}™ þ†z¿Ü§“ïµ²:4l_€F~ÅË‚élå^>°Fë¥qa’/ßW •ÀŽ3öÇ©–ŒiF{FE=rf ¸1@a¾+Ýì¦Ù6Ý.;v\¼;Œck½ÀU»jÕMj¼M§ò¶çHû¯Wÿ!‡endstream endobj 240 0 obj << /Filter /FlateDecode /Length 6319 >> stream xœ­\Û’äÆq}óÆÿÀ Ƽí`è (éI¤%™å°È±6׎9³CˆÝÛ$Ð;ËÑû/œ—*teèéÝ騇íéê’••yòdVý|S•ê¦Âáÿï÷¯ª›‡W?¿RôíMøïûýÍç·¯þùkåá›ÒW^Ýܾyů¨›Æ”M¥ôMãMYùúævÿªÐ›Û¿Â u•¾à\©oá¥Û»Wßÿ¾©Êª¶­ö¾î7[ü«U­k‹;úÅ4ªòEÿ}ú˱?¼M~7[c WÕo’ÖJžî†nú©½m¡µ[§ê¢K¾Ã¯uéëZØê¦ôNbŒéÓÝ®³ ðë¶)öí` ºx—¼°;öÛñØïCï.þÔ ?n°#¯Mq Omã‹G| ‹ýÒ+$:Þ›ÿ¹ýÃl©¶Qô[S—­³-¯@mc)vï Þ%Ÿûtª0]— èøCòÐ}ø¾±ÓZzM]ÚÔ?å['[ý>}ã0 ÈAh¶I ­9¿guqxƒŸ-,mØ‹Ùo75<…«Ö O‹ãVV ìÄ_Rׯ8WRøÅï­¢ÕÅX´Ž» ­£çµP»%Ýfý{V·±¯ŠCª;DZϖŸï‚h@µ-ߥMñœvN7Åð8i×Ú®CR¦¬­×7·_½ºý§o…FtÇV¨õ0Õ¦x]ÊýööÕŸ_±-©o†µ!ªÒ¥©Ú›ÆšÒµ mÈ·Åí¦µØ…FøÛVëbèúB ´¸ ñ{§.R­ã= mÚ•­KMÏý$¥Zªn—Hª\Ü>¨Œµsüv¡+åм…ðT½+MkÒ©¿NÚûH j ŽQHð‹- ªêû°_¬Æ€«Ù‚JÌ­ }_«â« Y‹R7ÅwËq8ò㨠£&U‹1®l¼Bz½)_.&cÛ²qFŠéËNlÄC˜ 5Ù w»§H›gUR_tÃxîí|+ÎÈ „eÝIY/•mpOJE…u5/Ð}ëm©´’Ò½‰Æ¤.Æ~¿%½ÙZ]•VßlÉ µÁa¥.jÇî³r0÷Z¸ÿá°ÇÐv@°”`CêâÐ#y’ =I›ù©‡ZÇFF˜’bC æFi×쉰eÓœríÎ:d#:ˆ©sùB/Щn»Zƒ-)¶UK…öv;ñ>÷_¡ïÖœs ÝAç,ê°U†Ð,x©=›øv êàèÁO]ˆdÊ+ø• ›*WÖ­f…û|×Ém8|ƒsšPÍ_ú¿- ‚€ex†ðÔ|*ºøÀÏß&ú7ûÝ.ü†Pç¿»)I³qú<ÁÌ×0Ø[2ª-~?[Ãs`¬ˆ@Ï‘p` †%ÞÈ ïðsoaK9t^§eºŽ «ZüN´ &¬~‰ 3UÙèFjš0’ÜYÚ¹°fÅã ±Õ Aå.|T-ß&n ±º`éAí‚ED`†‘Á±¶ð¦1Ò NÁ+ï{ößêøJKº–ÇMô½jânSµ²›éAç.7ƒÜ£*Þ÷€DxÈT‡nmC §§–äHŸšÃ¸Ê"‰°›Eaôl–“Z±Hý:ü—‘Å{RwšD.Ð`E ø¯cÇÛ*‡6“çìŠzuKÁA7¤s¾ªÑsàTmk3(èô§Ðí¤%hÏkD×&šÂ÷Á-CÁ†P ââÖf-_b  (U×騝b ”0pÚ.Ô·ZÙR+'ÅÌ–@Ò¢:¡ÀŒah;1@ôœ¨ßÛÜ.(".a-ðQ§æ1ðñ°_<²ªtÎ_hÚ¿š\;.-l³Ë! ö®<à ½ÏAŠE.'öÛÀ”„{ “ýS^Õ"üIà>–­ÕM¶õ»”ÃØA“Ö¡¿C@³ èÎÀºéb'^lZ0ãPvÓgtý›Y°O›Ö ÁÓUnáEØ{Mq›a4£!~úÐa˜†Ú[<Æ×ÁãOÞ£Îìu7I’ÁÈ~¾ă˜†n\Ü ([ß-3“Eć«º‘ xgYl ´RŒ3#bÈ…ÜY„š€·ÓÕír‡Æû¡C³>¥¨Ã¨ñ0§ÃqÕJ[¥pµ'ûo9ŠMá‚âg¤ïÖƒæ1Žaªÿ@hI±$ü±ÞTèvÂsXžz„ûý¤fY„¦AÂ!4ë4´;qŠïC3 XžŸoÙ-»eé°ú±›ïU\Ý:®m'XÆá0FÒ\Ìdol½no†OŠÁNÄç¬B#îík”ñ1ÇàfUSjkâ@ùh´`CŸáìÀ ˆ›á*þÞÏx^‡!‚Ež×¶¸´íåF˜_È6)2•ÔWÝά½°ó —PPÙÃÓ©á RûU°ujïOðçw N;öøXZ4ÃÉ|vj–ýEÑzŽeù³š½ACmú#ÓîHï¶'“ƒnƒW{x8H„Ú÷øØkhsɵ{ϱæÃ3ЮYM@K¢A8È¢Á÷}/~'ÔU*˜¬Öâlëâë áj²»à†Àhvli@¬±¥B@Ï¢‘ƒàþÇ1·Kº¶t­K{º Dïçu+Ú}!¥k¼-ÁPH¡ ´“û@h”Ç1¤5¶Øe«œ!z Éÿ7á3ì» ‘€f>…HR+Ü#Y$™rkÑeó_`¼¡$ÖG«½öè”ji¯Nû<©}Ã5B!M„à×,ç&¿-nûã¾»Ž’bLÙ6ióWÑQ]ëRá.KÚU/‰VtŒRļÒ B¼Îˆ îÒ¼ÊdÃ÷η€n–!´:ò¯MS ·QML†šºcè%G¶÷á{ð°C'TkA—àJɱ*ºt‰ß_Kèª*µö׌%<§5_3%ê ûGñ˜Ðnhã±?N$ fF=—{†‘¢M˜ó P[ÖÊT ~Y9½ÞE€y¦c<¼a«áÌ-~®O„*26 Û ›<ûŠ"QíLhP €‘4«/þ4Jó·?uM¡N­^'1ÃIT¾WàŽN¾¤ÚÅ0¸ vÊXŸ&‰/³S€:<¾¿lZ¤|µN)~JðÈ8mb’ò8`¾cÒB®ù,ÿ|ì}a®ÙbÐ.¨u>S%¬U­|Ÿ=‹Cg¡Ýs¡"Ê«¹Ö`ÿ°hëøSÔ$d°f’!‘Ñu­hk!D«IöàŽGàÃlC¶áÉpµšk êj^¥‚­ ÑÊk)ê* €/ý?2c€-¿Jz^CTåL{S;SÂeïñû%‡_ÁÖ—(E¸ZJ^Ԇ豯(ÀÄï³8wœÓÅWýZ$*ƒ:ƹÈsM/Ûy*ƒVMÿ…C„僊{ª'Q`~_”ƘnÀ­1aÚz‹‰Oð‚þéã2ó¼4s)€¹¦*ÀYéÊhVThð§Dsc2ˆlÈ1Ý{©µ"ÇD6Ÿõ>4œÎ*þ©0lKêo G!\ÇTåÎjG,im å 'Ô±£OÁâ}xW+£ÎS)UÃ^y{5ãHEfV˜`Î2ã`Àg_VåUXêSÒÿɾņ¶œÔ.R³ÑMD/GÄ•¶é£G¢³‘;§{?+;=å_ײb±Àp:ƒõã¯6[gmÀOR‰GØš–¨ãš£xêüŒŸõ$: /#Æ1ò—OÅJ.áHÒÇÐ5lˆ |ƒ–äÔºöÍÌ%Çù\Gëxˆèø·Ó9 ›¥â&ÓÚÂý›Pß4‚žµÚr8þ€Rw59š·‡·1Ÿ^Ùp„ïýpˆ/Ú¶ÔÛû å‚ä~G,tŹÁw»DC-wTBA×á1>OZOí€Äîîwb’KåV Ð^=Í%°Ô¦¦ çe,µq{®³ÔØ´szÆœ 0ÃÌ¥uP®…ð*=Ê)°úý#< ¥4  +ƒ${“…çûûã¼6¾AÛ±$80’µk'ÉýK.™¥,Å!ü±ö\9.mõ4Å)\07^Ç~¤íâˆ@[ÝÏ{©ãAòkà©æa#ò‚íÔ5¾5T€ïa‹‰7ÆYÅÌ‘ôúBHwy®ªë'¿Ÿ”v¾YèpÉóIâUs)„uŒÏpüH³žë&¤òøß<·hFúóð«k<¾*[cnlÓ–-ø"BòÿÒ]š€Ò¼ <þF±cA&÷ÿj‚Àiéè®C·MéT+ÚÕUõÚÑV¾´ÆIA5î™h&?E°”&áœ>Š‘´èQwß¿ ²×~îAX{Üy/N¾¾1ymÁdŒ9çä•¿_ð”üGʉ*ŽP¨Õr€ ÷Rvq•j<>áxPÿ†88çÎíŽ~ÌuŒP«8,ãæžg¢¨ÄÙPÐhô릒[i‚&)w¸FÜdú,¢Äp mB… 6»Pz£zÛg+CÈœ·-,}Vû(þ˜#h^ã`û¨CP£%ÛŒ¤¨›¯3.•®Èž“€i¬°$œ»¢¿ªL‹~Iàû¶ +'ÏkÜÆÊ54CIþ›ú²öL!èŠÕÅeY*GHýƹøÙRÔp*4T §q¬òT`DÛFq”ÙcÛT e:Zc'Ìí6…›~ßQQ›âøaìöéŠìîC µÍT+‰Áä¾Y2*Æð ÏÖ,Ž áxØÇþóÐñ—ù8…ÃâùÌãPl̽nXÄ»wâmáIY,>‹ÍvóthŠ7‡I6äÞc²tÓ¸ yDZ5Fûötž²¹ÀÛX§)8á–ÄîÚÖX% ŽvÑŸX¯! Æt8ò^[Ãqnq7Ro ÆbOM+¤ó¨éíÔv[‚3öÜöoø-P 8,ùünÿª=}eïO*<š:í€ßów'¢é„þ±ÌXø³ì²©Z— úµnöûÂ_è›´4éäb|ÁS~)µ…Gy{ª(p¡Þ-üZôìiz°¾ô4Hlf÷i~ÖRòøŸlò_âñ‰Lb“Àp2Élô<…Lò»8%³ä´g5žJqåíÌ–)Ê–b·L£§åt¢9Ô¨l1XFÏÑ3X°uS,Ñ1®[„G>å{³R‘ G¡edÏ‹M¿xµúF.6žK-­N†Ú¢RräH5V½“¦33‚*©·LÒ(RŽIßGRÇN"6¢ßGZÈ“5íô†_Oqª¬@~Ê‘}Ç0m1¼£3§+…F|Òø ã·æÜ"žFub>ª‹ªîS×Ë™ ¸øM‘OåH•Χ8ÂÐ}÷ËÊé³}xüøëé& 3;J’ˆm~ÆéGÚŽ§výì`]¾Õúœ¸eë¢T#ˆÙ,IbnHÏZö…Ó/3OjÅu¬ºø1Í¡žwF­ÓžÃ"¥„‰|4sós ŸÄœø³”O««²½Ñ%ÂÐ-ÿnXé§­.U¥½Ù&Oþ=?™ñsº¬«&fŠf›¿æ3‘ˆŠQ™Ìç9G!qË65Ï$óNl%(šx‰‹r‚¶6MaLCÿË¢Œñ°^kjrÓ†%“˜³*ÛÊ(ƒb>=úwKrF[yµÜ•cÏNM£åãï†ù<›#ÐÙŠÊa ¨W/¾‘*ॾKõâ·m 9©YÒ&{†j;›` aÅR…LJæ™3Ý|Ü¿SJái¸ÒÜÆò©]=çJ)ËM?Ø ¸™5¬DŠ‘Äa.ü8-Æ‘Z¸¼ Ñøyœ‚3§QöÄ<çE. tÝPÌ‚¡M‹_‚P¶é£Ëa2‡ÕT1'³JËî6i;ÌŸ“(‡ˆŠ„ tÔ¼å ©€?\êÏÙ–óeZZù .?ãödL.i˜'<uí4ò»™¶-‘Š#cqœÒ҉ؙ‰¦‰<·æü¶ ZR>sU!(([Èžß2ÛR 5S×8‹ËGž\(F?{7~*Ëg…Í >…â¼Ðþ ‹wÓÕOi:¿ÊŒu±~}Àšçè_çVQ 2ð òL ¦æžÀÌX}áE.냠‹Ó-Õ<1!;â}! 76Ð`r5Èl?”×1L,µ×=Çï›zÍÑ϶ýBŽ;šÀ¥ï«µ<í Ì‡-n¤€š0Tò­ÿìX`‹%PóÔ :ûÕó;A*ʱtŸªõ™p•jDÉÙ¸(Iÿ,rq­,Gê™Ò÷> ›*ÖzNŽ£;ÏX9gs1ˆ ãj=:wiç‰%¸ ðÂÌ—ž¼&†Ó–*=yÔ#ăÆÒB‡yòé:ÊÊ, ™šáÌN®“wC·ÁÍ;nKwÑ)tÄûch oT|³™.]köâÓ@˜qÓŠÜÈ¢OßÜ_æÌéÇãfºéôuVfå þz•kžJg‚󈧂6¥-OÔŽ;ýÐ/i£k¼ú/€®èÂ_2Ÿß¬AÑó/cÄûg‡Oè—y5€Hߤ5?<˜h狼än m ö¾ÉbLilÒè ãmU×¥ª}:ÊÍU®WV.›Zþ¶øšiQ0¡OSJ­[ºZmªŠŸns !l‰çÛM¯È–¾»åº §­.uÛ$­jöK®ñp‚Û:01c ¡ur±þ"îÌœ¬ ‡†9„ãcÆ>4ïë9Žh¸êWöôí²«‰A Ä0øª´•ÍÃx ô³oåÝ ÎNp(|¤É8.àøèëo¨%áîÊ­SÎï˜3Õö+AÐp:‰ù¯Â¡u{yq?er2).H>(ÞU¢Mv±!Ÿá(O7BàÉà„‡‚Z$ÝÓ”¢ ¬×Tó%‡¨h«z(–š¶ÕŸ_ý?y(^endstream endobj 241 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5295 >> stream xœX XW¶®¶é®•²Y$V‰û¾DÇ-1Ѩ \qOƒ+² H³¸ÐìtŸnÙ”M6‘¥ei· ¢&&qO¢¾™¨Ñ,y ÆIŒ9…—¼y·³¼™yCu_uUÝ{Îùÿÿü§ŒMF¡PôöZ´$$È7xâ‹c_ Ü(ŸzHúÓìöxØ+ÁÞæè ý³1²/r½/ôaä¿©³ƒ_ ™³}î¼°pÏó#è|£ü¼¢7,ŠÙøÆ¦ÍÞ[¶.ñ_º,`yàŠ Éš2cÄÈÆŒ7ñÅInà bÞd3ÞÌf13”Æ,e–1#˜åÌHf3Šña^cV1s˜±Ìjf.3ŽYÃÌcÆ3Œ'3‘™Ï,`&1¯3“™?1^Ìf3•yƒÑ0NŒ3ãÆôdl™ ¦ãÀôfžé§°UØ1Óh„Œ Ïpïõ\Øó¨­§m¾£Ýûöû¿õúÀá%‡ÏzOïÝÖgFŸ‡}úV8Ú:Öóÿn¿åý2ú}¯Yª¹ï$:MvòqÊvîéluñu}-ÿP.60`Å Vi}¤¢½ÙÉ:†%Ù퉅†½áà†äÄhbêøÑ%q'BRÃRS ¸h­úù=¨„ ¸¥ÎÊFÀ&ÉI˳9½\°X}‘LPÕªkÌmp jà;(7pä &kÈn5öÄF•C»Š.]a­·†YQ‰ \ g>Kjs²z`>ûµßۤǜE[gù Fì¡æ¿"3TZöƒ}°Q$zhÙRóÇp˜]{ð@–¿Ìí–KG‹Ã_HÅo/¡áŠïÈáþÙ‚¥VÅÞø¾ lÀEøzÚuÒ+ ‡T¾ §¸Ö©·Éd¡c†öIG›»VZ©Æéw¾üF$ÓðSͼsHOŒÄR\ þ¾xæ*ñ0¹£ñòŸAXxáŸq °€0ëE‡ôxQÏ$ÕIý-Šj´Ç\´WJ¢A·ñß’‰dêäÁĉ8·ŽÅ‰8õóoÑQ öÙši@8¢!N€=ïž‚?Õ % ' ­ðÔm/9¸|`Ì=kÅ€H ×a¤UñºK¦&e{Fi ’L»ââ@oâÉ¢ñ™¯Ã¤Â¥· 8(Àü§Î_ºõ(û4Üìå[Eæšã³ ¸R0—‰Ì–BZ„0kÎÒÓóËfƒ+I ãÈP²™øáH¸=E´iÉ +µHœ5¤Îñ1­bÚ;ó}¤O1\ƒÂ¸/‰›÷ÊÈ€ –o#³®`GæTp[q<ì=àpÀŸâ0‘Ø;‘¡sV.ÔjKN ¸åû>Ú’_ïvù‚7q¡éU®ŸK *µÑjA^zA®f>Ð ŽŒÁÞÄ[è˜Þ]Áéj\†#hÅ·‰ä“HÏ]>[×n]7ÛDàÈ(© G©?‡ýúTú­¢¡îñy —&+æ[é.8½ G5雜ù§í+°Tã«Ö‘‘›g’×è#&`Óõ7Ù~¯ŠMX嫞ç;ZðÆ|œ æq,X^Ï£ÏlRcœªãº©Vwm»JíðÅ%½¼ˆ$³àñãï‘sæJ¯J¬¦Ùçðš—ý=|wSø+Õüu2í·ð¿ESW w Œ&o2¾Îò#,ûpövëc šó³Ä”—[ ºÊé&É‚ý«p@Õå*űk¸óšR‰¢N‡Z" ýjý3–g/Ìy3Ns—¿„bTfÌ 3 ¦=™2*Š!­TüŒ-‚}»’ ¿KHIÕ'&§†äoÎØ\Äiö‰¨N+’-IéÐß¾Ü+@·Ò+¿-DH:h4ŧƒÔ"aÙ(HÌÛg†üƒÂ¡¢[ÏB!¸žÃ¾¹è*uÇ,Øk¬’£Õ‘¢¡; ‹3/µ_Õ 7 „ Þf-ºeA!Â"÷ÆùÂq`Ñ'Âß´‡ï ><Ñò‡0çø÷€~õ“¼–F±6àð4àr!;_D-KÓÙÔIkÖŠK#¿C…oö¢¨h“l±¦Åׇ]ø&\-°‡XÉ\êËG¬1"•ÛFeê©V»ßÝññÍãçoÒê(CŠe œ°ba'’]ð6º(Ûï:YÝ¥¶'V6˜¼…!ØÌiŸBr ^:[iþêèñ#TRX¸ã ¼MNüö<¥m’e»Œ:mósÚ»LÖ^vQ"Ô‹’ Ë[ˆÇ/[ɾºþ™³RÊÏ ¼ ~Ãò•ÏÿÇ¿ücÙM¸cL3ÔÒÔnZ¦HÎNVbC)fce·†ƒ/=†Ãºe´éh#6Z¶Îüšèñêd…É×I£¬ éŠ4T#ße?ø-8[Q’œ´1ʼn¤'É&¬U³ªwæÁv†ÅJ{‘ŹŽYQæäRp͇LsÖAœŽ?¹ìËKϼòƒîS:l¯X+iü~rô'¤c%šâxØ-x™ J9 d[_û€¸/%¶ÉS}k¢+ª*‹%Æä–¬2(îZã¦éâ–¼H&½E”‹¼þ—·›Žù•›Aûw¡Y]œ %"ñÁžš±S£VûYNþ ™ê‡{…®(iÕŸÒ(o8Yç±d&j‘CלýY™Ÿ‚«•o-„˜]µlQ1:9Þ`'½TMrÈž4ä XN¯à´±8,¡ÝdxìîÄÄi@ïùÊ\ISzØ@Ÿ¥Û»À¼/S|„*T7•¯V]f¾J¤ Zè5]ˆ¸æm\ÞL…sdØ%ãÆ> þŽ7¬ò àð4û¼’ÿ½‰-(*(Ê?Ø¼âœ¾Š·ðä¥âMev=, ߸fm\xÂæÓ»K8YŇœ>r¦°É ûáÈ]²ìá/2NÏujk¢ÇNšØùÀ ¤ÐqµªÉRÃf jŠu×nQ—íÊ"Yk‘.[%¨PvÆßò 0pö¤¦&SeÀì%ý°JL8Í^Œw'`.±¸¨chrìîàäXWÝúy± Ï0›ªrág / ×ù¯=îûÞݳ7Ð_òÍ8žy \¤TªÎuŠc´Å{¢­RÚJË«‡¸Fcl²µ}þxÚ!¨ˆ9qÁ„Îè¼ï‚!ŒƒQLMݳ Â8ßÚ˜òâcûOÝ%lÆrâ1:–¼ðõxŽ«‘ÛGáb3zг$ ?%=¦ë<ÍîâÏê âu$±ãˆ I”ŽÄS먜ùÓL]UC„Ñšmˆ4F·C«.5ÿµ³ï~ÒÙww°ÛÁáiÁéF”pÒ9‹å?îÕgÄ€kddïÍÁªö.&9éê óc¨¥Çc¨ °‘R¡N²£öFš®”VâjZ·÷ˆ¥Ä¸ j¬’ÔY9`† ×¢8ˆÈÿ¨õd–ªIñuÉqT÷@Mª;Øx=]?Ñ52  ’º[œ$[ EYŸä´fÈ}]úìgy’XÞúÉz6¢è­JšæAÃ&‘dð·SÐõÜ©"K½èÃò³~´á+Þð]¹g‹éÈ_¡¾ªä˜X}þBF)4ÂñhË[Ü3î‚á))éUàvg ¦†™+!ð2ì X)e+hDe©•)&#DpSØŽARx\ŽÑIú$ÜÂJ _åÄšŒûÁµ 2JEé %&Ó¡ôBóASa§b)Þ¤—Vâ+GÙKk…Vgþ/RÅZÞ.HÚiLÝ“$„¾¾@·†&a¨Ý΋xVM]”W%ÞZwJômZº±lU¦ %Ždà÷p4Ž>ñ¤@®¯67šê‹ëŠjŽ”Xi›È¢^EWVøtˆ[¨zü%rJi†ô“¦qKÓÜ D¹‰pÂÐÙÚ›ä阒§¨¶»ïÙÇWò-9f£!CØ:nCMô¡’º¼ãr÷c:PÞ1léòqx Ý•í+¤8 2cî“éBǘ.«ÛÜòð_úêþ÷"qwZSÉxˆØ‚¢ÇÃtÏnNÖÕà‹­·j0¦&¤Ö±úî’'øÚ“Œ»Î<ÇHMÒMYt¯ÖO­xG¦ÌocÖJ7",{e^`¶_“¿½•öXméæâÿPž´hÇ’þÞ—ç£θwöÖ‹+Ãr…5e a„Á[lÒî‹=F»C¦)/gÿéÐó'k⹿|Ø\›-Væ—¥˜S“é,µ‡Óˆ:tè@Q±@6ҬɟÉL†ë'OÂõÏ?u"m‘½5[·.&.?WO\¶œ?vé"䉨VßøpØ5Få[¯u³å—nþõ¯&©a«çÉVò¡úWÄéx÷'©1Gydb-:+µ`]§5æéHç^îÎ|Qûµj ÒöD÷…äUºX‰WZ“ZoÆ‚nu–á,÷hÐ=²HèPiŸ¨ù­ÝÞåqgyè.ïQ´c &¶$´ÊŸžóéá×ìÏñÍ[ÏÜ5–¸}—ûà€Hj¤qšeÆÉä%ôÄ:´SãÔ´éÞ´ôŠiÝÎZÛüq¤=‰pùr¬q².’F³ü;ä9ž³Ô×éL{.Éèå]VI?hý«7ùlÛèWx¬±ÆR/Ð|Ssúª}УAñÁô~Ðô@)]ÀµøïEˆ¢œ ¨vQ’ú1àš-ÚÚ>_Kœ‹…4‹º­4zwzéÄTc\¼ ]V¼ª~Á¯N$ŠùukìÏøNz¼ãQD®¡D·Oe¬ä´º—‰Í$"Vá°ÁXi‘Ïü´w—Ÿ6™²²…œœ¬ýååï®»»Gž£&\yòD¶Ô›eeû‚òë¯Ô]Ž–›l”䥉¤ÓÈOÃÕ‘$ŽŠr*2ïãàît|AFkÕdÆ ƒÊJFK_Üfé™S³Hî™qñkÆ>V\ u­ìœùécªÏ;!ô¦Ýi)iúä% tAÇïr³s²®Ë–&Ô ›!–vJ)›[–š’”Bm y SIZ–7þœü,s)-‹_\×»ÚŸÍÏÍÛ_Rˆ½È~Ö¾H…þ¼>.’š·Î;Ê®Èwè›á4u"V›Mg IêrÒ “Êö«¿Òö™¨í}Y2xØbbKæ¤`ÿwiÚ˜î‰,qyBzà:\tNÅŽ‚Ôï·âÝ…DÚXd~ªh¦Žb=¥f»ÈÒ±îw\üˆb°>ê¦Úb“«khU´_éÜp a$Ð ÏíÊ` …ÃúäÝ.Ä·c+ ”âT_YՆѰ‰ŽH# Œ^ó€ÅÊŸì²"³Œù²Ά¬b,”~pÉØŸž}SÞž²ª“(–mϽŒy«ëëÌ_{:´KFZ7ž!6ÃÖzìvÞ÷Ì[£Ág‘n ×ùvæø¿ñvæ*x´$bæ¨J—ìü“ º´œîSÝù¶JöìY²á«p²ŽBu›u”4›-7¦‡E`W¬@Ú:ÞTiñ(Q…,,ßRY©…oeÏBg»µjüHÕõÔØ†°¯WÎlØfù;ªYG:"sCä±ÓQ/™q¦}NlX“ p$ËÛ0 µçÆ+™2x®6V9A§†½Ká˜'ðWZv®[­_ê¶Öä¬-H4§šS‹…¸‘§”ÕÌ6›²3…ÜuÇï× c_žƒIïÍ^ÞñùLËþ†‘oaêB+6m‹^;ù“©h'ðgḶ/±ølóH,gÑöpã)ä t«¨Ù€¼3ÿTÊA? u“ØE.„)„ ÞOûàðÙ’¦æúË´IÕ¥–…mJÙÛ¹-;jY Ž¿·áýA¤/™9“˜$i ï¢Ëÿâ@‘ð&Íxið°³™)Ân ܆,{·œ¹ð-¼4\èF:¥Ø¢¸‡C”%qšÆmÕ7n ôó³Ö×[ªÒbó»s]C5‰Ñ=ÝM‹Ë´*%[’ t0G´Ñâ\?«ÞÆ)hƒªÜ\“ Ò9šk:.T CëI¼€N Äë:ñÄA„;a¦xçöæB®øëô­J¼ƒf  —z’AÈ…– ¸äXˆMCQ4í¼ÄÆJæ‚üYµšL!6Dk4B › {³ÌP|H ±²×Ð p>×Õ‰ŸZµgn ýPëmù}n¤l/‘}«‡4ŽNMÉ*Þ+… yÄÒ1Ì6»!§"«„À¸=áÊñ}6W„× ü5ËáÒcçÖ¿;ŒbwŒ?é%ûÅ]=§ ”0Oq[žaÜ*’[¿W¹d¶Wt–b‚Ë4—‚Î/{kû¶[Ê·œª,ÌKOŒ!ÉÓ¦ÏKL¢v2Ÿ—±ÿÛ{Ø_pìpn«"[”xçjZIËxöçòv—öãßWöI¥4ë%šåݨRJ‘tú@m¥„Ù ‰R~‡¥-R–Œ†ý\G µ,®0w“Ð/¡k³Uq]Ñû))ÿè`‘ªKôÞ—8vQ;^Mso‡ÊO¯5Ã7®h;ð#âBT£ŽYaÝUZ]W|²)°80]h8Ù’^LÉu|Öœ™+æøiED"ãâ©v‘¦±Ï8T:¹‡ýšd¹SAï±Ýë±ýÚ¢§TòÔÀÛa_“ñ_T¼ÿ|ÂÝšs‘ˆÄfº÷ŒUõ;U):YW»vŸÐÔx 2€û<‚‚RÖø‰¡þ¡†M†Xc¤1Å” ‰B1tÚ9­F¼f=¸F· ­vhÍÊ«†*®1¸ÒOàgùûŽ´{ãôOþöH&üÞY¿¸ñN|É~¼Ý¿Û.K Z-l¨] 14E¶dØb÷Ïð³ñ?tí¤¹^£OŽŒ ˆÎØy@/«þÕÌygŽ”%¤f ?·•§Ö oßÀÞƒ~&D''ÊôO]Ÿ#Å›úÿ“¼¾›úg¼xÉkOàrÑ÷øb ÓQ‘Qÿ‚$ÿ¿äéØÒî¦ Šß¥£áé2£ŠôÜx9º/oÕÞ.¨1DW±¹’w¾u0;WmµE…`k³,ľgeš)-Íd6eî˹eoÏ0ÿ ½Ó"àendstream endobj 242 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 8337 >> stream xœµzw\T×öïæ»rÔ{F½÷c]Q»Ò¤HïE†2Ì0kfè½ Åì½×D1£5Å’˜˜}ÈæwßÛg@cÊͽï¾÷€Ìœ²×Úßõý~×ÚŠ(‹”H$²Z¾bŸ“ïøq£×¸º‡x; ŸösÁú_•-q–ÐE ],êú ²BõDC»_êA ?vs}çùmœï¿iAÀ‡ ƒ/Yº4ÌiY¸óò—;·¯tµu[å¾ÚcÍ;ϵ^öÞë|ÖOš|§ç”©Ó¦Ï˜ÉÚcØðÖæ~£þ1Z:æÛ±ãÆO˜Ø—£¨”-õµŠšA ¢VS3©ÁÔjeG ¥ÖRÃ({j8µŽA­§FR¨yÔ(j#5ŸMm¢Pc¨ÍÔ‡ÔXj!5ŽZD§S¨%ÔDj)5‰ZFM¦–SS¨ÔTj%5’R½)FYS2ʆêCõ¥úQ锄b¨TGªõ€ºLùP])_ªåGu§>¦zP=)+Š¥z‰:‰:SkIâ( *‚z-Š=îàÕák±ø¢Åt‹*Ë–©’’“´=mb3ÕÌ?;t|Ú)»óˆÎŸu)ê:´«º×-¦»¬{`ªGLïz~гÊjkÅÞéµ^j- î=¶w¶u7ë½²‘2wÙ]uŸ¥}Jûúö“õËúÇ€¨¹\5×,Ÿ-Ðÿà€â<8kàgï• š>(l0=X>xÒ`ûÁß <¤xÈ·C†¾¶w¸Õtk‰Úhâ·†‰Zœz›"h[ˆJSÔ`ïKYbNRZ$D‚Z™…]Z¿“ElpÙe¯a¼éõˆV[šèÆr½6S«“BÖ–$'ñh­J§•øsÞtþì÷BR"Aè®e·ÿÕa¤žoiR¬P‡ëÈõº5[ÅW÷6Ñë!4»dGÃC0y×Ex¯†y°ÅÑoó3Í^Ç–Þôô„Mr\BoSÀbòd©G‚+à -§ÙªŸnž¹r9Ë~ ‡£Þ¹Jx÷Y{òntÍ€LVH~{6ï¥5{°EŽ–IáÑôÛXœý¬èúø”y4öKÜ›kíà]&¹£S¸Ë[Ëh÷$Å\7ßOÂ#›ÇÍßÊqô•tÙ¦©XÌáÁH#©Ñ¥æP {çYí”uò2|_º`ýôAî)Ù’”V#GåhÍZ¼h³XÞW+Œü8ƒ¨ò>Ú}_Ì{!O)ê5ô5îŠ{ŽÀ"ÜK‰:¢®?A§D6Ù êüÓs$•Oë»~8u®‹kq£?UZ(fPÍö:^u´êxß['bKa%.ý(ØÃÿ“d€×Šù³¨X(‰ÇòðÑx)i^Æÿš–EnO³ÉWB׺V¢À!–FI²ÜýšF^8^ÒjÓŠ x›)PÂñNòhü5Õ¾ËÜã/QôKqËzÔ,Ekp_4Ïþkw ÷‡†¡Uò¡½‹ÃmÝ7…ù¯Y=˜!mPå÷Òf4¿”\‚ë!Çì_•1f1ä…Ý/¼Éê£hÏ}”]Ì—áuÒö,ñgCh×qѕΗg’ÍaŽÀ½qÏgCs£q•A޽“\KotO ^~!AÑQ^þ[€™·²ѨóûŸÞkš´NH]•@è‚é¡ M%AökF›Œh¤Qo·ôGY$xLð<<‡äѦ½ÊŠÓϲ¼¦È¨0P2Yá=‚Ú‹S*A£¡bm>–3F‰ ±l½ð6?%oóó)ɬHezKT¯¯½~hÍöç)¾§´Ú»ÊqžûbÇ(uHIþW¤$ÑïƒÃ°Omc ¥ç&eÕÉÑšö¢©ù³4htœZŒ_É.C¡1»š#j/6¡C„›ú5»4ÞhDï­Ùzþ~³Ô¼ØC^¬„ÕêkïBCßFxb.COš]3 rjåHóþ>óM"¦ÆzŽä&£T ;¼-]$híò1G¶U¤  ]? Èªær>|Äš†ZQ/)œôÙ“íY½=Ý)Ý.kqœcjË¢)ã½uœ6. ˜H)’ÿ`.ÐÄ$ˆ‰æÔªØ8•ÚµÒv‘­éæºØÎ#߯"D^P©ü$ŠaoT_FÎï³ÁÃeÖT÷³Â9uŽ&9˜hHˆc½²R´Ú¢"N§]aѧƒšRô¡>!¸÷8LHE™øÁf^™Ò,n B‰…¸›Ú¦€»ÞÆ»š~¬W¸É—ÑØ³q~Kñ¦Z3Ál¬¹ðË“ñxh1÷7üâUmjðJ<OÀNØ MÂÑš[÷ÊÏï‘ç„ìsÉ&ÒóähÝœr•ì¡(ákJaD3ÃP¼ -³úé:ÙÁ>dEPéÙÀµô\W·Åð¤€C&ôž ¿'Ö¤@‰fºOÿá*&„fMp•wÿ&¦îfåÍ+\›J_2¡=mà?Aâtìm ¢?PÅ—Ñuº¬;\™I⡞ ®äwxèï2ÚŒO è¿¿æ7ZÔê?%нnC-ÁQû;P:óþúš6’U¦#&´ßäÝôVÒ—š%ýÃø´£r„hv?ú[™,¤'m^4oªêð Ží‚ÐlcÛ·wA=AŽGг`uæ@å¥*nçÊ…ÈÞ'qm‡÷Í‘•ÓŸëÛ#S+Þç„UNÖÜŸ·¯šXf(?Ö$*â£Ä| ?ˆ'8ÉW “i¬×dC8Ä%©TŠÁ8]†-Pµ2’lÊ ˆ#©ýÁE룳ñ¦/C²2Ç ÂH–¥KÌreFr&²Fwe¥û¯i…Wо¦B €,ì‘Eˆ5Y5"‹eÈâB,yW³:c©Ú &‚+ný¢=ä­[è±íÖqì@%,÷s ;èDöîò:¿b?9» dG”ƒœ…¹7m›¼uãv§M'¾‡áWѹp™kÓ^¨È”g¶Ì·Ø™C !¡†À!Ô:!|A I‰Ñãp†lªVekPÑÅ$Ò÷Ô>àÛh=ä'eF§(³|ÒÂ'ãDÙ(Tœ˜MÞ˜üæZ’•1„Õéc­ÎöBVøYJ”>^Ȉ.5%÷T'û×'+„lr@/d©#úBVxÌ”SK²D<‘a§ å?>b°ª¾ƒ\®ß"Å͇5KÏÚÑ«• OÕÁm¡¡ Üë·7lÌß Ìô…[–øï,¯,,.ÏN¬Ùª•WÔͪæèÙíänôõ‡êå>sv®†UÌxxùÚ¡}‡‹8vžKr…Óá¾%s¿ã™Ç¥¬vÔüÛ69×;ÝtMO%)w¼ðüZ‚ ¬í!4ÙçŽDßÈÐb47=ýäñ/´6&:@íþħ­…ô>Mj0ÄAdll|¾†OÈÐÍÿËRœO#u@KpIj\F4ÄØøl'nÁ›®m³ÚmÀ“Y0Ád•Ík­Y5ŸC–Ì®²‡]pîƒæÊvïÝ{´¬ÜTטwXËe'ùhÀÖ颵dÙlÿ’¤ôèÈ>dáщʳd³~ˆŒaª äåek6‡ì4¥…-Z7@«9lûKe[l!i˚ͫW%…yR¹Î¤-‡ïÔ2òþ9!ú„œ¼>`¨ª¹øÉgCe銜H‚º¸¸]þ†UͤôРÙdó†U.6¡óäÖDäwÉ}¤#Þíp»wþKf9n‰ˆäÐ ºÍº™©¥õ#]w)/¸iã§`óÆ£i¥à–dë»-ÔÛÕÓÖm¸—Õ»¦‡B9ÓPÚ¬ü†3§ÓËà Ô”¹–;ë×€3qЖ$•aaü„vIFuWùÏÍÆC18Џô~v\›iÚMïÜ︓„¦vÎ}·Ã¬öfoýÑ…JÚ픓¡ð+0ð&«¢¯H;òg>2iòw’î(V“”3kdXŒ ªÌ¤dRyåõPô>:BÊõ@#ZE²ÀU!ký.öN"J+4%§ Ÿ)Ï ‰öÙÖä~ìrãÙ³eZÀÏ.¿|\›/XvÑÑAÈjžÖ›-Þú§b~"ê,ÍŒ5áDeç;fiŒ0ë&îG“ÑÔ/›Nf\Ö¸×ÊÕJˆf Ã*Ë‹ v<»áÜs,¦pÜëÅ0‚Ý>Õ¨K¦PT¦7EÕ¿åU¢Ø/Ä¿ŠÿB×ð,I€&!ûµ^aþlœAM"±Á³ÞZ!5í[ ¶«£uüú 8\!çë´4RþO‡”è‚_›,Ч'g!MKW™¶õ¦äM¡Õë?6·0A½  Bä`ä{‘¾Œï(æ#[²Óq¸S¨fˆé$A&¾KF–™ôrâ!‚÷ˆUŸL¬zêEõ¨q( ®ní§€$H´‰J#ÛƒîK~SÊ3&tš ZK’Ú¢kÖ¬+_öF+ùŸh6ÿ@coڷαÜ^xõÀáXŠÙçÃäÊÁ=ÕFùRTHj¤ØÉ° ›}¶…8ö%à.ÚШ> P¯»Pu°Ä´·æÔBÓ.Ó¶¬dUï´†ý*ùé•ÄR´éOG5î(ð÷+Øâ/oMã×|~\¶FNòýw•$Š5yšRµVáLkÑ¿È{’¨Õ$+ùQ­Ïd1ZM0¹V$çÒpø÷`>%hž¹Ž»Öްx]b\’2>‰ó4ba#¸ì®÷9× ŽAÕƒJ^Ø?#uÇŒDþíóóÒ/t;ˆÄEò%ÈFŠc%©høWÆ=À¼ÊÄ}·ËÛø;¤¼ešQ°‰¯Ä-®è©9⑤_\ŠáÑxv&în ‡¢¥h$šˆ¶qƒr¥¸ÿcêØ‘¸Ï×(e£!ß„Þ[€3„åob I_¥DÈâÚÓGbÔÒÒ]ZïV³îÃ)ëp˜~ßûs|ço:‚ÛHbÂC}äÈ}$äq1ªˆhd‚óÃ*ªòŠË¸·ýÏÞrtÙdUû ê_!»WÖì/-¼Rú|Ø×ø~ýçï_HšE£.ˆúâ¥|Pï-@*s"Çzb•¶õGÍ4l¦ع­9w°4¿AiL©šx›<ì¶5K+ø~˜´ ¦z{˜ƒÒÙ‰c±¢ÆÉIÒwÌÂ…8\¡òè]žàÞ9®¦0Û^ŽàÂ̱uC~:~·6êø†Jn]åjXIHÍ´^É¡&¨&þª´ ¸Á¯Q]Ì7ׯߩ¬,•×í©K)$¼m­H½F¡JT@ ³3'&?³(­”à 0%×®Àø˜`?`&ÁËÒ mužQÎ^Qd§—Vîëû†ËQ‡ÖÎRû‡Yxü䡽õôÜyÉCd“Ûq‚×½ºnl0\2ðUF«3/I“‹¼Œ4X³ E‹W¬4²qšøX §´wòq„-¸'è Ã^£P§“P/4²ÏŸ€µ $mÃRSmjF—7*wì7$”?!›ãòèG)ÌŠÁÌ 9ãul0¼ýsµIrûblq ÐNå þ_<åØ êê7§Ëñ |Mº#ÜKB®?”WURÓpÊà´:Kþv¼fÓÎ0oìø­¿™°MÛHwFƒ~¼™ƒ´‰iÁ¿œ±ýë Ûƒ~‚Ë5¡“t¢ °@ÐZÔâÿµ4²¢—@²·À#"6Aüñ¨o¢ïÉ"®lªY[ô¬ìîE¸Ë|%_á¡þèL³¾=pzƒêTDÓùÄÖîØëÞ°–‚K£+Ãwo<­ÜÝ÷nÁ—•rÂO”. š‡qD=³%P Ù}¦® ŠyŒ,Tx0IŸHz¡­°½›èµÕƒ_f~6" É[¢Jióbš=‹û 9ºš¡$ülx}-Ô&íÑØ°²µüÒŠàrŸa~þ¥»÷W¹¶½!=ë‡&4ÛtÑ„fTŠÎ\ùè Z~EÌ«ÐJ)¼\òåÔbÜË$[‘·ýé²oœºxÍ4àiÛR9­”Yím6ÚjnT4š˜ÎcO•sãBÐâ©L;9﮿l¼„€ëIÌ¢E2.1•¸Æä›2Ó/oÒ•öÙW ~Äõ¯ÐE ö¹H“©€h‹Š!®î&ãƒi¶ö¯ëJ¤GÞÖÕ+úÊé;šì Â&|§*œ3[â*¨ÒTKÜbâ/™·M¦7¿2½íNjÜù­hã—48bæ¨-¸“­áøžÿ¦ãèJãˆÁ䩈~ü ’púbÈ€} ºE×ÀA³VKÛ OÄ$-õHHKÛ´ïŸÂì/c>h‰Ó„¶L!]vËfq‹ïÛ t`‰`kOhJˆ—‹W+“”xYk¨ Ûñ:e®¹Ï®: Fóz!Y3f…˯ ¾ÖíjýU–ž¢ÎÐ¥¤ä¢ þ,·¾¢êc¡ÏϵÿÃù‚™¶œú[ÜéõhnÖ¶w޾øŽþ5þ‡„i!¾@iBùç¦@Sɪð× kvïJs¦|’¼5>@ö–„þ‘¦ØÂA©Ž'™Ñê,ÓøhMrR*éÓwŸƒrs¦ ™ê&\ÎN; %ínøP†å­sñd^¡Ñ¦ÿË‹OÞ†äÄl7´¥µE¦ÓÇæ@.èÒ’sÐt>E†f´¦¶}hÓö)ÃNCvüW…g÷g6^W¶ïcâCÂDèäMácºÔ4”ßLCjdœZ˜¥á ­;,½QÑ$ÁœÌåB…ò7M§OMæ²òëO}'À¸5="ßM·xQ° r Úî°•àdÍÉçvÎ^¯Éê[S`,+ÛiôŒòHØ*gKd“¯@ˆùñ{ĶÏ”y‡á2w«_>Î?+L\¡l€MÂ$ŠTåÃ;ÕÕ H÷Ñ"“b•wƒ¤U(ñÄÎD†ôù—s²ÓRïBK ¶ÀÆã¾žXƒmbaÛ¡Cp0“;NÃiýéôSÉ¥¹\B}ÑY†06+aÌ·t7ŠšŽ•CêcbëûR¨Stm /‰Ì\¶ï“ú£'àótÂÙqCgÌ¡ÛÖ´…ËŠ©4î\í;Ù†1~\ü3²üîþ/ÜÁM®Ù¾ÙÖ÷¸'Ûº[µ ˜‹W›nÞº²~>WÒ*•γ~úäù—¾òà0‡ºÏª ?ì+mÌë¨{úUée#kÙÜ„øß€úÉ=Ä@l¸nà'†YÕ^w¸ŽŠˆÄLã·£Rxnÿ‘kåGˆ‘…g/ÁLpžkž#1gGÀR9{fî[|Êu¦d ±E1£N¥ÑõQM°êû—¨‡[¡ER¼?´d=ݚϞéMº3wŸ8VPûÀQɜŠ¥à ¶¾[}·nŽØN4mGš_²Cd [uó„Á•Yí À€ô†G«3—.2¢—У5{âdË’_iV\†"61!AÉm\´Ø|+ŒkO„„æy3{ÁTÜwýdÆí[g›‘E.=!¿êv,±>ƒã¦Ôd­FÖjÿ?ã㈉$‚­ÈŒËÌÔ%g¥s¼¾E™š¡ÓCªÍýV‚zÕ£x×êAZHL­Ÿ¿>lIšf^Í)9y|î@Ž·múÎaØß¾lÛS~’°§Ký÷%0÷Ù‡‰>i㺵¼´|g…{XT¬RÉi’’4Â’r“«Ó>¹|Iž-¬žIKLNTL›;Ù–mÛ_[XQ.pÝs[ÛaŽýuW˜èÅ91ú 'H‰µÔí,À=‘•Z h4 y{Ñ<ÔõÌiŽJ¯Œ¿³«¸ ¸C ï2+ w=-/àî—f“š¬O“ÿîé(’<¾ é¥pWº®E–¶¨û䫱À(U*¥’Š"äχÅG0Û´Ó=°Ut[”ɪÔÌÇ#öˆþN°Z®Ï¾xæGê`ñœßŸý4ÌùW‡?(áô§ú›ãÖRGó­Ò²ÐRïˆÀÀ’à S¡±”C {ÿé³wÏè;«ê;ÉdMóͧ¡'ÿ_#Pïœ#Ì™óǃ„ÅNØÎÔ^ôòÛ“Alsp_â½O›g…mÞ[Lc«¸H9›$MD SBd)a[_<Üwiw]lp1眤ôƒHƳ<º¨´4÷ùµMsÇàΰˆÃ’ߨÄz$þͲÞAèCiÑÎr\ú;Gÿ©ŠÐR7Zé• F—7õ——›š™ÅéÞ÷[é°E©Ôh@e.ºìÏ?GôïÂR™BÌa¹“ ž½Ô?iw¥ 4Z•ÎÆ+×™ôuÌ@,²{Oþï–ëþ»ï,=ù9Rì)$£Ç7Ÿú”c·g@TÆÅ©"c!"Òw(…qï { Ùže¡B1ªB¶Òs¸p5Mp„Ò "àUBgž.5´ªBè7BÔ&$'ÿ¬#¿ŸjÞE«Â¬Ì£MköÉÿŸá&+Sóc¤……» ¥ŠÃ]ðè‚4 uËHKÏ‚lA×ÛIà o-æmÛ)?J«æð·ÿœ— ‰wgÄeå&gfê9ôí¯óRr ÌÖ>ÄÐ"3ˆî£ôûbÞݒ½Ä{Ÿný~z¾ØÂ¼ç1^ gÁL˜“<¾qöþ·Â1ÿ¬äÀwÕ×SîÂçÌ´l)é8)–íµÆgl‡Uƈïˆ%=WàZú©"Ôùv†jàZDѰL;˜ ËsSÁ×›®òòÿTÌOímò¢Ç«³êåü9º tÁÜŠeÁK8b*&Ï9Qδ摖&f<ç% >¡ÜÌG½äIwžÝA þÁduìçç?ÃköWÒ6Ì“J}bw%Ä/! >ƒK^¿Bãwá¼´A’ñ÷p7l9wì»c /¨Ín,(÷ˆOš+½zªþ0OöϘ.g¯ÂÌï¯]A4ÛS¦fþA OK̆ê&bРRÔé‡KFó”ÄüT0x³¥ðåò»ï•|YqîÉЗÏŒ2Ûv¶§!¼ÊTl¨:¶vq¦£×rê€i<2>&iu€ƒÜgóu &^””ñš Ä2Š4(àH¾¬_4÷[èëà8§à¼‡¼6Ñd€½L±oW”øo– êöäÉBõ-jïQŠA„ô„Pàš¸…ié.­óØc·ÊÁU•ÈùÖÛ¥ø3 3ë1õo«ÎíßL¸ia$†n>røà_O¸qL•4R&LP”ÚÀŠ8u4ÄA ƒi¼YÒϾlºz´2¸wúzÄ>­1ˆÌÌAþÄ-ßáÃíêñmLhcf¿åÁ‰k\vEpÁµNÅ;Rü?d™ÿ€0ñÁ–¾ÒíIqA!Ù‘…‰ î-ðýòQÃù²ÚD¿ ®[ˆŸ_€|³R S§ë¹Nkýºt4hu‚IÓéô»t¡¨ÿ ¢þïendstream endobj 243 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3100 >> stream xœmVyTgö­º«@D hÙ´ Œ‚kÄh4&1 u nˆˆÚ (È"»,²ØØðšUVYl6EPZd)ÜÀ%Ñ8NˆL¢“d<¸Ì$îÉŒyå|œãTÍüæÌ¯ê¿úê|ï½{ï»ïÉ(Ó1”L&ï³Ê7jwpä\÷Ù^QŸ…?9ÙúâÉ‹Õr°0 Ó“Ç´ÁÉÖwÆ_²¢ŒÓ’Ȩè=±qñÁÛw„ì õ Ÿÿî‚…ï-zß}î;ó(j2µ†ZK­£ÖS~ÔÊŸò¢>¦–RÞÔ2j5ZI)© ”eO9PŽ”eMÙP,eKM”’¡L©8ê†l¦l`Œó˜K&¶&»L~5Ýc:"WÉo(Îлh1gŽ™}dvÒ|y·ù/cÆê,x‹+xÜò¥ÉÎh tÄm‰²š Ì Ié yFó>Ø Qp {2ÑŽ>±W§j²=€IP)ЬÀà¤ÆA á¨ä +Îà89êŸWù,•¢£àtC'Ü…v Cnâ~%IR [å–/Ǥß5Æ{&¨mÐø1vl‹H&˰‚þçƒÛL߀)š½I<³å*úJ „ðäÊ26h£‘K¿î¤Q6rúê ]‚G~;’[Š7Ô"«—µ¡-– ­‰hÀH%:ÎyF’÷ܧbu× ?Àï<Ãñ±-WÎB–°€Ô^8[s‚«;yJwNÁ©”ú0]8øÁæ·´‰¿€.zR…ˆN›ç¨´%r©„ñhkÇ2”øc•èàþ™âéÿYrwšfK)âýº„ü¨ö¿JXM³^aÝ=™]N8ãçûÈóÄvqñÞ¸2MÛ¸ŒJÐBƒa4ë’uZmUUg×¹âz`®_XMlxË—²[5¿ƒù)@Ë´´c§‰«ESåù -½wlò‰ãPN³Ãäýÿ²¾½Äâ|ü˜jB˧´7r{[bKK›®““®¿TM©Û"ô¢S›MÇ׸ïk;6Iœ‡ÎJèNl;ÒQ¼¸òÓ’•å 0W~„ºo:"ýŠ8mª6GL#5ðßÑuPš| ’B¸˜Ê°âÀì&o±Ûq8úð^¾3¬C}3M¯þ&Ö2žs Þ%f¸{—S•iÀÄ‚:Ž'2: ²jKòáŽc5Í5}çà08´âÛ€®F νG©;ñ¥€ëm~A…J@sÁŽ}$Ú •ò¼*€^µ¾là°E’9qÅõ*:Ïmó´i&TÂårDá|'þëo{/s¿­>ÏeoÔibÔ&½j?x‘¢É'ÿq=½(Àßë#MÓ‡?ý×Iíü}ü“æp«[L[ŠÔúÝ®9†³õ6GÐ CŒ¢W‰g• éέÖB%40Aß[zL÷%–æ¶'imÓ:–T£É玷i+€ù¦=؃§—jHI© ›1­’¿úNè:UϱžŸÁÖpýŠÃÐÈ“­H+Ùã3ç¤ï ØÑÞƒ¾Su¦àM…zÑVë_«­Œ Ž~-àÙ?‘©^›"c9죗o?úH «ëjj«ëöZöÁÓî9áô_^ëTà¹}kFxCÈ@æ! é#íý-ƒÀ %qÞF²^N”ÈÇwÚt - uZÏEk;öGqš)«Ò 39/7=‡‹ñÙ’ áÝú.N@e{FSɳ~É)¹ YŽoÐ!Lñ:ŽÕ‘åKMâðÓ,|C¦„SênA4‘Š56‰‹ŒØ¯ÿNê?i¶ûÿ”I6Ò› ‹wIá]'Ï#.Äþï³pÚýM­üfšõD™){$9}»Ÿ‡±7Ô;å”PÖ ¡3¢>Òhã•FYúÇ÷_ÙQã´x`"fIeÖ&AÎÞÜœ5—°Å7b¥Ç%Îò8¨¨/ƒ#­êáMgøOõþµË¤£ùó§kâøt¾‹ït?¯ág¡£’d+ò ÚSºãÍ-€fOì´aŒäd«g=\ú0öaŒM> Õ‡vÙàÁ»€&p׎¥ž‰ƒ¢‹²aoûÖT•&,c›£+’ƒuKœÈ¿ÅÞÛoo‹ã£ÂÔ» R 7wF¤k¼À‡ ôDzߺO7cRe â´n“8Ø€Ö&âà {% RÄq+J+L(Ì+Í-cTŠ0R"eßVVæ—5R„ÅŠäø¤„äø™Äôc"mÓï P\-ý‘룡¿ ¿D(½®»ÜÞ…sp…}Y9äC;ó s ¢£AÖ?rm猘Hõ¯QJ«ËBaóÑ!}k\b~vï% Â{83°ÖçV ·ðÓ@_XÂqH çÇpÎ8¬„Í1á‘dÆmû”Ò¨8Á Ý/é¼}fûrN7:V¹pvŠïtß³·nïn?Ìá$ž='`‹Ã«,th}ZÏ ²›hkp’1”×+H&™<í}âH¸'ž8¾](êàâiðÊZ›¾7$hÛ2H†Ðü݇+ NVA/s"îhHHlÌÎåg}ÑDrù¹·±”#“ž(}b¦.œß<} ßýz¹Á?³«Øë œyÝKèŽöè.ûÝM0Só¿=BºLÿ¿¾ÉЋÙú«zY¯4’Œ b3ÞP>ÊÃl¢&ê<’5}š–¤ ÷çãÞ§Ò‚X¡”4å¾cÚÛ>i»!Ö×§gƒÀ Ü€kÏUÜ*k„“ЕTXó)¸À"æUwŠjáKIûp¬äùâ,ÓõP“‘ û³¸|§HöÊ$ª+ªaP{¹Ž­"¼Šî)x§¥÷9ôh^Ý#Á{]:©#¹bä pŠ3rvlÔ”{”*…&1ë“´ýjOH‘F…›B0œëî=ΰÿBÅí/…ŽH¿õgi€›½jîÚþÔÆ¶Îú3ç‚«S ¹–ÆŽr=0#}Ë=—í\î½TÚHpú>È…D‡dšÝ/.Q¼"º g{p†áNê0Ø|‡üläqà$;–ó”X_¡„ÁÈ2µõ+ÝðEanz\‘Ž]üÉA­Ñ½Mm'/m(? åÚöl毟ìJÏ#vo©ùí¹¹y9y™y¹™Æ`•‘\µÛAõ(PÓT0õ­˜…ǶðÇK›š ‹a¨ÞˆÖÀà°è€¹Ö ’c)\>üôo¼eF¹¸¶·éÊÊ‚9*Æræ¦~QfÇ ´ÚüBmIɉÏ-,(êßGG§†endstream endobj 244 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5464 >> stream xœ­Yw|Tu¶¿ÃáR Žd€wïRDPAQQÄ¥ˆt醒ޘtR&3™–)™™3½§L’IϤRh1@ ®ìe×çS×ýÍìÍ[ßo’°¢ÝÇî{É'ÿ$¹¹¿ß9ßvNXÄÄ ‹ÅºkÛöÝé©ÑiË^º9;:%96øÍ¹YLôß$¨˜Æ†iÛæÎ}/¼ 3†î$‚Kצ­K_Ÿqà™¬£Ù9›s·äEoÙ–»]Ÿ°31iwòž½ü”Ô'Í}pé²åsb>±ƒX@ì$»ˆUĽÄb/±xž¸Ÿ' ö눉õÄRâñ ±Œ8Hl ž%6ˉMÄfâQb ññ{b±xŽ˜CL"R‰;ˆéÄ "”5…X†oAL$jX/°~œ>á-¶k"=Ñ2/ÄÙ͹4iý¤“äªÉœÉeSLSçMõM‹˜vâçô}3îš!½sÎ]wmúÕLáÝÛ¸÷p¿¹'qVô¬š°jž”w†÷÷Ùóf—Ï9†š§ÿ8áó}øÐŸÿPë|àv`“‡ëV€(\c«ÕRQŽÎ«3Š€'‚"¥JÆÜy?,êQEIZ™N—@jô…Κ#ÔR>hÒ4ivC¹S =­Ò'Àv³Ë^ö: CŽ“y2$ï¨4J&ÔÆö.#tP­Ð¦iÒâÍ<ƒÔ\&žƒžC×BðùYIȼþ¥^–æ9ÏÛÿZÀu(@)mA¥ÈÈX² È\]Iq£ÖVMWœéFa|¯÷Àw$”òdrc$B^¶(U+yŸYî³[¯÷š)Ïkå'}@ÖBšL¤‰è5Ì­J§ Of+¨p•YË­TzÌìµTš½<÷iЗ5W÷½uÈ^ÃáÜí‘ÌTq,-IÖB.YŸxâ‹´ÄLáƒ|,ì+^ÔécfÌ<Ò¹ðÁ¦þõv4½îÍámòõ—Å\æˆd¸6(÷ÕPÚ"1ÍÌéR$«qåƒ?´C)>à ùhšô=‚>â®xú^†C1aœ‹Èho³B3ðÐÎuÇÆzó&÷þU ˜ s''ŒV‹Ñ¡·Ð¯¡–´†ó…å÷™ôôY?Î/-šðr½Æö[ûÕÎ+1w2\f>³há¥í ;¿õ>jC'¢ròw¤íÝøq ¾×OÕ"vÓYº}èDc''ë#wâ¿;ᲑÈñ–úXèþØÓÕ\½Io :‡” +¤¶­º²«4xL Ãgr)³ò¯ … 9K­R‚BCïgV3wm] äãžCó/Ö å×ÐzøóÏûßò‡¶ËTóACê4êËLÔØµ˜ç}èÁ1Ôìx•í·¢Nî_wœÜq *19’veÝ T R¦Ó gä°"E¡‰Óñ 1h•fµµýžn‚ þM †»Kâý`qX¬µ¦Rº -² kbp;Xh*ZŒ–ÐÌ fWšµa?»ä7lF½Ñ`££]¶–‹ï¾¼>Çn~t35mk°~ñ˜’-þ¿ûX×Ùþo‘‹_ Â|;ª ˜Iɢu@2÷qü.ÿßœn½ Ì<» „ÔÈ,Nèt*Á>fs˜N«•á›É0É\zS±™jø¬ëzHô;ÎHñÈßÕ*\a)¯Ð ¥”!Ç z°x†Qf˜Þ`*ÆN/ÀÂØÝô;PêßÂE žü–áRÌË· × ´ íAÉ(‡^ÙÁ…iÌŽ÷ØýLô* ÞKDùOÙ[­z à?sÞ{÷03+ˆÎZáÈEŸ¾[‚›¸ä:Û/öÏàlqy61"GDÉÎÄ•ù7YÝhm°¨—Q‰Þ؇¸Ï õP!N’iø &%vA­ÇWÜ„’ûcÌ—®¡eç0K–C¡/±ýÿ–sá£Õž{º%Ñ=duåðµºvyœ“â)2@NÊ,Âê²ZWOLçffrÌáO¿,®WQ½ò>9ì#ù«æì2ŸQ§ÍЋ^.qçf§ ?7˜øGtšÞ|÷¶QáãùPx†Ñ6ò+Ÿtù *ÿ`ìšÝ@f@M)n¡µž~ ¹Á)sb8‚ˆ^ÅiG‹q' •B³Ö—ß±rí*£âH¢’©ÃpȈËT«Ñ&»8eàÖ«±é Š‚„eÈ‘„0ÁšÝöB $Õ(º :Xìð¶ÔÔæ¹s5;áégc/ùù[Ÿyi4ÙŸb­·Úú€Wâ ÞûÇ îÌ›Y>ä>wc­ÿ„Øþ—‡Xþ|aLN8?æ #DÝÇìújg/} =eñ:ºÀ4Šš4eFÍnF L×åb<ÊRV>¿ÞtŸ­}Ó÷>e-7ßn¹"˜¹ lK®=Ú”Þ§)ƒ&hu7ž.IèÊ8àXwã‡;Ñ28CÞjƒ_³ýÞôaTs §øÊdµŽôðKùXÙÌæAfÑŠþ oµõVžì¢Ús[Uf£€«àor/‡çOùÐdÏ1ºf¨ÿT75áÑ SjU¸ÀlâÃqD_ t°Ñ…PH%ê¥V©™…¾ CÛÐÒªòá—^±ðlz‡ÊHk‘Y™›¥l* âøÜ* dv™.Ö¹Ô †|aHÂü…é{½nk²Ù.a>ØÁãT”ñ1ˆ£c!Æ7öà?x';ºÐIwA·{¿g7·òvÍn±5™=t+ZˆhœU˜&Kh±ôòãu’ Ñ‚\jë4B;Õˆcv›©ä\B ÇXhÒK(ûvä¸oÇ'çò“©×P3¶M/ˆu\§ÓP‹RLžÌÅ' J¹F#jñ­ÓÈc ž÷ø±o ‰h2º'˜[]8ëHå[½öÖÄ¡­Õ`(©hèêhéòçN|ôñ›MðŸg&"×%T§()þ#Q É< ä“·ZÙ\·½ÕâxxŽ1-–AÑáCxKM´1övJä¬MБõ–²«ˆ†1ú©‘`¢½hM°B¡ÿy°(Ïšùgÿ£î×~Jo1üRz+ÓbwìÞÿUsû}Õn7Ï<±62ȃâ3è V=í3»ê ”¬9ó©™fiœjOxwò‹ßöÝÖŒuu¼Û7,£o°ýIßsÍ §¢H§“+¨µK)¹/«oðLÝ_jOÐm/ŸjíÃÕ§-‰‰PAæ‰È)ªª«övœŒjßz3.>¿ùct÷ß”`ƒbË|ãyåoO±×ðÌ2>Û˜àwÜp<Ðiæn4 Ëg¾¹¶Ç?¨õjá(Ž ¼_ 4w¸Ä{⥇µ<…L—_hÑX[Œàñ¯u4öa¼»”z)½Û ­…0‚ÅTŠxþú0=ghä;ƒ”%ÀsƒÙjqú'XøÛ̼‘K¿ P;¦AÝ)Ô>F!z ydŽG^ZSSÑ €u£kŽZt O÷àé5Í߼¾qt^=sÀ?óàƒBúô…¢9ߢÉô£u\È+X™!Ø›ÊFuãs퇜×Ngn *KP·zýóƒÚ‚±5e±ü[L%Ø“M£ž,ÍV¤Q↌ú(üG&2“˜Å̼Ç7¾uº§Ûå¢s—F¨rÓ“y±‡bq’@ d8+l®JìŸîÂòÌüq\l{þõ¿\}åj9%BáØ®Ÿ[´O{Õy¢M®4ûX¥Ð!Êͦ \2¯ŽJzìÙȃ©R7EÃ|ºŒÖ†òªê*¡­ W(ÎWR3Îhl`±Í†ÁöªÏ_:¶Ï Ñä*<‡3%OÝÛŠî8WÿIU7eÔøÒŽ9ÐÛ×ß‘áMLM’æ¡ßG+¿€FèÍׯ#wâü”qÈ3”pöÙßÍcf3¡xܱ§Ó5A£ [¿:÷!H |¶=|o"ñ7óÑWÜÄŒø„Ô¼Š:9åpwï²´L‘E åhFzct¶àZÃhJúâÂÀŸþð³úUôžŒ¬¿N%)FÁñ|Qñ'÷%4xõp\S“Y±AöSó-f d1äÚ8f^•¿4dËO‹²‹œg™Àæ>e¦äùDàd‚Äó‹Äu¨WÐúi/Z„î­§. WCС[¶kA^´WÖøJ¨Ÿ–VÁü·&íû…áÁf£ìãÜfq-?6+)_%¯¬(ušÌTÁÓ[ÅJñ¡ˆÔ•Všî@SƒðŠ¿@ çX" »ÙA®Ábñ‚‰U[&«­Š$Z•Z\kÚÀC¡½œr,ÈFyœÁW³Ø¿ ʱ\ƒ§¬y,ÿï˃Kh¥àH@¨—èsŒ*=X‹Á®7•⦆ÙT&•J§+RO/Ü LÓ¨ƒr!$±b›JNZZSÌ”‘4_!_ <ÅX}`êé3BÝ ýšÞ›«µÑ5øOñømïh㸎]gtÁYš  rc”‰8-“Œ˜ÓŒž±—ÚJ­ÅM§ðÓ )/iÒ e4ßÖUy›Ž‡Wìaæò—¬Sy q´ÊÿÑåu#S$›$áEbžê¨8< ~³Ñ7úÑ,ôP#5„^AbÎFæ;ñZáVÙQžZžøÜ~<å™ Š«ÌååP3ú\Fvÿ ¨ãÊàùn/Us¢äŒãÌô}Ø{c[\ZúiNÙuµÌsÝÑë<Ý…­«Jó³Õdž¼º¶¼šžãõ¯w¢£†R/Ç;åÜTjÊĽéÓ&{8àÏÎ2“eÚ4‚øüufØendstream endobj 245 0 obj << /Filter /FlateDecode /Length 5719 >> stream xœÕ\Ks9rö™'íA§±í[µ—]*¼9&b%ÅÎh´£‰Y‰ö†-ùÐ")±¤&[ÓÝzp¹ÎLU@=ú!R{æ f @%òñ}‰Dý6©J6©ðÿðïéåQ5ysôÛ£«“ðÏéåäáÉѽgÌÁ•ÒUŽMN^ùGØÄˆÒTŒOŒeåÔääò¨`rzòžPUú„a¥vÒÁS'gG/Š_§UY)i¹sÅê|:ÿ,³ÚgtGV¹¢>MïlêåUrs= Ã2S¼N./Wþ:tü>¹<_Í/Ã8ÊI ½­°wêAó´ã3¼ÌK§,ô0ã¦tšÙÓÖóE½î¼€\šârÊ5L„’›z¶ÞÌ7çat˧óÕ»)ä¸(–ôËW|ÄÞ°¸\ú‰X!3e/ÖÓÿ>yÒ[«YýL¨Òjiý üŸ5R x#náÅfn87‹KÍLawJϨc²xt W+3ÅÏsº ßò‡×k|–Á=Y<ùáØwTUðH U•·Ø³ú´¾:4CÉKmlp€Å±÷‘œ§Mt©µ®xh„oÓñ¼FÖ,Îöea_NƒÇ±¢°•ºk9Õ—RЕŸž'¢ó¿½ü%<«ZqcfÚ0Uú÷4¼´“t#9̘úi~šú‹å+o ’™¶-5 ]I²€täc¼Œ3ß1_­7ÙS©Â¯;wücR}ÇøN/ ^1A®ºzÓ·ðÔù£EФ´ƒ(rÿ’¤†¸tà«OIaÝ™/2Û@E¨(‚DEðó ;ú ©Ç¼»Cíë9PMŒ"ÆôÔU¥ÒnPOÁi¥:ªuÇÇ|%|/U«£NJ0uW  j)Å·}”n™YÅ•õJúç“£¿D‰¬¶¥‡‹ÀY 3Ñàט’„\Ζõ}hÊÀŸÝ[×—¥rFã ú¡GàÑËÊòlˆûƒ@,JaYÇÄž€‰‘MYS¼[ƒ·œ ‰0„ûßèI÷5é¾ÄèfUqçŸûÉÌçóúC"ÌÕÇûðÌQéâAìR ÊŽ4¼XÌ7¹;¾ÄfŒâOÏOKß ³p$#Šuj*«õÇ©RÞüæ‹Ð!Ä’Æ`”Þb0Y8|§©ÈFIp`ÞϼïwV•+¢®>Y~X]ÑT4ÌK˜bù:X•5¥q²cV N‚æük(\DU<_¾Þ|š¯è«l1ltîr±ÓælhaªQ“kѵwÿ;¬ }4+@1íÌ€MߊUq« @N°;ΙQY-̽·ëuù±µ­+{#Ë‚5e,'Z–*y×°R²ñ![›M†Q¥Áû?>¦)‚ýP£*p›A®á¤==¿Aå~ÌÃÈ»üCñÃÏÆGYwe¼uwyçdj¹¦iËjÒ6œjMÔ hÞ«--×–¦³AW ¹”ìbI²>¥Unq›žÅv³ª×ïÖíLzdŠ{{zêÌ>8ŽØ*%‹Á[·žAª}B)±z ­#)! ½$ÿÖO±-x2hÍœÝfȦš™<¹ÞÃ’Ë0<Y[^paÝ].ØëLA`ÍÜnç 9ÔËÄ»¡K˜¤æŠ^º=½-j[Ât3ŸY`\å†ñX?ƒ—ãžh`–DÕZ¿Ò¥á¦cý-i½ö<•Ëáöë^™ÌWa¤‡:C«eˆ£ÒÀk ÕÔÕö“Ñ£lù¦žb˜ÖG.ƒmÕó4À¹ÕÞ"÷£š=èìßQ#Úmš†dO Ûµ™yéÒùêº×5—ÔuöÈwÙ|2(µ!:›°mîH‡È sÀŽ9#È OôSSÔ H-Ö|±“³8@±ŒcäÒõYÍ·å ÃØ4Û6W¼\\§–—µo‡z¦ùù.g›A/‡—ÝÌÙNÿýâÏG'ÿú¢qž£0%ü¤QÃaª‘ð¤ÝÃMAo]Ÿ^œ‡«`³ÿu^oàʪ~½Bœ9@W;€±Ü† A!Ý~Yò¶‚©Tâ® áÐb¼2CžÖËïLâI‚ÙÖÂ!s;´r¢R0™å¼#¼nÍÛŽ QÑ«úòm ŽF3˜ÏM8s‚P‚×eN|0ƒha1}Ü?B;Bè)øù˱¿1nnß™"#2Uñäix°â>O‰ºaM¼ÆT\âŸ=Ìvèâ<¡†U{CyiÏSžÏ/ß/r¯†I1„HOÏ7K¯á’gëö!âEô[%HØâ^wø±¼ ¨;[ü„£€ U\mV4/ôS… äNÉ*Ãvb*ŒU4°Ko0ÍEh AéÁ­·2ªxŸ½L`A3îÄVÝÞi#rÃ;=` Ì4â I€GJK÷ hk‡¶ÊTCÚüdìñ|±ƒ4#ŽÂäŒU`k|VIÎÙ,¦’1¿f’ã“z¯(ËòÀ£K´ÂEç<êež ËŠØÜò½Ïu7 bR<‹Ö™÷¼Èó2h°†IK;ã—]êŽÃTq㙬LgãŽËJºìïez ϲl£]„Ž@ñ—©lBØ ð|•Áùöé3ÿ4fõ;Ñ4pÿÃAsÐ8xt3rE¸"5ÏÁºGë!§/ˆ}ïÎ@Çè¢ÍhèP¢:"P7¶ºk¬9¨3%êöm%Ê,„1Aà¯qØ T‡ÿî½-i@˜#&HÒÐ`h Òçd‡xLIú$Çà!ÑPuÀŸ¦®<§ð}5¯;š¨ Ÿ~Xyüõ8ß!ÊÑã*´‹{Êá™'€¡ü_˜qsážpiú›±Š¶ùïüšBÃ/.& œOýÐÀ tÚaÆë ·4¬Îº^ÏFm{Žû¢~özO|’Ö0舱1šù¬jÁÞ*]rg{ˆÃá>…Þ„»x©Èm„×ç.DU’!ÀÅ$·‘mG¢xæc#Àˆsp1MŒjã÷éÅp¶ ‚`Û Ý•@bj¾àÃŒ¼›-ó”\iÌùƒÍJÅï2Ü&mAµêúŒÊ4P¯_ð¥Ið1³ óã·™)“nË唜³%SVÿã¶âLH HDÞ+OçRO”2Æ[s‡Ì¤@'µ" „``º€ä02ó€R !ÌjŸˆk!æüê¬þŒ¨^…f vZ÷ñ²¤ôð  ‰š!£ÕHIÛ¥ 8s}õ&6UÅùwé­óSdƒtOFÖÌ`õ¤Œxy±l:(N?\N}øSÅŸ·Â¹‚ÁXÐu1ÿû|u»õ)<þ;;‡8ÜŒ1¨µ “¨µ3ŽåN¸š(|:.„kåQ%Y:æaâBù”:aKü ts‘CwB…÷ÆßL纓ÒÜgçj/¥Gýh;”Ò‹~ Sz~J²Xg¾”²©¾ A°!úœ8EÞÙ°Ë}äª}“,‡2à̽Çí8óP_sï¬S 'ú‡èeþêÒ2/ƒ`Û4TôeáÛäÝH0Ýü[è'óÉ(-pÚÐæsèÆL@Ħ ¤—e-cr‰±AÃzhN´9ÌÕ$mør:äÿ€{R‹àÿÞ„EÅÌr§`-,]/ý0$6%Èe…××#'!;&+ejH„)òÒJ2ƒ÷ø8…)áJiåIõHpr!c%´Ø.d‡Û©CBî@Mreu*ä¡DÑ·8Ü,Õ|ÈÊ•ÚÓÊ0…®l»•5÷†Ö†¢ÖQ_ƒ¿¦Ö‰¡NùÝ©Ý"Ö?Ååv*—•¨º¾ÉÛ!ýÇ”kUíÐÿÑ¥éëgiFôß”ÖX×$‰r¯tP¯Ò:θ ¹w÷;ëŽ)¡ú*€Â›>wâaûµ¸Oq=è–f–ÑFblë1oi%?5¶’®Ò»V½ÏvOæ(Eñ+ù—Vƒ*ò¾¿xî¯>§«/;èÜP5û­_Ý·ƾ¢n{íôUb|8„î~?´ŽyV4ŽŽ«‡¯]ô–C³Xhî~#ÿp€V¡¸÷’ahøQ«šíÄ-Ze÷f‡J¤Ñª~)µ‚Qà‰Š|Oñ§†Zc“7k\P;ùLãÇ#!+$S "ˆî'—€ª€v Õ\Y=å#¡ã6¥=Ç>Ç}öãOÈÛú}˜'iÌ“8;¾¦VáÔ·Y4¹k¾ƒHJ`ÕºÂl=Ð04iÒæOÒ§Õ.ôl¦åÄãfßÀÆýDömÌþëÀ‚º9*bG¡ÝnHæ‰YCäµ#|f(gãxÉ\Ç) Ť ‘*K‰Jš£Å„ëtÆÂFp€ÌClTW`<¢©GèUq%/´ ÜË“§7Qg|õ‡s™Yo‘y¬†B昊3ª ÿÄ®ufäFhkT:U2ŒœOaU#ëý'3XY‰“qLæ“©“³G›¾„,ûÕv$–6Æ|ªÕÀÒì°W¦27}ßîè D´é:æ³–¥Ñ ƆÞ^)Ö0‰ ,'œcõ„ÀΝæÊáú„¡O†yPC‰®ÿ_í(ã¸DshK© ùUˆ–!†40HtŠÂ÷A¼”Û…A–"À¢î¾Žc_ñ Âç¸&ÿ0ˆ’|éË7@\ܦ~41ºs”ƒ /(0—‰{ Æçd^aÖ ·ðš†/@ü3Î9Ô?FýIƒ:ÇŠ;Efü&R‚2!æÚØ Ç‚ %VtËöÊVËOj%„q‹]"ͯD‰ x a:Dªéh¢pˆ]šG˜6º’l+-@jÄnLÕôòmìœÁžæÐ°É/´‡}qøè'R»è%RGí¡'€$A ×¥ÒI’’‰’©ýBР"j&Šª Œ¯ŒN4_+`>pÓâ±kÐ{# Æ¿¿`0˜$vðΘÒçkà@|ÈùQé±}û‚²ÝÉ[vñ:Ìi§‡‹ ‡ý›PXÒË'\•Oø`ËBx 7æœKÖ-É“!Ïdà6þ«]È6üö|°V©I(FÊ\}Õy…gˆcÕy¤r`O‡Î¡»°Éå//‹PR"dñ©·Säϸg)éùº“D÷ýVglCÙN½Òü•yQÓŠNšsõ~t³}35Q¾Z¾³”l`|_³s¿‰ºÂ:wèz}ß—9@˸¢‚JËUÈŸ>òG˜±_xšõ-+Þ&ÏOaãe}uvþÞohW77ϯ6mñÑùwí9ܘÜ äÐÖ4”ìþt¦¹¯í­_÷Ø@0…¯v{rq¸utÞCÃHFA@åà88ž2W핃]dzvØ¥óäâ€ÉÍž³Mü‰›qÿ²“³X6ÀY~טù•D0îbs¼ða“|!8úÒëj¸­l*°°n™žKšÐ!ΩøìÏI›ßÒµàa$mê7ä%TEà·LÔÖ‘à ¶t(œÇ¦ß0ùÒâ*íJ«YÚ¡OOÓë9=¾M»m,O+øã¨`µÖš¼`„œäЊb¶Y!2èàäôsgR|2t+دDžnHb††Y2G¢ð»웼êË€i9Æ;‰.ÙfD|õ°ðÇÕNòï`ùK‹NÒ/ˆà`e±TyŒ_.0ªWh¾1Ç=ì |›¾P§ÓŸu~ždÕé«ý}š¦ç’ÎêfÀD„mÔ`õJsØ-ŠDî¬^*EŒ…߀u,ë¶Y®PâŒÜ…—>³ñtÌ`F4·ïþaÞþ'7Fö Ps„~ÜÊÄCBôè`…B¥K©bL,ÉÒfA×°à±ø÷|¯==ϘV,®=þtÈK`å^¥úK‡3V2TJ¡íà¡Å qb3á‚3 O¥‚ÛC6ºù±¹ ém¬ÊýÆTOoCg¤·8C5öòÝï$t×kæ‚z78L•Ãé-ÐÖäK™…×þëÜH:!¨€(_Ž&­®¨p ›`uíf5¯ß\xB"`ü˜ë§i¬¯O(ƒÆm&0í„|(ä**®?P…Î`þËWë´èŸ3IÔ]CòŸVB;âžOä_³Ç:p*ŒÁJ=tTµž­ø|í`@÷8 ÔÛí¡-rÕž*ôçq•ŠÐ˜ Êq*²·S:úÀAY‹î !j®Y^„“H½©ú䙲è|w`Ì,†¶~p7Õ0¹=z¶›ê1…0²Ź1Y®áà}¨jÔîHâ£?˺“Y5«;Rù›û¸CúpHBÃ`<9Áöb¼’5|?Ž6ïaæÏK툘¢aúÀ@Á%.¬qœŠ\ú܉§gÖK•Ûæ?澕VÝb‘ùe÷RíÍcü*ˆßîfVüL”Ÿ§Ÿ;*_ýæV+_9“%;+_¿ÚΗïðw _;…=ƒ€ƒ¦Ð5ÜÒð¨t©Å©’1¹7xîˆý7 »o–)2¾“ó\úÃï$BÚå꼈d†àâM^$_ËŒ¢.e—~ݰ†ϲ0×[ì|6±±Ž¡SÜÁ§Û×ð¾»Æ¯ätk—Im’òËžÖn­i lÆÄ§!œ5%à½sœ•¡?»ªï+ÿ-¢ƒ@_859æƒঘUaL¡}!‘Uá¶Zñæuøc)„ΗóÒ/#gœ>è´,„ÅésN¤]"ZšÝG3°™l‰Kåc6džKk¾Ûq=~7JwóuÛßõ´ÖðÍö=ãMìËü¥Ø.iÜÔ5ÜŠ0¬Tâvw¤Qb>ÌãTV4¾’§K…ß5Ì> stream xœ­[ÉrÇvÝcE/¸zVŽlºX9giGR#Eðé‘xrØ¢EJìFSUMB|_êðgxá;dVgVWƒÉÀ5å|ï¹çýûq]ÉãÿâÿóõQ}|uôû‘¤§ÇñßùúøÉÙÑ£—ŸTMÝÈã³_¸‰ÐÓ a"0Äø¸‡e.qû@tÊ©^`ªjl#ÞÐ)éÄGZù7gG;b°ÇýaM(tÔ£*%ݱ7 P*°&|Ýn·md¼Í×–f¢ñ*{ -&2žW6É?;;­ئ|râµ@]ú¼E£ð)¥‹~¨XÖóŸîÒ:<”r_/Np·@÷#Þåš59Ülw…FŒrÅ·C:•6m~|Œhû$¾®‰ÚÌßg òårmNQC¤Ød}á‰.UP•0“º²¦Q fS=2FbgbضÛtë•Ø˜×R– VܼÏzzW,–ÐÍÔ+YnëæMŽor]u[B¦Æ âðLjÅÛµÛ$8/ãÁÚ¡ýÊOk 'Ô+hæð¾@‡b&«Kž|ãÜÁUÞjÕö8cÜPLx(:_ç럞^ZMmË™þñŽaFY¾(eá2¿»H[²·‰+ADÀreG„È(!$HNríÓ%’ݰ-ì[W_ÃV°rÝxùÒÆm»u[6»ˆŸ-º~bÓ‚ƒ›[ð¨mHD‚&C¡˜…ó(ùÜ1ØR°u„çp( ÐÉ@mù¹ ÞÊüyÏÝ4+56uo<Ó’LÃðø>}äqÝâzglØ–‚Íç£K‡j±tš†ßÓ``ôUfÙ‹Ýù0ÎkÏnâäá€6qUü¢˜ž¬ý»ì°G‰'9¸ÈÞ@¾ ˆØ½.'S]Á’lmI9¶}a«†.n™N3‹T¦Xу „ã¸mÈ}ðÚìŸ'Q=$ žñf³Ñ¤EÐѹ]¯å [á-(àpH -mC]7_ bx€Í{~ à'ÅÕuìt¶Ýá{DèÝù½^¤ù±nI@$h!“Tn›T;Wæ š"£Éâ%l`Þ…Okî TŸê×Þ¹=åíွ§Í9Ýô¤™¬¼ üȉ­ÁÎöÏܸœîÎÚÀ¾L@õ_ ù-ågßÞÆ´*6Ü3¸B-÷…((Ëíd|º<ã̤¿[g 'WŽv• ÒŒ-ÈIB 32µÆ£˜ÌîŒ'BÁß;±î†eBv«'¢³îŸ÷—: ê ŒqràähoktPtiàè!ìÊŠ¥Ôá¹0†Ç£'ÇÑçÇΞœK–,õÔægZBGË®”›ƒ'5nøX…l•[‹²+žGS¶¾È¦ûÐåMò®ÚÕ²ÀÐa0@ç ²¿n=Ö’ã,G#1Ê);j„¸Žà¶Û^Gü…Î>,,‚=pG`HmŽç™ÁÈ6gð"1n¯,¦ÄžÛÍbO®’°3ÈÁ’8_‹º —Ä"ÑB`•²“ý|ŸM+P'匴f_ãi¿ùíít†+ÂËØwëpƒ•xÞ®YP#dk*»Ù.>í3:€Ó™Ïÿ‹¸uÔX]ô«jé?í3 ‚ÊËr«Ù­#áTûÑØ.¥œH‹V¶Ÿâ!ð'X¡ÎSˆ‘ ‚ÝêòE‰î{ X#¹ˆì¯ñ–"H¥^ç-ׇmÔ¤Ö8šŒX’Q¦ÀÑ„«Œ“wfjYrv-¯žXÒ*…Ôü±4àc:EG\%)zÖTà{ò–½¤vÞ`›ØE•0 Û_Þœ_»'saºå®ÓPIé¸ÓÇ«Uw•Ït³Šfº‘âñI² e„ÁÍÐõ )X{„sô¹îÔN¢Zœž¤1•xrYr†ä#”m‡u¡Ñ7±½1âYš²=¯Ä‹(Ú&|“‘‡Â¹èúÄ%øe»Ú­ýÕÆ!Aücûîôyt¢Ò;ªILbµí–;šù‘t\¬*–hÍñ19µg™Õ¾B7Õ°c0ï¡Ôº‰iØ®£Î4%‹Ï ñÛöj"ªÄÑ?E¡U¦À]WÎ*Žÿ"žmÞ÷7´‹„µ‘ôY/^mÙîØˆ*,(ŽPcàd±DoÐÂÓSíQØ,>l¼;3V¼Úüº½mûñÝålhZÒ–˜š>Ap„Y«üW9çRðZþdҋଠ{- £¢fé•¥e5^j ÞÖ)SE {|¿ðì°Ïû-ô§¬ù'ñ9èæ“MÕ¦ï´=az„òú]·Z¥;'^~}²»ù±¶ ;S @M¤/Ò –.ájÔœ(ç+-mÚ§Wˆ§@Aðé쌒„×§›…E€â—«’°Ó7pþOaçVs ß(E²MÑ0¼)|š£Öû›mwsŧ €£šÚM,ÎO=Šñ=©l&\—Ãp9Ÿß0ˆËõ(׈&FxX8ý]~àWűöËŸ7µžhc¿j¯’>6âEÁ¬ow/þcHä4&%N¢}Ÿ÷‡:Ì£\‹T·ür©äHûr©O¶ñÇ¢Áœ€Å‰]ä¿H­²kE­ƒ¡c~pz9© ÝBº»2Žd0Ïû`„#Mý>‘ vÓFS‡¡°q ñ›þcz§KæÙ®>‚ã@Êñ•y Õ`¨µ2¹Áv(ÞŽÓËíu”_T!·•Õ+#Ô§—$òh>/"u×í%ëï<àø§ ÓC“˜ð“1Ó4i ,¬¢¬D°Œ¶Ê ̳WRæúd•œ¬Œ0„†š½8ákÜß»ÌD9YüÚñ?2ýR†â@Ô´Ïs%¦.1|éÅ7y fK`JMŸ¤YñŸíuÁAJ…}:ö zҖ鼜>…z2öìDÎR®"†8`²fÜèí4kðÝc )ׂ1N9¶8ÃÖÀÌQë&Fa˜m#Å_ÓÎI¦V6‚œ¶Œxû`dDå×DQ‡§Êñ½d]A»õ’†mŽ4ÄÐ2 ¡O€NþšÇßHw-míèv[7q»·S»ÆMÊìïfÍÏ1-\@V)‚$‘<7‰`\•Aª˜—¦±ì½1*Q,}º‡Š¥(¦XxTa~i]íªtÌ—©·œnæ¼ Ó´ó¼ Â:­ïÍ«œ¹F¹¨wα@¬`)+€+ükë«LC^ì,¤ÑXzçꮸ` XI¼IKL#ü7_aÿHn‚!Ûãµ¥<8mÿ@Á Ì 'vƒ®vöíM(O¶Ë‘"Õ(x›O.b‡zöÚq 0lŒZtiþpäyßU1ðÎlÉ©¡Z;)@(s~ÉÛÓ£ÇRÚ£4ûIô­ ÖÓŒa‹Fùoõù?Ù‡“dËR` P0UL„ Ê-Xu绌T» ´1–Ç8AÎH¸¬.c6üšµÝL£Ðœív´]€äü4Â…MQdŠÓ{ÐnÛ¨÷Ëóz¯4¨“õþÕ9›p l]t7퇎,‰dÖv°€´eX —f ó¶_:]ùææ¿ upŸ6ÿNÆo@³P±©.H¢í²[´À1¯&ó0£é|ýbƒ©u­—.4!jzšLÓG*N¼ö-œ¾uœxy‚ך¦cBpGJvΣ¥|/Á-".¤TpzJ<øaµÚ·½£EX”üe›&þñýlXÓ¦6c:‹‘>ïr•–‹ 2—¸rŸeìîÈ—©bZ¿köBª´Ÿ“ E÷—’JPNÊjÍDÚ£­‡îaªÕ¾à¿¿ÏÎsO¹“ùJäHâ’=ï~½d•´Ä‘VµxG!œt4›7¹ÝÙ¡+Pùy’¦’ò.j*Ø„±dNÝÏ:rÔÁ"£ûâ~è­Aé«}}§q´†ÝDi½Z6àVY@»²þ½+mÝl¸¼óû©ÁVÒq­ÄŦû >•pHÝá¤+¥CA1˜b°KPw\ ˜0P#¼3Œh @ÞR6Ò ÷9Áw Þ¶¢1ª`xŽM æPyWDjƬ8w·Ó ZÊ£½§è (Š,6œIðEüyWë¶å6·Éýæ§±«Z3šxv|" |ÀtØé°ÇX8vj |`=fC&®rò”½"O¹(­è?t”^<äЭ¤¹7WE:/9fûm‘tÓ š¨³÷¤« 9èb´«Õfôðn÷x¾g—m>z»;…]^ÕMòí‡óªçÜ=Ö@”î¶/_¤öÊE·Ý'©ÚÕ°¡QX"Œ—ÍCÝ2 ”Ízb#?ƒ?®ñËZÙðE ³‹qLa].`Ï z®?,Ó„ÏH}ʦ©$ا|ˆh'X7[x©b8piÉ^ ‰kŒî.†Ï$E?¾{Œ×)ºŽ…¹dlCjñàç…AASÛULݦ ‹±·&úÿëö2÷81v„ÊEüá³MQk{³¯çùÔ>§d´ÙôCZVÌûÐrRÕ«4—Òý=?È?ßÀöÔƒV¢ˆÎÏUÂÅš¼¬.ª5zM5ml[FË×4T2ô¢h° „¸¿ÕÜá,BóžyÉûå8zØ1M6–JTÇr·«~¯ Œ{¶‡“•]F«"wOd‘@òqG¦öÿÇÐUL"~á,s¼ NûG¿ k·†ýtµ,@G|¨u¨ºúsÊå°ÜŨpŒç‡Ïår±8àï/Ÿ P•ΠÜåCˆëíöÝðÕ£G···Õo(cœfµé¯µ=œõêòчîòö.ðóÖk£”r>xÜQk*/ Nü-cÓì~ídËÐ'F²ŸÑÓipü gTt&-9E;Œ)‹—JZjB–ï¹µ¡PËó˜hiðgoc¯p}úUahO|[†Î6ýÜÏû"†ìñ9 Túû8.þþh¦TΔÌkÝ!H«<§Ñˆ§‘ž>½³âôkÞñ¤ÿ߉çƒÑç>M/&Ïihñì&úáÐÛÙß (Qû–~{KùÊòßFÑ–1øçDé8lïÄw%^l[Àq~S:`(WßY°|E­ÀÁc^>ß\•†u\M»§4ž,›-Oü¼ŽÈë8PF^M¶7 )¹{p6ñÓ¨Ý$”×oÞ¦ŒòÐéÃáãP ì: îö~É8 ¶ä®ÑªÖÅ ›=a7^‘ùm˸ Ç‘Å?X¤Ã^Ž€ž«iñYJFŸ>lbT¯µʇ:½ÁB߬‹I’~»û¬ ™üÙÀTW¸y˜ú›ÓR tÍ´[2Ûhuåí­®L+zòʵö†“yè]ö)Â5Véq‰…p±Ü'%æáòüzÖj0Jö.›½4ü;õÒºú^~‡. vÑ1q‡OîNܱ…K‹¼3‘;ú?@eæendstream endobj 247 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2473 >> stream xœViXSW¾!$^Q¹Ü[:NUÚÇVíH­µ-NѪØQ\œRŠP6±a•°(K$¹äKBB  l‰²†%,.ˆŠXlµÚ´Öî-c¥2íü˜v:¶Î¹ô0Ó9Z;§ócòäßýî=ïyß÷{¿ODyzP"‘Èoë¶]é©qiáò¸´ìÀU+w%&+äqYîGþZù½b2BÞbðöt>0§Å± &æ¹æSîŸ,-}CFÖlEN\ü¶„Ĥ)¯ÈSWRÔvj@í¤Â©ÝTIí¡ÖSÏQQ©MÔf*zžÚJm£Â(j!@yRzê¶(׃õ8"Ÿò\âi“<'‘fÌš7KC?D;g?0ûu/ÚËåõwÔåóƒÇr#AâPÚ}ѼkäïÇØ„Î…&ÇÈ‚Š®…7;²œ\q}ZÓNX± Û¾c™kx©R#*ËJ¢¸½ØV£„Pà4r$5"1or„‚,ƒ\Ú*aÚ¿møtôªÿ0D”ìJÀ…ìtµFÎ’j‰À+›…Uv‘PöËlè¾µwð\À Ï¢¼@e·–£Ù€æòúʆz­E¦N.‰HÛ›•öÄB¼-ïtþ©êËfgeÕÇ©žÓçlp ú±±ªêDšÜöú“”Â1¹Ò!B’ÛâÉݨPf¨ÖW :5¯z/ÅÞk±‡wŸCÃçÐyÝ}Þ_¥ÅÓ…:þpÞh3.@*C½¡R œ´ *ÞÂÊqç–Þx^‚cSp<òÇ( P ôÛFDÓÓ”ãHZa8Ga³ïøµí×þpºáÇÌ. 9¹?óôר‚á…½Ù «‹e–à‡•&@#¿fué^Žáƒ§ö•ýÄ·§Ifø®ä˜ð6ôŒ¡Êp¨+âCàСLF?¹0Ï xØ×”{\e½±©`û†/´Ã{pzu–€"­ã'OtƒkbÜyPxVX 3uf¶Ç D‡*b‘Ë„âÅÿá SSJ`ùT³Œ0ýYÕHV‡ª&£3Ñò²%Âú|mõkæž®ãã€<@¨•Ó%V€Z½©Ñ¸¨þc½Þ-ŽÊ¡ X«U–høým/C`ˆ U…«÷Õ¤U´e¶ª¯ÚµŸ*ÞPúǸø` ƒ ã¢ö¦®VW¡‚"Еñù ̲üA]™L ×m4ܶÆÞ¸A Ð,¸øVÍ»nÌe·(e3z:•:ÐÖ\_ôûkÖæó͇šý˜tÍ—U]”dI™á’ÝÅ!I‰IÀ…B݆ú!ä`ÑR)á/•’IMÁÚ\¦åìMéK¸=Ïû¢Ø Üu¸n½:ã¥]é8ã@'ò¾LèÝ~Ýe•Ug¹×’0½ø‘{²¤áMOìØ¼¸ ¨²œ§zÝü±ècÐñsYøÑ¢à‚Uhp£p¶­ÿ‚@–5ïU#üÎá;.Nå …~Ìá]!@frd—§ê²[cÔÈ{u•Ù|W^Âk5Jü¶°Ï£Nm-Tp¦–~"«ÉÁb>ô©޹©‘_£Ú"ç>è¢P¯©®ÌU¦j†>fkŽ6Ÿtéiw&Ø:PÝŸÏØ}™ A3!«%씄«vfª‰´û¡bPoêBÑlå sZïþþèºa-¬‹VnѤÖl6°5™Z 5Ðõ’¾«gØÚ ga8¡àqZ´‡ßÈoNåžJIÙS¶—f”Oþ%늿 FZ‡hæÙx¾)nÈßW£ñêa£\Qœãûz,çª^½ž2»U?›éV½ëËÞfßwn ñ_ú1‚°Í!É¢J€×òê˜ÇB‹“ ž>Ù‚Ö´¡ ‰#PoèÚ“iæ¹—yejy‘&óHn´ÀÑzSÍ ¾mÝÔ¿ÎߘÊÁósð}Z†h@÷Ãyäm¨&g‹«Ü}:)"iöx›Ð8vxLü½˜8Ar@ºîn¯Ýޱfg…õ# ÝuX°4@§ÊÇ®©K,ž/\ÔØy *’¹ä˜ô#¥:ùÉ)žÕd”FÜg/#¢I¸€eÈÔÊMN‰^ŠýÓÃXd,©Î ³}79—ÕK—O]W'k•ë€;@>Øg|ú뇷ÀÉÿ̸£ôª%¹½K(Ûtãm’| JáØ=#|+aê”$õ~rq2–g;["X/ÒÃä`YfÆ–!)\…áîŽNå–y–²#™ŒÏו¤™êÅÄ(E¬ ¼Òr°/÷xåÅÊãæÞšKÎÁVÇÉ® ÐGc,¡œÏ¿'eª ­'ƒÈß%žQ±Ô q«¨æK#A/À¾ŽC½Š3V—ÙI£N©Œ`´ÕøW·Z4`QYÙøþ‰GI: ¸ŠÄÆFz/âdXEZü‘[ÍÝpбY‚ûØÀ™ ŒžøÌb÷ív…¹š\Å®-Ÿ#Ïý˜Ý”?9Ofî•wEÂFX™¿8ÏbŸ‘2[("Ù'RFCEàff/££þ+x§c—fB¨ è ’Þ5Âl)³j„Œ£#·FÏœÎGàpY‘6·H›¥Í®Ím…vhhª8æ­Ý õµ +ÄgeãÈAçA-«û*èþ ÐøÎϽ³zê;mÚm§ñ}è®>€nb"öGg K‘7Ncõ£–Fçc ¯&ß[$DGÍ]ÆÊ!à&¤h5ä/.r%»4M”üÝñí#4iÿáÇ4# ÆÙ¼©²Ÿ»,ˆ%Ì›x ñÍ›`Q—Fq1Ø~o1{ »¼[Ç1¾§…od­ù-©YéÚ,MFcftCs[E3=|Óªdº}Š–¸P·Ë,ä°$P@Ú÷(Ú¬3hÍz#c—j,ׇOlzrËT¾Ò! $Üäl£Î¢,'ä*.)Ãk°û©M6¢Ÿ»{ÍTý=”F$º·>Õß~ïÕ×w…óùŸ—¯Í»Û”"c;´éÚ˹i!)à†9Ÿ`ìEnŒ3oßþ%!›Ú¯åIv¯Ä!¿ØëgÁÉ ¿¾AÄö‰úÏ7Xcþߥ°ç-…¿¨nø–”÷k ä¢mÚþšï Ô€-¨€G—ÐvYõkÜ eFT;%> »°¡¥YÍv©ÃkbÎ"/ÏÝéÞ³mz½Ao0è« ÆËÞÞõo_³bendstream endobj 248 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4303 >> stream xœ…WTTW·¾C¹s2ב¢ïÞÄKbì Q ŠJ# Æ¢"dhCïõÐAÎPŠTìX,CtÅ‘ Ñ5ùÅhbÍÿÌÚ7ïøÞzg BþäÏf1ëΜ{öÙßþ¾oï+¢Œ (‘Hd¹ÆÕ5,4lÎìî¾~QÁ>2Í—³q¬Pó»‹123DfFŸO”–€%X¨ÆRš×¬Ð°=2çˆÈ¨èùŽØ®q»|wêçà2ÁÂEv‹í§½ç0c¦÷¬ÙsæÎ£¨µÔ§Ô:ʃšJyRë© ÔFê3ʉÚD}Lm¦–S3©-Ô Ê™ZIÍ¡VQ«)j>õ µ†r¥Ü()5ž²¢¬)Ê–š@¡L¨w(sÊ‚r ÆR–”„b©qÔl’ eD%QçDŠ: &tŽ1L0|`”hL+h1Ý%6ŸeÞaê˜ÿã;æ¢ÉYÓ…¦•fŽf½o­y«ØÜÎ\i1Ñ¢Öâ·±²±O-§X†X•,’l•$Jš$ƒ,ÏÊØçãR္ @*èWyª$OÕà©¶bOåíÒŠç¼!~ùÙ±¥«¼ärŽUw¢êœ/CÁ!­¨Š?û½G®`]ÕŠÚ5wòÞ°‚fÛ^Ü8tö|UØZÇìk×í׬›¡]Ǔș*¸¥]PC‹ÚPðƒ`)XÎ|ްÑÌiس¿|`ðËpÎ¥Ò™®ŽŽ®7ÿtõêÀ7W\fsd,SÁ,\Óÿ¸Þ& X š­,æ>{g‹WlpÇ>oË­òýÃÉ_+ÿíÉwÐ=>ÇÒ:¢§¿Ë;Ÿ¾ÂeÅ2ÿ§¹A1+¹tñüW7.:ÍçF!3Ô`¨F?X±³…xÁTÚ|Ôî³Ob×xrÅ쭎̽6 d($¸Õðßã~û‘+¨¢«5ÑÃQ Á’fßýùÒx‹Ë¨iAŒ¢¡f?¯ ¨y‹~UÃDõ ‚X’)k·m9œN5àubàÈ̤«[Èö$¹é(¾ë RÔsÅõHàâwpx"ù©p-GQ»Pc÷¦:ߨ Ne(xƒ¥ý–6¯¬´-ZY‰3­¿Ü« /äòã â:£¹•W‹kPKHDvbF.çÝèäˆÁK"ûÍz÷(‘ïM¿“„60»wÎÞêQq[ÆeÕeW„#ÆEÇðï‹ã‘¬½¼&¿»’ëõ;Ÿ«$U˜Ûyï´ž,×T" ÔsIîëA"­CþyÑq\ž«{j$b>DçZxH;ñ›Œ±Ý]Z—dt ·x¾Ž…-–8‡ž~ÍoðÆ÷džtÉzjŠ)V˜é¬v†™Vl‚PÞ!mG‰œÜ¥µ0ÿü4Û;Ç>9h):ÐÉA“øÏ+ÊééêˆÁžž½ÊnŽÝ”߈ê& Ò5-¨C“Pm´`¢5æ»°ÉPÈÞ•jŽÌá1#ÜPÒX„obÜ4VŽ”‘¬ˆÐçÑNƒ?® h@Ȧ5¡Š †Ÿ­ÛµË5a²¿…³*Q lù¶ ÅÂdi{Šå°˜Ž ašP=ßKoÂgóèìÖ¤“É=±_åTø£TR·”¨œŒ˜ËŽaòèpÖ¸—®k&gˆDr~øöFä2*Š,L8‚lŽ Âò:U˃üªB“OoìÆcŠÒ+ãêP%êF…5EŠË0dÝÞ¨@‹ù€JrF ñD·r¡†à-C >©Å…é‹ÖßÇïnŸŒœB㛫•åÝù*ËÏo(¨Ê߇Êóí¹àå<^‘ƒ-6¡é ›âü•˯Ýý¥§8Ö!Xq:ïÐ¥‚„ÂËþ)E‘(zW,Ãî‹óóBé\w<Üûc7L.â‡u,Ù›±'l>O>ÖÀf+ö–AŒÈ’ÛIãq°h˜f|„®Ú?,V}¡h?ï8壗ƭ$˜æüÚ_Âõvw„< Å ŒwÒlË›ïaŒ® Ñ(˜ÿ,†°…qX”¾¨ä7M=ëo¨ÀX%"î\Bxÿ/Ö.¦Ýë:E‰7´pce£ ËUn ñV [T’VØ„WÝgØdÅÚþ;Z~Œ’vgÆfÛäÑYõiõ3!úå¯9ÚAÃ$ü{Q*ÊAÈ!Ù¢$Ãf„zúå&ä1¨¸|Ï:´ÄÖÉ8öØž¸ØpŸƒ;{_œëŠ"f [ŒG¨¬s¤A5D  »A$U†¢ÌøÔܘ .3I¾Õ1 ?¾þÓi%QÀ„ÆÃ(Ï÷¯OlFLscmÛà"/ì°Oœ‡Í~ž à>«Õ± jT’ }ÛûîôÁDòaÅ6 E¤øÑ(ˆÅ² 4µå<ˆf'¦…¯Â^ÖÉ~i¡™¡D©§æAenIj³ %"ÆC‹϶utr¯ÅAš"³Å0¸»ºlدu›‡ç‹+¶]ÁžEIe‘û|‹3JÒ+3*Ñ>TUVVUXò”Tžgò_‡Óš-´`²©wßà¡å­¨W =„a=Ò‹â7^ç‹b¸ ½ ù…¨Öæ`’sø1˜žÈo¿±ùV(㫸7:&/ÅÙ(P='XЊÔ€ª™a^Ó0p´5&X£PòÖ8—lÛQ³¿hú˜L…xìÃ÷ë;º¿Mɱn~(ñ§7B<IÙ./»—¯zrýêõ+½ž:OF—¿½ ãTv°K_îØôyõÙú´0ä€ÎÄÿÈÀYº±uýÉ3<›NŸŠ-x¶›¿œR°>õ°…[“¤¸ž®¼ôåutõËÊße†ñKÒUÖ¨ŸþÃPX-|!½¼Å/ùpÛ|nÃÔ‘nñ÷OÑH:$XÛR›G:öèóQ´7?EßþµsÙ建šj”ú1a r´Î%•Фb1‡#Gvm2ªmKGb„À23øð1‘ð†íÎÓ¹w ç7úÉ1ç àØËàxáËËðÑåË’¶‹rµ»V©Ã/f«×]´bÇRB‰`-m’w¬OÙœ°cM¨Šxÿúmf,wX¸½6°Zγ"*%>-*ÄùWÉÊ“‰<Ç:z¡•)¶ ^¹Á8÷ªÿŽu|uÇžùlR©bbVÐé( ¥$ L”\Ű“RRªòÈTí-Ì=Ù‹˜Gƒß ñì\ÔžÖ§l¬l.Ú—_²§)c/bj›*Ûx¼ Jݽ½7®÷9užc¯_8~üÜG·nà€ÂXêí°}êT‡cÇëÊ;;¸–šr4ˆ˜!0F ôü¿6lŽžØ¿\Áí/<2ño&×ÿwnÕòæÆ ¼p"‹Ø¦¾QLð¤Qt1Æýø­Q¥=­--ÏÎÆ“…T¥ ‹Š SD)• …–1)*¡L%9wÕE}J ¼Ú÷ª,ƒ½]ñ;š¼oÇ‘=¥Ëêìë¬}*}»Ð)ælïé0©ž\ÂFUd6è1°ÖMbYq!éÜŽ®õ•^D†K®:¹ú^â=Ælµ2ó^Ì|ÛÛ?]¶¹hÿNÎgöѼº¼Ú¼º ýP†­µS™¢¤ª³œ;¢Š¿B ó̓!^×9JØ£AãôX¿XAðŒ¼¥‚³uâodã_Ï Qò ÷ßãLZr(J.H( U€JedmtdT\(Ǧ}ô õÀäÏÁì ÇŽËžü%H:õšõÚÃ>íx£/D0߃ `bã®QãõÌ‘¦ÔMã…øcx¥;¦ËHwë}¸yÔx>j~Þü=}ç˜âYÆ~1Ã)™èŠ©=H#×<諑ݾøa{†AË·ñ¯±tÔõ¿8:y¢8ߦš·Û+ìÓ6"?²Ä è¹!;’v…q ÃêQ IŒˆbØïÛscPì„ ëÑç<îûEë©û@Ù„‡•b¶w¨çTOSUœ ‡Åòa~ßüâ¿Y¢?'¥þ#F7úúû …tØ¢Ëx¼¢d”patÊÊKŠÁrüßÖiI(Å0åcÊu¤°j_W në ÀNR,£A¿kõ*X =PCÁ7Ü¥/?|†Mü½3¢vpà£f~˜‘Äãzq,Šì¬+*Þ[Æíïì©»ˆ˜»'œ\–,_»(쓲/Ãøââ²RÔÀ´EÖD'„¤í²»¿ŒÀòùC0Ô‰ úÁ¨ŸŒ’óË¿ƒìï6vŸ‚`½èyCØ`ãÆ¸^\¼óóÝè ªI)Î"¯LËDÔÅ´¶4Ô¶÷ú}ñ>¶%oa/œ FNÏ9ö!ˆžÝ3âå V»첫WÃ¥64£*¦ÿò™o¿?¿ÊQo´pQ%:®¾ m·ôŒºGgÖÄ¢tÄ (9ï£oåõJjiìˆ×à=0‰(°«¶¶¢+†n˜NªK u$‚.±lSIŽ«=ÕФÖ<õ D‚“Ýt¹äØxgÿ‰^t¹»ð66Åf‹–Ú»ŸÜô]8Ç8Dò©ƒíûç%H=xÊÙÁ©»«·Çpr=Ñw®ïôw·/lÙÈWáÃRçÕvën·ºO­ºøÕO.¬qãuÁ÷C7T Í·—X±¯ W¥‰ Õ`Ã)v*úÁ\08w®¶ç—ŠÇ.›6¥!¿ü蚢ââTË4Ç6„ËbâB‚ê–“ædMdn ›¹e·¤žëÝíì7|}ã}ßSFÆÔp,Ó¹«\¾ÜVÃY²j5XŠ`+XÂmÁHÚÒä+ ÞÝÞy¨¥£ƒÃ—Œþô¹I V¯—¢êŒ¢ØJ<öþ6°A`„^lª©(-"ÓRYVCx(ÞŽ­q96=9§kwÞé¦?[‹Ê4©ÃçjCx—¤L·=ô?³aС/1²Ì˜ô„ŠŒâì°¨/@.hênÌã ³RÓ³P“^ÓÒÛI¦åº¹è¬ ÚÉ?Ññ¾Ÿú`Ñ_ä©2 ¥Æå ÔTÎ?È7%€X=õ>P0 Þ{ùë?•'RÝšøœg0K\`clzÝþFï“£àxA<^Ž'’g+ÒŽW‚9¶·Þ¿ÐÆ{@”ÔÞË}ûVŸË·ïŸüòè‰ãëìµ€4_ þ$“.”Ìá:Ùùûw¡JèÊ.ÔÅëðƺÿÏPkzÇÍ.Øúowvÿ>UZ—P•‘”Iøÿ?Îñy¥ÛÄVÇ5(J«÷•ppïwçÒš|„Êl†›§ˆ¹yìÃ>þªïä•;¶`6å&6Ç&K/Ü­L©mlªUVfíK+åªOžêø’˜Ú­móVl^·Ú“ÇáØ--=3 %Ú· ÂþbxD³ÌÒòN½ö ®Àf"ü¡µCû†ÀD½“!T'ý­—V·÷}®¼€¾`n8}ÅØlÅçÀ–ÄMÀªÌ½9…\GÇ€æ¹ûÚ?¯ÿ=Q|P¸,×/×=;¡PFÓ/¹“4»÷ùÙUëÜ<ÖÌÞùaÅ©pâ²¥äq‚i–7È"£‚æ>]GkõãǜyJ…ðq,«(ª U&jSÎÄÈ3ÌlÌ¡š’|Í«¸¡¨ÄÌŒ¢þúê²1endstream endobj 249 0 obj << /Filter /FlateDecode /Length 20170 >> stream xœ½½Ë¯ŸI’æ5w^h%¸ËK{x•6 ±dA { „-Ø]æ¨Xœ!ÙîýõŽÇ‰ÈHò²ŠÝI¡úó÷=ò‹Œq2"òïÒS~HüøïïÞ¾H?¼øûY¤øÏïÞ>üå7/þů;KžvÚùá›ï_èOòCù)Íù0w}J»?|óöÅoÿÃë÷ÿõå«ZI”çãÿýãw/_¥§ÔW^c=¾½þúéeYôÇî?¼ü/ßüÝ(ïx£2ÒSÛ‹nöÍ·/s~ùÍß¾xÕÚ|Z³=¼ªýi¶øß~óøíK¾n[eïG»Él£>¾þø{~œò´kü>Œz÷^“þçÿ"â:sÚ׸ҮtµÇëŸpÑVÿQ^#•vxýþi4ùñõs—ÕYÀcÐ?¾¿þåõÇçæk¦ùøñIæëß|óâÿ¥I+ùá‡üíòjOk=”•é¿û¡öE×mm¤ñ4ÇÃûïþÓÃOôù~x1ŸH¶ÚÃ鯿¢ÿÿ·ôÿÿíW\àÅ_¾ [Ò­ÚÜO½?Ð$oR¡œøí!×9XŒ;Ñ—,…îö‹£_|ÿ¢Ò &Ýûçið«‘6½öxxû¢´ÝžêvÉ/þúŒj¬8-Ž‚ä5K}Z9Ž‚$Žš©Ž§±Ã(“ȨA£Ú´·yë‚Yz]í5éˇAÄA¥ÐÕIƒ} â ð©lwËO#NˆI®W-½=õkB ¹Fõ1Ÿê5 ’kÔZé©\ÓÉ5mY Aœ6HdT/ý)Κþ}MÚ¢…PZÁ5i¹¥§' ‚kPk멌0‚8(±’éSœiÈ–,i I6ÿàG’´ö”IH]gI¯O­dчï"å©Ó´ŒÔŸºŽ™ùiU’~¥)’Åö’$ú¼,Ùé©ÒuèÒO:dÓù2“Þ[$#­§É—!õ$ϧ͗¡±]%eò·dÀžªH[Û`ÁfubI£×®¬íCH]e² Ì"ôš|•ºùUXBOQyÑÐT™Š± ¿IÖSÓ_íü4ù:^W^|¦ÌŠN’ö4äùø¹ _‡^3-•l™À©7šdØ?/|}¥Y'?Iè²2Óì~æ‹ÐL¯&’>tÊïÆ’A³/סWч™ôš*Љ˜dâȤ‰dèÒѲ£d¥¢Óç¿Z9³–°@?Â*b[äÞ:}«&Ñ–4H¶NŸ?ñ¢ië[%z'š‘Õô5›LÅ2G2S/CjWu®ÄD²ºh foÑbc™}azw¢§ZqÂw¦—”‹ ]™L³Î-ˆ$³kV!íÞò¹7iª(I/ø¸»'UúÜC¯L%ÓGÿÒdnö ·äë´­†$ï9UIèý³¼¬!I„HöP%aMå_•Dk©UU¿VEBÀ!zÒ*ëKJU=!¸¦HjU=¡g“XR+:ü=–HèéEO*͘^™¦›'ŒÎÔ O^–t}-’lB2y‹d-Õö²Hö=©r}dBNÑÒŽ"÷Îy¨ž¹F&ûS‡.L1.%ÓõE@kXæ!ÓÛŠ’ÐФ?¢/$JbØU2k”à[á¹g ÙdþÅžMž*Ùª&y=©€LŠÌ™ÑáBï¨ZÂO-OCV-a—w,ô¤K.Sñå Mcæ©Ê4óråB_U´„’¾ƒ€_'mþ5Kh刖Ð=‡þŠ Pâë¤ÉOÁ2@2{If‘%d€DKRÃkÕ”ø÷$‘ë‰d«–ÐÂî2•&AfŒUU Ù Ñúµ¾i%ÔÅÐ.]x¥’¶Ò|“„>–¹¤¢ì­9NA§·Y….܆J€¬þÑ#¨!süŽôU׈È_ê@V[5Ï€¼W½0b¯ Ù:å É:­|A ؽ/¤ï³n\öô5Ǿ ôä†@’zAàJ²®4UKië~Ô¶ .ZY³G\´úpw  {ñ`EÁ•»* £ Kƈ(È’Ý# .Zú @Á0(È’A'€à¹· ?ÞlY‚1@A~)}CA–¤Q§¢^@ÈÏ9rÂÅ¡@ÄA¤qgý‚ÁŦ¯EäO¥(m0¸È õa?p¿`p‘a .zªÑ# ò\C\)|Wr@3¤Å¢†ÒaTp\(H tä ÙRµ ÉRAÜð{ n85ÉdÕv¡ -…8CÁá à’G¤+’;ò”ì„ úw€´w÷ mÁ \pYÉúÌù¿ãÂi¶Õ‘p.õ-ÒGTlw$œÃ$†„“fôÂi.Œ!H §ƒ¥!=¹:,„l’ó„¦@b@Hz§ˆï@H«É$Â1Lb@Ȱ5. æç²k["šë0È~¬~rƒAöc! ºI6d¿UµÂpýÖaPŒ\DAöZõµ‚m˜@QÝXu Ù…(Èn¬zwŽ‹yCÛ;K½ ^É¥ê+"0™u¤KÓ ï9«w¿Àž”eFo ¼ŽÃ@7¬õr*ȾêrvÇ£šËàÎ -} w`jƒå°oËð¨‹Ì¾ÿ ±ênšŽ rŽÕÁ3=âÀµ\º6Z¶å}´FS:;Ø}¿ôš¡x]Nàhîàa}Œ˜ö54:¾ƒ­²AoÖ¸G¯Ð$[­Œñ3ÇM½ê¬-z ¾Ý.WŇé‹õh]†þ7X Áïv¹ët}^Ø1úO+Z:r{4¬vkHî¦Ü,&¹=ì%£J=´Äìî˜ÇZ«m¦E§éö{°ÑŠÎ^$€Á X vtdLÆ2ßð†½Hu– “ØÓœ¶Ø=½qì7‰Äù’(«ãœIzt=¢;ÌÊbì˹Œ14¹àiœÅaí!=üpŒÁ±ƒ¬cŒ-Jæ¨;£D󧾟»ÜÉCs˨óÜù‹+ÿfÞ½(ÎC8ÈRO1«5¼}ļ^ô³X¬Á Q®CÈ @Ð!íèJÙ8±GƬ¢Å>ÕTÝã#š¥-„b/SC(DY}Ã{TdFhælejFs)+öýÅá·F¦‹¦î+Iü/ÿY¿Éê6I¤ÛÞb5Â(Hâ¨^i~Ke’kãtޤµI"‹o¯shü¾€Cã‡QNìŸQFÛŸQ‡Ù?£>'ò[/ª„·…äš“E@¼¯™ƒäzÛÜEYÂÛBrj¤£3RÁ5F<ÜAhü0!Æë‡Ym9³f ¼}˜5§öÃ(8fa”sûgT òÏD˜â“ÄV,Ž.À¾Ãúé™±£†5ÖÉAÐuH×ßF\èRíâõ°œ{-É–.ùÎ~ÙŽTF¯ŒÊ9˜Ž^™^ˆ\~oi˜yQÔÙÙ„DÍTod:”L€%£×ËxS;’l#7Ô öF†;’ù¤%ØTúsí`wIbï ÛÜÛ,˜?Øo’4uÆÌÆ“dÕ¡0@’yCIŒ3àD$µÈI d¾r¤1äÂÀ)7¹9Èr@‘¤@æ“ ã+FIR/C^S?/À˜$ Ü8[&§ê$™àoü2¥Ê6À9eW¢Á_“'ƒ$I]rsDèÓ-¸pVäcêÝáФ™D}’ #Ì/"I»שóšÒ9…{E’Ž„ FL¼4Ѷ¹Î!“R1pöH2,W$ÍXuEç n%I’ž¹ž¤üKix§$—Kð_pqIÕÏ4/¸7ÕÕã)“d"¢7Mhn¸íê’wÞVŽ^;-UúéÃqìeí*ŸþnêQZl@’l޾ƽ’µÿ¯±I&«™N—}àÒÇÒ@’¥fÞ…óh•K7ebåÔ]S¸¢Ï”²2©·lŠ[HáÆåÞ•™ÍáÃ(³)’û")lðW\He.#î±Ø ¨~,Ʋ*^Ül!Œ¸væH² ý¶ê -óÛ?.ô…V4ecûÝíKÙ¶<ÝOé)n7’ À‚Ã’U2ä9šºš&6XÌV²˜Ø×„Ŭ¼c‹Ê;âÑìÖ<=ùHM3“ õ aj1# _ ¶ X1RÌ{"-=ÅÔ(uÚJ„›ÊÉÔWPV+BM‡­J˜‰ÐVlþXs¯”/’,K&Œ²óŒ P[IwòˆpÌkB XClñÜguöîçúrLWÎÇ ó ¡Ù=ÍW˜]Y5ftD*é»&¥™³ÂM¾~”2§‡¤‹àê¢òIÒ°ÍoîU%Øé1£$F€ÀK«ªÞÁ‘ã ÙŒðõØÍÈåKh¨ó—±îf~&¼JŽ'uϺ5¦vß”%2ùa\\¾Ho¯n0ßHÝ/s•ùYrdòå ”1—›_»]n9O–n#˜ëî3lÎ}%$E–Ž H¨¼Nô2$XëlpL…[!ÇÙwWÌÂ+Ù¿ˆkغô˜ÇD†­À¡v‚Û\€u²!ÎéŸ!Æ×cÈ!ôÏÏéûšyg.æá›äzI&¦Ú5\£8ó´^SÉ5©ÉÖt˜ H®Qu”8¤ æÔ½Mƒùa¢ÀÒÛ§ñÃD¢·‰r? fCœÀ?C]^Ü4»rV.ÈyÕþÊYÂ#ÒõõäõaUN¨™qÛ¬rnQ™÷U h +¶J¥Kd+Èh#ÊV>9u I^°d™ 6£aAêrþV¦®^,Q-IhtX+’8¥¡à ¨fF$Íö/Õ0’¤da|eýÑô;õòÉ ¸Ç’,cä5V ‰ñ+ˆ'H2,QB¤ÈWˆ…Ñð‘ Iv4¸!AÅD!" << ’H’Qu€(J$ ú5Òª¼Lj¤,ÈàmKVÔˆ$ËyêXòpÂ>úÓp„†•S‚[ä+*§÷êöBL±¬;&”‰!¯†ª•“yÁ¬k8[%¯9fß‹$ÅìûÊÆ Æ´ÃÊÙ¼#ò•³yõ3  R%J¯œß«sŒ@¾r~ïŠy‡"¹8ûºl_œAå„_ñkŒVIÌ ¬œ¬snÐÈÀ[Qù œ}åú•³ï+ç<æè'VÎ<-9GX)JAÖ¤Óïp ä2§èÙV.îÑû­lßR,?«;¡Å1í6º»dÛèîbXaÈI=ÀÀÍx{aà&](18 ‰YCÃ@±“nFé1%†ŠŠ›–ö,Ù±$H„u d‰’â†Ûóz ïÃ…,‘³I‹¤}xd` P¦ dÉ\ z!à6ºÛ'+¯"PÊðgøbìE’cê=IÌÃ2üÛ]/N.¿Mª±bÔ.’±o³ÅûÕ"¹Õ‘ ûX‚:6`ß&TìÛ|ƒKJ$5DÇ…~,QJËÐoóþtL„$½¶¢*C?–\à·íðc‰Òµ¿M+iìˆ~,Á>ÐWP¿Ðožì@׋@™;À] 2 YRb:*Iª1a €,@þ>?™&€²Dw# yÍ+w ÜeØ€,©±L‡²$îZ“`ÝÙ¾"ÑíÀÍÿ2#²$²‘$È„5üc h}àßÎFen³ˆ€,hY¿õëŠÆ€›ÁmFdÉ…;g$…þX/øÛc:ü±$Å-k2ζ að·#YO-¸aßfì‹¥g"¹Èp’ ÛŒVìcAÙûô+ø±DQßÀo'KG7 'ØæHñ‹d]WæTÏv *gܶëù8ãVYv{Éûò" \}•bÃgŠ3p¯Í*uÕ׌sþj‰‰•S\Óõå&>¾,çÉ®HÔW® ¼êIÒŸb cå²ËyúÊ¥™#òô•«7á+B[Üú¥Ñ“sÇ.­çºÐ+Rª”ŽÆ ¯Êå¥êïÚ›ÃÇ}³ÊE©#Rõ• W¯”û*µ­—ÃË`‹=:Ø„Y§ffƒkhuͲp™m‰I3•‹×cÎ}å’ÀHÕW.ßq[Rø†}™Bær̺¯R)<ƒE•bâËèJÁñˆ†YŠ’ã^k•ÂåÜpmóŒ åÏqS·r‰t¿•˨± °áRë+ÁªT¶ÄMæÊÕ/J>°I¡wŽà'ÎˈɅ7צ·-9æÝW)ÒêgÇÄû*EðÓ¹˜ä€})AjÑ5à2%`:Ü.nBœÿ‚  Úåƒp‘”:æ§0„Ü:ø2ì©×iþ{ÎÈȃKÄ9®WÝ~•Ú¯˜X¹bìJ˜¨\UVCqdåº3T>ƒ“Ú´‡àäM'¶Í”·ßQ§¥h¹;ÉdÖ•))’}¹¥Ó³HÍuå<ìÀ½Î¼› <ÏnÜä©.up¥Y²c¿‘€V‡K~®cn;ß}]®=?Ꭻòó λ[q&ÌB žå {ùXW–må"¼‹ŠEyGЇg·ÆŒ^ÑwU§{5:Ò¨Æf4™bì‚GÂ^ŒŠ¦†Zû JØ—^uWã«ZèüâègI{ûÕi¡S9‘)ß-t|”·ÐñQ¡…Žò:>*´Ð±Q§…ŽŠ-t îšÁ˜ ¶g©©é.® 2Á5ˆ÷Kèc‚ç[èø4z {¼ØBÇ_Õ[èø«†:>Ê{Çø¨ÐBÇGy Zèø´y Ÿ¶ÐB§tÍ.9ÓÁÕúf‘1Ù±õ ×´‘¥æ¥p¦ ‚kgì¤Aði{ŒÐL¨/­€éFünÀµ@’P&7’Ö q—rG#kMgQ©£Ée“\‘Ó3ò¸–‘«[’åGqE /q¦FH +/ oáj=®!ãpühjý'Õ(ÐsýÉ4¯Œåª .¤á„õ¸¸”ˆKÚš•½Ây$¼vöÎVSâ:û>iéo”¿;PXbyWìt¹ jÈ W³N¹Ó„+fä:^šÀ_g‚/l¹X©)ƒ&f\ßZ9@f‡–Hž…‰3.‰âD&%ý˜äâDž<õ‹™õÁ@Fs¶2yô5dÞ™ ´Ú6Ÿ¹r.â⯢“'[,°hkM­ld‰”g]K« {…_ÖÖÊCÎôÔ@c'­ÛcÐ\ŽDE’ÕÏr|É:¢pÆ‚ªeœØ¦N¯ðG|™Œ²…²›öŒÊ²¥0tpRzö{hQ&'ÞÉ;í©u›’›'“µ—V=òæî½¥ú³3rñ{“k¯õ¡<^Aˆš²Övvy»HŠÖ`öªª¤( †q¤ÍÎIìú“¦å¬œÍŠ_u-í ^K%+( ÂéC¯3µr¶7 ×´´º–l阭¸¼NÅ÷ª9i+gcÊ\Õœµ—36›JŠûJV§P]Wy³^Ô„ÖªÜ\RÆF°kµ´ª Ć ºÖw³1z•Q èÔR9oJÔd R£(QJɹ犤•@«ÍÙ ¥®dÜZÙ§SÁUo•/3µ‘L墮ë·ã<Ñ+Ï©œê#z2Ñ©ŒS‹Ë¹¿™*$'äÈôÍ©!C­CòwE2õW³¨žLP •ó]DO&Lå4Ñ’¨Þ¶$Ì™t’‘Ј$[õ„ °|†¦%øRҨؔ(#‰ÞÚ”Wxªµñ±\µº•EOتˆ`‹Hån*§]Êô­†«ª’ð*'eaH’¡Ÿå3?`ŸpÝoö +©vìë …ö5+$wì«è çàW¬ÆÞÀ¯ûÖŠçãêî¡_O ãúmôÛfÈýܤ;ú™àoÛäø·@üÛÖËñÏKUÿh¶Âÿ¶Mã'-­ ÿ¶Õ¶;þmÛ¹ò«· P´Ò eF<É»Ž Ø­õŒ#àÁC@NÁÖi2žhr£! ãɼ°Øk;¨Û@ߌt¬F´V#pkÇ—r¬è~àøÇ¹Pþ8»õB¿fºæðÇYó‚¿fü¢Áçùî þ:>ö¿Žuéè§‘n@nÒ.d ¿/(†?8Àl`Èí¼¤€ì-î 'ºoœØt88Ñ­æàt 5œ`_'ò[.оBð€¤?¹\¸°SupuƒÀ…F)Wüp\¨8>¸ Z ™YXîbCÀ Svp_ðGڲ˴Þ:þ6¶üY€ãßFÖöÁ?þq¿ð$«Fü »:Ž#eCZàKôƒþ ÎŽð7R…Žü±d]ð7¸DðÇCu: þ†%¹9üqÕuÃ?é °"þ1°èœþ±c€Ã6ÿX¢êh8Ò†“dÈ1ñÖ†™£|rÙ³2yú@p¦4Â7 ÔasˆïÛ&ÆÜ€nÚéžG™ùò&:ö†ŽÇÁ% õòJ:¬ìñ\:àæx7Ô±Ó{¼¤^M!Í“¢%1£²õFí(dÒ¥åŽ7=êuÓî%GóB°³:ܳ‚v\}‘qeo»a3åó…ʎžsƒi˸p BÃ6é1x¸a©`éŽñ©ÓŒ˜(Κ—«ˆõŽ¡«`Ö14¬;³8¯fS9¾^f×R|Ži&ýÉ—õ.fÝÂóFÂ×)J±°ÌЄS!Æ…8ÓA)¯ µ2Põ ›9ý2>ŠdΙ¢ Ûg“M¹cq²dƒëdý«Ñ“¹®Žú Ó=ŽäuC¾;˜ê1™wq:s@šÉó¨¾ü˜¶l'Ò\¶ °î5N¶¿\¦¶,ü7·JJ±”Ó0îÁÈž˜V¥á Æ´×t–c˜ÃéLˆín8YÂËH‡ŸÒ­öÜ9—n´—ó2ݪ˜ŒºéÖ¼Õ]Ûf›}îþ¶7Õ]䆴ÉãF7ó ÝÕ®¶›îîx(r—½‚?n}mö<æúW ®NtP­Û—G•údÔmÁŠ"ìR^ÁÊysgóªXœðóO…°ˆÕD7e=rbýÖpÆ¢«‚­Uäi‚oäP'v3÷_Ù8ç—‡ÿ,wç%çø(oœã£Bã§½½qŽÓÞ¡qŽòÆ9>*4Î1ª>4dq6ÿ4d1 uF:?ŒYF9Ÿÿ\ã[oœãoçø(oœã£Bã[ïãoçø(kœãƒNããs|Phœc$y˜7§óC»õa”óùaÞÀÖ‡ysB?Œ‚cF9£·Îñ'9M„ û9hOkëƒ íÌm Q\¼a:°ÌzZf‚° a°%‚ÕÚy{[7±± ;¯ ºæI…­û&ì!Œ¥×ÂvPô4³/$n&ˆ$é©+E¸„tfÈdˆÞÆŽ$àƒH’f&R¦Ü\Q†•0#³ÆW<¿hz­„-ñư«† †ž$Û¸ÁBÛp\Ä4R:#|‹4>I ’™zò^•/’Ø—Àuv&t’‚=ÙÞ%p²';ÃÀ ”$µ½€Ûž¬zß ™” "}°-j1²÷4,ýNÁŸhQlþIÔq2‚üp~æftö±tÎÕ!…´æ¹pVHÒn‡†$Ó¶Ôé!×)™·"~ ÚÍâwNÑXî­b`.Ip@¹iMà”Á*òê5x{äÉiÓ¶J 7;§ ƈ”°Âz’;üq×Á ÿ=Ô9Y–¨á_Nhònø—ý˜ Ã?NmL!'}Ã?¶ëåÂ?Öàw± þ±é¯þ±Éï7þUt¥?øG~Þøg‡¼ükëÞÈó]oìè|Ð͵`7¢Ò“3âF6Iš)Ç¿a/áø7ÐÛìàé¶’ ÿ&N¡9ø7»‘PÀ?7Žs?EâJL8{ÿUlSÁðoᨄƒôrÊ\9þ­ed»áßrœ2ü³ýÿv1z¸17޼á¹Ai•¹#‰O´œwüÛæÍþ•„¾˜Ž\ö¾#›IØÿ’à£9þqåw‰´iç÷/–4MäÔä|!`I¾,É`ɰdƒ%CÀbK8Zz-`ÉŽJ@À’•€€%;*K6T2d‰úI†€üYkäñEÚÈYÙýBÀB6\YPC@–H¤#`á'½$¹{QÃMw¦[;œãƒ¿=ÖF7h»Ãx³‡znýÞ/w ¹Ÿa.CCO¾ãVØ‘dÇó`ÖërNxQÞL³Üwršmb¹#TmỳTÝ 3ªºŸf>Wu_ÎÜ2;Wí¸nÛØ·‚wWm5ºX¶Qõæ$Ò ´ûêàê±ÖŠ%rør,­Ï’-ب>˚ѥƅŸñ©Ü4dœvrÌGö½831ùöÁ¹qظìTNk˜-Ó2hï’M§ÛDk¯~Ìf*FøÃ²&tKr㛬ٻè´»í¼Âˆ§ódÜЧm(c`À°­_Îð‚‘¤]˜’ÀŸtÒB¦d½1¼Òîça«ƒ ôˆ“ì™èÞaiâSê"ÜrÀÜï´ãp>Z{·< l{¶T ~Õsˆ²ôC7;ÕÌÃlN3oÑIÕθòh½‚{±x¾Øi)òófÉÍ d{wès¤0ï*Û9]î€yí‘ùhÉ …áÆ5®…Pg ®IÊÖØ¸:¢…ÌGó Õ§lÛ² Ìï²Hlø¦m0ê½Òßö–Nñôy;Á$±Cuœ*jpMMj–râŒS5ÚÂY©jÇ`8sʆzac·Šõt¬ ö°dÅòqœH£1È2²­ØrÕJ´kvôŽ{¶­jpk-dø ÷§ZìѧP>D–±c ߃0^ߪ8¨øŒÑÄ™7›ÿ5s~aìÏòø§qŽ±Ã±qŽòÆ9>*4ÎñQÞ8ÇG…Æ9Î{ãç¿Cãcí­M‹Óú§M‹Ù% 9œ~¾Þ†8¡ÿ\ã|oœãçø(oœã£Bãåýc|ThœãSás|*Bã¥s|ˆ5Î1zܦʙüÐô,½ q?L(z›*çðÃø_6Ä ü»uŽ?Ïiå–¸·³¤¯F¦Bêw¤ë+šS+¯÷R+/÷™ŠÊç_h²:uånfÜÅ«c ÊŒCå£tR4 utë" ##\Y QÖ–ÖŒ•\§Æ”Ãʧ bóT^å#y4¸†a¬|$ævÃxV>ƒGQ–Þ+ÁîÀë›î`§IÒñ°å•Ø©®¯r`HšÂŒ›4HÒî]â*ç4¶ƒ=•OÏÑíTÀ“~š€`•ÏÊA¦¾¢\å³rpoÂ*§S΀••OÆQrxZù Üz£ð0Y·Nàr¨ÊvKn`+¤¼öÂ)°]ÁEÕ´p#¤š6¦ÜK­¬¦H µ²pX¤4¶ŸF*c{H¹—ÂXø` å¡%™–QAZ²å½`Z¬9aR ’¡Y±êIİ‚ÖÏþž¬;HJF‹%ùÁo”2ØÓD¤ vÆT’:ѽÑüS)ŒE²|F-oµTJø¹R ¯¶¢&¸¢/§ùË"Q*Y]j©•E‚!ªm×ÇóÊu…):ï"ÁÖÁBýo]–T³Q ]·…, ÕÒuÍžQQÝÌŸG´!CµyÍm 1‹´þaâµÈÖsYîɤJ·…ðIWÊ¡”íjü‰(L$êñ#R“JÞ¨zŒ˜½%µ½WÊ¡HZ¤*D¢Ÿ±¥ÔæŠÉd£ŠdÅ”{©Ö¯‹XW$ én‹dÆœC©,Öü,„Õ"©‘« ˜x ÏE>CCx©GN‘­ÉÅÖ‹œ‡²"Áó(£pêšu¨|>ßÅÖ‹¤þ,[/j[Z`ëEÕ-yUż{Y¯p[‚lB~‰Xœ~a ³5#ró€HÖKOílaÈ&Sk­ ¹µAŽ~¶ZøÇ€@9Ìø‚Àó+ƒ@9yDä»§ˆÖJqƒÀ™<(uÀ‘¯çøÇöyÆXF: Qü;ÖØðOêãvµ߸]-¦Å?¶«õÂ?9Áþ@¶™ZZ`È&2¦u‰=Ô>N€lìR (Cc@O’rlÖÛ°«L²=Ù6/U3lÖ§Û!°™dh+è@ 3pù‚@Vº¸a]ù öÈ'Eÿj!»±£Ž}Y2¼a A ÉpÉ0pXö¹càÐ.û‡çEÇÀa•5Ö³÷@à@{åƒÃ1Æ0pX5c ²t0p&ÛX6 œ†(†³Ø¾· ¥™œÕv ­aðAg÷‚g"äÖH§‰dǼ{éSÐbš­HtÞ '”é€àœ7e/’‹²—zùZ#Nxݹ¤þ‚A~ÝHXФƒìöÆk‘ cÞ`p%»ŒÁà2¸p\ƒ+Ù• W2ªÖ`p€8 .µá—!Š£ µp8(¸,‰ÖQp¡ÝáAÁ• Ï —ž†t@І+[ ºaà‘‰a K?—”ϳ$ÜÜ.\lÖýæÙÜ0o{q{‡l ÛþšÖnæLE6çç+£Õ™ÒŒFzgÚIç±éoŸ†=úy}½ÜÍ=²/œÝï2-°Èàh ç‘ÝN•áÕѸ\{7­´þìGs3ºFºrgt ?úŸcJ‡çÅÖ‹?°â*Kf¦|!&ÔqÅÊ…gýZÐÚ¾æÓ€¸Yàîq™ŽÔmSÎÌKjwét±>ö´b:¦,‹%ÌÜ¥l‰?f“Áƒ™Mö[vHAŽÙ÷ƒ^E$™O‘¯?«Ûy>¼sôˆc{0¼[ ÿR†à°ÃmL 4±ëu1ö•ª…ÇÑøìÇ2M7¤ä¾Ç"îʧ‰¶ q9ð¿Ó±B±œ0š£g¸.§ó^Ø/øÆ„6¡ Vð ø`eTÍÉ8´…9"Ü©¥_á:“Z[ Fø½.\æL´“•¹EcX‡Ps˜iÑ6÷JHV²Ã8ˆoà4Eß–™aLF·Cœíè€ÈCˆtk¬eœI÷ì £U¼rg^šyåÎÎ4 ŒÀiÙ6ÇÃaläë+7¨¹åa=ŸT­/®sNv°ä᥊5uîªØ;8¿Å–X%Æq<“ïIÒpt¸ ×ÐGujj õ2S+GµP.#ªöÔU›EKØ+ºÔ ³"…h­k4þ]§mŠ„©ÝWÔiáH±¢IF@ˆiÅN†·x÷Rðoõ–ÜNÌêÃ4ylnÔ-t”Ô¦ÎÒêýX¥{µ¶ú±ŽK3(¤qŽzkÜt\[ýXKn’¬­~Ð<‚»©eHØ­ª²B¢®©v|«^E“V¥š ×ÝZ§'Ç\‰d'Iˆ͎ΑæZÇ¥æB/xÒ7VŠÁÔóÙUëí*NÇ#Õ2Cj¸Ô-Ü]K½†«î¡å‹|þª†‹¼ +«DÝK ¹ §:Ç{k¡¤ÈÊ&ï]‹)[Aß¶–²Ô[¶‚:Ó–ôPäÁûXK‡-Û”S[—Hª–v¶RLÒ´ü“%â¶4®rT‡µ¤ƒî Úôq´³ßhÝ´´´•%Y¯¬ö$ˆy§è‹–dœ‘Þ8—EfÐb™ÆI4Úmj|Ñ8ƒG´$£ÙFã„"Qã §@Éf|߯)Ši«D¦¹q¶a•ët»ÎÔbØfPãŒ?ÑcÚg扞dh¶lIÖâÜ Ñ6¿Q¢]‘ÕåD3\Gn^º–C³@ȇÆgŠ \F SãÓÁ&^]f°L­¼>oÎgv‰ªøìñøE ×­IkŸy’õCT‘ˆÝøÌ«<â§©é×çµñÑT½n/˜>Ø2ÞÝuEQµà“ LQT-øÄ!Q”†»ÉIÝ9*-U”‚r,ŠRÀ#4yöªŒ)’-Ê-Œg㥺®ÐÔË"Á˜®uó,‘Qk»¦.-1õMê"›.¿¤÷ZYÅzµ6é½"×jÈÞ6U"V¦u-ð—u-Yã&lºØäa¤Vºª){ܺ&q‹¹À˜6TMx½ë ‡œñ¬nÃ'Dþ…‚MáÚPÐaÑQ+/  q­ý‡¡à@1P@AÍrPÛ“ä )ÑÈÓP°9ž ¢™ÊAkdw@°Xpï hÍÃfk¿` È•ßJr3š~ ƒéŒÈÕ¯Ê_8n°[O½<hýÚZϼŠó\Bq!àÂÁSsäÏsCà´.‡À©耠2ÃŽ€|}À‰G‡í4:4 <8¬7›à°\=@fÈnÍÐÄp`ÓÕp`_öà@ùñÀ¬=hÆÀn‹Ç°ocØ·¡¯`·e騳 ;ºÊìØ¤>¨÷ŒØ•¦9ø×ÍD8þ ðÏܤƒgŒáŸ_Øà¯Oåüuœ×x௣ Ý¿Ž¤Žþæ>;ÜD䆿nfÌñ¯oû•á_G7¬ƒ­ÍÚt6¨]1ºä´’L‡à@ú€£}€vpú@k;yК`¨e:h¾òÀ>ÚÇ2(3´ö•¹ð¶^8;´—'öùN49È»2õ@î‚—/œhˆup‚…>8qâÕÀ‰Ö`'Îõ>¨ÑE ´]ŽƒÖvÓ%uâ¬*ÿKÚ…®u"Âï·QöŸ%ú-ì-êÄQEþ¦,©×l0)·3&4I³*GaÎ8ó| 㺾KÔ9²/È’œãWævû³GM@þ -,Ñù1’£9£Ò±À|5UL–´¨»,€+ ý潃— °´°LXÒ/W’%ð?u±± \ë‘%·ÓZNõuÍχY—¾r´A $°2Q’ (~aX«ss³hò€;Z=–(h™eF„:^#õŠye©-2ÈdJ+Âj]f z«%ö9÷Íåe+_þ³lþi¥c$ql¥ã£¼•Ž ­tœ÷V:N„‡V:>Ê[éø¨ÐJÇÈûРÅùýӠŬÓuþ0 ô}å ÿs­tüm½•Ž¿mh¥ã£¼•Ž ­tüm½}Œ¿mh¥ã£¬•Ž:­t|Œ·ÒñA¡•ŽçaÞœàío@߇QÎð‡yS?L›1üa ¼³0È9þ»‘Ž?Çi*͉îëÚAŠd†G^d†”9ªEÀ2”úÄ(}©ÑÖ(kYJûZ\îÚ g“ År‘ÌÖÊù®HÉ»nmÃöHí,M? ]Fd3zjövîÔú›-ì©Í^ö”Ñp&•\Ô‰< ˜]iˆ3¢i–Ò--d…õn¼]¾ƒ'ói¼5@@šíOºÁ…LH‚æÀ8m{ƒI€I¬ù p«moq lk žàÿŸïwad“cö"«ßø<¼ VʹT €Æ7ëõq€Ø|‘R˜•©!µ[ ˆp Ú6 €÷Ðø¡fä4H²ŽÒ¶µ$4'¥ñ9h`ëÕ‘iÛö—ÍÙi|ÈYŽŒ~ãËàÚ¨ÇÔd‚‚SÕø„²/‘¨7 ç¬ñ eª™‰äÉ@Ž«“×¶µ64GP$-:‹, Þd“óÉZð8EîB½R‘€8QϵəE‘͉R©p€£Dä(QGZ$+²ùáÊpÈÃÝá´‡'„c/¥Nàü‹×ÑA¦¢Ä B$FplLàP_Ђ‘`ç@ù#1z {äë)Ï…ÐH$!J ‘›X¢&`Ý5‰ºþˆÓ'¥´Hgˆº¼ÐpOTR7ŠdŨQ¹ÇȲÉ)€ &tÔËzR¥Å§O,‘Íhr&¡þHã\^S'¦5—N¤ÜäpD½‚Y”;òR† ‰Få²”wŒÜçi ©ïܑƃ ÄH1:/ ¤N4ECL ˆ%$é¥?*rÁgUüþ“áð€Ÿî:ø8tð[`žü8Å$x©Òk$_ØÇŧãÂ>›}\Å®ÖÐÇõçŠÌ}uÍú8öŠ®¹4€Ù7ôM|§}Ã:m9ôuëDáÐ×u:ô5œFä#ÝöžöO­©pOºò´¸‘-%Õ~÷¤¤zÆ JJªÕ}î Çìž¼•5`$Ö%Ãaoƒ;°·­k‡Ã—«– ö¬)žÃÞ²^ï{ËÎqØ[Ö(ÀaÏO„0Ø[ÖeÁaoZ—Ç=ë!xpo¢­›CŸõl?Ðghè›HC8ÐgÞÆ>NßôÍbÕ†}³ØÃ>ëEx°O'+öMtÎ;Ø7³10†}GbØw$ç:~/‡?‡?f‡?+‰?ðÇD\dóE2.ô›ºZøùœ:øM(zÀ ÈußDjÜ¿©š|°o¢_ÎÁ¾¹ y ûÌ}<Ø·’¡ªaßB›*Ǿå<¡aŸIr°ÏÚòìÑ#Ž}Ë(-Ç>ëKp°o-£à ûv»ömí§~ o£õþ>Fú6ºhèÛ]wfú¶Föù6Ž_:È·Qamà'¶B9qàŸ´h˜q#[,LŠŒ³t¾¬ÿ¤Óƒ¾&ð$Ãxs½‡tÇ,q#›$¶y<Ï$¶ë”žšêR%XÁ~¢À”íc&.ëOè°¹ìÐ@‡ÖÕ0…†¾l«ñ8@èe½ Å—5¾q¤_ á;‹;*Žè0°n œŠÕü䎇²1É@ér^ødÌvy7Ì`‡zÀ’Ò¢ªp¢î˜Q›X¢†À4Žë¢ñE’cI>Ù§ R7°Vm7‘/’ˇd(y]j«VK#Ábd –0,KÀìcQ¯j^Ö= æe–uüqó±¬R×MŒH.Àê}˜ŸÀþV i“Ûëåm¬ÿÃ=’5ì4,óZ–ChŽÍvX…ù>ËkàÌ?ZÓÎ63jM«S†›%Yª—'ƾž&Ø·ÆÝ,à­Á£[Û\EóúÖ…ã|ˆp8oÞæ¼JNØEpî1Ö¡g¬ Í¡pŠ•“;ÍS£&¨Y§Wg‹º&æŒÒÀγ¹ÞÒú"òÅP:ð‚§9fë„!ǃŒ,kiæEu®ß‚Žn>»QrÞüÉY;. Ñ!ˆn¸Å•n±x”¬C¬ÅHF81c³ä„Zž(ì\ä°¤)‹Ø¬³p êÄQ¼¹ü¯i¤ó c–Å?tŒŽt|”7ÒñQ¡‘ŽòF:>*4ÒqöÛé8ûégoM[œÔ?M[Ì6aÈaôðõ6Äéüçéøã{#üÐHÇGy#éø(o&ã£B#Ÿ o¤ãSéø(m¤ãC¬‘ŽÑã6UÎã‡8àèmˆ“øaª”¡·™2? €f#œ¾¿ÛèøÓœBPmk!àÚ/åâXUº@tÙÆE$m8FÌ¿—Êt5ºeeϸ\O ¼-iYìjè±ì¥îP×¢Zm*ƒñ’<­€‘”˜z¨UpÁNéCEÂB Óf0w\Š̡ԘY¢U5c#’U™e3ØZ¼ó¥UP‰L}åÂSdêOy˜AÁ©3´ú°…$V0 Ô©|Ò¸Ò@&©k¼Hb¥ž8’X÷€ ‘]”I–ñûUKîš5CÜj¡Y\ù˜sdä06+ÔTd—J*E€?Iê½Ñ/ø å”ÍrXÔϦdÀ‘š6¤&¨»"’óïE¢ž.Ü’$KZT×H$=æß‹¤ÄôC‘ä˜K!õsê1›9dÉŒé‡* ŸÀè«W(¥Ÿá8FICõih!n¸Ž:©Q¢~l¸¹zº"ÐÄ=8Ãáà0Ë{"ÉFj‹‡ãw‹þ»úæaῇI†/’+ŸG>MA!~Sø|ˆ'NÙ¢Å"Ù1. Š¡¡‹zL¿‰†D‰¾!ÔÒ I$=Pª¤#i¨%ŠŒi4vTÛ"6‘ ³P£º³,ò‰uʲJ1ùP$5¦Š¥g¨,O$(j°*å‰ÐÊšÖä:½"©‘´‰ÞJCg1 %r"1“N ŠòMÓE¢„€FòŒ5'Ôè¹ïE¢=(1\È´WVA$3æÞ‹¹Ó]ÃE– Ý•ÿc1ÑКAttD&àAÀÚLäÐ:¦žh?«}! 7Ár,Ó¼e `A}ñAÀ‚þ¿€Ò¾' I{ƒ|!àiK`È @ô¹U€•›¡¡KŽé?Rõ}h@ Wù§HÚË«]x*ø ­•šàô+@oäÈÅù;âŸ4mÛÿNµ¾áWëïñ%Wæ½HÒۜǿ“lÿ¬š÷àß¶¼,Ç?’ ”Ìð$ØðþYsºƒÛZÔ8þÙ˜ƒGü³ëü³{ü³ç;øgïpð¿óÛàÅñoRþñÞøç“ìøÇà ð?V,?r†3YV§áŸ´oœÿD-"#ª«ÏD Û¬oJ0þyC)Ç?VÒ«ÏD‘#c4ÛñÏ›:þÉrˆü•¶Á(ÿ|9þ±dÖˆÞKÐñO;r8ø¹ëìà7-ÑÀob[:Y×T 9ôq?Mè7èc#‘BÞýiTâÐÇ–«]Ðç¶Æ¡%òM¯G4䓎,%Bß<¥h€>–̸Q-¦ïʤ–®†9òõ"Y‘¯ Ú#ß+}oèc»›.ìóƱ;©]ÐÇÖ»Äíj‘h*‚a·Bœü1 ´È†KÓ¶÷«E²br¼  hvÀ‡eêíü±{ãðÍ5&ë‹$Gº¾òÉÎØbÀÝY²â² Ç=‘´¸/!’ç‚WIŠ¥ácJYrÍ: t)Ø—aÉýõXr±õ"©‘­WIT\E"I13B%—RF‰*®œŒ³0¢úÏ’u­‘ Á: ]já2XA‚«úH°êÏ[™a`I‰lý™3.gFÍY7#u¾Œ²>Ë'Æî|r3ˆ®f3E•.»êÚf–—UT×¢Yç£ÆfÁY¢~¨YùÎM`âÖ­H®ì&‘ + €ÂG–ë6ÐaÉUVùó·›E2.|ë8Ê!.“ÒÜ8G(å£ÏÓn²äIù0ôÙz’XeƒA{·£þùxôwõE²cÍç¥ï+Ðf’+]Îw*I—ÃÒ׎Y÷•OKE÷•OK_±.±òÙèHT€óħ¡#—Aý+>ú¼^.Ÿtžb›€*çšG®¾2 ‡²I£;zñJ$YÿZ§MÒºÉú:2:Ñ:ûÂmz•ˆ7†&£8è°8yãTgz j6 *ÖõÎ £bïà¤R­–‘cÄSµîQNNYˆzØ«fmàêÍòƒŒ8?Íi²1ž"U/M’"S¯Ý˜ôFpl“c’‘´©šwP“.ŸÀ‡Lë.,6òFj‡@lhQá!VëÂ0«\%2õC0—OÖ}æÚ4IkHâ<ú¥“õ‹,Ð_1œ®KO—8€¤«§þ?üçwoþòŽ2çxàMòE*þÍ÷/²Žyà–b«p.¹§zûâ7ÿñ%ÇÊtùÇw>¾úð‡÷?|÷þå+^²k®Ç|ù_¾ù«ÿæz•Ø¿ÿ+_æ—‡ÿù/Sx‘ëeýݯÿîÃwß¾üæoÏ3{ך¯{æ_þç?3ï3,Zsñ™ÿõ›Ož×“ðÑD ÷ýlsG÷GÿéO›^Ñ…èß¹T 4neÄ‘p¾¼÷Û¿yüë7ÿí%w¶_©?~÷/UÒÃÛ·óò•þcIoßþKÁ‡J#zâ¿•Éw,¬ÀäëÞôËÃÿ ^U\ÂÕ¯}U{Ëœóãwÿׯ~î5uûíëÞñ cÿ ^O''Û_ð|.nšZäk}öŽÜ¨ì/½cæCÓÊÒöf‚þ|ÒÈHÒx¯y6ÕxŸ‘I°û"s7#>£,-÷pAÓ”Ì9¥Å.Á’õ„Ü3äHl7b‡â q †PtûgYUn­M߬p’VÂ̦—¯ÈIåcûËWuK÷·ÇLbm¡˜s?SxÎ¼ð‡‹§`Üg^øx Æ}æ… ¹NÁ¸Ï¼ð!ñ ò§šav¨æsoϽÌííÙìÙÛsÊËõög£Ò*n]Þ•>$n]^•6"î\Þ•>"n]þï^å4¨þ'}ùáïþªÙã*›#«ùðÍ·/_QØÊ`串ÙMZXÊ~d¡ûÈ¿%ý7Âîøƒ aùü*¸´Lyæ. œÒàæÌïˆælÔé0g£b‡9åÕ|Tè0磼Ü ælÔé0çþPè0÷§.PÎÀà©8©‚Ü:FÝ?a¢ç³ÝŸ›èýʼn>•öB±òÏGyåŸ •þÑ<Áß?Z¨üóQVùçƒNåŸñÊ?*ÿþÌi®ZjòÜ,ï?q–Ó³³üeu>)ö>1EÃGyІ )>Ê7e|THÑð/æ)þÅBІÒ b)éІB—B®ùeo¹ 0‘4^ðÉþóK9[1“§õúý‡‡o~úÝwÑ•ßeÀ•çk¼â‹e99J˜A¹Æ_|ýÓ·¯ßû†üç‡oß|ÿýK‰69=ï¿ãë½ùéáïÈxýÛ7?¾ùøæ»ŸxÏ¿y/8% `Ã;5ùµ 7“™ˆCþŸ7?üá%Ç–­ÌÔßG“#“1ÛÿA6•»€ìIîò?§áq»¦¾dÜùë'¹3Õûñwú+¯±¯QèÒÒdx<¾ù ÿ»ÖÇ4<Œ¦wµöøm¸ÍKø‹¦H/GÆr-¨—…/ñѼ?¾£ÉçAÛ¼æúãáÂ÷ò\õõÇ7ïìáþEGÑGˆÿÐO/ÿOCÿøÛ—ü4-³*›7íû‰Ëãë8ƒöb5ú[V¶q¿=,û«¤âß¿þðQõ#K‚ë7ÿþÅ7ÿÛo¿×ï»ÊÞïX3¹ r:×™äÙ?¾ûCõ“ܶîúøñz«÷ßǸžãcüýëq—<ïxû.λ>ËãrtùJ#±ïðx}ä¿ !<´â½ãkDùõ´o_ÿø†‘ë¿×ûkÍÚKñ )ÏõR¯I±1-ö¶—¾¼þD%tR[¥¹úà?xýÃwñݿա·íéŸõa%Óçç‹©¹ðýüb¦C"nùZPo^ÿG½ÃŠÜyÆ‘¦DûY,œ*:¹¤1Þá¯\n³ñ.ùã»ÛòØZ¡÷|÷ñ÷ŸkžÊ.]Iif¸Š£õkf®iý‘ǯg´îíK³,QT£Áú' ×>ð1 —ÄÔ}A‡~|ÉùϹåFWc8J-÷犿ýÁ^‚ÕLÞaäÇO4,hßn.õ¿Å;õJ“øÃ«ßG›÷ߢ°ÑÕ¡ãÌVm?3[Žmú›Gùäÿâ×;Gbf’?ćø={4d>0%1ÈÅèyH> &…eàßê@é‚q®õTWí!¤Ûê%ï»R´Z«Ýõ#†ô8„«ŽEéº_»‡¤šÉÁÒ!ÿðÜ#ͧ¼vÂ~óHaú«ÊåËi=þJƒŽ/í•/*ø]´À¦ç‚Ã_˜Ç"ÿÓîóA~HÓ06N(÷¢ªôf_7¡ì~Ý„–=ï ½/ÆúÉT®BËÿû³oÄ»Šì”è%ÿçg4ƒë¿ç{üŸÏ}vNçdWû>ûQž¿yI/+£n÷k=5Ñì0#ÒÕV L¶š¶oY>ÄŸyýe¿å^y7 ½þøéŠçOrc.Ø~óã>B•Ș||óö;<\×¥ÏÕ!õçW¾¾Ë56oNi˜£¿~våY<ÿÝõó•ïŠúå•OkøW¾½Þýqõü æ²×w›úé|Ð%¯ùHÏL—ÜP8øÉ|õŒeºŠ¸Ï#Îss…£uùëç¿Vc*ôo$ušœ8Áñ5^qÃ0ÎTyÅg—µã{|:‰d`yãç‰ÑzܶQí¢cõ¶ñ¨!Éû É\û´h§R?3$÷ÍØP<†Qßþá¹+ñ)£áBÏÙ£û™ÿ‚‡¼jrøc<­¥Ÿà¿æéªË~îcT¡èêתù„Æý¨¹]ê«>Øì^Ò@°_Ùÿb/œ~PKN¢›â¼åBCŽnÞÆ†à »íÿôì—c¼f»í—]àŸUÿuùÜD£É7(ëžû/ÏìÊÿ„3ë&—Õüy åSªÊ<¸ú„Aó!Óó´Qü}3¢ý”…­á×O/_q}Šýs@17»ˆ©ç”É¢´GvÝuŽî§xÅù%|>¼âþýug½Ã¿û‰£26nýñÃÛ¾}ýþ5¶éC×^$¤ü£Ænm<~§?Mƒ1Õ=þ KDº8Óƒ`ßÅïßüVýð¶—^„;€ŒÇð¼ÓЄøx@ßßap¾cÓ÷Ÿ8 'xsGõr©Ëxÿî­]s=þ‡×ïÿ+󛟀ý…^ÿ? \ù ÞŠp—;`úøæ™Rq4hî~ÖßÐW£Y}CñžþE3ûÁÜ•½¦D‚øF•Y‘}xã±Úè:[òq:¹M/›}µ‡ïqn‹Y=öøã‹ê÷Ü‹÷ù? æt<Å­WÌü&Þ†êU“ÝOÃ~{~Ï ½Ðç{ÃLŒ]àô÷ñ1_ßsòøV—ø¥Tÿ•<)}ÒÞéyì­UY>¾´OöxÒ‰wßã–ÖÿY:÷ɳè•÷ÚŸq3zúÆ¿ñ°^œ­pƒÒõús‚”Io²#¯1"ÏÇ÷W¨öƒýv6Q÷Âx J¾Ž\bvˆ2÷Î?ÇÅïòs¤Üœ ìtÒöÝ›Xä=Ú§+ï‡÷òõz­Ã‡&ðýìä§<ãEj¾ýö6ïyõÊd´õ9ÉO@Úö¿~i2þáͳ߄Ì-b`RÏÄÀø—¯¿$fÝÜŸPŸa×äÿ^ÆŸîendstream endobj 250 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 484 >> stream xœÙ&þLMRomanDemi10-Regular‹…ø½ùJ‹ ‹ °øFÕÎÉaehBFIˆó\÷¬ÿæ…¯÷_ª÷-¯¢÷ ÷2÷øt£‹Ÿ€Œ\Ž‹˜‹ ÷lêAÅûjû‰1_®x¦ª« µ«t‹ “©‹Ç¥[Ggû$ˆû[‹"8ékÖÈ´®¸ v‹V浟—‹£ûJ÷5Junbt´±÷÷—¥ÿÒª…³÷L¬÷:¯§÷çê‹êôøJ÷ x‹†z‰†}†sNQvc‹û‹÷Æ÷ޤ’Œ§äg÷ û/û13û û%ï5÷÷¸ñ ,÷ûOh¾ŒŽ÷ãê‹û#tÿ+Ž‹º÷Ì‹¯÷Qº\Âè÷÷7÷¢ø½ºF÷šÖsÍûHD‹[coXŠ÷ã¶ûEƒ\É’‹dü½F\÷Ž÷ˆºF÷e÷غ½›Ÿ†3û¦J\÷Ž€–øP”÷^ •–º ÷"  To ¬ŽŒŒ’’˜Ì› T/Ïüendstream endobj 251 0 obj << /Filter /FlateDecode /Length 13489 >> stream xœíÛo%Éqæ÷™ØGï“÷o>Ü5ª*/U¥… X¾Ë’aK HðŒàN÷´(‘C™äh$ýõ‘‘ñEžsºgFƒµÖ†=ä×Qy¯ÈÌ_F%ÿãz:Î×ÿ¯þ÷³Ç«éúýÕ\ÍM½Öÿ|öxýƒ7Wßûɼ“rܧ}¾~óù•<2_¯é¸Nór½îé8íåúÍãÕažnÞü’ž(>±ÎǺçžzóöê“ÿÜLÇ©ämÙ÷Ãó»›[þm›·ºÞ¶Ië<í‡ûÏð_^€|¹¹M‰²×Ãç ?=‹N ÿä»ç»Gͧìy£Ôž9õ–B9ÜaÂoY^Ž{Ù(…Ûe=îu>„2¢õÝÃýËPy<¯‡Ç›¥RA–×ðÀÃëýíËëÝë;Í}]?¾{þÕ g´/éðÔ~ÚÖýð¶ÈTÃÃã“dK94PÈøáåæßßüðêoß\ý+5ÿ2_¿áîÌÓvÜÒ55özLóušS¡._æ=Ëzýüîúg×_P‡¾¿Ú韷åú+úå‡ô¿¤ÿûû?~õƒ+ÊòYëz¬d¸®Ëq[©ïç|\®çu*ÇZ-ËBy}Ôúêó«|¬s)µH £OÕ‰Ìòzýxµ¬ÛÌÅ3åáê§n•ær,;Z©¬êRŽ!)‚ÍN•Þf4R­Ö%—ãžÀÊ”fµ/{¯î£üºæu;ù÷e.û±Ì`bJ°J;uxB+U‚U]¦cÉh¥ Zy[gle:&l SBcÌu:æ C•`•×éXƒ•*Ájݦc0!4ëDܱñM VyšÓ‚Vª4«m&Oµaû«šmÊ4C¨¬–5×Ъ«Br ] J°Zi­­TA+ª,¥NM\Ûÿ§4~ò÷P«8)µUœÇ · ûq#“™¼È²5eaIJ¦áPD©Ç©²R¹M¡Çç ?›ÙfÙ4a*$ßy™¥#HÙŽ)£IžiyŒ%&¯ìCP¡áV|¨$ö(PÃïTÅÒ¨Ô”!ãZÛ Â~œ8òZAjþ9E…ÜÜ`³±d¿K=Ñh©F%óž"·YB»ÐØ-{(0Mž5šTš,ƒ@•ÄfÙ§6\P G-¨Ž…™ª~§ ††ÛçB…º7%ìæ}ÉÇ´Ee=æh“¨†a§y®ÎQ©Ú¯þÔ~\ÃÚ3UÛe'oº &M´hRšQƒ@Õ Sè‡`Q©’áwªb …%“±›wòd9šÐJ¨ÄvYkóKh³³ÿCe[xÁ”7ªbÊÆ)’’¬Wö¥uí´¯´è¥ðOøÔNµÉPže"71ï;)TÑž"eeoÊÌr'%±ç Õ4 TÑh²,4¥z‰I(­oQÙš¯ê¾}™ÒÌ“ç:Ñ‹§¥!·Ã½‹ÊÖ|(äwØWM[¶zªGemÎ žçö¨¤cljsW¨ì2Cyîä|j+ábU¯m¡°Nì…¤¦uk} ­Ž÷(dZFek] “÷™STróY¨¬­‹!jÞ3'÷Ã>‹+£ Oþ'6û139 öY¨”æ´PÙd¶vež¥{gZö±ßòÌç™Ö¹Ü‚¥yEVh ·>%KS?J»Ïä…– j] J’.¥6×…ÊÎ ÌŠœP]¢Ò–¨øy¡5°ÌmVB%7ß…Ê*}ì y¢)æN¾¨õ1(«ô±çNÎh‰u'g”b ɵ>eo. rF%–œQëdP¶æÂ »ö¹-}PÉmnBe:™< íª¢’á-¡ßæ'0!_S!W´„>¦æiÓ*ûÐÇô?ÒÇ ”6=¡²I÷š/äŒÖhCÓäsO«ô1¹ em -³öÚšrî©XEéyž¡@!gÄS*I\(µÍR2µKÌŠ|QŽ&ä‹BŸ/äŠjlÞ¨‡¶Å-*«80W¶æ´ƒ’ÆŽƒb!G4Çæ#G4ïQ©ÚÁ½äˆx†r%‘'ÊKTÚV0([[z‚Bž¨–¨ä6EõÌ9¢5´V¢=Ô¶E%ÉJ•þu…<Ñ ”M:ØòDK, y¢˜9¢†%G”cÉ•Á¦ÊüÊ.ó“+äˆÖhCûüm°Ùd‚r¥FòBÓ`° ¾«’Zb¥Ö,”wÞª›,W¶I&(P’LP Ô¶Fe— ÊrCm‚¥×Áf“ehWèG™ @)ÚîlÚÃ]!?M˜È—¨¬Ç0ØWòByP’ÌO TŸ\Ù+…ÜÐ:G¥èü¤ÊO¯ø¨j¥µÝ·h_ÈtÚ÷쀢"´“' ¹uæÒ(Øc n£m‚v†Ð!(”P)(* ƒ¢ å P-¡¨ EI(*BB!e%¡ ( EEH(¤£$E¡Ð†B½Á”…¢ÀPÀ_JCQQêÐÌx¨+ D™u>gDÔmŒˆºQPŒˆQ4 ê‚òP‡:z5ÚA}Ç¡ (í ¾óPW ˆ‚¢DE¢®(õ¬ Š‚‰@Q ŠúCEAQ( ŠBQOÇ (/6—k„¢ (uE¡(* EAQ(jŠCQËÝ¡¨õ„CQW Š‚¢PT;´3Q°P&êŠ0ÑÞ‰Ba”‰‚2QHF™(*ÂDAQ&ŠŠ0QT„‰B^ÊD½RŠD*+¨¬HE¢•‰¢Í±·!Q@ÈŠDQQ$ê Ù((‚Dá)E¢•"QT‰ÂSŠDÑfÔÛ¨›EE((ŠDQ$ê­cHl‰Bî†D{Õ‰‚‰"QHF‘(ÚEE¢ž°!QP‰‚¢HÔC¢ï…Ü ‰º!QPrœ ‰v ß‘((Iû¸ç¥HE¢^fE¢`£HE¢þ”!QPrœ ‰v¥#QP‰‚ H´WÝ(ŠDý!C¢`£HÔm ‰º!Q°Q$ê6†DAQ$ Š"Ñ~fÒ‘hDÁF‘¨+†DAIéNG¢ uÁ¨P‘(F<E‘((ŠD]1$ê-hHl èHE¢ Ô±ƒ ‰öd;E‘((ŠD{Ût$ Š Q‰ºbHE¢ (í=Þ‘h?êHE¢ (uÅ((ŠDAQ$ÚO:%§v‰z™ ‰z*A‘¨W½!Q70$Ú;¯#QP‰ºbHE¢ (uŨçnHE¢]éH´§Ó‘((U×6GE‘(*‚DÝsõ„‰‚‰"QT6 º¢HA¢¨ŨçnH”wPŽD]1$êOe!†DQ$ŠÊ6trG¢ äè½:uÅ((ŠDûØîH´ÿŽD]1$êOE‘hÊ(ŠDAQ$êŠ!QP‰‚¢HÔC¢ (í/zG¢`#HÔC¢ (õd ‰º!QP‰úS†D]1$ Š"QP‰º`HE¢ (E‘h?€ëH”2œÙ õ_ ‰z²†DAQ$êŠ!QOÇ((ŠD»Ò‘((ŠDû¡¬!Q‰ºbH´Ÿmu$ Ê6œÙu$ Š"QOÙh?ëHA¢ ¬Ã‘]G¢ (¥Gv‰zʆDAQ$ Š"QO§ÆZeâ :E‘¨gdHÔC¢ (E‘((ŠD]1$ Š"QP¶ád¾#ÑnÓ‘(Ø(uE‘hïòŽDû˜4$Ú{G¢ (E‘hw‰ºbHÔŸ2$j †ÒúášÜ-–ç1Q;Òt&jµp&ê Ò˜((ÂDß}& !’‰º¢¡@I50Ô E#C=ÔRCCAÐØPWzlh[µàP°ÑèP·¹ 6êÊåèPP4:Ô E™¨çnñ¡ h€¨ƒJ‹¥D®àL€§0Q”‰z\£1ÑÎ. ‰:Ó3$êLϨ+ÆDAQ( ŠRQP.SQg —©hªSQW”Š:½(êEA(ê‚AQPŠ‚¢P´gdLÔݘ((ÊDûC†D»`DÔŸ1" ŠQ JDAùƒˆ((‚D/Þ©HÔ…ËH´+†DAQ$êœ×¨+†Dý)C¢ íŠ!QP”‰6U& Ê©·3QP”‰vØjH´ JDýw¢.lÚ½&(Ai¨ C»`,ÔE¡.( uA@h‡Â„:À4 Š‚P€œ BAÉÃ>ó›€PT„:Ò¼BÐYl((ûÉ„ºRHæ Ô±ç%êÜà›Ð^B¡®õ§,6”:ì3 „"ä\⬠ԡ (….U ƒEA¨+BQÉaVê ¡(E¥ÆƒºBAQŠJ‰Ÿ.t Š‚P¯¹PT„ÂS BQŠŠ€PP„¢" •¿`0ÚßYã ÐÆÂAQ؆ƒ㠨䡃ƒB:ÊAQIcÇ1aá ¨õ*)í‚QPÆ((*BAAQ êUR Š‚PPxH)(*BAQ©CçEE((*BA} E)(*BAQ )+EE((*BAAQ õ ŠBóRƒ ð[ÒI©?  rQ åWŠJ‰‹éÎ@AQ )+Eeæ&c ^Bc ¨ÔÁmuêŠ1PPj\M…Ì‚¢ ”m8¤ûuc ]QŠŠ0PTªÒ¹" e ¨EÅhW:uŨ+ÛÐÉÆ@Qi …uècc ÐîÊ@QŠÊ>x.c ¨EeúX( %ú.C .(!®Ë(( @QŠJ|—P€¢"•]?©ìŠPot ¨lƒë2ŠJúW( @QIÃÒÃ(*@ý1ŠŠPTÂéƒPT€¢²©óêŠPTòðYPW €¢"•¿«ëÔ  (E¨+@û’´PP¶á¶PP€‚°ŸÕu ŠPP€‚¢Ô  (eNèj@AÙbø›PP€‚¢´/³ €Bç)E¥ßVvê=c ž—Юt ŠPP€º¢  uÁ((iØ8u ŠPW €ö6íÔ”Ÿ¶‹'&“Ôj_ïâ‰ZŸ½xžò‹'ÒÆSe Ot«~ñD·‚‹'º•]<Ñüâ‰nÓ/žèFpñ„YùÅf…OИ+w ¨‚w $Ú ñ‹éV¦«L{/h¥J°ªä&©MÀJ•³×Oô.é×OX5ðú‰Þ$ýú‰Þ$pýD·ê×Ot+¸~¢[ÙõÝȯŸèÛ¯Ÿè ×Ot«Ü»\?±0/^ÃŪ„f›É›Ï¡ T V¼%¨¡ T V…Y@èU‚Õ*‹_°Rå£×O, ¼W? á*ñ½x8¼{ß2ïŽG©ÍS8nÝhnœB¸ÈFeZ‚›Þ§I> %ÉQjw ûT‡ÓræÝQ ¹1N4»¼§AÙ†XÞq¢aཅh‘½]lhnŒ§å;ßíS¢²£ ÍKŽJÒÓrWjãï¨ìzZÞšK, ÍñcvæÝ58\Þa¼/L¼·(¬ÃLÃÄ{64;Na½±ÓìgšÞ»¸–Øiv\B¼ÁN³c¬'MŽ)šÐä˜cëÐäOË™y<ŽN̼W<èK̼W< L̼·%(ó$!_v¦HJ‰ÐÔSÓDs㳦¹qÁ£@Rª¬%@Ùµƒ»BscÂ×(1ò.sH9mñ´wLŒ¼·•SIYõ0µ+ä’§hCkôy éPéäìÇL¨Ê-¤”¿ÞN“x*¬9¢mhXÕƒ<ÑZƒ ÆmŽJÒïœûS{•hŸ®Ì䉦•$Ü;Ǽ¸w oK–5(äŠÒ•"q} lÇòDePò±FaÕ`Ÿ®¤Iƒ}ôIL¿·•ª5t…1ýþ+1ýÞ¢Pãg3‰áwÌ›Ñ[‡Ñ^¿™<ÑŒßȧ™<Ѳ†qAž(ÍÑfÿÕ•…‹ê³ØgQ ììÓŸâ€X@X£²cr@l@Žˆ‚~å`E’â-3‰á÷нöQT·aü½Õ¨ øêC;i(䆦ðzòÎeÎQÙ4µ+°D%ǨsRÖ”œ’† ’4êÜYÚ¢"!Pf ˆ¹s@ І R÷•8 –Pb s@“UÏ»B~¨ÄÌ5•ÃÎCðÀ„x¸J(e»- ”r 3 ð-ø<\•òxYTâÍÛÖy¼,Š”á²¨¤7|¢b—Ey[ØeQ`£—E²¬ØmQ èmQ lÃÅ”•ü_»Þ±èÊ#Í´XkÕl[z-k¿‚oÙàëûüþâ²æ]./Ö_å~‚v—‚ÞÓ©&þ+˜è½tfÒ½ƒÉLú¯`¢÷˜IÿÕMhñmZÄÌ7rðF‚¦SjÂOÓÍm»Ól>úiæµw>̤Ê͡¹ô—éæßßüPšÛ¯–R7MÄ{%šÉxÍD¼TBL†;&âb2\0¯““áv 6ù¦/55Ê·m©bMuÛÖ±äè-Ø ¹¿7o¯ŒŽxØN×Ú“«u›ÎªhK~NÔý¬í~&]úqê/ɼÊEk~å‰y¼òĬüʳÂ+OºU¿ò¤[Á•'ÝÊ®<éF~å‰Ùø•'ÝçÁ•'ÝÊïïžÑ¯<™>òZw"?]Cgó²Ðâk›(ö,oîßI[Î×·lÈ.¼p8læ]o–ñ×O7Ô׿¹¡MÁ¾Õtx÷|CKÅi*ëáîý;YØ3&¾Cz¹¦õ];Eà5øÄÁ«[»Uã7/;ï°iýBÉð¹ÖÞÊþÓ×»×w½Ëù²ÏÂÓÈõÛ•B‰O:ø ^WÒ¬8îÑÜÿK%ùÁå‡çï_É|žÁa¸ëÔ¶0Wy¦e-‘ªÒújÌŒoÂ[?”×ð‰Cφ;…ö**g³aòCNùCuŽ{FYVo‘*_gTq!™‘:Ç¥ò!V’ñòïî^q³ð‚eª‡ßµ2PTÈ7?º:üãÃÃï^^nþìêð7ïîÈôÏ`r;ŸûN ¹zI sZ­U±ÐþbY$ó¿»ÿå NÚW®S><¿»¹¥%Øqªó!}ÿæ¶pÌÕV?"­ö4•íð…ì –¿äIž";FŽ¡)rtŒ|¨9­9:Æç»Ç0w¾ÆyûE#¿v÷ÜÓXÈsпðF„öcÁïÇ÷õ-?Á'…À“>=“ j.žÖ&–"¹ëaj¼¿èü^­HkL-lÁð•,Lȉ¿ü'zY-cô.V´LsÄýéô¡ß=ëV°ð |¹¾mN“¶á­3~ â9ÌÒÁÆê==óìV§¶:™Ü6Ž : z÷û°¾yƤÙïoìB´ûÚã4k„ï>Ãfñ»×±?¯ÆK ‹¸ç§Gý‡}>iE)ò0†!#kÆÂjŸtÚ¤»ÓO4!Ъ²¶˜%G£øÃM ¥Ég×6òÛû󳄴è ÷‹³ÎkÙòÚ&‡ÊÇÍð—ç<Ÿe'v˜nwyn˜·èŒÈ›Eg”§%©‰å–£É´ìÕ\øoψÿÇ0Áð±ó¾× 3ÌÂwÖofÿ­‘ip§¢Æ;´ËΣ‚c@¿íN$¡ýnwÓZa»¾­ÇvÌû‡[p™Ò5-&NûN¯'mèÓëÅ6L´nþh~dZh…™­+ŽlrËÇÄm oûªŠ›ôŸŸøýâàiǨ/޼¹w¯¬ÏìÆh÷Dk¢þ}j¿óö¬ý[YãCa!öb)¯ó×ðúŠhÂ4"eÛ7×·}¢.aIúÔ‹88$ypZânPj9ó.¯ýHnìåþQ\¤xž‡w’àDë>[×r㔄OÄÅæ«¬½$´* — »çWõ¹êÅ¿„ÕøÃÝóT¸mùN—Åìáe%ùºuÊkL/Âg0þ9WtkO_ŽÞ™gÄM¶Á„±-ìÅÛOüzUxx§Ï’c…`«Á­®ü ÷îï§wKïoæã„ø§á·8éÂútØô¼Óäòrø+ìÚãP §›»£n‚V˜X—aEÔrl3Ýá+ò¡5Âén ú´½ûü‰K:0Á7òßÎùº WÉÐ\ë>w®^«Ì¾e[ÏïÜNhÝ}hÚ± xõAÿýëgØ;=üÕååšeN®stÈyåµërøÑÝc .l}Ÿ_½¡«/ÕAVòKXs÷º÷uÿg7¥íÅháùÅÛ{®åÝØÀÀ$¶ãLÓŒ%ðÝ ¨Ö ´Ôük½ËhÁz§&û@8^ïÛ´G ðyU)~—­Û$ô~œé[:ùP²lî9þš3ÃæþwÒKޝù3Žrå 90h¿åVÀiûÿ)}{¸,±ŸÞN0,˜žµéȧ,m”qäDá)ö¨'G-;š2ÛƒÑ-À“¦0Í´Ô,9µ]J«+9Oð™ƒÿÉî[”öô=ÄRæ±lCë/8ÿåx2-ü ðé!ÑFM÷¬aO˜ë1ç¾iþ/ç6|üG³haΜáÜ* yÏûyšŽ•Ï=[êß?Oq×~ðÑÜÏÁhû°uÄaóøôð½}zÃíßþèRxü[J'ËEŽžž:OûÃû¾㞪e£;Qþ¹Mfýôrߘ®A-ÃBkÞ°ôø…üŸ8†Õƒ.;÷õ²/ÑGûÊi©ç6;-_zç¾(ô•NØààîEêJ/ùÄMÛ±P ±|N>s`Kuº ÄõW€ åÖ3¼"æ8~Ú!Å1ñ"F´rëeÒ·ñ¤ôò¡è ‰JÍÏ~:<"ýÇ‘CÿµBçVh×ó_^Èn\X¶¼S¨ÿ¸^•ÜNöCV¶Ë¸{< å?Fó´Ò+É.§ÓÒºä´acB“-Tp†›Û߃“ùåùåõ×ËùIFì.Ÿ_˜Ç™ÒáWÍÁrêÖ×`ùð×?ù«n('µ…Ø£Úk|}; Y+y`1 ]ßç§- û˜Ó}ÑGiÇŠãéÜÒvÞÖãÜìïžem»æÃû{[Ö6¿snYÛ>—·³ê’ÖŽCú WÎ/´Ó y¼½§W¡4ˆËƒ÷\•/#Xæïvé, {êtZ·Ñv²^ÇcÃÒ»ÐH >q²f­~›øÓRjª¸d)Ó+;§1µ%æÉZ<Ë];ÿ*¥mŠÿø…>0ž[¾Þ_Ü×>Ü1ä/áØûDˆ±ÎmåóÕ} PáßæÓ{ˆ¶ö/¯B4 ‹?ÏÓ.ŽSD¤æÀU+û°^1øËýýu/„¤=O1^KzXó‡õ‘3Mò5µÀ¦òEí*al< ¹Ž¢ýÜâÎN8ïÏ·2D‹Å”Ú´ž`~twq|ãów«ìñN$Ö.6$›Gôn˜Ãù¯\óû …-üFPX]z–Z¿¼´÷áERj¤çý81¥ö‡’çþ.µ¢Ø«4î‚Ú^´¥µ Ä µÄ™òâ|øÛ“Bp’™ëÖèÜlÑŽ'ç‡ñ=Ù©ÜÙ¾‡£n°K´¤Ýí…ÎÆOìíû5ÿþÍí\Û‰€üXõŸÎúXþÖ`îÇ 'ï WŽÜÝÃÐíg7x&¾Ú¹ìÏÏͬ<#̽‚чŸñî%Ï,J‘Á'‡€^Y·a²5çßÖ•ëF=×kßóéa™gÚi¬ƒ¿6ÎØ^màšº/̈cp’þÛ…–HÛ:M!£þpósLÿM›‚–þÜ[i †“‘urØOçcßĦ­Œ+K‹'ÃMåýp$Óf§]âiÇð ì2JŸ/(ªg"J ‰ûŽæöÖ1Šóô­–´NÜ3–Ï-dƒ‡ ç!Þõ:¬eˆÉfÄ1ZµÏ¸À¸ G¬a¸ê~å†ðÅ={¹^ŽkY79îÿßçNûoùJ£ºEÓŸŸÅ7é¸[‘‘9“Ú¼séÁ¿½À`8ŒcÖDz:ày¥ø¾2—ì+ã&ª³ûÌ®TZô¼'¥”ŽóV¨Â¼ž–?þåLÄ\‹vâ†Á¨“ùLF>.üÿ q6ú"°Lçšÿžô6{µÿ—{à׳ܭE.öø»³¹×ãÜâH¸‡·åcca^d,¨åù¡ÀßéååƒCa¦MPþ`m4_/´xü½ÉÄW*Pp£ôNm_š´Ä¿ºšøó=Û5=LjßøÑºk)&|賺¡ö¡•|6ó•7íK¥:3–haÍc-Óq^ʼn©ÕLÿ¾sŒLÕFNmøÞòö{®–Ÿ«+Ýæ´ž Û¦, »H*E‹}<Øù/æ sBå4xnHÛ×ô·ìѾ#kIý'¿F'#zá¯ÃˆŽ©´]lÐÿþlü$­F¶*ÁßkÊ¡›B%1¸Þ /¾»dÑÞÝZó×]7˜éÿ÷÷l¡ø¸•Ç?¿Ìu_ämþÑÙÁ–Œÿ ƒí»ŸÜ+mòd¥7¥ô5Â-ZþÿÙ=ÌîdCå›ú¥msÿ@\ó¥é}÷èèNïp¾µøèˆKÞZðˆ«pÞþ6¿Ÿì?¨·iƒ¾áúÿÛ}úß’Ú¡Ø‹Åæå˜é#k>Ó‡K‘H¾°íøx[˜¨‹Ýx3ëù¶ î¥e¢GvËÒPYØy¶h‚E‚@ï˜Ïò/L1ÎòéÀFh’nà¬ÕbžÇxd=cˆñÈlªñÈüãT>vZ¹¤3ð°8/q—o5aPs¯õ¥¾¿xŠ#9-íôôÓÃý¥À……¯µ‘õ'pË´÷§–IÂÐùËÄZÐóøøçúY«d ¹F¿C™®çýåÙ\ùø’Ìð1`ª-ž€r‘ï ˜ØÜd8³‰uåÛ…÷²~°®1×ÒsݰnI=Ô#q=/U”ÌK`ú@Eó~>KFDY²9ù‚‡[ î¨ÌO”eÀ?üað)õ‘o5è5¹¿i7@”Úð§0ÀÛ/Ç9“,ÄU>u=aRl“ gýc($jnWYµQS¦¬ô£Õ€ãõ×r8ö¨ŒSø÷à. €sFgr-ç’OB8"#zã¡Rˆ—h&i—Cþ9Ÿ«¶äk9 ×ÏÞÛÇZ|·Üžsécû‡*tÚwŽºK8‡=µÏ#öo{öÔ]èÓÞ ÐÙ—gª#Dïó–йz d9½ƒ gòPÒ5üc:½‚ õdÖµ̺|vþjãTÒùyMOë”e’£ÏÛÈ2_4›YÃQÚ/TÔ`ñÔ¯3øªYHçæXè·7œƒÁ/~ÕHÛ‡Ëõó.¬8{e$rÜ[Ûãóî<û"ºþâBj;í´«§vrˆúÿ,:ß$C;5/zùCŠÎ7ÁÓ?AÑyzÈmt o˨u³`;Fºëý„+ÕÃÄWfñIèåƒ>tЬlLÅ–°T°¯OùþÝ:oìÞ³ßÜ_<§ÅW0¼'\ ùëôÛ´ÔBôÖÃËãÝC<){¶,;]>r«ÙÓÂLÞ«vÃzla6ãÙýxTóV‹B^R¯îh¿•ažøêÆ¢MÎÖiœÜä[1)e: ¸ 1UñxÏÒ[N[Sû4Fkÿäý`þ´|´t¼ù•¥Ü\h·èïá¿^ý_ÁR‡Sendstream endobj 252 0 obj << /Filter /FlateDecode /Length 20220 >> stream xœ­½]žIrxÏ{_y/ên‹ ±üäw¦×^À‚½„5à0 Éån6‡Z²9bÕÌxôë7¾NdäKV7g$Âtó}>òÉŒsâddä?Þ]éîâÿ³ÿýáÓ«ëîý«|•Äzgÿó绿~ûêßü&-²<¬k¥»·?½ÒŸ¤»QÆ•òÝXåáZíîí§W÷)¿~ûô‹vÅ_ŒôÐW]ô«·?¾ú»ûÿúúz¸Zy­û/ï^¿á¿fš}Þÿ(ÿRFºÖý‡â¿<øüsøÇ§×oJ¡Û¦qÿS0þ¢vºðï‚ùñËã'»O[uÒÕ¾ðÕå íþ1^øG6ç‡Õ&]áM«§ûãcëÇžn^@^Çý§×¹Óƒäû߇||þðæéùñùÝ}äûÿòøåÿ{Í7Z¹Ü–ÿšcÝÿ[TzÃûOŸõAf©G7þøôú¼ý›Wÿéí«ÿ—º?§»÷Oü9Ó¬sÞ•k´úT¥Mºi½«ýê£ß}yw÷ßî~¦/úþÕx Û¬w¤¿þ†þÿèÿÿów\àÕ_¿¢[Ò­*½n®w=•õP }~ꇞîRý¡5ÜŠEÎt»_oþê§W4Àú »ÿq?~Fò×ݧW¹ÒÍæ–¯þv·ê4òÒˆ­Ìr´ZôŽôN¡•Yb«‘}ÎZÁ"­z^½øë|rËh©qJ«UóCK±•Yb«œ[{¨-´‚%¶ ß ï‘¯ô0>1Ëñ¶-Õ‡qô‰YŽV“F\;Z™åè“T/~®Ð'f9ZÕVÊÑsfÑVäGR}b–£çÆìéè9³=w­Ió$öœYŽV5Q¯Ä;Â[]2ÚìÙ¼7y­‡fýÓy„¤ºÒÃ*j‰-z½$µÐ¿°…œá`Ã|(M ™¦îdËz¸ºZÖCå[• –b_ÒCb©4ÄùV4W†¶iô™-•Í–>È­°¥óC°…fT•ëÐݧX&½&¿}¬¦–Õ2_‡†£>r¿*ÏG²ÐГëP‘“b ½–Z–;k0 ׇÂwšøž£ÑŒá[-yp¶Ð“ÊkNmCÑøVä%¦¶¡{È•×zÚfå‡Bw_W¶±3iìð•×ÕØ{°…Æ&=zNýâ…~.ïY+¶ÔÎD…,]=U.4rߪ¢/ yOú>òšeTÆÕqÑLéÚ„_…&ˆþ-d ͺ¦ÒG­Òd°?ø¸Ñðj6Òÿ–c6Ä)iH{;aðÓ/Ãà|¸Æ *vFl_Áà' Ê'<`°ê 0Øqƒóa(X“~–€‚ÕÐa£à`²Q\Nš ¶ rìöZ·(H¦ Hþež H¬Ö‚£à*Á1€“Aöõ@A&îã@Aöã@Aò!2Ú¼¦£ ouý@Áu9Ž‚ë‚§ .úÐ}F —ö§C`¦ùx ÁPY2YÊrÐP#s×éõ•k1 päï] l—= °a¬iÈ)¬;vŒ,‡@žŸù€À®Þf#àHÀ) àhÖSŽ€€Š€ÓÇF@ÌÚ㎀<4N¤®n.™és§0ø|@²4YÀàå Y`×é\º Y¦¹1@qà9$KãËmw­`aH~6ñÚH–fÐ`(¾8Õ€ä2¶€âzë4*Ôí;þ1ñXþ‘è5â9ÛÒ³°gþô{3u¤q¢DÄpèüØ8Ä5E¤[ê§r¤/¯äÀû±8Ápix¤| à2v¼pUc8Ž€ks ˆº"&ö# `ºÝ ýXæ•# Ä6#¦\¦ð¦´4F¦ &]2Cƒ×ŠÈ£CG ¢ÆEQ€Vø•2e ve™5Ü\…VÃó ·kÅeR›EßS¡Y´/:OåÖC‘sXèdéRñÂÍÑëd`"úe„Ž*!´¯'^'EŽC– ‚¥£€,ß\GŠx¯>Âhêì}Œ+éˆ#—·ŒFÚ¨'¨ËF®°ìG7Yš½–Mq¦:‡m’%kd€‰$.¸EºI–ËÞË&¤Ä‘²Š'×j³z˜ùâþ£s CVÌÛš|³º<'ÙôãýYðmœ¬Ó‡ÕwpBO3—àó°z~Qâ&<0·ÌÁ¿ðMƒ Ûa 9Ê=ygjg¸CîU§„‡D¬P¤5È)[ÐdÉ6%6ød› hBöu€Xés K}ÃÔ-wÀLÔT‰£]'îÒÐðÞ±ù‚àøí4ÏM×Á.È#NÈÇÍ#žžËÆ—Vzä$sUå…¶0Sn fÃÊ‚r#?ÌÞ®ƒ ±@¡·‡šÓÊ–&$—#†MÇ-Y ó[Ö ©¯¼À¥¢åÄÉ©:㎃Àé%Íá¥PP¢¿ÊRœ¦v›5›Ê¶eüÒén=#nU#ÜMši:Îu Ô¹w…€âüœ&_=9<“åÚ®viÚ‚Ø¥8·Ã1Q”aãoko ³;0)Füvð"pr8®üydÃÂã$ú_kâ±ÔD,µÃ-‹¿‚0©Ê[ŒÚLÎ ‘x‚Ÿy¿cß)ï¿ÜüåýʳžpKưDa¹±,Þ£ü ËѪ1çYŽV°ñ«ÖY+ŽÂF“AVO#˲c^±ñ°3–¨|,ÃŒqÂÖy6äÀÉb8¸%uÅeZœñO²T“:”¢’ašàm4¶ñè5EB©.YºÊ¨Æ†[oȹ2f²32RM†iêƒñîÖ{¶øÂ¸9YLo<LQŽO– þ®qY¦®N V ï›lÉÀâ ²4SC,æhZW€¯Úë‚êo_¾Ó—×'Áàè<¥S@8“­ýØ ¸;bç §ÄÁÊ|[ç24;ÑCÑw’îó‚‘µÅÜaöšhùÕ9‡nÅ9Èñ€‘W¦=Û‚¾Ïd "¢ /8pz=ìæ`Ω)ÜmvMüÇÀÀ“»°túzwgò à)zº~!!Ç#°gÔÐÈmç¸b*aWŽ·­|ã›6-ÏÈüw›X–ƒg°µ…WÃSL„"ˆ^&1O˜aYÒ•a‡—*„—Ú°—pìb¦6âÒ5Yªå.´q²1ûÊK[ko‰á˜²íQi…ê‘+çÎŒíÌqFTô‰-$ F¦®ÔÎð8š†å<ˆ†Ù˜iG–î¹ ÊWr>Óõˆ¤!þuÚC¬EMŸ,I‡`Oׄx†Å®,¦Šâ‘c"u… f'sÌ4M½0ÂW™b²ë-‡r‘À8Ä•:ƒá ç+ÄL²$*.ätÐr§¹ŒL˜œ¢‰QàÊÍÕÐibTWÔô‰Ëãó9+¯HaqæÎI†1ƒ•¢múO¯¯¢ƒ‡ÈøÚaD^È>B¨‘»¢fÐå òš«û­é‡VPùC+(ø»•«ü¡Õך~)JLÃÛPÕÐ'}J”Z™åhµX +°}RˆöÔ£OÌr´êšŠZu$çlM?ô TþØs¦à‡VPùcÏ™‚z*le-´‚ÊZEM÷Fÿî ̱ô˜«(–µçYá¬Ø5}±¬˜ªX3£¦_8‹jÅi_¯ËT/¸†ÊyU=fìWÎ¥M-¸˜Ê™Vê~Í ‘e˜‡6WU%÷jwV9ÃÖ²ÕßUΰÕèÐ|"Y*¼¤úM²ô‡èZ+çgÍà}+gÜš2¡ºr–YĉWN¸jFå|Û#S±JW pQ9á6®Wö+êÔ u*çÛœ 0Uá;1]¿Jºm4*§ÛjÏÖ Ä8Y%ß6,­L­L8Q¼­œf™”ŠÉ•óm•ŸnWN¸mQÒ¨œVc²b•”Ûͪ$ÜFE£^“A4êÕ¯CÓ¯œ<¦2”ñ•Ê|QAÑ8Måt² 2 dcFdÁ¨1öT¯­ ưȒíK «œr–cº~åma gðŠ’„–ã#˲qm¬°rZšé)ÊÉ’±Æ ì²2U^‘’¥Ùj½±ÔÊ©k“%‹­ñƒíÖk!5FL–d¡¬±f²X¾ˆëÊÙm ÷&K3eÖøyå|·³+;.S=”çW^p´È’ Øk¼P9'Y*B;È‚¨Ìb² ä5iüR9q®FUŸ,ãhTù)(dÈöM‘¥X£\•“í,ÓIƒ2² à²À­rúv»Åvd™Há×ø¯rBž‰#±¤eÄ‘UrôôWk’¥ BÕx”,æð³’Å×$¨­œÄg²¿¾d™Ø ‘1Y,¾Að\¹c[ÔôÉ’LXÒœ X1²0,–ÄHž,º¿FûdéAT Ë€" ªY,wÆT…ÊUWILx¨¼±.ÇdE²¤SÓ'KÖ÷|QÓ°Ap ˆ¥Ù€‚ ¨@ÁeùT†‚•w‹è¼7„‹ùúp%n[#K7·¹AA’ƒ ½\kÛ^ÊÁd=ºA0_ò&§| `Ʀ#`Ž;rjñ‰z­c`ž¯HŸÅÖÇ‚2‚ÕfïÁfjèFÁV_@A ˆ4 6Sb7 :<8 r"eÜ´V9·¸F]¿rnq”õÅÑA§¸õöʼnë×td¯\qÐG^[åÜbË£7\Xvp¤zÅ•mqµ–ˆg0ÈŽUÑ0˜°`é0ȹÅ= ûCÝît÷ç0˜R0 ²'K ²W^ ²—2áÃ`|$zƒAv9JPƒìO4 º÷pd_aW6”¶%Â`ªé÷ƒ©6Cƒ‰»2.nSÀ”ô‹: ÒD5/d0˜š'§ ÒŒ30HÊv,iú˜StìćAN.Ž‹Ûdœì08 e; R7 §íËÙ08ãÊ6ý‰L` 9—¯}WÇE¤ÄläÊ{­ãž52TÝj阯ŽnùZ§”Zsò”jƒ@¾ž­˜Ò“cw€A =’ø 3柳 Ý•Ÿ"ÇMkdé¶äÌÙqÇP03 %š PW‚löZ@AB­sÓZ%ŒBF¼¡`®ÛØ sÅ&ICÁ\m‡°£`nö­‚™7`¤‚x+Ã"!GÜëFÿ³€Éva¶X¿Þ› ¶ªnÇqÊ ä²U0.à{,ã=ÁÍ™Go1¨Ök‡²¡̃-=&ìo$òoÇAÒ‘°/–‡€ÇQ>LØ2ޡĖc ‰,ÈÁdK:˜HÚÐf‹¦‡`ø³¥3„-‡¼¯–¸9&Zl6²El›¯Á`S:Xl·˘_ˆõáqÌ¿ìG†’׊nj¿9\™ô×áî.©]¢ôrôšòiVô¬òõÂŽ©ð=L¡A°ââl(î÷ê‰JÂ>0„MŜ歰̲ïr=œ͇qÀ—L™3Ò㠨틥Å,0±\1S¬òËô3òÌ  ºŽà, îaCžº·­‹±ÎX™,*’z<±Hïd#“MpT²ñÈ`‰X›Öd(ðN}ø_î";ŠÓfPiAìË"•}!¶íäjìûO>—\±ç#‹ŠëÎ 2ƒ:1n1c¤ò–½#µR˜÷ŒÊ>Y.ëQg²éºe»,HÝ>|A˜qÊ|Yä¼iµÇN½±f¶éùeqߦðDù,a4ÿòÄ„¸^–§¸¦f ÿAw»ÝhX"ñŽ…ºˆê§ÝeáX,lrp k…ã”öUq iÄb°âA”ìQÚRæ­¸©Ò~æ ™¾·ϯ7ÿ¦´ï?ój<…SbËYÇ[y5oªñx+¯Æã­B5´ÚÕxÐ*VãɃåÖXàE ±¾Ká)qÅZ1°­ qеx`ùv- ¯Åãojñx+¯Åã­B-oåÕg¼U¨Åã=âµx¼GB-oåµx¼U¨Å“[•r¡ãÌrÔÏáý8=Öâå蹤‰L¡çÌr´ªSòËC+³ÜÖâñgÛ•‰8-¥Ð™“¢Ñ=ò·îXƒJ%MwN“¡ §7÷¦mÉe—Ü©àU~Þ0Ç)8Êr8@. :ÀkGI,`jœÑäVØÙµrCŸ¼õY/Ã{y·MB*'˜ ¾{ua'œÿ%¯É>\^‹Ó~y;áL¦¿ç¾ª]9Y ŒÁb ¿‚ÞÌ™\¼Es’CVÂÂ;$ÄÐmßð(²m»sÊ’R]Ρüxö` ηºøI–Üê2ý“ó­xçéX'°±É“ȶαð!äß[lñØ!Ch,d MÞý'×1^Æ_­ÈÀ–x«¿æX¶å/s £KnÏÈø=ù!4Vài¼E„-¹H!¾ÕÄÖb®Äï)É´bX²Zß9QL£¯uI)²TÓU¹ï‰áœ\ ;y—c–Ë â弌-Ú;K/bUv2ïUËeib¼iu µh–øê¢)uîi¥µ¼Ë—·r41Þ—Ì۽آ¦¾æaœTÌW)Œ²}©AB÷“cX£Â ©vµý•fHtΪ“þ,RÚ¤¨EÆV‘š$I-I¥V ¶ ¯@”©²Â+ò’£â'SÖúPbÍ–5í%mkaai|eµÈœ*,O5øVgFW‹|íÂ*m’Ëdå<…5”VÔ"úha}d%µè²Ô‘—ZÔ O!†¢—á‚y]-¢S"¾²Û‹-2Š@ƒÝJVî «9–Ì‘¥d4Õ×<,ìCÇa©¢ÂÇË´éïi–.3>}W¼§>rÖôñðZ™'éo^ØeôØ9Ôƒ¿¹Ÿ? ß²:øð’|Ë‚é |ÞW|ÜŸî­ddÃqo%»p z]Ç=ùÀ½••ŒoÜÃ&ˆ{K•¸ {ËÄÍ {d©í€=õ–­”lØCÆÀ†½eçöT‚ˆ°ª»qo™ÇݸǑý{Ë*`lÜ[VàÅqoÙÿ{Ë–À7î-+1´qo©r³a}FD=ÙÜA #‚Þ¼’µ0Ìcƒ¢?@ý—Ò €[”ôØë)Ñp¬Çl¨ÜÀi5ê»w[€ÊÛàÞ€û¾2zb[ÐYnñ%K?Éò„ü»l>]5UpÞº0n0š\Ù£¤ëß# ëÇ{´5KØ#²ÙÊáµÍ Àî‘Ý,ÂØƒ›`÷i¶ócO¢f©{ž5‹]ö\l¶´çk³ÝŽ{N7 €|Ú·l#Û=C˸ ¼G³µýí`šüvBÍöÅlGEû|ïn;Üýo?cfŠòv›Íö,m×J–q„­ƒùÃA7£-Û‰s‰“u8z–TÖmÂõ0š%Ù¢ `CN³âw•:\¸#W7oìàF†y†~ÝÒr6Hvè¤ÝÄØ ¶{šyƒÐÙ+~ŽëÝ*ÖnìïV¾Ä¸ý¹ÖÁú²Ån§ã‚„7Ö΃¦ çU 26×a¯‘>øÈøæL{“œW , ;÷šXívq;ø¶€1mocbƒë ³A`VÂÅÈT¨ž2-‹eK.ÔWe •€¼:á½e`2ÕÈ(°cŒsdF]v ݾ¥& ë‚Æë„Ýi²“ú º6ï‡ì±cW¾\AÓÔÓ ²aUÚÃÞv¬m¦ã_ñŽ­ >Óñ§ÂlüCÕæÍÊCmükÙTÀ–qe`³ÍÖ€ûO`°n °Yü €~k@< ¿AÔ›ä- ­(Ùؾ‚ÀÜ¢‹76¬Ã;6CÀTwlÀ@Œ@V¿æ€ÌÇ€Œ1ú66@Àüã²lQÊ—‘o+@Ú €=A“öl<&› •€:ý"vsv{ƒä¢pý@”BwìÃFŸ#`·ŒÊ€Ý*öoÙßÈËÛ€#aU8¬îÁF@ %JêÛn ¸ cmÝú–Œ‚Öþ«ŒóµüÊlq ]-QЋv3ÞB,ñEÙ b4:#X¬ÃØRbb@´XÇG‹|›`°Ï,ö‰ƒÅ†Á¾9†Š?1FÓ~)Œ¸ýâ”»s0pwbpïNÆ`KŽibiq±Ao…©Æ–ÕüÆ›RTóÅRsœÖlqæçe‡¹s`K=[Ì㙓ɶ?ÇÝÌMš«Ê /pglÑY—WAóŠliq”,¶SϽ+[t֘枵uRóÑ•éܳ¥Ç|%² _ìU<ÈË/à ¶,Wóoô˜è\Ú˜.ö ^—9*Ç·«<œ!àeÎ7L⨹ ¥—bâh{áp0GäkÝ¢v ŽìÉŠõnôO¾j¯â-ç âŒsŒJæ<ĘˆJ† ä\&gçà;ˆ7'Ê8âÁyâŠÍ­²q"§_~‚S4>l6&"Š`Y z\™@Û€r ye« Œµ á´’©I1Ê<+ÖAœ›Ú!E›¾º¨â× ˜Óà­Ö€)w«9ädº7{çÛ\Û? ù‚%fÞ.ôSÚ掂ü…Df…°†8b‚fn© §zl9®Zê$bvÚWPòEÃK7åÛÁQ·d¦- Î3MJBª+¦RIÔ¥D=DjšZó•œyJùßYhç×›ÿ¢”¿ í@ Ž…v¼•ÚñV¡ÐŽ‹à^hÇEðPhÇ[y¡o í˜rj·˜¶J·À=íF.îÇV&܇V÷¿Yfgw$Êìø»†2;ÞÊËìx«PfÇ[ùzoÊìxx™ï‘PfÇ[y™oÊì@.q?–Æ1á>´‚¸{΄ûÐs÷c+ãf¡Äý›2;þl»èýÝ6=Ä—ÂÄârYaà1_,)fã“ÅönaB>Ö²%£ðgšnnn,H¡6×QøtLKóW÷RÖ´ú$pA…ÏÔThnªðOæ;Ô•9p-J…·©ôà ñ¤á±yͲ¦‹òêY ñTÂ"já xê"Í?—…Z|ðáEŽxŠ~¾ðO-.éê“ñ ñd™ö‚(b0DQÐ)|æSŽR~á“L[Ôò‹œ5À‰Årï Ÿ Õâ‚wám„+&$Š¥D¼-|R”!°b²XrÌÆ/|vÔˆÙøb)1¿0#1B9‚X´ßDˆÅô~%…Ï êQË‹–Yz”à4:#–)XLþWZ$–+Šù…²š1SB,-¦%ŠECZ”ûG‹Æñq4†ˆ 3ÂkY(²ßÜ¢5h4%Mè-‹yBwZ\ºÜb'±hübñ•~§˜Q¾¥…iá{[('C"ÅpO‰†Š¥Æ°q6„–bÑiô)†Îö(F+–Å|±Ø­4 ¤ Ž—Å0bH­“ênGÝ2é)C,%FïbQeÊ"|±˜¸¡"€XVLM”)o‰þ*&l·ÁA,&‰¨(±‰ƒ£_§pÿ‚˜Qqc`û kTóÅRâr¶e>A°=ÄÕl1´À{8ó‰ÈŒq´Q²!pÙøÛ¸pR£Cà²t œo›\éÜ&[?.+þµ1Ð!Ù1…«'ö'²¬YÇHN”Ur œ#Êùò·--' k9:ö;N;sfC 2C6r­Ã¸!Mà Îv†œU8Nij! H»; p6¤¾'Š;n 0X ÷up‘#úð0þÀþRþâÞ9³ŸëÙÚÉN+J¾!pÚîø ³CUÒÎq=[,vüó,•Æål±è¢Ÿcà´šÅy‹|LÌ/Vn!` úÆ@œ{°1ó÷ÆœQ_ \vôðÆÀeE•7b¶n \¾Ü \_aàrô.Ç!ÁU±| \H“u\ m‚«¡ @qƒ öÆo\m‚¨Ç¹ApMì@¢ZÙA>Öº”=ÿ)€ t Â@PJ¤¨äŠE‡› ×Ša=_j”0p×1J­ƒ0PÊ!\QÎK(Er”óÅ¢ƒÀ0PJ/”0P,+b lh1?_J:¤˜/–¨ï9ð3¦ç‹ÅÖ×®¹cUœµèèÆèŒÙê8žÇ¹p/–|òlgmέâÔæyàSzð)C5²“Œiî&χøyÅ`Û<Àƒò<·pˆeÆÝE. b±EŒHNG8©[†sð‘-g¸ì¡_®SÊK”òÅ0bÚHáó\¯¸²&–7Š¥Ÿ´¶Ø)\>é ¼‰ûNZŠÉ0bQëþ¥”CÊC=ÝTñuWVμ|1´¨ä‹åÈË/|´­¥ïÀ³pO8ßÒ±â ÿ\À+݇x ÷ó )Že ÉxQ&Ô~Á“2±Å€Ãw‹‰eF)¿È‰¾g|W/@°¦31¿ÈÉÀùÀÑj…†7ÖV;nãq-سÌ®v6ƒÃ:Ž­ÛÐ_}£Ÿþi5\6y v™cb¾XÖ‡W;hiÞXÓ2ÃûV”&ðP?ÚH¢f' nâÔp—“«æ›+AÀN1w’Ö, rÍéÈ^Hð!l6Á7iìx/ˆeOž[¢Ü³ünvŠ o3XDY›åvO}îÈ)u¶ÜQÌ „z  ™sn^éÕË€—«#¼¹ûÀ¹ÎïjÞz 0° `Ke×YÜBT/Õl¶ä© !‰ógZœ»#°¡ h« ûXŽYà"¨ús†…v¨¦³1 ©B¨faXˆæêNÌ/»÷{Këüjëojùø•Ö©rÚU> ë ‘×ÕñF¡®yYoÊêX£]UbU"Ûöc©5ÄJ-R¤¹Çª/°­”[,ÐË·«êà¼¨Ž¿C(ªƒF^SÇ…š:hä;æ½Q(©ƒÞðŠ:Þ¡¢yAo êmèáã‚á(Ãî2ýj–£Ë¸ßut¬YŽVí¨¸#ÞÒÁ3íªB|PÙŒG>>Å(ç½G¥tNrÓ¿•¶ðdr<6¶µ”Î1H¬¬SøTÉau4ìá##å(nMËâ“ÄZ…vÊÐ3þö›2ŠŒwÙ‡£àÇG6v«3 Ì÷Ê]]ë èš:o,«Vg@pV*--* á‚mIº+H¥#Þ±ÛC-žÂ»På¬óMŠKÈIë¶Û¨ð-g¶š‚Ö|ŒwÖJ<šD1ÉO·¥»˜d¡ðÙäkèN'¥È³_zÝËÀ†,RoOªhJÂTW+{c¥³¦ ²ÅVùÐÔBÍ{³Y—`°lß’Ó²RÇNcùSëèÉveíM&JºÏ8ÃBd`Úþo}–%{%e³™ôÜ+©£B!#Ì’Š:ÅŒ¥EÞe󛯝¥ÊF;Ûóª1VÖmu2¤Â\»óÚR5oÚ¾ª¿Ñ3Ðe“Ÿ¨±r€\'zիʓʎå>b+ìR¬W—¾—ÝŽM-CdÓdQ‹¹7Ù‹™Ä²¤T’lûì–òí5éSÁw©©>u¿«Ì©ÌûÏx¯¯`®Ôn²‰Ø€”÷æMJ|f©H’Z±W6#[–šºlŒë|–žôºÖ•÷,¶œ,Rƒ©s)@m2§îèC)K)f+ïYŒ`Ö|I݇>P:µæ4tó Ofyœ¬ÿÕŽÛª¹4݃˜-š|TÓM¶[ºfÝTÛ‡p6ðù|ád5§(Î+²q1m¨Y!êì>ª^eeÝÿÈ •ò4E'YäÆœ"›(/«Ì\9OD6Z^Æ™+çwð.ž¬&uå=¼a³Cx¨œuA£¬3'ji’?Ýå€EµðžÕÊ‹Ç*ƒ;¿dŸVj«rÆ2o2e&¥ß·,É¡ï²Æ,λ¦oÖÙ·êkòaª¼O–k+êÈ®º3€,æw+ŸU´„È+ðiGE(€: Èš³Æ;Wc9£V>¸oÓM'©|’)ïÏíPÚkÕG½ÛªS­S"–ΧÙÙ}5ß›,”V>§êâû4;-£ò¡¤¼Ÿ˜®±¯ò!Y 4r2¦<-¶Å;v¹¤¬¤U>›÷¡u„ŠiÌ«ýè^ºn6‰€ákÜàW»…/4‡/Z„/´ _vÝ`Ý|ûF0”vØfuÍ‚Uàž#Xî9‚eà ,Ã/;„á ‡°Œb°7|CØ´ìèaØ„îg¾1ÌÖ.7†%K@ß–°gß1,AsØfÉmÃ,Çß1Œc+ƒÃ0†BUä€a¼X˘ÆxDZyqœcv:©ÃêÞl[HWuC› c ßÊa «7ŒaóµÃ*ÎmÃîcôYÇc³ÞÂØÔRþªǘjŽdn8ŽkóŽ Êé@6.+væ@6.›áŽeLf„²qaŒʘM\ù€2ò.ý@2äiHÆ/‹ÿÉÇ|¦³ýeË;û’—¦ql½4¥jc,ÎØ8œ¬’Ájœ1¼Á<¨n¼Ïˆ8Oòtð†Üpe£yâ ÅÊ[lvR,a3˜bËñ›åT«Ï¹™PµÅ“Í–ªiR›QU[®Ø¬«éq&›˜5«~½É[³UÞMð”Æ8DæÉf‰ŽS ”27LÓŽ¼'ŸÊûlgæ–gô}jU%ø f„×áV:VGÝõôi5=Ý=u¬½» cÎÚ7×±|¶]áeE¾¶»¼´´êö¨W7ÊçN÷²ÊqÛ1óh;|w²¼ùíß“JÙ`%Ò7Ld;@f#I6~ƒM¶£%p4†¬â!`­ 9òUŒsGÇŠqîZAÕ²Õv•nF•£ ÕÍ¡hÞôHÁ øbÐt«[¶iƒ0©E•uú1¬—3¯ªé,õkœèp™Wá]Î…pŠÏûQ–vK³AA;à­'ú+× l EƒÀñ˜œ*a Ôb‚νٖCÀݶdñŒô²Ø´^÷¯½–-nZÖæÇʺ!¡òÓV‰ìˆñ $¡œª'sÂΣÚÒ¦ü¨c·Ã‚lßd‡VnnG±„G ®˜…(E9vâ,úñh•ãB<¤«x1dR­îPÅP«E$UY•Ž–3»‘Ì¿³”ͯ¶þ%É|²  ÙX£]Çb4ò26Þ(”±A#¯bãBSÈCihè»2 |Òn´EôÐÊòÐÊEôoU±ñ>DïPÄïà5lüB 4ò êÞ(”°A#¯`ãBˆï^ÀÆÅ÷PÀÆäéÐeÐÐCÉÈC#ÑC—™@ºÌEôЪnLA? ר#„*>6v`ºìmû˜R{{ˆÍ:1´¨¢ï-%˜¼»¶ &¸ìäŸÑ °%x ÙØ¯³Û‰ìoÑœ$s6Rü&ú#Ý“‚Ï’½þ)¸5Ù꟣!›m̪{ÜÕp̃J1}󰺋g/Ü8#EBöõkú¥:óƇ1ioš¿—-Dzoƒ„F¡ÊPCvŸjò‡ËÞ£ä‘ý±ZOÃÐI6Þj‚É–ÞUtÙ=\¢¶.ZîÕ¨²MK/l ÛJЗeû׊„lÓTƒw©5£]l @6ŸõȤ:Å!@H…H6¤HˆFKÆGx?‘#e,² oE,VI̧ÉÁTk“£fY+›?ÉîÄ9–ì‚ÔxÙ<œl¯T6gTmïkœî¢tNl!HaËcAWâH–fQ‘ËÆg`ÍÈ?)˜²fà¨ù¶òcã±dÑ=v`º„ú§RáÆçiÏ]n™…Keïʨ3t‹ø•u7öC3o™SF4*PöÞøœµ²X}=D-ã\ D d±óR-˜h ^7Z•AHB—²5liù²½¨mâe"¹†?×^{” ZÒ§³Šþ´Ó2d‘Åö #kišæˆ`­qj=ŒÆsù»bÌGQoWF\Ø’GèØcM ÈÊBÐÆgêdz0µñ‰b3 diˆˆ%Úm ú·]Q h|nrA“suUÈPI¡%=XÎ4‡ÆGúvE÷ÄôuluØ ê6°©°­E}ÝkÖl\K–¾q [.´!]nCÛÄš²C˜ëÆ6ËÞІBÛlƒŸc›ÀߌØ&¥nÒm äØ6¢¸ÞdXÆ dW‡shîÖm¨×åÐ6T{`ÛD-&Ƕ‰š&ŽmÓŠ2;´ EÐ6º•vhå×w› m}"ì¶u„EŽm½Øç¶y} ǶfJàÆ6œÙ¸± [™7¶Ùnç mØíÐVíl‚ mÌüëmõàÛŠíÝØV¬p‡c :mlC9)Ç6/n娿uÇÛØskÄO|LAÍìÕw¶1ööm¼‘tæm¼=_E@ïò/Q~Ùµ6´éq€ÛV?åu)‘åu-Ïp€jNlp›V€oƒ¯VÄbl}·1L¶ +T°±ÍØÖîlëw¶õ‚¥\`[Gš€c[›mÍÖóÛèXo|©Ê•€·\­À¬Ã[ÆA¼o|ìi‹è–«Ustc.`*¢¡[Æâo|§.ÀÔš#ºål§§:ºñ÷РߩÀ`èÆÇÆËÄB T<º1X3¢[¶t7f*ŒÜr5¸ñRŽpcŽ1¢¼N;¦ÐÁ-CÚඬę›Á#ÿ·ªÅõÆgiÎ-ù¼î\ãMùN% x09{ć¿ôM¼àeŇ¼.Îæl±›ääíØ“×ÈÒ­·ùœí ­Óí27ì“ñ™Ú=jë¬ïñéÙᨣqòsÙá› ]¶½9ԵΕ! %f4eÙ€q¾– &8]¶×tÚ‡#R75,ÃgœqÇjõ±|¦:lùʦéf^˜Ê|@µ²*L÷Ôñ5á˜öéü2¯ÁþoD¿’pPûž„SµÜ=¥i'Ü…¥é<ßÜ\²CLÜÊ!ÑQ\—ñ¬a“;T,|oŸ› 0~9 ´î»3@‘‹GÝcg;*9%UŒ¤Üa!ØjVèoÇcM5„²5«ÓºÃºn¥Ãvè×}9Ú ”¿†CÙ<,!Á˜?¡fެ½˜’:Ò¡Ðg³l-ãÌ4£¾.ÁjŠK÷ªoƒ¤­,%Y²Ñf2%Ü@v2*ÿ8B¡ÖÍ™ŠEÊ›W”ïrîÅ«§ôÀ³!&HHÁ\½Žó<Ôgs&è%Òœ-ö  Fé%ÈœuöÌt”‡C–áøK¯ z;Ò]ÝA¥:gÉ,DzNHß®#%(Ý®5YIçì¬5©ž^_úoSÿÍÊÂ!<ð0£›Dµ%6×Ô‚ wèì®Ü!â™å˜V+–Eö]î:(‹\©Ê°3H»QÙ¿³Ê̯¶þ%•}ט†kÌ ‘—˜ñF¡Ä j¯0ã u¨0ƒF^`Æ…3&ª‡ª%&»‡¢%pM»‘ëiê¡t÷o˜ñ>D}ÑP_¼¼Œ7 åeÐÈwŽ{£P]½áÅe¼7Bq4òÚ2Þ(Ô–1E;t™Éiê¡t÷Øe¦©‡.ƒî[µ£øŒŠî75eðL»ÀŽÍ…ݘ/a¯¨Í)¯2c³NþÎQd‹Í¹²õcÆÙö©šËÕ‚—=%=êìb¹¢·‘M²¾šGÚÛçáµzVôl{³<¼Ÿlõ-1]=ì!V'º·½ÃφíÌæ‹e{ͱ&ºwr›K—-9&5¨Ó—ò5&5(04^1×O6ûÌF6õ¸È»«Õ§d‘æX–íÚ4À;ÙŽÔ¢!¥hJ€M©2cª¹B«ìsj1e}W1„Öz+€x¨&a@¯»®r ¡@‡Ù½¥¶‘ ÙòµB®Ÿì ‹J;lƒ)Ø‹l.³”e8²M ¬± ݶ–7Q’m%&ûÉ9 {ŒoÉ.:Í!†ããv&Ð+o“{=Ê{“Ÿ±?Ù8¢Ô.Û s”Úe[¢²4#šº½1’ѽG„UvVRûÞÄ Þ+{A[䯲¥4ÅìÙáÚ£Ü.N*«” <\vú*›W¦¾w+ƒÍ“¥"ÃF?Y ¤ È’‘ܧ‘Cá}=¨í4V´u ?È2Ît?Ï5& ‘%JíôgQ„Pˆ,èt —ŠìŸ¼ÛÍ›I\£.²`‚fdéHXÒà,¶MY  É’¡ók Xx«fŽ)ë4msN²LÓ›,(•¹®/a+YacÁ-Ytc …¿ô·úŠ™,ɆºÑdÁG°8›üŒ§Ëk,.žG¿…ëd±½ñéÉb$,ê'CµdÊYŠ­D˜zPx±ß4{UÈr!GPÞz˜zQk€À¬Ý¢Y¹ïÌP&gƒ68o0ë_™ÕßÙXÖlatcYû Ëà7–!/|cªBl,C¹"Ç2”q,[¨§äX¶Pʱ EÞ6–9Ë–¥n,[ž,[×±j̆Çæ²Œ¡à̆1ú_Ë+Œ¡rˆ£Ø†Y±‰Žb^çÄQ T6ŠÍ }ÜPlâˆbG±‰£ŽÅ¿Å&Îfv›˜MŽbÓ’'b¼˜ÖÅ¢KvŽb{5ņ-‘l pÃÔ&G±aÙHÅPÄn£ØèýbûšbÃ2NÄø<ç¸ïJ¨„å£Ćo†ˆ|æ+î:wÄF2QØAl ØAlXÅñ by®b‰Ùb}a7@Œ·ëDY}¢Ú(ÆY‚õ@1Ô¹Û(†:wÅPrËQ¬7ÀP¬Û¶éb¨b·Q ¥Æ6uÇJŸm ³"kȺån ë6ã7ù.$²nõn6a¿ý²nN`YǶ [êdlIqï•ð:[6 ¦7"±Å4YE2)ó¨… ÚÍ ÉØÒRD2¶DQ9PHÙÚ® ÈØ¢#HÆ–5n±D\ GºpÓµLê lX»¬¶óƽËNVߨhë¯>/«•²!–GJ̹W7—Å ém䀿¼jv~æ:)È âÁmÁ-²g¿ƒ}pµ“ƒ 0ž´ƒÄpVÆ8ˆQ[û° CÅV«}œ1 ƒTÍj©}¼Îj˜ïczV;ÊÑÇýdO§ÆlNmú̉6›5â³!OõdÌT.šaÙ6›goH$±?»UEu¯0&‹9Ž926ߘo™Ã X¸ÿ™ãÖG1®¨­®óq¸:¦b–ÜnîpÎ]=æ2™õé{­2Wœ‡ëe~™£¶N–~㙹®¸½Vø®­¦ °#ÃÑâêHK¢\AP'A‡0q9ô¨­s$€„rÀ[¶ì ÌØëë(™¿Š3F)Àu•6{”ä˜]Ò‘&á׈ëé´];(Z;øCÅÎ1jÆ>9ðZ±\¥zrøL]È,0Êùö1Õ@ã÷úIð|îœ÷æh|ÞmTÖ·NÅe* zYH'Œú¿‘QòùQYßÕt71ØVî:äxÐÛa%r‚œcû ƒäc¡éV… ’V\8j§¶„*†›³Oƒ’ÍëQ9pW¤<>ÀQÏ;†ÈvªÃ3@ìw(âÑ€‡+y²AŸ+1ŸhŠŽÑ‘•…¿(Þ}<õÄ3ØcÀueÐÖy4ö¨¦ár¹Ž·¶¸N.šb»_oNץޏ8¤«_wüö??|ºûë·-òqÒümçÝÛŸ^%ms'Ë•“‹ˆH¸·Ÿ^ýÝý}-g„çqÿùéùÍÓ÷åõ)Þ5æýŸ^ÿ·óê?½¥7‰åè¿ó]~½ù_þ.¼žG1~x—ûß¼ûøø»§w?¾~ûû‘QmåûžøW[ÿåÌ K4)âÿÇ7ëií¨ùc÷ýj!FŸö×›ÿù{ݽ¡÷¥çÚ{™¨Ÿœ3O³LGË—ÏÿóïïÿöÃ?½N,¹]íþÝ¿û÷ùºûôéï_¿ÑÌ×§OÿNZð"Y/Ô¢]üïçPÚ» l¯Æ÷½êËÍÿ^µ-îÆñÝ¯Š·L)Ý¿û¿þý/½¦/–}ßk¾Üü_à5+Çq/á5÷G£w¥HA>ÚW¯ÊÇnæõÒ«&Ét x yJÓ݈•÷œÒ#Ù«î50^dAë?“ÓãebrÊr€/é¹Å:‚U°ÄP˜ìV°„VùÒ$ËÝÊ-±•dœÆ;º%´"Àú‹ü¬$ÐáP"[G_¯ßT9ôeÝ7úO¦Wå>‘µð±ï4¼RÛýé§$ìÇ»9Óá8Áa·º9Óá8ÁÁ[Ýžépœà°[ÝœéÀ­þ\'ÍÇÒ1Éýº#xÝË:‚ðÁ;çŽÀÒÞ~ªsýñXnÜn åFou»¹—w“vÓMfÈáˆõ›À9T»ú·zà 'âÑä*ž‰XùÛ_Ý¿©Œ×çìMvËlËlãš™‰?ÿË¥ÿr}Ý8GÓSuJUçê.˜> ¦y+¯˜æ­BÅ4oååU¼U(™†V»fš3 P3Í[yÑ4oЦý¹Ó”“s3ïábý[!ùìÞõR÷ŽïëÞöB÷îÍux¸¹­öî:´Š»ë¼•'Ü{«°½Î[ùþ:oö×ù§ò vþ©Â»¿°{y®b_wï‹£×:>vïõgtïΪÀkĬ oåiÞ*¤Ux+_cñV!¯Â?¨'Vø ‰ÞÊ3+¼UȬ¸~h8l$¢~øWÖ{8n’rÆÑþûkž8W"æõøåéîéÃÏ?¼»‹Äž"\#ö|7|±DŸ®r ïeìç?~øé§×ºÎ—w|?ß}|÷óûçß>Ý}þéîéùñ5{|åÛ(á…W C±ìEÞ€åt~©Ì%%¯¤7ÿ¿?¼ÿýkÖ**×½ÿòŽž[NK÷íß’Çä²W¢gü×ô/Ün•‹8˗㯟å 5®ûôfš¨Mlõd—NíþÃÏüß¼\Rîéå~æf«YëýáZ_â_žìrmÕ9©¡^¢õûïâMãÓPZ³’î?ÿ¤O°ªÜõ5{ü«4êÓ7œ’N}sÿ?ÅXSW#?-7}~gMj¿Œ×ÇCôÛ_êåŽÎøü³4iyÞ?y|z~²ßÎqÿÓëÐì‹=åª7¿—UW¦GþÙïö¬ïÞé–X~‰Wzü!þÓóïcÏ~”q”D/}ûÿ¼zûüÔ™‰7}ú›Ó#Uœ†oz|à¿zý¦]ä U —ú쿇ýøí§Gþˆ•Tõe¸õ;úcuºh¾|’B¤y®ûg»êUÎnzüµÑ¨ÈC êývÿ»Ø1Ïn“tt¡oö´ñøÞzý"b#C‘eQ/·ë_µe dì Žgü"›_ &¹L;gÁ‡Ç÷±Õç§ã‹ÿh7£'$2ÿUZ«ü•\-ø¼¿ùüü|öÀác<~’ßHìÀOâ×züð1Žv"“·|ÿüáþF_î¦ÚŽ×8îýñ‰‹lÑZ þQ¯ÄÓúø._?Óÿù ‹ÙùÅ?üÀ?b1ìë•|ÖVèbòTä×^tÝÅè?âç5ß¿ñWgŸ¾xžïŸŽ)õ‡xÍ;ªf<µÿhð{ÿ•úKý÷ðúM¿²ŒÆÿ;*þ÷ÇçÌxþðùçíCžö(¡PÒ>9ûHΞ]fØoeº1ús¯qâ¹q¯³pRÐ));{½ÿtLhúq³ôJìò9$žì^Ó'ªþösiÔ[¬F½«¯#à½ß»ØHµžýüÉþÜã‹=øttÍ—±ßžéÓ°?Ë}¸ÇñóØüË7ùôáóÇÏïÿôš£sÆô•¢úçφ¬)Ýø®8BžxTà=>Ä!ü9ü×ð+ŽÐZñ3•ëü^_ïÿþ·öhÐУ¿ýÚ©ÏQ©Ç?ò*¼N—oüýù½£øüI¦3G­#?Ò ³h=~<Ð Û.ñÄ¿/D<žE ¨7]ÍìÑwÿúøëh+ãýx›/{stÑü”~âLÉ}ðÛ›®ÒM´õ†N}s‹Fœ)@,äÙ> ÍŠÇ/ÏŽŸ|ô+ ¡Y+G!‹íîË/ào2HÞqSY£åÓeø7Ò5)U€]®÷| ³–âßü&×xy^›m©Ó-(Æø»ûwÏ2KÄÒØ=ü_áÏ}ö\yxÅg¿ÿû{gþâ>á †¹çãº;Ìpå?û’CV^þû×ûƒÿNüoÏ%‹a~>x «Ç"8þƒù#õ’ç°ÄEÒý#Èý:FñçøÇ›ß… ¶Yñ…‡zÇuâî#y½ßŸsCnFࡾïß÷Çü5§ýÍ)߀øÇ7ªáð&ÃB¡çsO<š>ÿ.„7Ÿ÷¤Ü®S>3šòbøÕ0GÙâò6Ì9üÍ›˜ÊÑOr‘uóoß‹’CèóÂ%“Ûæ ‰¯¹B4f rÇ’väÿчÉg/þ¯ç}Û‹äG{ˆÒõÃ^쟙Í[¬³$º’Û¥e䂟ù|q<Ѹy¢'b–ÏŸ¿|“©üøê8²Ë__>Ø›—ë&\afV–tÉo_z¿Ó1ˆ lå£,Ê Î§+þý ½xüä=_J§„DÃßþÉm4¼QO-ò@Efô?ž±Þ‡ç×Â(ÁÀ›cxüCøïƒ{<ß~æ"çÚdâ”?½ÔYoþä!õ×ÑŽtõúšžËÆêò63¿­E×sFr¤Q9EŒèÅÓŸ>Å™§^@BÙωrÊ}Þço0c_þdÍRû:hE‚¸ÛŸëeÿ¹þ€V_n¶#˜úüÅ~ǟ꘤/G¿¾<žÕö6õ”½\_pÙGï;ò׊?gé7³eÏ~„úôý>¹q’SUù¸ÇTú§ÓcÝ  *kÏYO•$Oö.|voÝïÿøá#nGî…öSìÛ?é¿Ñhüù7]Ü!|:£ÔãÍžöÕX^­‰ççøÊyÆÙz*ŸôÁïžx|­Nñõéšy7ù¾á??À¨m=¸“’uy€1˜äF5íeçòB€‘(<Œ’å£üË×¹ˆÃXë_,À|ŽY™Çuÿ™<ÓsŠ—äãqW¾ÿ/ŸOæóÙ‘ýä Å ˜Óìf¨Ó¬¿¼ÂÎc”y?¾³vä^ö‘?Û…ÉÓ>þ¬?`Qâ»1DîÐÛwÌ|ŸSô“­èÑŸµg{¿)Áê1U?<ûýh¥ö³=Ýr nV=è¹>è*„ôѺÿ‹Óß,Î#γì—F¢ ó<øf4tÿÌ_R$5Y”ilò”|ßu£Èü¯ÇÃ%³R/$„ô¥‹} ¼eËRƒƒØß|K@K•“g8vË•WmR¸iþ%Éíä³O†$%Ý<Ñq…ÿÛÉþå–éý²ÜK­dyŠ_†­ïßí?>ãyÇ·–7TÁýÅÕ ¹Rš¿¼”ðᛡóJ^Så€ä‘ÿs«Q2\l| Ë{]ÒÖéìR8™nöß^ wÏ×n =¤îàýûã—Oϸñ8Ñññ—É¿>}²¨Y¼ÔÑ%4üUê‚¡v£æñ#ÕSpþu‘ûöŽ¥yß¼G{ûã£wþ 8Z{yñ¯X™ˆž¼G[Ðøùí­·ñ~c°-ûéò1.8ÿÿ~ɺendstream endobj 253 0 obj << /Filter /FlateDecode /Length 6735 >> stream xœå]K“7r¶}œ“'Ç*}sµ­.ÞŠØGìÚëØ=¬—7®-rHµÔÍ¡º‡é×;3ªP@WuÏ’Ö¡ƒš5Uxd&òùønÕµlÕááÿÏ7ÝêÕÍw7Œž®ÂÿžV¿~zóÿ£ðIë:ÇVO_ÞøOØŠkÖvƬŒmçÔêéáæYóÇíñÛõFxÄLó›ýízÓµ²ÌjÛ’½^s ÿpª¹?­ÿ÷éCGÌÅqݵÒYèìé‹›†©õÓon6R™V ¶ÚÝò®³ø·gÍo¶§ÛÐ-´ÌCs\ÆÍ Óv¢c¾¹gÍŸÛýzctëdçøÉ•lq0»ÃíæÝöøý‡*-w®Ù½~…W­³²¹ýÅíZA³ÖˆæyeèŒó–u²ïë ŒÍº¶ëD³{Ií Ã:ç¿t@ÂÖ™Îh[c¥]É–;é8Íü—8ñß>½ùN‰­^nô¾z<ûÏ.;Ñ ¹2ÊAØêO¬hùødóç*gÓ¾{ÆÊ®Ô¤h™àž±¿\oÌ€YÛ܇)+žL™áüØJ´FsÆhäipèÐ ‹ß„¹I={¾þƒ%m xÌ•éY¦ »çþ‹ÐNÂs¤¦±ý;B3"š´i™ë¸Xmˆ• ãf¥1ÉÖ¦¡ùèÅ¿¬C“*~S·Z›adS¼ÿ9GÍÌ, ˜ýèjàÈ(P¦ˆƒb²Ûgá•DÜL’UD]h逑\ Ã]«øõr M¶ŽšvŠÞüç’Ì'šçY“øÞD² ô)-x?YÇÏéfÕZ4û™š§tdEó´‘¶R¡ŠQ Ýµ÷IiaÁó´PN.S{ý‹£¡JÌÓ*¦{qi×iÁSìló»µå­÷ïîþ›„XÑkÃàžèÍs/cN€œ5䊢’ì$¸b¨Iº‹nªI…X7±Ln÷;ôK©;gšÝ$ù¸fhµ@ ïÞ­Á3…Ã×÷ðŽ_J=t eó~]ÿÀÙÕ¬9& Þ€ª‡OÀÓN{xÿãžkîïB3h.w‡¡ Óx·Ö¿ìéo¹Ê”4Ž}‚"jâ¶‘Ei^E¯ï^’è3öóF85é@HD \ ñÁ~÷ºFÈíÑΉ„)•b>ìžÃ?œ"3 Hÿ¹Õ^è·lN^ ŠL‰ywHYžõäÛТg[øWQLBóu1Aé8:5• —`QDÒ Ó)°NH”ñ"-ƒCài‰CZNÊXÈFbÚ\ BÈ‘¨ Ù©ÜÄ¥žR¦2rÿgª2Zq20=&”÷SŸ5Ocâ ß%˜®¾¿ôëW·±f8Ý÷/2*’í}ÿ5¡;="ì|À,Q ¥<ö´†QÙRZßÏï`íHæhé笆¶›ÃWVé3r´MûÜZüª9á@æMƒ!5ª:.†Ô~J<¨ŠñëJ§@(ß'òôªÿ*íÿ‰œ¥Rs C:¾ßᢣق¾ýÊOL§m¡$ Êá7Oÿí0æ¸Ý½úÚÓW@“/#ÞÜ߯{úlýò”l]Ìë7Aô{-éÑöuÿ¦¯‰d}ÜùŒk>ìže‘›²n×^µ…Ɔó<ÂRæC,Ê|Ü)zúúìv­Ð”Ô¨Q"ƃw^##ÎY&ǰ{pÌOH]P¨B‚GÕ2&ó÷›²¯'ì$Ä]BÖRcíz§ã9q+H™ü{qN¨w@Û¥ Ïf"™ÒbáL/N$³{qÚçRÖçž°¾’ °["i æy#;°”2³”´^cEy("\Ñq“†ù þeÃzï”+x%_ź䔘ݺ( džaž'–Rˆ' /å8PL1ÇA„Æå¸„¹ý{Krz³BZá–i1˜f‘8Ö/zª#MäóGU‘ζ܈™ƒÙÓe4íCÞœ¨Ó3 •%3—}cÕ%øJ{­æÔØ ï>'z–—¡ 2вD¸ D“-ƒ±l8\l’RK‡¨[nщ½ &/% HЬL×dJXžE—ë¢Yœ•G4qÁš!=¤k¢<¬bÞr·Å&[Pq‡¦±xć'góp©š‰8h³åØ&økÜ$‰¸Ÿ ²tq%GàÛrå§e3ÌÃsÀ¶RZ` ômhéKôÇ-ùš‰‚Y92ÁÄ‘#c¹ö™äcT% þ¾4tpùÌp|m‰ê–¹\ÎzC6é1= pŒºÎÔ< Œ>5ŸQ˜Ú>p" <Œj^2[Õ³¹¸|Úþ'köwý1Ay­ZvV€ÿì´«›gWà±lU'\*ø©òÇÝP8”û×*áx«¶æ% ^?‹ „!G›®Šð†¿IsUÏåÂä5ŠGôâ’µž:p×í|ãß–£ÆÀCXÅ/~ⵡì2gbÁL¬QÅ™L‡zFãBt¶0SÜÂéâ`ŵ¡ª•‹ÒÚˆ¬ÚÒ¢º2€VÓå@Lgòã.‡TØ1KUØXÚÿ_DéFƒ?KF.„ M‚9rL„ •¦†)ßÄ.ð͸¼@±`B~?Ek¤QËàf—•.ˆRÛ^F¿,‚x+бëbéÌ%ÄΣ?Ÿ$[z¾&Ë5Hˆ ’,-r ¯©# £2çåcÔöBMÖduDÆLRGüâ›ÂÔÀ1cÞ$vMÇ8+,Û´ q4¬'XáÁÅE[h°¥ú·§Ó¨sEÛ1T«[29Cì± ÷1ª¶³Ôþ¶Hmg îÍBÕ|ˆ¼°K®¢ð «Ë ¸¸‚¹š1 2,L.Y—åd¦æ¬^w™ò^+H#…e¤èµ!ùûä¨äÚ äÿ#€X&äXTÍŘÛÚæ}R­‰ka°öÉ|íÎøÊfš›ïë£F7wÇ,7O58hë6I6û‡´,×UNíz£Œ¨fí è+lº¬SHí‹.°›5>úœíÑmNHÏËÏÓ¢Ø8o•6RaÊ©ù-‹8xZ¬ù.N ö•*F_Ø~m“jöPUµ:Ö!ª™µT°Ã¬åJYn©`# í^Ü ëZ¢Cæ[I‚w&)°m?m©ÓZ”D6TÒá‘Ê\PÒ›”;°ÁšíÉ7ŒuJee¥˜¨Ò¦(ØjNI›i¡yûÕ*4ûÛ0UmŠõ¹"tàÔw¤«žÇ¾€6©tâ[*øºôÄ —% -°›ÿO)S­ÈßÕsŠagI!^(¸jÞ­,ðŽcqs—UyOË+rIåñ»×·Ca‘jpÌËEt-™‡à¤ ë æÜÚ±¼ô´¬ö°,D ‡†L ‘øºË— Â@Û¿ó¯úlUÿêrRÞsÉs‡*A=jòœ dï>Žõ Œ¦ C?¬ Q*ù<×3[Hì_,V/Áç…À´÷ÂßS2’£W\ê´^ÂJbh2íVת‘ðÓduž8XY°<”y.Œç§Ì²³!º^‹”Xv«90øÁ(ú*N. Ñ$Ÿº4#ø¸9£³TÚ j¨£(g4ƒ_,j~±b×û÷äUß9ÄÈÃNúœ/C‰9{¶8µrÞºl{ì•™XÌmYá0Öœ«ª¡À¡;^šN>È“ØÑ{õªå0R›êèšÅ½¬ jî^öö`»‰è%Â; ­x31žEÌïI aø¥"Ò,^¤Ñ^fä®ÕÚ‘±·2dÊêE®!v¸` Š\Cð›²:š+rUÛÒ2cÝHÙ!yñ®ØiĪËu^”|>µB¯TN,ƒ(stËÆ'WÔ*ÁùbЦt®å«¯U~*6ò!A]eã 02KûiÙx°ü‚‚çÅK…@·–ÆÂ\†3ÄΖe>Û<Á”H‰þÅù}i—2h)­Î W©65ë‹ý8~ÆuÛ‰a¯¥ä‚´ÛÇRYÓ,äUûëÎÖ<5B:p5†q=|å³lÕŠUð™À­° `ý«ÿXjÓ´"¬ßáÅgÀ‹Pò³A°8X´°a¿ó"<ÉÅFr¢0LÆüŸ–Â`u i©Î)Ðst6±'é0 y`E€o ºT¨L’½ƒãÀçÈÆbÊñ~´ ,°±°€f˜I­¡¢Òš‘9Gšu5šÁ÷#íù:q…*ÐÌʉf‹ôïbóY÷5R•³€„h¥æHX•5'—‘í*¬h¢®°Ê‰ï€¢1:ìÔý§R¼±ëïlµ‘àTCá 1ì“;Þ øè: ›&YS|.î$ÙÝqd†·R¹Y7ô,.©p5œ†Y÷Ú¦±¦á˜•w:«âò ýBŸ¨,mç•Üyi[¢Øf¥Mv ¸ã,½Š:áó;:MEtgŽeL˜€([F÷L¦1üøÈ€ ðHv1¿]*_ óéñ#ĉE6/Ç&ðða€¥ÂÐæ%†ùŒáÉuðm"šŽÿUÂGò—‹d¤\,þ´"²z:¦žvüZdÊÄFý?)4Ÿ¦ü4ØéÎúÚQ§ BÞaïÐÛ2QGv–‘*Ã~Ï3²ÖçàS\'òÎǪk}¯«oÿôFçúgƒ/úI€­®8±vr4Á‹|¿W*éo¸êZëïÕ=þà$L¡íXB:»ñó2Û ³„Ðõ¶aY*÷Q‹×TRÁ>JQõ*Óq© 6_l®>²pÔ€ÿh3®$¨†•À^ƒçàAÆÑƒË#®±JçV™vZE³t2êÜñðKfˆÊD¨÷x¤ÍÏ£3Âaqóè Ã/Ó)ç‰8£HhœÙƒ{>*åfÕÇÇ Üñ›Y¦K(·žÁZJ¶œã‘²@+‚çB”áy1Ït.„'E ÏÃw0K–×¹é¹ìÁ&á5ª¿Âo g”׎Téæ÷¢,Xª—q6HRÕõyùoiyù`ðB?MÐ_/033 ŸòÖ»4é\Ü8˜ÎŒ´ãj†K±?jaÎåu‹¡¯WSzi1Â2~qâàá/ƒy˜¬ÕÐOšu¤ksô“/Þü¥ ³’ll¿£@t‡7CŒûïÊçsÔÎÏGäÌp|>‰»b)Ñ,”<Ľ¡ÙIW£ïËçþ k.9'at¶t»^€P­˜è±kPcuíZ¾¤º6?˜P]sN+™ƒ[ýØ,ܪ7£÷wG×Iù¬çOýÞ††Õ5ÛâÀŒŠA¦ÃmüdÕ†«V¹Eô{¼Oc‘ФWm8ôtP¾ÐÓàrÅn³Ë´{‡•ÂÃñh’7ùÅça³ ÄÕC•c$—C_vVŽàbZÅ)Ãòž¿üÀG-»ÕcꇈÇW Jd;\G‘Âýñ<ÛЋËà‹xŽK*ü‚§±õk\¡º͹Y÷.êšà)¹·™Îß}öœÞ.e´t¶ïÜ £-¦Âá§ÏÒ;Þðna”ß§k+¼ž‡Ÿù•œö‡Óá55`ª™¶ ¤þ|P6¤é®8›NÀ¥Û#ÀˆDw‚—ñä½Û0Yà䫪‰Kµáv¿»%Þþ¤H«’ð`[tÚä@7CÒÜM<øù‚ë×jPWßüé0¸ÚÅ#LýXz*óÙâñ‘Q«øE?]„°÷v/êmJ¼ÂNzƒŒ`þΞ1È#1’ñí·§ÓÞ/‚?ï Æžw*Ƕ£uÝ7m¤͇í!×òqf&¬¥“Â%~zõåþöÃéíñÝ“'ý¯Ó›=žèVðG™ÄáUŸLèKw‡YSP¸0 ;’;›æÍûS˜DáÆ2úPáµ…Q‹ÉÁ†·áã°q¤¬?·©O‚à–MèÉY¾B¬¹›àS¨ÌËYiéÍÌ †M]èµ÷€Ò~S×6vm( z´ ÄÔàÛÝ„K AãcüBNOu~Ÿá4È”d/¹?Çãz<,ØwýUƒœùsQñ-0áË=QºiÉä,/J&¶ÕÒT%óxûª(–È>ï<­å]bþu€Gß~½}òdûò¾ÒÍx”-SrðnÕΈ%J¹Yú£“¸è'¸EQhΚ‚µôMcšû#*EúFA³ãž‚ía-°ï½]ýfAÓµÙÙ¸û~|jŠ0¤ç•|duŸðîqAT”¿3EE G¢²„óíxŸ9žîß81¢Ä»ÜÆã'éžF"¬8³‡j`‘´XrKý†2íZž­Üd…¦7_y]Á“§ûá^NÔ'´­EÒžÈó®XaH:Ý>8¢ø½e>" ¤ßèI¿…Qªãç¨PÀÕ"žM õ®¿b²1-¿Xr¿+„†¢s0A…fHxù³×ö¡³î’hf¼ÝŸîú_û»H“û~¡ãée¶’À=œ¸ ã…ðô˜èðÓËèwÇÉ=':¬šùKã?$qG’¹O¢‹<3ŒBˆ%‡YûÃ}ýaÖ>îBz¢2’ivûEq¼ÙŠwI®é> ÅÂRãsÛZ»>\Ã]U·atå•Q>j»Ÿ%Dœ¹-wO–Rw”þüÕ1ÇL¥ËCX½„ÐáØ.?Vöü–”¸Èo’~ÚÒ,;?šY2ÀÕ‰|ý¡ºŠ_„ÖKbÑS&IE-̬j‡#Á¿Þþð»·¯‹ vˆ µðhv:¯©Â­­!]h–¹YSŸµë·È}î•1ž¢>¿±¨¿†Åê©v>ÿDD¸s`?\kð°ø‰NÌïíS°é7ç;ðãòû“k~ˆMCA‹óp¥8'­v{ •<Ò£Œ|Æ{à Åö¤ÍPöðn~…ÅŠÁdå°Ž,«XNÙ’A/†¥V?èE?v‘úñÉ ™úò‘ zúÒ1ý.„iô\Ö·SäÔ>_‚¿ NRßÎýö«Trý_”îû/-§€ÿO7ÿxˆ“endstream endobj 254 0 obj << /Filter /FlateDecode /Length 4782 >> stream xœí][ÛÆ.Ð7½5}lè‘j"vî— ¤ šERä²@¬û@ïÊ»J¥ÕF’Ç¿¾çÌ ©r(R»vlÇ–"‡s9sÎw®Cÿ4%%üþ^®'dz=ùiBÝÝiøs¹žþã|ò·ï¨…;¥%–NÏŸLü+tªy© eSmyI¬œž¯'U³óá Iâ74-•Þ:¿š\ßÌHI¤0ÌÚb»˜Íñ—¡F™âÊ=áš[,/ã'ûåæ6z¸›Í9‡a©.žD·7[:¾‹nWÛjÆ‘Vèm‹½»dQÅ_ámVZi ‡9Ó¥U´Hæ·®VË]kþu¡‹õŒ)˜+žF/¬öËùn_íatÍŠ¯«íÿf8e¼Ø¸+£mñ [Xa±Þø‰.%¯v³ÿžÿ«³Ws%KM5›Î¡/Ž÷p>[U;  ”Ü"©¾Æ %Í‘fs˜–*¾ +„÷bÊûEzêÆênâÜï«â{|dãÌ‘Z!ÑE:¨[1¥˜.–ïÏzžT)w !þy>ùvâY\N·ý¬Í¸m‘cÖ–„”Bk+V*ÅkWÈÙ®[x‹N¯wà33ýFùb¢¹.,H!J1]O¤e¬$¦¾±š| ³¥Ò&}h©q(=¸Wè±µå@˜š­ ¾uC \µÜ9ZKµ*v¸ nµSù»NîvºÂT¥ŠçÊ(…} ^¶ äíÝÙÙõjp€%붤ÁÕæz6§(ÅÒŠÀÀÐ4~Å”†ÝßäzU%3Àx¡ ôãڤ݈’ FÃÈÅ>4‘qØMn‰ M~ #‰´ áÄÔMžç&£Kjš^.ŠG³G3”^”.V|’]"sÝÖsûS®WYbØà ©©øqnú¦ÔÆ038}ÓÐræÛ´0…+hÆì÷`Üø¥þÝC€Øe̓Ʉ[Wɯ­Å.’J•àLµ\Åxº]˜Ú/×qYn¥L–Jò°¾'«ÅóÝÓí³³³új»¸Î7a\®,å85\ s¡ÕC\h”äB2´–0~àÂ!¤Èºµ@Ë#hT¥rŒ=]´w𤠹Á«8#|5„)„½ˆýmè ÷hþæ°RPS æowû»5s<ØË€ôeðçêíG?46Fñ_ݰ¦…Î,š¼*æ S2Å ~ÆÖéØˆ`sްALB½xŽ07ëwÌBؽ“Äí¢ ¼DÝ«<õ;JDÜåé}Äpyš5\ÐÄ´ >PŠ„®ùëêiÖH2ÖÌÓg Þ P=µ€¾èõ[–Îjù"n™µ{8¹‰¥ólùl&ZXüÎٽ̛ÝÝjy»x¦ùEñ¥[…ÚIß:øÞqïx¶ D#ÚÓÀÌ F:å§ëƒ£:¸×L×t˜Û‡¡^€ÁÒ€I ÞýùÍsÂSå^îڛΠ-¸’à#;íU›œq¡†-¨åcsQtË#b“Æ@M+¸pˆ(ý²# ëëK°ëêí (Œ0f³ßæ€ƧÆÚb§¾Ú\Ïobv|óbµ½à£T¢úûfq Àç/~g§w„¼Þ;É:ËÇô¹x°EV+߻ߵï;ª}t;ŸX  8.Vº»'ÑÍvíss`8‰I“RfÝä¹.U¡5×½Xl7_o®«á S2k?”¹ÇDõ~è{]`Ø€yÜòM‹ËÇŒÖ\’|Ž#mÊ—]…t0‚pÛNA„›í»³3é@­ùx]aâTÌr¬ÍQŠN‹îžÒ¯«¢qW>ãvAåØî|У‘[õ›’¦“˜a-©¨žì‹)¨ŽKá^*ê–¯œ ~‹RñA–"p)°öà%FuˆEc¸ôH…FëH'¾ðA&®’Rƒ"^îÁÖCÏ×WâŠ7DT›ü?¢6cÏ_]½žÖ5ÏЯ†çOÐÑÃqûš¼EÌ%q{ÚGªD6n?ÍØ@øƒA‹XUB‹óäÐ¥ÔŠ —#ë‡Kc¼Qz±-Þ֖ʈ–Ò;fªÝ¯ŠiLè¡-Ù7Õ‹ÏŸÞŽ•ë·ÎBiíÀf©EÛ ÿ>¢ê]°«eË#w«yoœ‰ºH-m(ãT›U¦l䮸œÈ+ߘןùl.@'k,¦ùš"¼žðjüø‹b7;]%¥‚ WÁ´£ L¶ˆU½ç0W{WÚIáŠ7§ë “ ÓzÍ,µë­öƒ½7Zk—€­ËìŒ~†H®œgÖTûaÆó³Vbp3§ Pš>¯‰Óû÷f¿ØÕÍmÔœ“R«z¡!TŒt„$²E®V/¥4Üf"g‡&ºQ7Ïs#ÁªãLì,·<]2ËuÝMu{•›è\) ;}UÉŒÓE=hÆ‚Šš7+ô3Åú_ˆ²¨¶ø[”„Ñân»¸Z^Î(²-ö›í.<£Å“ÍöðÞ~¹F×DƒD‚¬(I‰j˜7!Ý}~j„7ÁÌ GM?øZLžX #?›I´ê…„¹/Áµª-Å„XŠ5¸õ<7ZB¬‹â#‹S`tãÎ- Wg: 5„î €–Ì »tn Î2+ G·– ­ïÔ3£R² }‹Œ$ 0ÎËl hP:‚1Ü1b“H‡=~—‚7JŽô &(åÁVñj.Ø*h¦»P’{›«“?–ïF!÷¾@÷Kúœ5åÒøìË Ïtófö`IÄXOƒ$=Xݺ¼ŸÐ vnÎ%Š aÂk¤¸,ö•¯feæÔ8Þ†nâç¿ ­]Á¾ëÅ€/µ­_ÐÊ{Vèpñ£ŽUx›U}mD‘ØwûÎ_ïwõ¤m÷vîÝ]_ #ÌÉ[Š­“ ø:ÈËN°¤™.é&Ž–Ô´4Êc˜' ¶©9ž{×6 •m™cHh@šÍ“0†l ^'DqN.žDh¥´,«Æ¶þjrþ×‹È ¦‰ÓœpÎjW±ü|fü p¯V¿ „À&J.WÎKx6Ãì¤`‹øÜšc6Óìßáb´£îEa[˧<ýåž3)9~p§X>ºéëy[wÌ[lS¯OÉ„SüˆHà"iþ"93çO‹]hz Ðɸ‘Ä`ÝJ¨Và ¯Ã%ð"F›`Ü»;ÂÉ©œÐð™ÍtIó"ÜåE4F9ñÒBÆ9]•ÇÌ– PMâMÈgˆÞ+#FHÙ™•šéFƒ|iÛJåìÑ µ`¸8¡Ž !¢^+¸ÚÇÊ ~@“(E\"dT©!Ðä+ÇfG‹ç>Ê®Æ*i÷ Ø(îÊžÿ¨åíXrÀ¶§‡*½˜2hƒJ럀£}?¿ÞaÁÉvÖƒïLê”®1ªÖV/A{¥°OØÃ÷kœ1¶K\—0g¶Ôâ{4ÃÀ'*ÞnL§Ãéž3°H¹lÉõoë TËÖã%7)×Ô®ü†:«·ñÿæ.\hA÷k³·cU¿$Û~¶|›*aߌ—ž¬’_[çpn&¡œ à¥ÛÉÝÄNœóýf‹Ü&ÁÝ^ù:9æä¨xÓ¢'Œ¦.\´(åñ$OYµ×âûb]yÁûZ»&ڼ੧џëmÄ .ÝG:>ö@ºá:ßsCã\ 8ulRw,µÁ¢ „i$ÓOB¸ïã:,ðKxÕXÇ*nŽ<„—¯<=×M81ùJµFüÐIC‡;s’ñÉÄì òìýä91|ÀТʌ¬*i•Q¤ªœõOUy#ëÆбJÁFãeQE”F˜vúðxÆ”í낹¼ÖO^0.]‡½»©Ëêi*:àz×ùªÔ ¦J8‡H–ƒÞŒÿâÍoFYY{3f”;#Ð!Éš‡%U36æ¢Q°‘°ÎY?ªp ³#N*tíg3 ™úB¢‹›RC\T9/…æqTâ½,ÇR€©?ãùð²âÓ¦œ‡K Ø”QL®ëézÂ~WÎ6wŽ•ó´† å<sûØ'a¥²á«YŸÎæhµRUxõ)ÑYÔqœý Šþ-‘\DªŽ§ F¤0,N0߂ĂïÙ60³¨šÌdÆ\[ó™=YÇÖzа£¬â£Y¨ßÁê¥(”âO°. ûca²†=»0ì+n2%Já#™‚–¨P."Ô¡´f0çHJ«K9Ö ´þƒüt¸¸ùõ–iÌßV0ŸÂnp ÈÅ !&ëÑ9“ H@JœÖqƒÖ$½sÌ$ËÈúD&›RŠ AãM²“ÜÉ,æ)·$qÝà­OÊCÖs2cÊÛÙÆ!£òõLkßi³ ýyÖ ð\Š KQLo\Àµ8a7Yó½‰1G7~wŽìf÷ì €†èÏÞ%kÉ‚wÀ†ìĸZ´çQÃ1Hüfûû™ï6•—âð÷~$\c°x#=ûëôˆAuÆ0OŠþºaœ»æÎ=üuÍðüÍÔ2Ø,ùé÷×Ò³pB{Hë:ƒAa _¶0¾–-Íûá :Z³Ôâ‡Ä;¥¯¾Ú‹¹´lS-'äÑïÁ75ÆM¾§jj ÙØ‚Eo&Ц@5X¢Ç Tƒ=—ùwg:—®D G£ðèËõÝOþs7ÓL=iïÿ2à«L҉ƭö¡[÷ß t³YÞN£ü§`^}ÿEÁvy}Ó”ë,Þþtkr8`³Mž]2ñ®|q¸€o'ÿtöQiendstream endobj 255 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 268 >> stream xœþþLMRoman8-Italic‹øÉøM‹ ‹ ¯÷oÉÆÃaB˜÷¬ÿ$œ§ø§òÔøÉ÷#˜}‹†z‹ˆr…x>vjp‹o‹«—’‹•Ž—Ñ÷®ŒŽ–‹›~—z}u‚o†v®n a‹û û û(û#+ÄKÖÆ¼·£ ”f¬l»‹¯‹£¡œª ³˜Ç‹‹ûVƒhI;P‹\|¾³º¨÷ ¤¹³Ô·Ÿ§‹Ê–6ˆ}v øC•÷t•“ § Í  To §ŒŒŒ°œ– ò1lˆendstream endobj 256 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 285 >> stream xœíþLMRoman7-Italic‹ø÷øM‹ ‹ ¯÷€ÉÆÃaB©÷¬ÿ[.§ø§÷ ×÷¢×ø÷÷#˜~‹ƒyЉr…}WzPf‹o‡©œœ‹‘¢Í÷œš‹‹¡{“|jiˆŠr´fšg‹ûûû!û& ÏRÕËÀº Ÿ˜[ºw¯‹ª‹¥š¡¯£²™Ç‹Žû9÷3aû:ƒlustubgl†|‹]t¶¿µ¤÷§Á«Æ»®³‹Ϙ4ˆŠ‡‰„wŸøC•÷sŒŸ§ Ñ  To §ŒŽŒŒŒ°– nvxendstream endobj 257 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 302 >> stream xœcd`ab`ddôñ ÊÏMÌ³Ô JM/ÍI, Jvÿîýþògk7s7Ëúï³…Î žä?*ÀLš œ \ ÌŒŒ,‰û¾¯áûÏØ¿áwEÙ¯êrƧ˜¿¿üÝ$Ú=¡£¯uÒoÑï\)ß=º¿;w×_ù=à»âw©þþÞ¾î “Úú[ê 3†ÊEk«tÿæîvžò›íÐo®c¿ù_8Mïæ˜4¡’<Šáßë¦ïûÞ/Ú}·þ;Søwæ€ïüzWê»9;›;Úz;&µÈ ÿÎô[¦û÷ÆîßÊ…¿£«þ–îìhoïnãèèmž:ýéåïŒåv¿^ü©û;_éÂÎs¾çM›¸m×Sn9.–|ÎÅ=½@Ø?±§gÒQhW…[endstream endobj 258 0 obj << /Filter /FlateDecode /Length 399 >> stream xœuRÉNä0½û#R{\Þ‹Ó Ë™áÐ(7Ä!jäé,˜?v”H \ë{¯*õF*ò7¿‡†úBÞŒQ:?‡†^–äǽÉŽ–Ïdj*-páu¨¸@Cˆ<°»ª?;¥R»ªÅNpaó L{òU3¼‡endstream endobj 259 0 obj << /Filter /FlateDecode /Length 5460 >> stream xœµ\I“ÜFv¾÷É>ÌÉ>´rtÕ W$Ä“¶ñ̘ ÏHíðAt8 .-ˆU,ªPl²ý{ý3|ð[2ÜÐÍéP(X]Èõ­ß[P¿^¶;qÙâþß燋öòæâ× Aß^úž.¿º¾øÃ÷¢‡ov}Û‹ËëW\4nsý L0m<ÁÚT½ƒI×/.~lþºiw­ÑNö}sz¹Ùâ_N8ëšôDu¢í›ñyüä<ßD§ÍV)ØUtÍ«hµã‰¿‡o£ÑÃi8ø}L¯¬vÂÕiÓ ñÂ/ðk¹ëƒ¶²ÛõV4ÉãÑÃ~œ² ðtÝ5‡´pÙ¼‹&ìÏãv:ç—~÷N6ß §×ܨ—ª9Ò'×õÍ-ŽÐpÃæpäƒ8¥%ï§Í^ÿ¥`Õ6~«ÌÎYí˜ïŽˆÖé´UĦKßšõ ž6Þ.sx+#ã­L·S­ì˜ÉÍ³Æ ‚ŽÇèÔNÈc¾óC’e •a™ IoÕí\çzäiœ¥8›ÝŒhhes€ç©Iˆ÷Á³ZYÝ$b–1^º]«zÂ8ìýR­óÈ"¼(86÷TK("œI©‘©RC‚íüîRèÒV‹…T;£°ØyÓDí6[Ó¶(?>¼Ý¿<¼|³Q-ŠV×€ü¡6UåEX¤——[XÔZ/.ÿ±qx‘ÞEaDÛ‰&&ô€bÛ¶±E"µR/Ce3"Ùiö U9;¤qs.ÔÊ ƒú’Á¦GµU¼9žFÿ”™qðOE3¾ñ Ý|Ïçêá6Ã>wM23Þܓɨ˜NRY+ëùršÎoò‹/ ÊÇÛÿ:L‡*/[¤‘RËbÃ÷‹MD,l­´Vv¹ DKâhsè®m“XÐx“7»~e¦º«s&©Ø*¶ér+P²@XÍê\$³Qp lµ­Qìµ.íÙÄõB6ï'~‚“Yñ/6[K…¬‹­óŠnz6Ö¬ëÊdö|\ VáìOÚ;¶º­.J|g¥’0>ZÑötz§7¥  [egžÓ͵BÝá}Œmޝ`Ÿ¾‡õ ¤Õµo•¸¨iœ%žžÀX!È® áPÀä1Ù61ª™ÖÏ7ËIL÷(ŸCBâÀT<½¸þçK¬Ñ‹ÙÔÍd´qÃû¯Þ“W›üb­÷2%Îé¥dmó%K)³6È…s'ä"ð4pœ¯žmžÐ² –¨ÞëAÀBgïJañ ¸ÿìfÀ+‘ªñªNÇ×ZÇt-~mÄ ½ù±"Í›ÍBf.âI[äüyLx<]ÁZí¯Îl~¼ÀÍ€˜$Ié3Qƒ] ر»SìThI4ØÉÕÏã~œ7g˜x î]\Ÿ$Ϥ”XóTiè–A:èÐ{{ó_¹ï$ZÚ¦»d½óñœÚéɯâS^•¾³+÷ðÖuJ:G+$ŠÀÔQ«ànÕ¯žÎ{.=¾žíkjp<Òî»,€£Ð¤•À~à2H¹ñÌtís%!ÞjðõŒô=ú€5@sÿ1¦^ Ël ª¦÷´8¸Gô¯DY캦i»J˜|íèˆ j¢„cY//<[àEQ·e Ž?­™ñh¥5¿‰K 9 ç\Ði&úû$@ |ÚéÖe¦$ªòš¤ZЦtK¶t-³ÁVëœüuâ•[w´ Ü]ìŒ_ Ž”Û6ÝØQ/‡‚ & 3ì_úUÍI–T¨ý–Bú³À6`:D»|Ÿ#>b©Û´9B¬U¼8c.ºDàJåhKR0qì7ß½‰­­B ì|°ÖüS5ž3`ìÕœÕúsU¨ƒç¾âÀJã$é²ÈêO‰/§«[?F!îܧ6ôátß$r1$$¦ ç22/ QE&÷ß­zÄ^íTçÄÃGù„ý9´`ž:J¦$& Oº1[9PŽÌÊåæŠî:Zˆšd.Ú¶õ£zY‹=½™¸_¬ŠãB^®÷6DZìj€úxÊ` ްvg¤aÁ1L°ÃsëY#Û«¿ÓPìð¬i¯Tûlólä´Ž² 9Fê‹£j—fC|ù1Z‰CÛ”Y Nz'€ã†"Xˆ·ß,¡÷Ÿxs9óg†{»„é{œG¹JÜœ21&#NCMÊÒv @+9#æh5g„KωÍáÕùôò¦¦[?n;ÇÕÄëÙÛ‰€ŽËä-^µ·$È1ëOÇ>@¬ ´7…pfè¬:3Û¸—ñ…‡jQŠsJ†‰‡ðA?||=Ü$Ôì»À<™¥{„£r=c›ª?‘³‰8SbTèÜhlCZ€ŸÁrí7[ø?ÜÐ_ôˆ ü5žy89Š.V~8¥¹ŠñÍò¬./žÓyy¶¡ä_[ˉ&žÀ#LÎæ'öà¸ñE™¤ÊqzöêLrDí’4&EíUW‘¢>ÆÖ¨”…Ã>ùóA¬K”8•R’"+Y óž]ÅúhÓ’ ¬Ï™~M‚€"kEãTžè9qìÑU…€—–™3 ÀFÞrë< nQ§˜T;³}™”Â½Ž“L°6DqN¥x³ø3‘¸þZˆ¦ÛëU˜ý%Ï•*ÞZö-å‹tcOÚäC/¥‘¹ºâªÆE=.,]²Mºž’H«ýX*iÚ‹•-¼k¥Ë€lDI¤PŸ(éÔ`SÛ°ðbð¥OÌ;øVùB`Ki {Cœ)2ûΞË€¤±H©.!K¢]Z.A‰~{¹±‚ èy<„U:”~cñ°èÚ˜+-§ÐnW;xγû(–%3´ÀK â· þXhÍ´•š††¹+ήSÚñç„Iá ”&­ †i.•¬"€Cuã]ut늉¡-[Ìc§l¶•bL [›™÷@7 ¬Îªº…W‚¨ßúÈá<Á„Yˆî‰n†n©¤þõqÎ!Ç–.¾Û:X⤸«ƒ¾… ßdü\…§a¿¿ó‡tjÚ§hLÍó]tƒ ÷O*%?¨"–²7 ÆR>”ºÆJF«¯¢Ã5o_¸ñCÊÈXQƒ©’&‚ä,$åž5oÞUt{Î|{}ñ· î'4—§ÇöbÏ@­KåìN8E}„S#~ÙG¯gÕ®ëâå~lýhm©,’†‰sA¨†*N$Rb½½(ê¤ä'•É’bÃy¡a‰B¦. 3øx 3šÞ«`î¤Eí-ìþ¬)wa†ð›+Ò¥Þ´™M~š“X­(ã?Oø=§Ñ#X—w¥ °„è$ÖÒT…æ];C¡ê½}ÂüxªI‡°¤ß?kÈf_aæPQ²ÓõŽvEn Ã~€XWDP‹7þ{†LL+yÁs>¸HS«;¹ûNÞ› `24A­õ£ž²ý&-aㆃQ¤+Ð/a*=nQ5dô¸ÆN©³Ó94?ÊJ÷m"ïEf"äcÚH!ƒ|$ÆD•¯îî°\¥=ÆäQĘ\* /-+“¶±%ĤmYîR£MŠ‹0}-]gļ@ž‡zhp:÷“ÑÎ*ꡯx‡_wõn5¿qŠÃh^ÐPÙ¤¼<ÆRY¢.&á¶È>5KûØì§† Sµè© ¤èG-”=RÕI`¼gÃÏ5tߣUý(tèWÌ›u“5#?‘‚ÁÄX˜ò¹± ;ÀKL`­ ªOÁ‚ àN&Ë!"¨ôÑ ÐL¥MÚ±e–Ž­o?ÐEu¯ ¸Ö›êWZè†h«}£V'k=ôØfFg¤¶¬b·™­ùpÎLOb_U”%»*iÛ4²öw½)ƒéûêÙõ$X$kí¥ŠYe`}ò*ˆ±Øj3=ÕzèLµ¾Ìž0ôÓáÀÚ)*v;tHÅ×xìùoh¥âóû÷U>.Ju;Û%tid+ºO_|A÷:%õ³— 6t̺PöIƒdÏñýñœ:Þ¤£r8„¶WÕ|•úîa:‡úæëá£ÊÀaŠ$@†`[ܰðÍ€d+­¡4ü3Ø pJ^JËZçéóC|»8nMB\ŽJDÇ«Ðö´Ylî¦s’L§çŒJÊ<z¨æ©oáv|í¿  ¿|ŠèJ FJ¸ø¾Í“O—\Ù|M,%cT]¼B¢†¾Í¯½ç ¹i&Uó×¹©)õ?YYöjé }ꛨºòz^ÉDKOçÕ½o*˜ƒGE{üµïCOÞ"Ïg?S¦ÿ:—•ƒ¼ûÖ.‰.F¹¬oã«ÓÿFÎ26ÑëÉ(ÊhsÓí_þ‡q`÷Åp1Zh]‡;Ñߥ²ý˪Bl¹úå¬ñ9rGê¿$§Û¯·­ÒžL¥ÐÑ^°Y¦ü÷=ÙÖeÔöéñæ0‚Ôh+u޲ù:G¤œÐFg½ßùëôU°ýÔm¿èý©À‚I¦Ú–"¦$Ë0ÎiøQ%œªÇmÕoé̯ÄU`¸ à“ dVºÏ8@9àù±C§)ƒùžÝŠq=•ù{g×B&zƒìIKo˜$Ê­¥*!)í‘åEÆÃpº[žÅuó°ßê ÿù‚ÞV&å©Óaþ¾@(8Õ)~m°ãˆcq¢a\áD;¶ñky_SI¸FôûUE°Ù±ÈúÆ~ÓåW;o7•)Íïú8eJkŽ7k2ÅL©ÈT¢ÜK,KYUå H±l6%iâ4û㨠1Âo™çI\[gža¼FÒ–`ÀíÄÚ¤=2ÇÃì¤î9|ØÕSóÒbÄ7s÷4ž¤z|º-ºýF«¥4ˆ*ßÎoLúwYÌD2+}ã!½ñ8McŒg0¡ µÚeØ&NØ¥z;¿9€üë<…ÂüF£â— ‡8­;ÎÍ?ŠD㜠kí½Ð®õ¯rhz7Ö9ZNTÓJžÉá~øj÷‘×5KOAÔ"C†a2®ªtQ¿êªŒò±Çáü.rȱºÜ…†œÌ}X·àÓB¼ü}´Ó˜Böm™+;ôÒ…õ/8/\ùMê½Lÿ"4@#D)ØÀMÚ´·kÈÚ·"ßN §)oÕk åG~Zò+Cù -»&ç>’<ê1>ÊtçG9›jæþî 7ñ Ã]üe4½ðeALOÒ¯BÐÛÙËdSfÂE,WyÂîUw…ÏzQ»`îjFôβ«i ÆZ¦<˜µ¤÷³^pÖš—‚ïIhnÿ€½Fê9$Á“£·(ïãÅ:©fLá | M‘PÖq}O=͘tÓ~•8X[Í`v˜2‡;„˜8&¢{€aO¢”ØxK”é%'§9M(HF"~CO÷©SI&>D¹^娃-ÅËŒÙsêg ðëWÁ†‡š„·áøTËš›š«äo—÷Rž •héÕ¢ùœØ‹èI!ȹáÔêž×ÛñÈ”æNÙÉS²•uu¢õ²¶š!êl\ö„¯=ˆ>tü¢÷ý0*íMªw»P}"ÎGs’í*@Mñ±öoh;r§÷ahb©ÕôÈrÛço±W]KèK\aâ ¿–Â×CüDzInçO"¨9›ì°Œ¥ÏËÜ_VTÚWm¹õp®œòÚ(ˆÑg‰°!k@~[ öÚ›zaˆÓ÷õÑ3uÓ(lú·†ðe\%ɤ ÙÖQûÎaìãßlª¼°ÀU‰ïbLF‰Sþí"뎢´8BûßãÁ9*ŽŽû¡ˆ¨(¯V‹ø²wr3ÿŠQݺZí õæ–Ÿ¦Å·=2Y•”A©¼’ޝÊk]¯qÐC•É%†ú ‰eÇ…’ü#g­ EŽY ”sF>Pí +‰2e¥øqþÿ‹ ¡Vuñ=>O±£ívÎ%Ë~j­‚Û»”âÔ·%¤øcéñ{é ‹¿Rö‘ﳘ”å×LæÑÆ= 4ÛˆJ,ÖçøI  ,¤f¾ÿíâÿä±Ìcendstream endobj 260 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2315 >> stream xœUU Pgîa˜éöB mÉvo%Vâ‘õJâŠÆ ÙÈ"F\¹Dä†áNÞL# ‚€À ÃဂÁ“³Š›„ fs¹F\MÔ$*˜ÄÔküI²n¶jû¯ú«^¿ª÷¾ÿ{ß÷ÿ ÊÞŽR(Λ|·Äņð\²hKä^MLxâä_ âxäx® ¦+aº}çsSÚ‘uº9óŠ#5ùqqñ©‘{c–-_²:k®Ë¼ K<—zQÔfÊŸ ¤|¨”/åB¹R³©,Ч²©)”žšJ½FM§œ(gŠ¥fQ.rwÊžÚC=RôÙ=¯d•~ööͪµªU‡jLí«QŸSE/¢[è˜}Ì/Øî ôVi‰YÑ2‚ÇG”R4îçpÖK?“Äi>Q'Âý´§àŒG‘åW–s°4¡šÐ¡ ñgûà tÂIhìk>s¶¡úàMSXSøC$ãð›Ý‘"Ûl¸Ð,¹Û2­Î?c͈+ë(ÃÙù£Ä~ux¨FËÑì2G¯Š¡?)+&¢è=läch´QePÙèz8-àkôaúPú©€/€Ái?=DNXéBf¼±bmDd}o<ŸÙF¨g0‰fgõ·žoí÷øôŠQ 2’™ƒØÀ†ƒòæ\)]YƒTåb£ÙÍ 3%·’Ù¸Öíxw÷ùÆ&[goõY#c£Šb‹ ¶™²ŒL Íþ±¡¨<+}6¤çdø®v[ý(·LPêÕÕ‡ë [e£ eHÆx“{ }ŒÅgýF ç¶ÓŠvn òß\”r¥&“ÍØßÜäþÞ1¿ªz6˜[Û¯üó‹—ÜÊõUéP¹¹ñÅ k) Äf8Y|¼ÈÝá7ÅùJoÅØ\÷tp¹CJÉ §qy¦ÂÜ¢‚¼">jŽ'ä@ DOîŠ=CÐÉ`›Ú,BÃhÀy¨ÌËsä}öãùH£ÃiTÖ o¢;GrÔ¥8ï¦õ0?VÝ‚¬²Ë‚[.¶ÔX,ÙgôúäåÊÒzI'Íåj³ÛvkC v…ó,Ñ·‡‡‹Å>>5GZS„¬ Ý~ˆ‚˜ªH›Ö/-: "˜×G·¢Ný©ÿZGfÿö~[‹?üe-å£KRlÐ%`©­?×k¨æÛáá/»Ò»-Bç‰ÎCÇ€a]õe ëê!›I«Ê®©¨+³ðd=¡8ˆ/ŽÎHÌËNŽ‹æO0fi6¶U[öC}e¹¥¥Çã6¼”, ÝÄ4.`}à¼}úß;ÓÝÕ'ò—շЖÉQp“WØbN9£rÈ•íÂr—ÿ Oú•f‡Ÿ ôjyþa¢öUŠ*™,M Ú=\0‚ftyãa\KŠYÔ:_Mùfù(r߸²³¥ æpÚª1B…¥Gíåño4Ë4Ô·ç·yàÌ«w«J ‡òv `€Bƒ6w‡v£|l;*‚Ëv6ä‰ä¸{nä¥ ä<­ƒ¼£e&±´„?RÓ5ð¼ Öàr]ÍÓnYQà—ž´{OB0¬ƒ-ï¥]fXoïbQ,>âÑ^kmlL³îÏŒÊØ·eÃóÑ™îËFzéyËÈÝ«ó©;¸öNÜWvB Æ0Ù±Kïå†=Ûƒ´|#¥èØÙßxª`Ÿ™Ïˆ€˜Æ sÍñÃ'CÏ­$³ˆáH©Gfý·{•߇n‚§‘ƒ LÛë\˜ › v° Zw®Ã1æZÛØš3àkãíí°ƒy ¥óÞMËV¸‡žÖîI@ wÐQ4öžŒè‡fB¼të]H¿+$9¼âôõ<´¿Ò{ê’…¦IÖ Áþi¦ñ|_yk­-©Z“›»{ãÀ®#'Ëñ9Œ^¾Ç­Ü7ß‹—–Áó® .Ày€³ ]ͺ«:à ´ï« aX†ªŒ.Ù<[†&HÁõZ…ô¢ÔÌ‘…¸œ,$Ë«2Q@ B©~SN¤Ð½÷(Þ_¤Ä1®>2ù‰ûêÌTÐjë Z¾SW×A½@¶Ù˹ ~â;uƳÜQAº¯>:™›lvñ´xZ!-wäÒ«UšœX]‘ÆÇ×èÊÒ R5Ûß®Épƒîs}kFN-ßœ~,¿º¡ÎÜÿ¾|+ò¿¦ˆ.åI†V1zI‰7I>"˜Òj‰:G£?à"Àuݸg¢SU¥|©‰LÙA± Çsa7óÛ‰]6Q X}„̸HTƒdæ­¿TSZ"–=…w˦^—nq6òK ýí0]îw E®éqÆVTùáÌeåSpð`ŠêtÂù'^@"¬Ù#{Ù‘8geC˜‚’ƒ¥w>Fö2ßv•¨„›Ì3Ÿ±çÉÂNíQb9¹žùO>è!ø5ƒ~F¼o õà<UÏ$õâ3êI¶«BV ©rÔNÚéÌßéF9RgBj}=Ôå±ÛèßéטÇÝÌŠ“#X.?”aø)× ¯G}|UM8øÁº„]‹£} Wëà]âÙ»æW>ÕNÊ狆¾ïÛ†]ƒ1++9ð† ú·2n‰ ݰ٪»¯„{p>„¡ò:œöùa+´Ã®nnÅÛ°6MlR—íC™ÆøÏ”Ò [4íi8Ò%H—èF0%ó¾oyAôä‹R/×y·‰™¨¦÷²=ùèu‡xzäu: O+}ùàKôyüÈæ|áñÃÇpו}"ßHë¸Dual~hNF~Þ› †lTÿü#.A~pÆÜQíy8ÕÚ——¾}ÄÚŽÊÞ&]ST^xËG]—€¹ûÎ+«ö#x5ðµ­¾d+Ùï¦×ËãKb$ZýÔŸ ƒs,8õÑ?¬ \|O>ó=¥ìÞ5ÜØt텆͗®Ê ÝðzÁ‹küÖì7§¶ÚêÍ­vÊv°ªê¦÷¢Æ3»È?!Tˆ ÚgH,Î+N*ʇ¼âübÈaôePË÷©otm˜Gžó9æ]{9Jè(´™¡›éŒ¯?ºäÛ7QwïþÀ;hÌÒëµxàH©Ym›:<Ÿj¿5nú³Ñd4™Œe&“xeútŠúø¸bendstream endobj 261 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2933 >> stream xœ­WytSU~iËóµ(I|AqAd\QT* *KJÙ¡ ”.i³6M“¦Íò~/{šµiÓ†¶4-•ÊRdDt`p7ܘ3zWî«·3ÎMAÇsÆñÌœ3çý“óòÞ½ßý~ßïû~OD¥¥P"‘èúg,X_ž?¿|}aÁÆéÓîš]\¸)y<à5ãÓŸ驞–ÍÇc{Ý—£ß¾–J‰F0£6l.__’_PR@QÔØÌ•O*æ+Uêg6.Ð.ÎZ–ÎJ)j5“ºÊ¦î –S9Ô ê.ê j*µŠšNÝCÝGÝ/²ˆ¬"u=B¥QÑõ)³R¾I­I¥ôdÚU5só§‘ÎQ³F¹ú£ô†kîB]?¦NûŠÒöÒý¢—‘,uð/ƒ÷Šy—Ýn&T vjæêóbsAŠÏã9؆×ã,4å!”ùÁ‡m‡ß”}q6z\É'«ÕœMkf7à±ø†LLÃBXÚйl·å l‡x-ú1‡N}ñJe¸{†ÁZ F™.¡&ž¹X‚$ÍEÁáÃ~Ñ™AEê`r‰~p0a½ÃXc½™]‡Ç>7/O¢…½Â^ŸÇ!iÈvHE—‚jÊ–ây³ÌäMm=ç;!û"{~?bÉî7ÒC{‡>0™ŒPK+ë ‘¬tÙÈÓÌççSÐvõ£@¿è‡Àà4qÐ誒—Ú@Î>ÆÍâK¡Ä^ Òji‚5p\Lö4®ß¡O"o“³ü B#8u¾€ø/À¿zÍRÁq›TË© JÁ[U ùia4M­mvheßäßâÚ`»­¤uà—Çé¶GÈÑJ(Qªy^ÉþõŒ@ïÐOâ†ÿÏzh²ðþ¯*cðSB$D(ãRêàïÐm⪠0›Y› lµrÕ# E)0:SÝözg¤®OÖôió'žöÀKà‘Æ*š +r«×êÙ%X][^SdÓH5e›6䳘Ûß|¢ãíö³²º6‡ꙣYKo^Ç«*Ãà x èd»P꡺0ž:P–W[ªdë'ªŸ…• ¦ÿVq,þ‚óÀ!¶såÑÚè! Ç­}ÁCD§?Š~Oª+|Ò/¦ÄÅQ-hY%][x=& §%Îzžo´‡ù „‰Ñ1ày—ÓMDú!`t_)ãLîá2ÊAjÐ2F *‹Ñ¶Ÿª¨æ¤U6 èQÒ*-éýfÿ0ß²wù÷ ßmÃ|7B\–ñcÊ}Ô"G_B3ѤT¡ýCüÙ<€yë ŠcU>3»GîÕ€ŠQdáb<2ŽG¶Ÿëü3ëmtø òku"j ý‰ "«I¶3º5°Š¹ùBñGè±s¨çB²åÕþ¼9¢Ðý—ÐÀàO6oÞ˜wÀ®r¿ “ßY¸´xÅÖÒuÀdrÇÛœáÀ~YëW¡Ãΰ»\Ò¦Š&RWÓ=›ƒ×™ò z)”8x¨eÌ% ³‚±=þ¾¯ ôº–ß®­ÛO åU…²MwèVÂz§|^z¡q/ÞËn/xQñ6‡øÞûÎw 1p7ÅK_9M/Ê@çQFªðñ]áë-lÑ´Ìm€Ù¬‰vÆ‚¾Y7>ÞÝÑ R4C£.Ϩ)9£¨/ëêî‰ïÈî^¸$wFÏÊ÷<Ût1óðè-?c•Å?;»c70½QÍVuåÒêsèºHÁðú…',á9<ñ7½™×ÄZZíоA¼´ZlÍ õ{©ÛÍ{©ŠÿÍK»ƒ—»Ê8Ê„RÑ×*‘ЀPC’®ÚÊV«ò'M¸Ì(i߉|ýZƒ¦6½ Îá°ÕÙÀXË–å«ËËE¤CÈçœRï!ð4‘eþ5Íææò (·+‰i©‡35 ’ù9žsh=ôÄUì¢ÒZÁaŠð‘$ܨgÑË€¼/Røq%Z˜@ç- T–#Ø¿YpqÜØ4á¯([ìnq6›ßcØU¶£Ægòš<{:â/ú™±?-…C7ÂNc‡²yK÷òÐRÀ׉3¶`)žö÷Îà®õ’£Óp9íî“È#‰¯:´í œ†×C'ú%z_!åVëžÛ”Ÿ¿õ9= ÉGsÎí!GHö ‚8b.¢”ïAÚqcPî6ØI<‚Ò\^«0óäÅ%¾Bg!ä@gXÇYÈ,kerYöuw»‚;Y»•\fìa ð|%ÊêØ^dT‰#<òMê`&jÃ¥{Ïá[]Q®Äž³“Ö¢âlJ3»¯´è9€ÔÆqœ–êðh<ðX˜pa6ºÕ¼Ï‘ ›‡‹dÛ&xâv;yœ„Dx´6@zw 1ƒŸG·‹‰Nïue÷À»Rh÷_> stream xœŸ`þLMRoman10-Bold‹€ù’ùB‹ ‹ °ø ÖÏÊSigma01‡j²!÷¬øÓ€¯øƒ¯Ê¯¸÷÷x÷ø¥÷ÓìŠ÷ƒû…û…Šû‚)(Œû{÷…÷„÷zïû—‹S‹0„W}.L}m‹g‹S¡~Ô‚¿‹ó‹Â‹Ó‹Ì“¿—äÑ•£‹°‹´xž_œf‹!‹9øÓ‹ºø…ºËw÷÷ ø‚ºû øÔ¡‹•q€‰‹„‚>R$‹v‹w\Ÿ›‹ÂŒÆžü™û\·Žõ‹¼‹¼‹õ‹·ˆÿ>Ž‹ÍøÑºùcºù’÷˜\vûA'vû ‹û¡÷·÷–‘‘‹”‹‘‡ˆûx÷­÷`÷(‹ãp¡û;ºl÷…ýw‹s‹‰•€÷±ûóû¯û…†…†‹‚yœ‹šù€–øP”÷^ •–º ÷  To ¬ŽŽŒŒŒ’’­Ç À¢¿Sendstream endobj 263 0 obj << /Filter /FlateDecode /Length 5973 >> stream xœÝ]Ý“¹q÷S6.Wå!)»\|óÐ>ŽßÀ]]ÊNrq>ÎŽÏÙTVIµ+­xæ.%’’NþëÓÝf †œÕ®•KÊU֒Ęþî_7po]Ëþ/ü{}wÑ-n/Þ\0úvþ¹¾[üÝåÅ/ÿ ð›ÖuŽ-._^øGØ‚kÖvÆ,ŒmçÔâòîâªùízÿÇåJøŠ™æï·/–«®í”eVÛæ.ût¿ä>8ÕËÿºüXˆ¹t!®»V: ‹]Þ\4byùíÅJJÓZ#+¡Z«¥ÅŸ®š×KœVZî\³ß½^®¸i4M\ÏH-šýq>;ß5‡°ÏN4oéyaXçšÃæ>™íÖr¸[â¼Vªìíú¸Ù¥ÏÚø:fÁXë”âø:¢k9ëòë‹æw»£ègã—îZm•Ãa—?¿jþqiyë`ÒÝ~¹‚é¬Í;"\Çe“½Ïuúá¸ÛG¢*™Î¯Ðω@ÔwHÔ_þ~J†èVÁdò…’Ï"[+m§ŠYÄÈcº0 ³¼‹k5ЉÑ@ææo캦^5ë” 7µk¯Äyk…àÝ ŸÚŒÕ¦ºÏîär•7wëã~sÊt&àuh‹› ›ýmþL´¦“â,ý­(fI_™ñV*Xçqô¯|žþÜ>t3UúËÖäT¶™Ï–+Å,j^“”c•Â\ƒ]‚i?N8Á’%sÙ–Ó€tàjí)Û«Ç áã9"J!qÄØ§¦€÷bP¥Àso×5C5#[hDs|•Å ‡æZsƒtYI¦[®æ¢UÊOóOkO=ÉAËšõÝz*-´ár‹ºÍ>ÝeŸ¼÷’„põ~sxSX[gä7´ßù=ƒÉMy–ùÌ€ ìÂHò8¥Ý¡M 7O :°¥™/Å‘q噿~RL+»d%ø—5 gÇ”`su ÎU• †@¸lÑêkAÀÙ9qtó0óåùlñ?ûòÒ˜üå3ñ'a1ŒÂìI’ sá@h`®ã@ 'Ó®å\‰Ø^®¥W"é¸ßÎMâ 7ï6‡ù´`²&)þOÂЮ ,Z¶Þvø 4ˆéL1²ý$ùá~<ˆ±ÆzÆQ'2Ž‚Y1z™0f¼cÌä¢ q\:D§ÌÆ!_Ve‚·‚¹RÏî„; ??kê¡—Ü•;Õ£€Žé0$ЏÉô’ æB/†ã.k»Ñ­îT~#ùlYb¡»F>Xwµ³98¥\tì,;ËA+º>Þ‰;ËEfÏ1Q ñTLðç &fÒu5Vkkl¯ØªYÞ³ ù)9¨|æ§×Ñgå”t]k]O…Õö G¦cdmž.KO,Sm.©%Ë9–¯‚\7Qþ®šlëä÷“y&:— ÝܾJld=ìñ ÝÄTUUü¾>îhŒËÉò"3‘ÓÙ‡§x[üp?{Ä×P²àÖ}Ø Z7Êgñ­ÀE©qèBÏ›æF>Ï“¿ûuý Ã<\7_§ ¢¿¦“ùvÖ·1,ÊD_(0-|†E-ó‡RƒÒyÊþ1ÑY…(ç[…£á…5D…(o%!¬Ä?úâ5!”!›Ã›·it‹sÓOZútõ;úܼߋá/Pa)š?¥²— âî0̽¹ÈQÜMc$kv?^||dÒpôüa êyÙáNsžJ t]¯´»¸Y=½ÙÓ;™ƒø”]¡±ásìŸF@éc9Š:fãI¡ªhV€GEBOÆ!q÷r0¹$#\!­da"w©‰,pŠ$‹4W „Á(§`3¬éÕ)sJŠ#‘û¤Q&×õyñ×ñ ƒœ‘A MêfS Ó¤‹ ÃÍÑÓI¨æ>*ë%<àÏ}’1æ‡j’Ä€¢‹jüϵýƒsç¢O¤Z!™ƒo-¦Nº5܆ô48DG¦ß««~3ögc[Ú½ê]fÿpüþv¿Î‚ï ‰„å$^D‡æe2š$Gç&©£?Õ “ú‘Í5æ`!Í t•ºÖ Œvô§5;jZC!KnŽs8, Ž•¼ ¥¦ãERÙÕ§2‚i™çU_,èA’TºˆÀµ=¾U7öˆJ÷/rÍ+òµœ ‡ˆO;[ª8j›±R&¼;î~݇¿¥*4ø¸Ñ/Øt ì>‚´uv:×ÚF#‰Âz¿ÎsÅ|‘}•^+Î%Ä4˜èªSb$Û×øSŠÒ °#Æ:ý°Û2í\‘;ßUÝ:xÍËÜ™ gS†@Aò}GUÈ † DIMC殺Q­4Wóß¾_J<ÆÌnÁ!Ã16Ór?$v‚/\§g ¾à!÷¸Õ\îKh„›! þ« 86)]«#®ùU-îÒ­pFë§°Cø6I7+gÒ-ÂÑ#ÜW—ßÀ@η܀]¼¿è¿ì|¨[èN#~´¸»à`©Rý7Û‹Ÿ,Ì„…9fæ" åÐÊ0_˜ûÐ"ý i‘ÉÁ)¥‘Uƒ!àÇA­¼Y‡?!…<Ê„ œWYˆð °‡Dÿ‡ úÃÿk‰ˆ K5š™T雿Ñü Q C É®2–BHE@q62z%5*ÌÍxfŒÒMÁ‹3 €B[4ŒœÞHru[¥_PÆì RÕeuDÊZLÊMËŒð¢öom!Ìá¼yqÿbOñs„‡_¿Þï k â p¯ÂOôËvó]„ äAü÷dÝмK1ë“6˜Žƒ¹ Xsð¡08ˆ$È·à\8¾4¤¿××o_¯ï¯?„'„i`7Ï×Ï7[˜õE²Jµ´‹UNÃb•óëІ4‡ÓŽÊˆ¾×}Djø=Ïcaø¨*Ð)ö.±/øÂóE'„ h3‘‹äNò»ÒÅúµ\%Ð,THÄzd|3‘.JQ¢spY>;h"(g´7ßÖf‡åY_#G+FùFÏzbð‡²=¾8SfZôµ2}dNŸ!2/“°Œ¹C1³¶ÇŽû%mW]AjÁÈ·˜&½ö¿1Áíó%æ>Т &P”—Éšë_ ÉÀcäéRóûš÷q`ûŒþÓD«t>Wè}VXô%ýC$„W¥H´\©(£¿¯˜Hƒ³"Û|[wÔ©vYÄñ%¼¯øà™P>¨'%ÍŽjÒã<ÍQî—S°k~ðs”ãÜ‚ š–âøÌp%¢ZŠÛ0Ü Öà4`Þ[˜¨\i£ÀËSFĶ–³ÄDa–";2¼ÇÍõÓtE—Om!ØŸè«Ǻ×Ô)ê|»yG7®Ä8ãj1Iœ%ÙHôfh¨ä ±[Yš!£(0œ®/„!@¡m¾¥´ÅF£ªnÙVöÒS·ÿ++5À…H\é¡O•_kpŽû8=»dõéÚ& ¸‰¾óäl>ëóÝì6 p*Ž;²ÉyÛleä@‰hmv˜ ÓæEŽš¯ÿ”òë™ $… BÚ;ò4H,é|I õYÆêû;Qèdß)¦s©Ùû>øç6‡°Â($˜FNY)•Â|_nó½ïw)êvû*÷õ+†ÕWg 4ï_ýÁ³î¶w»ÛÝ~çëÒ4ï~vˆMk¢€~Þ{r¸Æ—‰1ߌÿãþ­Ñø D=ê–y“¾Ìº@ñ?°ŒCÞAU-)†Å­‹²q¬ÇUÚ´à œtLùˆý¦–ZªVSjÒqî=ð$)¹6|VJÆÍôU8z”Y‚b±…ÄnLpÑGZ)ì¿yxÉ!a´ ÷=AFÄ1lnŽ5ÚÖkŒ] X9ÁOTSY«XO²ÛRž.Æ* ÙtŒÕ²DFNTt¿©¿ªO,qEI+ˆÜ)x’+e7,Åê{^q-[é‚Fa+Ï£cáOÄdÓG>Õ¦Ï_§:=ÅÎÔ¤â\G¸qø‚Õúï€R}¡°ážð+锳ïc~_)‡æåqP•oò%#z îqòV²¬"o¶ïëȈþ:•ctCSÆ7•ö:6¥!Èt:áE0Ž|šwšÎ®²¯eaLÀ•£Òè!öŽÂƒ˜êúŸ|c”ŠLVbó©,WxbÜI0øícáx“g@æ1ÛU0žbn‡Í( 1>†°$Dœ Íyi7)©È½øÃj±Ÿ>$·º"¬¢¦w)°Ž¦É…°dÖéé ÊÇùa:ÞJm<²ù2‹¥îâëê$0šÙÊF¸ ë_¸˜c­[Â#±‹+ðY+@N!{—WM«0µIíhÜÑ:ƒÚJ+‰êÅu–ŸÄw*a{•ÄCº¦]ÞU„¼8‰8¹–s#3‘÷šì*](YûÁ¸¨~|›Çõv“ƒ€„\‚+PÌçæØÔUj¨0{!öE¹ìïCæDžü\l^íÀFp}JžL Òä2y¢¥!˘³‚$´—Ÿ"=‚}ÚÃî€ýŒúrŒ"Ã4-tÏ“oHƒŠƒüÇ御á }BUÊ hÞ±œžCH›z xˆkæAH ’¼ÓÒ[È/«½h Ý7‘þ ZéP ¼ébI°›Á8ì¾\Á¿„ð&|ËJŒ¢µVôGt%\*u2/<¦-I›€Q j3y%ùl¸/:ã§åÕD@»’R`¦P¤Åƒ•¡¨)ëy™n•{˜•¾Ê#€’0ô©Ný¸áËú¼É’þcœ*~¼¬`œ08²z{«GˇNøgËØÄbÁ5ËÐÄb<ýÜf»õ؉Ã÷¾€qsºg\‚ÂøÀ"Ôçùåæx—ö%ËžG=ÔcÖƒcœÐu¬§bèGX‚]Ù9V{` !ø&S·õ}ØB cÓÞ ø¥ «UÍq„§á”’šdVfZK9ÁÆea½Í>¦º¾õENÒ\SÑh‰ 7·{”¥1 {aQÆqŽ]Xýß¾ÅO¸é¬z3šÀž³ÕÓ&Ý1u:›t‡ŽŒû¥â)Ôn—Êkƾ}I‡Ž)Aõî²ï3p÷.ËR'NŸ Qyäêu%ðùÓlÔ¦"ÁtXì€]¥ÁY ^h|4Í!Ý ßûNÇ26¾œ•®°Ì©$b; ¾: –ZÆsAÌ"•ˆ• êWËáµ¢§Â0®°- ¬’F‰q_:ý™}QóüÁdý!°ãBZÓ2‰(¬Þ%ß| Ëà…ªXœR°Õi„ÕÀ[#šRO °ê,ÁÎ@hÑE®Mó¾Z™p^jcüiúÞž¦ëô±«I¼mF«Úƒα9Æ4¿¨»Ìí5ÿÄnäûÄ…B”‘ 矞êڌҫlœNcu¤±k&>kÄ^/à6àõü”Bs§ÑO~Thf½>Afé³=G’OÜà1*`Dz3y Z.çÒµ\ö¬‘'«¿Ûa$ ¹DœEnIh®ÁØFä?m8Úg9ç›4ÈÝìKÔËÏfG/-/‹èÝÒHƒìwû6éÿ ¡?Í¥™G¼éïq™ÞÏ«‡C !©ÄK_òa¦HpükO¬0…µãÆx¶«®Ì+ʇªƒ—öA+}’eöt˜ê,Èñ<õ`-؈]ÇÆ‹Æ}Ì|y3«›>Œœh¦Ç·›ÑL»ÕÓ¡}5ï×Ëãù_/ÁD'iÝn$C@UQ<Û°êµ?ÃÓÝô É‰Ó gNŠç3æ‡ÏÃÚ?s]b#·{’r÷Cºž"£›.£ÓO[о(·<ÿR3.š±ÌG4mÌAOyö/jU•üVž—õÜJ*tÀ§¬Ò>ÅA“ù Ué Gô‘C•¬~$å ;ì°7§c®±õÎÑŠ¡:t׋ ¯‹ ÃÛ>©€Ã¦Öß¡)ÑdCU­TZ°Ö1îüs»·G0ŸŸ)Ø?¡q˜]íHŠÑÕÃZ’Ƨãf({EwzeŸÔ<É1—8¥;}˜K°dB'ÃÜx\ë|˜û”½a˜Â?œt挖¦µ³Ô´¿Iª~àN´<éŠ(¢´z×R³Ì-³}j¤Z`‚×XCå·þ«!jH*j׎ްœàÉ ÃŸª–âÕðÖªpãRÜTäga‚8vÜ–Ý¡Ïñt8@lóâv“"Þ÷Cñû±ßŸ#ð ¢}7|#¨ãé£gõb†Ã'ØA.°†ùbFí 4mæ'ɳÏ@{þßþá«xÀ•g÷H¬+;4Â_ ü…_%ÉËÉŽÕ>ø4±¥éq$®5Ø$zTC 7Ø`c³ùž-ÿú)j]Ü:Pì|jù˜­‚P¡0ç[%g°ÂÛÊxW^k±› Hà^vW@&‡ÝÖßžÀF×XÄfe“Ub|{ürN{§­ÏÚxlª ãë‘ “ÎÁ†ô´÷Œý¼K²;Ò°•ª*x– ø_Ôíì–Itj8'=°ûâþ¦ê)ÀJý]Žð át­·>SL~¾£_óF¡]V½»ÁUC²#M ¶&MwÅÙ5?¦¼¨£8+ñþ©í‡°žÃþÆGÂ\¨:™¡CV"ýG•[OXÆ[¬¬ôóp¢š/|vx¬à»é¶E_+UBPóEÿDq²1Ôm½€ 2Haˆ˜þê]ÔøìêÝã&¥Þ‹ˆ†xS.*¾`Î"e…é)›5gÀjÙQNøBÖs Ý[/Ö/Áàüq“JÒmX½é5äCŽJ`Ð(A·²üÇ¡<ãEó±1oã:“ä‹–äTô¸Ž„pÅÍǼ`¹ŠGPÒ¹>Ã2=÷™Ý©»: ™Ÿ Ùýy'Ž#VS²ö`%Ý]ƒ¯šÞ;Sö’‡”×ÇTCÙòâù ‹öók^!yxlµeºh=·BdXa§bV]1Íd¹÷p=Ž¶ßŸzâ•o/5>q²À7ÊÏÉugÕhcIç K´ß«3»•÷{LÉS½ þäx_ Ò‰N·&øz^èrRì €å… ²þ¾‰R;gª¢K%}Š“óü¿¨¶ÿy®WZ‰Îà‡ B€ntmžpOΆÅ,He:ð×xŒ8DÀêñ•ùõ ÛñŠú›:¹-¸®òVÁ?«Îü¯ž…šwÌÇå$+ï*eØŸí¦ÚZ,[a‹Ý|.LQÜyÎg?uæH÷ƒ·HÆd­ƒÒp¯$þ\Ò(/p)ÉÄé÷²âç ìϬ„NeÁŒ¿Ý£¿‘ãÚßÛáLsýöµÿVËX/öÃÙÃoð(HÛªÞ»Rñíw3oL7Åw-3奉*wÔdZÞ'3•w'Ïf`»«ç úþ&–Gø!½S9;N,*%Ógøûšv'rAøÃ娮Žÿ½—Hú¤²¨?˳iòºÖ7àÿ{¹0ƒ¸.Ì ¿•ž{a†Tf3º^oÎÉ.¼gS sŽÛ}}2嶘ï¤Ü¾"Ý5˜Ö5;„UKÄy+ËS”U0`ˆÉÀ8ÿ' ˜ ç€'ûœta%ÞÀǰùQѽý7'ñäN%7lEÌÐê– Á’iU<‚¯íÌOMB¼AÂÌüMab4C³Ë¥Å´UëæÅµo¢Ûýê~s½Þn?,-¦(ÆÐ­Ò7_Q»ô—mz{¾lX 6#/”O3 Cð†3ËbªôƒÚŽ ¤Kýù¢¶ÇU¿¹øù[Ãîendstream endobj 264 0 obj << /Filter /FlateDecode /Length 431 >> stream xœ]“AŽœ0E÷œ‚´»ªGy3ÙÌ"Q”ä`̈ÅЈéYäöùÿ“Î"‹oé‹z.™ËËë—×m½·—ïÇ­ü¬÷vY·ù¨·Ï£ÔvªoëÖt};¯åþ—´–÷qo./_Çý×ï½¶ØP—“¿ïõò£¿^õ¨;‹Êm®ûXê1noµy!?/Knê6ÿ÷*gÅ´<¶NùÌ0uXò™aê‰5Ÿ¦H\ò™aIÀ®Ë Þ:1e8Ÿ²†ˆøL§OͬƬ„ÐW"`!B (&ÎYÁÛ…ˆÏ0xËÚˆÓ2}èû¬„…CV€‚ ñšà•_øD„Q”Uä‰"Œ¢¬"­z2!$0a “Lè™Ô7±oBϤ¾‰}z&õMìkØhÚlÜl1+@ŽÝPgª5ÖêLµ¦ZøšœÎ†¡š‹}ÓŒG0LÑ4I¬@LÑ4Iã$§qÈy"‡‘ËÊiå0rY9­F.+§•[V€Fô¬y7¾.g§³CÐ%‰•×ôqycy÷W½-ŸÇQ·»~ý¼÷ëVÿýCûmgU‹4´Þ¸endstream endobj 265 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 5862 >> stream xœ­X tSeÚ¾!4^M0’ Þ«"Š ˆË¨lŠŠlBAv miº/iÒ´iöýMn’fmÓ-mº¥t²”M  * ¸Í8£ ˆã2®_ê×óÏÿ¥ÅÇ93ÿùOOÛsnrïý¾÷yŸåýxÔðaÇ›¸tÙ²$iÚ"iR¦dû̧¯LÙQ˜™”ÿèö Ìý8º_—£ø0jxÇm·©Æ#ÿMhÞX4~5‚ÇŒ;^4ùž©&eæ¦%mK‘&%§dJ“Èÿ̤¬mÉI¹IùRIRf²$557M’+IÉ-dædϤ(êwÙëž^ûlôùÂE2ù’¢¥Û‹“SV$¦IV¥g¬Îš=÷É'æÜ8jÌMÂùŒx,E-§§&SwS‰Ô=Ô‹Ôjê>j u?µ–ZGM£ÖSÓ©g¨Ô³ÔsÔLê!jµ˜z˜ZB-¥¥^ n§Xj45–Ç3ó,<+ÏÆžçàq<'5€Nåõ Ëöÿàðê&Á#ÐÝðÐ ôÝô÷#~Ùqãs7¶J}ÛhnÌÔ1ŸŒ­7sÜ_nÊŸ87aàæ¥7‡n¾"LξuËWßiE_‹Õ“¦L:tëh瘿 [7›Ò„cÓÃ<ôc_Å~ìu4YèÓE ¥‰‘/L_µèbƒ¯.â­÷†Ùêž½hôÒ¯míZ0sÃi1c:±-º6CQ²VQ")]fZðÙía7SùfÍ¡ küªt™E£ZË&â‹Ò(“XQ®«TyjÊ»#pÐ ,r‡ÝaW]ðˆ¨"ÚóÉg@w{SÓ—mÀ7—leuR›4ô¦ö´ƒ×:Ñ=fÌßø³DûyQ^vµ0 =ó¼ÝÊwa!:-zýüwèÆÖ¦æú]õ}\Ðüª¬t d2©ÂíÚ¨¹Áe)³±^[Ô 9PªQéuøQü´è1´Ñweõ^§Øg÷Ù¡’¨Á²m«’˜|XÆå“ÛÕ ×ø ØçÖzY4·âXn4ÙlF“xÚM%ë,*› ˆ¼YlÙÉA”é„ÝRwj|j;°:{¦š T ¿F”èã/þŠõ®RÐ'›Å›ÎÅ´ÚNç"pÊqYªY‚ÝRt.Œv“¬D™Bx+ñäýþo«¿»ŸÑÁ£|EP¤%ËôB5Ô‚µ’­²zm ³ÍbQãIm"m²U?›`<ô­*õ ÐCh$ù›Š>ÎzdÃà{§‘ÝÛîàö —kWlaWáK©ÝG2ø6A)XÁh×Ú-vðWÕ¨U„©~jk|µ¯vS…Ñþéd©·"ƒÐ§0š¬z+£Ë–>ó\âs«–¯zæGу½µèѯÐöԛ׎\úëWæbz»ÅZVK G•‹yy8k™Îb³i4̳suå›/a>ˆq.ÄyX‰'xðÐôÞî:ÐÃ~úÇÊO€£Çü‡î ðš(š6Øó±GßâÇT¨]xmå¹yë7îHNg´Ç¶Ö¦¶³N¡¨–ƒå×í\Y®O‘Z4æbHÔK¬†- Vk Hï2{›9hbwB›¥hWjüZ(]eÞÀ^ôXY„ f7¥½ 4¢ÑMèt/‹ÇâÙBɳÓS^¤úÀ àäìa´®¬±±©ªBÜm.«º«>mÅŠt|ƒ"%^ËfƑm¼þÍ„¤µÕ:«Ñheã©©Ïãy@È~Éë¨Aô¥àÏ Ë7€ÚÅZM6 Ù¢Éiôz8W…“éEª·Ée S[Ù<…ô § úÑÛnwî'àß)@cZ²/«9—£Í&Úļ~»»ÚÁÔ §¸FäƒxÀ!_ï¼Î&P˜ÁjR°X4Ð0ÔpâbR05ù…u`·—…®¢L‘ÃŮƑºÐC”©ç2šzá Q§«½üØè!tEÔܦl×ïÏö2覛ëO]Ž1$W096y!Ò¥^e8\_¹»{ëžyX”:eËœ‹Êf#sT{T/ÒyÒÇð¨Ò¹Ð#ev™"-ÐDוdyY²—Vönÿ=ºî&ò“ÜWFq­•óÐkqYÔƒYg³hLÌÖÉk $@Ë´ÁõŽ2g%{J¸&¨ñ ¢­`g :Ð]®pÓ•j_±%Ç–¦c’ñ¬„éñŠ©=PÃ^,ÀæbPЫw¥ûº÷º¦Í›ötµžl«úuP”šUn‡ËîfЭ±No‡ÃwÄ ä!~ XX|³ ¹½æ_’ÜjQ-Ç>)x©½œï­ÿøÖÒ…Ž|«€E¸3¶0„­µ öûÅÙ×Qc:)x7k3ŠlË@¬ü­ûâ}<»ð'÷¡Îøûø±®ŸÜÇf.µ0¥«Š& •98èig›ÅUøv9+Ä®:ß.RÞ*µ)Ï&Ñ3óñ1›yû“Oƒx­¶»óDÓ{ o°W9‘ýîŒÎõÓRñÝ‘!ùhWç. ½![F&Û¨dS§Ê–ÁzÚùÇÎut‡+ÿ¶ö¼}Ðuu¡ÖÊŽà«C=¹ßwÝrÐGÄrôP¨0CÎÈf'øÁãð8ÊФX‹(^é÷€®÷@u@fÒö,æ ª¡Jïm„"X­:ß:СKµh ¤ñB€cÑDM²$x†TžwåÀO5âñõ¡‰×ø±´-<–Rääª\F¿†©•ó`ôVàë¤íGO4^ˆ~À”Uþ½ÓS~Qæ¿î«kÚS ùÚ\ƒ‚Ý‚iÕfØJcêrÉ4»ýé(iÈag>ûûÛÏzû¾>ƒV\ã÷/$ï?ž[QœŸOÞï6zõŒ_Ƀ ɾ/o]Þš´46å¶ô6•Eåì^4Ûöu‚[ÇK­ÐË ŒÅ° ¯2䲬 P€¬v“tMVf2ÐOÂÅÊV×îƒh,ëoq—C ÝÞ¹áŸlütw´}À|MŽ¡˜,¤z3¤Ð¾–v©ò œïb–¼alK°ÿÕ†¾¶w[Ñ$8D ä'¾ðSj("ôÒ€ŽÙfWy•íø.ô‘3Ç…ª*ü´Ý*ºöÆng 牀*Úi)Óæ[ €ÙÉñü`Pÿ”ÂV¯ JA‘%5š&áÑûèâu¦F¼PãÕ;Œ?Ñ4A\÷j‚U6[€ Yݲý_Ûq\»ág´) þƒneî0WÁv¡™è>â%4rãj/ÎÚjÓi4CœëÚËA†c–ðÅ9÷¤™ ¼‚’®üæ«èµ«ü˜á:ïtV³Áʤ߱° èä’Ö6’ÈüûÙ6t»»¡îêy» jU9&y>Ð%þ¢ÆpkU×Ñå’Ä´5R5“nµ/èÉ+±0?–‡sxlÛ÷ç"m@W·ë3‹ŸOÅw°%ËÒ’¶€¤ F\áZ"Â…eV~^Ææ#òýç:λ9&Ú‘Üô7½H‰/¼™û ¹‰Äñ:ÍTb`$lÁüTܦ~mxqÉŒÓÑ è–!:šXƒoÅb<ß9óäìoÑä?}ˆûÑùQ”æ5Ož×x±…1—Ù¥'>m°0ÒÅKŠÒA ·¬LT:e„U:˱“Í‘Ž(ÀécŸ}>NÚ§0X¬:“µQVR ®PVÕפ=ó ™‰3z½—ÛÁV8i÷âTêô]J?4ÀŽ­-(*™ù˜háói+É¢1v8ün¦®½¥±êÀ§‹dWʪJˆ¶|yMhŒG+‡4¥îåu½É™~¡òÅ‹+¶ki¨2StwìRB<«+§é¬ÅŒž¤iPÑ„2‡-c‘/ÇZEgvãK$íÀãð½øžéǽ[sÄùfëIjO?ôKÝÆw ùÂõxIVe±xË‹ÛJr€^_z|÷‘V4¶î}¥»³ è³å“e´™âª{¾6Žjn=æx Uîü dçèþÔ°G+N±=‚f¸è8R{¾Åõ ”ÓûSö<‡ùøw÷ãS^™ýÅŒ'œŒ†mÌ6Án4훊 6fKØ1ý·ßßÕ€^%ímŠ5 ßYtOdð;‚"Íÿ‹\ ¹óiÄ% ¹tb¿EÃÙõBH–?’¼cýKËõ[H¥î¼Ž"×Sþ_ôä>GjÁ¿…#™ùóK46kŽð9Ìï¿ý–2gÖ[M$r<“˜ŸF2³²Qû6zàt/zÐj=r'¢ð}8çb9.ÅO á÷ »#mNÿnƼŒ0UEgÀœЇÐ?ÃÅÒ„pï:¬Â³§›Úµžz͆õkån5°s¢’wácx£Ýõ6¢.|}íÀ ¿º0Ob±m`ž”6›Öœ§É2`K3`_×®®½{« ^ˆwßü©ÿè>ôáà»ïC®rMÆ3/þ|È íëF7ÂIúìö½ó—nÌܜʼ‹ÞìHéÓzkéH·Ÿu$ž2pÁ<(>biÉ Ê]LõÛá‡FZ±ÃíÙiwsÞ艶Æp(Z½è}~ÉŽÕ)˜G©—šˆýb¸å­Ó__õ-Wxï÷íëã£ÎþaMiHš››—[T^\_×R×Âxd?Û‰biú ë®ïÄ]^wŠÝý] ¾F±§æ·‚@ãµ®–¶¡ 3ÈÌZVŸ÷¦K¶jóTé £7µ¥"‹šâ‡”™ñîÁ&Zx)ÏócGZoHÚ”åÒ:¥ó¡ºç«D¹^I3ôÐxÿÏŸ}pj+žaV€‘Ð|v®ÒÉC9ƒƒ™’KÕÌÆ•y×F&OÀ£ð xô=›_V²?ätêŽ+áqñÌǧ߷óÃh\½«ž$`»Ó—]ŸÁn2Y ³y."ŒÑev»ìöòs¸w_âë¥'ɤr™bÅh\œÎ¡×(œö}ã+ªºŠ²_åÇî$%­.­,fI³äå%u L>+$Ù½œÌ‹½Ií맬¼^.¯Ý^ía"§œ:ty•9ihœ>0¢hÞÆ•«@l%(¼-e„Ô5tHS›Ÿ-Û±½«ðÐùO{¾ŒÄëGWÄE¥ïãÀP3î{íä§ñùóçj(ZºŽ0±Håï¨tÖ9C¬³œàƒ³K›õG«Z[ëêõØwÜÄŠ¶€•8Ña›ÃºÑ¢Kõ +74‡w·Hw¾”³YÿäF’’¼=Eùmì ÑÑÃÁ oÀ͸¼Ýh™;Òfùc ,˜-Z«Ú?ŠYѵýhKc¨3ÌDöû{­pX´/Þ£¼×ßá÷ÛûŽ¥ªô4 H ¤ré?2ñ°½6¿ ÁbUÚ,3q¿H‚'á¾è…«÷ÐFRÇç1ñ3ì5IFiá,Ñ ˆ (A)Æc>yö;4C H´“¹‚oOUËûœØ°“hýã°¡dÛ?6. ýWþ½(TÝ‹øÐ;( ó×mY“ÊØ‚–¶œúüÚ W>Ì„ KŠ¥¦Þ¤–—~:ÅS߇}Â2#G¢˜…¤1ņ’¿èLx·¾–¨o€½†FÖ¢ñµÚ|Ò_ŠA©ž·i}ú4sÆá§ðíX|3úæ}ýê[u§Þf‚kvfvÝ=bñÂÝÂYsçj¶½<«ûÌáDµ¾Ì¼p¬šŒ@_ž8'Åq³{¤–ÂOÉÐ’0úŸp°¹êÆÇ$§U'&N«A/]a. 5Ð¥í”GÕ•¥Å~Ÿ›üxºZZöø»é ?rAG 0 ¢šfE8·5©jàQð ¾]‚oÃ3°Hï4Q¸ÀÉÙdÖU&Øþ:ô©ꣻut¾\ÞC/r Õ› 7%§¥¤o*"Z¶`Ûñ7CŽIv}ÈÔŠÆ¿‹„hˆÛ ©4”çUrÅP%ÖbS±.E‘’™­7è :“Ü#uÀHC®Í‚.Ø푈Óa‚ZŸª¬„žð°Oæ”æO‚S–!›^†Ò„J“ÒRJt%ìNλ“L+AXý–xP?œGëp'oß©¯¿|ƒ¢ÅBo›«vBÈVa­Ð”uå´oé]útƒ›øµËåõx½.¿Ëg÷C·µ)cW í´9mq‡ oYs;ÜDˆƒzŸŠKõ&ùv€t6½­Ô¢4—êTzÚPJë”–ø×D—´¬Ú¦Û.KËZ¿U²²4Ñ(³ÊIdOõJª³“æ€ËðÖgõ_Ћ‹„EO¶AV²M_e®…04º›Ëš‚GkzºöÖ7Dk¢^Î$ªÙQ•âIr–Ø‹¡ò,9†Üø>ÿj¡ðZYÿ¸0/ö ;JÔ"tUqAhÔ®Ùkצ0¿PªsÌù+Õo$(´ÛY,ØjQƒ™GéWWFËšý\Ü®¦<²þµr^OLÇuÛ„ÀY§Öo¬0Ôà­±s"ÙÉÕÁM@*jô^+°;I,üGD¸7ªÕF#¨ÄÅåêPÈë÷ydD{î:„§‡¤âP¡ Ȧ܃‡¿ÃÆ_¥ ›bO…Ï]~?ÂëzgïUd¸Ä½Û,D³f|…Çâ)›ñ-9¥YËÎÚ–ºöL(aö_|ÓMf™ ç×ba²q]á¬öô¶sàX\2gÎïo˜™ô²ý˜Fw Ý·ˆ˜ƒGãÂKp!ž‡Á7¾ÆºcOÓÕ{¸õ4ЈçÀÃåq®®ºHá¥2”!­“¡9ïðÙs–;*„ðÞš«˜õ@rWN’§O­µYŠÍ Ï2‘‰G ø61L;?1H§‹Ô›´)qËl.—ÃÎqŒÃá®çÊw¡ûDèš‚n4‰ÆR4Kx÷À˹íð•Шɪï Òhf„€G>B4è~õ7±Do›{7ìxÍžP>Yìæ“> stream xœ…TiTW®¶éª‰¡»¦eÑ©" ™QЉÛ8‚&ŒËDEDNDÄ[vèFèîÛ4=ÍÒÐȾ´`©@!lŠÄDÃŒæ Áý˜Ä ÁQ3*ñó2Ç©>Æœ3¿òêýª{ßw¿÷Ýû= á4H$òõ6'ÄíŠ_2󞽇T»’?g6M=œ:,W)¸:œM]U B~íÕÏÜÇzuWjÜßY´xÇŸçÌõó_° VÛ‰„’˜I¸D6Á΄ !'Cü†pKND±ä/Ó¦OÛ)-íwzËi‹SµÓ3Y°ìK’%ë©ÕˆŸñ|HäØÕí(²™o²+ŽßFñcWZÝ™¡ìŸÊ!U0µ;3#9zÊXE=ôí÷[²rÿÚ¸Ú´&{uMsCæ‘Cf¶­ñ,X€>w.j)§¢6é‚t«ãîIß±4£}ç߉—¯twvÔ±ÌÊ=æ¦=§g•Þ-úŽÃAJ¦yÞÒÄÈm'zÿ~áò3³"¿O à /:gòÔÈ1'¶b-õ°Ÿ8z¼…çOœhºh¤y*J§‡‚ÊDÇRÕú" dCv¾F“µ~¥Çò M”x‚åo¶FG~¤n h! B!Α Œ†ÁO°ÜÃÏ;)!zw€Þ3–j3Y  .Â1x$»Pk*¨²V˜Ì×ïyÜž[£=äyBn^ÖAƒrÊÔ ÕbÆ´èèÏ¥‡âÜ >Ý®@Îc¢Žâvgú¦Š7Y§n¢nÅ cÉÛáëã3Ø´ÑÍ5À<_“}€6ü‹dná7µ2‘[q^‡+©XÇ:ªœ†f8*2;å`õh-ÅôMÞè»8RÌâ´_ÉýµÌc:¯¦VèÊÚ¸;T ¯ÄY™ìhrË䣹w‘¬¥×Ž”w¥(žñÖñ–ñêqwfð®ˆ>R"zñì²ý£Œ}{X´•*/èÈéÉǾµ•å™ò¡òsQ™áš­b³Ãl*kŽY'6‰Îm‡{¨4ÐT›ŠŠÍ¬ÕÖ>pÎAsxIꑽ…áц­ ©q‘ªøÖuªGhæŒÖd°xÙëªZÛâËSÒöçìô¿î‡(ŽñöFò 7î%whBÏí·Æ;š§'æ?@ꉠ w¦ŸÒQ„¹ÏÇÒww†‡©Y¸c¹ròó–þ΋P=ºú˜ú‚} ¥ãêÓªŽ–µ¶£Ïsø5ìU¸)‚°Ìnm/ –wŸêøøx|CÏ7*ÅéŒHÙ›“!Û–iWwë/A;ýèìÕký-‰1Õlm´8ö¡/;–,ܼ-jŠÜ&âEb딇Cÿ$P“ ·Jt•´ŠÜ‡÷ÊZÉB[ÙåŠâ2óW`å!}0+c>Ç$ö=ˆ,÷ÊðO>n+ÛKòi@.}#h ó()ƒB¨û¹ À'£÷R$Â"¡I‰}Ñ"ì‹•g!ˆÃ„Øré²h½Òƒ–õHÎOm“NY ¬?™ìÉ̃ V×€›’“¶¨çpŒS}Š#&'3SÄXƒ#æLÚÄØŒç’ª…NKþOfŠäɈýˆ+¡È`Ì.Ç¿EÊ}h# ·u¢éhÖ@OE¹ÑfÚ\`ÉÉØz8—Å^Ø;v¬žÀAhöèb+XÿéDà Ȥ„ûˆÜ€\ÂÆýn¥£ËË/½UÃ!oìy ¯üà<Ï ÏÍùt¾)¯´² ¤˜E^ÈÛŽ‚¹þ¬R²}ÊÅ.鼇êïI…,4ª„gÚ‘Ø/"¾]V Xáó³ö®ÒÏm°Öô»Þ?õ¬¼šzzák[ÿ£¶QÓ=¡X•â´ûk¶$¿¾&+öÁšÊäIí0LÀ \†/ˆj_/m„ãp9½ÆÏ ðþ/.Žñ_ˆwÓÜ [fò1”¯ÎÚÆ ƒT³Þx€ÝrÐÄÇ«ΧÍôO¥¢™5¾lL,ÙiúºÅïèüåI¸~˜|È+ÎLn¸1‰fÞwgšEÓ¾¯T‘º”ÜíšÔ¿æ@Ðx ‰f¡•¶.¾²ÂóÂðù!øŽFÓ ËYæCìºÜoAØÇyµ­¶vމÜöè•4öý}ïòÅo¬ À.ø+ðLcÑhAŸä%päK^ARÔþ$I¡IqõñЧaOkŸº3n#(áÎÚ±7ënØÏ_‚›4㫽é?ü†÷²MÑM­5uGÛöW2²]C×LU@3Š3Mc¹>«ãweepq*µ~cAª!×ÙtV aûÉý›^瘳–¿Xs&†=ÙXÏsÌPà1uýþ 鑾7 y~?þ;#¹Vx׆J‹kIÞel:ëâœàêl7:–Ùl,,vu%ˆÿ&Äaendstream endobj 267 0 obj << /Filter /FlateDecode /Length 282 >> stream xœ]‘ÁNÃ0 @ïýŠüA·4«4ù2.;€ðiâN=,ºîÀßc; !/Ò«íĵÛÓùùœ—Ý´oÛ?h7ó’ÓF·õ¾E2]–Ü80i‰û鯡4íé%”ϯB†h®þ®Ô¾ÃØë'W‹âšèVB¤-ä 5Gkñ8ÏØPNÿB`kÅ4ÿI +`Å&/:`ÅNNtB`<ˆ*ðD«s¨ ’ìzTX{Ñ€^j]D…£¤N¥ DÁ%ÑŽ#ÞìH”¬\Õqƒ‚í:Õ*µ¬}‡Šµ|6Çý#?‰zTX“h@…5²z~Äׇ¼Nó16¬¬è±ïÛFy×=êžd=K¦ßU—µH•ašoóÃendstream endobj 268 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2105 >> stream xœ¥Uypçßµli1®›Ðˆ±Z³"”'4†Úĸ¡„˜Ãà†@ 6.²-cÙ2–%ÙøV×Jz:V²$`ƒîKÀ¸$år’’b dh ”R(C§d&$ßÊŸ]c'aÚ¿:ýv¿}oßñ{ï÷>’ˆ#H’LY‘—§¨)_]WQ¬QkgÏz}•r“N­¨‘Mì^5'@’’⦎;9õ¾ˆ¾Ê^ ¾G’É)¯ÌšÿVîêuÅ›µÆJå&EJS©U+´åŠêj¡Zµ©¼æÙ[i±ztSUU­©UnÑ)ÔÂ¢Ò Ê¥R­¬PVÖ¨*ËT•ªš:µR«}¦R©(V+4UÊÊbZ­¬ÑUªôÊj­B=¢P¡+)/QU—¨•¥*½ªTIÄK‹2âqÙo6½üªìÅôÙ/U'ÏKOSI–ØMôÛ‰BbQD:H'é"t“ÒKúHŽô“²™ xñG|Lf“¥äÙ¸µq6ÑD¶øÄK%˜Å“ÄNñ§’ ’­EÕ£ýÉOã’YB{ŽzŽl¹ßñV4[ê·»í¶Ö_kèòüÍ»@ýtÁšzy'J¾ò…üý¡ÿ¨Ã½ÆÒ­¶Z“VÎhM:›Éd€²ràï8ÔÙµöù;·ôî:íÐJ*k)ÂqxÜÊ9?§_ä§Á«N»–$ègH†fõÐÉx­~xžDržE'DWH¶ÖFÆf3ÚèØš¯ ›ÑåVfõ7µ…üþ?ͯ&ü-nødÉOEã.ÑÄÝRhvzLa\€ S°„Ã4ËÂæ É²f3 …k*4… ÈÆl²øØ YŽ A.`‡ l2SÈjöxÂaŽ\¸0Äø~µ4ÃòQhk„Œæ"¯´«éØqqc- Ð&ç‹Û:¡kL"¨7Bò QTÙ5ªŒ÷¡^´ï™ÒÈ^.ì÷ˆÛa‡Áu‚ôÞ/ùÖÚ{ñþçŒ?3Î;pž¯ßÅ7 ¨©/‰øØ"… w6W6`>äƒRè5 ìSÎPÓ–÷–†Qâ‚~ -•ÀèÞÕÓѱs×eçöùÀO…-`œ–¾n‘“ÆË%ð:ÔoÑ46VU­`)«ÕÅ0~¹ä'·õ0Âë%ð.¨N—¨øØ²¨–f†”ž'„À†„¨ÆGDh®gIÚ SÈ®¶‘þ:KÒµ]]ÐÙFåÐóÍßä à9šÃFoÆxD!ÁËp`íá»—7Å0` ã†ýpQp“×N(§°d¬ó0­Ë>ÚrÔ„Uð6h(,$¹tÚ꺺mkw±,Ø(SB⡑äØÖÛßÖÖ×wÑGî7׉âoÜÿêˆomŽ<±z”A3"(Ý@¿5â¦Ùî1yñÜÙŸ¯¿gêÓÍzí`Êl#t®ú,]»óM?´Ëù˜x›PçVædùÉš.³Þ¼¡¦ ÜÈ8¡¨XLÜðmßÜgÍ©ý8(c‚íàîѧþyÿs”>ÐâåšP£í:8ø—Á£ÂMöó_ö =˯“î°­Œc+ã¢Ù%9ŠåðíY2°±ÍÁå@Í\˜3C°ÂÞNÎݺ¹çwp*>):¡9SþP÷¯^þ‡7Åï°†¬&çÖm_•WðöÿfäÁ•?ÝãÓ¡gpÍȧäWŽ‘ïásx<·ð#–/ÈèØƒç0ãZÿÿ=Ç«§qí{‰’ˆ@ï†ß<&âÿl£í1ž XòЈ~Hño~Çߨ›â”Š T ÐÜçˆ)ÆsñTœŒ³qš‚_@™r”1æh¸Á´—í#»£·ºGzL-E¢$ÁãñÔtœ¦k¢—~ærë:7÷­<ž ¦`'bÑe,AãÑÔ»(­»U~)Ëíê®ÝWõ¡â†àšºŽH”(×Mœ–“¹¡xçûE´foÑEÍ#Ÿ\Œ€úòìgËc…:©rÉ‚)XøðrþtùÆ­ß«Y? ïW¬èWuž42à>•B‹ÕkôǺ‘;…߉"âß(õÕœ;S0™‘>eòßæ>Fäí»é’‰‹gÎ]:t󿥡;·þ¸8ƒ ?ÝK¸ô|N±ø3"þL4C¶M,ðtÖ&àß‹3Ñ{«#Ø8z~Ø9£ùž¼Â5yÍm k_ÐF\ô')\ ø…ñ¼MŠS1SŸ Ô=:aƒÂ6oS æDý)¼°´ü^ËZM³ÝÂ:Y:¶ o²Ú`Pm¶‡ìüN|,…sø Úüá }0ñÿ72Zêy=|¬‡ìáqÀx2”‡§£4¼ çá4<çâ<4§¡e(¥¡é(—ZÙ -‰-]}±ú ÉÐ4MBó¯^­Ê¿@ÿ ¤xžŒ'áù öý%Í/æ—FÇ Y2ŠpÑ ýG»Å‘ÄÈx:Q´vfÒ¸n¯?èõ„Ü~¯§')‰ þ OÓÑIendstream endobj 269 0 obj << /Filter /FlateDecode /Length 272 >> stream xœ]‘±rƒ0 †wžÂo€qÀÀ]NKºdh¯×öŒ‘s 1!Cß¾¿DéÐáóñ!Ë–¥òr}¹æi3åû:ÇOÞLšò¸òc~®‘ÍÀ·)•3ã·_Ó5ÞÃR”—×°|}/l°ÓîoáÎå‡ë[ýUíIqù±„ÈkÈ7.ÎÖÒ9%*8ÿBU·g éØiç48‚&Ú9¥Z5¤ :@O)Öº­qàœ•Ü‘Z£µlnjR¬Å íHvPO¯êU{R ½h Dqª×“½œìQ¯•2üH teR  mQB«e´RF‹×Py`ëIzí×Ñi á蹉Ïuå¼é¤t2€)óß0—y‘,ŠEb5endstream endobj 270 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2760 >> stream xœ­–yp÷ÇW>ĈR‰IwIÉEr6IJ`BÀ88§ Ⱦ/I–e벤•´ÒÓ}ß¾-lËØØ€'Ž@H„†Ð\…’Ò¦M“i2ëNº’&Óv&™éì{¼÷ýíû¼ï{,# ãp8·¯ËÎJÊÖH„UåEO=˜[RÚP%¥žÜ¡dv^[:¹#²Ò!+cðŽ,f.zôVtËì/ç`NæÌÛ‰Âö;aua±°N(’” «ŠËwí*©—WÕÖ<‚aØÜšÍ’éÚ²òŠ¼Êªê§³xËgcX¶{ ÛˆmÂck°ç±µØØ:,[ÝÂ1rhމcÆæ±â° ì8çÝ´ì´kéÒ æÆÌϹ5Óî˜ö5^1]6}3—Î<õJÌú&Ä4ñ$ç$çsL¤'“è.žWg£Ô&JCâ¥ÂâÀå:oG‡»ÝÛE†öŽ¢iðþþ¦Á•Ë6m-©!¨c;ú7C)ˆ$ò*q¾f®uÝ‹½ÛEøGOî¼Û)jh2Èt¤tÙ.æ~£B/£@Ó¢!¿ßEØœîG[Ç%¾-äÝk ‚¥#‘8|pô,àƒmÒüg‹éÓZõ-f£‚"·myv=àRu0³ùlò]t ó nÌ1öÇ5“K¸ƒh!ÇÉ&k“{›Ë©ºí-D3+ó®Luýlò27‡¡ô"m(9‡Ë_ýÇëhŸ-DZé7AB3XŒ.²™F—Zm2Ôë Õ–¦ÜBÀ%ÚX<âpv‘]_y‡,NOBàìñ'ÞÕèT+´bŠXÉì7ÈòW>‚­Íƒc'÷\nôvÙ<Åíè-¸·Y ¾Á—Ók#º/&öòh$­DUF hwB)~ß{õ'ßù”ÃN„óÇšá tŒ¸B­ƒÁ`ÇY±™Û¿;s ¿LOê“ïƒí`×Ö×ËÝ”GGt4k¡/XÃT2Óv–u¼y¬÷Bç)Âßos³ZŽîèû-ŸØ3˜Ò¢³Z4"r+3×XU8ùÔx-;ƒÆÏ³®Ýv×.W%è‰b‹Ê%`Còõ€HÐë\8°mãýCmcv·%h¨Ù¥wR€C MEÜfÖBA±•½G)Y€-)€Ýæ° Ô ol6™u °Ñh §3‡ùÐ;žA«ç]´úSÀå2±É,#×q€zÄ ` ì‡Hb7Èf3­"™ùSÚ“ndjmš@¬Ój‰‘ˆÇ ›¦Ðux£!54³ ¬Í¤ÔJ[Á NW—-ìUå 'Ñç£,bÅÎÅFAÝ.s‹æº`á½V‹‡8Á"LÓïN+^}£8¨dŒƒ¾¾îJ¿ýñ®ôâFñÆâ=ôªÅj ²$;Œµ±Š6Iˆ &šÊ ø^Ëö·¡‰`N1*€bßm*cá 7àN9R¿£õ;G k{ÿÀq$NùøMù¼+œßŸK¼“ŽÆ'3xíò°¤¾F\Ý–wtïîì%bS ß;’äéÂÂ"ÀÕjGO§+è#û.ö]ôtøû "8R´góýBæNÕ¿Y‹_}¹§ð ×P«1+5ÕdÝêº5`ª[%0( lAð­{K_ý󷊆0fg<ùéuIŠ«HÂþÑGXM1EL\]_[/ É:{»ãÝ„9ͳù­n±Í6¼aAöͤ>‹-ä"zϼͯ¬PÒìE>85C±~ëóëA …Ýdé Ù{Àƒw6¤5u¢Š’!Ññ×QÚ^”Õ›2ˆ _Ê©ÿ1™,LÖðzÐ ™A54SŸrE,”t=³‚o2Ð:Ðã:—Þí³:"Nâ8z|·-|˜Ûk1ëhc£ÙH2ü©vm Ýr*5)óVFH4Û–ù Í¥3Ý,FÁ¨ëÀZOVÚŒv€Ýb·y‘ ¹›ï´X÷~žûµ¿b‹H¿Ól M-ævl©<´ÓgwÆl)µ÷-g«ˆ\]Ç0ý@}“‘På×?—x½¾½'`ñ;:H‹Ýüîîèf×PûÀ€?pìèØÐ!6±Ÿvk^¢`¿!¢hïémß7 ܲaÓŽÜ\bC®¨ENý%yÿ¬øO…uÀÝ´Qî1ýYä À“†V™”`À_Ýybw_,@t…O±.Ë¢ðÌBöX“Ycœ±‰täI™4íRii=&ÚÐD·(6È„¥€‹©ŽÎ3‘Éïw±H·‹Öý]s¦(vþÉÙײÇ+èh÷ÑDè$8Ø´éý7ývrYªŸ¯‘?ìç§„%ÿ³ŸWç–fo't®n‚X/Ï[IÚχ2I›ËÙcóÿaã°yV¯Õ‘8=šèN¸ã€µ6ˆõ’–íd5“¥È14SÕ`øi;Ë4Ù6RSOS û¡CÜs7(ƒrâé¨ÒÆ{K<º£¬±¶®6V;Ô ÁóÊÜìlÂH›Llun½ËÿÑ4=eÞŒY!EëzЗqo™ãs“Êw$oþl^Fò0ZÏs´Y[Ysßß2,ék + ŸÛÁ^Îý½ý|cø¼k¶€ÕïŸ uocGMb{d 0³áf~9ósæÁ©I¾Yã48wqà°YœgQŒß–w¤ôœ‚7£Ç†Ç÷  ÅW8yêí EÅÛš _‘ì7AkÐ"O!Cšó º¥`zUáz¯ÂÞ̶¨œ–›5»šK*k)JgÐÜ"G=A>èªqÚl¢öeéŽ;¼ÝD@ãU»”ø¼Ç}R»X4êŒuT-þkTÄS•&ÛIV ­îAèb›ÎgòšR3½ò4æ‘N²kOòC+&›Ñ¦¼TŒiH¾Í§b²Cw®Q€Rí5;Ìd+3ul˜`žã/b†™h‹F£fwšÆˆ* ú¼ÙPßÐ’×™_úšQ+t¾Û þÔ„zø &íM>ãÊÝœý]E¾‹éÉ?&7òГ‹¾bÌCÌmU⨪­¿sww€î(²#§ÏXß¹üÖ*ÏSoTl&•GKN.ųc[á¢ÇÁA‹gbf¢Å]ÚwåmâÌåÃè^ø+ÎÜÆ<ÌûÕ*¦„y˜ÉÐ_mÞýwoÑ}òóüãÁµ«R{߀>åWE tg‚s„sû(̵Ñd¦DSKAífÀsrGþà€¸÷‰VsÃQˆ„UÐD2+¸¡ƒ#Ÿ£9€p£av¢+Ù»E\æVæ¾G˜G™Ÿ-Gœ·'F‚ä,i[r¥×çCumÜøŒ‰™ÄŒŒ¼Ú¬éÝV«Åê·´:œkV†ý ªËwƒendstream endobj 271 0 obj << /Filter /FlateDecode /Length 192 >> stream xœ]Aƒ E÷œ‚€ª ÃÆn\´iÚ^a0,‚ºèí X›¦‹Oòø3Ì|H?œgWLnÑ«¬ØX§#,~‹ ð“u¨bX[µ~¨œj–‘þ"Ãó§0;_å äÎÚª\U{“ò– Dé&@¥¢3F púÏ:í £ù©Ìb¬b"!E ›„<9YŒòìòZQÎÛ„µE”6ªÌ:^Ícs€c_¬¶Á­%eI‘—·¾|È]8 ½Ÿ0_ëendstream endobj 272 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 499 >> stream xœŽÍoÒ`€ßwåC7R'KãªIñÑd3n 1:ÔdÛE^ôÐ ¬J6"!`Áý€ñífR¦,³ƒžøvÜß°«ñö¶+Šìü$Ïó`ä˜Bã+këë¼~–Žo±äÝ[OC›©Ÿ8G×ÀV-Ñ*8ÁCÇqdnxÉÌe‚.ý™EÆôUßVh“#ÂV2Æ'Ã|R %"É7ñ‰îm"!„œwP”ZBXFô—q¹&Uä@AôÉØ‹“´uÏz´ m)+³En$ü5‹9¡Ì¾o亭ީs¦`™õ6h ²ô˜ZyÈö["Q™~ $ntâ’R Št}扫k@ßGñ ?² Û˜Ì)òÀŽ2gAw Q„”Äý º%Hõû`t9z<5÷™â_³ý«y9[‚¶¤$Ž8ø±—œÜr±!À4£²'‘…yâ¾ÿ5­À.°ûíO½óëëˈ L…ù&Ä_壹2gÏ}¬È6û½P¯iZKçȪ¹¢èz Z,oþÒ-ïáOÃ5œÎpÓÔóÛž‹‡ª¢ïVkZU¯¶<„þÐÓ¡endstream endobj 273 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1731 >> stream xœ]•PT×ÇßÛ]– A1[ÁyìSI&6¢ 56¤1Û#%0Ñ4Ь,Y–aa‘Ý·gß.îù¥â"¦©¡âˆ#F+Ö:ŒEÓŽ1E'ÕÆ¦Ä)Mc=ÎCû61™è?wîóνßÏ÷ž{˨ ˲ 2Ö®5Z _®²”–½Wºä¹g² LÅFs8ªîVñëˆVB´ª‹|?ÇçâÀ#¸ïQ&†ec<µ4}]îfks°ëà±-FsA©¹ÈThÙXdúzQ\°É’~oþu ý{ù#Ó})÷åÜŸd*¯()1Zd‰–‚*K‘<šÌÆâðü»@~Qù–bãÖoc÷–fc~Ñ»ÆbywkA˜2¿¼¨ÔT\ð} #£<:7v^âã™YëßÚÍ0¬ƒu²<ëbu³ëa½l »ƒõ±~6À<"[Ǩ˜bæ?l!û©b½â†Ò¢ü»Ê¨úgDMÄPÄ5µÆÜeÏå0y¬œª¯’ÅmãJ•Nk“̘KóqUCë«—¶‚¦¹‰·;§×©zslÅz¾û¹À“ð,ü°qaÙÓ”˜¹rýàÐØ}|KÇ©³í­º/qÎË51w9© 7½ÌÊEFÊç.)ÅÓÜôb-xy÷˜úrN­E1˜ý.`ˆ™‹íø¾ìñ@‹¼k° êëx°7ê’ÓI¿†LïPœ…R€V5¥½¸„lïç÷‚õí5þ¦Ã¦8ÁlSCjßÐ?¨ásYÃÒÙ)™uÀ€£´+j;7.ßÛ´ƒ‡:Ð44BƒÃëx}oáHöŸH e5´†¢i7è5žçàÔ4 Ø&€? ›¼rõãhÄ„.L ³šÀp·¯Z¹‡~%Ÿ›U9ÉÝþèû¦~Ãyƒ¼w îLÇË ÊzB}8…ixòLºrepPv@OØÚZl6]§Ñ$)¤4>“ÑGÃ]–ßoê8W̼ª÷qT¥1a‰˜H>®ì.8²±¯¾•‡ZÐÔ|ÈtÞp^¾ŒÚùº ’(d¢)J£“?¡¤ÔT£‘w~‹ÝÚ.@G‡¯ãè-1Ä4™W9ÿÃÝj¶r†kê¦ršçnÕhAæØî[Œš•øX&êåê:ó&΀˜â 'Ä(\„£8ïFýÁ#à 3Ûl<ð¼ ãõU¤ tr=OÇóèd9¥Ø)h9HQÇ¥X\J“)y’þýDÀîvíMÇ7.ܧFÌ»©‡¹™ Ù…¨·ÅXZŠ“?ÃädLXôU£ßå®M­=ìC³àÔAš¿ÑcgHóéÌ0Í€”Ò oIQ´ˆ&~AóVSÔ‰qñNGØ ?´w ²Ôsg/£ÓÑuÓû0Å©€ËeoTz/sÇvj&a€©™µkÍjóO ¯/+­i^SNOFZ¥Æ)ñE_@ð€7¼.÷ö]³âÄD5ª«›.Ð:M:ë"f/¨·¸\Åz‘•\„ÒköŽømØ­›¾ –÷Ç©Ì/BÝÓSÝ!öWÅùrü/U;´áкäü­®ÖÕg›èP#Í©"!®ŽRMyYrñ—x¬»?ðú»¡]óAE[UeE]É/?,üãäеÏBº¶á>ô£r qí˜ÑÛs ‚p€U•:ì¨Õ”†êöt…Ú~«‹¹ÑSÆp3ÎkœêË!VîÐwÆdÞü'…"K¬ÍO—Q¶ <¥wˆÿòùeà–xhi J›¦çƉÇÔ¸nÔøûµêO6ôÔü9¯w…ŒNs°7‚£j ¸\Îí.'TÁ6qÿlaœÔ!}ÕPÛ¾1Sí‘]P,ö0f…öOr‘-“ûenNÿü¦ræ¥gµ#9‡³W¿A,½“­sn#NöQ1›TFÏ”ÒÊͤߚžK™+@c2wƒþw®ôhš;-åf[áúg1ù4ÖáÑ‹ºq| ?Á¿öcQ?¾Ý‹ÚÖòp@O•×±™¯®³fsOM÷¾žŽCº˜G‚Üsû+Ù™–.íN{ ¾ÎѸ­Y'µÝ9KEbé;j.Ž`•ô›àv÷Ä‹ƒœÊêk ·‚xùf׿0¸ð¨3¥ ­8Ù {­PY­“Æ"kÀº7]»tv÷äq¥¸„#û½Î“{â• #.·Ühü/|Øy30€7Üpíà°å¬³ÕéÒœWÉT”ÔC¹òcX¬[½4^ø…5Å'[D}ÐãVD?¬‹Re¿ýP¨Sð¹w¸½_{´ü¯ú?cÙ^endstream endobj 274 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 509 >> stream xœcd`ab`ddóñõM,Éð,IÌÉL6Ó JM/ÍI,ÉHt7þšó×µ›‡¹›‡eý¡[‚Wù/ €äØs 2˜r¹üÛ˜¦1°0|cìÿ¾†ï?‹ë†ÆÕ?ÄW3þ|u“ùלï*¢Ý]3+k»Ú*Zå*Âb»9jk'®œ?iî”òÓ–ïùÎÛ}”ã®ïZûÏr3/¹Ö««œº#»½«½mÚ®»ÎKíNí.,©Ì.Llëîàh˜Ò>evϤÙäæßZ¼fu7ÇÚÞŒêêÆä–|ùRÃrû–üúÈîVÉÒ9 sçΙ>k²Üì ŸÎ97eíº6HΟ·måÁnŽÓÝÅÉÍÙò)¿ ÚÊš2º[ˆÐ P'ßZÕRÝ]ű3ýЇ½ß%ÊñýgVi€úøú#æŸiÇEgÖv·7´wÕµÉ5åÕWv×tWt·|çúÎðmÑwînŽ™5Ý5Ài“+±Œõ,Ìé\Ô½°sQÝwA£ZÝ¿u«ý–ú-¯rÓá;ç'3/Ÿ•°.áD7DZ»ÉÿÎÙ/ªigT G¯¸Í—×Í~¾õ˜üŽ3§në¾Ø½>l¦íä„.Ÿ‰|e ~8O6í{Á¶Õ\¸å¸XBòy8WööôöôÍš3µgr?„Ñìnendstream endobj 275 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 195 >> stream xœcd`ab`ddôñ ÊÏMÌ3Ó JM/ÍI, Jtwÿèý©ËÚÍÃÜÍòþ»¦Ð)ÁãüG@€ÑAˆ‰‘‘%ðû¾ÿLÉR Ý›~ÌßtºœñûÒ‡Ì?zÅ6%°«tÏX#ÿcûÊöî\9OoÕîônŽö¥Ýg»/çøÓËžÕ]§"—Âv¨ÿf÷a ¼Ù}¨ƒ¯lÁçYßó§N^À¶‰ë·KH>çêžÞž¾žÞI=½“óð00¾Eãendstream endobj 276 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2387 >> stream xœ•– PgÇ{˜n‘€ÒN€í¶ŒxkvµR†#QeüVFÛqÎCI^.=Åâr»V3J²×\oêƒ>¨4(ž\­ƒ­!éÒÿqæâùʨõ Þó«c½v“|Nèl˜ž5OÃSoÏA>ˆ¾u ù0O•Ê!^ÕÆ¨¶oÏV@$(¸Œ×4Nã ô@' q]m§«;`ºR’š¦PPbÀx3p膭‘ϵùŽŽ ¦k~ôá8RÊ‘ïÜï°gxdæÎ8æ"Iâ9®ø®X v°ã‰¿_0iÕ8’ß MFnß ?ö©G±,tÉ3ÑqÖötf˜¡žBj’ö|Óq®ÁøÑð_0Áz ³DøÃÎ^éô½2ú…½A˜$L‘Km‹^¯P¬Ë`Œ·eô·xƯp4WšÑz>›\®/ïdÑ<²«ÍF2ÆHŒ{ò R7æ676W·1Þ?KÊâ ‡d²6Ihÿ€T¡ir8•ÝšÙœt<¡äÅ*MñòJ¢Ž5;o"¢äi­™1åAA%PUPRÏ~CÖBi^¡òö3C~~A¡²IiI û'/H©Ò4g²å‰CùjõM¹e¹ˆ£–Ì‚}AšÏÎæ1ú2£%¨}pp7‹§‘¹_a1™êë˜#–òÊâbçÎ='"ôé~ï+øH§Ë 4^ÎöýqDe›ý5úM‘©ÂÉ• «à‹:µ¡ ¡—U¤qiâÌyzJKÒïŽí2ì~5c¡Ý.µ¿}EÄ}Yç<œ’»N—Þñyh~I?‹‰ç?`¼‚\¹6äéÂî³ úçÄ?‚~1‹ç‘°=‰öì®C'á ô7Û‡)ÓÓ2Ñ»ŒŠ(Ëžä%B0SΓ©úm ¥Ie¦”¤ÝP»4pÀh(Ò=‹ý± YõƒJ¬PÏðäC†1! ‹z¡ªãÑ,Œü-{ŽêK¡ŽšKjÑãèªã@{E»é^ÆpÙí(C‹9ß‹_¢gGÞ!E ×åo¨ÂHD&$@_ ƒBH1Ñ]ñÇ·VGµt…b­²1×ÚZß`íŽ.¶ÕÚWjj`(n ›L†–®J IÌܱ­ þV}éÓçlU ½\QlOèä.VÂâågä47oYj̶Çéw†þŽZf}Åur(Þ)½‚81“ï¤×Ô9·°Wè¶Du:ƒ.‘w³ëññ/mdç>æ´ê,ÜO!“¶lÖÄf¦ìTn†hˆkIïÜ×&W*Å"Sy£§¿ætÃÉt«ÂºÃ¼R¨»Z`7Ä :޷᳃ŸùÑv¡öŽ*)z%ì J tEŠÎÂùþØUˆf°: QTKõzØ»(ÉSPo¨P£Å㤿vCææ´Ð5 …ÜJ½™¢o5ÙŽ:³æÔdhwïQG;ãÏü­ûÍs- Z-<[n­ëzÛ zúÂ[¢§QÇM»M⸆b¾” / Éò èu`È-`2VnÒDµ6ø šƒþüIïpåYƒ¶“Í*ÊÞi”¦!Ûjm¬åßZqb ž6:žŠå·ç"OÄC”Þ%¯u*ù&œ(Ÿsˆ ¸J‹¸SÙµ—®øÑÓ‹…Î{žn“ô– ‰€“ÈBKôàób>ûLŸ‹åxêw³Ðä÷Ou7Ö±kIzüÜa7è÷fQôáÑÊí9±; ¶EãÔtÎÃ1èµ ZO6ëâÁ '³Zã*ö€rDA¤n<ü˜„— é¼°Œ—Ž©Ç¦‹j„ö·Bì7mr©ñ=lU³ã/øg¡î`…r ?§´Éú¬‡€ï Õ°5H¬|çÌU¦~±WϺ*pôµ²B%)z4¯Š! ŽÖ³B/Ù }ß»Jß[ \Ô[Ð_ï´ý廨K -ùô‡ŠŒLRÐbÃ^Ø ;[3ÉýÆapR脬©ØôµØw¼>§`¿ÿÌFÞÈ»´™ EÉq‘¬-ºQcƒs0¬0áib¤’g<ÅHñZ±§z\ëG®ûÑ3·1où‰¸ãa }áùà ³YL>§üð;å|Q<žŒ¾! "äÙ(Óã'R–3=l²*Ü`GóÄa‰Õ™ˆ¼Æ›È$Ø;ƒÙ¥”uFnbÑèñÑ¡§ø]ä ¨v°B VSiÑ2s+Ô¸@CZ¾‘h`^1˜NTõèá'’~÷7ö@/Ôû]X¤»‰‰ë––›¸p%¸~~tÑØˆKª-Iõ9Ø’;)Ú§%+¶b{`D)T›óÎÇv,…g!jKÖvÊø/mû¿®`GñÑéásu»Vü–vÿáÐ (ˆ@)ˆ|)й¯VZ‹VT‹³3øw{:'¾Ó¦=¤ k.^–…ÂŹh 'E±fù»šÎ]‰9jµº^ÝÎU×@2¿ÂB!Uh9TR~õCäÉÜßxbÓ³òÿ]?³I©Eiå–&ïyc2ãé¦òšÔb2‹ß#â£äM//‚ø/õ…Œ0endstream endobj 277 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 697 >> stream xœ]HSa‡ß£Û:ê4•&zÑÙ…Ita™DdÝid™µ‰‚àÍcké¦NÛÚÇÑý·ãÙ™žÍ‰_uÊù•iQHxU˜$YàEBÐM]¼'°y÷ƒ‡ßsñH‘„‚ȹYQaèj)ï2Э%…UM÷Í´áÑ!É™ŽÄuJP'ƒZ±/ÈÞËúzôsæ!T4uBŠ®»—²Ò¡s(`‘2¡D ÔM\#\IgðbÆÑ™ìR,gWwxçkøAÁáðZ]]ZS[ d·-¼8Ã…†#Úm¼¦ü­šÁDؽÚbÕk|Q9>îmw>p Qr‘²PÕcƒÞ&´ûªë²äì€!`ò*ß´®ÿýˆOŒRI»È</š%pÙf·’c›˜ÑÎ<%ÑBÑÓܶà­qØ!w¾ÿüójÕnœ¥Vš}:0Ak'éöŒŠàŸä©÷¸ŽK,àòÀ+Ú=^/c£˜þP¸N×üáND¤¬‘3ä#²º!Üų́vHî/={–Üû" Udñù“•rÚ>6‘Àå€l6¯ÇÊRz™VºyÀû|ca* D—Cáõ²_ì˜Âj¬ÁÙÚDÀã ’/[°#ß’q£_³i^«oí6S¦¥H„G)hƒ’+WÝnðKºO@üñ §Æ Î"¹ÚO—ˆØíOÉ1ÀQMpF!Bî—OëO×–[ú(÷FÃb ÀB3­-LUÂñXD??ÅS“»Ó/—€œƒö~‹“v›´.“£žµ5Êr]‰øƒäÀHßÌXd$$P\ ¸ÀO=ÙÏßNnû‚þ€ônùEôùÊø* ·YÆcÖÊÊ÷X&quçYC¶É!⨠óL¬TElœQI©³iTªâžQ"qôñcŽW«ú–¶8Æendstream endobj 278 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 160 >> stream xœcd`ab`dd÷ñõM,É®ÌMÊÏ)¶Ô JM/ÍI,IItwÿŒù¾„µ›‡¹›‡eÝw.¡ ‚gùO 0€#/c`bddÑù¾†ï?³|Ã÷ÊmŒ@ }¢ +º«åþ`«-ë.+×=[þǶ™ ºÈó5NÝ<á§ÐòM Ù¶qmã–ãb×çá\ÒÓÛ7­§wâ„þÞ)<< èå6dendstream endobj 279 0 obj << /Filter /FlateDecode /Length 5694 >> stream xœÝ]Ý#7rw^'‡CrAòt­Àêk~“ Üâ\ìw¾ò°NygvÜkidKòŒ÷%{ªŠìÉfëc¥]ðjºÙl²X¬úÕûÇIS³Iƒÿ…_-¯šÉÝÕWŒ®NÂ?¯–“ß__ýækæàJíÇ&ׯ¯ü#lbDmÆ'Ɖºqjr½¼ªäôú < šø­k.œ…‡®o®^Vš6u£¤åÎUëÛé ÿ²Ìj[ÝÐaXãªöU|gۮ›éLx+3Õ먷ÕÚ_‡Ÿ?D­çëù2¼G9i¡·5öN=¨jw|ƒ—yí”…fÜÔN³*cÜz¾h7ÙüãÒTË)×0^ý=°Ø¶³Ív¾½ o7¼úã|ýý_丨VôËW=` 3¬–+?+dB äÅ‹Íô®ÿk°T³Žô3¡j«¥õ+БÖH-`ÉŸ?Eô\ÐHño'à>MOÃô´¬¾r[7’éêmx³’Éš›Z°°äÕ?®àq S[X š|Sù6p/j#k.9LÉ·Ù†&bäÖðØ0?9™±Z X]jØ”û2‚7b5|YýÛtÆ4®0E7d”¶6ÖØnßLCÏ&B7HlãˆÄÕuiÆð“c`1v-_V_Q¹Eø÷§£fº¸ÉB&¯‡f®$xSz¿¬…<&À²÷‹÷¡¨ny/1¾™á‰J_™Ëš1ý12[Ò}Çk¥îó•t¿‡7áJ‰7ÓýZëFÀϘ7ARÞíàŒ«ƒ¤<Ä@²á≷m*ãA¾¬êéL¡ê°¦ú÷öóD¸®åqO’OqTJóJDTD2•Ç?ÆR^Ð^_¥ªDÉ& òU|´½BeÊrNÊ@‚ÚPU»ðRxÆ5Ћ!‡ŠZÁ½óå=iÃQ5»ý.ºÞi5SŒ”œdª0 º‹AòGL2¯¾=Á=ùüHK4ûzõmLçøvÑnÛ„`›šhÄÕ0/®®ÿåeuO Å•1 &¦«»„÷é4w7ÖÄyHûCÔ,çü©vÉ«ïÂ;rZÐêcGšg«©»ÞcTÑ@½8tÕ pN77À zl8t¹nS`D Å PêþµŒW«×áA)Ò9 ›ïe?tÃfˆyí{8Co^[®òÏû×h®57rž10.•¥A6µ1´" ŽiPd;`Á¤Ž\µœÓŽf€Õü.¢½cmÇ"ëÒÎ ƒ÷„T´>É^˜oñ†„i:¢¼D,'ªMÂ8ÿ1ºq­ý€%*ä‡oOòçjwñ<à&Á芶<®y<µ”;½:Vò «ce|Ý!k°ªo$-búÞDŒ›º ½ÞÉ6ÂfÛ.sþ¯;³ÉL¾è€ºêUÄW?S/Ò)æÎ|ùÂd•$5Áþu:“Ρ8{q{· Ò7”œÐLkØgøN¯…5›O®™ bZ â?Èm0ùÖ·I{°V··7Ý;-ÐÒë Er0núÓúÁÏØÿÙ>L5ÌJÀy5%É":ÜÍEÞÔRH[Ô0gކ¾Ò° kƺq¾~ÚÁž9UŽu½óðTÓ9c‚DŽù‡±?wÞJý*zä¤g¬ì ±¯®¯þ|å}$j²>Õ7"W‹‰–ðĬ˫Š! žÜT§TÒß7Ó¿÷ØûÌåµK»–ç U€-&]ÜÚoÝòˆ!âÅæÑh|Èž×@›Çb f€u.‹"¸¾ã…y¼æwËœé *OYmˆqXAzøD¿]>Ã#‰‹'UI•ÃÆ‚}E¨\yL^FΤ5p\¥d2Þ»õ”Á¤ÀLÃÍ\ò([+&;³ëEÁ4µäÂffW[t˜æÖë-øðNšÄ]€PUJï/`0‡l¦‰YÉÀcöŒÆ8ˆ,ÓàבÆŽ È/&ÝphÆ ‡+_Uþñ*²hcì…Ðq.+S_R¿ë8cÕÔ»èë7•ñì?“èÕ’0”ÒÚ¿ðqÔ±G¸M[rI ì¾p}9߮۟‹lb1(ÐŒ²É»m«n°Òöhœ5]T÷¥Íä®Ãž~x}Ü•¢kÿzžT‚ÜöÝ"î1øð\ãýw®ñN¶íüíÎûPòiW3×ôX‚\–èt ٰת7±K3Æük üaxHzçü娡gÛ˜.¾Öƒþbêç`î¿)‘†,¢Äœ»öaÚ53büð´ 1JK.ÚÄqÜ’}CîôL*ÊHè)ØûnÈ~W”†ÌumL/ðÛÒ˜ zRÕ™â,éj—±·°Ô¹Žq~,Ûg€*›ÊÑúünq·Z· ¯.q †6Ûý|ô.y¡#f}´jqšÀÔÒÀŒ@sRŽx¶’µª†ÁìR…¸ °§E5"ËÙ!Oò®úù^È»ŠâWÁ%ÅÑŸæ–ê §¥Ä Iôw!ÿªTèUN»6ç UYØÉÔ½ª#[×--¹<ÎñY ‹<î²L‚í:Ä]$7 u7m›·].Wn7!úŒûîéÃXúÅÒ‚3ý©#)€cñ®ÅhFà]òHô R&J@~׿Zè½;¥ì„ÿ˜ZîÃÃ(û)j/{“'ÓÆ'3î.l} =§¹(rªW‰xôb\)¸SmbB¯Z °a $ÄŒ”ŽdëŽrØÆ±!åð:<ºh_g¤ÃÁ«L¯ür,…ÎÒgÒ¨ìx¨ÏS5œbŸšaVC$R»÷êR¢ Tbk“¾¼½ûÎ P ζ›jhFx!™ùõÇßz·üÊRPù„“oÉï/\|mÞç#¨Ž%ü³\¦3¥°K HÿI&:õúXÌQ„&h 7}r¢ÇÐb4A=Ʀ}f‰eäŽKPKkÛ—»…‹ßx`ô8:ˆ (q‘‰˜àÃOPqOK`$üÊ53ݬدá”h6ï~rØfž˜ö,‰—)Ò=èùl C7K‡†ŠðPÕŒæ Tζý^3p5Wn?YgŽI`E²‚™=JÖæBdÍz™Ó–nš°BpË@Yó½<#2bH °ê¿Iøƒä—„›6{ÝþÔÈIWÅmBrÈÅŸ‘nÍÀ>"Ä®¥Îû0¡ s$¬Ú° 50iç°fÊ’ )çB”tÞ«¸ œ0oˆ3¯œ°•hÝ+¦©No7ïŒâ‹ø£GɂǨ%Ûc8³ÕÅæÅlŠêÁ ëÔñŒd* |¢#ª·èþ÷³ñÉ5åý,k»ëò‹r63؈VŸ°ò=½>t|TŸä2)¬/¡»\šÀûLž„œÀ•ù)±ÇìE~(%¹Ý—ÂÅŽËáâ»®?­o}ΔDƒéöþÕžD)Pj¡÷ir[0VHò(¯÷$'ô ðn¾H¤bþFoWÙS“´sô¬³=ìÌ–û"üç'‰†üÂSà®Ö`3`! rùÿã"x¶f<9öGG£Çóu˜Že¸ôð§GèYu ¬’èÜÇO"þ€Eý(_¦yó»b·¼Éæ=ª,³orê$éQ+ÔœÿýõH}Ø®Åø`v‹ð|Ö2}½? ³Ÿô%–µåꆄÁÑÑ‰ì¢ }+ ’¿1¬ó1Hæ¨v®Ý §^œÕC›½àî³ÙÁŽ»Í1LJèâwsÌ€¥W‹ÌØàu[0\êäIR€ÊR®9Í߇[b\ X—£D­4š¹þ}N¬.h‚Ww{áC`‡ ÞT§‰¨;5¬Ô¥‡š}~º®+Sò#§×PÿοÊ7ÙkÜ%–,àU y(ÑÃg§ª?Œzƒòª¡v“$Nß!ºjh€óî§Í ª¤VkšÙ!qÏ¡' À]a^o6³f.ó0ˆê}Uоòã`ºAeð™ùÉ@X¼„õÃÕèïþýºáÄ÷›nÊvèÄ>…©þsùÜʆL<Ú“Ýò K†Y]$|›‚)‘ôËfω HØ&£(Eˆé˜ 9%V±‡€àHûÐÀM’çÜ—¯«(DîbjW¹J Sª’;ƒÉT¨z(Ê.‹¢CŠ× Õ &«Çy’–))ËGNb¹oòcáæG©‰Ýœ²5bIÑ`Ÿ,Aù€µÈ·»rzæ^ÓÒM¸Ó5·|_V$PO3QÊüʼCæRZéÉó«_•èÃð\î&3 G—v8Wðc7%ŠY}L[]ƒ’Û­-oÀ*–융µ˜¯¤‹k›™ÔëÊ“µý@ð½ÄP¡—˜Ÿþ®ò]m|¶Ôð—eW6.;8ôçö/d¸½ØʺɉZ뎟aeð8@xà鋺‹/‘¾8¤;æƒ2˜û¹>_ƒù—¥]Ùm¢DÌ—¨g±¶~~zRþw1Iy)$(ÇHÈK£f‰3„¼”¸$¶¬ÀSWÔPÈ÷&m²²]€"¸E‰K(øwF &>B÷Ê¥î¿G‰Û0?9Êè|"å/ãØ»‹ÊŽ-ÞÀѯf…#|HÇ©1ºâc©&C¾®éúdLQrÖ¡'™·¡Iî ›—'Ï8VÞp2˜L¨Š7˜¸³¸é{^v«ÍûÌUG»ïr¹êyé¾à$·6¹»?a×½3#&ê®'7ÌV¿[l¯Ó:;k"$ïü¨ÁŸô¶K|û"D™í3µµÑ-0LéBžÏcˆÓ©;ͪÅê®ájcj­R4@L*9ŽÓûPÔaN?Y< ˜? Ytg³u!(Ͻ3t[Y¬1M§@á)^i˜V]°Š³Z*yy:^ö„²³êÓÐG`àƒæLLbå¢x`^÷"x¯¡ ïS²`Ç)©ŠÇÆåönÃ/'ÇÆ•lj¾<ñÜ5Ã{Zè¸Ìn¬ÚEZizß¹Cc×gûŠ×ܰª;“G°A€Ç‹ût6:{':K(ôSˆïÀ ]Þ%«îMé›1ÅÁþ•Tb+EÔªßö&†ÑÐÌ;Î:0,v3rlåt£>ážn„÷Zÿv:CØ‚âäVÎÙXgJyY¢¾«•Yÿ S‘°¡×%/$«9cf¨`k…ÏÏÁ5à ¬¥Kx!!& àô“†_ú56TÚÍkè›ùIüoAxâQ”Ð6‹[Ž ‹5‹Ãž¡ñ£XöA×7úé»óF>û¬ÄŠ.Ä,â–#EÒäêBOnw ÊùUÒ} jãÎäï÷íA;íÑ 9ÐÞÉ0ú¬±›x}ÿªlÁ;G2"nyž×šN7z6@÷™øPŽñZË øPŽr[ï¼ßçÓ£›n¯…1p¡|”y^{ÝÖ‰ˆ.IÑ\LjhÚPG‰hŠ}_XF?#“ô¤¬ø¡Óvj"0‹“RÊ´”t®¾Æíñ}¢ÝÃu‰u9Od÷æ<:µQñIZˆê{¤Áã‚CÅ>¾V†RhÃ(u÷‡äÐ×(s“ 1 §¢àô`m×[áÄn8yq ^öž³&9ªºÁœÕùÂÜL‡%*;ýAàHoxÅ£ïÁŸ5ßÒ‘¬Lá9±oŽÆæººÄ¾ ÊW ñ5`·p$ÈÞBñŠ#4¡AàÆX#=]äeÃq'×ËDí{êe>Ar|ŒS4S²GO^ª$ô° e?îÿRŽþ„÷üL]î0W`p`P\ÞHxpyýÀ*Ö¥ Ân ƒ:—$ÇËã7·¡•aÇ¢ýzˆ?×O{y˜3©Â\,Â7ݸ­7»˜L¢l«ô» ‹·] ©+áÓ q̇ï––Æe*>@ŸIa÷Çùu¶"úVB{;_‡[ ü_­–ôQürÇ·í=ñã?l’XyÀCMa‰ÚÏÃ;€Yu»Æ*ÝM¸O'”í>¤~váþf¾¾iéZxØŸ%tL…oR¬“Ô.Ì×íXmÁsÞq¿¾ãW7bþ‚¾8Õð Z¢~y‘»»]än<ÿFòì}ôbµ¦™/Ïên¶ëyW±F^¯#FX­=ã*üLÐMÒqz`y Fe|{˜ÂåäFQ¼»Âª§|nô ©Ç/aKo7a„6L²‰ÏåȾè3þ :È"wÃtðì>Aº €“…Jª0ï5~Òˆûú£ÉFÞkx­x'¸ÿ©ì}3†ó#Î$8V\$Ë0·ÚcXñ¦¤€Kõ†öÏ—Œ©™ ¦œ1Fx5ù}‰(xT f4ŠǢ録‚ÆJåคܘK9µíø@‡££,2ÅFQI* ßæ‘iÖ‘ÿ˜’‚,ì …È&üưNŠØú3Öð¶ÐgxFCS4Òá5»ÿóÕÿ‘÷gzendstream endobj 280 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 425 >> stream xœcd`ab`ddôñ ÊÏMÌ3Ó JM/ÍI, Jt—ýØõS—µ›‡¹›‡eý¡ ‚'ù0€³¡ƒ ƒƒ0Ø † †­ŒÚß×ðýgJ–b([ý“i5ãñWß¼bþ±ëûeÑ+Ýß—þîüÝÙý{©“s÷ïß;¿wv_pYNg†h·w·ZUp¾‰s]Vwb·ûüâ{ÕG»ßvŸì>×}cæÁ%O¯ÏX×½³ûléBûYa=NÝv;º7ý˜¿ét9ã÷¥™ôŠmJ`Wéž±FþÇ.ö•íݹržÞªÝéÝ)ìK»Ïv_Îñ§—=«»NE.!…íPÿÍîÃ@x³ûP;̰§ßŸgx²‰ñòw†ïS?0ÿX÷Ý_4­³¶Ñ³¦¡¥Õª»¶›ã·?Ûw‘Ïk—=9½j¥äÊ•[öu_âø.ø›õÊo©ß¢†fºÛZ§-Y1wýºÕñr‹öØx¡›ãËa[+—'Woùß¿s»ººs$¸³ñ•-øá<ë{þÔÉ Ø6qÝã–ãb Éçá\ÝÓÛÓ×Ó;©§wòqZX¼endstream endobj 281 0 obj << /Filter /FlateDecode /Length 5557 >> stream xœí=i#ÇuúL ó!¿¹ˆº DzD,y„%5³;ËÕp¹"¹»Zÿú¼WGwUuõðÎh,´Ãæë:ÞUï,~?%-ü/ü{µšéÍäû uO§áŸ«Õôw“ýRâ“ÖK§Ï'þ:eжDë©¶¼%VN/V“Ëæ¿›ïfsÎáÕÍÜ>›ÍIK¤¡F™f•}z5c>XÙì¶³ÿ½øO˜ˆÚt"¦H+¬É.®'œ]¼ÄµˆdΤl…˜Î¹m•bÖAþÅCD )H«„ ÊZ¡u _×5¤•F„iÿ9@°B·Zs"È7MmBÑ2Á¬0»Â§ºµš8ÞZn‰šÎi«¸´Â’úXš3§ àeóÉlN•j­50ºÇP!ÝG«66¬àem` '$ øÐ1g FÔ F÷C模¢¥\ÅMý¥†ÛRƒ» ¸™!Ìg“/~³H@€VÓwÀrœ ŽZ)§š x®¦« ¬Ç¶Ì=òëéíäÏþÎá:} Ô´‚ynü;€ƒOX«í”Y+[©ñ³Æ1˜5´µð¸EñéÕÄ„i©ñ/Ÿ¹j ó/(œ‚Éx!¼œ¨1õSºÏ¦eÓrMW““ßMÒ½¾~æ¤eÀ xë†åj)ì¶Œ%{µa¯LPÛZ—ÃB„G1øi ,]Àž‰ÆÏ¢•ðQêÖPü¨ðkX¹p¬ïŸ0|  8.>Íp 7߀= \``•ÂO p†|IÕ­m §–€G!jÑa …ÝNEGU z„#C$¹WDxÅ‚˜rª6øY$2§J;šqoÀ2ðj@µZâ €!\(HÁGÉý¾9pu/(Ûjí%Â*•‡€EK Ó’¹òŠZR·À®2°Xi½–üÃòæÍ 5!`–ˆfz‘KÜœnèdz¹°0èÅß/7AcZÐ6¦¹J?첯®q@¨ÔÍ"{Ÿ}º]^…©$mn6‹×ø¥ÆXÖ¼ˆC¨fû­ŽkJl³žù­e¼y·|•<¿Ax`_*š×ÉãM¦ä¯Ý7§h–Wé7»å:m[Õ7 &ДïÓÅÔèGÕÅœ Š•fûT1eò8U,í±ª¸äS££â´‹­ç w³¬Ôy>ë ÷&¡ZJAO]ÅàÖžºžŸ¸iÖÏèøMÊ[‘ñÁXln2Îñˆ„Ó0­á„§¼•ÀE~™R Å›€‹‘E¹äÍzË€Ân2ñ tɉ §(Ì€¡¯kÂyA»wz•ŒRºÁ–²¹Nž'¯ß$—"ï:Ê{S <žHIý|á9õ[™Sa[£Á‚3ÚÀ½k@ŸA9¦q¯™¸¦úêu²ØE ´Áã›æš`ým ˜~XÞ.wËlŸÛ0†UÍzƒWÐæ¶°í³{ᡬbž¿ðmΛíná KÂeó~f@¬@ý6€…#ÉŠ|[ë!üßËB?-nâkü†ñøg0Áip6(J´B$kÞΜÜ0Õ,6Ëjj÷ªûÆ­ò&ÛY®5šsiÀ¨‰ÌúCP":Ñb:´œÅh“àw5æ€Ã˜‚ŒOÀKà‘¹"Ȳùãòm§ö xL‹æšY°D„€ù¹yá@ì¶3ñ «œãmToX®ø]uk†€¹à·fàHÝèZ)aÈð2ÂMu-TU ãYó]]¡ #Èeó)ê”Þб!aý|rL|Œzvÿ¸xêÿü¤ø¯ªwÆ3ÚÆ±?r^ùK(§Z†™ë¦Å«¨´ QX܆þ´NÕü­çaôê¤jpœFÚ87È]ÎÈÑÓ+Œ¿Xâ6nÕé¼ û LI >*{®”#Ó?ֽ– n ü=ƒ'Gí>ëÁˆ3zrù*3OîOòÀxÀ‚ïRYÃAÁ¡Fác݉ <ä%,ªL奯åÎ.š£Ð£âˆ¦‡£®Œ_J°ËÀÇ@ …r°½Éð"À‡¢&zðŸÒFp•øþøï V_×m9ù+ºío‹ø¸ñÅɺñGŸ 9RjØó¦ã„‡)H-Ød| e«ˆZ².Op] p¤º~F(Nû|Ò¬f¿©ÒÂ1ž>êp¦ŸA–æ‘æ“8i”}$È>ÊìcÎÕöAV|H}`˜Ù«¢S÷`ú ´HæÌR :»Ö‰ßÐfYëízV™¿³üUîñŒÚü™“{…¡‰9Ê’™ÍŸMüë›ëí¢¨jó ÃhóEIÍQ ¶.Ñr`E²†U-½ÌŠC¯ÂI`º*Yâ]…)yù¤^<èÈ¡¨¨öŽ˜­‘ÖcõüQÅ /yàVÕ>CÕ~äâÙØâÈq øi1"J[Ie È|P˴ˆÎÝ¢u/JHÙ»­aÅQx‹"a$Ð!èϻūëÅf&)Šƒh®—[ïI׫ÁÞMŒ/3Ž1…æ[/ü>ƒ‘Á‰¿£…îWà×Q qŒ[ø‡àÎæöü wÿ•u.¹‡²‡Á­ |ç<ÔïÄœPô#BÇ¢T×c[Ý„u…/\™"Xà/\œWεå6¢ Ľ6i¤l‘‡ÄÞá·T#òe¸`<§² fex£µ><Y#õŸ •ˬrqã•ÚÀàË—Ç‘õ]º+Qþ>^Ë´ÄXpól_¼öøCéÎ8BJ²x-ÛË(]ôâçCé!ÑÍÙ^l߯æ±ä¦"–ã¹Ø³œIE)–ÔŒEBÁÔÒ:,±êÔ­ñ«Š«ã *Ê@„Öá/µµ×ð+nI­Ç¹Ê¼ðÅx) Ònf÷®áé–åaBç0Î’ŸšÓÔ‘Ü.wË·Ës\@²òÊ a©+JÈÌ88¶¡‰Nh7•ln°žÁ¹¯,}yq]æÂ“HÏc5îÂp‹÷zøYíÀî‹"0Hå#Utb:øóÉÅ¿\æE8ëP&‘¦Íb»CwÅ­Å6}¯f± £Ò¸üþ¢žH7 0¤Ÿ*ûñs“) ¨x<‚{À¹p¸ñ@çBŸj‰²žk3™Ö„Ô#Él>Ù§Â{=ÿ©Cx$Å”¯ò£zØž±C±ý¬Ÿ†w ›š»q-ð˜y\\Mó‹±ZÖåck Ëu¹õõ&ìYìjUiL¿gž&CkÃN¹‹Yzwø¢F[Ý *‘¿RÈûꮟŠ#Š_Ô&·p.cç4¿"cß‹®ú÷“º M°Hã§èz¨sGDN&c¹Þ»JJïÇŠï…‘4/ÑÝ^dô.^ŒeF¶±2SÈfµØÜdùWµŒ%T!ã°íë&r¸+‘Py²ÀOE;CXê2 ü:ɰn\ðÞ—»Wj?ñ˜Ó¾ç€óf‘šÐY"*Oô.­#~( ÁqÙÜTÊT±|Ug#/6‹< ½Û¸WÑ ^üÖ «—«íoÔRÔúÚ{” œýÚOžkRÙ*­;ïñ^ôœåë'uB ©^(³²jb¯€¤džt/Kå)YgŸhw#à*pž 6]Mà„Wf Ž/E ^T0‚4ÞXEê¦aÁZŽM‘|Ø"BT2“âXÂ?ÇNâ;"B%u^µà*©º; l÷Ë_Võ^Á1OáÆ•ÔyïVÁdãA†@üQ ¸È½áÎØ}f° FðŒ¼¢8O|¼.üÓô™ØûÚåF÷ç¦Æþ#à Xfß©]c6ëóÅˆÎÆv‹¸]æ»óìþØ1שÔÿ}m¦Å€Z¦>¨joädÚ¦¶[¼Çä‰*›ÓØûFioÅEî=¾_Ùô'ÿY Ô{㨠òIÂVòÌ(9YÛ ”y©lD_sýdv<]ÙÆrýðw5«[‡lÖ¬îÇQ!÷äÙþ¤?ö„ÜkT›Ý}Làþ‚r8£ =örÊLß–‚ôá­L˜½ïû)·§wià½,‰]¥a(>(ê)eì-4‘äü@‘ä|Ó<ËäzD׆¿ƒ¯ãðµ€\^-€tª«Ú¾:·Ê%œ‹2Åw£¹ÆÍ0Þ[°o•PûÅ€œ•8Õ7q–0ÅÑbPxüûð£Âü·Ú`TWD“á³¾eÊ¢„±æßocú.do_噵PBY4¯ÝöµYÕ¦Ôܵ·â=Qø†dÛÞ‡yfü/.<.)'Þ¨5lÚòÏ Þn˜åËÄ"VÜ—ÊqoÐAÚ®Vç÷rÛ5Ý®of˜Ù TÚ˜j«Æ´{K'ÎÔMq‘x<³·ˆÜš½‰(ÖEú»ªgóo8娑Þ2ödººÎs›ä)ÆÜ Î{„rªÇȱsˆ±N@¾ÉÅs±‹å&ªYú;;„K‚–¾VÃz µ.qúÍ,ÜôIÙwéØK_ „q7™º"ŠíÕÀ»@ñÇKo(Ö\qßüm¢Åm´?”åxÿïjb"˜¿ŒOŽÑâíµnLi[ª…O2ÿÔj%›k—ÿ`EŸ2¹ñ»ª*}l ``ãúÛZõ„·}%@É(Ø”Æ;[鱚½(mt^õt|uâYRwuãø“¦Á©™êT1e._,µ£¢UÆËч‡—P»k>Ç¿qŸÝ­‘á³û_!”NtP9Ó¹jaÌp'Ò‡qV> Waû:×Í.ñŸD€‹]§\3@—pÑxŸ%` 4k žý_%èÝD–àv€Ç/jP!*ø¨]l¨Þø´ÊÁ> ”qðàz.¸©tø©PTD‚%ÁuåÝÓ«Ú>ËÑ>z¬œBÄ>Ú¥aèáIp“½Ãî7 `çÌ´†…›¬³rùå6ú,/‚;“¬“âŽ+C9¯,ï¿¶ù&…ê~i£m5jŽ˜?›å‘qÎ^Í•¥v.ÇnDüâ…ó^yÞ™~˜ÿµr¡R§­ëísе¹“ àŒ¾³I@öM_í|©î6|+±®›+4F›+ß4 ,¡”â-ì¸ ‹= ƒ ì9q?V#TìÓðÏózâ…wÂ…û5ÑB@hÞz¾È®þ¼}àŒÈq·¥o¢¨äl0ükBPíÊ’Ãû©ïêÌrÐÎ|qtÞK¾ÝmÛÙ\cØ’˜üN=‡ @è¾)±y]b·6ÍëþæR÷¾Æ^íDë8JŠ ˆ eœÓÿt¬•ƒ{˜±f•ÇÅ*(ãùE'zFªíx§}èÓF6ùHíîýÅTüù‡Z˜ÆâåmÝ-_UÝáò‡Yeï=)ð餆öÞGÂ)SwÉž¢,þÌÀ 5‰U}ª` Ý9w*Á»yª’óñTËœÏG}N(¦ÙŠCåΖ9¥…IŸ[€ë´ï¼nÊ™IIYꋺ–,‡§5º¢ULb#ÚZ"²¶G÷›–ñ²~‚2%Œ8%Ž(›Ý˱ž£Âo«”c¯UÍ ålû¦J1†Ò’¯±Š¼«`Ûƒ„åmm0,]¶|ïÚ;ûöYÅÕì.øªô+[”Æ…QÄ?¼­MfCÑWÖü|ý¶Φ-—]‡†ž¬óÈóx[õ†B0Sû_îyêdüXT?Š¿;”2üU'<ØPíw‡Òûð.¼\öËùŸS±ªkë:Ù¾˜ü?{Š_¾endstream endobj 282 0 obj << /Filter /FlateDecode /Length 5744 >> stream xœí]Ý\·uO^FÑ<ä¡ð˼ånã¹åá7QH+$A ·ˆÜ5‚Bj‰$K£îjã‘e½äoï9$ï’—÷cfg×¶°ffyùqx¾Ï¼ß®X +FÿÅ_Ü\°Õë‹o/ÀÿºŠÿ¼¸YýÛÕÅ?}is°ºúæ"<+#ZÀ¯Œ-sjuusÑèË«·ø€béZ·\8‹]½¼xÖüñ’µLIËkî^]®é›«móÒÿE`®Ù¾Hÿ²ßÞ¾Kþ¸»\ £‚i¾Iz»½ ¿ãÇ¿$­7w››8ŽrÒbowÔ»ïA5›´ã—ô3o²ØÃš›Öih²9¦­7×Û]±€ð¸4ÍÍ%×8Þ¼O¸Þo×»ýfÿ*Žnxó›»ÿ»¤Í­ÿdk¾£WØÜ܆‰X!3e_ï.ÿçêß‘òHñ„òëŽôk¡Z«¥¥hÞ†MÊwÕµJkÆ»MÚì/×’Ù–1ÄïÈçXH¸Ö2­ÃÓ8ùÊø¸…~€wÉÆ%ëªõÎy˸Šÿ2²/:7²ç°¡¹ã3 ›ëÛ×—k VQ®yÞÑÿÂLóë*Å´LsÇú»ÚXªåš9›<¿¬-Ö¶ÚqpÝ„¶;šm²iöoòMôT6¢¹ólA­Íí7ñ 5±ë™ˆ\oßU:V„„ŸIB¶ÊfÓ}„\ðvY··Aîù9õÉQ„ºÅy÷Ôˆ ÎáB 'jN°Œ¨ÏšöY‡h®jôÒ(|©`½¾)„ÔÏS5qjškÍMÉfk¡y«ç‰A”t<Œý2aÌíçY¿wµQ@£„l®£HöÈ Kóíû¤»M¯ÇÂ÷]'娆î^õ*©d‘Rûx-V%4ÈV¢®9êfâ?¢÷ËÈÄ2§·6ƈ¸%_×ø÷Ìh׉Ýó&´É”-—=Ÿ#S„&b…œ¶Ák†Ö¡’HãVã‚À7dõ¾ŒàL¬’†ÏšFéÕ¤H‰åÂ’óYÚÖXc]&¿½ºxŠ 9¬^ïhvõíÛï/ÀZìܬ (¤³^Ý fq¦E‚u¿\_üר,H­ g²eW†©Þ ¾Ü×èÉQG ‰¤‘VxVC=UÙ€¥-ê24–ÕÑ‚Y}ÎÑB,Û™ØðÄ)K³¢[ÉûÚb‘^Ü:˜],Ø|­y/¸X4 ¢˜ÌD/¯b —P wØ2fWµ†ÔAº~Û™¤n•U½…øå¾jö†´\§=ol}jkÞòó‰”Ó‚mç‚­‚äZ»äæðl×ÓE [p©Ìj­[­ ®ÃM}‡œµ(Vž¶æŒLiøB¦4ü¾ê,êNt2´µèK@¯LÿË)ºÑp+Tµè}M¨Tû IРΦÊ.¸chÁRå`[2.:åÀR°ÐC¿/møÇ*3 *‰,-Lqƒ!áXœ)€™æ¢0qƒá³Ü€£Ìpªå…ƽˌÀ¬Š:Ìò^*ê éÆt” 9Š>NgÍy´ÊhþȦ⑌xuúY¾¯ð2nÃ"^&f¨¯¾$þÕ$/Ðg%7•X¸ˆ2©îºI…õçµñt+¼~ÈÄzÎRu¤8ÙR1Œ‰¬ –ªëìyãêÛ´È•å~ÍñG%àþfiÙKÖô†Ý³&-ekƆUÖ̺ï8³Ö}¾šj÷^† 2¨Ï«"ìp3暨äý1ÊÔÞ\·.ÓÐÄ’'ò÷¸†ž%?hy<ù-·ç$¿'?«;j¾ëžKÆ_£Îo%>»æ ç‚­gÍÞa§$’E4o’P¯ ãŒÔ¢Ù\cˆš)ÈãÅé—,X¼½ÙfÜ}]hæ³`ûb(êšIN )FjFðf{ â§ÿÑJƒƒ1š(ÇØã|úU8'!F¶’"ÛÑ®9t1nŸÛ÷i¬ëMúÌÛäsúÌ®&ÒF4×ÛoÆbáõG?K&TþûænŸw"†ÕJù\[–ØØ\¿HsYšnSŸ”ÍŸ{Ê|< RÆëú2KBÞui<“¥»²qó”§gXŸ™°ÞV]ýã3Ÿ”Mb°ç’ù¯M–ÚÆÔ%ö1ÃÄ<1òÉý9ÍR¤_¶¸ÛŒ»8§‡¹SŸè‘•}Ís¡ûJÏÈSñf³Ë C¤Z6oâ º :å+ìlóô_¿¼´?ºæ¿«î*ŠÖ.pŠ–ž{øDz‰OT™°¤Êøˆ)áhÐ>Ç)ÿC]ó[é8¿÷ÂÏâ ê*¿è~\åw ûð9µóo ¯®jÎ †ºÞÃY§-89Fÿ2R¢º dªóI~,›”È(¢È‹~Øz£åË#®y}·É¥™{GòÊ HʇJÍA*QÐ;±Ìtj)õ.ñzÂ}gÊà¶O¹ïËÝ›G‘ñEqÏÑÞâ‹øYãîÇqÈrZ£N¹¬uÒpÔé³(G¦™[˜$ûA¸²ó¹ãJÚž9µÑO²õZƒ I¾7NË„šíÉínOÕ/E‰ ÕÜl¼j¥È’ päU%µVßTë¾ØTÊ_*Uã藪Ǘ½øÀu £ Ùlâ|Èuݼ-¨¥Èï´›óýè·æ5´žèþ…œ'‡¬7ïù ,5ð¥:*PàÇCYúvKÞ»³€ÞkP¸Âùºœ'ª!?0|–:)ᆡÚ˵õRÝ|™•Èúça|nz¬6~WsYÓúWÎlÉ4øÊ¬ŒÓóßÐÇ”ôéwfr.9ìxæï¾¦æÜO’Öï?£'}ßÉ6 eÃø(òô¶Æõ¦ƒ§Eònr…«Erƒâh  @(áú"y¶â@(Š™Ÿ{ÓµbeM.<‘¸+b2ˆmh"~‚/%é}Ø=Ú—•¡ßʘ "‹ÈrÌGÝâgÙÙºõb½ö¹¾Y?íˆ,^j¨Éï?b÷UøR É–O³°^†³Â ÜÖç!PÞUnÏ•š¬kz@‘/@]¼—WÓ¥`-§ädæ5öðYe=ˇ`„Ê•ö±~®Lª)c^Äk#ÿ'dÀá#Ô2ú]6ßÝvˆ"¢¦ÄåßdÁðM×7¤ŠcÞ€Û¢ø”âЭò>k¤ãþö°°%#t­é Uü’ üN7ÂÕ„<ˆIU5"ðm+Yu.…Ôƒ4®hž+$ÿ#ê‘R!ùÝ6=‹ýÝöû(€€ÑK¦Ú)çÑIà“ºÆœŒ>BOD)á-€ R¢òÁÔè`O*JCµFJyntûvdqZÚ,÷úÐjöE>eAØ*$„#K¼W¶t­íyytí¨bíU•©ií8Ýó¯=&e˜÷ÂȪ”`ðÆ:.Ì(ÂQËS=äq’–Ôv§` !Y ©«95!} <é³R÷‚—>ëö»>?ÛõãSÅGcÀŽv…k¨xŽUëíÈíàSBéZ}ð·©F±¤Dt|šIæ{Ž›Ÿg¢û]v…Ç'Iýô«‰¯ +˜£¢i£hZÚbÜî¦õÃb|jÚ“„D‹¶ÜÚh¶Ê*ƒ‡«ÙÜ–ÏÞjÖGdWº[ã‹Ñ-ãQ?I3DáH=Ë=…Ötõr ¤Ö™€qà;ÁñþáD7èsÐÆt½3_¬œµ‚uZüÑcŽ>ÂØ,9ZPèâÈæi}ƒ¤‡-'•YÚ ÛsÝê¶¼Çÿæ.šii#`J²»Âö9éšø/EeØïs·tñ, XS.½@l`È.:m4Õ0N»ó@5Ð`^"5Æ@…èÀSP… ŽÔ»%Ì›ê´rRM™²Öhæ„9ÓbyÔœé#ùQŸ3ÙÒöZ‰»‰>ï~9AŸKç='iüºg€…èLT@Ç\!ò?`s°¨_çGNAÒìÞ BÒ/Ë0+”“>;ªpømû‘Àg€£Š›3*K”ß‚øÔÊÓmJ¯é 6Å€›µ)æöÖ¼’{°·"Mû“Kå=>Ú{Rj:2Í¡½QÔQrîýÀôx¸³¢½¹TèM²‡ hoÔÃVÆŒèÞú³ü”,Õ:Ïzp€ä)@8«|À+ÔŠUÀZ²<êö®Æèa–~—:ú»K¥¨´)›ÍuZnÙ03Í ˜>S>Pa>ýÜCýbqàáNP[—àNv±=ØÁs¿>¨@ bÿTpëþؑСÆô»tƒZCì–uçÞ‡u‘…€ƒfG0;å!ô¬˜+yÝàÚß2ªZ¶ö2šî¿˜¼Y‡L_눣𷗱 +Ëb)ýèxó÷'ç‹íë7¡€ã.¸€Î„©Éz_ƒÂ+5–PÅ›wÏÄâ¶oª¡Š9øíôKέòõÃ2§ñ&Žªø*Õ&‚Ñja‡ÄÏTL=2úÚq ÏÛójÕå}Õfa2Æq£FÏcâgÇͳ(ø"óàó•‹Ìs^”™€†£ X §È0ƒ†ÿ¤<±á®?Š2¨$xgÀ‚Kg½é D01Û ÎCÄçé ªÅT3ÿzÇÎïò…ìôܯÄZÑ ¢ñ“²µ¼?÷;*ÎöGÈ„çs·â¨Ç˜G.9_VØàЃÁÏWØøÉ) tœœ÷Eó§KKÅ}&ÉcðÒïñ!ø¨`„æ"ìƒô§ÆÐíÙ݆/¬{ͺ„»íð:¤è¿ÝEèzèø`]ئ0„)`!©eW]EåeßÛßðSñêÖÙCŸgߊ{Ì"nö€šè ú;‚覥í­?õ)Âé¶ÜEÚoozï0(âþ63ïÑG=à;œô÷ÿ ÷C ,B5ÿðä·É,¾ªrö‚ÎÜtÅ9ïuXp®&Ï`å<û¶&ÿ„É=ྯLÒ´`çÜ`á$qŽÕ¼kª•ÊçTbO™J<¡ùŽqàÏè|œèÀŸ²¥°g¹4@?ú>Žj¸ÜµÊ‡n¾5‰–说8%vº†Z"±Ó?¦È¹‡©³Ãí·ƒIÎíØ|ä|8-ð©DÎSró0‘ó=èJnRäxu+Ö€%œ÷˜1Ê Ä2èã0ôu×Î}â~ç£GÙc9uI“MÞt}ð’›ÊNÚR;ãժ׷Ô= ¬]‹² ée’lž±ªEKÕýr‚ÍrÐÃÆ€ôG$½N9ÿöеÇ–Çn’³ò8¨`ž]& yðü¦×Çs »Iι#åv”i/‡ºHRÚ‹®ÿ‘Ѱÿ.+(n®¯?†MPºñ·X2YŇPí“Ú'¥\Ø‹Àx#P™×ý¾O/¼Þ³‰¦É襦@|å·³VÞ¤DÑ‹inãYù¢“¼{×M@Vn>õP³}Æ‘ àý Õ §B«Ë×?R¼·æó¢ìwŒ.oT Ì£GNúûÇ7âz¼#¥g]zS.½F0"û“ßhÔÓ@À¬ÆìwÙ—bU~Zþû}¥ |Øgz™•ÐMš{›¡L@aƼž7 á]_juwì;¾ÀÔÿubêƒÛ[œã߆ڲåD%ýÅ[4B˜èÄ(£‹^__¾pžÅpÊ[ÏpÕÐw*§N¶”¨ê[¹Œóàs´¥¤}^Ö´”m¹G¼ñh¬¨á_kªq:ŠÖ¼ò-øL~¦¼>1pmT^¨a°©Œò“‰îŠ¿œ¢»À­›=ñr—qÝÏÍ鮨ìoº+Ñ]éÆt—†¥ºë~—Íœt侕O^Õ7œyuš"üu Y·6çxÞ/°¤S¨aΜž]äõüíº›ã®»©¡¯ÑÜpË¿£ Bwó9K ÜÌ!Øî¹C°º¿§~Ö¿×DÐE`·Zňp-q<ÇEO^Æ01CKä­ªJ›t ÙIèDÄ:múu5=$)O²ðM»…‰@åi£ÉžžNf²»¦OjÓÉ.d 7AZð!ê‡Ñ÷œÞ•¡õð¼½aÅFÝí­{+­utði´üºÂh1æ/Ò[Ýmšƒqòdf_è ¿!*çÉB—×"o¯œõ#´8ÝzªxßOñè𼤽1¤‡A-»ÐÖse§äF^ šPqS_Ç;%)9¸À’߉õh ]GMœùa†!•S!#l§ÔªWîŠ4çY{¯Ew2 “n˜L¯(®Ê‡ðï‚â>Á lÇÑÜx$LÚ´v“©A_[»ˆïn¬ð Ê« hΦ¯=JO“†6“|—Ü*ÂË”ËSÝÈrÈlÂokçOËÛÚE¸ÄÙßÖNÝ »øÒe-Übøq¸ÊãYœX˜ð¦ûhGn‰V•›¡=5˜YƦ"±Þö.™ä¤ ù)Å”qü\¤pÆ mU®`õ”°”~¬ÞVŽQ'7³’å²—?øàæéÅÿ!ÀLzendstream endobj 283 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 251 >> stream xœðÿLMMathSymbols10-Bold‹wøìùS‹ ‹ ®÷_ÎËÈC$ƒ÷¬øùwâø¹âŸ÷÷Ô÷øØ÷<—Œ…†Y‡VYvsljF‹û>à÷Ô§òÊÙ¯¶»°é‹¬‹^qygr^ˆ†ˆ‡‹†…„œ¨Ä¨¬ Œ¿Þ‹¼ËY‘f8ûm"û û #^û'‹*û'ä.÷÷@÷:÷2©•³ù§²¡È È  W/ ¯”˜Œ¡ŒŒ‘¥Ÿ ÎÝd•endstream endobj 284 0 obj << /Filter /FlateDecode /Length 6813 >> stream xœå=K“7z[IÕ&ŸrH­³5—Ô6c³Óx›ò!uìÔºïj7‡QREkämŽ(“”lù×çû> ÑÍîd9)Ô$Ñx|øÞ¯ùî²kÙe‡ÿÂÿOn/ºË›‹ï.}{þ{r{ùÏ.þá ¿i]çØå£¯/ü+ì’kÖvÆ\'ÚΩËG·W͛÷«µð3Ϳ잮Ö]Û)ˬ¶ÍmöéùŠ[øàTs:®þûÑ¿ÃBÌ¥ qݵÒYXìÑõEcV¾Á!æ’±Ö)ÅqÈZJÓZ#/×BµVK‹C¯šßý@ I§8ÓÍæöîCÙ:§ýÛÕZ:ÏÍ£ìþ?lžWôBÇk¾ÆgÕu‚óf¸Ýœ¶{ÿ»b¼ºWøUØÓï/ýýUóéÊr˜ØÁë«5‡½Á¼Í“pz#µh6/iBi9Œ:nv~˜s²Ù>§_„a [ñ£ôœ€9šCö)}åI ä§ay€Âódªë°œÒͳäÕì~6»Ó3PÓ,ÿ)[bŸ.¾¿Ý>é—,^zµR0•µ8³?¼r?!x“)ŽÃ AÖlOa°åíŸ5|­šý×ÉøSUqË/ÓIqŒs–q»‚G—k¼øµR”ßõ·ÖœöaBËŠcß®¸iIš¯’7ÃíÐ/A±½A]s­aGçoRã¤ð_`ˆL´p·¶GÀëä²·¿Ê?Ô¨Èam`N5éî6§MÿƒmŽûmORÌòÞ ¤GÓœ›ì¦ÓkBÊhôT`%M rHoŽaEF»Œnâ;r´è¶Ä·øG$ãÍyº¯ŽŠ’VÀLxøÀx£—ç.æ±Í‡É˜Wˆ:Κd!ÙóYp„¬y ¢ùø:ŸZ&àõÇ#Jn:éH¬N4ŸnǘP‚ØÍ÷t¼NjÜ‹PÄåšìbaѵÀ0¹mNÙý÷?ÀÍìžaÊÍð8|ÚˆÄõ›ï'9ѡߙ6#Ìðß«9ÔÊæ»û“2ã~›3öwHnس|`õ ËàfTOϼxrîîÍt4B·ÜJheɦæ/ý8_ÉT²5À@ˆ%7aF–ä’õ"ñF¨l[p®Ž‹0ä›°œÌ‡tÜi†üPÛ‘i™uöC®šÇ+YçÅØ'øˆô,š.Èí|€¹Âu½õ‚ ˆmW*e¨WöÃ>_$Ãñb`ˆÐp ÐúýúŒ$†bt­Íö²]`ÀzóŒàªáºO_'Jãþð½—¡H6À©ýÒ í -]®ãˆÈéwéPkœ¢TÎNQ8ÄT¶†jc}-ªa.ÚåI ²„:*p,‰Ëå¢Î«Ž‹œ^ @% Švo:€h·ÂÐÍüqŠŠŸ Æ Ì Î„@õ×Zž“ýǨ"àmðœ iË0Ò¼vÍkÿ%®˜‘ôªç&¯R•`WLSusB† º•2“ arvÌkÏöÒ);ë镃ب‰nN=Çÿu]ü¨³ÜÞµ¢³¼ßÁ÷[´•hãp»Ný]‘u5[ `ûa¢½ÝË pn Uâ~Ê^>x…p-á•Õ… |J°ÇªPÚÔB¹¨D8“»ΪeŠç`qjH vգуvµ»-c@—éÀþVÎ)ÿX×µ¬´*pÇSY8“§¬³¸3&¤A/kÛP­ìª*ÉÀÇ«:®ÙVªÐéÌ(Å:ÑÛ ~ÃÁfPH–k¡5IàÍÑ?£ÙœJp´áC¢yvsMù´Yg‚a³{}Ü"ËQ­Ö<*ÕqœF»;AÚÀ>5ÅQÄ Ú+ü¸ØS»ýMx¹ÎQ G!`(8J|k{¬âýxXkœ ô‚Üœ4кŠ—ƒJþÝ"WTMkyŽ¿¨jÎ Ñož¤8k!IE‹ã“ TV*êϼ6 ‘bnm6;Éoë§MÞöʾÓñD"C¦Û âFÈtÓ¥Bï­²dàUCÎM˜Yâ>·â>¦(· (UÏIEŽž Ðv"Òx!T«­˜±FµˬQÞ‰3GÅ`9-·¿òuÀþrѨ½ƾfHÒ`<üº.ºX æyj½rƒÊ ¯þ‰§n@àûÈ|4õ}‚í ×jW’ùœÊPNÑ@|ÛF¯Õf茫èg|çŒÞ~3$š8†@x•ˆ[ˆ±،޵›Ã&Õ}¶¥oy=ȹS˜ÉšÞ÷K#¼v#mËD©Ý”š· }“~»ÉÌãÞßC¿Õ0@ÁY-·3†·W¡°R s‹fÖ+‘‚9¯ýæþÔÞX‘Öä*Kæ©;Ñ9Éå*ÀœBpᔺîŒ";§Ñ—ÛE›ž)yãª0IŽzÌfŽ÷*÷{ã×YàæøÊŠ›ÀŠOX™e}S·ZëM–;2 5 ÖC ò€ŽEßÝä ÏÏÍ1çÕg.(œ‘ÉéëžöÆ*'ñ1ˬ@®À/p\Ï—€dÔ"mFäÈ$w÷%rîPý×Hè5L1pb# ó¶4_ ÜN"µ_j R›ÑÎXýfæÔ=Äê¼/y Ê ¡@¬Î£ì,ÏIõ*¯s F‘¹GžkXƒ7ÛùÉ„!äíÄïŽQ8+÷¬:ô=òä×M '‡¾eg<9¤f™tòÆÂ³Ks“™sÞÏD^¿Ü‹œ ”ÞIŒs•…37™Sõ†`éà9úoÞ+=«÷Äý )c¥ :f‡~ ÂQ¸–`‡pà ëàø=£´Ô ŠÞ|›Ñ\ÏÅ„3(h Á”AÁ)áÿJxkdO¤á­eö„‹î¾3(ô»à|‰ëèñ=h¥âÃ{“m¾ÊÀÀY{]€±LûÛ+D‰Ê-W‚Êìƒt=EN)çÝWç5nå0êóVÉZJÑ2É€%™V¡w;5K0]HY‚X®••!©Æ 8~ÙÁ¯ÏÛ'§˜B©=lÌöpŒ6SFJ˜kl¤PšŽ^`¤ˆVØQFh]:µŒ2ƒép/95hã÷Öù#G}›ž@8t“=ˆ™”Pè=e»|S˜ý„vÒχ\íý¸çzl¨7óSJ¶Ó÷0ÔºÎT 5©”ÜÏP£×š4Ô\«0kôŒ¡šGD¢»Ùi…ºÑ&ía¯£šn…–ìÁUšYqÖÕ–Âêl ÕÎÿ?d8èH}b—$"û¨´w?žìÚÈüß®w<²ö3W§™¾JËÞGÜ]åÝüó˜,Â8±¤¢ŽI i×!㩘bÑYçÂH î3NÒòì2f²õü:·|˜>Ë¢«Wƒ2V}E{zäi†t˜ìÅÔÓýMˮ䗆d¸QÇÌãZ®–>¢n(m”ÇF?ØJjª®'WÍ¥¦Ò:jÖ|ÇcN†ƒ›sÁŠŸõ>ŸœJÙúÌñ ŠíD¡¬e1á^¨P˜Þ0FÙ¹àh:ð­ûÀcH{)8¸”äÍø¨îÚ±“q`´8ø›ƒã!ãݦê>*MS‡Í a†„ÛJ²ž°œ ^|Ã׬¬…E—¼8FË<çvxÓhé][8V¿K¹Ñ>2@ÏÕ Zç¬î¶¶ÓІÞ]¢a£‚޹Bšùd¥O)­³3]žì38 3>“8´®tc‰CÕ"W³Q»—#Y4$ÑuŠæØ'C£+|vCÌejnq{ÃÅc©X^:WÒQ­Yê´Mw”&sææC‘‚ÛÏd{ ~2K¤À/Þbe‰Éäõ=œ6Û¤&žš×+LiAß&9¸5Å€ÿ)¬Q,rÌP •qEa•Yz×&KÕ¥z=æï†ÐÏZ`2…?ì€*™.³»o‚½”YN~êà„ê,Õ—•gñc|nÁÝ Ù—L^æRwe6w’Ü¡Z’eQ‚%‰•>û>{Ë'A´ßcüÛ·2gœ¾'Ä£× =›>ŸNø¢ ‚¹àä´üjpeo¼B¤€1|{sØOáØu˜HªævhµÛ†œjÀÖ×aEJïÍPàØÿRKT¤}™æÕöD$%|üöxˆ#ÍåótºÉ ¤úiøø®q<è³Û"HƒW——Ëá…í¾bŠ·X»‘±îÃ+¤¨lÂx y:ûmЧÂuðC­˜.œèèßAwò‚¥æHZ-$ân![~ºÔ#ÇèÌòìºq†'n0·J ž“D°dÅs¹¿¶Š÷¸]Qd‡cŒk¿%m|ôS8L¾N2OCÒ¼p¡nÆoJŒRˆðš{þ0&"ÐmJm7=êU$†§ifè.qr ¢»}f¿dËm¯\ÏÄ킊N,ÖÛzb!r;£7ô|÷ß÷»W±¶'_¦íË´³lŽ VÇÊÓ?¯(¢ p¤Ìß'OûÊk”××!u™Q „@ý³»ž^­°ºD‚ا-Ó p> À$‚ÛßúJìz­8r_]-¿>îµ¹Â{v¤™‡Ps¦q‚džõl˜ÖÑ©Y·ÄHûMUî>O2S¹»úT#•;‹`žª^uÛ;d¯M¹ð-gïè̵Ų¦§§ä¾!ì>›W_Èd¹tõt[•R¥aù…½±^˜®Iÿ0M“¦ük”¢î•¢ 7ë -|m;0øp„ŠžJ`T…â‹zŠÑ»,¢(¯+¼™¸Z3 )L–S²#/K ¯GÝŒ/'IêBbê~EÙÈHhý´%Å$;*1¨Îì–Kc#0/1¾Õ(‘Ó Þ{—ÿ\£DFTÔù¤fA2Žy>99g~¤ffMÍ¿\äÙk…E5ÀrÀxúM…+8²Ê9†ùa¾;º,§™C_0ËÂÀ…ÌÁX—1ƒý4hÿÆŠ‡ÿ ÕYؘµ–"ëdèUóKº`©AÑ©Þf×&KN]²Õ¹‹˜„>N¿ú#7Íú~§Ðg ¦†øQ< i šçƒ®ò ūЊUí<…ao.û“Ú±í®ÐÇ«¾£NµZö¾´ë¹…ÀºXô9“‹÷gÇr ³™Ê¥Ös˜VYÎ_MDɺ$!l—©pA_7…±¾ëkŒbî~òO`ÑY·‹çbäX×àV;q6öPz9ÍÞ-ræŽ;xŽÚ3Õ_Ö‡ bREœøq•ó†ìH ½æœ#?áT÷çÁêDÇ):»BÖõë°Ý.¸ŸpÀ»ýÍöÔ¯0•ÞャþX苵Ô$«øßÞnw›ÃnðÙÆ+*ý`d+pJx/™ÜL(„Så~Ñs‚zxÐBèƒô=8Ùócäà¡h=Rˆ–# áTGÏÏxæ(„YàÔ22;PF¨·@^½¶S ²4`aZ7ãp´̲Ü%ç+âö•˜ÁOy[sÈÉä¡÷DpüÇÂñÛó„Cƒ¬vvþ‡aa‚ÇQPmÏç‚=›º¦Ÿµ˜Ë’¯Ñ´7«w$}þ|å /€JŸÞô… „ º©À|¶ùqs¸>†/$’‰WzUT­º¸„ƒ/Ÿ?ñmýKÊd3ÂÁ£Ãë) Ô‚vƒ_DW'9ØAÑ"j=Ÿ?{@·9er ÞÔ}É´Ü{4hlz™ù^èÂñi;Šƒ*C<ÃKµÖ›Ò•(ˆ3£e³MF©À·Ç” 쇉¨éèÇ«!Çå1Äùi{€Ì;¶_M¡ÒÆ/- šºÁ.44:€ÀQ(ÍèQì°3¾0ºAêö¥F–&MhVþd³®¯ƒþŒ®³“äM›-Y®Ô«q÷2ùáãLjUo x¢Ê·ñk7Tœ;'F§•#Iòy !쬔ŠdO{EñöuƒçüØLtêžµÐ8¼ŽmúîÓ¥Ñûô•deøð]Š1¤"HÙô^}ÄrQ¼E °šŠ»)_6޼ ,cno¶qS´ úqR¶€¢¥ðærÆâ^ ±~ ¢d+ò¿pìU^d &ËÈÕðmæ‡ÀŒâ:\)!"ÂS•W(‰Ì ð™"ô]%ÁŒnJrG$ØÇ‹÷a@"i}Æà‡þŒûµ»ÅÈá&e /²[ 1ZPŸ&û)û‰|wN‰z(NzøÀÓ[Èqñ_Gä’QOÃ90†vÌ p2V“­Ö·¦”F{·LÖ‡Jz)2Î9Ľ`‹Ã8]ñç¢aÏÍÛÍnæî¨ œŠÝi§ç|Zöw&FòåãÕ(ƒ¤Ö´Ç§Jeáy¬fWÛ íÏK¿¥«ø-g3ü0Óã>YŠß'U?›h³n7Õ ,PNÄàúš÷k]5'rCùVpÔztÉܵ…¤„¦Âoo( Ö’Îørð—³v=‰´Yà ÔÎî|²d7 ¬_ÐUòͭnµ;@½ÍÒs>!wE¸ÜxJ»Môú¡oqÙ¹1kKKóÔ;¤ÖjÓˆ6}Ñ]2á:£Œ«XDù™`/´0:õê;TpÉýšÛoê~TØzÃÒVZ?q¤E/q§ú\MoË똺š»úÖ€Ó`1lCÄmþC= E‡*fÔJ)žqiøêÊþ“ãçKÌI°èqo6^™>¾n%ýe2á—•MÙVsòå.»F ¥×½‡Õöj†Ä‚ÝEµ&×/' n» énM5zÚw›N"ž¥éÛ¼ "UFƒ”w kÔRc)‡ñ¼w$ Ô94ж‰QŸÉïƒsæ=%¹1¤õ^ ã“è_ AzêÇ|ƒ]òbŽ›qÐë¡+ìWQÿ{=ÑMK¶J÷j˜ÍT#öèóY0ƒf¾Œ.ixÒ÷7·¦ùbŸërûØß!ëÙ™˜!å+«€ÏË%D(ÿPÀ\tQÿñýv· Ž 7™‰ò<'µÄví­O‘b2‹~žúÉLá>Ʊ OçoMè[LQϼs…E‘Cé£8˜b± ïƒúíI¶o–œÎÔÅð]¦ƒ·öc¸x"ûKY»ØÔâDÿ°íDyxã{så9©ÒJ‰µ†ìŸ<”—IæÉ©tSø’åwtÞÓ†d¡êlƒ%l²”¿ì/KŒÒKq¸î‰æè,ÁÄê ›ð:FCë7Ì[;ÃÖo¤°‰%.W3aÚ³ñ­U¼S%QZoc*êY]¾†e³m2 £†,ÓŒ4ÚlÞ=k\+ ÷ìﳑäõ%¼ãt#ßļouMX¶w¬jrûCsÖÙ{š‚d³uTÆ{r&ƒ ecì1V™$Ù8užPI™ñ§Ê€±µ90j(šª­¯fÙ¨VD³é³ªíR‰ñ!Rò3H‘ _ÒQ9þ9é펩zMå 9/W¦“oAa}ìŽÉFÃÀ»”µg²ŒÕÚì ¯aÞZ2IUfYŒú³Š›‚0 œ¹§^.ÿëâ9ÝßxôdÙŸêDæ°yÑψ_Í£ÈOÀFæùdÕT0¸}7Ù^àÃO¸ö‚vXO+Ä„‰FèEDbBΆã~Q!&üÛOsüëê Ô’1¹N'»?˜]á:‡ÙþT厮%]u‚p‰ ÅÝøÁ`¾M†ð^ˆõ9Åwº‰â; ÝqYÝ;Sð’D#m͇قW†S›ÈØS©¬Nm•ÑÃÙÞܘƒ-ê¸/+˜ÒmSÔ³ˆ5žÑ÷¢_{Š9–'šbŽè ›cŽØQvs,d=•d}yñ¿Ýs¯óendstream endobj 285 0 obj << /Filter /FlateDecode /Length 22642 >> stream xœí½QæÈ•¦w_ðßÙÒW“åú†d0H†íYÀ¯gW˜l©½FººUšª®žªji5¿Þ<ï9ç='¿/+SÝÒ`c éÊ'ƒqÈ O|"2øÏwÓe¾›Æÿá¿¿yÿbºûöÅ?¿˜Oz‡ÿüæýÝϾzñ7¿¨ƒ\ÚÔæ»¯¾y!›ÌwË6_¦}¿Û[¹L­Þ}õþůîÿãëÿôòU)Íûýß½{óòÕt™ê1Ûqÿ>üôÝËåè?´zÿùÓËÿüÕÏ{ ¹q e›.k;z°¯¾~qß^~õ»ÿî«ÿw/·Ìwß~»;ëå8îÖ©—£Þ•zôÀ«ý÷ã›»ÿt÷]ßão_ì—mÚŽõîý§Ÿ÷ÿý®ÿïïŸPÁ‹Ÿ½è!{¨uß/ûq·MÓviÛÝqôÆëû9שiœ¾ëËÒc}¡ì‹o^”˾í=î|Ot›e^.ûÝûK߇± ï^üÒˬÇ>~E…@B©½Ÿ Ò¸—Ú§R/eJ?+såB g©mÞ/G±£}od¯s¯ ñŽÁ.Â¥–~Õ\ÚJ¥”„RË`Kp):ãv>öÚ¯(nÐnem—~¶¨H(µ-ëeá6QJýºª!"Hhßy_Æ1Rû‚„Rëº_®KÉYªŽÖäæÎÁ>ÐÆ…@B©6ÚræR á̃q]JB©2÷=]¸—êy³—Þ­Ûùÿ—õîoûoG=×eºÔ»}™·qÙ¼ \æ5’^é Ër)UÈqY{'µLuè e¾Ì'™.E¶êÝÕ‹l©§KÐ.s EÖù¼Ä™¬ýÂV}×ç-–i#ÒÜV¹žæZ—‰A=#ÍG»¬RK•d¢2£cŒõn%GÚêeo‘ãRg²÷–X"é-‘ÈvYc[ì-Ç:æó"¢íÝêˆEûÜ;¨¹Å2 ±Œ´Þ‰ÔÑÍp¬¶ŽšH¿¶.ëÁ[mSoÐÌÛ(½Ä2Ç‹Êô#±æÞõ7©y.g,&Û‹I“Xv¾z‡}9æPsïêËìç•Kõ,í¼r‰”EbiWÐI•XÛ>ÎÿIv‰Õ;öÖN²N‹ˆd mµJ–0é­I•,¡zj9»ë~!–;É™&ý¶ÖX@»,s(Ò7?CY%T߉*`—HzSì¡Þ]²ÄJô^{œ»~¬“Tº#GJ¯\Šô{ä“*ˆg ~2&‰Üæ3’—èO;)R뇖ˆdˆW³O’!^fŸ!v û$bG¹O’ fÉÚ¦w¢ñ˜´C'2ºÍDŠDòý[ÎÎ8#Çêýæ’òÃvpô› ;<öè7[$kŽ4ºüD"g"5Ǫò€AGµ!;z Ô"¤È%;nK²Õ†ì rH,'£çz¿Ù¸qŽ)B¤7EáSs,H/3ºÍ=–ÙÏHÚ%\¶Gï4k¬·wš)RAŠØi8V¤MÛ›USÄ RÄIï4—xœ£ÓŒG5zÂkôš[hÀ-'É1zÍDr’½ßl‘ì9IŽÑsÖPÏè:CG4^Wj"H"5Ç:Ž˜ûÇè:#@ŠxìÑu†=RÄHëWgK)bmÚúµª¾3ÄjÒºT‰E9âdÉ·‘¶ Gô°Zï;[È£ç 7´Ö{Î3‘í²%Ò$“Þwž‘ìžÜV¤‘]b‘qлÎ-¤‘Þ‘Œž3Ö;zΟZï9ßë[ï8·ö9Gêýæ‰Ê A¨ ÄÉ!‚!‚ñýëý¦•‘Þon‰TÄr"¯5FúC$„H/)þ¬Ö „ʈ…=쯶È"½5*µF'›ÄÒ« “&±œô®óŒEd½l‰ E4a;iK/íe*)E–á–Dö˜ŽËÔkÜæP¦wžK¬¹§BŠ5:ÏXóè<)1;A–øQTd‰“ YB¤·F"È"½5Ž@ú¹”X’ÆËp%‚=dþ2õžs‹9â ŽÂaɽß,á R„È&qˆ4 ddÜÕ["ëe‹`‘æ©¥Hãž´%‚±Ö÷~"Kºƒ,£¯^©Ë.¤yA‚8)çK§÷ô‰E¤·E"H'ë™` AˆôÆH ¢wêe=çI•XDÄDÙÝ|éïš‹H‘XD DzkD²#Aˆ¹h‰ Aˆ´«wž)VïùÇUÙ%“½gò ëvÙ«%=f"’DFŸÙB=‡d“ít†L‰ådt›‰‰Ed˱ZC¬3·:)Ó‚XN$;˜ìC/"ÙAdôœ‰Hv¨`7êÆ} Éôwñþÿû“ËcÔ U‚ú‹JPG*A].©íï’—UHPbw¼HPŠ ÊD$(m ÊD$¨o J æH*A@‚2àñC€e"”$( WHP&"A©ý A© $(+ÏÂÕ•'$¨ËT• NT‚% jâÛ$hïªQb KÊ;r æÆÕR5p T (“-‡‚%J±à@™ìÉÞ«õUÊD,mJ”‰ŽX=p ä‘Õº·UJ¯°D¶(ðͺÈUJo°D A]«õš÷4V ”²Ä®nÓ D%[5¨Ç†õ"Р^‹jP*ÇC¤¥H¦A­Ó Dò@yPÛ?¡^³ŠP"{Ž¥"Ôz"¡T–‡ÊÀòØ‹¥‰P{e5Je`B­w2êDU(¨P"úk5« õ2ªB‰@…úª u¢*”HIöÞT¨ÝmL…šáUê@‡ l¡DtœÀˆŠP×¹*B‰ìIˆ˜u¢"Ô·ji¬ÀD¨y)õ  x¬!LƒZ Ó .À A ˆ%€! j¡Õ‚zµ ^D$¨ï $¨• D`xüˆT‚:Q JéA¤&ïbÔIÍŽÇ$¨×S³ã1 êdËŽÇ$(‘ìxL‚z• –Ò&A‰@‚Z÷a”ÒÃ: “ ^JP/£”Ä·R J âJ5($ˆ/Õ ViP‹n”HMÇeÔÉ’o#¦A‰ÀƒAŽXš %ÇC¯°ÖÝ› u¢&Ôc© ¥2p3 ”HMó[ÝZ=ê@}®¨:PßJ(8PßJ(8PßʨE¿í@Ý®ª%²gߪ”(8Pò¤â@):(y¥£¨iº´:P*ÊD^_™ìib¶:P"·¨»Ë=§‰9PßȨ—©Ù¶>Ýà!ênΨFs N0”Ì©:P÷›Ïp nNÕä±#7J$O–6JD“ļ-(“–R¨_;ê@ý¢TÊ[µ”ê@™Ô”ê@‰¨õ£€å2¸•PH'*A½UÕ‚Ùr¬½åXjA½Ì¡Yâe`A©LKþÞ,¨_ ° ðþjÕ¨õPêA½QÕƒúéRJeăRñ \BÒ„"©õ½YòߨeršPí†Ì„z½jB‰ìiàNM(í1L(I&9IÔ„ÒþÀ„2ã¡­àxìtš %ÇCއL¨L5¡^FM(‘=ÇRê{¨&”ÜhͱԄ:yÄ„:¹iBÉi„YÓ_/˜ %Ò’u}ž µ­Ì„:Qê&Ô£« u¢&ÔÜ›J$ ˜¥"-ŽL¨õ5˜¥Ù¡D’ã¹-BIrêp5ŠPoP¡DZ–“*B‰ IˆüÄSBiºçc=6%”ÈMJ"T/J¡šZ.B¨Õ4vJI¢‰í"Ô‰ŠPßJM(‘=*|W¡DJL~W¡~¤ªB½ŒªP¯GU(‘-ÇRê5« õ2êBý(¶4\à.Ô \¨ußæBí6à.Ô·Rê±Ô…ð!r„± s¡^B](‘-GRjGn2Ôʨ %°ÇH&C¨ %RãmËe¨Ç^Ò šËP"5¸¸ u¢:Ôc©%íCYbMjB”H΢D%NT‰úª%óã[©µëÝœ(‘œ%fE¨%-JYBDµ¨©jÓ¢N`~H”ÞÔ¢.eU‹I3§ÍŠštœÒÌis¢T‰š¹4%êv3 ¸urS‰º½eDH‚ØÏ§õŸòœiÓ¡DNT‡)I»®i‹#ÇQê.Qu(‘§2vÈië@gGÆA‚9Í(G?$Gœc Eˆlù¨dì€ÆYc$; ¥H;9BIâdA–)éÊÅØA GŽ%c”KÆÉY‚±ƒ@4KôÚÁØA(“³cÔKÆ˜ÈØA EbÙu±ƒ@α&ûœ2c¡ ²„H˱dì 5Ç’±Žu Kœ4d d ‘=e$F9‡ÉY‚ñ&sJŒ’ÓãL–œ&A$åÉC?æ$Á B 9I0ˆHIqÖ´EN "’ƒäYâõ‰AÊ "0‘A„@4;œœƒ ;ôµVüÕWG9G9‡˜È8‚{ HdC,' ±”`$ÁˆŽ$r:³@$;ˆÈHB ’L×a®óÁªМ§ÕaËénO-§û?µœ^F-'±œ®ÿ`9 ÀrºýSËéN-§é?•œ´QK 9 @rúÎ="9Ü”œDTrºÀ„ät ÇéÇ¤Ž“$'Lµœ¦=apH{Brz8Nª8}›ç(N—xª8]Ç©â$ÅéZO§ëAUœD¶K'ÉÊÛŠÓ §×¬ŠÓ‰:N"pœDà8IiÞ”œÞb*9‰@rúV*9‰@r‘ ñÂä¤"œ ’“ˈä$ç ÉI'G$'?‘œ\)âE 9™ EˆÔI$'”HN"9™ˆÅ¡#h9CTrúV&9‰ Eh«–²Q%'“Š!mc•œD 9i+HN&¢rx«œ$*9IÌBr2Éɤ¥„TÉÉ’Ó¯JN"œNTr©9,','•QËé¢X5'¨'ê9‰@åè$¢C&“Õtº‚VÓIª“¶Ò¡«YU'‘4`®Ó*6×i™ë´Pæ:‰@æ8ìôŠ!; èX€ØN'K 0Ýé‘à; ´I}§“úNßH}§|ófcÌwï$ß©’Ät§ËcÕD`u|£U‹ÉNßa•D!D ;½)TvzS@vúÕ¯²“ˆÊN»pTvrñ:žW*;‰@vzϨ²“‰ÈNïUv:QÙ齕ÚN&âu˜4IJz`;™TÄÒýQÝIº“¶‚îô#5ßi-f¾Ó „§·¡OªÊ“I˱ <™¬9–:O"g–PpqžT œ'9¤'XOÚ Ú“I½´N©CíñIç ⓉäˆßÔ|ùd"YbO•*> ˆÕqïI@œí ħÅ1óieÌ|rd*6ñiÏß&>™ˆøôà=¹ˆ¼°Ú+ƒyO&bt˜ ?ˆˆÑ!ïÉD¼'E‡÷$ïÉD¼§´'5´'hO»LL{2AzÐVHovhO&¢=™HzPÍ[~eUíé/ê=™ˆÐ¡z =i¡=):´'o… ±à¢=)´'ŸÃ¤á¨V›þ<#’“5F‚öô}QíIE =}oT{2AŠ8öd‚!"Ú“ rÄT†jO&±œlI€˜ö4µbÚSo…®=‰¨ötú íi:Ü´§Ž”˜õtééÎÓ”§5žJRõ&<½|§Ž ¹ïÄ€™ëNtÝIºÓ‰êN"Ð:ªëºÓʘî$ÝIº“t§èNÐzTf;@vP×éªÓ˜Nk;1ô#L'˜N"0V©ŠNâ9ýç-™jNkVÓœD 9‰@sz=ª9lKüšÓvD-§•œ¾JN"œD N 9™ ˆˆäôàpœ 8 2°!ŽdƒÕ›r2¨Ýd’“Aí¦W¹Ià®.q{ çƒ ›Nž>a“¶Ê¤©—P™DÖlÕe¹á2MéÙ|MŽª2]ò©Ê$R’Ñ0•i«ÉtoyKdz%7'kúÞ©ÇôCT‘Ie`iˆÜ2™^DM&¹M5™:?ñö\MR›5Í 5‘IJ"Óm”ŠL’™nÂæìhLdY“7Q‘I“ !2‰@dÒ´FˆL.#"“Ê@d2‘d iŒ™Lx›n‘I“!2ý^gkhqÒ›MÖ´6Y“&kÚL›¬é“5u®ŠÎÕôŸ1UӷЩšD0U“HÍq0UÓ¦jZ ©é ÍD³yš>COçiú©ée–œ%6SÓ·Ò™šT†ÆËØLMÓˆ6SÓÉ–æ‡ùLM—:SÓÉMeI¤¥9Æ®,Üž©iel¦¦“’õ¨ZKo Õ–¾?ê-‰@\úV*.‰ÀÕ8¹$É«ê’Êì)ûM]:Quéû£ê’Ô¥S—Dt¦¦Íç{ÆLM›\jê’È–¦N›¼4Ókö’ô¥>º¹¿4 þÒTéDý¥$‰˜ê˜U`úž¬[Øy5˜NÔ`A~A~xµj0½Ì‰šT`ÏÔazµê0íxTa:H6ߦƒ’4»ùK"˜NÔ`Â$‡I$+}³˜DD 1u—Íbzµ˜vªMcÚFª1d­‡¥ô+q›¦Íoè²×zx¬àÕUdƒÞÞK<”q"ú[€üÉü(°ö¬ŸV.âEö~‹-‹€X|ÌÌKÐ×ͤ@™'YÖÁJ€œE†Éë ª‡÷ÞÈ^ç*:±—Ú{>õëJ„Rm°Æ¥@¸T™Ë©ß¼”.åË: õûÕ½††ñ¶*k“¬ˆ.pá¦PâEŽÞáÖÄkúPƒÚ*?ZÄO¶" g‘u´påv ­¹•‹ŒÃïÇûõ´qÐÚã1rž¹µAB©Ñ_Î\—.uu ‡¾ë×,³.é“k¿ÿ·°ŠÑhŽ-,¿Ö)-¿öÞu ë·­ýþ¿…UÍÖ1_:’~ÿoG$EÖƒ±u–ÖmòñNšÄòèýþ—_÷5­=3:è¸öÌ:>ɱ¤¯7¬ý©tJdO‹$­mºñV¦ßÁãõk¿ÿ§XýR ë1ÕþX:ñBPã)$¬ûTûK%O¬aa¤Úoþ["kü’mÓï[ZÁ¨ŽU©£³ dO‹¬a…r~’^>¯g%¶´|í]úý‘–dãqáøÚoýqI¦~kŒˆ²‚‘“~ûßî¨ý×ãDSXBªö»R µ-iQ¦ÚR¨~]Æ5êë>¥uãÇPÑ´Ä2ȯ§ç@:¬cJŸ]®ý! ®Q_ûC@Šu´¸n|¨™Ç'QAvÙÇY Ùadë%‘šÖÃï]ýeŸé70Y_÷pŒM5–Avص²õ±¼Ì‚ô Rr¬ â±Æ¿Â…»•œ ýÞ“cÅëxëÝæÈw¯w›ò 'È"»²¯-lb_uØj‰?J†Ð½c  ÷péxz¹‡$ÚF`;ÛƒÉ. â Õ;ÌØrûž-Ûz™"ÈëçÆHÑ”È~ ]á6ºËI‘PÖn½»ÜK,ƒô°ÛÀ-šAzÙ$½y™‘vëÚg¤•AziéFµ^3ÆZjº)î½×L±Ê¸=ó-pŒMa Å}tœ‰ =l Å1^4…[é¾"=|«Þs®s,Ó$–“ÑsÆXuͱF×cUdˆ“Þu¦X2„HoHöIbyûŒ®s­Ú»Î}Žä@,Ûê@š)ËöiBiâ¤Išx¨&iB@žÐx¤‰‘£wœëI•Hv}£ãŒ¤wœkå2G Y¢ysôÞg y3ÆbB£ÛŒ‘d‰×Ó»ª÷š1!²æPx¤¥jFÇɺ¤ä£HS"H'IBIBIBäȱFïtôžK$[ŽÕ{Ï9’}αF÷™’ÄkýgŒ~ Iô o #ÍqwF÷dÞ®‰”jôŸüI¶ñb´†UÇ(ÒœR„È–ŽjŒ"Å ·îóˆdE,'H"-ÇZ$D$zmAŽ(’"þ³dˆÿ\/GøYÓÃbônsŽQלmt›‰HzX/Ðz¯yD€ì ²Çïvw‚ìp²-ñ áË=šZ$û%ô­÷™k‰¤äP£ÏŒ¡FŸÉä°^ª>3‘œcøhÝ@k99ZÇωì9Vk1V™F¯¹D‚ìÐ}îd—O8™‘DÊùÍ&úés´X'Çù" ¾ûCŸ>'‚ô Ò$–“‚ô ²J,ߟ¢÷'íüf mµ"=ˆT¹tõîÙ òÃI•ïþؽ»Œá£™Ÿ :©‹ÊËɆ4!‚4!‚4!"iâ`—4ñýëÝf`ϵËGˆŒ^3æè6cèc¿ÄãnSødMcGásUÔøÝîN$iŒ͉”ȇ± EœÌø0–ðy^c:–1v4'¢)bdô™‰ä™—œ"sÉ)2ÆŽR¬Rs¬‚OcY:ޱ£9–YK޵ž)HKé8γ†š«¦ˆ“_w‚¯þ8ÙðÕ"±œì9Ö>åX{ɱv¤‘C¾Xãä˜ã‡ÖÊ¸ŽŽD¶ëh9V›s¬¶æXmϱZK±– YBYBD²ÄÁ,Ybçf™KüØr'5Gšø±å2†ŽR¤Ñy&"iB ]ÂÙ[Šf‰“ô1SŸF®èàÖSÞ™ÙzÚ›¬YO}T0ééÂN¥'h×|*=‰é]Ò¥§©ÒÛÒÓëQéi;¨Î“|¦:OÛH'yQ}m5¢Î“œ§ïŽ9O÷™?­ó$rKzR‘#­voÒ“Èš"Íé÷žNTzÚþ›ô´–1ééD¥'‘X ¤'ýÒÓN¿IO"%ÇQéiçĤ§oéiïé&=í]Þ¤'HO{7éIdÍ¡Tz:QéIÙá±TzÕq¢Ò“¬Ž}ˆÂ¤§©JOßç–­ŽIOßJ¥'¤‡ÕcÒÓÞ¤'HO·U*=íšôô­TzÕñz–œ&=‰lé ¹&=½f•žDÖdZDzÒ-é#“žÖ\&=‰@z:QééM>hÒ“€HOß•ž~Ì*=‰ÀæxÛmÙæ¨ôô"ž^‹IOô>æ<½ÈOí<ÜtžÜœ'‘’>Ö`ÎÓê1çéD§[+sžNö¤XÜyZsžNjœ3çé¤dcÎÓB§ž SžvÏ6åIÉa©ñt_§ÆÓ‰Ow…5ç†OÚJ§•1ãé¤f ùˆñtãIô¦ñt¢Æ“ˆO'j<´lWÕxºÎ„ñteŽO­Å§“š"™ñ´ãTãi}‡OÈ"P:vw0ãI$½«ºñ´VWãé@§o¤Æ“ÈžC©ñô2j<ý0×ìtÌx:QãéÍ¥ÆÓ%²OÓ~f<ÝfÎÙ®ªñôšÕxyŽñt¿‰$1é¨ÂÓ•LxÁ « M™ñt¢Æ“Œ§×£ÆÓÆLy1åI9BN‡rĺWž& UyRd‰¹G5žn3‘#¾ O;*3žNTyÚFOužTyzª<‰Àåx+@yz(O/¡Ê“”'¤‡UžDDöJ•'Øß?UžvÜj<ý¬©ñ´"*< 5¼ZõNÔwúΨï$²çcRß©Ä}'䆯rߩ׃ûN"ðš-î;ulÚ}§,»ïÔÁh÷DD s¼õD s|+õ¾?ê;¨ïô£PßI$e‡ûN/£¾“døN®¾“rÄK}§|§øNâ;½õT&ljúÎÞ}m²Ãðc¶û|§ßI%à;™ˆïd")26Þ‚ïdrúÎsØw2!ßIµÀw2Ùs$øN"ðT3|'I"ðLÄw޶Þö;òãÍbÔà;‰Àw2‘Ç,õÀwNÛ1î²ä;‰Àw2‘¡šá;™4IJ­à;™Ô ¾“êï¤c‡ï¤öïd"¾“Î|'ñ~=©ïd"¾“|'“±œìˆå¤¥Xê;™ÀwZR¨ï´ÔRßé%Ôwï´®À|§e±ùN"ðD¶˜úê;½^õDà;‰Àw*¹²Ìƒ Oyugái¥&<ÝBÚ4OÓ~6ÍÓIIîçyúÄOæé~óÆóá4OÒ™stƒf<lIãªï4 ºÓl§»`µVDe§QÙéEjŠÕéóÖìNòš[rªf:ÝÎYä¨é$~ßÒw”ÍtºöZ²Ç1ÓéDM'‘X L'#ǹm:]ÜÝ6NjzI5ÓéM§¦“L§›Þ©çDE§ŸNTtz5{0ÑI$«^FE'‘-ÇRÑéõ¨è$’ç>›èôzTtºlRÑiêK=§O÷SÏé“ÕsÁkªo¥ž“ÊèäNŸ¦©“;ÜžÜéž“fj"=¼›Üé$€Èq¢ž“òƒÈžg‘ªçô2µÄ%?h ñœ4MsÎaÔsR™-‡QÏé?}r'm‡ãDE'ˆNšºÇ)Ý&:‰@t©9TËsŸMtºÛSÑI‡¶ÊsŸMtšœÓ-Ã4§ƒtË0Éé Æ±8Sœ¾oª8}OTq©éÅѧuœvêÌqÙ’T1Éimn’“Hžõl’“HÎ “œDrn˜äôzTrÚKšAª¢Ó¤)Kq8~<ê9}OÔsRdˆõœ~„ê9‰Èë©W¬ž“HÉJU=§‡RÑéDE§o¥¦Ók>r‚˜êtÒr‚˜ê$²§d4ÕéšNU§+¸) ¸êtW¦ª“T§k/¨NrZª:½ T§› UL$A¨¨N"PLÖKU'ÉO¨N/£ªÓ˨êô#UÕéeTuêôšUuRQ´Ï[ö8ª:™lÙ@ªê4 ªÓÁÕŠªN mªÓÅæ-ÕÉ:ôºê¤ÆÒ©¾Ní$‚$1bS;‰”I§vhIªºêt¢ªÓÉ3T'‘š.[SNTuz,UDjŽ¥ªÓ‰ªNßjÍ)bª“HNSDÖ¬Uuêt¢ª“HͱTu:QÕI¤äX:µÓÏ©Nít¢S;‰”tåÚÔN"ÏQÖ†?Ju2IYòÕI~ªÓ‰ªN"OWLu:Y³T5Õ BKA¬¥W𔥠n¼½ÄZË–‚°õÖ£ïϼp +R§q1lTD‰)Û–‚ð禼þ^ BÏ—‚¨cå>|ÛL~ R ¡~ R \J~ðRJ¸TZ b]§s j+oÎá&ÂRJ¼Èx& KA(ñÖahp^‹óP [®G‹ìû)<¨/A­ÚrÈ%*2~ ¿ÇË m§jkP B¥@¸Ô£ Ax«è­uƒZÙ#´² F)²~‹o%#¡Ì!+Åx!àè2BÊléc—! å‘0BÈ*±|+#¤åX2JÀed˜ ”Ùs,'d‘5”lI' „2Gü %† )i¹&ŒP5+`"c¬)Ôœ~ßÒw(1VÈé{¸+ན±:åµ”øãp¡a‹#-£„±Ž#clé{—+`rް¦Ïb¬ –CÉX×#ƒ¡Ì.+)y™}JK§a° É_t ƒLd° ’>­‰Á‚@Zú´& ¸,à­d° lÕðiM]0ƒÔøiM- z0ZÀ[ÉhA(#ùAõÈh- £ÀhA ’ L.\=;- sÑ‚@øG:ZÀÕÊhA ’!LÎÑ>-¤ÄÏ ¡†9G Èh‡‘Ñ‚@¶K:-àzÎÑ>)çhA’¼MC$Û_-ä-à­ÎÑ®XF èÃ5-ðïú`°€>ýƒÁú„ |Q},d“P´²ÃÉŒìð­fd•AvAvèç`uÀ€Ë,ȯY† è¸0d²ƒÈiC©Á0d@Ë[bÈ d‘sÈ€N† èlaÈ€Î(† Ù%m¥ bedÈ€ËlH"ç2àzdÈ š’Ct½cÈ€·’!ƒ@6$£Õs´«I–x‘&YB%äbË rºÐ@NÕÃä2`¸Pê¥0d@»‡!ÞH† )ˆdõÈA í C¬9ži™œB”ÉŠ$ñ]–!ƒ@$Ih+2à”!ƒ@$IüÆŒ!&2dH‘XD6‰Eä2 § ÐMCH’P=2dÀD† ©‹È.±<º R$–=jaÈ $‰®¹ˆ’"äË&$AÈhƒ5E™‘¶#+`² ?l£éaGˆ¡&EÒƒ€¤1T²Ã‰ Psc¬ Sƒ"Ùáà-Éa—F è‚Åh—‘Ñ.#£ì—°ê,F (0Z@F 9E(-¤È×qˆHn0Á'¬ ÇhA øäÝv0Zˆä†-Drâëh-¤Èwk´}t´ ß’A«êh7¼Ž‚ÿx=2ZÀe „È¿[coùTŒ0‘Ñ‚@ª|ĉˆä‘:ÅïñèhA 5Ç’Ñ&2ZHɱd´ 3MèTœ£¬—Ø€ûžíø‚¹-¤Ê·ªˆì—xÜM¾å¡[J-i’(ÁhA %F’Ñ‚"Næ9EÂh]€-·'2ZnDötÙb´ |ú‡HE,'b‘Ñ޵jŠ8ÙäÓ D4EŒÈhA kJGŒÒr¬mɱd´ ±ì(d´ ?¿­£ñ3R:ZH‰Ÿ‘ÒÑ‚@ð ½sèhA òy,&{¼kéhŒø½NG ÙÃm £”øQq-$}KG )ñKß- …ÏoëhA kŽõiäöBº 5[O[Ú¬'yÐÛÖÓ§ZO/£ÖÓËq}l“žà<@yzµª<¨òô@ª<‰ÜTž®!Uy’àTåi±Ty:Qåi»¬ÆÓAMßiMn¾ÓÖ 7ßId‹ßÖ4Ýi@m§ƒ5|õ²†o§¹ë\Î¥ðß‘ë *ºN"pË,mî:½ÌY ×I®Ó#«ëÔÏ“¹ëôýU×ém¢®ÓŽªÓ^Ó:îf:‰´´f¼™N«FE§ƒ=­ož“2ÂO3<§]ª9)!Tr’8†ä¤"9!Ôq’Jny @'™Z8N2eê8ݦ™ãt²gÇIõ¨ã¤25ûTuœNÔqº=SÇIeà8‰´d;Ôq2YóqEù¡Ž“á¦ãä2ê8­ 'ÉÔí¤8NªŽ“üå-ÇI•ÞtœTfOƒpœ\™áµìÙި㤭à8™ì)'QÇéÉÉe.“¦¬oTrúV&9]JMyÀ$'0·¥’ÓëQÉéeTrz•œ.Ur:QÉI$˜ä$’‡Lrz™5˜ä$ÒR*ºät’ÓÃ$'‘[’“ÎΦbg’“$'“’.]•œLTrädƒC"4§‰JNÚJ$'Ì5šG•œìAŸ.9Éì™ät…)ǵٜ,ŽJN&Yã˜äôjLrºöTÉéï§¶{œLÖ$WTr2i+.0s’¸ät²§„TÉIejI ©’“É‘cmYä¨äd’EŽINo•œDÖ(CszÃCsRËCsQÍiW©iN"М´•æˆ:%XNÒW°œL’Ã1ËIdNÇ-'$‰‹1µœNÔrA’Ù³}„å$ IBàÉ–ÓŠ¬Éà¸ä$Òb2þ8É黫’ÓwO%'yWu ’“4Îv¾x¿#ÉIljJN"œD DZª*9‰@åÙ³»UËéQ-'$‘=›GµœDnZN3c*9Ýr©äôÙ¤*9‰ AˆÀç8QÉI>‡ˆ8ä´÷{“œD 9}+µœNLsºÃ|†ç$c9g©ž“HÊóœ : ¬I@îYè/ô‘ùœFl>§“’çŽÚ|N'Gž;ªÊÓ£«òô=TåI)âD•§×£Ê“œ'‘–c©õô26ŸÓæXê|NŸQy{>'•Á|N"˜ÏI33õ/œ”4óñ‘ùœ]çsz;ë|N"˜ÏIó9­›ÏieL{Z‹©ö´Óùœ¾Îçôzu>'Ìçô­t>'Ìç$‚ùœÚ6ŸÓ€Íçtrs>§¾àË꥟èqæ·©'ã€øBÙ«k@Ø6˼œË@¬s;ÝÀù‡÷ZfþoT$”Ú{ÛX©—꯸õ\B „2½Ã‘%!¬ÈYj­[of=Ø÷ ú›_•ûe/³ T¹H(utV¸.³Nõtu^H —òå ü\ôŒ[Ck€„6+k“E!¬H(µ-«¬ a¥@B©ñˆ\CDжX’–ÚÖ©¥RØ/\—)Õ[ g5HhÝ:Z<4/H(µvp)Pª6u„s5y-\—.uu¡;;ðNþ¾D)ýbæõ^;Xãa;ÙÒ'K€XÃ'Ko홿ÓÉ?áYú#Dø8a >¬YúDü°f¿vs¤ãÀ'moú#DüöléÏ5‚-~œ°ôk(~œpíO5Ä^§ Õý[û8iòYM'c5þ6M'kú¬æÚŸ!*/ \ÖeJGµögˆc‹eªÄÒs·.‡„²“·öGˆ#|„bí5¤ muÈW5­âþ±!öºÊ‡.uQâN6YyÉ«é9^Ã"pkÖßa3ŒÉ.±|«m’X¶–ÐÚŸ ŽDª¬òäõl‡¬‡äõô'ˆƒ!ì¤È*E¾Ïýþ4‘ËcÜÔæpèÇ*¡¼y¤‘&¡œ´%}UsíG"{¼pë4Å ·öLJ#|C³öLJ>-<$Â*â¥öÍÁŸ4ë$¥HSŠÔ)âÛ,Hk¬º Eˆ E´ùjo}^ͺԲ\–ÖK‹`G­£W¿ð²‰hvØF£p"H?€þ»#†ªH"Ò›{ðÑc†#]f+¾¤km7ºÌðmݺ!9œôóµ„R×Éa}f}føÂr=D^Oï4k¬ù@r8éæQ#)ˆåÉAÉaGºn3d‘mÜüiéK°[Oí%\Ûè6Xf—Xvì[ï6—ðê­w›-| {[DzkDRú%°NÊà D„Àq†Z¦SÒûÍj<Ѳ;½ß¡–þfY$Ôè7÷X¦¡ˆÔ3E¨âz¦—!²!G|ÿ6äɪxôš¡%v¤ˆo´¥¸ ¡Zú i1ö!Ò["$‰f$ IBd•XD$FöÑkn‘,ˆ¥Ê>ºÍË)Ö>—‘°ÕŒ$!"OàL$NFÇ£/HÕ;Îki)ù÷‚$!‚$!’“d½gHã}E’Xjí½/Ûæ¸Õ‘c>2‘’cá)—‰d ‘žâ)Ö&YÂdûˆd ‘Ñ†ÏÆï»ÜIìÊÉ4!²H("UB9r¨ÞÆPMÒ„À–#5¤‰‘cBšØepŒÞsä|ì¤]"èg‰ 'ÉÑûÎ-’%'É1úÎÐ= ’Ä’ö}g$")g,ªgô±æräXëœcÎ3$ ‘&Ÿ½ñ£¨H"«\¸D$NF÷Nè±!IS¬ Iâev$ $ $ ‘C¾&âä@’YåÓ7D¶«ïÙ¶†Vh¬¹­9VÛS¬6¶OYB¤Êpˆ KœÌ“|‡HɱæÓN08r¨eN‡ÕI&ÛŠÉ™&Ê™& $M˜ìéÒm£÷Œõ®9MÚè=S™#…ª3ß­[Õq"oþL4EŒŒž3I&;?n´M¾Dd—ï1Y%ù~‘CòƒÉr~m‡‰äíLï7K$MòƒI9¿¶ÃdËÕ$?Œ¬ÓXöv‰d±ÖS˜T: 4Ä22K~0Ys¬ÑwF²H~0‘¯1©¸hȧµˆ”)Ç*%Ç*[ŽUÚù¹"ëœcõ¾³$¢ â¤åXâ æPuÏ¡¶)‡ÚäûZvit‚ !"â`|>„LÒIÊNR†¬Ó‘2¤“õü “ôc»DЖ§Õó#8LögP"H"5†š§”낊¡æ¹äPó–CÍGÌÅu]f"È"»\³DNŠ|Fˆ ò£ïÅ9¬½Ž•„%–‘uB,'È1« ‘¯l1A~8©È"È""C<\:B­'’ü½kO·“ª=íñÒ´'•öô2ª=I„ŠötÓ¸'¥cÚ“È’L‹iO"О&*L{šQíé.ÚÓd¯ZO·]j=]ªõtk¦Ö“¬§µžîãÔzºSëéeÔzzµž¶>¹YO"ð:N =}ýtÕž¾2»jOÿ(¦jOÿ¸¦zOÿ§zO.#Þ“‰¨"ðžT¼§jT½'xÏÑ /0¡¢v˜ˆ÷½06³CE =½¬'±3n »œ XO*íIûíéÃzÒaÂzõ¤j`=©¹ÄzúF°ž Äzú6j=ý;¨j=ý"PëɤÈguõª€õäGúÖ­ZO&kú(ƒYO[Œ_µ§hOò²jW±iO/¢ÞÓËÀ{ÒÎÀ{ÒΨ÷ôzà=© ¼§gƒzOjPˆO*óIe >¹ŒX.Ór,¨O: UŸ¾Ïª>ýØU}úô­T}9ÒwL}z=ª>‰li ÂÔ§õ^¦>­fSŸD >‰@}:QõIdMÇeêÓ Ô§·¡ªO?˪>™@}Ú‘šú´#5õIe¶ø­[UŸÞq«úô[‚ªO¿µ¨úôÛªO¿«A}úê“,0Ô'UŸ¾Ñ–ÏT}R$¨O/¢êÓ4Ô§‰3UŸLàt|oT}úôŠU}úÞ¨úÔ{µ™Oo,5ŸD#ÖÄf>­Œ™O*©CæÓN§™O"%ÇRóé±Ô|:Qóé[©ùÔ5ñéÞÓ€jO;U¦=­EM{:Qíé[©ö$íI[i´§o¥Ú“ŒŽOÓž^jOßJµ'hOÚJ3Äʨö$‚4{>,ÕžD–Jµ§[aÕžnŽ¡= ¤1íéµ´œ"¦=‰@{ö$"ÚÓ´'5GRíiûgÚ“ÈÁjêOµ§×£ÚÓ·Ríée =™l9´'Õž¾•jO"H"-~íÛµ§OÓžDr’˜ö´ ×´'hOÍG³ž–æf=íaÖÓ:³žD`=ížaÖ“¬'XO¯ÖÓoaf=‰ÀzA’Ø-Õ¬'I¿ªõd"IBD­§Å2ëií£ÖÓî±f=ÀzÒîÀzR(XO&g–ëéÏ j=™H–õ¤½õd"N‡É‘ªÎ¡`=©`=ýôªõ$ëÉBd?â«éN`=™¬9¬§_Yj=™ˆÔ¡C€õd"V‡¬'ÕëÉd˱`=­³žLÖˬ§ÕcÖ“¬'“5Ç‚õ$ëÉßN'‚Q"bu(¬'•õd²åX°žD`=©fXO&’ Lðh½,ÕzRŰžLö|X°žL¤½d‘˜!b=-ÃÍz2A†A†8õd"ÖÓº±žüãi= ÀzZ`ÖÓÞÛÌzÚ»YO&’ ¾¬'‘ü ëIÁz2ëÉäÈ¡`=™¬9¬'ɳ f=™H~ÐV°žD`=™” Ö“‰äÅ‚õd"ùÁD¬§‘+ëJØdO¹Ý“öô—ª=]`>2ÛÓæ­ÙžäA÷éölO"О6ÀjÚÓ‰jO—°Ðžîi[š©cÞÓj1ïi™÷$©CÞÓëQïIÞÓ·RïéD½'¼°z=ê=‰ÀëØqÙtO"˜ÏFÓ=‰ˆ÷ôá5õž>”§Þ“‰xO&âu|S½'“<¥Íæ{úqé|O/£ó=© æ{úQ@|ÒQ@|Ú ƒ™O&ŽË‰¼³ù¤£Ð Ÿýȃ6áÓ‰Nø$‚ ŸD$Mì@u§E² ŸD*f™éþÙ„O¯F'|))&|údCðéS —œ%6á“HÎUŸ >½^¨OŸW¨êÓ‹¨ú$‚!§CäH“¯mÊ'‘’ÒѦ|zÛèœO/£“>½õId˱tÖ'Íñ¼9ë“Èž&™ù¬OŸÑ¹¤If>ëÓg†iv¤©O"%Ï0µYŸNŽ4ÉÌÔ§{0UŸD >‰ E¼ž9Oh3õé3:U}ÒOÌú¤y :ëÓËÔ”ŽÌú$õI䯬O"6ëÓçBìP™-‡²YŸ>ÉóOŸõIóK¡>½?³YŸDNõIA}RÅ¢>è¬O'fÏúd²bâ—“-‡‚ú$÷I;÷ÉD’ĉºO6÷éG®î“ÉXFà>©¸ÏEþfó»Ï¥_0У¸ôËcõÉDr„‰ˆ&"?—õ|n}çö“ÉšcÁ~ý\ÖóSß¹ýd"ö“ÉXF`?™ˆÙ¡ýýd‚©ÑÖ<Ÿ01Ú¨OHot˜O&’!DêÐÙ<4CœˆÔa"æ“ÉY_zMÂ|2H¢æÓXÍ'MÇ›æ4[ͧףæ“ˤ™l0Ÿ òL65Ÿ<™óÖ„OžÞùc&|2¹5á“§n>c§ïó³&|šÑ½=áÓn"f>Ýͪù$¢³¢¨út«ê“Êli¶©O'ª>‰@}Ú!õéDÕ§ïªO":> ÄÔ§½ãÙ„O*µC㾕ªO‹0õIeD}€úôT}YÓ¨‡ªOÕPŸD}Ò6PŸL0@àDÕ'¤‰ùnSŸDDì8¨sü)ba¦>‰ Eœ¨ú$‚ñšeGàæÍ|Pñé`ÍG£ÞÓ£¨÷$ïID‡¬õžnTÍ{:y†÷$ƒù ïIÞÓMŸzO÷oê=‰À{:QïIÞ“’ƒ¼§õžDJŽ¥Þ“¼§õžDà=‰ ;ˆˆ÷$åW12à@¼'“=w˜÷d²Ä1óžLŽjqà=É>Â{2‘ô`‰)éÁÞÓå‘~ïINÞ“¼§)ºgyO"O÷žDJ¥ÞÓ¼§õžÖæ=‰ìéšUïéÚX½'xO¯ޓʨ÷ô2ê=‰À{ú>«÷t¢Þ“¼'xO­Y–˜×Þ‡õ|޾/ºXD¿™Ÿ]hm‰£wËß>¡ø‹ozá~N{á^ût7þÿùÍû»Ÿ}õâo~1ïÛÝX£­?!Ý}õÍ‹YÊÜÍýBê÷¦»ñöÝñî«÷/îß}øöíç—_ýîÅ¿ûªïîØá¥Œåa9üXÚâúÞ~¡ìŸ¾«Ë>V©aW_üͧ·ß…}ÕÖÒõBkõ§©{»økÜi$øXŸ?¶=þþÝë´Ãgƒ…ðÚ`÷ö eLãö™©†]í×Á«þ¿°³¶:ÅÓö÷ËÅÿô]îo±=%ìr¼æã|û\Ç"LG½+cíÛiµÿbw}í±6Ëpšÿb®óX×f-ý.¼ŽiØÊ,Ïé¿|15=û{2B¥ÆÚuý’¢RF¼Ô2Öjj\—*UÆÃÂ¥Œx©ÞÃýI×kïÒ¦ÞÛ?õ>»·è¯î§—¯Îµˆ·r_û?—±*õ|?<G¶v?×óßãñç~™^þç¯~.'`6¿?äо¡# åRù‘~E!©ˆ/¥ËŸy)'T +ýP)#^깩ÓpúKÁŸØjë(­¦Ë ÔvìØÇ´Ö ¯ìB¥ÒZ/¼² •Jk½ðÊ.T*­õÂ+»x©¼ÖËŸÐv¥ÈêV½yj›©é†NyNÓ½+UM½§é'vÛzc}õõ‹ûé²×ÑL½{ë/Òë zLNû]éÕ²mºJ¯”íG“u>ó¹N=-A¤÷^‚H Ù DVˆV ÒB¶‘¢ˆ´­?d…hý!òå‡ìÞGËi![„Ç ÑêCÏíWÆ\ËHû}¬9:ê§œ¢_<5kOÀçšµ¿qÉ÷ ô•P3¬cIëpj”p¡±g85J¨P‹—mT€‹`]3*c+y¡áK¨Dþ–èñN˜ÇþZ™«¦Ñ}ÕÓ«ÛËæß¿yýîóo_öW¹¶÷ÎûçErjŽñ@ÿ/îÿûwß½ùôéå_½¸ÿ?Þ¼îEÿŠ殇owCãMãöáÑûãì>.•r®Ð]$úÿùöÛ^ö ´ö«qZï?¾é·‘s½ý~ù_^¾Z[îy–#+íþ¼”z©­“vÿaüs\ëÛýo^¾¥ÚXç4þ€ÇÒÚý÷TÕëÏo?|'uµºê6Ç|lG¯ø¬w©#›ú¿zˆû7\àãÈ(ÙÛm¹ÿ†ªýð|žï_cW§íþ?¾þøO/‡t<Ú>ªïO’ÇÞzõ²­Þ¿íMMõ \mëqÜúôê뇿“]g¥WÒßërÿ~4ɨ»n÷7·x§{XîÿðV¶Ã'Ûýz9œwëç"”ûTÓôïwïÂn½ýôùãͲŸ¥Êmé÷É÷í¼äÆT‹¶ŒKî«ÿùW÷ŸG';°÷t¿ÿô×/_•2ÎÃqÿ?p¨gúëQªI¿8òx#õKà[꧇Ûw'TóÈáê¶í¼X½…¾?~út^Z²3ûOʧK¿äÇØC[ï¿úm,VÎ'ì¯ß+W‹V…-¦}ìçpÙ{çÞ·~5,ÀR–û~g¿îíw<üôݸL§±ågÌ‘ó„÷AÎŒüâáaâÄó¡ª7b$ÿ[ ¼îùªùøû—ýå²üÚ²Þó {ýé± m\]rjÆÖŠ_Ë•ñö¿—ÁÇ+m±6iŠþ²:ßþNÁ§o¨®ߣ‘Hõþ}¨î3Ÿ`íÆzwÃíÖ/ˆ±Ëe,AÛŸP57~KaF´g_.ò·Ÿß¾~wný7¿è7JêÇ×!ZŸÆƒØ¯ú%QÇX澟>¿úôÃÇ—§FÛËý·o>þÑk”ªbßÞÆžjUŸ¤oöcüëqXí„È7]@Ò[¬ýÍöT9í«ö gMû¦ïz¾tþ˜>a“a­½n]YýM?^Yå_cŸ0ž'gy@úßÇ£ëÙvSzöÐÜ•÷ mÒm}Ò¬Â.|´“:ûÃnYyØ}~÷êñµ¿Úoöˆªí²ù·ºÿ+¿Œ­E7ö§¤ÑµÅR|òÏ›K¿™›Ð'~Cw!~üã(7÷zz~Â6½A\Ò£Lmױ߾-õ¬g=²ÿ½ßÝÂn½Ž 3Ná¹ýÔüÝÇçûc!þÃçßÞjØ‘´c^V/õàih)ç£É?¼~oï´ÿ(çj›S-Ÿý¨ˆçüìñçó•itãe9Ÿ±¥ò~ÆÿÇ[;ö_Â[Õ;m€þ›ðNóñuzNþøö7Úº‹ž)\¹¿Û_ÆóÒß´åi×z3yVö¯ùv6^$–Mîd§S‹ÊñàÛEqíArÌP˜gK=~zý •óq^ÃcNËQïóÃûÂ#îç·¿mÒæódÿöõ¿¼îÃóÙ´ç&e\(çÓqÏ’×ïB3_{PÇglZxPÝÇ«Sï+o_<9­r?ÕßÏö~ii¥ÿþ,Þ³­T”Þ©£ìɺí å>ÏgÇõ»ëå˜((·`-øŒ[p¼%Æ[°Æ‹Oý—©ôŽEþ˵]&±îöW÷òT=ÞÑîÿV›»e©¾Í}\öcowÇe|ÓRáؽ=Ü=¶ó^¯ÕéÇÁ·™Wã"ñjÌ0ìïQ¢Ó¯5Ê~_£YïÎãaöèεçg¢¶>õ„àÎõœòõÒî«^4œc{ò ±ûßc·Ñ¯¸VÏ°äµØKëßêy]RwŽR?ô«Ù0¾deﮟ^>’ õ2Ÿçð'oúg<4ÈU|¾ö>ûß\=¤óÓEúJÿß^¹ˆj¿·ãÏx }þ_¯]!gzí‹W={_Fz5>—]ÎSqNË¿úÜ{:›þ@þÄÕ+éCêÛ[úíZ»Öq“m󓯕~Ó˜_lâ¿Èæ~'Áã5?]}f{´mú ^ôÙx@ùþÊc(ÛCy$}ž>øøéú•;-—ºo_ºr§å‰í:oëÛµ”í'¹tŸ×ö7­ÙG호ϓÕüþñ¥ÌÃàO>ÂW½ÍÆpîÝ«¡¾Úš·Üèþ<ªäf뎑®/´î±íÜËÓ¥tÖ©^迹ú8ö½z°sÝòÑækiŒ]»5µ1íIo”ÿæZ‹„·ù{¶'´kÞãÊž•%ìØw¾~óéjç0Žïø±»ö°ÑÊÍ]Ë—Èo?||ÿừ;·É³×Swî?\«d ¶Ï­š(Y®>jõKc>ô ýoW÷}ÿ[µÌ§·ÿòæÚCÑRÇ;†^ÚÿÝÕË!TT§ëÏ<óøÞróÆRn=„h³®·R4]·3t>¾p[Þ­k»zzú;Wï½Ïkcc íñó4퇧×wtæç@{Ôûû“žƒ:¯ûÒžzê_FL¦÷™e9Go< îývjŠõI)sûTؾ}ÿñÿ¹zO8ÿwZÒ ðöµö”V~ð µýø»Ñó®õ«—úÜŽËÖŽx©醺•òƒCЂöêã/ÇWn¨û“o[z ·o¨è›´àc÷Óúôû“wì‹÷S-ø—»ŸjÄ/ßOµä#÷Óþü;&p?²s¯ÆßhÌ­à*>ÊóHÖëçÃLü ܪ×ã)·j»MܾU¯Ö7÷‰Wã{©Ã·]ï_Çd·Ãî,O~^úñ-÷_éæùŒV±3òäV©?éõô#ïc>Úvý0& ̵<ïðçhºý¾:Ï_¼ø¼‰Ÿæêa7qûŸ‹þõ¼Qå={ô°M?zßþL¯TO¾¬ñ:þ vdÿÿ-àÿ·€vUÿâ+öƒ÷Žý¿Î{GòÞýÁï2õ,%÷+ ¼2*ze,05p™ú!X§n=pš/7Ù…ÖxoÏYÆÏCèÛhØã^fVBµŒYç¿[½ÿ£ŒZ/kœ-òúãY§LÂ{ýõÌKîýȼӾ·µöûÄ9x>bµåþsÒ¯?ÇaéïÎ}ÙûÛóç¿~yµuÆ:V{¢»@šÁ8_Öm{Ø<å>ñKólÝŸ Âȼ é÷;ÕÍ!ý³æûßàûï¿·’ÆìŽß¿ÔiÚþÛvÿîïYÓÿ[÷Bß…!ž·½ô§ Õl»ì«NE’©áÖ”ZlÌXçÐdã›['Yþ]ëyáØ‰ “Ô3NøRËy¹È,§åœÆòpöÓtNõF’\ÑèÏÃ87_žÈu~8ïáóÛ+××:f!ÈcRÀ$J•™(£š~™°ƒŽSê¤)Ä;éüènJûÍüþõ÷ç¸À6¿ 9Ƥ—2fôÞè –~ÛƒÛEê jLhÇÃw£‰öÎÃ%þ&}ÔXG¼4±Çfb®j½,G¡¿ÞѾÿë—}õ¾1ævïWîé`¶K¿¹4>˜2•ó>ÆL´q…{=sðäý`ÆßB¿M5&sŒ<¿h¥è$zŸ6;6üÔÃ}wÎ%jý_ÃÛ‡ocBêlm¹°û©?¯¥iÜÔ{‚ù®ßÇ9Iã/bü=ÉpS­¿¡dyÿáÝßüÃhè«7úZÇÂ_ºÏëÍãIo4ß_¯f¥¸[£kµÚ³ ŸÏ³S9ÏTo’·qJ•·)uþêÙ­Èök˜†-g¯Ôu«·ÿ"N´“kxLT_4]³[=;äóo#¦óÏŽÞýò©mç%8Ë?ÇL§Û³€¾C•K{x‹nãïAÊGn­§ ·Ð/ ’Ïu=5œÊxšÆ'Ʋ܇Œ}=ïØz?oaæÁQ{YSùôG4Õ¤MÕ{ÒGúË?¼2sýRŸ{Wµ?Æ]O?é{ÿSGž2ãi¿ì“Ž ÿ_WÞazˆs"6OxÂ+jžßuöÒ?ŒQù¿ÊÕ”ËqØÝãþo¯¿ïõcöJ¿ï£äÏ®„ëŽÕ?m~Řväóèx×íÖÜ þ^QýúfƒÛ°4ÍW‰N xòKâtå°ûEP¼ w½ÜÎ9áˆÓß‘œÒ:V‘œKê^Ë53¦Îð=íõçèaÌçÅž${“ÙßÓW'Èãþ'„hcvŽÝ _zkQ³†9î®L–Jö¸3¸ùßÍ‹ªœ$Ù¿xYùxÍõûÒx.&ÚôoŒÆRVåþŸ¾óøðY¿·ðùt6Òƒ‡‘³ÈºÞÿ3·Ëkyܬc^óÛx³G­ãéúÁ¹J„3¤Ì.¯çÊ®íáCÝ1ý±LžÆŸªü^f4{¾ÝÙFvº—<íûü£ÐsnìùÎáTâï•ÿ_q›Øsendstream endobj 286 0 obj << /Type /XRef /Length 225 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 287 /ID [<372d1e763e3a8aeef9dffccda5eb2388><262532e3a04bd217f3bc285c516f5d44>] >> stream xœcb&F~0ù‰ $À8Jò?ƒçf ›¿¯œFãwx‘ÿžoÆìƒŒÑ˜^ä}vPÎ-ŬäO)Ê"߀Hžr)¶L.‘"ó@$ ˆÔ’Œþ¢ 6“ˆ4ý"ÜA¤ÔL)ü,›RÉ6©LÞÛ1 $ËÀ},6Yb>˜ Ö+î"9&‚HÆdÉ9ÌŽëR³9A$³/ˆd—ë ‹Ë‚Í_–‹üûâf0û?Ø–]`ÙP)ýäÚȽ îæ'2 endstream endobj startxref 218522 %%EOF rstpm2/inst/doc/Introduction.R0000644000176200001440000001736115105126126016036 0ustar liggesusers### R code from vignette source 'Introduction.Rnw' ################################################### ### code chunk number 1: Introduction.Rnw:85-89 ################################################### options(width=80,useFancyQuotes="UTF-8") library(rstpm2) ################################################### ### code chunk number 2: Introduction.Rnw:239-247 ################################################### brcancer <- transform(brcancer, recyear=rectime / 365.24) fit <- stpm2(Surv(recyear,censrec==1)~hormon, data=brcancer, df=4) summary(fit) ## utility eform.coxph <- function(object) exp(cbind(coef(object),confint(object))) fit.cox <- coxph(Surv(recyear,censrec==1)~hormon, data=brcancer) rbind(cox=eform(fit.cox), eform(fit)[2,,drop=FALSE]) ################################################### ### code chunk number 3: Introduction.Rnw:255-260 ################################################### plot(fit, newdata=data.frame(hormon=0), xlab="Time since diagnosis (years)") lines(fit, newdata=data.frame(hormon=1), lty=2) lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) legend("topright", c("PH hormon=0","PH hormon=1","KM hormon=0","KM hormon=1"), lty=1:2, col=c("black","black","blue","blue")) ################################################### ### code chunk number 4: Introduction.Rnw:263-267 ################################################### plot(fit,newdata=data.frame(hormon=1), type="hazard", xlab="Time since diagnosis (years)", ylim=c(0,0.3)) lines(fit, newdata=data.frame(hormon=0), col=2, lty=2, type="hazard") legend("topright", c("hormon=1","hormon=0"),lty=1:2,col=1:2,bty="n") ################################################### ### code chunk number 5: Introduction.Rnw:274-278 ################################################### plot(fit,newdata=data.frame(hormon=0), type="hdiff", exposed=function(data) transform(data, hormon=1), main="hormon=1 compared with hormon=0", xlab="Time since diagnosis (years)") ################################################### ### code chunk number 6: Introduction.Rnw:280-284 ################################################### plot(fit,newdata=data.frame(hormon=0), type="sdiff", exposed=function(data) transform(data, hormon=1), main="hormon=1 compared with hormon=0", xlab="Time since diagnosis (years)") ################################################### ### code chunk number 7: Introduction.Rnw:295-304 ################################################### brcancer <- transform(brcancer, recyear=rectime / 365.24) fit <- stpm2(Surv(recyear,censrec==1)~hormon, data=brcancer, link.type="AH") summary(fit) confint(fit) plot(fit, newdata=data.frame(hormon=0), xlab="Time on study (years)") lines(fit, newdata=data.frame(hormon=1), lty=2) lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) legend("topright", c("AH hormon=0","AH hormon=1","KM hormon=0","KM hormon=1"), lty=1:2, col=c("black","black","blue","blue")) ################################################### ### code chunk number 8: Introduction.Rnw:308-316 ################################################### fit <- stpm2(Surv(recyear,censrec==1)~1, data=brcancer, link.type="AH", smooth.formula=~ns(sqrt(recyear),df=3)+hormon:ns(recyear,df=3)) summary(fit) plot(fit, newdata=data.frame(hormon=0), xlab="Time on study (years)") suppressWarnings(lines(fit, newdata=data.frame(hormon=1), lty=2)) lines(survfit(Surv(recyear,censrec==1)~hormon, data=brcancer), col="blue", lty=1:2) legend("topright", c("AH hormon=0","AH hormon=1","KM hormon=0","KM hormon=1"), lty=1:2, col=c("black","black","blue","blue")) ################################################### ### code chunk number 9: Introduction.Rnw:339-343 ################################################### options(width=80,useFancyQuotes="UTF-8") library(rstpm2) ################################################### ### code chunk number 10: Introduction.Rnw:345-358 ################################################### popmort2 <- transform(rstpm2::popmort,exitage=age,exityear=year,age=NULL,year=NULL) colon2 <- within(rstpm2::colon, { status <- ifelse(surv_mm>120.5,1,status) tm <- pmin(surv_mm,120.5)/12 exit <- dx+tm*365.25 sex <- as.numeric(sex) exitage <- pmin(floor(age+tm),99) exityear <- floor(yydx+tm) ##year8594 <- (year8594=="Diagnosed 85-94") }) colon2 <- merge(colon2,popmort2) ################################################### ### code chunk number 11: Introduction.Rnw:362-367 ################################################### fit0 <- stpm2(Surv(tm,status %in% 2:3)~I(year8594=="Diagnosed 85-94"), data=colon2, bhazard=colon2$rate, df=5) ################################################### ### code chunk number 12: Introduction.Rnw:369-376 ################################################### summary(fit <- stpm2(Surv(tm,status %in% 2:3)~I(year8594=="Diagnosed 85-94"), data=colon2, bhazard=colon2$rate, df=5,cure=TRUE)) predict(fit,head(colon2),se.fit=TRUE) ################################################### ### code chunk number 13: Introduction.Rnw:394-401 ################################################### newdata.eof <- data.frame(year8594 = unique(colon2$year8594), tm=10) predict(fit0, newdata.eof, type="fail", se.fit=TRUE) predict(fit, newdata.eof, type="fail", se.fit=TRUE) predict(fit, newdata.eof, type="haz", se.fit=TRUE) ################################################### ### code chunk number 14: Introduction.Rnw:405-420 ################################################### tms=seq(0,10,length=301)[-1] plot(fit0,newdata=data.frame(year8594 = "Diagnosed 85-94", tm=tms), ylim=0:1, xlab="Time since diagnosis (years)", ylab="Relative survival") plot(fit0,newdata=data.frame(year8594 = "Diagnosed 75-84",tm=tms), add=TRUE,line.col="red",rug=FALSE) ## warnings: Predicted hazards less than zero for cure plot(fit,newdata=data.frame(year8594 = "Diagnosed 85-94",tm=tms), add=TRUE,ci=FALSE,lty=2,rug=FALSE) plot(fit,newdata=data.frame(year8594="Diagnosed 75-84",tm=tms), add=TRUE,rug=FALSE,line.col="red",ci=FALSE,lty=2) legend("topright",c("85-94 without cure","75-84 without cure", "85-94 with cure","75-84 with cure"), col=c(1,2,1,2), lty=c(1,1,2,2), bty="n") ################################################### ### code chunk number 15: Introduction.Rnw:427-444 ################################################### plot(fit0,newdata=data.frame(year8594 = "Diagnosed 85-94", tm=tms), ylim=c(0,0.5), type="hazard", xlab="Time since diagnosis (years)",ylab="Excess hazard") plot(fit0,newdata=data.frame(year8594 = "Diagnosed 75-84", tm=tms), type="hazard", add=TRUE,line.col="red",rug=FALSE) plot(fit,newdata=data.frame(year8594 = "Diagnosed 85-94", tm=tms), type="hazard", add=TRUE,ci=FALSE,lty=2,rug=FALSE) plot(fit,newdata=data.frame(year8594="Diagnosed 75-84", tm=tms), type="hazard", add=TRUE,rug=FALSE,line.col="red",ci=FALSE,lty=2) legend("topright",c("85-94 without cure","75-84 without cure", "85-94 with cure","75-84 with cure"), col=c(1,2,1,2), lty=c(1,1,2,2), bty="n") ################################################### ### code chunk number 16: Introduction.Rnw:450-463 ################################################### newdata.eof <- data.frame(year8594 = unique(colon2$year8594), tm=10) test <- predictnl(fit, function(object,newdata=NULL) { lp1 <- predict(object, newdata.eof[1,], type="link") lp2 <- predict(object, newdata.eof[2,], type="link") lp1-lp2 }) with(test, c(fit=fit, se.fit=se.fit, statistic=fit/se.fit, p=2*pnorm(abs(fit/se.fit), lower.tail=FALSE))) rstpm2/inst/doc/Introduction.pdf0000644000176200001440000060522215105126152016404 0ustar liggesusers%PDF-1.5 %¿÷¢þ 1 0 obj << /Type /ObjStm /Length 4208 /Filter /FlateDecode /N 74 /First 618 >> stream xœÝ[[sÛ8²~?¿o›­­!î·­©T9¶ã$ŽÇŽ'žl̓,Ñ6wdÉ#Q3ÎþúíH‰W™JœsªŽU4AÝ__ÐaDÎQD;F4±JC<ܱpŸiâÆO¸Rp‹î ‡GDp¯ "¬€³$RH•àl4ášHm ²!Ò ¸¶D ïAOÛñDy/CŸÜxhŒhm[ÚÁKФШPÄ(Ï4a¼…z†X K¬ÇúŽ8 §Áˆ³P_râ™q@ ñÒÂYoà¡TÄ;èDIŒ1 Ö@¥DZ*Œ˜ èK˜™‚ ÆÁ4ŒVÁ˜QpFʧ{ ¬$4« ehêd¬…:вà FŒ¼–ÁС ¡wÍw‘ PpÞ -KfÈTá5ÑвTVƒ `ÃZ–Þ« e%ò ÅÃÑ('àAÞ+òCa)ÿ Jyh e-@rÀ?®ˆ"L[C ´¬ ôçÚB³ÀC®…ÊвaÀW‹R…n ÉžÀSn$ŠZ6 Ø £æåi¡ec¼øŸŸ&ô$ÍG“Q>"Ð#ç„~xHg{ã<›ÏÈ¿{áÞë,'¿Á£U>Ífé’€DÂý³Ñmz2Ÿ¤„^.ÓõÓp{ è u>}}€çûÐÅt~K^¾ ½î­ò»ù‚ü|“ÞÜ€Ä'Œ½p¾fL $”Çph8&Å9…: ùZ\¤#¤ò`”§äÅÁ?,sªQNÛ0þ7Æþö÷¢ôõâýèSzEþÊò;r4-é <>N¿þ5_L–%-úµ:Òb ôé‹3ôˆq¤/Ôc>Ò†4Ú€'O‘u¶˜OVãè::{OŽîæË|9^d9€8a"áPçbuýïtœ“Pþ”åÓtÍ0_a2 î 72ÞDÝÄz`¯×e ×¢* —¢xÆŠÁË(œP¶øîËRšûóÕ,GsB3àd ›(þGÀÊñì(α ‹*EyÛÇÛ±9P¸â\<–±QO\Åj¿•‹(,7›Ís$M¸²Öþ|–§3¸ÉAÑTOÒI6z5„jHö:A[¦xâ<¾q6ZÀ %°ÏÓå|µCØÁác~t‘£ÐÁPZ3G®0YèÊb>¾Hsh›ž¼"ÓGTª—/«ô¶È•ñíbèRw/ž“ø‚·‘vi¿‹ôÈié;h–ßOs P±ï¡PGÒ ë P='W ¯pÕˆo ùÕh™†·éÞÇÏŸŽöþñþä|~?šqñÓ«ùtÍÆóI6»E¿QØìÅ2ß¿-Ðÿ†žÒhaÀò‚oïGEðÁÞä¡g쟗dÄn?g“ü™æƒ\ûÜ‹ä2² ¾ïu‹zåÏï³D\¸o×=¡?Œ%ðë6¬‰·ŒÐ[ˆÁ°þ³XO‡f±s¼Šk¯B ‡êO¡SÀ…RNO¼*ê‡Úüm¨åQV=ÝÛ4»½+/»(åt¾¢ûô¾¥'ôŒ^ÐÓñ|:ŸÑ MéÍMFo²?¡¢·ôŽ‚“ºKg4£¿Ó)½§3:§óYJ(ø®l>¡ º¤ËôO¨²ÌiNó»EšÒü¯9]Ñ?é#ýJÿ~…Ž´ý$Hôõtt‹ž9õU‰ëð Ì–$ÿŸ¾Î¦)%%œàÖéè>íà[pðÙxov n Æ}’-—Ç0ºpç"Oï º_V“-¤¿>Û?=?YwÄ~:OoWSkì® vׯºøf¬[!€RWáÑ5‡Ñ  ‡“ \‡kY0\…;ð Ϩ¡‡(Þ­Ä>À÷ƒø\ ÙB”g„—Àlܧ &k#”=øêP¯]x"#åám5MÔ;.ÏXu£…Ï7lA%8ˆ¶ _E›¾Ý\ì‘›Ñt™–µ6Nµe/Î_¿ùôá°BL¤¡b.@³g{³e¶¹±1–·-‡nY>ÔrXUê¥ñ¤m-zçë³2kŸÊ¢Óh[`º®!†(kâÔN¸$L«5Dlø–1Ø»r¦ÃE麋ÒU%:µ‰:­}b./ðôµîPt #èºåQ4xs:h€È6AÔ+·¡ƒÑ!zUŒSÁÔ¸…—Ë_OÎO¡ß“Q~ûêt2V6 ×m¬ØVXVæ—3Ð^˜1ÞTæÇ ø(†ª¦<Šs|Œæ;€kó‹ÎcmÑep:öÃ.ëÐu·n*a› ^Â8ÙQO‡y¦Š ò ]?tMºp©xÞÍî¿‹D߀u¿¢_6Füa™‰ä4ÍG`ÃïÐçÙh:ÉÀœÃ³ŠÅÄ+ú8È@æÑËì°Ž¾ ì'6Þ¨]Ã"¦½ãwïŽÏŠ/¾Þ_ϧË´äkHwÌ|ÑÊ¡Ö/†%Àþ¿üPmvƒ'ð|÷ò÷{½-è}6[-w›ñªlÅœµ–?!û¡hcj(ÚÎN®®^5zt]`+-þ° >lóYN©;ñçD46ºÇ€= ÜöyðêÕëgA }Xd÷é.8ÄB+¹®ˆÃ'P1†œ …á»7‡¿¼þ¥fe;QXšç·mÊ& ;½xæ4Ls”ïsrß'ñ²¬ƒÚ;†¨Æü¿µ8(W›¨Á¼­ú:®Œ˜uúÄ…°ÔŠzÚ¨Úµá]\üIWÖÔ¾ÃòzpÉuÝS_}fbè­G…¿F\wÑ¥c®»e®ûÊqñT;m@´ ßÖÝŽ˜¡5ƒWg>î…8`>›w‡˜¬ N@S œíéÈP‡¬1Þ/K?â`•ÒðžúêöÝm`÷›èû¾ÆÿMô££® ß€-éÍO¼¡o+ù‰27ñ hÄèþ!],G³ îq–åÙt’®m8åô:ñq#k1™OQäEú8žŽî1‡ÑŸXœ¦Ëå³d.ba“¿¨f,¶å)V³ x<_¤ÛR—ªo)‹øg¾(€†ê«¦ê÷ªâ๦þ¦¹æþ»Ó‹½_Ë9®ï2ªi¸i›€ö,sh.³x´ºÁĜ펔Då ,K%k÷ÚµëO­Å¥è蟌ÞªÈeÄŸÇ5ëJß}tOq¡j(m×g‰÷ŠûB® J&qÕ¾xªfJðÐp°õ=‹‹õÅ-¶Ýš©»5ÓTìèÖNCRÿº¥›i‘EÌšIÃ2ŲNé[0¯fûêÓ“è“>>uÞ…ñ4Ô¦•óï…ïà9ìS³ŠùÌ@±Ê‚Ì}¸àå¼o¶#\ýú…x–ç!Üá6ågd¶šN±ê WâÆø×*16ì­H¤À-<‘0fbâd0kåyŸÍ~/‰ K„m-¾¸útv~Z²áb:šåî|[žÑ´£NÉšZ¡é7¬PÄ,Ð+n·èQM§Â½šÌgµT>ëMä³V·lã~X Ãe0ÔÔêZ×C™yìAt#ç<õ^v$M+sý„(‡âZ=zÔ²Hoߟž”½€*Cç®§Ù«t Žt{-[+]|p€ø”©)WÊ"žTX<ùöâªÑ5,ÅË5–î×x¨¢ŠŽQY7b€9á±Ã^Ý‚L+O½]hÏ@l³6\zyþvm›âæ¬pëÅ]ž?,ÿI!þË’ùâ–r–€ñ°”y# WÈ7Êö÷°¯ ÛÊ‚…_Ót 㓸ìÍ“g@H‚닆 ¸æÃLç7ÑϘ€hñ>±JóÝé¶"Aý×Ö&¸RÛÄ#õÎ'¸íh˜ÁäŒÌÆ p3\H̃óŠo5‡ûûx"À) éÀ‡Y Sn:£sPg´ë;‚¹sû‹2h/÷¥àÖJS–-îøŒevsƲvD”혰[³ÒÉ0–¸ K¤H˜Â}•B'Üô:h+´RÂúÄB|ÈKp †ð<±r Êv'Ž›DâF!xÂ0þí–3 n(-‰\àønÄõ‰§›õ-Oqüþ㧳ϥÑq»­iúv¬¡Z>‚ ]ÓÔ 7«p”åö$¸n¥}ÍJÇè¼}ÍB¯óŽ\ò~®§v8î­°¡©†….7¬-t³Úf7`‘·EôåhïôäxÓkÇÜ®Üÿµ–Œj{o¥’AÏ5ljÇe8jaä=éïjBñ{~:hÀ.©èÊž‹fèJ2l¦5[¶-€·.XOR+×µoÁ´VæzE6)vpîïíÇÃwgëépÓ‘2‘¾É¶bÁèsËI™Uì‘»ìKØí'M{. µ¯B#^v¯R4×&z&XȺcSuÛÊ~Ë(ð'Ä0Tì~¨Ø?>ýµ\9|ÌS°Ðóî=l¶µaÓ‰¶è]CônpÞ§cI½¦¤5Ífyz»Móô1¯iøëM¾‡‡†yÒT<ÛZzš/EáŸØ7TÙæqpvùåU©ë]º·Í…ªö†BÍšjèÊ ŸxÛlS÷š¦æ5ÑV¶Œ!¯ØBãÚË! ,4ÔHk1¤—=CæàÝ GǯêË.»JÃuH£Ðø¡+v0Ñ i²½’…ûYªqµ\þýÒeº$ÁˆÇ}˜ð~C­Ìôvî ÎGØáêèôr-wûÝ¥n†/ÃKÃÀˆc ޲ü¿Xü–­XÚVþ³YCU_¸°=°¼¸Ü{÷æ ‰®•ƒ­ÙFßT3оÆmõ°õm§ÐÄ|÷/n {"À Z³‹b†eåÛÆ²ñfŸb7Â^E`T‡–¶Ó†[E28Þ·¹aû"ÒÁådzMjW(tL9t3ªPCU×OT×'[']MTÊowkð\ª®Íw¶•­ëeÖ@!=µ1yç¤C¹b¡ŒIîäèÌ9H¦…_bh™% 6Á­FÖø„;ýƒ"%mˆ„£nvÓ¦|âq«±Õ‰„ɈÔ&±—Xâœ{öVOÒ &.ŃôÀ DY®dTTø,y[b‹žãgÀë²Áφ‹2~]”~òQ–Qe;˲!åmçÀ…ò‹™sKŒÕ®?<+Ö¥9+¾dd¶8Ÿ2²ŽoæÊonŸé#Åò ° ×¼äùnߤ K“Ê6Ì< ã½0Ó6á8¯ÃŒ3gÒÈÄ{ƒë¸ fø¢Ý³xÝܤÀ(äÌ¿Âr77ÙæÛÑuÅoi  {ìp_ׯ=×`ƒ~p?8g sèçîÚ=»ËÂÆ„êB5©¯Tã.`'ÓÈZPÚÊ vÈmmÒAÏD®š¦ùˆÄÍcøyg\ƒG}«n/{¦îšC*¹Xò<]ü6õÃå™ÄñV¹¿)\ƒƒGUÙ€Ÿ û‚~”vkC Ï¤30âjV¥»Ùÿ(ÒFendstream endobj 76 0 obj << /Subtype /XML /Type /Metadata /Length 1452 >> stream GPL Ghostscript 10.02.1 survival, splines 2025-11-12T16:48:57+01:00 2025-11-12T16:48:57+01:00 LaTeX with hyperref Introduction to the rstpm2 packageMark Clements endstream endobj 77 0 obj << /Type /ObjStm /Length 2722 /Filter /FlateDecode /N 73 /First 632 >> stream xœÅZYsÛ¶~¿¿ítBì['“¹vÇY›Øi³Mh ¶y-QŽH9Iý=$%Š”dÙVÚñÈA8ø¾ƒ³QÖF¬'ÚLj’8N¤‡+A´4ÄI¸ _Šx-ˆÓ„sÁ‰3„ ƒ,áJjâáÆ8O¸UŒxF¸·†xN„€Á^³yI„ãœxE$Ó8'‘‚C¿!RIA¼%RÃMX_:×d±Špƈâ0 gœ( Rr&ˆr {$4,ÈÑŒdLÍ56 îdb–h-°Çm>…[–p‹3¢=¬ÏA,ø ƒsp.‰ C¯±ŠCC+Ž1аxË«lŸ;báyhxhÀ?2Yc!Ì:”YEˆª„§`Æ › ‘)¼`s‡ƒ-€ÂìNjœÇØ#0Øq‰T€˜°sŸB…y$²|=Wæˆ?Ò¸´@Ç[ñ)TàÌÈÆµ`·Þà…¬àN•:€®"»47¸Bl%°Ä•E&på £[äy²\üçáCBOfyI,¡‡Ù´(Q 9&ôe ®¾x÷ã*úǬey(È£GñɃC>]ùðñ°‘X†\*›T—|6‘/„¾ßKTí8òM: ¸¤«'ÏÊQ ÏÂÙcJ€òÀ“¶aNác³Ø÷,*V€b ºªq­kÐyf|t=:­Ôˆ[môŸ nV®e"½_^§±J}QíI¬ÜÓ›i¸žC¹´A-Q¨Jð(0lºGLm_4)94ÄB´zÉÕåUX ¬Và –æÚ Ãzõæú ¥êJâú’pk‡JºÌ®ZÄJÊãjA‹2rÊ´¢UùÍñ«)nõ5hF5•ªDúMµ·øÍ«ù—T§îCFð¹8V¶T&/a3l¹æòUféþä; ƒ{‚óŸ eP<³² ¥Æâ8“ÙtGg{ò½|zR¦eˆ'8„¢Ù©±š N¢Nß\ˆë¦9oÒóÐåGö R ¤b=‚Ì‚Ä*‚x p­ ¢D0u dM MëoQo¸—ç€ðs´¸Ê—6°jÜØ E)ïâ #úàv:(Ú (ªU(ÖG¯Q¹›U´wWYXp~ƒpf•p-Aæ”k[М­Áš3Ñ %ÛgB©{°¹Êhi—€‡í™ÏeŒì&[Ú±5Ñf¶mÊ eW›ãÒ³¯ù«ÜWl×6qÉ–µì^‹‡ý´*úâäàùÓýß^¾:žŒÓü Œ3·óÙ(Âù`2ÌòsBßgù^^d‹ŽèÜ_À(ˆ"îà`š]•“)FsŸÇ`¸EOf§e„Áç •ï³ay„%ÿÆŸ‹&½8êº%”ãé_æÆ¨ ëFkÐäôê(dçÍ%l5í:¦WtJ ZÒòÛäרVñ©¦£‡£ô¼€ˆ¹Úö~£øñ¦ƒ 'ûRÝ<ÌFâ²Æºb×ëtn¢ìY™Ž²Á^~JļʊøŠðBä='eÿ½H‹€wôC½1ˆÒûúòñù/Þ6‹ÃÂû“ÑpKE1º¯(òΊ⌿'åZ{b fÖœo§ Që(ˆŒ{ʉN[âå\öhJOé Rˆ¶2˜F À´§£A@ò€“u”¡eæ*eXÃÇOÖ‚ƒ“gûïžÃª'i^ÜÚ`8Ñ×Ýѳ•H\ú¤¨eRT›”ã¬ážq@CÀ áÓT—…µxlÉ8Õ4ôüú훣†owKä!ë!o;Èã˜í,5ä®=äͲm4K¶q’‡í±ÇÓ†Ïw°×]ì×"²%öÆn‹ý“÷_}xÛ¬dv€½¿+ö†ÿTì5Ó«°7]ì×"²%öVo‹ýÞ§Ç{{Ï`¥W“|âo }?BÁ2TÇó¶­âCÎ¥cÞÕñ'+úné‘î8ÃB¢f†e±u“‘jIdre®0Ò…³²jMqlÝÐïm—&„X߀;‹w5|VXSÛÕªu\o«TëŒé§ӯÁ8ÆÊ_åUç=‚ÔçòÜ£gM+ŒMÛcA´jËX ­ÛXHkÚšpÓ´-ì³i{"š9VW›¶$Mf¬4Të¶Åbj݆g›~ÍcQµ%y+ªòrïÓÓß¾¥ÅH_‡ëxØ›¢w,.Ÿ ½­7¶ Ù´+%-—Ô­ºœ«( ýÿÚ %çñr/>‚[F›8IG™\W™:PlÒ!L=jò79äÉt¦µµd±*EŠæ¢)¶ê+žAbë±§×®¯P˜Ùð 8 ‰UQÊ$ ×RPHg• ƒèïK‹‡—Y~ÙHë$;Ž‹Ä9³F8Áy¨+)ï¸M<ø¥\R3ñ3eаX8_ œUœS¯‡5nÇÌ”à‰’æ§ g}bõZV= dð­ŒH$œmÁ gAX pÛí„[e©Z&iÉ”´Í„äê6æ1Íx‡Ç§n{ß½´¦njvP¼¬ª2ü.•Ê…Mûðöù_O_×^ád”æå­©ú¶®±×­8`ëREícÛ¾¶ÛwŸ[9{w•®÷ïß[ßÏ–F¬ý3?‹ÕnŠO„\άèzHè3ú‚¾¤¯èkú¢–úŽþIßCÞƒ,+³Ñ0@³ Ó¬¸„\ütšBŒgb«Šg°yÊy7´«:˜Œ&9üS:¤ÃÉ´e¢áë,Ñ3z–]z OÏéù4¤°½ ?®.BN3ú?zIGtŠ"Uy–šÏƧaZdç9`l¾.Ôº SD¿³É^fýJ¿Î&ežŽba¡×°L‘}§Å(-.06»˜†#´å`ÒŠÁdè5ýF¿Óôoúw˜N–c7ßøZ¿œ <fâm³2xk¢£…¿Ý|LÛî÷ßT™7GqàKˆï~9oìÙ’]l…Um[hÐÛ­6y~·µiÞŠIâËåûXÁ£0ºe6H—¢ºz… Vk½Y†_‡ã§ä¼>`b§€ ÑLÜåÕÌ Àn®Tî>”;° Ìšx¿UZÙKkÁûd#›˜—»eÞ.1ïîÀü=4ü.¦Bítÿ’µ÷_/ú/ï¿ñÊQÖBÿ<~6Oe6É«®_.ÊòêwJ¿}û–\¥³Ñ0\ŽÓ<×I‹Ùô:»Wùkzu˜Í ÐæýÐÙ@¹°†$ƒI"-O¼ñD–x)¶Œœ;Þáv'äæS±YCô®âgy—øùÖž±¿³³ Øb›Ù°»=¯M9¥zíÌþÙóÚ#­Uúøìhÿ¨õZ¨Ÿ(á/¹:µ üY/ARµò/$¹m‚d­ë…õÒ.U©«ËyX és(ת›2n»P-eœ¢•ö«@kñض¨è7„në³µ¿ÐÛÚ"ÝÉ -~=£ªy–~=ãw–Ù«»ìÊ8ÍFåä÷q:½L£0F©ÿ{™%E¸ƒa.ÁŸY© î ¥Çý¶~dÖ6šU<¡"Ѓìì,Úïg¢àhŒ³|V x•<ó¡w™K½È3Vs±Øº£i£=¨îêÿP‡+endstream endobj 151 0 obj << /Filter /FlateDecode /Length 4524 >> stream xœÕ[K#ÉqÖ¹/‚uµð椽,U¾3-°Ö²%ÃÚi@f|¨irº¹C6{ÉâÎŒ½#"̬*’Ý3+[Ɔ]•Ïx|ñEdÖ÷³¶á³ÿÅÿï¶7íìþæûNOgñ¿»íìëÛ›_~+ÄŒÛFp­f·ïnB>ãÊ7ÒØ™Õ¦QÜÍn·7¯Ùïç’7më ë÷»ùB¶w^³åñ®_ïáU÷ðv—~kÖ?¬æÿuûo8“ªf²m#¼„Ùn—0öþ0_´M«WJ°þiŽHç¼c[ü-…áV3‘ƪV­}ã”ñi¬§înŽkóš³÷aXƒiÖݯŠþ¼ñZ ì¿àB7šûÙB‰ÆhaÃ8¤¾ÆJßJÖíßã¦4€â¿¹±ÒÂ*ÅÌX“óÙöFƒÜ«ó“ÍÍ«óæág¾ñöSX‡1XQƒ•Gã`¿y{è÷Ý]?¿ý.lÿÔkÁQ?­€Ý»FÙ(ÜÛÚæÒz¶í 0œÖ÷qÛž ÃÒ.4b=n<Û‹f}ã¸×!öiÑëFô\+¶­§)[ ­aËâqÔ³®œy‰Ï5lœ=OÁU„}h û[^[(Wì°Û¦åÙA«Ý¶z3¦÷–½+7±OËì¾êpVjûn³>TOÒÖ4ì¾”ýþ‡õs­q{Žu²Ä×W Í}LEo“4…eb°0“b›CrpWú-¡‡dë ûÞ6…“hQxIÚ _?†=BÍÃ!G–¼´è£À±gØ·ÑÖUу_éÖ QÍH#yF5šj›¡¬ô©Ô<ÏHVtPC3Ò\°÷]Ô£J²&%e…:¢UUz¶t³€)wæ‹«OÁû¤óŠ} ÑeZ²åa>…`J7 8­ëŸI~É”ÞGKÍ;ÁÁ¾JºÓìðT4«!/ ÜK:;4' K¨¥²j¥'Q à]5RQÁÈCy5Ó°.cBLãÍ|¡[Xg_§°€†òRsÃî÷»ãã’Ðü}Ã@k0¶íöŸŠ¦“jà0¨…H·²`A„߬WAì-÷è9'¡ ëÑ ÅÑjl¥åàÞG1´¤'^ô(Ò[ëØrUŽ0­DŽ25z`\Ô1Ê!øØŒQÚ+çPAÒcÐŒ?Á1VaE×o‹W›Ô[¹ ”ôeè$ø ‘¨ÿ„m„{Üwš¾+—^o#z‰‚?â$:ðêë !K•Ph<Û¦¶Òû8’ÓüÂtü@naHzBnÂ(ñ2î÷ëŒWVÉýnQ¹ÁA€ÖÕã€kÆdÁD ›Èj]ß1+‡A„§øš7'•Å?§|¶Ü¶‚qßáÌ@ Xy¹ãR*wA˜ßE?Ð¥õ‰À×$ð|•‰BÑÄ6’[Q†½a¡M= $ÒÐ$Ò iˈ뭈̒}75àDÄHÙÇ©µðUðèä,oæA8Üù`NÊ€Ô\©M”ÃÔÆ¡¥æŠ×KnÜ ã³g¾+¤ŒÑ;MVIúQ+TíG{$6šÓj?G†yÝ»ÂKÆžß•Ã^w.8þNbý†Z·R«I¬@d¸#ô$&SìÜMÖ œnŸHU–U£õ×/ômËå.ÕßM•†Àæ&ç}[ø¼éþWó7–8ñÇ鈘.äÉG¿ªxI‚)¶+ÁL’ÅðÌú"pNzÊ‚_p³…tÀÁg¾¸¤4WK:c¯ —Ÿ¿†\2³Ô_Mb€ÿd(þÙ´ºèB”ð',â ûõ¤° µ³ÎÖÆ­<@è”Ú\£Áäóqþ¬E9ñW0¨}çegs“³Â“.ïoÒƒV @Ñ`r€|\(LœqQ H©˜ÁþZd‘(þ¢Œ ñ†˜k+(Ç dZ]úi>ìBw-[I”ôm`W†³]ÿ›(ÿœ0É­µ—Â$ØŸp\œEœÌ\‹’xZ̧ê"Êt´Dñ”÷<ÃÝ^3„ ‡,P²ë,ˆx5ÚÞ×'‰]¡t·ï*Ù Š?ûé…sÕ6ª½êâÙJ_3L„ŒÇ¬ƒýyîFÓ@ÿaM-$™•Xƒè³ƒ/T‹À$1ú®´ænSýYÒÐ é‚b²Î˜ì’A€dÿ÷ ¾aÞ& ± ÁmQUf½ßmS T5ú“OPÔçñ:ñð™´—”Os˜äÖS©ÌUO˜mƒ0o¸·”0Âî§mÏÁ ¯c`Æ«³q áZÜi³=]gÌâN+®Y¥~vØAJ…õZÀ—‡Ã.qX*"£|cùLðcƒEa„ —Ÿ\*" ”’Š\ÇÔ˜OY*~.'Ñ 8‘‘À÷l&èx­"{6L±Ÿœáä"Ìf9)øZËÀAÏ„d)xb\_Ä[N‹;o?­¹j?Î<HÄØ£/U1F_ ©`+¿žÚ(½¶2ªŸL-Çf‹qHz$ám›9¦xy»ƒ¶SÈ5½ÖY´|ŽjþÖHÒ fæHµÛª¬^€ÛJÌE~ð^kÛÆ€/HŒf¥Úßu’šsòÿ— ø,–:’ V/ –S‘±vù/H`}¶|.ymÍu~ÿ7°élt"uÃ+£s`†\ÕI ÚWº¶º“ðúÉ}./®Õ‹Mğ׉“yM”H´ÜP̤ʌ¿PÌÄöœŽ…ŽTÖ3B vU8qL®)/ æüjIš¹Ï«)ÄéØÜtï;TדǗÖþ—˜K•0³¿œKÞ»{ñV§]¾J½'·ê à[—gÕ+É0 Sç­ó€G¾¡¤’ۮ߯?N Ì+0 %® LÚëË0/ÆT,ÙUKިȎ>¤§¹bU³‹GÒôõÑ@yN¶¯JËâÍØ‘ÀÒt C~†ñðãm€í¨*,ž*˺õ®Lôýþ8NwbÞ_URñL˜òûp¢~Ó9Í÷‚s"\-º­²úóçA_áa²¥c¸g§éûNN¯“P¤ ê»û.V‘µÆ³Q­bˆ¡ØtXZ SLN. sƵÊ¢ñÀö7·ÿøº® ý}õWm 1•õ~°b)ñβC>ƒç2hd¨át¥ ,ãs©2\Y ˆw'êó€5¬ ÜB͵+<»Âƒ0Ça³ÝPó§fäYžÎŒC¸ó§Åê:¹š‚Ki±©š€Ò =<¾€GûtŠm¿zø¥ˆvU¬$à]´ýIæÓ“ O†p@Í0:â(ÀY§ð˜2GíÓ±Éd4Ec) +)ȇ¿îcu™Áq /=žÆ®s!ƪ‘rËC”³§¶CK9ýqÈW\} Žl¥–¡BŠ7ϩм÷9ø‚SÓ×ìÔò/¤§?>ƒø\rÊ–„ì ÖÔBò ä”{Nw·Ò“—“Sn@ FmƒÅøŠœ‚ì¦Ù)hG¨PQCŠ*‡TsG9tI}ÿ2-Dƒ‹ëÉÒg+æ<ß9eq?;塸a±è$u¡A\|ÔÞÅ‘g¤~.%§m[ûL™‹ªnñeÄrXöl¤Q¹ìóO“KjË#ÏŸfmW–æ©ýI[vèG¹´0Y–)'ý2\¾hPïÿêR>sÿÁ-žE–¦(ñTëžeŠƒIRv ù%d½¥)21µ €¼ƒWõSl¢,TT0p&QP§ûpg¬–ãõW«Kñ¢tŒ€²oŒÃ:#6üít=8$aeÃÿKåöxLf½G€Ú—éSˆ…D'´¤c˜Ž~^¡*HZ1¦*8†¾Pˆy—Æ{þRÞÅ –Wôã„ úÁõƒUà²á™×Š\O¢4Mã©ô¸÷è@CêÄu›ïÀ èd8›CQ)¼Ú¸ z=¸ñ‡<gÁQRõX=éòˈ&ÓpÖ=7§ZoÖ}¸wl=û—ïê”%ÜQs¼T"Ý¥[¢ÃC8†[’pJ>žŸ7’ñüÛKIçÅôÛœæJ剚qñ¹•'Êqî”;¢n±’•O¯‡‰5 ó#'‡g±Ý¥ÃÁCœg˜œ²Â>À/F)€l½H ‹2厴0¼¡YRùel¥‡˜¯z˜x>¾<îâ#3øeELDo‡G³`;­=2¥KtÕ‰o;c.0LJGƒÅœ»´X#& ¥£8è/í±rµa¹3vy¬ÒŒêv']ˆÄ!y?<‘h•RÜ‚uRfZ“'ÊÍ‚º¤ «wÐË©cPˆÓnv÷o†™¼ÀähUÈë# -(GÂE©eq£Ü“Tã_tU»(;¼}°˜§’„NvPß`…Ðq7§²5fÖ—.…c+N0”¯á*}±r £žO¯mýÀP6»§PóR­fT eâW oƒçþ:;ÈM?zÂ,\¯´£»&ÔCöŸ4 è $µ%hB1À¼o˜h[Ie`®Á‡à‡øiC6¢MNð«…o€ûV˜%ïWÒ ZOooTµZÁ^û®ï²Âé&GPy üÛí`7UL~P]W¾1^'ft蟶"3Û𩚞íÏ¢¦tA6rú ÌÇ×¾¡7@^y1è…Þ&É0ò2üÞ€K`3^‡¼lwÊZúúèyÆ{À†n¥vûÜÛŠ"€ݨ¬Jý@½ŒÆ~±í>®·ót§½ì²M°"ý>à¾.s]EÜR›ÊH‡ÒŠ”pHZ<Åvzo˜ýÿð»|®JÇ ôÊËQÕ,,­®¦UÄkóéÔùò¨Å”Å*Ñ…vcž«2Ä_ú¤‚\`p ÿdÅWRYut—Y“­i€ìò6}¸Ïm鋎ÑãrZù!V‚°8Eˆ›v:d¦Ëa´¡–n=e;#0C;¡¥‚œÃ¥BkúÚ@ŸŒHÙgò˜Úˆh)ÎQ…!ÕW@¿•Ž*0o]ä'—Ò^egY[}»èLƒŸÂØßž€Úû™mN7ÿ2ž7-þ :µÁËbÓ3ÀB²•~â³·†=<®ïè#J­°ü¨Ay?C\Å1@¢¯n ñѺôcJÃâ}*0“Í*ü ñ\‚ úÙbz·¸E…çBä‡4;V‡°<oØìÚbùõ vnnàrŸÚ›jgûããÔ2Ö"õŠ—+ òU¬ÛC \ísË·°õCšTªRÓh<û\ §,x·ïv÷»G´x²4]…²*´&~Ø\R¬y¡1ˆšÍé‚ÀãáMÎÓ+Å Þ8'ó%Òw°¿˜à©–¼Ìbt0]צöíĸ²ä6ÝÅ{5Æ”Ê㙡S¬TeÈºãÆ ýÀ¯ª“ ¿[UëRáš- hç׋¨B<2¡x$û]Ÿ„D±¾ë“}©Ÿ4ˆc]~j6²zœ *!ð:á"jÏsŒ¼•òBKAY}z¼™ÆÈl$"xŒ¿ ®>ö«Ç%¼´“ô±tVãÇsz4ÌŸÕTzä-{G0Û†ë¬ÙüizØX6ÿ°ž$+jÎAÿw›ã’^·ÁàCo™z£yrC^|\Tc­öàKôÒ†ûôÅ`ëˆöv'yÜíJKx“rö8Ч(m\ƒµ¸¤C‘Ó6|¾™ ß)…âÄñûy•IÞ@öé{üG B¬4¹Êòdâ!§=FÐdÇ6$Is§ßùÝ­~—**ø¬!v Íß»oи·/? ýÓÍÿ1¾Fˆendstream endobj 152 0 obj << /Filter /FlateDecode /Length 5097 >> stream xœÍ\K“Ǒވ½lÌm÷*`Öõ Ùõ®¢‚nX’½AY¶4>iöÎC˜À`„©¡þí›™UÕ¨ª®Æ<8ŽØàºž™Y_~™•=?Ϻ–Í:üþ¿Øœt³«“ŸOý: ÿ]lfÿ}vòì®á—ÖuŽÍÎÞžø.lfDk:ÆgƉ¶sjv¶9iøüìïÐAÙ¬ƒ”-ƒ1ºÙÙåÉOÍŸ®çܶf¦Ùï¶ó~a\5—ó®í”0¬s͇äóÅ|_,³Ú6ûÕöz¾‚·NŠf¿ÅÏ¢u®Ù¿Kº¼IºüïÙÿÀŠt—®È©VZÅãŠvýþ&é½ásß)߆0­ÔÖÆNiåÅœX||¿¼ò³ëNrfÏ¸à†µ¬ã³…­Àßp¼W«kQZÛy6éD&—tcM$ãüÒìV銼œà“‚e "ïtóV‡ û7^ŠÖÍ:¬Âò><èTóv¤夵ÍõQM ϼ„ÊìÂu­1" ô[l-ª&4Û*£ÁʨqsÞxCË”-—Ü™Ðæß}“|ÕÚÎò;Gaƒš÷_µ•Íí¼¶2¦Úއ]4_ÕFÔ­Ö†¹Ðä?êë’\ØAçóó9œ ‰-dvb2 ØÝ$šØeöËš¤È¦i…ŒòÕ¿o÷ŸnÞàú¾>;ù+.Òήú8`vö @Ä·'F (àÐ+8Ôr¶9Q\¡åÄÖ'?>F\«u3ý2#ëíU£ÉºÀBð¼øõþKMŽ6°ZHˆ!·úÛ›ä´!Íæ³p¦Õ Ÿê|ðQt‚Åù2ܦò0Ef>"Üa²Æ²û[þ½ön«Õö.£•œ§F‹fkLOXó—Ô8·7`Ï(OÞlwƒi‚r€ÏuÄÛ¤0¾üÕ#)×@k¹K‘°Ÿ×,šw,:.úË¿üñËÚºÂZ`9[€E ØÁXVûùBs…’;b.Ð ¾XÃmǧl‡1Óêèb¢íäÎlõót/„~ î8z:ÝÏN1c?Nó‘ H“¹¼{(K“”þý=”®R'۾ö߸é$êx¡”àÍ¿M)¸c­*Á蟦àÿ‡›…­(ü:QÈ­ª#ÙµV˨£è´Úßçp:ž ¹vÐê‡9C˜6î tuîðU™;U5¸ˆ‡èŠÓšæ%qS+ää±ZíW}#EÂÀK;)?‹¿v&JôË—G±XXür·Lép:Ûrñ}6;®Œ9©ÛN<Ò2lnG=<Ù!,µc–O9uf[qØYʸÖqX|hò¯µ‰Mk}µèœ¼Ó¢½Ó¤ŸžßàUA†9G¯üûáƒ_kû€Ëlà/fU¥rôG‡ b¨Ä†çÔet5ÃŽD•_ƒ?3Ê '`Â1q¥1ЛÁÆZ5ăgs‹~Q¨f™âëzÖ@ÏÜmî˜jþ´¹)Z¬e“}»Æ£Þ).‹`â2ÆÕ꟤€ó+Îã¶ÜÊ …æ»ï^}YP  6Ȇ‡‰ýïÛüná;0, ß-7ìw«‹ÐT«f³õ<An2¦^÷aNkš_Vûwá›ÌwµNó}“„Š–cØ~y O°%&ü†h£º dI³¦PZÒy½ê«“hîE¦4Aj¾ÑAjêó&‘I>eAÚÜö«“³ÿ:à–‘Zx%Dœ_/^ÙIX*o²\F]¾!]‘}»Ä ,THáw âm-(¤“º9{—Xê›°Øûzõžâj¦K#X¥ž/lÖÁ’'(jÜcÍjò$d{*ìz?ÎmzØöAR`‰û]:Òu²·l¾"þoÀÞ$'¦Š®ÞmâÈø{ÖÿMêï³3¼Ýe»¼ K³`4×ÙƒrI*(7¦·ÏÆÝ}œ+ÜÃH Цs‘šNÅR=S­To:2Ïæ›¹•hlšÌ_¢K<œåÇØŽ *GYJ¿„ôšä ÕòX{ Þ¶ùv¹Ù,Ã×Ng±[®ÖûUž -Á GŠ uçzÜî6~Ñ#«›]Ñ'i¸‰K¹¾Èt™ã~µàš?dÍ@²ç5½‡Ý ò:ry åx§c»ú3}PÞ{¤$ÕàŽÃZ Îbè-š¥g¿®sÔèWt û]lnx®nˆf]«(«µ›Î¥ !$ÁÀ[ÍÙ Î19FL‚½ÛïoúçÏž]nWívwõ º1`ôÏ:À8Ì<0`QÒènH×=<…¯:K§ý©´,ƒøy»¤ƒÎθ!%'7 òÖ¯6­‘Š}ÆæˆV‘ÎÖþÅgL¶Bjîé¨$ Þ±õd„ƒùª®Cžùã'²!éćp‚ž‡ÖÛäA5ÑϬk5D÷ [ „yžÙ-%³Ú,-àzf‘1ž1àûß3 Q-?ð€òä7ÍoR³_¥®ä*,Iy³B½åý锇ù7<šŠc†¿ßßlx.e„@}àîo3D;ìm‚úÝyb8È}‚Î;”‡ €Pù—ÙöD;œe€mý*ƒŒOq9Ê“ì(ÁºË)ò™Ï >Âkn‚g¾Itž¼Wxfg‰gN…Ô5]"ÂÞæfZ¢95©¦6©ÄF9iSì¾ÖF›u”NÌt4VŒ_Xäø8‹ú,’ß±šðE$ÞOÂ"^†i€•ôéÈéÂúÌSîÃ*áo߆)¸©ÝtBP0&h¥m–åì?%HˆZtg š(Öênˆa§Í€·<^å5«þ¹o“µ€€S‡®•àËÂêpÌóæ-ð‘k4WMIb—ÞzWM¿Ùn÷ïÚÐæÐä=&ãþóß^½:¥-à­ªæ®8X—oc7qèÆqzøyÿñ"~±i›ÃÐm®Ì^\œÓmÃ)fŸOczó“^§÷ŸÏOãp ø,ãå÷/:?(ŽôúÝòWLª Û©N-aèý><ÓH~óòÕ_Ÿ]¬¡å›]eÐ(®Ð( ñÉOÕ¦¿]õíõ‡õú<ˆyìøŸ‡}ýÖ/Í/µùay}ù‡U¿'Ñ‘Q¼Ú^ý™„ñ»ÓoÚ¶…WI FEföRºÏ.ëw-ïtLBFû©0ðwÅØp›¥>‘6òCdYOuZ f<’?@XS™àHpëâÛ×ÒÐ׿OAÚEæ¶pœN.1dºe#@Àß;ÀÌ#Ñä"Ûßñ_ÀƉöÃI[͉ö@pÄÙq2=Ž8hqˆËФ+³JÙâ–»ØÌ!pÇñw4©élSàía˜UvlÃ@àƒŒ8¥,Æ2Âw …‘з»¯XB '¦ ”éW—¹u EÆ,I“ V™{Œ˜j`¼ˆtb¢3³:íà Ð|½ÝW3ÐÿýíóÚ^ "„è°Ú)¢ß`a‚1ì`b•‹>š¼l"š€›HcøeÄH/õ‘:Ï|ìS» ü2®²XkÖhÑÂÓ˜ù@æRµr±Y’žéãäþ9½ Š‚Ò®.(Êó‡€cn^.o¦†ÊÓ{R¯ê:ð†‡j½QÍle”}ÃÂ'M×íjŠL—Õ-„Ù2•ÁÀ½pä't”ú15½Íj½Ü­?ùš;.'t øÎõPZ¸ÿxñb½ê÷çÍ-‘ÏZ '¡¼û§ç´ÎÝãTµ‹•{ŽùȋծjÍÁüJõN3èšÑ»8TX¶fL¯™¾Ûæ `;8Ø\„óßq’ô–[y9F–Ü®¯÷4¸ÚE5‡"<êÅ â0$ÜjÑ áÉ"2Z6Æ`qÙö[PQ ¶JŽ<¼N§tˆ¤@pjšåÖ³FÈz' "±…z¶ï¾âf w1/ãkŠ,¿¸NÑj—ûÇ=c![¨4g(Èfµ_&/wŠà¡è3eÏ{¹5Šù u¼â]?¤ê5fùÓy@¶t(éBTTR*ÂW$ W¦¼ïí ë©ê¡ëàhFàÅKΉË"`WrL&3ö_%‹^“-s¾Ò_vXœN܆ðƃIƒÁD®v6³Oñµ Gô@âKWÒGž+w„—!K"Ø>yJ˜}‚\²ŸNÇ‚Tå³ò ™éZ¦âáÊÞ¤•¶ƒbùÁ%,wWé)ÎëTÞóVŸX"[û2u&Õr›ÞÑ,ýT¾´}½Rì,™ˆ$·c»H0ÆøÕ×& ›ÕÅÛm÷x“*Ýkz5IÚsàÞŽ°èn¸ÍqgþâÖ­Lß0 WmXâˆËrºö>Ëáþq*“ûÍÞ÷íð®«ÏÌ-ßuÓüX¡~f3¡Œ ߺWÇjç&ªÙ~­à3Fõ²šÊÙ>«:N˜à4_„À²iãÃoæ‘=”U¡º1“#!€'zàk¾[™{…´¢›œ$=Ä·þx%KžFáY6wÇ{Ù¹´¼tÔ¦Ïo9"¥k`¶¼ÿ¢~rƒ»MýÍü]¼ìlê/¨tž&#Ž\wTÙö—gÊÄ}ÈÝÅPÆV–wÓÌl|ùÒåå ( s-Þ§‹%/ÕÊ ÛjeЇ­¯\ÆRf¨^Jå}Æþ7'éFƒkd¥X»YŠ$ËxJÈãÙ ¹÷‹`£8È1®D ß–BÎ`eÁ~äèeæ¬Üà×Ô(©Ìˆ;$ªvo«)ÇXÜÛbƒx’{[œ·zã9žrg葇y`°iÿ€ÂPNU/ôI«pboH§@ù/ih èͬ)­¡C`±R[p¾~¡¼Ò›Ú%ýnPŠØ‡>¬¸á9hS×´)Ÿ’ô…Ú8†¬¼"ŽoQÉ”U«ùk:…ÐP q2V³Õt*[fÆâgÉß ;ü%T©Ò¾BúÌÇHˆ¯j2È‹ y®³b¬JšÉï$K¡‹Dbó×£sE† õûÉr#:¯Ô®ÔÓn·Ýõa&W¾þ—S(ßïL<òÚl­¶ÙÚÖ0ðpiz ¦úɺ=æZc†?åâ _œýð·¯kêצÕüÁêÿ «³=«Y½Í×?ÊåIÀ '²ÕT«˜,†Â6õÚà‰M¥Ç¹ÎãDzȤ.¶Âã¯ýXHrGœ…{Þ¯H:´¸Xö} û’·‰$-j br§F£Þ§Â7¬uç‚lÙ¿jå·}ô­"ï¾ð¯ñ²")£Q_d߯Ihí£Âû½t ×—OZS‰yHö2ˆCV!ßàa¥ ŽÖcÅ¿7–W¦)%iF/ˆ…NÕÚý#”Μ£X»ì+´o–﫨3EÞù×É<ŠcÀ7Ħ=ù?ÐBcpendstream endobj 153 0 obj << /Filter /FlateDecode /Length 4361 >> stream xœ­[KsÜÈ‘¾ódŸ=±Aë`£wÕXÔ»04³ö®òÌx†öE½ˆ¤¨¶ºÙJäæ·ofVP𤯡ª¨GVV>¾|ôÇÓªd§þóÿ_ìOªÓë“'Œžžúÿ.ö§ßœŸüçÊ“²®jvzþîÄMa§\³²2æÔÔ¢¬juz¾?ySüµi?¬ÖBÀ#fŠowW«uUVÊ2«m±O¾Ý¬¸…/µ*únõ¿ç¸Ž7âº*ema³óË“B¬Îÿy²–Ò”ÖÈÓµP¥ÕÒâ«7Åùû®+-¯ë6²ÆmŠKܯÖÌhá£à¬²Å;z¬”®tÑÜESw=Í-ºÛÕš›²–¼ð$××»ˆ¿l¿¢™Â°ªNß4ýöpƒ+YØ\Àvã‡ÖQW׺èßG ªa|s=?oûí'b«ˆ0¡ð]/Óü_Ì⦧wž$Ë‹Má9.EÂq)K&=ÃwÛ›eÿp{uvöâÕÿ¼@öOoÈ*üèÆ¿)6+¦‹ýÁqÐ ™!‘€]çÏ“ÜóÃnwX…ÙŸÙ5CŽá͉ª¶pÔ~|‘Ìnél „ðLÖ§k&J%kîˆì'¢BóŒÔ"ÇfKc­ð iÞw3\àÖ—nã븠sHøø¡¹Æ+îˆDù^ÉâÛ_}÷µÿZû£¸é$- Kð¸ñ¬y«ôÞ Â,X:ä"þ’Hs2ìÒ¯$@Yº¬Ø¬¥*L¬Ö¥ >týížoŠŸîÚO›¢ßî¯^^}ººé7«Ÿï_®ÖŠ+¸wU\6}s†è™‚U$y(x V9ë@[0¯OÎÿýMñ™£’šÎ[iôvwѱöá•BëÝRj› C}©PÉ¥ysrš² âP×v®õ¸1Ÿ™ÖãsÉŠ·1A_UÕÒÚaÃÉA\ §•é­ýfùªû@¤,š›ÄÔ¸ç°pèUéÔC<¾ëgÃ%èo´hÆi®5p푦g: ÏѲñxïøZnCèÇ0Y8 ãµI÷‡__ED , ÁÉÎ6(£ªgöÁ),K üÁYaЈO+¥TgÛ6}, 9M1¦§ Ê}Κ¨ÒpcD°& €çq–À øHÊÇØ{P`’­ì2ÎWŒÍý(nhžž‰@ 2Ü_ùU¬9%A"êà—&Ø~Ô)ÑpóENiÍ ÀM©`UŽÛ1ÔÈ^"Gwñ¨CÑŸ¹!%…Ql¥‚•փ݈Q|› ôp³"Ø„¼A3*‚ÝÆ¡ç|îD rW±'éûD ¯ývàÑg7k¾¹M,¶‹wÛn&=gÉ'âæ.‹ÏÛ˜”lÀ¤L !°cí-9µ’ƒª½qY`d’ð¢™Úñ ½Cðà9þ°Ûî·»¦-ÁéNœ~å’–@ÝMv‰…ëÃùLqxçg#”œ»”H4y­K.'¡TÓ^{WÅM%‡è>¶Jh~ú.1€7SEÿz! -…’&XØ[¼g83 5ñþaˆ,ΘÅwýú%m†·š†Ÿ.Â4;NãÑ4nŒðÂA´aƒÅI §Ú:sûâ¢ÝöW-x„³‹Mñâ¿¿ýÇ‹—/¾ùó·öàHÜhD<8â=/~øþܶ‡·Û> zñê{šâI@ûxÕ7å«ïÏ*GH£ïºþìO¯^ÿôǰô»¶Ùîú‡³ßn»òæn·Û;tÕb,PØïÆ#þÖ-òrd°ŸáBà¸û F÷Çææò¿¶@´Ùï ûõáú;"SðSŽ'¶mÒx IíðÆ §ZÂÛšhkˆò"Ú¬~¦€°ÄwH»ˆ;-K%ñ\1 Á>ÉÉ”0wª:ÏPïggt\Y`h.I‚Ô݃žeh*T5.”“% ô×^ ¬ü›]Ô]!,–dî$ Dç[•û`fΓ3+nyf—Ó¦Ù«ƒI– †çvA·k=GIÜh˜¶.q>¹3¢TÚ/ï™yÄ\Úñ¦ÙYâ “LØ®¡¬Z—ø'ÊŒHƒýöSHüKW PMT““Lç‡pÅÒgakÅÂ#V™¹ÿ3Q¦X•À‚5»´v¹9(ªÃðÄÐA˜Š:Í9%…âpe*aM?ÂáYа¡y¦5Ñ ÂDr1éÃK>Öq¾,lŠý/[ðS†ÐOq‚¨¬T‚ÈQry¼dè?ªŠâîV‚¡SœÓÑŠ ãPïú*ùºÝ;qͶbT¥Ž’ÞßßDy”Jᓦ„’ÒêiLNc$ð+½óÄö%÷ÐùIp„c £ÿ¬$Gu Ûè§É;¿,ˆÀ6|®©ª§&¦ãÒ¿×ô{9 »®d´Ü›`ßÜ &öí—Ï+SZïæú˜¾xw ^>!¤«Ÿ‚foêÆ"ÁA‰ªéû²Dá%[Ÿ£Å[ÆŠÞ¥§µD?AÀÔÍív~~=‰†šÝE¬C 0mfuZB¨¤ ã²DH{UÏRÏò[Ú–¼ …Ûöêr{Ñç,õZÂ5+& (vq¢;––D‡|ýSã!Œó/º&û/…ʆX«xÚÝ!K*Þ†©S‰)Œcñ„Â(¥à)´Ó›Úuè4TEvå¥Np`m]¡?É0’ŒÑy Ÿ¯ìç[58c²·m´Ä<4¤êçe 1ÇÉe€7WŸ±fc¬$+3D¬ rÖ¹8òÈw?¬EÍ|»C ˆ2¡»“™GÁ#2’hëbãúUУ1©{Ê`Tß6]ïKáØut < +Ú‰ ŽªºÍ–öap´ÛCu¼(y&†â€MLè™4‹¶Ùe/¦.5gO뮡¦+•kBýü>5\cev ýK¢jß–H¥–¹j¡©üôÐöàªÐNz)®ÃpY£Æ%üƒ¸­*aÑ$õœR`„*ï}jS`wÔÐõz SnÁ”iZ*6+ßæ6Äüie±àb—˜HŒßTö:?6m£¸ÆÈ«® wqlàâÄ5œØ…ç6i?ílk'š9 p"¿©¥¢ØÆy«ãͳމM ؤø‚ &”~’ÒJ°çÛ!É,EׄcnŽ)qÌûÕRÞ6ÉFݯC-bðií혡Òröâ>ÛÈOœUõi&Yá`,]ýç®™!Êb©>¤çŸÒôºYa “<Žß_‘s- 5p·ž6øew®K€aç«û[0 —Gê—áÊ`-ç úæƒÃÚ¤RØùVßPi5Ó$Ø:©žS>˜2^:ÓÈí{r[Bj¦šxÀ´áÝíVágóþ:ØI™âWÉBÁâJÌþä zNˆrsbn}ÇÏ¡nÍæéѨK7oö·ÏDìa3µvÉËÃÙ»»› ¼º 5¹ÎßNÑ67V¹6EÒ…\ÜŸ±…FâlO¨Ä>: x'U÷**å‡r±Ôf»}§w·“eÇ;ÿ¤q–qÛ2¤ ‡™‚éîÂj™*¬Tä1›­ÁE|îÆ óîcgJéGäCÁ­MҼɯ•¶éo †=y.÷=`Æ—c÷/íýØNC΂Û#¿dXçzò>ÓýrLHO2Lƒz‚D`âmÜ%†Hý,³æ´}’NXhr¨Áî,!…XOSj§’Œg—¼ }%l’ù9¤û¡õ¬ 8é8¹ˆ#¸ÄD‘(Ò9&UŠ{ßâ%\v{=tM&2BN+eøQ@›lœóSÂÿ8Í_­ *AÝä©JƒÁ-¡ íÝ´ä +~Ë–Z¯ÕãÉe¿º œt›]Œ8uÈ»¹™±-ÈåÝð(Š®Q‹SŒßøÇ5{äöi>ÛDߺ´•zŸÝSò†ý÷„ùñppCÇ ÁI» ÞÜŒŸR‘gÌå¿]ò«J4Êa.à‡èU†_rk%tvŒò'Õyc\J?Œ¥ŒcDŒ$Å]®D İI—øa_Bf\%Kaeý²3!>ì,外Üo)¼–j™¢6Ôk4S[ß§<éƒéü çTÌÀãgš‰Ý]ä 'þâcÙ¦;‘K¥ÑÞ&àk”xúšüˆf’ãÊŒv,sØ, G§ÛNœwlƒyDÐ~͉¦òhC;iì‚;‹c”qk÷ÓIaÛ¿:IRŽÅ›¿ü?CÇÃendstream endobj 154 0 obj << /Filter /FlateDecode /Length 6020 >> stream xœí][9v`ßúig_7‚ŸJATáý2ÆÙ$³“ ² vÜ@v@î–Ûšiµz%µÇÞ_ŸsHVYb©JW·ƒ~h©Äb‘ç~?²þ2"%ü ÿoWdtwõ—+ꮎ¿›Å蟯¯þñ¦àJi‰¥£ëwWþ:Ò¼Ô„²‘¶¼$VŽ®W…_ÿ7H“Ü DI¡2º¾½zSüáaÌLIÕÅfµOð e²¸“’H®)±ÅSôùf<Á/†eŠÍ|ù0žpÎJ+x±Yâg^Z[lÞG·Ì¢[þ÷úßaDŠÄ#²²F²jD«õæ1º{ÁÆþ¦t\—BSÝß1½3 #‚?MïüÓL„§§œ0MKJØhÂEÉñö÷¯Õ µP¼XßÄßVóøiž”p-K[ü~l€@åjáFa¤Jèw?u7à*4³8¤ï®¯þtå%@ŽVÝœ×b=›cÆsäc Š•JqÇø)2>ôÚÝà9A‚•û“$J¸þ6Ÿgu—@@3º[_£ÍègxÂ÷W¸á„O‚p‰ÑâJ2CKC« ÷W¯ög[*mìH ^¡qoŠ „ $TÔž×D "pÄÒòâ~ÿòS&.“Ç*]*D°øÚëM:2YR·øŸÂ7I{%ÌêJ&7/A.RFÇ9Ù£ImC§/±OYj×+ ¨²»þ¹g< 27šD-“¸`ÜðjäcߦÅ|iKNehóHöÓ‹\_RÆáÞ ¾JmüLcÌú)j¸ú0ÿ0–dŠQlÕÏ¥W¹j˜†®X°ƒMœ XlBX—Òr£ªn~Ìõf– ð73U2.©êb¯ñÆfÔ3¸jÛÉaÁj ,£†v¼ø6OGÐl™ªý÷Èaa¬95¥ÔÊÊá‚”úP³§öð-ê‚>œºõôÇyý±h{-­ôgý´ú0Dì1êS9k®gß¾O`n¼ø/QZa 4€Ù[¡”Ѐ”Bhi)ò$++V•†‹_”åF§Q‘N:Z¢N@G¡õát¬J/·½Jfε{û¶£)”­IGs„¡ "VZi×W¹GùχI´6{1é¶«öNëÅÀp[IÕ‹åííz—õb§°^ï¢vÓù}"¯ öÖTCšBA‚N¦±¶TˆÊ%uʃh¼P—<0[Ëø>Æ}j•-mÅ‚DÖþÅ;àÌIÇ~„(„äÊB&cŠ8&t!œmeP|n¥]r‰9'¤wEœsNÿç©ÓUä!{#Ë7Å¿¹›;C"[ZÉkoî s€)i”wÿ¢±$}ID×L54ñš_庄fšÜ/ï²j qc­;Ï+T}þ™^^ÇdÔ¼šÞ‹›§Åûé_û‚UUZ-Jöâ5.ñ kšz¹ÂÚ„O;²Áj¶ïòº!©¬ó3 Ìû|çDöŒÌŽÏ¹ŠN•†E¤±N ’+5ØH0,qË£4R›~ƒ[kØáéãY]n­4¢)Vº³âtìŸÆiaì®}¯UrPšÚA’nyÉжWrý2ÈdÒ ”¦‰rŒÞ"n"£”tw‰Ö{µüMæÅÈ;“¨Ã•¹‚§m` ÇX4ä@Sˆ¦ê+»ª†ÉhêR¨æ¥ Ð¥’%ÓÒ #Rn)[öДŠhi­0ÉpVñvö°žo> 1‹ê¨Ø§?fq}ôWÃÞw˜Ó„•ÏÔþÏf_*9ÊáTSìöû Ä®Z ²ìýˆ5Dâ8i%#$#ì ‚ôžÄ ;µsËèµGFä:“ŠCp9TÇ«¦C”¢Ø¢ÐªšX H=FhL¥¦oú›ƒþ†j?‘‚ƒ½ïKµa”ògƒ9VX¡íË–'’ƒ{1î–|ÐZ]çwÎgÛ€=/çƒ"ëb¸TøvÜRé;`±Mˆ³©j±my7ŒýG×Üv.¸ù2 M3µùogqqf•ÉÜü¢B HZ­Ï½”w&ùIòžª>g3¿Ê 8 Q¼Hóž-q;aQ&Sƒ×©à«(Sø"jçÏ.ŽìÒcpLWÓq‹~·ówïήÆ=–Ûx!>‡þ$d»Ð~¸3C;ô¸ªÙœ£¸ºCë¬_??'81ªO©[ŸP…ÓLR‡b}Z|øË@5^!`l—òñgÄò^'І{òqÖ¡{ƒ t.‘öSèÛ,¥)…QÛv’´kA¼›ÒFœÀG^f=±W»(8IV#cÞ¯ž .Æ©—á•zM$%X,nCeâµ H_•Tðñ8¨Ì!Ü=g0zRM iêzuõÍ.†Àà(#Fv1„Ù’V¸âÏèÊ.©n:]5y±ÜGÛ~H!Ï›Õ<Åz'ämÐ7^,’ëÓ‡ ZÌäÒM‰åV¤››ùb nÈÈ–V1»9S2ÅŒmñC¦J!’ð@n`»$&f{R#šP¸ÒÐÒ”‚V]’{0óÁ* /az¡ËãR¤Úü?åÃ<&„e}ùŒàEûiüíS¾"B‘ÿ•Ø®ëÍÁ­Ê—¯"9ÛL»|F² RÌ×IvS\*[%iĶ? û.#™Å䢽Á†’/4èÔRàS–ŠØ´·©j¨GS†} Éì‰ó½ œî®æù¾N]¨º–ìÝnˆØXB@Ý›v¸$À¨AÇ Ìs[°)ÍI4pæX¡¬e_¼ª¤Î Ä\*ð:CHB‡¶”Kg}€¶(ЩW5.'YŒ)•JV6<@ÉÂ>Ÿ›dÕñêÑ’% X¯D´²x-ܯ•­‹ÃXîf¦mª‡Ôu€Q†òsØë£¡­BO+öõ‹m.ÂÐ!¢Ý3Âh{à(ÂÀxóY›ÄçR½Ý rb¸ŠÍš»Ú@Nˆ‡rfMB4ßÉP6 ±)ÐŽ*Â:µ¹â'WŽ:1Cw ^e:u·Šìƒ?˰.Tß™>@)%­½»ÅÙÔ‰\~ö`© ȨƒÀô`È[Õt(a'‰ßçùeuè]hÙCbÃ.Fapå#°âm ³‡y0FÁ)$"„-®„Û-Ò\ÙæÁÁðì€`aÁŽzU‰zJ••ŽÓçWÙm;¾·<±ºµ§êÒØ¦áel[a…† œŒP"dñ.¸€ o°;§Š*DLBæã ƒ ø(¥"*^Bb¾Æ=|ùv+°pÆ}Âka¡Þ^‡`±#a©Ãk|übcç*~êL˪ؙ1}´¬=ïØôömN(p­K9fÞƒ„"ÊæIR’}BÑ—¢u>P(²³a0H“¥’”ê“%N}U.CJÖ,šxëÖ»Š'M¿ó[ó/6›ÕümdÄâM|›éÛxKŸÛÅ'ð{²1t5½q&1Zi¥I©T*ÐÍMí°Ðº¢mŸŸÆmD_“£ŸF?žúé.'Ü”÷ÿfâfž§^8ÐqskîqˆòÕW9ãÄKª[µÈ.þsުƷ|Ÿu埸]W%ooOºL¨£b*¹8—\èÍ„ÁmÙ#a8…@ÖŠP@}eWèBÅCèÍ4ÚA9Bì¶eþ0"š!žHV`sR¡JºO,Ü–îb*nwÖˆ»_Ù1¶Ý[.н JʈsYf½-4(§p4WÞð¾˜úšœ¡ê )¡$DˆIf¶_]Ù%BÀ¼†•…ã‚.¥… ¨æ|,›ˆ•Ãwb?á¸ý7xñÿ\nÜy]ßy1ñ W¹+ªVb#+KèÆ=þ*óhÐGÍÞ@Äe$ĨhnøXÜ,qS¬µ„ÆÑ ±þ|Š«ó ”„PU2‹0' AN´8˜|˜Ná% …•Šbvãõf ^²@‘t÷Q”odu¼ÀàQCè7[¹£û|מ“Dh-Œ½4]²’Ìltáôfòègk­L)ƒ’œ™ŒÄp³]:I’Žãef.úFþ¤K5ÑôfT³‘]‡°&» – K{¸&-¯V¦·™ÑAž ‡¸§á2:Ú1:4ÓÑð€?«YņüXîhëL‹Lo^‚<ÖæÅK$æO(Ðh^Ƥ,p;uÚ0ûÿÞê Ã'à¦KEƒ CÙaÒqT"˜oŽîƈ I‚93øë§‡`ÀÑz»çC 4㮉1ŽØ Ž®2÷¸8a*{ï:"üƒûV¬fkß'h-ž´ ì f!0¤2¿£·ÔC8aÔm¦ö¼¤˜cþ6ÂÜW'·(Z°oÆ!„3 ×`ŠO8…é´hã|¢ pŒr´`!A†&ø‡,jÔ˜ÀjÌr½™¤ÏÜÌÓÍrå±À<‹y8- ©2 lÜûÀP!E80§×ªœ[>ï¡9&GÌ•:úÀPIp…ÐB¤DoZu\+Wš_\aQƒºêÊáçƒrQvØéÿÇéênžç¯Úÿ°I†¡j½}øU6PãÿÕõÇ\©Ä–ÂUfâ†Ï{ûÅY0«{Ÿ¶7K÷:7LUš˜âÏëô Žƒ.Ýgåð×Y‹ÆÛÖ¤K!û;N21Øxê× ˆ ¾Ð·Sa€K¤ªÛ³ªÑÀ%ºT×-ÃÆ QݨnEÌ×ù)¦8íßòÖ%þ¦ÕQƒO­AßN;×%½6ÒÖ>¶Ãè¡›Ç3gÊ€›zýÖ»]³3ûƒ\s­ßs̓·ÉéÓéÝ&W5¼ìV¯“l5?œq®1ŒqÏá(Æ3#k['RëR¡b·œs725 Ç{è!XSEîuÔ_°"÷à ï‚+~®“›·6¼va¾Ììç˜ý±'TTJTÉ…LÜvÇ‚{VEO RÆÇÏqÍÝ0¡xé]yù½·H¥ŠÞfv¥u".Wo¬vöèRލa×Z8ƈƒ6]a1Ùoº2ž§ÚxšýÂ{ÂSÚÚ¶CoŠ[k:b`à-ÁcU¦=Î5íU& l­WâzeHZJϺ¡ð:勞Tžd;Ÿ!][‚itµjØ««}$ÐÕÓlüEWÓÕÌÞ¯zinGº`..ŠsȉbÚ#´t±iÜð9mþzÞ0\)Ò¬‘ŒÎJ+¹b['”_蔈–W%µ{lßj¬x|Pù©‘ˆQ-£‹È(.®°èPçáP´×©„[(Ö™âv]ºÍ §Ä6nïAøÌp§ƒ±­©å°¯3S3K7/|ØXרú€uÑ™]ðÇz<έ_æàaCdn0žR3=O9%{J<¥³•WºA»_¾Î‚ ¡¥VÖ^@¢»"t¥¤‰´ ‹‚ Ý­¯ì®ä»Q:€~¨Þ‰®¼]‰8ÿÝR Sƒšì’:ÄBÅíwØ%uR_­9|T#tf—Ði»„î¼Ó‚¢1ýÐM¦(¾v#‚nVW†n2\iðç+ŸºÉJUoéæ ¶¸^r 7%1’BD"WÂakVÓ‡Ûå"üÄT1û­׬œ9Ì›ÿɃ;ð³r(œw«éü~ãQ?RŸò K|‚n±¶Ð¥q= K¬é6ÈÒOIÅSB4Mf äXdv¯\ S©¡¦î~øÍ£Ÿ%0e‡GšõÜ+ œ{.ÏÑð7ÃvÁOñe‹ºw>~ÚG[Sfæð§ÕõGœnUŠèª@©œG¨1|-3mƒÆLªûÑôïÀ¥ReÙN‘¶ð¨¸páð¨ID·m<*šÀ¸áÌäÀË@}0 H¯lªªV8L—6ëÐg•™ Òä`+ßÔå§ŽET:9$ª)!!ƒÜ±ž*œ­Ÿ‡¢N–ݘJáÜgÌæ ©ˆÀƒê2TÆDˆ°3žxؤæzŒ¦C<Нhhld,Tw#ßýͺsê_aáNyîT{k˜ IâaÞ¹ý®CNqH´â¨Àú»"¥!Œ!|ÖcP ªÃ *„ª ªáàÚ{!¨>©!¨üXê i8¤Ô†Ú‚¯982»·2¤•Ú䥘ëÍŽboµ\²¤@<ÝL+°á)Çø²"ÜË`!¢×@J¡då·x9ž ˜¸ñÝGß=a„d,ïgkA…¾E´²Öùð?<ÜÎí…h_ÆÁÐèíáܹ2ßþ´ú^°ˆ‹pðWQܸî+ÝZzøôÃe›i%¡Ï£/9)˜@FC±è;a Œ¤ªëÿ÷Ø ˆZébcÜk#ß>ë{âk<¸ð €§Â?Ï7ïÃ7 ÌX.¢ÖóÅc»„„?)UÄ×WË "0làyŠêõSÇ»@·ûÖݘx±X U÷ëõî×M¿‰<%Ëúw¡WƒûƒÒ®ÜÍRq•l•ÈétË£˜R CNA«@sWÕ0x[DÓu“ ¡B„5‘È.Ô "vñ"óèÒ‰¯hxÿãêúïß/ã`ðFÞ?ÌÐ_Ÿùë¯Ö䲇œŠv’ÓwzW=¬¦‹‰T¶Vh­s¡ˆÏü~êbdâ þëO>FTðãfú1ôe`˪QËR,ý‹Ráyc‰‹9‰¦VaTCÓ }ì_% õh‰xn*zˆâg?Wîµ g”|è¢ä–ÉAÈì'‰ÄJTÃ[£N¤lî©ÿåSèÉmºiI2Ií`îÝj¶µRÆ ƒÖa¥ ÅKVÂå1s'Ý&•âd#@ëÐܦ™ËÔÉíÞçú-x[‚оRØDkõñ¸Ÿ·îî‘ÅzŽÅFö,Û”‰ü ¨Ÿp;Ñ †öŸbIHOöQsrëB uð²ÁuùåÇ-ïé¦Ç¶} ØÆFD’[À*øD¹‘úwýÞÙuuCZ†l^GQ¶Qt.v(z5µ-Gޤth?µaÂó/¼ì<&«ÈÓôåô e4éà¨ó h2°=¶E­±p\ÁÐçÁ÷„nzî-ŒÀÀ.åÐ,ðk¢æœgcÛá7$¥÷/ÐÐР€éÑÎŤz,—·]Èl*g¢î—w“÷‘/†Æ å|‰Ÿ¯Nrw§Nަé> ß0õÉñÓS®ÃljâWJìí*ô†ñõ¶.y»„|GfÇgãìœuØÖVçŠh¤®ßçÔ5H†lÎöCÔºeî\tÑ-šïb?9TÇbcq¿ w“Œ’ÿ³m\ÝÎyÛv|åg;Ü6U®&¨3ŽƒÌÈ+&.¹z‚£M^>ü±qe1³ã>;#ÖβÚÛB䘘¡WÞaß¿V»¼¹w/(,ÓɃW¸‡¸ sè:w·$×?n<¨Cˆß"xÉÚW8\f <¸Ï/·< &4Š¡ÃÝæWΊóMë½ÍÆ’ÊKì:ñÞʹ\ÈBÌíÔ•Âßnêªz‹ß»é30šnk¢’ÔÁ ù·Äót)‚&—Ï/]mûOWÿ } endstream endobj 155 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4144 >> stream xœX T×¶­¶¡«DDB¥BR%ÎâF_œbœqŽ¢¨8tãˆL Ò€(4ÈÐÍ¡QfD&[†FdèÆ!AÔÄÄ)£®¼DMâ3|Cô%DOáåÿüÛŠI^’ÿÖ§èµXÕU÷޳Ͼ{±éÃÈd²‹—¼ª÷ú˜Yá!­·Ü¬}š×ík ör°·9ö*¯sÂ/=ð¡#cý13lVøìís#"wF-Шcb7,Ùµq“ï–­A~Á!¡þöÆÄ)cÆŽ{}¼À0ƒ˜¥Ì`Æ—Â,c†1~Ì»ÌrfãÉø3³˜UÌjf3– `æ2>Ì8f>³€YÈL`3K˜·%ã̸0®Œ;ãÀ `œžyYÖI×ÌØ0IL—l“¬½Ï¼>ÈGÊ÷ÙLµI·y`;ÜV§è¯(a²)Ü«Üv®£¯ºo›]y?¾_°½`ÿiûþ-v ðpű¯£à8Ó1Á±ë¥2§=hrøE¾LÏ€½-ÒºhYw›³e4Kòº’ê÷G‚[èS“cIFÏ×ä8Їë"ti\¬JqØðTƒn@…ž³°Q° Âó3sÁ`Ø×ŽÎ®X¦¸H¼mǨu†Nh„:øªô¹‚©J²G}±ÅÖ¡Û–Nm´4Y"LN(G®C™ Ÿ+u:[|°˜}øé3{ÉÖAB:öQðß‘i{mUì…lØ(’O}Tl…á38B¯çkðÁ –¿Ì—í—Ž•ENˆñÐrŬå¾o ‹ ‡âü_•wGá%<˜tôÏÅ!Æ#wà$×1ñK2A虢zÜÓé¡’V*pòíûß‹dÞUÎÝ8›ôÈH¬ÀŠŸÊ¦­ÛÊÅAS+Åø>ÐK³Ntø¥ÏëZ&¥AzÅ$«E{,@{¹dÄp%º{=$ãÈÄ ƒ‰3qéƒãp⽇è$û<å$ QgÀ¾wNÂû¥ Byóñƒø¶—„Úþ`-f´–I°`p4Fj0Ú"»€R†YÞˆ1Ê’”ŒÝ‰‰ M’Èh¢ô aüA¿‹[ƒÏ ðCÑ“ç.Ýz”w nöW×9†¤\(® •"†±%̘íwj~åLp#{ÉX2”l&8’®GdÑíDÚD²Â‚CMg opê¢]ÌB{ÞQº‹‘JÆÞ'î¾+£ƒ7§Y¾“Ìüµƒ=9ÑÁwÙª¨Öˆ€ÃמÜÅa"±w&Cg¯\¤R•Ÿ 0›å_>u¬½¸Éýòy_âj…÷^¨µ¡f [œpºâd3zšµfþi÷ ¬Pª2ró42 8âæóŠïó§‹f¬Q+f$ªG ¾XŒÞ ¾Ç€iaQrfE&ÚöüLßá¡ê¶U8ü"»¤µN"YyÚÕõr.ü@iºÄ*Ûü¼ä£ÞC *Wð×Ȥ?ô-®nC%-o.dù¦l}…=Úä]ËšvUU™JZ:Ë©v&Å„¯Ôàk5—kdW1îª\‰¢Ní0E ¬ÊZž·(i>œâ.߇2”gÍ0ñ9Ö¾•Af…ø [ Ù»Sô´[HÓi“SuáÅ›³¶J<8BǨÚTјjJÙÍIÍ æÞòÍÊÅÅáBÊ¡ôŒ]Ài@·S$,ÉEÙ(>$.=¾õ ·³øRºQØeæg¬f-èíô#ÊÔfìO!ï”ìÐQÙ®ög„†…,…O*¬Ç!2ýÔlúˆ€#tÜ6ºKo“Z…ÇŸÝl=wS J1m·â«jû¼kÕvI24‰’ Ë›ˆÏoà®d§¯{{ÚŒ´ª³ïŠß³|õï¿Md‡ö¤ò&ܶSÒD°HtÃFW¹äâl!6R'ÚXØ-úá ¦×pØbàThÓÓIlTlƒá˜éõ¬šÑgY;S¬‘<-2éŠ4Ti}Kð7ƒ«Š5–§&ÉD‘ô%yD‰õ¶g-Šú¹°Â`ì Ã^dqNSnŒ!µÜŠ!Ç{'ã»fí˹Ö }M¿Ý(½frª¦õZ«?.5–+Ë’`°8Š¡‚öcÖâáGìR'ªëb5Õe¥Éwå ¦ÜJ(îj˦Éâ–¼NƯ'ro䢯}þž¹õÈ¯Ü ª mв(‰?öUŽ™¼:ÐtâŸÈÔþ°_x^%åøSZå gË\–LCrè– 7ç.¸YX/}¨ Üà¦bKËhÕ©Iz½8aäìok¶–<– Ëéœê:‹ÞäªlÃö$'OúÎw†j é=)F³?À#>B[”w[µJQiø„n•h§Ïô‚NÖ˜¤ËY9Êä½ÈéÓ^ § ^§KI×Y‘ßO^Æ+ò‘táyßgÈ_bqIÏÐÔ„=a© nšuÁ>s! @›eȨ)€FÎY© ZÓªþèΙ›­‡ ’ÔY…ûr.›ƒ¤£ wi5RÝž‡vri+Å­@ ‰qéé ©BrÌöù^TT<G?Ÿ.è’}^Ÿ éz}º¨ÓÅï†N]¿«ª¬ñÀÉ;„ÍZN|æRYgÉ«¼p8Ž«E.›ân3jÓËÎá'¥.:ÏÓ:=¸*E…áïÏÄô‹gbº“ÝzˆÌ Û—žåœt6ƒÅªž'ûµY‰%àVYyû󱦻k†ÕàFCÔÓ« ŒI R?êYÒd¹´WSÝëåGœ€óV`¤ÈÍd¹•&BŒ@þG¡%3lÍŠ¬å­(î[©ía“´tþd·è\8$Hý½»\²3árëF·ÂšeeúBé›_÷¹Äò–ßyYÇF•®¯ö¡06ž $ƒ¾ngO–ššD–ŸñĆ7¾­^¿Å8òW¨Y–7еçÎgU@ ´ÆšÖ[©$[Jµ ýªñ-““Õ„‡u@‡ ÿ¹EûY´RâÒuñ)ÂŽ… 4t¢¡éè~NÄ3 þçŠ,¨ªI¾µö¤¨6ûXfu7†'2ð'o…£Ž?.½ÐMI’†–Œ¦²†Òº£åx¹Ä>c•Õ ™g¾QÔˆí´½CÇ“è!ï^!%*‘ý5™,ôŒ~ž/Õ†'Ð@¯'PM{çEø‹S¿ûú'‘x8/€‰ÄK "¶£¨@/˜<¯7XµuøzÇ­:ÜU^ïT{çÇ8ëqÖžc$³4DY[§Vjb5ïÄTnÌ]éN„wßš’hwÅÄn…- ªØ\Çñ?h#S–ì|çßËóq1NùêÌ­,«Ž(*Áxˆ€õš¡ÊNh¤J““Q”àÔŽsPDZ8ûù§ma ybuq徃.•fÄxNSsøpai™@6y*ׂÏÏa&Àµ'àÚ½{à³V¤r;@¹uë2â*ðs´Äu˹ÆK¡HD…âÆ§ñþâóxXl¹ÚK˜ßœáÁ¿%Äa«ç„Z øÅ¿q§çÿLˆÿ9Ê&õ:½ªíâô%\— _…uΖ%Ò(–ÿ€¼eáüï,þMÁGà’Õây×UÒÏÊ– ÚMÁÛ6Ö‡4¶Ô™š¬GsÚt ú7£O³ì·èû­ù[¹t×(á¿–|KdUäµZ×åºÏ k3ïì¼·†¸” ™H/íµvô}æíɺôÄ$Aµ:¢lU“'•‚ÁÓÇÙü†5…{ÄÓþGRºv>Š*ЗkÄW‡ÃJN¥y“ØŒ'b Û+¤„ÌèþîûÜß32ró„üüÜUU®½oM^ÞW?_B`:Zp¬-è¢XäKŸÑíÑ ÍØ“™–©-$S1Ä~,ÈËϽfµŠúhØ ;ÀvRf *u{ÓRÒ¨]…d˜­¤bùô?6ŠŸa¨ @ºóeF¸ÖÛ¬WØâ‚¢å±?ñvågdï¼Âk£©)>{£òŠõ m‚ù·îQ-µ²Å–®õ6Q¢t‹,fbÆuÚ7#\ï=Ô}ñXyÔ´¿àßs‚þ‡žïzºNųóš5)äZÝÑèlñDE§ÅSšÉV¥ï‹ˆÕÃîtö,µUá1¢ 2[mxHõ¥ZžÆø5J ¼nû|Ô„æëøÒâfœÖ¼Íô/´dêŠvB憣« 洛 ¸V‰“î‘×6ì V 8’åm˜½õF(rçåL%=|ÒR[zú8Í*û¡ 6+5Q௴ǭ]­õsò×”$tp ¸K$­”‚ÚCy†Œ¼¡ °¡õkà:`Ì›³a0°yqáA"?i?Ð\.òíLÃãæÐm±k&|1û üÀ8¶ó>:Š/ÄtíŽ48DžðH—ŠÊ ÈÓc€”Jèy“ô‹^olŒ,|œyáÈ™rs[Óe*g ºÊˆMiqá°ÛbÜYwØTÒúц‘—È´i¤p>"¤…|ˆ®?üŠ„ÏPŽ€©ƒEœÉIö˜àKÈåp@ûéóaêpáùzr5ÒQ´«£-ò³&s·«’lQ$¹?Á±OŸ¯ÏãÔŠm¨kÒò?-ÉÏͺKcG”4$xÄÇ…øú.i¬ææ·ANUáìlá@1 ú­€c Ñæâ-ôÄy®¹yÔ‡M/¸O=ƇȾÂ!rŒ‘8e˶Ú·…šBššLµ-i·ùÓ=©Îé`»/ãei÷b°w°Ïþ<Ö 2J™–K´Ð=h+—¢i¶~MºÍVë!X˜¹ˆÈ­ÿ-ˆQ•*ŽB{Vó®§œˆ*WzIh‡—ЭÍ";‡nè‹/Ë)Ï‚iÚÐi’}w'îMž»©íz)heýP~÷j|ï†v¯Wbë¹hô ËîŠÚ†²æ²}Bó‰ö}e”D­3fO[1;P%’P˜DcH¬Û.iû‚+M( Óѯðe³•.¤öÙM؇þåáÂ-¥Ì<%¼ñ€xÿaüø|ÁÝš}‘ˆÄf²ï”UMq‡«–ž¨H¬_“-˜[®Bp÷Á'44mmp ¸#h‡~“>!=:=MŸ¢ƒdHãveÑtJ608`xF³ ³>@´äÕB ×V(ðÉ3Ôaaj¯GËqNþâŸÄ_5é©eÃ{7pÀ Ë—ÖÓ'n´þºð•Ú§nT“¤±,™™jË/Õ¦‘!Xš§íòšó ºFIŒ„Ïk7#ëþªÖt¤¢ñ캇M]²\T·.‰-ñ "ýÅa3U7ÉÓ?*#•¤§¸ñÿ¸?—­ÊJß*’[ü¶gK·»24i·†ž491¥Z΋=bïߪÿ²¤Nk $ß\\(¯@a±CY?ÁÎæÝpû¾Õ™™™†Œœìü[öö ó¿í¡ŒRendstream endobj 156 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7556 >> stream xœZXTgÖ¾ÃÀÜkWÆ‘AÍ{oØ5q5–XP{)Ò{¡ sf†Þëа`ï%¶¸1Æ$–ˆÑ`IbIL̹äãßÿÿи»Ùìþû Ïýs¿ï;ç¼ç=ï9cnƈD"Ë¥Ëì}½·ùØLkïâìµ-Àtµ¿3Ñÿ¦j‰µ€®bèj^ߨ,K<Þ ‡öø´§é¾ù ÷ Ã,±õ™ë;Ïo¾ÿ‡ / ݶ$Ìii¸ó²Û—»Ø¹®ps·ßáà±ÊÓÑË{Íä)½¦N›>cæûC7ÏÞsÄÈÑýǼ7vÜø 6'qýx†ÄØ1ƒ™Ìf%3”±g†1Ìpf3‚qdV3£˜5ÌZf.3†YÇÌcÆ2ë™ùÌ8fó!3žYÀL`26Ì"f13‰ùˆ™Ì,a¦0K™©Ì2f93‘1}˜PÆŠ‘3ÖL_¦ÓŸ‘0Q Ïp̦әéÊx3ݦ;ÓƒéÉôb,)Ó[”(ê,êÂ,¥nbÌ™pæµ(NôÈl“ÙñZñEs[ó‹ñ÷%A’Ëì6š}Å•všÒéaçÝ]&vIï:²«¦Ûàn‘Ý»t×tÝcqý=Çôz¯WåFË#Ò é×½zÿ*ó“ÕöÙ`õžU°ÜV~Êú#ë½}gô½Ù¯[?÷þsú;õßÓß }ï ~"§è¯X¯ø~€Ù€Á¶¸3pÈÀ‚A=\8$k»·Ä‚×…M¡¢–m}Œá¬D¦)k‰W‹…ë`+l)ñ;p.A=ìƒ3e‡*-Ù‡à`pÅÖŠ­°\8jïéL°±e¬Qtî•à·[Ü2#e™¥UŒ†#ƒÌ "à–“µ{ð$žÂ5{.¡¨yV¬ÐE‚:¸|З(0†-€4eb"DÇñël]ëמ ÖÄŽL!“ÈVâŒS‰ .ÇiÏQœ¢=ÆdµÇkcd¹åëë˜ßd%í)¢— ¥£^óYÛ¶‡ò×Xé32ÄÕiª-ŠV÷·ñ2×£ÅïQý€Í`S"¿»üüeŠé}H·§Ù:»ðã#K@ ŲÒÞ'«WŸìwóÒ$ba: ù–F¼Ed!ÿàøKŒz)nYƒÍ2´'ýІÌþã›Iðäq®P ïDfç¶>ÔÏ~å0à†µGRØË¶û¥ä2\>9ÿàŠŒ)0Ëäòߘ>ª\´§ 󯋅2²ZÖaŠp>˜u™Uåtå}êAnÐ(Ò‡ôz6 ¹Ï¬6(ÈÂw<`á…weàîéé·¸¹Ë›‘Å.Ÿ5}q·qòj“}Õ¦l‹ÆFœFìߌëËqt¹¾\Ü2³d’2.h.™Cóк„ÅØgYžSåX ™¢ôÅÛ`|ve •«ò‰‚+—øb°EëÅ·þ)yëŸ/$ÝÿW”h|›Ç¯¯½~`% 0B/YWõÖ¹n‹¶FòhfÊYÅå¬D¿ŽÂ~µµ1„µMʪWà8V:âEcóWi:Ðèxµ&4ü9ß’]†Âò잪½h2ô¨ÐÔíßìÜ|§9 —[I„_… ²¶ÃùçÃJ¤Z}ÝmØ×ï<†z5gô`¥öc §Nšì™o1-Æc4?S%Ò‘í®è*ÁQPîOxV‘ÆŸQtEÂÀ"ËÚcèt,蘕t:¶boœöÞíQ³=}[ºCÖ¢¸ÀÕUx€f)6^:^›\¤)~lË¢„$ˆŽâÕ‰1±‰j—*'ØECÓÝe‘ƒ{¾oe°¢Æ¿Jõy$'½iH¼1¯ïZwçYÓÜÎÆ«s4É1ÀEA|¸‚ÈÙŸ•¢Õñ:è ‹m;¬)¡ÙÁùëçâžGiæc¤QÚ–üS›Å-˜@QHº«a*¸é­½jØGz¥«b K̉4Ö÷#²¾®ÖÕ^üõ± ^Ìÿ xÖ8žA!¼œL%É6² '“IhónÅÇ{9Áû³€Ë€ô<Îe÷%§|Bc(Šÿ–Q–ãû¡gÄ¥¡–?_§ìK#ø~ƒ=eçV±¶Þ.®‹àqFl$ƒM|>9@¢™á=`d"ÌJßj éñ4ºþFÕ«|;×( Jã1#4z5¾­)µÕ”ãÒŽ+YéA2üw .`'oX8wZâÑS¼´+~ÃJ´ß½ ê‰ 2Šp̹CU—«y–ž{Gÿ7$Ò¿YŒúýÙÔµB-rYwø £Ä]ý¸ÀvøÜõœW{GßA)j弿—¤N‡Ã}pêÔ4‘"Œ7ŠŠ„H±" ¡¡ JòÑÁd½Ü‹mÐdAÄ&%&*‡’t91ÇU$XWìƒBžÆQ¤ög­·ÎÚ‹½ɪ/BPž©KÈúÍŒäL´ÂÛòŒÒ‚ƒ×´Å€n)2æE…-¶â‡¶Mƒé¦Á0δi½Æ> ‚¤„¨ $C>k³5:H±®ÜÅtÏÁjoðiß²ò“2£RTYÞiaSH‚| 'dƒ’ß|—žoe0öd«³=Ñ’ü*O‰ÔǙΦKMÉýëå?‘†d¥é’uèMçí„_Ë Osêèyiy4ì4bþ£cËš[è|ý&J”Ú,;àÀ® P)=§ð¸‘…FØçÖ°}ߺü ÀÍX°q±wñΊªÂâŠì„ÚMZEeÝñ¬àŽŸß>QáÊ®U¨^ê=gGÀØÂI•3Ÿ\¹vdÿÑ"^:×9¹rÛÑ~%—r¿V÷OʤÚ1óvl^ïTwâlcÎH¥XwºøZ‚(À!$Ùû‰À§r\„¶éé§O~­µ6²þjOð£%ÛvP<°û5©A 11qñä9%Çl½.ë_f‚Ž-…Ž ÌiƒNûÕˆBç ½ð¥ :Æ@ö/m„9EÍp1)I͈‚hkïíJ¹µ®]uµC ŒmÅŒ–Ù‚ÖJªrè‘¥+!\TMú¢­|÷Þ½ÇË*ŒõòŽj9zì$o?xÃj]”–[: $)=*¢/=xT‚jÙ,ù¬c3i”S­!//£XËIsh¤ulÔú™`ñh5Gí^™|£$m´ß°rERЕ*tFm|¯–Óýçëãsòú‚¡ºöÒç_ —§+s"(êbcwùi8©šÖF_ û4»“¬ßä÷¥FüØ€®´Ô,nBG;ÄÄÈD2këÆð?cÛµD[’·>-gë/ç5®û¬ßˆ­ \“ì|6‡x¹x8'uÝ ne T?è¡C'Š@›•¿ïÜÙô28 õþe.Nz{p⺷XPW†† ;ÊÖS<~"Üi+²Ê¡‘T°Í§ð“H'´ „ÝìÈýž¯5J¤#ÔnÀ©ßv˜ÕaéÍT…’é°ÍPx £eÑ}ªLÿ™ŒšüT(Çh’¢‡œˆÑ˜™”L3¯¢ŠþŽQƒrÝqT«H°"x•ï‚%`-½•”\ ÉéÈç*ÂòƒBƒ£¼77º¸ràüù2ç ³+®œÔæõ¿è¸¿‰´kŸ4´É™5OÄÂ$ì"ËŒ5e'Uï3î£hWàVO:ˆSpÚ½ÆÓW4nu 'µÊ¢8ÿÂЪŠâ‚ÝŸÎÞ÷Òko€nâØöD!³$þšøpâÛzQN¼…ó±5µÄšÌz[öÕ¬lb’ôØÉ$ ‡ÀÑJ…P¯eQõ?f)Q)¿ÖY OOÎBMK7¹¶õ†äM¢5è?¥ ½þ &Ž6YåBo*Ñ…Nba(ÚÑHÇ’Î![Gkvg …®Ym¤—á<¹)Q’)å’ÔŸŠÐŒVc‰„Ô´v‹UB$XG¦Ñð`“ä÷šuΈg)ªMe‹º¶èš•ÔE({Sµ„ŸYiþ;€&^¬OýÖ GÓÖƒF‘>’«‡÷Ô”+Ó¤B™9„C’r''Ý·Á{sðÖ~Ü{ý¨ÏÃhÐ]¬>\bÜ[{ê q—qsÖNzªp®­ l§´*aF•¸ekË“Lè¤&Lüý 6ú)Zg³äµ›­Ñ†QÿÅ«Z’Åšâ[òO^ÿs;ó/ H,Îb±+2_¿T é³hfN⥄ÇÒö^ Y‚“`àzS£JœJÑþÂáÒüR„ÒèRKœô%]ìK+)«Â…²‚èší¡[TNÛx)QÖnÛ¦î7nÁ‚¿l1¸”‡(¢v…{€;xå¸CívzngnÞ‹UØ;ÿ|òv]äɵUüꪕ°œ’ÚVˆ×z&‡¡†*Ò‚â}¾ÔEÀ=½~ýVCDC@©¢~O}J!åm+%@è5ÊÄ%Ds;s¢ó3‹ÒJy2Ÿ02ðÓxî ˆ‹òun2¼,­ÔÖä•+¤W•Ùé¥Uûû=„áA 4kí"sœ¿nä°'OÙÛpHÏ,y€æ0EñvFaÝ‘›o$åÍ?SLƒ-vnœ”¼iiÛËPÁ¿Tüë1Å7ý™` õižj5Ð8µø}+K…,Ú½ÇÆkxÕ|÷ðXq'#ŸFÝ•‡_]_»ªèYÙíKp›ûHî“á<ùë;hú¼ÁC½þFÏÝhë‡Þà!Y6Ÿj©º{ÝÀ ÁGà|À…“žt;pVµ»ßí‚{U ,L’-œIFð´îdK ² úL]5÷ÍÉPê>‘ìb{Jx5¢èµå7¿Î¤ÌVŽ@·81eŸB³Òód€ÉGŸd¨(³ÞÚo¦¯ƒº¤=k©|•ð£¬2¨Â{G¨o€_©ÿî=ÅUåzŸv6q¶ñ’gV‰Î]ýëU\zU,$âr¼\|oZ1ém”/ËÛ~†öbŸ¹tß7é›Sy­ TYÍnjkgâ5šèxÞÝÞ»ÚéÀDJmâi“N?=÷¶Ÿ"+ñdôg;+ãwÇW¹–øgz€7ݼi>³SޝæWžQ_ÕÔk2ã@ý¦'ÛØÖ“¥iuYi<€>¹ö´qÇU·fZ:Ý}ŽfŠvª >ÿ[!°Í1ÎONþº˜ºæ{t]'”,crÉ­ l°›c§,I‚>/¹8*¹Šðb_ßðPÿ5ç|Ïyùêc^Ú»eù¹ˆ*}êÿå!¸Ú(ª/ÇôfL/·Ø kea¦.%a$˜–©\œ’W‹£¡* 3©$”ÄQ¤ì€ÈA¼³—ä€þ'8B?¯àʼn3;r÷˜ê1 vnar–®’Š úxžG.™òVpš˜Ðß”5¯¯}ymµ®IH§w…`p9M¤¸P®Ñ%¤R½•|ãbfú•“º“ðôQG/ÕËËt‘&áY¤ÉTB„FFS½ú›iPò‡¶‰M| ¶uü‡‘io9ó§t´Ó%ò¡mÖæw&¨_ÿ‡ÔãLMÿ!}™‹/2šá¹1ÀXo´,ü-ÐJºö7U››½“¼4Þ@=M…ì_5Å´ÅU©ã’TdT«“œL¢4ÉI©´ßÜ}*¨’uS/¤¾&ÝM_—N?%íføPN­¶dŠ Ô詜Ðÿá—O É Ù®¸±µE®ÕÇä@.èÒ’sp†"Ç™­©í­Û¯rÒéè Ü/<0sÕ¼‚šro_£*ÂÓ7L£Ù2ãpa[ ©±jÓüƒ\lÝaá…E“MEÖ–1%Ë)Jžpº-Y: ûCv¾QFÔT ,èºÁUhö|t®3 UÓ‡Ï}«B úPË/Bš§¾@Y³•´wOÁ7ɰˌ—„Ù°5ÂÝÇ5¬”+Qׯ×ôß=ÎIU§Ä+¤ Ü“ ]ºˆ–D3Æ6¥m,‰Ó'šNÒ½#b .BA޳á—›¦Ó§&óYù g¾†SP¾)=<ßU·j*w° ܸÝÕʼnýésÒ9s4z½&«_mAyYÙÎrH÷øM i‰|ÊõQhŽÜO? ”ï.x ß¼áRÎ1ˆÑIx »xx«{¸Ÿ¿_}qnf*¥[NKºÈDÏøyK—)¢£©äTsñ)‰)YM_agW÷ùokó¤0¨´éñþrËÆGhûÈ÷‘•´UØ„[iG8ñ"^èºvC(_ÆÒªÖ³þdY£j‡ßå ›½Êvòwg컸åØtÒ›ô£2ÚŸ#7ÿ©BzÅ߇r… í7ÀºnÞv›(/¼ð£p—¶ˆ·k^>Ê?ËŒ|¡+¬…õ¦9Åúƒ[5+óioÞ"—‘D éI9‰E\€Äƒ8QªÕçg\ÉÉNK½ 9´ 8Kˆ9™hCúy µŽÍGŽÀáLþ$ gõgÓÏ$—æ>8tû¡½<Ã4T)áÚ,néQ.jþ$ûíìÜIÏ»òM»÷@w铯7¯®™Ç—´Êd¶sÖ̘2ïrÓ…š«ßå±Ç¬ª°£Þ°ÜºíõOî—^)‡'hS¾×äÿ’GØ“úÿåiz¨{24öÓ‰«Ö‡oÞÊ;mÚs8ÒëÛ‘h~é@ã…RÞ“%Qƒ7­Üé¨ÛãÇJ¯.0æGxÇn_tÆé”Q]Ø=ãŸÈ¦ïE©•26וð8Çá -i¨<±7§ŽÖ¥Ú›9)Çd{&/ÝÔ·ƒc_£ïkу×b\%t—U–ùøúø”VW—•Uóä¶ù?]kÌ AÇ?XO%cuÒŽoàš¢×Ÿ¦ÍÒ¥§ÑÚ5k‰m|Üï@ýü.r|;w;À€zÃCƒå¹Ë—Ê.Ç™—ѾÜJzêtËâYVl†2&!>^ů[¸Èo.|ËÊW +Éónöüi¤éöùÌ/ožoFó\8rJñ‰ë‰„zø NS“µy«ãÿØÄR`­ÌŒÍÌÔ%g¥ó‚¾E•š¡ÓCªuS+ »âáüXŒou§ú0kæ­ ]œƒ3ñýOrJNŸ´Ä v­Ãß¹ÁSZøý&…°'燊„aB¥ŒŒ¡ Ô25'È ‚0íÍZïÇqûEçZÆšz­—²â0ˆä[D†Ahhä)„ï$yEP¬ «Íé½]|ëw’]í÷rÂ’\Ó½öø“Mñ11ÎO7&Öâ_£c¨èóvÞZ%8È*vVº…FƨT¼&)IcZ )7¹&íó+—Ù¦äÓsi É Êé³Ig»²Íë ++L¼õß<Ö>'á!¿í ½¸ Æû$^F¥ngé…–ž¸p,àܽ8{`¯œŽuõª›…Dº‚_KÌ¢‰˜V÷YY¤ÛYbq‘ôxðQ&p©Éú4Åß­ŽtùFÔËà¶»­B ;ì1å“àT‰‰*5$…+ž8O&¡5s¶+mœz˨v‡©’S3}ŠÒù“h–b¸ÏµÇsY^Û×hØ-ö›"ªo(©ÁZI.…†Bý«–Ô²‘o¢ˆô/I$„CQ.µXÃvDõí›`”6×›^"áÐk@•ÑÙ¶H»2³Ä26Bcr°u’& "MÓ´H[_<Øyw}LP1ò…Σ"ª¨´4÷Ç«mÇ‘.k‰ˆ'’¿o¼Åzÿ.anáDöHZ”“‚”þ½ÞúD¸˜¢d‹Vv5ð€ó´åå¦ffñº|—oÙ¨Ri4رì;wåß5+ÑÜf–5êÙ;FýuS%‚F›¨³öÌu¢ª›DDƒÿî¸nwÏÂC˜##&gô|úÕ‘/xéö ¨„ªØØÄˆð‡ðô]*Ók™#ƒvDYX(Æj´“] …+Ù7lÙÎv§ÿ™ìLm;”Î VbÁ®ƒ¥"cbÔ<ùîos¢ ÁD7±Y¹É™™z¿ûmn í­ MBZäѾ&Lo [ñ¦ î&ÜuÿbÓ3ò·Ìõwç¹ a¼s’mÌ>8óf¨‰Þ¿*9ô}Íõ”Ûp‡›ž-£:{¡rÉ®1öÞ›a;¬(ÿAyžÀÇp®¥Ÿ)Â._f”C-\ /‘é³a)×&Þ„ãUš~_ˆ…i}Œž¬:«A!\`Ë@Ä/[2 ¢j<Ì6u£ ;š&L1ˆPO™®‰[¸–²z÷=+¶¸$&ð> )~À!ÜÂüÛôsý7#<ÖH©‰c›=üÇ#<]-‹P‡š]•6 2–¶¼±Í–ì@ öÙ½ÆOŽW…ÿNÇÒ'µQ…ÐqËáwˆq»zP\;%Z·QâŸâ${ç]á|PݶâuÀ%(;þ?éæ?`Nr¸¥Ÿl{Rl „BpvDaGú˜Š}ùpßÇeu ¾•|÷`ƒ0¯}²R cçë]øÎæ«|»v2hu¦ê¦Óé/uíÊ0ÿŒR{eendstream endobj 157 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2159 >> stream xœ­Vipç^Y¶Yƒ‡pDšÐÝ(å.W(iË1 ±1ƒ±!¾„lIƶ,[–,Y·^IÖaÉ’aá{å€ï#Æ\ÆàRs”$ %ašÐ e>y6º3M:¡CÓîþÛ™Ý÷ùžk_„±X¬é‘Q;…9)‚•+–½“Ÿ’ÍKøÐ)cÆv‡@8ƒϙ9…N¿ñÚ…iØø5] <”·5¿@\˜ònQz/;â±Ø.,[ˆíÆö`qØ^l3¶KÀ"°·±mX¶›Á Ä‚±A‡å âÝb'OV…l¹úÉ$-¾o ÛÖ7¹µN}´j¦ð–ùX™Cµ#ìÀm4ãTZ†¡‰Å.6VyœŽzòðé. Ãø­X_Âú}Ñ9¡>ÁkI†,(Ì—æHÒäÛp¥¬n“Ég%j¯xOP€7‚@!ÕKtRr#}Ú 1jAÏU8JWÖØ½v¢­±úluV×}L5Ížú¾?¼×œ(ŽJ¢§ÈÒH9O_b<éhÖÀï£EVbêSÖÓ9ÀQÐTy…°!ŠópÇå5ô4šCÏ¥Ìÿ0ê6š†8h.ú9ÑÁä‚ùühAìÞÄÀÓ3©kƒˆí?C¶ ´t~âhÒ’ùn#…9Åèþ*†’EwØYà5Ωm®ƒogÅH ÅétïÁyÚ{³ÃL\BU&Kâ|\+…ò =´¸¼BÒXKy:ÆÏæþ3s¶s7ÑòÑAæ|ˇЌsìÀOÐJÜýumj…Ж值¾nôfS›2ÝEðu*(q…­¸¾¦±²§?µã:,uIÜo.ÉŽjˆ^eŸvã|цù1Ö“Râ¤zà^¹[œ/,NÜ>œu-nGSû™ÙìV@!øÅB‹ï²Ç*›ãÐY˲yzàÉhI\%‡B… ªHG¨jŒncÞaèÀ ¬2(r„Éé±¥€/]ÿâ×£ÕBlrôÁƒþOr|Éš\-ôä8y.‹©¦œA:S¹Éå\0:• E¹)ùrLuøc[3Y‘çËrÌ6‹kíšm;bvöîvAí¸Ž‘όͥP\! M¹ÀF g—‚±HEíKÛ¸p4TÛ¡Ú~”¼ŽC> ­q·² ¤ä†Ð6´°Üf°r늭ÊCJ1“‡tzuÈÚÐbHJ+ š¼º…î4êtRqã[ÓNýíässͦ^˜ó#UCìÀð‹ÙFc†í’DòÏ…&ÏóÙ×P—Ùf²‚…ëRUæ¨*±™îÓ¡LΕ9I€'–õ¶Ž´Þo%uVxñÁƒTòòôBÍsš=儃jz8 ¸Ë¥ÏÍSŠdédnDî&ˆÃ× Îœ~¿¥¥ž¨ÝÝ£ñBÔ5TQµí•L $O€]1âBa÷Øe œs¬”äÊÏ—ÛÕ65QŸká3î§ËéI»ƒ­Ãþ»M×kµ­ê¡d¯-Œ†ýøŠ‹‚óè­~ôÆq¢Ü¹/ˆZ9âúlm¹Ç‹zÉtHãÏ-N-ˆã§¾x¼´«»ÂTïê%»Ñ[6Ÿ³“qÎ8{µˆao'-Q bFEöº=pÝ}¦ñ:u‹°{­¯Š7žž¹ žƒ×˜çöékÀÇÜ-'«2;Eçátwµ\mí@Ëá4þÝBúj”ðýgÁGQÃw¼ÅWó´FBÒïæN³éÉôRzÁÚþˆ÷Öè$] mâcß—ŒÞ*á¨øQ¿Š|¿ê|Ë …Âj»É†‘þÁ.¦8âRÀ¨6h˜°±Ï1 ÆXë÷cíì±x/‡qw‘e*µ—Rô,ôh6ŠDËŽxGÏ}dã:LNÔàvU->¤‡|âdXÜ9HF+é1Vj™—HåôßéþÙ7Ð5‡ßáø¸uPëR›Õ©zH'Ó Õ’þüÅRx©&(ÖƒA'#é7¾íTñ4ª­À•ާÈ–ö. tÐ¥gZØ^ µn5Æ€£Âæð[kÉch>"ѤǴßV¦JùF9â"…Ý`?Þa6¢üúfÀ+åUãÉ¿oÁèÚ8.ÆŒ¯‡€Iଙ ¬Ös¾ &›ùßsöZ½¸ÿkÀú©z·›È ×oJŠ|Ÿ¬Ý &³ÝDRÖÊ&¨Æë¤®"b¦µ4]³+®‹wöñ_¾ùºüŽoPf7 aŒwü/÷N•­žDó£&‹Ù À­ÐXTz¥Ñ¨'ªJ #H¸ 'xÌj¥^/"†–—P¢¦¦@_ÉU¿sTÙÛ7ü«pÄX+tJ€Þ¨3hž÷ùÐ&¾¡—‘¶8ð˜cU¹T:£Q©"6-[¥+|›âjG»³ÏÞDv„¶À,Þ~¸v¼?³ãݹô¼tÄʵÑë·UÉÈÁy“^ qhZ÷Å xçoœ©U­úäÉ ôúÐggÍüÝùþ¾"-aö•ÌÔÔènu·‘ÑoÍfƂܳ ™Ëxô"í¿Ä¬hmü♘Úü<…@-!sÖe.”eèPÈM¯O=õe+Z\NÌüiS৮ėÃçgó ªÅÍ~?ågÊ {jaðŒqºY_2¿—Ö Z hõ„úPq„$EÜ¥=ý[†bm!”p÷Ïh?ÜÔà&jŽy.‚…iöÊ M3ölg{ÅíNÌáýñII9„êrœ7¢!á ï½ÿëþvÌ•u̓=×%"µÀPFn£ÝÿÍK/]ú |-.”g®ö…ú&M!&Ç ÃÃ|fo`r[x8†ý¡äendstream endobj 158 0 obj << /Filter /FlateDecode /Length 284 >> stream xœ]‘=nÃ0 FwB70-ÿ(ƒÁ%]2´(Ú^@–©ÀCdAq†Þ¾$Ýtèð<ë£)ˆÍùòrÉën›÷ºÅOÚmZóRé¾=j$;ÓuͦuvYãþkZã-Óœ_Cùú.d9@éð·p£æÃµ ŸÚ£)n ÝKˆTC¾’™pJ ååß‘ƒ£cNÏhƒ. h¦¶EºÙ‹:TXO¬Žÿ+@E»ETXyöÔsPpœ(ÿFèUTXenïQa•¹ý V4t¨peå“AO= ¨°Ö±G€+ëˆ ë(Ê}£öŽÒë9è5ì%ìùF^oååVžƒ^Ã\å5ŸÏ&++znÄÆG­”wÝ£îIÖ³fú[uÙŠtYÆüfâendstream endobj 159 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3042 >> stream xœ–}|SÕÇoš&^  ë×8v/ƒ£NdcPªÌ"P(/«PhCK ¥iÚ&mÚ¼4/7ynnnÚ›¤/iÒô½)}£Bai­ˆ€éÜöQÁ1ÜÜt¾œÔƒÛN`~6÷qŸÏþ=÷žsžó}~ÏïydTr%“ɾþø† 9ºüuºœ¢‚½KîKßœ·¯¬(G›ø4°ð©bʪ€9¤$Ιy$­ø J½óÃÙ”B&K¾#õëlž.çPiÁ¡­® §(·@£Ñå“¥<²VT|p EQ_ÛöÈŽG×èÖ–és5ùO®xð+s3S廊 jµ‚Z@-¤¶P‹¨­ÔvêQj µŽú5“š-sÊ8™Kæ–¥"QRÉ2…l$i™ünùÕämŠ5 ¤º#—žAŸžV5mlÚgÓ»gT§ÌHѧüžõùJ±)YL6u0¬ Z –YË»„ʬBgÓÎ_øÍèëîinŸx Ljìç ˆÑ@ž°h{ TØD®ÎÍJî˜ Š¡Ú\SkÅËð#i?B; à …zÕ~ÞÏCˆš€Û³›ƒF -Ùn‚ ³&|–2‰EÓqÞ‡+ì·ÛîPïØú³ªm\Û  '7›z c†à7´/¿‰ÖÊy š›šƒ  *í÷Þǵb5Ôê+sj³Ûê†JÚ/ƒR…x‰ëu]Âì¬$}b&Ðd! 6£"üjÓø=Ã]†wéËëÎá_Sê-$L ÂÐ ®Ûâ’ÜPN7Ç™ðÝ7ûÓ,¹®Ú•@WÞþ«…ESJt?šŽ¦¿ÇjÐ[ª¥?\Œg1xò,â¥p ÔH¥¼Úºqû$¾¢Zxÿ=x:ƒç(«ÁvÞÂs<Ôƒ±åUÔ—†6)ÿ~xw"ÚX;ýñ¿“P“‘¤>«Õí,·1»ðœ«ñC@ãUÊø™)ïõˆàSK¨`n.W–Á© ¯Ms90,ƒ’§Nð0Ãhú/&Ñ}@£)ožùL¡§‘³Ö‘7Ä×(Ûç}የ$÷ uà¥Io/I›ˆ¡Ãý²©l*¢“Õe·»˜ÇðBÍZ¼ŠD±àKžru¦ýEù&”km`²`I(p´Ãk—ê±ÉËŒ¡…Ï!ÚÈa&Ž)_eÐ}ètå²K¼w”0û–Íê=˜Q .ç!ìn8h‡`“$JA ]Ђú¦GYñ¯„ uƒÁ .‡Åi7;oçI]i½‰|dãÍÊ6òƺæë¨(Í# DâäòÔLª,†ªcñù„tjRÕ9¼µºèÐßûöJùQÆGè.öôù?¿ô ?xñ!LïåÜ`a-DŒ ài™—Q½BpÕY9·Ûlf}ÈÚ˜}ËAKq.ÁF¼ÉñhÙèq©i= ·¶D$m§Æ´èñëñø‡ÅÖðkiÞò†ÇyÏO‹>¡nYÁÊ«c(«B†~‰æ©üµà´º9³ƒÙ=okiÐå–†Ãíž:oˆ½ŒžSÜPFü XÀÀ.U¢o‹ðÑ!“¿’+vç[™\¼T‘ž@«7ÕC„½ª\‡œ•` · çþ` -¨g½U™ …œ¡~BoOD°‚^S ->Èûôø4èñ_u'9$`ŽÅ_ã°JPÔš¿´È\\͘KÃãÊ‘Iü¿ú¿·þW}¬ä¯F}U8çŽBÔÕ êzb#_‘=ºh\ùÜc)Ô»7€Úø¿ö%jreY‚qzT†¨s y|$Ù œÅí¬æ˜ê'õkrncŽO԰݈šüÃÞ&µØæ&x[ª%££Ä]PËdâÓnçÞ€:Ër|èL÷o:_eƒ½b#±Ýã…CÛkð|«%àç=Í"ÓñöðÐ0ÐR³»°Ô|Ðnd5 Ë7Àzñ«ÚÓ“ƒÇ£!&°g ä @[[s_h°áå[âNZá$ñ6\C9×¢²žëè—×åqÛ¿b¶ºœ6³îšÒB s«úú£¾h`”íGßôu¶]¿jÚ¡µ¦ØQ¡…Rº* ïŠöµŒübccÁ¦ü­:£Üâ?ô¼ÍX¥MDZ/x$ÛÿñdG?Ðá릢ʵ<—­ÚŸ³ ì ƒò†1Ú ÝtWY½ñ€¶¤0ûTÅèäàŸÀ5ƒ¹@ÿm ©: iãmÐHsT6rQw|tåc†{€>ÄuFnë}'~E‘hWÆÅVW%SK ÔФ웞óØ, Wñ¶†v=MŠmž¿‹¤¿°îõÈ)ïÅ ¶>g`ÿs_D‡ç¢LÕv¼Ía—±R½ë©=UÅ@o¯~áÈ©>tgÛ³lìÅãC#@¿Ò˜AÌÐîv$ ðF€Â9ÑðÕø¡š­%*{þ::O€Ÿœš­z6»mOÁㆅ{9g)Å©ôO”úÏiR™y“5ÜSy_¨ÄÓô-Ï Ò 4Ñm† ¾ä`YÞÓ£¥Ï¼0òâp Ó÷ršÉ×M  io}^¿•ìÊÀ¸Û÷¶6^ô¥p¨©¼Ð aÃ.§%Œ´®Åî쉓’MÊ\øo´è­‰¦sòø±Ïégt0Æ­…?~Š48›¿­Cj—¢ló±ãhŒÓ¯ì=šùøÎ¢l ó:ºx ·î‘ZW ÁmvcøÜxþÍKÎ[mA­‹8¤ææ`£È„}ÇGD&¶©=¾úüObgú»¢Í±ð1  ömÉòҟ²µ:q]úgù'n Ý6š¤¼%Ħ§îë–¡5ñ‚<~ ™TðjA¿±Q×fôÞß¶¶%íTÐÏÓ¿}ãÍwÿÒnœ\è4€°ý¼ò2§Qñ-ÿ%Gµ‰Ù¹¹äDVÇcD_Å)ø×j0Ôs¨±R«-)«ñÙ¥Z&`î(°>+#ßÒû×Ã>@SóÉãñx+[·ËàdðòÏ­’ò†`R è<æzƒu!ˆ|™Ýv½;ÒCL¬>…%mM>»§B TÂâ×÷üÉ^»\Õ[9sÅr)¡. ã’‡äÐ×!4£EiCpn|ò̳­£Þ„ §^§ÊºãG'¯¾Ñ!yíèud»"¿ÏV¡¥÷þ߉çg㻊«ëË{·ö¶ A3zù¢¯èK²°*×¾­l9k9»ç̃ðSx¬êÁxÀv/ÑF1æ"ë‡èšÇà™ø^Õêõd”¸'Áßü]hî3ÌÈØÉ¾³dä“yprEB—KHý£K}èRTvtõOÊã;ãœjÒ€Øù˜%›°!½Ëÿ€¾…£¤cáoªpž2t.òÆÈÅ®“CgŽ}Ò·~óŽÚm¥ Yk¡Êœ]¾,ouþš¼»Þ_ÞóÇ£¾ñÎ÷—ù¯'.+Œ¡y1Ù‰+rôéˆJp“컕)ªÐTj€Þ´ýèÕúa!È¢ es „MÄÓð2eû›gÆÿtLj&‹5d1_‰ïÂw§ã¤++?~å•‘;«,_4 QetúÄ fzòSÅ)Ó¢¼G$Os#ßħ¤PÔ?É×eendstream endobj 160 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 380 >> stream xœËK/Að[-í*6iÒ½lCâæÍAÄ.$‡Jij‘´Ø²fK=Vú¯¥/ÛI£ .â`ã3pó\$ܧ5âuþ凑£ aŒý£ccÁÕù‰ÐÌÊr¤«³m|vnm9þ7¸Y©Ä«A@tܲWé­ñ¥þ¹áë‚‘ÕÙðBd)ô×BZºBÓØ@Œ­SìÆû#Ô>"¶iãÊ3}¥(åëÞI¢ ªE ò½“¡ðþ`ßâëŸ[*f[`=<äûìwQ(ª*D‰òÝï"-• Hoù°<È:}1r$Í[žü¬ù){l¥  ˆ¥‰Ým…Kí”õ&ó‰‹0È躩×l»(ïáÒ›ž…äÈ:‰išµŸ5¬i˜7 ÅØ>h²Fcùã“dæTaÒ;á}Õ®Ã-£pp‘ „uû°âgzä<µ ïNÎ>©H×wçNÛm{·0Ù!Öž›©¬y”K¦Ì£KQDèY£žIendstream endobj 161 0 obj << /Filter /FlateDecode /Length 184 >> stream xœ]OË ¼óü›& —zéAcÔ °4BéÁ¿¨5ÆÃl2;;»³dO£³ “kôê ët„ůQž`¶1޵UéÃjUOÎ2<^p³ñ‹|¹±®«-¶™”×°© J7ê)½1ÓÒa3Læg²€sÆE¦¨È´Í´ÉJ§MQRTPÚªº|_Sî”Ä{@¬ÖÁ¥úV]ÒZßσÅ…3ÐËM\Úendstream endobj 162 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 441 >> stream xœ®QþLMMathSymbols8-Regular‹ûŽùtù‚‹ ‹ ®øïæà asteriskmathprimej0¦]‡ˆ,Wâ÷¬ÿ:f÷w¹ùt÷Ž¢u‹}üÓ}u‹tt¡‹™øÓ™¡‹¢ÿ'$ù‚w÷¹÷>ûjú4™‹¡tt‹u}þ4}‹u¢¢‹¡™ÿBøa÷1‹‘û%Ë÷$Ë•˜‘‹ž‘‰¤hû%(š÷+œˆ¢o‹y‹}|Ž}šû,ûå~”…‹‡‹y{|x˜…•‡÷$Lû$K‡~…‹x…r®÷%î|û0†‡„”t£‹¦‹¡‰œ}÷+÷;¥y‹“‹—›šÿ 1÷¦ø©o£mcjˆûüFЉ‡|‹‹~ª‚’‘–÷Kø:–‹–•³ù§²¡¹ ¹  W/ §Ž“Œ‘ŒŒ– w9²Ðendstream endobj 163 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2733 >> stream xœ–yxeÇ'=†)T.Éš(Î(— ÅyàYPÊB¹mÁ…^Ð+½Û$M2™$¿É}‡4½mKSÊa‹PQ@PTXpeWí㬠®¼©o÷xCuÕÿ6ÿåIæï|Ÿß÷;*.†’H$¿[™œœ®È|Q‘ž›µ}îSk2vç¦F 8çÇËý[ã!1ãºÆ&>2M…$#úFR±I܈1ŠôüôBEVz;™ä;EQ£6.Þüü’éeÉ™)kçúÃhŠšG§æS©IÔdjµ˜ÚDM§^¤fQ³©$‚Ä 1R£‰*N2FòzÌ’˜÷c{ãlñ ñtÖ•Ì0æz‚1áÍ¡9Cÿ=l; ÿOlÖç„#ÿ Kú½!©_ Uëxo@ÇâéèãcÇÑ84©)$ïîh®½dµ‹Nø—Ʀ¯á °€ýä[ôÀ•P  ˜8‡éU#(@'¨µZƒ^f0€±Fƒç㲉(ÓßÔnñŠr›_ ºtvMM†j8Þ´J`:¨,šÁƒª}°÷O®š2‡ä8ŒÓqƪU©™Ï r•IPÎð6­Ûá±Àöì3X± &_•È•‰Õ¨…½^_  <ÙµÿÎ]‚µ¶0ÈASR‘mdtJS9ˆÕ{ÝÌ¢›;O~ƒ +9‡#~<¾“øÎ¶¢Nb‰üVlÊ–Âå•ï<áALÃwWà æãÅðhߡ˕D°‚á6¨L&ƒ’Ãtj2ŒÚE /SÝš B£yhJ¸ÅmC7¤Ï$%á1,žIŸEW§hy äh}»aÅ6._‘N™–„Y¼ˆÖ˜ pšfû‡¨]†¶Ò_ï[™B4Æ\ì§ +ò#8i¥VX0ù«yAÖH>&£‘£¶x ~dõjü40x¹ùÁé´;À+÷h¡ŒXM€ÉÄ—¥à¥2“@.Ð3Ä¿Çl­³³ÇÐØ«h80h=pq ¢Õð<¨äjÔ²‘mt ˆ¢=ÄÃvuþ ¡/¶ÿóÈ)zjâ?ñßý? B·h´ íD[P7³K ÙÕxÎ,·5eö <”HŸò/é• Ç h”pmÜжèäN‡Q{—¤ŸG&iÔµÉP\îÀ“RSðrÖòßœõj‘Ý£/T9º<Ψ7ñ`¸ï‚×lZÙS(C´X‚„·ÖFÈÑUèÙÒùU³y‚>ƒ´®.Ñ`ý¾D_eœÊ¡wúEWÐÌÖ¢…¢ÜÌ&÷« œh¢~hK-ƒ\½‘ˆÑ€ÞÈ›ôÄ™°lÐævÒÍ ‚³ö”-3[Ív°F=Ÿ›* £Êp„ KNÝŒíw ¿Ô­³iu*Le ! ªÄ*q»X _EŽò@KýAÐ4q¢QäA=_lPòêt¡&gÙÔÂ¥ÀLÆÌI4ç³N4á‹›ÜÍï³µÖÊžA1*Ä&wð6Î`ÐhÙ% ÓÎ/o~äX‰«q..ÇóÑH"êú¡žœ7§)Ï V°™ÍV{°éŽ£ÕuØÑjwº¼!±ýþ×’ JT]TMkdd­/• ¯Ñx©GcæÕ&¡JÇ–¾¼éù—€)QùÃ!‹Çâã.£žøÛtÈ !Z\Ý…Æ‘¶“QÕWº+²tù[Ôl.?.Sþäf½ ëøBM&TËWÏ:uï,zÜË’…š•½1×*é¹i'7¶ •ÊÈòlõÚ² ;€QhB­AW§½™k¾ë> Ú]a¹­ÉÓ 6¦±Ì©¬*¬ÉÕ³šàž¢ÃaOÿþªOοy¢®–«]zÑè…^h<è Öuùß&CÄ™ÒMK7”䓦è>yôÕ{ G¸¶³Ç»{¹Z¬ §ðœ2•$è+dâ1ëeDa %÷Z%7Ñõoc# D¨[kÑ©Œº[ºlͺÕÀd5t×ÙýoqèQÿÉý=¯ƒÜ-P_½UmÜS¬jhè öœ^¹wgjFö[|jChÑ-y ÊÓ8§×lóZ¸ÆËgŽ…òv•ªÒ´9\~´zÝ®ô-  Jü½è!ÁÓXî/ÎߣÈH;^pâÔõlÃæ^Å1‚ä Õ]ͬŸ2‚´àÌhË”³XJ烔¥ \”=9+4›Ì» A ¦é_¥ÆƒvÕ¦‚âeF9¯2•GKÀÚhKÜ5üÞ^µYÇíwÛa?c³€Ec#‡ãEúÖ²TŠj?ÈýàðØ]‘ý´L4áÇÞýU –Ÿ¯Ý,úI#| M0vÿ [†r0Wp%f£\„`»hCG:eîCfׇäé½÷{#fÇÒA„PÆëôý¶K±‘O~3Ÿ¢yé;2€©Ôº îf.pðo1oèz.e}Ñú4öÏè”h¶ø Â6Á¥r F›"kLP.¯öƒ÷ðRªzb߸÷„*БÿVø«C{ýnŸ“µØ¶ºÆ/e–€û %xÌ Çy˜®ú’Ôµé˜.ÛÌ)³%³æh^Ïí×Ðc¾èè“H¢ôOm— å!ÏG±‘k¨B ½U]ù­»ÃÙÎToRƒl·#¥>d®Þ¸q§ï\*¦Š„X•ËèðŠÖ½VöJûu2*5«Vä¨U;N¯ôo$„qd70½z_–MÇ…3Û´—*ökÌЦkÓ¯„¹Ì¬ÙÓÇ-ÇÃêÐH ÔÛ›XÑïU‹‚Ò$(ôì6<‡$F®µëQôyX‡ÓÝÇwŸÞþÂÛD4 =„£ãÈöD‰»wXÒ¿-²Gú*úcü`ÿ.$/º’—ð"™QoÐÏh¼Óc¶íìi4«Í‹ž$ÌÓí¢IkJM‡e š ƒz<Èsj¢o:Õ¤±FXâÿJ£Ñ†x'!ϯ†ü"-˜ ¸‹`’”¢ÕâFòH›l°˜+ô÷ÞìM…ü+&=gT›Ôdk”.ƒÝcµ‡,Ä}É(@±´ª5åX¤ç‹ŽlÍ,ÍËÏ åh `yõšädV0¤¢µNÞáýìJˆŽM:•ÂëKú™VI$7/”¢ØÈkÀ„y”¬g7lÎØÃêÞÜÚ±vA¡¢2W±E½‘”\tÑ}¢µÅÁúNÔž&"›Š¢r}™6›+yv'ž*Tñ… È!­¯6àõ:¢tuÚêÿG—ÿ Ãá_è*Óf‡ãÖ.µ„ËÂ:Þ»ßöFŸ0fÆQª¤=2·õÜWW[$Ý7|‹<ŸÆF¾‰¬—¢g&ÝÅr<= É-ªUÖw4µµø ÛEöð…÷|DWßù%˜Y«Z_µ‘«~#ã$xVm}yÛ¤Y€Ð0ÉÇð0ôäg_¾öÕEö½¾ãh2|Çà1x†táœgà8þÛºCm?¸›Ù–wÎ]¹ Ì®K¢móÝ>²±èB'ºÐ*9Bê„øWQIѨ—¿˜‹§+÷á¢iaœðw4 ÍDM¨‚ˆ”âú(Úòs˜3ðXYJù³ªÍœ&KšŠÓæáØd`Öñ×{ß }ê鿆—ÔGžs{<(¿žnzi;4nm^bB‹Ù,š½bÍî3'&RÔ©Ž ®endstream endobj 164 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6680 >> stream xœYXWמ¥ÌŽŠÉ¨™=ÑhŒFcŒ,(@TTP”Þû»K¯—Þ{ï ÁˆKDqQ×1MŒš¢11ÿ™äò=Ïw—–?ùòü Ï.3s÷ž{ÏyÏ{ÞsQz:”H$šhemíçë÷îÂù6.n!ÞûÕ7§&ápáЖúÈ@è}4uº©!œ˜’ñÊ ”úeeæ»Æo­ÿº€õæA‚7†X„†í—:[…°Ž8¸Ùe‹ëV7w[;¯íÞö>ï-Yúþ´eÓ?X>sÖŠÙ+ç¼ù–éÜyoÏ_àôξ…ïÊ-VPÔtj 5ƒÚJͤ¶Q³(j6eKÍ¡ì¨7©íÔ[”=5—ÚAí¤ÖP»¨µÔ|ÊZG- vSë©w(sj!µz—ÚHYP‹)Kê=j eE-¥¬©÷©ÍGM¢Œ(cJ‡2¡t©ÉÔJŸ¢©×)1ÅS 5ŠMM£ÆPÔXj5ž2¥&PfÔDÊÚK±Ôk”eM\DéQ JIE'uæê4ëŠtýt_ê9ê]×wÔB¯§¯‰W‹SÄ¿0©£ØQí£_í2Æ`Ì~ƒ©QxlÀØ›ã+÷çøß&xMœ41Ìpš¡Œ5`ýØ#¯½õÚ Î”;:iɤŒIŒvÕóÆ;MF™4˜¼˜üÅ”×§ìšR5åéTÏ©¾¾öuÙëÕ¯_xý oÂÛñ•ü¯N’ýÆÌ7Ð6N¨FÊߔ´0Qlù¶è Í*JÌÊJÈA2„Ç •Ʊ‡åiÞÈE¢X<¶¿ÊXŽ‚QBJtBB R0>õ¨ŒI—×¢æ–0ä&©ùM–Ò53ôÝ·O-*—¼¤ËêQ³¯„6¦?…Ïô5–¡Wi§4üIv*#ö„×̵¢HÞ dô/;­Øèè!•ò¬ª•à×БdºzT,9{†¯`1]LfWSâëi¶éÅÃgÏûmáqØA±f\ƒzÜ|Í8‰Ör¨•†ß«@¦Ú­1 rHµûÚòŠ«ÕÇÏ¡^æöæ‡X—Ç¡´<ùxסRIC¿Ü„ÝTš ýË}÷%ïB'çìe1—Ÿ Ž0‘fï}Smí)©Âs·¾ÇcB§Y½oš×8ªí'(ážRtQu*]Á ¼9˜¸à9ÖÃz ÞÄ1ûÃÛ :?ü†¼y·ÀÚÔÌÌúîÓï¯]»yëªåBžL­r•¢#*è!Haׄ¢cƒ‘o ÿÖò gÄ,\ò;Ì…·¾û½ïò…½Ë‹%é‘͈iGU•ˆKQOxbL|"Ÿ’„Rž{+w"sd“±%Þä&ómßcõŠq ÞQÂum¼Ž«à â4cA¦^ûøE?OÛíîíÁ³Ï›RŠ]þªþÆÿ*gºsÿ±ØVĀ觀•˜Oš·ÞrýJ÷G§ùÛbÖ°çÒù+w.­y×L+EUPNöŸpðÞ˜‹Mxì<8{‰¤º_2|E¦£Gð,!ãQÛðxÍy‚üGô»± fFlëŽÆ—5dîCØŽk "t>¡+Pµ‡;Špáý›œëmˆwôf½Y<áÙ\й~²£¦J‚½IJ@Zø.©SÃ|‘0‰³qøà3ËŸÜP=¸{b•…v¢' âT'T{ˆÿR;¹>±ÖThoŽ+!ŒÄÎ(²ýª®àŸ<‹tæ±8Ñl'¤ØÓRrHKâ©–„|¾-SÃT½óæ~¹Ï° Íê´åäµJF¤ÌW® }cÄ."…1\eÔÑe;7…[Ùñ‡Äì=ÍŒX‡ÚÙ—¸wùðÓ%ê( ™ëªñ>óYÏ0–O * «CLueiÀ1Oõ¯è¥ ¦’íê !\ðÄá%¶õË=GnÆê(Hv€'L¥ÿÑSÉ£ŒŽJ«[J(Wê N0‘C¿a®Ê+kC¡±oæ†Bô1SßÚòÃWÅ>|ZDzDË@>¨4é”$O᪜”„úÃàÜÞyñD.éŠ{ @öŒ««çÂ=¶÷ùÄò¤‚ĨÃ%™+ŽDÍy¥i…|—Ûù”F‚æE­_–h’+á¸RtXõd÷ñÏ5§ñx̰3ÒQXÏa=b–¯ æÀü¿Þo¿Œ©2IzDvTý_s641ÚCÆ»7(ÙOi0OÁØê7lc.m®©”„ 0­¯`…¸¶µ ÐÍu¥HóEdÛÁ+GUîž©¡|ªµML0bV¡suˆ…eâ!×ãeé!T~ðž–GëH|ádzÞu·Ûw¾<ÖÇ SÑw*p'ó§6k3(P× Gräžë°#vÇ¿> ˜¿®_8|c†GuÇ¡# ¨}ªÝ¤܆P ÌUæ°Àˆ• y-jËyGxHk`÷—*âA³]ï.òZÚZy¨ÿ}D=Ot»³3¿±ƒg÷x¥U¡ò)·éÒ:­_µ¬R²i²iMh)AÔˆü8<œ—@õË15âú°fœz¦²Pa´RT »Â.]!Y˜©u!5¼ÕF‹ð],‚»ú#7jØUÍ4ˆñÓBJT…L*P *h1<3nòQÒçpV)*…ÝÏ`·®%Ì⚃P8Åtx1Sƒ*$]ô.|V?•NªWœŒê ¿’\àŽbHFD‡$ÇÀ|R“Jú]ÚzŒ¤’Á¯W#—q_fp†ì29‚2òÊ•uÒŠ3ª™4:kG•WQŽ QÊ(ͬ¾ }ÆÍUƒ%Ñ»©4<£‚HŠR¡”D.ÉöÇdeÄñà-¾¹ýkF±’4÷ y-bj«ÊšnÏ@ŽØt žº<›† 9ôsÙš>PB©Òðb÷¾îÝ0•|±5B&AS(ò⹸Uì5Xx[Rê’ä±±£q”[¬o‚/ɶ˜S‹¡0%;¦6Éc«ñ”„m"éÖÊ÷ËÅ^jÔ°Yjgðµ»a?ÓN&.Ø{Ûe*rƒ‹\²â³ã ã Q*ÎÍ-ÎÈþ² Ï3iý´z 3Ù˜‡CþÐ$‚¨K~Ü¥aâ‚«Åp ºª*Ó2P™É¡$åñSÚ3.ÎS²W`E„)0·?%Tg¿Ï|? ’§ »È5Ç6E4VÖf¥eû×Äç#¦¬¦°I‚7b]ÎÆÉiÇöý§Îó쵬‹ÇŸûäè{(Œ9'Ó}sæ˜;^ž×ÚZÉוæ¡Ûˆé}´d ­¯;âØî¹aó?Ôù¿4ÝÿŸ–[Ó •h¡Ú¯ª$Uþ¡â)×J:W"A}Rù¸×?tòü”[ÃG5WÉ öÕ§ÊÎÉß®~ˆGóxýÿO'zÞ'Úµµú1ìŸÕ¡(dÿdd‰|*¼Ê|#!æJí§‡I›¿rŽÛòkÁóÍö=9¾u÷óÝya/ÖU’Â5Pû§ªH<}²õq/;…§µªŽ]ˆ§ Õ\cHµŸ_HˆŸ_uHccuuãP÷nxîš¥ê” $*—kF¬·à Ë9tÕíhT‘óÿœ•åËË÷º´£SÌÙ®Ó7atÉ|ïl>#¤ ¡r°#0Ö¶-‰>q¼sûöBGB‰º¦+–nBK/¡6h¼¿­¯´Ë±¦ã®~¹ÃˆaD3éð%ýàŒÁïh¦4¨=$ÁIPÝÜUA4Ùi™p UãF° ~F¿a±c‡½å¹ÿááY³˜|µ¥Y³²¿ŒzNãñß½óâÅwO`<Ï›ÅÿÐ/¸ 4IxÒ`#um8»&‘Nq=\–ãJÃr°Â3Àê °RkÓŒÁÕÎÒ.£ µKVá…½tuü>µˆjO*‹í˜+˜³ûÚ«ÖÌnE³OÆDÐÔ_–ïRŠšIª@y`,”T5¸rí¹Áùn£þ5b»„"†qã!‘D ù8+úñ²C~åžÈ ùȃBöËæ”0>Å‹²ƒ{Ån¡ôðH[2‰6ˆÙ®¾ÎS5Å–<–‹¥ƒr÷/ƒþeÈÀ:)¥ðz˜ît÷’»µ~^ ¯è¶ø\ÞB‰©Š0,ÅÇ*P c<óâ[xÈ”õ>Ù8 k îí¬iáp ðR_Ûá·(a‰RôH©$ªÞ`Ãý²êg<ÚÝ)>Ä™ˆÑPWÓžñ±^\!GÁ­å™Yù¹|Ckgù%Ä<<±ÆòÃu[Þ÷Û”{ÁO’••›ƒ*™¦àÒP™OìÁe_¯=˜øü1èjÙtzA¯—(KÃó7×}I_ì 4uJð‚íЋû°ÎŽÎŽ|1L{öð:„J£³É+…3Aåaõu•eÍ]nŸÌÅ“ÉÏXÒ‹Ç€Þšç<ûD? ¤^.±°Yky°KÆÇԦעb¦÷ò™Ï¿<¿ÑLm??T¸¤W]Ô”åá„¿¢JÃQba~[†5ºkÙcVõ áDºÈ<\zÁï¯Xnsr×<{Ó4tÓVÓÉsŸ.†‰`øäÑOü28ÂÙX;­áÙ¶5Ö'ºÏuŸþâþÅÝ;$ÅøcÎÜÂvÏÚ,³èV)/]ùþÉE«Íj—pJ$H„«\Æ)\iŸ}£3œŠ°“qš,#´Õ¡¬ò´2/ƒ}ÿ>B»‘z¡ƒÄZµ÷×Ý4b_‘H_ã ëªÞƺ³—‘Òιse'ø˜[¤(ì¸ñð†Hˆ ¹vWÒJ’¢,wEîîm¨PÒ…m¤Dâ·õÚ=Qÿ¤£<ɳu¥}Nwgj·ç¾A›RžÙsϵÃÙ3< È¿2¸9'' ñ™(6Aš¼vÅ^I\bL"ŠdÂËäŵ¿«ÀP20#äh±C%ñ™á…xÂ×{Ázq$0ùûÒ‚œLÒç&Vøâ}Øçá1'ßmßÅŸ_s×¶1õY•¹ùH¥ ¯ ‡C0fïc÷3ö·M»ƒ˜'+ˆÏJ–À2,*ÁKˆ¸ãŠ%xÊBÉ-$câ²Ãêš`Iõ<íÁøY%4“7Ññîï»a=©ŒÁ¸F?‘Œbbxw/—h¢©¹@Átxë——¿6žˆÙ\#INWWsæCË%X¹±üN×GÁì‚H¼OŰiF6À8lo<þúb“ÄB¸åŽ6ûöì¿|ÿ듎ž8¾m¹Æ!áŸê {À“CeQy)ieÚŠê1.Ì)ÊAL&j:Àã kÓëÓ>EM&y¨ÍÓyÆú¦Y¤ð˜º"ÏKAñÈ$L.“$ÅK@´S[£â (Ì$ ùáa­”€T äk‹<ÛÚP[^Sê§)õ¼ÒõòÆþ†Èt”‹˜Ê¢ògkoˆ 솮A¼Ûî®FÁt˜A¢vwwäN®fàéâ(ò§{»1Óñ : ¹··£öBfÀtqa»%HK³uáy§<ø±Ó`/—¦À¶ìœ´ô^f½'2*)&9<‘è YIDYëËO@‡XéЭߤ‡­Ý¤ÿÏìjúíý;ûªûØÕ³`ãEpýcކ³BâeŠR«ÿc™ŠPœIxIDeuNIQ6_ýažSš†P®‰ú Áþ&‚ýŸþx+(–M3dž«:\;ÛÊëkÂj|âãSŸ„ò²+2n}qR’›•Ÿ…J‡O Ψàc’¾êˆÍ³Àë`½9šÿ,n~‰@ô^Àd°äÍ 8ü¦%½r¥%Œ†7a¶êùÛ7ÞÂsÎhÆ)aщd®Í’y¡PF«+…4!аËÒÑÒ”ÈÔÐäÇ–'–Ttf>Î÷/_(Ör™CòYs8ãÆý±Z<ëÿ¬ÅVk5™tg}¨ò%¢!Yðîä꿤~<Ž¥Ù =g¼{ìÃ>½Ò}òêƒÉ`0û.‡G¯ø`©kctYUMYcabQl_ròTË"ïîí]¼Þa›…àͱq ‰Hn¢þ—2ÏfÁB}ƒg¥jÕrˆjéÛÒWÔ£UÈ|µºåæž‹æî/¢O˜;k>Ãbl°~·¹g¼Rm°8!?9ƒoi¹©> ¿~ÆÍÑGæî"ñ LqK±I’!ä˨["þ$Íæ??»qÛf[«…Vœ z3'›èÍZie`pˆÌkÑOÛˆB0úæÉSMõ±„ï¸RYidtBbB<ïã)G1(.OQ¨( «ò@þÈ/28"LæBôedIdiAvVvßÜX_ZŒòI/_U¤¨ =„PciMYeIS5*gÆEk `eAf­­ÃÖ³ó3u¸4;MýʪÌÌ60 ¨ÿAGendstream endobj 165 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4371 >> stream xœWy\S×¶>aÈ9"á ê;Ç_Uœ;h½j­Ö¡–ŠZ'œPDæ0Ï æ$+‚až!$pÄ*T‘:Ò:µ¶—Öj­¯ÕV½vÐjm݇»¹¯o'¢n‡÷nà¯dkë[ß·–„²³¡$‰ËòÞ‘á~s¦yÅ+üb,_ŽÚ‰wüsDÿv{p´G»}£GЮhµËçÓÃ(ËgòˆE‘QÑKbb=ãâý’v$û¯HÙùz@`PpÈšPE¸Ë‹s' =uÚ3£(êij%5–ZE­¦¼)j µ–šH­£ÖS(jµ‘ZLm¢^¡ž¡6SK¨g©W)Oê5j)åE½@-£VP¯S‰Ô(j4ÅP!T8õåD9K¨)$vÊŽÊ”8KêmìmöغÛVØÙÛuÙ¿n_o? ¡'ÓÇÕfHƒƒCÃá:GGÇDÇ;O}ääïÔë¬v‡ÍsyÊ¥Èå‚ë×ÖŽmd¯±âðQÃN?ÙÚh³ nN”ôÇRè 4d˜qb?-Ï-SíI…TPçä¤â°[òôиàùFAïÏ7A {•\ ½µ)Ô€AW¨+ìF29*•žÀS 2´*Èu_Ñœ‚>” ƒå¨D†•Rä€>µwß\~KØmtEvQàE7V)¾9B Ùµ>Akiø š#ÛãÌeáØþêîHFó­”mÆã•ö ú}Cö&×Ò[•°”ÜÓ­«Ñ#P¦9®fz©óÈ‹f ?~|ìÜ;e›Vr8õw×:ýds鎊w¨CpEc?Gê»Ñß,¹ëÆ2ýÓ‘— n¾ð¶-e؃wkÿ~îâÈ/§\Årn€Q4H/ë”ü@=¨VÎçââ8)ƒF}uã6]Ð5Ùü×^ÆáçQž´MWÔÍ¡Rö£;ç­ä›ðg²ù+_Ça¹t‹º¨Gh5ÍÚ æI¯ó$"É”Ò,N6Jš¯£}×mÅ$"Cnc`gÌzŒÁñ˃‰È±÷î!gn¦A°:f[äÖ­‰~°üŒqoDwjŽà; ×x°åè[û †Õ†4øi}À!)Àë4Õˆnšë„³ë˨þº;QÜ‹2ä:é;ì°ncüŽîÍ>Ä-ˆ÷és¶óÁŠøº)º-ô=`ÐPdó rãgŽÀRÏ/ú4µÇriµ ƒEѬÃÛm'k;G}rúyLY^ÌER$ H3 Igvm»ŽŠ¯/$´H;ðzÙàñâ©:`Æ–+Þ†`pÇX2»aöþD4¤óhÅÉ.¿ò(8V© Ùºnà(¶g0D<‘¤’!oWTÌv¿°õÀ,\þ%²GLßg—?9<{­%Š#Û-L8-\Ð,Â…17o߬%!™ÁìÆþ²ÿyBâHi ~6z1~™zÌ`öjnÓwJ3y3ªŽ”ÎLWLâžAYƒI)eSè90¯«Äc³4ÅÛ|ø„<5OÈsMê$zXnאַû~鯮‡ˆÃd­á-¾+ýüVÄqšRö[üôïÀq]™ö( –f"½HUÒÁ£ÉôÁ4I9 ­Ö¤¦C,U—ÒP×PÑÂ9ý$)¤”F$5¢¦zIÛQ”vÔV”¢á28”hŠoÙT´°<ºpQô2­ ·U4;FÇiÓ!§ ˜r(ªá¿¡«Àž«†ô4N­ÎÌÌÉUÔ+ô!–b]äVÝÏ·)ögÍ<šQ¥ªO)Î2&A3Ãv¾v"SkôéÀ솬d§S ³T¯ÕÖTsú’²Â·UFÂ$ç®/äØz(©x¥ â8AÒ{_ô¼iÛŸ‡ò7¼TJX;a&ç3ŠVúv~z ¿œÆNx*¤ÍÁ«zPjE^Ç?»ûÃü·FN—¦Í%¨„Â:¥Y_‘­Reæp> ÂïS„[ëñl<ûâíh~ù|õá¾3_µ/¸˜0Tòh}  ð‚È‚K±²ZžèúãÅHó鋺|¾FÃd½‘ëè…Š  ×àËjµ ñ–GÒšYÁã&«˜šýè Ü,ÅvWãŽs¬Í…öó}<©Me§hß)y$¶VaôÌ,êá¢ñ”Ÿs¿„ž¾qÙâÙ¹]'8ôùà/—A5Ç“ið¿ÃÁ͉³À1èih>ÍhgKZq‚ø¬ «Åq¼pÕˆ…6RGô½Y]µ ¢!C£ÎSŽÅ…r,EM*½ZEîMû †èíê8Í6†"hÓÝÄ*‘Fr}ê• °GWT…F£«òº£í¥íZ‹ÄÞò¼µ?Àz«¿J ¡»ÁßrH—¦< !C£Ê~çË=‰d(òÝ›]¹t«j±#¹4̲¾j5%» Ê2Påî–ÏÁñSQYNQ—wÓÖ0±DJ–‡ä»+h¢êÒ$Ã?Ê Óó3*  J Šï£½òïñÞ‚Œe¸W@~qA1Ñ­OäõgÔYã¶±1±Ñt£ë¹ÛhîÅIr}Åœ²S‘ki%l ‚#•ZL…mó=¸wsÅF`f-ñ[¦¨Ki2ÕÔ6uùoj:bhæhoÀ >”^§^ûZØâàø àϰÊ9ßF]ølÿIs9Ç.ò+lêe¼ê{,“OÆC6®ôV'µ™tÍÐ ­šV‹þÇ䫪 ˜ä¬¼¢ºQhj1¶\ñ×ăr@™‘ki:uÚ.rî;ð†ÊbAD¾2vQ`§äa2£³ºËÄ{ØÑsKpT,‡.ÐÌÇÊøÛfºãŒ°í­ÈàþÄa´2Ø’³>Ú?>l‡b=øB@clÇî:ÐZœfMè©-©l;ÜS¹ºà@l“_ÓvÝ*cMÇÏØ+ˆJÁµöZÖ57¶Y¬²ò3L¥€´Ÿ«â°‚ ”yyY8SŽíPEA÷¦6¨³ÐÍV¥o‚AæÔ¨K£ÐôZ³*~}„§¸Ç@J™Jǰ÷öhÍ{ÚF6%UÆÅ$§Fùv{·ëí“Z*Î-iª>x^çN4åÌY¢)hß­f³„Xá¶Û¶âËh¨¬T DêÔ)9\Ü«k¢}€Y6皈žû´ûtÙ uLŸ—¸"˜èÚĦ¦º*áì’ý3ðð)c° –=˜Dz/¾=eàœþ¹„~‰ !rÔ'ˆK¯ÚþsÄ!Žž¯&®!ÖÓº’Ë\ƒ€_’&@6d'ã¸ór'žÎªÕ袈:¾ôľré(Ø<žØÏI]¹¶‡tš6Œ‡#&^l¥µZ¤ùU˜VY î%Ph(0 ü~G¹Vc?pá±õIOç_ %©‡‹pŽðÂúz0‹NF‰ø<ò&Ž›mÓ|° q–!RÔ&Ò†k¥Wd@ ‡ÿ[ªÄ³íÍRýýêdOüÂNŠÛ˜LiCS @„÷¶Ôʶ˜N…Po„N”il#¬³Ø¬µÑx¥ÏS(v<ÖYñÍnXõ âá:Wï{|‰ÀyÌ$,Ã.ßy ¡ꪫæ—ÑìD ¹Ù‘êRíJ`Øüí¾Š­Iþ£¶ƒctgt—úR$ÝúãMê[ Ç¡$˜JSAIÌãFÜš1‚¸@°íêC¸N½K³6Ašv…÷as?ð2«³JUdMƒYz¤)ø}š†2Zœ7ðpOz!‚{%ì©áÅnÚGî[ÜëìT Ó‚Ñ|k·©zÿÕŠrõ™ªì< 2~ºzl†¦¸¶ÐÍièdÐ~i}!Ô}¿ækÒŠ:N‹‡a·& 'äÔó°÷D#e8Oj@Ïܬ4ÃI8í§ÅÃ-i}ѼT´PžCû>¸QpÃ'Úô;Éöì]˱gæÍY5ÇôKŠ+øÒŸ´6#à¡Èžf‡ßê9ÔűOC±º˜Ô'ésb˜èšd£©º¦‰{$áx‡ -?÷© e›\›OÅ^N;…F_n;寧Ä-A•»xµ:2¶BHe)™a¿Qú¤únùÊ]o49ÿpüòÁ¤7¹5í«a*‘Ô0ÈÒEè“L$ã•…†2cª°‹L?_øþ•žÈ¶´rþÀ¾n(…\UV.$3Ê¢¤†òÊâ:{aJ“ŸçØbj:Ü©7éÚªùŠZS…˜›09ŽG¶ŒÌ{¾ï4ŽõRNZØ}²²ø½ëü?¤­ÈYó"ÿx¢Bƒ¬þÍPúûCÕk°)X±†Ñ o¤l×/e¶ò/¦ª¿ž©$ÿ¥|”kEçCD¹Þ@Ô,RcF¤'áxå¾Á‹¶4Û‹ÇYîo2NœÿÉŽMñ(çò“´¹¥ÖV–tëèZØ“ž­Ñ¤gsiÉÅe¡Rj7¼5 6L‰‡Ìznü¼îÍ…¹ü¡mÕ¹hhäÕ$ƒzoí«<7-xn>&º:'‹× K³ö³‰<›©ÄëèDÈ*-ÒjK‹¸²êŒ´½Çή¼’ÑC$ÊéêwùGA H¼liçíú¾@DYĨEl–‰i4~ÎÐ%kRx:"o‚§*Jc¹Öb0ƒžiJªŠHNŒâXÕ†·#{IyåÜ»ÿàÙqý¼Ý¿c6˜"5†Ø“k:PùˆÇ£Õ¿höƒ?äÀaè†*M%³¶>ÉÔàôcœßƒ,ÿnl^ÿE Û6ü‚m_€9´ƒaüK·ŽZ ›ü"×§¿ã¿oÌ…M¶2š;RÖüÿšè õÉ[§OVï\òGôûyñ_.% Üü‚§' uˆ’ •F´Øh‹‚Åk²óÑ~ÁIQQQ5Qíee†N§ÓiÐåd. }³/Ñâù¹L®>»¨øÚÇÈ‘C[Fü'Û3ƒ(F‚øQ¶ÈG|ê ë#cH;d×k$ßÅDü&«xõÖýh‘ñöç ‘áÊjE|l¸%¾Z}A¡žƒXÍÜ勳2‰åYƒ2||ùIPOYA üay4 p]¢ëE䔄œb“û‰Ó[fJ2§¥åe*É©ÖXŽRë ﵜ9rˆ×éòó¡)Ì)ÊæØºŒ¿-ÀŽËšü:ÛkL&ž€ýo;ÙU°Wõë½V½´8‘ËW-FÒ{^î{¯ÏÖêÿŠÁ†Æ#2S5–3ÝÕ5Sì„l¤¾jïmØŸkävæå( oLi0ÕÕ˜{ך;;®Ãaû_yׯªç11/¡™t·>mëÿ Ê~‘T ò"ØûëdDwì| ½±¢’ÌOs^^ÌååB.y¹í’«—‘ƒíõ¥ZqVR‚L¶h?ѳش‚~²A†ý™l6¨~éÑ…ĦïPý#‰Owµ­ŽÛšäÏ%ý«Ö3ÓkžæÿOϦÙ> …âKÒ?3ö!v$Æ~óÈáC»C™Oü²"ç·¾ŽUͲLUl 3ò2TéIÒiŽlHS@Ý»¾ÿÝÒ6M*yT|½¸¸ E”è륂ÃÍ¡œƒÝÚHÇ!Zù+ÐkµEo;:RÔÿÌ‘vendstream endobj 166 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2486 >> stream xœVkPSg>!$oSršŽÛ*Óz«£µõº¢U±ëÑŠ”ûUÃU‚@ É!or’p *á*xÁhµÕÖÒR·k[uZéåG·ëØv¿c?v»_”jwgêÌn&?2s¾“÷yŸçyßïQ¾>”H$ \¿akFZlz˜26=gþ¼—·&&«”±ÙÞG ŽûYõ \þbð÷íznÜH6ùîÄÁI”÷3%=cUföÞÕºØø ‰É)©{”iµ‰ÚLQ[¨0jNm§fQ+©×©¹Ôjj J­£Þ ÖS¨”ŒÔ§|)u_”ç#÷9$Þ(>é;Í×$™'i—FJñ˜lúÐØ—ÆVù-÷ÓŒ[Ú'üâ3›§À#H<Wš8D¾ŒSh{ÆêÙÙ`ieÛPØÁ;6Ov«®K¯ß+!<&aÃáåÌž®Ñ+?†Š²’6;K£4 ¬^‰¤<sVO(h ²mEë%Lˇo^¼ªxÌá%[p‘üÑi½RNNK&œ¦Q˜ç ´[æDSý„Çž x åâÉ*,»;4ßßœˆ¡UÊtÉ%áéÑiQé;!âûN埬¾bëªè©ºà9ÙyꜳNBÊãˆÑnÑ%Ò¤Ûk¯Q*σ—="$¹/~° ÉÌÕ¦ŠbÔ¨ã´{ðtì¿‹`#à°Žs¨ÿ@‘W‰à/ó øEºÈȬ5ñN~j/ÒšëÌ` `­z}ˆ\Ù{n6àM€7ã©8&Ç#ž6 4ýÁhúåx»Íq ¬§¨1àÎЦ¡?ÝF'o2“„ HIúg–|}aìŒÎQÙåÌ4ü¢FÂé•×À¦+fnÙHJÙc¾}y$廢eÂÜh©¹Ê¼¿=üS`Ñ8¡LF¿öLñRŸwLë_ßöÊö_hé‡OàÔ‚}XBŠ žÇžh¿ƒÃw™ç…Âd™µ-«%†X 2Tã@>r&¿ð0UQ¥–‚ Ã÷ÂièáX«G’+eæ„Øm]Mh®¼öûKßB˜ÁläŒ*µ>Ëq¸Ð‡¡¹ÆÖæE`Ì¢4.³CxÁ!Bo¹yF,LFSdUç³[µ5™m‰•q•áö7T¿cël?vhç”t‰à€Éêà§ÖÝãëL^qôP…jƒAS¢çv»ã ðˆÕ†éRj2Tî¬fÝP‘Ëpc¿zUé›±ñË€†ÌK†/ŒŒ-ƒ±ŒËWa¹œ+0–ÙÁ &SƒÃLp;ݱ}F' 1péÚ?{1—Ý¥4hI*õ õyèCöÆÆýLú M’U]’dK™þ’mê¤Ä$`C¡öksÝiä‘£éRž.%/’3…‹v=?ÃÀ©ä_HßÂ-¹xâ×ê.`¯Aï5ûÕQÿh\Ï:áQ`BÎëj(«¨:˾‹„éÆ3ŸÈ’Ž×¾ºyíJ`ƒÁrºr€fè‹è‹_}F®ð6Ï*^V8Íö"œu÷¼W8_NzJ}Ž8áÈ€f‡Éj@wH)I–t)‰˜4³ù®pÄÖeµß¶‰4‘Ì-…D``)¤òd¸›¤7À¤Ñ%ÓŒsÁÈ]²^³Ø,©^ÙÅ߀£ÀöÀ èàhïü» <¨ö«3®&SÐ˪.&J´[²tDÆÝ`é3YÛQ¤¼â¸­'½{wOdí.XË#5ëôiuMàg½µÉ\ío™Ú;ûímpú _¡uI;¸ÕÜÚ4vqjꎲhšÑ,.ú6û}Å œïm>M3+â¹úØÓ '¼ðà-/è—1š9…ËR£ÒYy®êí‹·Ñb›Wá³Y^…Û¿én øø6 ¹ÿM #kÑ8²E´ÀA pN57TÛaɉ&´Ð‚‡Ÿ‡*xÏØBXx=ŽÓ¤•ë³幡 ꬭ4Ó÷‘}MÏr…wÝù`*OÊÅSþ:Ñ€ž…äo®&µÅUžGJˆÐ+nÁqëà-ñÏb¯{¥ËÎÑAnë²Ø?úÈC7-“fµùxpä²O.é]äKè•’#Òψ0¯pr}fidÐÃUìÇ#š,’ ¨/7Ig\Ó%4ËÝKþð(ÿôxõüº¸ß˜ô¢½íBI^ŸÊÖÜþˆl¹pä‰aï ?H˜Z Ùp›Œ•9]‰Mᬙי¹X–‹™[3®BGk›fœYA¹LÆåË‹ h¦—Ú•¡ŠQDÁž¦‚£yÇ*.U³u×\îêköœh¿Ð[ØUYå\þ)Óœh%¹tƒâQKÍz¯Š:®t{Ð|ÐÂNHiÝß­:c$fGmRðÀ;ë¾OüΫ XD®§üìð,² иŠÄ¼ƒŽF¬ kÉ8Ï¼ÛØ÷Ae ^—㸴õ¾†Ú ꆀCǯG]s j`Çu$¹ž9Œ¯pV˜!ãëtm Qºˆ8šKµ'Åñ*Å\X¼¦x9ÍLÓ”E×&:s ÷î֥蕉î¼õñ1ºxâð•«Ô_mCÈoÿÏmúþH7ÍäÈÝ»¶ÀFE6¹0ËLJË~µÍd±4Ô×wdãð-Ü:ð™­»¤[Õp¼£Ûz€¬iÞH« ešr5W`W×B58+øoǔ̩ۓ—­UgfÄ͈¨W¡öï–š1rÖf[›£±ºÆíî…/¡à%C}fdœ¬$|ÉΙð"lê¯:OfoEÅ©¾î“<ùô®”,r_(ZH?N%ì¨s~ &CO &Á¾I•L¥ï {æ»ßúiáHÝSÂÉáH2ö÷¢É/"ÙåGסò8ýpt°~Ðð@¦³8kE{EK˜ð4Ró¨Ô•F°QØõ¤¦˜ï„Žò#ËœîÉ,ÍùMi Ù†l}¦#«: Ñmiôv>q´ÊzØù´AÔ1ÈÜ*I±$PAúyvZk4l&žË­Ë5•×úO˜&«GžÆC$ÃFs‘‰Àw+5åņ¼ýê’2¼OßrHû]f|x$zÂLÝýOÞ~÷…ö0.Ÿåöåö=$DÄ·€ÛØRÎþJ ÙH^˜“ÆnäÅ8úö}á_’¯”¯—XqHøeϺÑúàÂÓuÞ›húr•=êÿ £O £ÿ›;T.aUJ·Û\Rßð¸©~¾Û2üÇ:M&³Él6U™ù+þþõod¸Ö•endstream endobj 167 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 936 >> stream xœ…R]L›e~û÷­bW ¥ý23Eð'AÎ)$&Ë&ç³ü˜®tA6D`¥üS,ë´=¥PJáZ¶Á°]+ Ã}±‹q ¸ÉbÆêftÉŒ1^,»1§øšÌ¯zkâIÎÅÉyržçœçˆˆTLD"Qî;ßmm®mÙßÐÜøÊË/–Õ}ÐhêhHw¸>Zµug+_ (¤—þ¬Qýœ½‘y3‹¤ƒ9ÙfnoÞMÈa¢#¤’",Ù&Œ$R©E_Š Å›’cW>ú­â1/‘ñM˪5dŠYœ5ÌѰY©khVÏásÅw©Œp´¿¶eì²–- %v»! 30áæB.}¨KÎz^ÿË/+aTùPåã…‚­Žâ›Ìqë"p˜¸í‡9,”ÓœÜvúÔ¡*=S¤?º‚!môââÜçp¢:i¦\ùH[#ÀãzøÖ„ê7$Q$€J [žªMIÕÁkŽ@ Ô˜ßKîa¦•±qZ,ˆºcà¨çÞ£7z»Yß"| ..ÀËö0Q,•±ªÍÉOPöË€ŽÞÁgÝÇ]ˆ@â¬9Íë1g§bb"ÔoHR,>©®š.Z§NÆOŒ ƒÕÁÀÁ¯o{Ãp¸;=ïÐ Ì‚wtäüÔ]­/<<ÞvèèwôMØ/µõæÙõçLAë|Ó%ûŠmɾj8h+?b1‚|tòÎ[îÓàë3xœCí=T¤uu»m!a™a˜™ôLû} ­ŸÁ4`&$oOn¦¥–ç2æw¡ƒG]— ŸGÆÁŸæ5ìïø*ÕÁ¯dÆVi«ì8Ñœ&Ö}á+ÓâvF8Ýΰ{b¨0–"ežrײ‘›Œ‘Î÷Pò}ç:pßÁò·Á5J²·2íÆ4¿”~’‡È`Ñ¿©aÚÚÈ ¤½^ÁéÉÍoQ pû¡²þxõÐýb_“°üáºú2Á£3eìº÷?=Âl×?3°!„’{|¸ <Øÿj ×¾Ædù0ëÿ12eʘ×1?Á«’XP†(Á6žêÅ6µq˜-zKŸÓþÈ©‚Á'P2^]9æ®'#üøÕŠß¸C•»Jû‹älyù©+–Ùì 1¸|n<éÿ´s®Ñ‹.Žž{0ø¬£î”®¹d÷.ª£z­Õêq»ºå쨫G–’2ʉTù8Ï'>Ÿ~|g†´¢UñXÜ7âñŽù½S?*„ü ,ÐСendstream endobj 168 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 645 >> stream xœcd`ab`ddðñ ÊÏM̳Ðõ,IÌÉL‰It7þ¸ÿÓ›µ›‡¹›‡eýÏiBWOñ`ÖĤä”T'gW76 A , 3µ{™l™V|_Ã÷ŸIeCãòòË?]aþqò»²èŒÚV¹ »²¬‚nŽüîÕÓ'uOí›.ñûºž }Óº'Hή›^U[Ú”ß&W¶.oAb7Ço®ß¼¿5~+kñ¾vlÏöŠ䧤­ÉÙݽ¾{ñÂ9«lžq¼¨(¬Q´9ÃÓ: ›#¦fßæ]+¾s-Ù)¿ùÊöùË»9NM3k”ï¨eåûÏøöÄMßSw0~ç9ù½è´ªïkE¿3xî÷ŒM-(Η»ð}yOï¤î~ÉîYÕ] ]ÊMµ@ª»’£vz÷ÌÝÝ­Mm ]­rš¤º:šÒºÓ%õö{_ûÎñÿ»ÒwM¹ß|¿ÍD³=c2Ò€N©Ø»{Ó´mKßÊOZµ`ñ¢…Ó§®Y¹¡›cåªb÷°<…òDy$1~g¿ö½àó®÷¢“ëf´´vu66É…zÚ…ts„el<¿gÑS —vÞ?9m÷ôîms3šºÓº;8ª§U-Y²tþæ½1ë]‹ý–BuÕ³¯¿«Üy=S)"Àžfúø2®È˜Ø= ß•\"*‚~W@"I’ú‘ô=mùwC`¨p_ý>i;öPq«¾°cѤm“VÊaÛüÝ¿û»ÐÞø î¿~ëèþvÕßoüò!ß'‰jþÖëN“Kb[ó]àÑšíÝëÖT$Ëó•-øá<õ{ÉÔÉ Ø–så–ãb Éçá\ÞÛÓÛÛ3¡§Üi<< œ8}!endstream endobj 169 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 634 >> stream xœU_HSa†¿ã¦;nÃÒX Ù™D”Ñ,-Э0ûc”ÓÀ†…éF:­v¬l›Î›¿µ–smiьڜ%4(µB/BC$o,!ì"(ªß±O°ºé}ïÞ‹çåaˆ4†0 “x¬¨ØX[Y·/£¸ªÚt¡òbtLêÍ+¶XPJ@)}*®$Í'¾]7¹žD—{&}Gf!©ÄB≜$’$"‹Ðˆ”èHY`r˜ç1R %¬1Û·šÏc)J° % *„Ç‚u¢B5XßoÔ›êú Iì œk5VêœÕL uµ†'wo¹ÜÝáOêÊÛ[]ÐÁÚzÚÝþ¹Tp k1òˆâñ`##f‹TTƒÙTC³ýfT#A5%±‘ÿ{{ ½Êÿ¾ÞÈ|Ÿ–àOjSÁÍ.§ÅO7£JÇw†Q›Æ†ïøNp³îÎî–¦ò2[+GShš‘U½¼L 1u'ëñOýíðt©àKÆ¡üôçÌ…«À¶ØÛ::Áᳪ1&У@w}F4µ¬ÂbéŠút¸Ú¼}£c=S0MÀB@%ûWVä^ÂKÑŒ³*øÕ èE£×ˆ Éß+8¹TkTÆ ÎhÜnç Ï„RIÈÄ9*ÿendstream endobj 170 0 obj << /Filter /FlateDecode /Length 170 >> stream xœ]1 E{N±7€B‹ MlRè8ê,Š, !…·7cañ™YøoçÁûá2ÏÀï)˜'fpžlÂ%¬É Œ8ybëMþNõ4³ŽŒ÷W_ÐíóMÏÈRœëU³C&X\¢6˜4MÈ:!TçœbHöïIîÀèŽf«j¤lNŠuí–HÑÊŠŲ©8 `Ö”r¯bÅÇþþC,law²V0endstream endobj 171 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 357 >> stream xœZ¥þLMMathSymbols6-Regular‹‹ø©øÃ‹ ‹ ®÷Éèãß asteriskmathprime0‡ˆÒ÷¬ÿ~â÷²Íø©÷1‹ ~û.È÷)Ç›‘—’‹Ÿ¡x—~„‰Šƒû$1™÷%˜œ|˜yz{~zˆ€‹‡™û û$哉Œ„‹~xuv—†š…÷*Oû)O{…„‹wuž˜’Œ“—÷$å…N*z›~œš˜œ‹‚抅É÷:–„œ€“‹˜ž—¡ÿm½÷×øŠ­l¢nj{tv„û!üG†~‹ˆ‹‹}«€”””’Ž÷Vø2’šŽ‘‹—•³ù§²¡¿ ¿  W/ «ŒŒ˜ŒŒ“ Îå–5endstream endobj 172 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 273 >> stream xœùþLMMathExtension10-Regular‹þëøõ‹‹ ‹ ¯÷tâßÜ integraltextR‡„÷¬ÿØ8þë¡¢ÜùïÜ¢¡ÃÞøÞøõ8»Y®O,d*?zTgû®‚û xû~û8g^R‹~‹mŽv¨“¢‹™¨u˜xwu~m[½hÇê»â塘¿¯÷·“÷ž÷™÷L­¤¸‹•‹ª‰¡xn‡ƒt‹}n¡~žŸ¡˜©•ø$ø•ŽŒ³ Ð  To ¡›’Œ‘ŒŽ’™° ~QqÕendstream endobj 173 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 302 >> stream xœ#ÜþLMRoman6-Regular‹vøºù-‹ ‹ ¯÷‘ÍÈÄ01hµ÷¬ÿcv«ù«Çê÷Àêøº÷ÓÔ‹÷¥û‰û‰‹û¥BC‹û ÷‰÷‰‹÷ Ó,˜‹K‹&zSo4C~j‹a‹GŸsÞ{Å‹í‹É‹Î‹Ø™Á¤åט®‹¹‹Íu¡?šVŒB‹>ÿc‹²øŸ²Ëw÷¥áø²`$‹˜¬øº©‡‹mIK%‹g‹d¥‹Í‹Ç§üj‹~$`dÂًËËً‡v øCš÷o•“ ² Þ  To «ŒŒŽŒ’Œ“Ç ÞFendstream endobj 174 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 543 >> stream xœKhÓp‡“¶–8Ë|ह$xð2xQqÄÇÀ¢Œ1tR¥º²âc]_ëÚ®mšvù%mÓÇÚtµíÚQujÕOz< Á»÷‰0ðôÏÌ@;×|ð}4e1Q4M»îp8ç¦Çæœ÷ý3#㮇>svï±Ü;öÁf†ÍòV/ù~xóà×CÔÞL·¦(êuž2÷)”…¡{äõà_óÏ{6ôßôÎÎÚP-Œ¨C,=‹sÆ(ù,VYi6Yr–œZk¿é”Uv£Ý+ôM®FM•â\ix¸›r¾l¬ÆlD“r|Uj¤B$‘ðxF/ÚÁq#?N&í©*Ô–¶®°EMîd¥JØïÍÀÇ_•ʰÿ fqQ ,TÐü¢ÆçK<6º¾àÔi7kŒ§]N¦#Rð2‚š,½xŸÃ:×Åfº F]Áš•E>"‡ò¨#/çËš"gU€„ÈŒ5¢¹¤",RÈÌ#„%oF‰­´:Y¬òßä&Rl«™˜JYmðýP—?Rø o÷Cň6TNæã‘¥Ô‚ÈÝ6NL^3®€1îZõm}«P(•Pc«üÜnÜúK|ãÆ˜]JgÈ0 5äªJ®®rŸÈð¯61!ÖÝíÝ-QŒE1ÏÆŠhpúskQU€Á"øAK¿T^^&OZÖWïp–‰Ç¶ý/¹¯V«—åbÎf£¨Ñÿendstream endobj 175 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 672 >> stream xœµ‘[H“aÇßo›ãK‡§˜¸¤ï›JA…hE'uA¥fÔÒ]LmC›ŽÜÌ> stream xœ-RmLu¿®ôrÛ9¥¤gÌQ3¿ÈcœŒ%,™HF¶ÁˆRÐ1äm ôX{}¿»çÚÞµ¥¥-¥Ž2¸ qc°˜ fCc¶cœ‰&û¢~ÐMþ…Cç‘øÿð|ù?ù½>,ï¦ÑhŠÎTW®T »:ÚJKê?jì2öïÿ wvvÊu¯…ü¼»¼ðãÑGG>í?ÝŦ K;†•beØ1¬«ÄpËÓ”jn˜Ó¶iwÑBÁ3mí_Ìïhæ5;Ž”~ÌöZo4í¤”×ж<½±5-“+«./ÿ$‘1!*@’²ÆÓÁ‡rò0 V°VušýC@xl`µÇy Ãü}ÄÐ'ý@)ï(åo¢fï(H““7„Æ#î Ë<À™6ƒ™7A­`hðë|#`µÅ ¶)2æ+iɬ¢W^!¦¯‡ajj>l;î±ó Ä'è•ý Qa ’‚ >µ?¹q Ĥb× ]B·f ›_øþýû©‰™lx”D˜âÀî+ó›ZXÂk燜!_8=å‡4†´0 ›¼aÓU0ºàÙµR sÿª¡½ˆBú aÎkñPF¥èý“JÊ»xn=· KDÉQ7X¨½ ¼xÞc>¯œ2°NÎ>Â%yá`PòSKHwç1zT†ï}ýŽ÷±.ð‘Œi*w—A¤‰GèªAeÿûœZúj-,jvz§{D—‹çªZ)n=£œP”à×€ŸàXBjð~1õ-ÊþÄ'ì»X“o˜æ<¼XÀ6B‰ u]ÆÁAr’á=/e>Ùe+â <ñ`Õ‹1)ò/¨:_ÇÑÑÙî]ÞnpÓ.ÑQ!R~jÕèâŽ}¿1ܨEŽÂd0\’ΰ‚œjМת{× ÎvÎy ˆÿ·RtNÆS*y ð«nÇbÙŸQ=DÕñ{AŒ‘OQãÓ„¬™ûmÿªÍIèU½È† ïñRƒ§ë/Ñs5µ–‰¯G–èDÆnÌÝýHõ؄㲛é„Â’g³ÓŸÞnœj>{å¼ÉNYî| _¢¸N)ìs†ØP$ J~zþ÷oæ—€¸>cinoQÞ²]¢]]ÝÕ `SÈ!eÅô̲%jééëïhºgþ|cq-› äªMgV ûM«—¢ù­SŒ2ª”s/Ëšíï´¹ƒ•z„çZtIÛ˜uÈdïU¥/ufZÕÆžSŽ(¯(Å%›UOV–å¹ÚÖ0\é²z™öãÇTÞN¡?4ÏÀ$‘Š›:­­M÷íO~{{+IMç õÍÊYŸ•ç†-äÅ:£Ë D“umå³i”7·AϬ޺yˆ­ñr']0˜ÉŽF£¨7ƒË‡fS‡òzóÊjðaAŒK@2?ÃþÀÃ+iendstream endobj 177 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 302 >> stream xœcd`ab`ddôñ ÊÏMÌ³Ô JM/ÍI, Jvÿîýþògk7s7Ëúï³…Î žä?*ÀLš œ \ ÌŒŒ,‰û¾¯áûÏØ¿áwEÙ¯êrƧ˜¿¿üÝ$Ú=¡£¯uÒoÑï\)ß=º¿;w×_ù=à»âw©þþÞ¾î “Úú[ê 3†ÊEk«tÿæîvžò›íÐo®c¿ù_8Mïæ˜4¡’<Šáßë¦ïûÞ/Ú}·þ;Søwæ€ïüzWê»9;›;Úz;&µÈ ÿÎô[¦û÷ÆîßÊ…¿£«þ–îìhoïnãèèmž:ýéåïŒåv¿^ü©û;_éÂÎs¾çM›¸m×Sn9.–|ÎÅ=½@Ø?±§gÒQhW…[endstream endobj 178 0 obj << /Filter /FlateDecode /Length 1898 >> stream xœÍYK“ÛD¾û/ä¢c ‰y?8B ª ˜SŠƒb;½²Øüz¾yÈžÑÊïnH¥ö°–f¦»§ûë¯{FU´aõéÿr;£ÕÕì¯ o«ôo¹­¾^̾|¡,Þ4Ž:V-^ÏâVqÍjLeœh¨SÕb;{I~jû?çµxÅ ùf³ž×´¡Ê2«-ÙO×snñà9ìç¿/~€"®sE\ÓF: e‹ÕŒ¨ùâY-%k¬ÓUÍ©j4å~è%ùvnyãœ#7s/_ZŽß×ÙïeT씓C·ËÇÚMw¦0&Éí¼¶„ò[œ¤œ´v-ßõqV;aI_ì©aðŒ®ª™h ÄF#7í¡˜» â…aÔ…E~®Ã†~œ->IÞžFIÛ·Û&HV²‘FUÜÀãIì}fÆÅÁhœþS¢þZœfd´Ì¬Mf”°…U? '2ãÉU»Ý¶óÏ‚ü×™ ¾í6Ô9¨¸=·Ó$Ó\`Ò‡Su2ß‹Êuíúm»9Žôm>¶Êçm“ »ŸÅ'͵榌\Jˆd˜¤–Ú=Ø ßàç‹Ù/>muµŸ ¤Hõˆå»™ð-ã•’\5–UÛ™ÒÌ"Ç7›Ù¯gé§d…~Œk´± 8Á&úÉ `sèÞæëDLŠ“M—oþÏ`P®)¥1ž—óZr©ÎÓOÓ0{÷-~²ÑЬÓNNq\=Í/º«7!ÐRkrðvKï@8KgÔ¡‰”–óÙ~^ƒ˜)¦!âÝÜÿfÒOÁ|§9^_}"ÛUQÓÊb¶Jn¨Œ;~3äÐßdË£Wp{{$÷#›=vŸ~Ž{v¬˜ªêÏWJ#+P‹¡R…² ã@*uQ©¤õÕ,I=/ndx’')xA!›P ¦äý.Yf ô+†”T6r\´`¬~\Tu6ñ“=BUè À”53¢6ußÇC£9–;#µ ýßsP+‚ ªšQâè|v!§rô=!—øé-ÿpÔ±èÊ6«Æf5RˆkÔ²Û‘ížXʽ>+—}Ó'C“.Eøy˜—yˆ‹]ì÷'y“Êwù¬¶_,ú‰ìuˆë7CÓ˜17µ+9/Ú7Ä¢ŒíþÐmÛîϊõc9YÛ†ÞD©Fi8íÕ8#ƒ)ú©Úzq䴥ǹwuQ¾Æ ­¬œ|­vÒ U[jo·Ÿ(QO g¥ÔTRòÐdùP,?D(„?žÉ 5:Ë¥VF  "·_N5¬1BhXS~‹‡YŠ"A*ß$ùf¿k'Z‹¸<—5Å Nk.äö>ß âJÀùúª»‹F¿wýÿ%»Q1Ùª& ˆ€ÿ0„:€0?¦ÔE{ ¿†´¾×_w²7»èóQž´aüé.uˆ‡ (2@ |Ow©p¦‘TßçÒ¬×àà‹öSÆ úpÈQÒß8 $y˜,¾ÿk‚ €¹lwûÍ.]HSæÝ”ágU.íÃßkâ°0çÇK¸]Æ‘Ñù>̺Ó<¼÷íì,´ª‡[á›îo¸½cùðæ¾[«+ˆÃÞjÄG!Zeµ;­p”p•œ´ ‡†Q“qú°ôxúø®oWÝ:œœE 5Aú“ëÝ!þ¦Œ,oú~à쬜7·Ã%ÝÖ;ÖÅ0òv³ŽÔø«Á(™R4‡õªI,ö{ŒðIÒ–‡ÇFj´ƒãÄbÏ=Ë•œ)=~ØÀ¡Ù¸^nnVݵoô•¿²DY¸éÿîPñ|((šÞÍ~ ›áþâ€zˤ¿Hfaˆ¤™¬ºgÃ&ášåz¤0L0äMûì¹OrÑ¥7É,«M°éq^”ÄQ‡VBZVèð çõõ>ÞÚ:g9¹[_Á ÌÀÞwÈO‹¸®V½è7œ|Êû“nÔÚë Y„ ¿Ê_SVE8à MžŒ!Ú/+|’‚bü–ÇïWT ¶Þí×0B2ßyq²>F5â*EUB¥*Euæ#pèöu(¬°z*Ø’»,ˆJœqqŸ3’Â"½§1ÿ¬Ü„‰$ ùœìgþÒæÐw¯ní+ع@‘×}»ôUQîAZÓHÑxW°º˜b—P.E¬I`M©Èt (Œ="¢ÄL'—äSn€S÷¤S$Ÿ,›Â ›% ÷šGæJpΟÐ=Wïe¦ëõŰ>ù3&X<(€ÎEä§3@‹øÉ¿\ÒÞwðå<œ¦¾O¡©¿|Q²1*¾1AñTƒ›’]¾‡ô.ŽSy Þ´3–ƒuª²K‹º¯qÖÍLº¹™[;í«©¢®Ñ/|…¬‘þ.X?zå£ùG/MQ’³^C<|ô¢ž>Ósñ©d×ýj^~mrl2LÑVteûоOønPAÅp§ËÈÕÙ/¥ غ}®Š† OXùÇNéÃ’_í w±YO&R7ÙIé—Ù2_‚endstream endobj 179 0 obj << /Filter /FlateDecode /Length 11524 >> stream xœ½}K$IrÞ½oÒ•P (KšJ†»‡¿Hµ.A‰ H«m@‡r»{¦k§ªkXUóâa;í³‡‡[TV¿Ä‹éüêK·wss{Eä¿\,Çp±àúß×·/–‹ï^üË‹Àè…þçõíÅo^½øËÿ!ǾôpñêÛò•pK8.µ^ÔžŽKϯn_|}ø§Óý÷—W)êáooÞ^^-Ç%·ÐJ;ܺOï/c£=.ÿï« A±Ì‚bYŽko$ìÕ›‡~ùê/þîÕ‹ß‚×.¾{ Ë­©’œx±–ž=^¤ÜÒ1´‹Ø}n÷o/þÏÅûåãÒ.~¦Kÿúÿèfÿ׋×tLí"§%—rqû"•JÂû@n^üî k qÍÇ´ «¬ò&–!+.9sŸX™Yk®ÇàX†Ì¬F³_ˉ•b)Ç4³2³v÷=ÍÄÄú‚„P/ú±çD 3iHˆá˜k¹ÈK?.K YH=‡°ý3nÿLÛ?Wþg;özÈZX[XBŒåX]z-DzòòBQkÕE| 4 |Ë‚8V­áØêÌRdf•PhQ&’Ž“K<ÆYž!Ž¥W:±¦kÿÄ)Çt_¦µcbõ„þ鮤MGÓ—˜hx|Êüi=¶HŸÂbŸ >å™—s“-zÛ…¶lktç+í¶]oL! âT¤¬ôÕtQS?æ”p¹‡ww÷·wï_†‹×w·?œîß¾¹øùúñÝ…Â ìÀ“û'C°âŸW1¯Ç•.†LÆ×‡W×·o/®ß¿~{ñæúôÝû»‡ë‡‹o¿^FÌH ‡·§û‡o.ùÇ 6 /ëE¦,Ygðw?Þ“ò·òá§ëŸ.c>œnhÔo¿½Œt4‡·÷oIÒ6_¿Åd|tÎØB-ǺÚ`O-ÿ¬UJ¶–ÆaeIërl+–æH?–äÜŽ9È·Bf„´4 °ògÚ¡ Ð#tß"‰-²ð"‰Ì-².Û†‘^¡ÅI´] #4ÉÔH‹‚]D5¢²ð5UEf{IŒ¬EDÑE¾æ,¢Z¡%f„t†Eµ&Æ)¬5±¨N…Ò¢ˆêñ¸òL¬ô7Õ×c‚ô#mBh%ø[05,ŠþR˜“CeQ¸ßÀ7‘i=†o3§Ì¢Ö…¨ ÐùI+eIF!+IkH´¾Œ­†¤5Ðì B7G ¶ž‘Î’"Y ‘D÷‹k‰´tr-½ˆ$:H Ë.¤e´…¿TÂ*’è2#ÏD¡½½bàDß$ÅcÂȤ›W³¬E‘ù××ÎÇÙJÿ•[(¤Z,Šn®òR-•m¥J-"ŠNòEDÑÁÌ¢ ©”ŒC ÂM‹ª4×,ŠŒ®\q%ÝbQÐbHµX”M‘.’há+Ë®t{,‰ôF´­®•%AKxnjÎ" —À÷]IµXéD盪¤Z•— zSIÄÊ­ƒ\q, 瓬][àZå"´™Æ¢2-¸(d#Õ‚¨L÷„‹ˆ¢õk´h,*ÊÑÚºŠ$2EY$åÍ$$éÃ`Q ;©K"ƒ!3ÑHµh]3Tµò7Ò-–Dû¯Ë·h XT^ð±/Eä䨶¥‡Uä`y>{L"ˆTƒËÐI³2è;_]'ÍbA4Ó¢$=“H@è&eœÜEVéª$þFçp®QMR'ÍbQdêš\i‹"“$jÓiYYîߊd½E-á QD‘½‰™Zˆ‚¹‘/‘j±¨ÖÄUˆ ©‹"Mj f±$27MÚ,‰®§".%‹$Ú´­0BªI½É"å'å¥-¤=EXR¡=‘yà@#­#dëBHgQ+Ä·BcQ…LRã{¤Z@—MédQ´µØ:G2½" :ËÂÉ´‰¨ÀóD¼BÊqá´IY”JF:‹ "˜&åЬŠ`R+C¾!ë+xEÄÀ.1²HKÂcFúK¡ÛÂ!ÅêŒÐÌólFR,‘ÔÄÅHŠÅ¢h³°‘%¤‹(2¼uétn"‹Æ‰¤?, *1‚`‚¶ô@pˆ(rÅDŠ%¢äˆ‰f11@W#ݰHêb³b‚?…£}É[Š&’`ˆe`Ò, ƒ˜ƒ?“^± ¾ÞDzÅ’ÈVËLàøgI«Z¾Èç+#U,KL¤X"‰®ÀJzÅ£Ø^Y¡+@ò¢ê¹’Z±¤ ¡ÙgI8XöJSÂ’rËWºR–DŽ™"ô7†<¾©µ°vR !µQtûò%¸X:;Âi]EuC`µ!ª,ºS3醑ãé‹‚H^ŠqDH20¥, &JZ%s „fED±6„tESŸI³DR×!Â2‰$Ze¹22"‰] Ȳ$Øl–]HµXM ›üˆZ‰¢lØK, nÏTžE‘*†ÔŽEÁ7”ahéET+uþ3Ží"#Ó ‹¨*ÇVÄ÷y>]4 ‡ í{ÑÙÒÙ`DÌO¥Ã“EÑ"Ö HQæ ÆJÚÅ¢ÈFùV¬,J”ö[D¶x%¥gQpe`R3•唵ð!LHÑ…@8'¢Š*rm‹ˆªpÂè*ª‰÷+™iÕõìhd^ETWsÝH»X\ ¾äFÚÅ¢h¿±iW@ "_U¦ Æ¢Y‘á@­‚È~h¤D"j«Ùh‰D’&/bƒç#€ìFÿIêÙǾ¬*©ˆ;ù¨ «ê–é¤]"©éQÑÓ¢¢šœÑ>wÝ0t ’ê²èÚ!¤…$ b‚:mH‚rPÙB0Pe\,4"r:þd1;MRV„÷PZˆ-¢’œRi!Ç[D­rJÂA #YÒ-‘%.%ð±€Â©–H*bõ)‚[I€"@ál!UüÇ´T‰Ò€AÚ¢‚šqZWIÍ8½©¨.»5…¥Š¨.Ç~ A´Ô“¦FÂ4 ™‡¡QD…E¶x «„ip WA²„i@(¥UœWQ€®’Ô“NA‚5R-¿ "1Ú„d‰Ñ€Èm·Â1ÚT‰Ñ€ˆÝmMb´ 飑™ét2š(EB¢ é&Šg¯Ç6$ ê$ÀZ†²iPÖ!eè‰â"Ûw*êì¿Ù°ŒÄI0ê)Úµ1"Ö\®žN°®vYo°"îc®“Àˆ-:Q„hžÉ&³âhm}špFtzyMȪUºl„¬¦1²´„hÆ–ŸÑ_UBÔÅ3-"$èî=#`QáªXß÷8©+#bAU¥+²þaVû B,¼n BÊ@µ¨‹lû‹UâÛƒ„$CdŸõÜÕ½LHààÔ¶{EŽBf]Mù1˜Ù¨ðyÄQPÓBH‘ ¥Ö‡€lvM,!«Ù>±b„hÈc–ŽMbš5$d‘HÞ,fel2ª4 5¼„TII›q&$ëd¿ Xu&ÔÆW$pz™ÎB‚ª›ž¡L…ž'4Gš¾µ3‡ªš£‡!ÙÎ>·Xí°“£¨~©u©æ,èI®«ù%zŒRÕ—Ñ£–"~¾žÆ¬zz`uËè¡NHP«¥?ùÑ]u]}BÌ)Vÿ;|ÅŨp±Ãä„THãä§°¨Bª/C>}S§NýBŠ^°úD„¬ê¨ŠÛD@Ô}§ž!‹!â}U¤ùäzÕC«$0 >«÷ó‰’Z2_EÕD¼E ]Ì(©CIHÑcAΊ\ßUüRB4þ7ߕ¤®Þ—ú·„T]pq XÕÒª“\‘ðTXéÊáÏ:Û¢U5nê’u›©ÓNˆ¦¶Õ­'`ÑøK=Úé´ùùú4: $ëThQω&i”AÈâ#Š2«®Œ+©Þeg‰*\C _ûqŽŠÐâ•ENñ&ç0,º"dÄI€QX¬é;‹ÑÉjL4Ž#D‹Wë¢%/‹¹ +  Ðô­F•u*5ð,ˆ¡Wù’Ħ„˜ÁÖð•M–Xˆ[ŠG z9 &¤¨£§¡2!œÐXºôhÙ'· )’Ô¼ ³¯‘½D턨 b‘}éA\‹þ r ’²’‹fË4…PPVè2°¤¡/ "©BMbiº¢4:*4ã"Up¼KÆY²¥ÑêHªI#sî„(®¡åW #Ëœƒ)ð $õ yB‚Ì©œ‚á4ã"ÙB,9¯¡2š5*-[@3K¥ÖPË>õ-F‚ŠÝ‡–Ã"$ˆ–Xž«4¸P’/“\Xáë”%_Vš9Å–S#D#M»Ä´Yf® b¥Kö®ÀgQ ˆ¤¥kE“€¥i‚Åò„¥1YqI%x5’ŸÒl#!–Ø”„d©ÈÂñåjÒ’$¶Å›¥Ö® +M~’åµ)!‹jºæPK-E+šg%$h*Ls±¥¢ƒ§Fóµ„h$l9]º•¦ãhÞ·Àƒ’ì§d† Zdí4y\àRIK‚¹p| ©aIB8Y’«ÓDuáâ§\ $³ Ò%}Êw—:ª:š/HZi½‹¤ÅÒÉšY/ÈJÚM³ï9J)gi†¾ c*ÙcIâdke&4Ï_*–j‹Ö ¼7ÙZ/(H’/2ŒÔ òñ:ŽÔ Ö^ôDJe‡6/ <™?-pÔ­e´RP£‘-¤…’õè2ŽSHvÖì±”[ ªUQ(R‘)¨iGª6µ4ÑI­ìh­þ”öÄri¨ B(ÛUjH*%_Ò2!‹ÚQ-E¸Ž29Z®*¨ŒFJZ„X®XË^Τ~KJcz'õ+©ž‘˼ªfk…­dº_±£Z…+p/« #…º’-ÏbÅ(ê'n %5©sC “¯ÒÅ ´Y“vh3™û®¨ üÜSQàá©(i»( -•tÚhkFA´$í%Ú¾Q–¬Ç…µxxkÒ%%] ~º´Ch£HÁ’×LW›]´á¤ÛY5šRà3FGW-‘ímé2ŸÖûIÖÛúcÐv–åÚCƒ9“& k³iÂ\+\ éZÑnF_nÒô£ =mQ%M?ÈMh’6Ág)®y7²º#>%å[k°¬³vi›Ò(®ŒV&8Ú_¤íN¸Y(k‰5àÑ6…ãC:—´³ \ïºD%¬=K½„©… M ѵye’-ëm­`0ÎÒUcÝbîþÜP–áÆ =ghúY]_š‡da¬w =HQÚä´¿ ½LrÉÖ·6k‘Ñ69ØPí›ÓNºµX«ŸuÛ¡åX‡ÑŽk{à*áãÍÖBȽ´&j›!¸Òe­ˆë¢£]q%÷…½çÑÐØµ³õ<ÒLðÉ¿õEv-Œm½“M«r[%é3o©w/~óBÅ·?q ?·^ŽNÆ!bt2ŽËŒv¥Pú|3¸ŠænŽôŽÞKl¼už8ܱ6VÚäóiÓ¿hae[¡¥‰O¼­bÐNˆm¥ƒ´0lÊ@‹¶t§0¤›r}¦S)š’™Úö¡š8t]ë%2Cªôªâ›ÞÖË¢]@£õî¤ÛLkí¶™¬÷²Uë«´Þ˞ݮšæe·ÍÆ<±ãjr´e2 ‚;i 4+ƒþ¹ê/ióë0f­rѪ԰h[›=¤YD™lt3h[êl^!qq}—è ZÊl¦KÒSO 9úˆÄz™­Guuçú`JšÏ n"q}—?¸³mbSôlâÊz›/Ä-rÛvÄ¡H¶¸¾KħrãvTVÔ ÂtœÒ)RÔgѾË:ì™õ]ÖªÉïÑwYÛ8¦µï²v»@ë»Dðš&!7,j܈Œ_Lžõ]"Ú–>Fk¼Dæ@”Í/‘]Ë/y[ê²hã%Ò êAiïe«v`Yïe³LØè½äDˆôUjïeGl.n–ö^všÙRÖ{‰ÜMr½—<ž¸kÒ{‰ŒvZjï%¼>û—¤¤¶W­÷’ÓZâkïe—>Fk¼D•Èœ_.éÁï‘`Ì/!Oâk¼DºOÖyÙ-?:/{×zÌè¼ìݺÕ}GVsZ=|äÌ¢‹+ýŒH×)i‹&–˜­ùQ#ä|¥—Gƒ’¦J¢[:ð%ܶØf.½Å?HmK¥†HKÖ>@ ¢8§>õ]$â¥mÑB1äó®-ÕÂ[ éPMˆ.ìCQBÂ[ 1GÌZø¸4 Æ,ÂDNÔ5_h²‹Tœ[2ŽF³˜Yñ¢%³nQ1*\’ÑÀ•3ØbkTéc9d,FG¡±ÍÝ—„ØÊX¬¢E³šÉ-c’ü]S Q³K;Йlý™ššàU–nLM_tcj¯%g8B¶¦?K‚@´#R%!kµr$Sè4²D‰&\ -’³¤L(–!Ò¼M@¢ä[4µ’E°ôO¨Ök)¢ ©Ô)DVÛ¹,ÓDÆS{è4ìÁ‘¯"§‰9Ëi…n)"Ë{…nºåÆ ½sï%G‹*I2l&FFÑ$\ÔA5KGû\S–É‹èŒrÙ>D¥¢–ŒÁc–5¤¤Ñ–YŒæ"ì#¶MÕ|¤d(£9M#‹£uHZ¦[Kí– ÉŒ”æKc²&EK©’ºðGM¹’fHúÔ²²qÕçFâ6®ú€ÙHîÒúé|kþ7f-Û1­*sÛeAQIîÚRÍѪ~#ÇD%mg)ëXÔ•µ¬6ŠUrÓ–ø†eËÓÜ8]§Î‚åÏé²Ô@YŽU0é¨Ô4üÈ\X¦>VéÙ¹üØLï,ß›&%FM€þ¡y «D²¬bz¬¶‘ºb@ª(ÚIfÒ lµ¤È¢EŒˆ¤ñQ ©—h1éE´`’{Ä@k*i±' ¬ì’«,Xi&-öˆ•oPy” ´lfž». ±ì UŠR,ò¨$¥Ñ_aÕ¦d^ó¨HÁôJ…ÙªVÈK  …­„Ô¿RÔCÂêcIË\Z?ƒõÖœ–ØvŽp´ —’æ1F©.Ñ^’j£•óR²v­ø%‹ÃGQÁ^[. ÕF-."'­qVD…8»%©Øk3­mÔ5¥Ò™àŽÉÀZ M¨Ï=—„èCd£ªŠä`•þI­¼â˜’›â,Úøoõ[BºV-µÆ[R\©$eµâ‚Ò¸,‹Ö“·T¥–œ ¿KIºpÐ+’¥lMˆµii›5ƒVþ. Ï~Í%ò‚2ý:õ\ Ùv+´sUº/´_`Ë(R¯/x^Q»%¥¤_𼢨ž–ý éÚ÷¨­¿Ô|¥{€}~È 8«+‹«M%ÙEÖ¨PZHs3Cág/¶v4Ѧ ©,­‘Ò3Q 1Ï=—i é–ÕÞ‹Ã.’`D¶ôppbZnó(È0H/ƒv‚’}·!iYGIABš´ë¤`´…R:S ž§”î$i^)äï\lÍ-øh=˜ÒSÞ©sÓ%gÖEk´‘†¤Ó©Í6éŽ07]2"=yÚ´CˆvÃ[_OArI4K{ L´Oûƒé‘¢‚DЍŸ¶ølÒÜ ­HO€JËš¶+1"ýÚÒÄ%éѶ§²}ÖÔ:£™{. $MsÏ%#Òâ«MX„¬Ò«¢mZdë“V.FêÜîU ˜qn c¤i‹å"5*¹8k,cDÔ¤ù¬ÀY•fmPcD;@¥‰‹)Ú ·hñ$è“QÚ W8‹%Ý{Q+0q±¶ÌdUš`MvÒvLj´Siù¼pþjîºdDúŠh"»j])&ßuɈìEm&d¤Ï ‡„XO‰6%2R´M±‹¨UuI[ vœÛ‘M®’ŒÌM”XG¼6Z2 ø;~ôü_ŽAXt>ïÞŽ3:¸7Z ¤hÿÃïääçŒg–!3 ?;–!3«r’wf2± œh¬Ì,y>vfâX‘BšYŠ8?qïXŠ8Û ÇRıø ÇRäóY«4"O,C‹ ƒc)âXìn9–"3+kvzcâXòåÌRdfÕ;pf2³È®^¢!ŽÅ.°c)2±ð·»,§âޤÈÌ Ëî0q¬°[Å8WéKÇ’§÷f–"3+îï0>½Ã•Å™dÈ°ä ™¥ÈÌÊœ3Y†|‹p,E>ŸU$÷9± q¬¸ÓÀ8VÝí²Ì¬Ž^ Ž“v»g ŽÅÏ;:–"ŸÏÂaælå@&?Kîîp 3+èË:6–!ŽUý»‹6äOÅ’•f–!Ž¥/™XŠ8–<¤=³™Y‰‹˜3ËÇZw6b ŽÕÐ;–"3‹üoIâX\`šI|6'îüƒÌ,x‘NåâX ÙgÇRä Xò8÷ÌRı8²q,E‹´Ž¥ˆc5yÌÄRdf®ÂÌ,C+íìü@‹suŽ¥È̪Ü2³ q¬¾ß׆̬Öw'ì@fê ~¾ ™XxP×ïŒ8VÞ±q,ä I€Ï儼ó=òù¬Xv8Çj;Û<™%73ËÇê»Óz 3 M ޤ€ãpω#)âXmg'2³Ðuç´a ޵ 2³JÞY›8Vݯ!ŽÅU;–"3 µ[?–!_Àâtœc)2³š”Û'–!ŽUøáö™¥ˆcUô;–"*VçDåÌ2ıòÎcˆcÕ¥ˆcunܘYŠL,t¸£ÓÇ ;K9™ÒÎıvooÜ™×ÝÞˆcõ ÈÌJ\žY†8VÚùq¬âO~§îöâ@«í"Ê̬UžX†8¿,̱q,yŸÄÌRä Xuç· Ä±úÎÒdfåeçÑäOÆŠ;¿e _ÀZ‘ûv,E¾€ÅåBÇRäóY¨V8’ŽwÑÈ@«îlÒ@ ¯…p$fNÍ»È` ŽÕvÑé@fš ý,âXqwzıä5*3KÇZw‘Ô@fVß½ÃvC&V×—²l¬|+îìÛ@+ïìÛ@«yûfÀ̉a·«2³Pnt$gÝéß@>Ÿµ.^ÿ pœ´óËâX}—ÏÈÌB}Ð 4dfÑ¿½•ˆc%”K‘™¥meË™Õø•”3Ë™E¾‡·ßq¬ì}6N\¤i#mÈÌ eÿfgCfV,>w½!3 ]莤€ã¬ÞÓÝ™µ&ïwnˆc5?ï2³òâ-ü†8Vô¶{C‹;$KÇZ½ß¹!3«ðó™3ËÇjÞÃÛ™Uo¿7ı‚÷Ý6ıÚ~­ q¬¾{‹÷@fV«.¯;€™ƒ>ÇQÀqJ¾Ž¤ÈÄÂ+ÜÎß™jö3ËÇjÞGß™…Z·:q¬‚j c)ò¬¶ÛÕ™Yiñqõ†8V>îHù¸çäÅŸÀâXݯ³3§tnÈ̪ÁûvâX»XrCfV_ökhȰøE‘Ž¥ˆcùYèû9øèßëξ dbE}¿×ƈcÅÝÊ Ä±’ÏÈmÈÌ É×7dfŰ[á8VóQ؆8Vß™Yiñçó†8¿2ñ™YeÙÙãÌ,yhjf2±Ð붺¹È°²ÏOlˆc•UÈÌÂcŸžeÈÌ’×ÎÎ,C+w¤°·hmós:™E‘sôwhÈÌÊ;_lCf–¼®rfâXmwz db¡ƒÄëó@fVê;/d 3+/»}6ÇZýœà8ü>tGRdf•ê«òù¬ºìfk 3«­>;¾! ­Õ^2³BÜùlq¬º;12³Ð&ïY†Ì¬}ßņ8Ö®ïbCk×±!3kåAÌ,CfVæ—¸M$f^IïG2ı²¯ãlÈÌjò¸‰eÈÌBSžŸC+íôf  ï w™û ™Yx=£›ÓÌ,y=öÌ2dfíëçâXòŒÖÌRäóYx;‹¿zCf$þdÈĪûJõ†Ì¬¸î¼šÌ¬|FgCfÖ®ª:€™““÷â pœâ+G2³JÜùv™Yûê߆̬æÅµ¬ÊîLÈÌB±#)0srßíˆÌ¬²÷¦âXòB™¥ÈÌjë.ÚÈÌÚW$6dbõE^‡¾±2³bÛéú@fVŠ»]?Ç*»{ÈÆân}gI7ı’7dfá-OîW³2³ªŽeÈÌêüÒÌ2dbéóXq¬æ=ƒ ™Y±zÍÙ™…g1I™ƒfîìH†Ì¬^v¿16‰…çs\FnC+{+³!3+G_¥ÚÏf¡KÓy2±ð[3ΓÚÇJþDÜ™%¯d˜Y†8VÝ]ý@fV;¶´!ŽÕ¼Ç¿!3«GQnˆc¦lÈÄÊò[Bk 3Ëoż߇U^9Q2±ð®2WíÚ‰Õ÷–rC6ÖoŸýi/ Û’Åý²ÂÑ%¥ (C!oŸFk=^^e¼>þæ2¡ÿ%ÅÛ7××?]â1”o/¯R͇w§=Ý¿y¸Ä3X=åPÎýBàUàŒ`¼¸Bk6-­üê×;| ?Ô;‡Çàj9œÞL¸ü;á]ªË¥aÇJ9¼›8§».mëA¿Bwu{wyÅ¿¼¶f'Âýòá ï¢(‡ÇÓ÷—ü…º#§õÃã;? #ßí~Oñq÷§»À~øvbÝÝßê/’Ýšx’• ?¼øõáïy0Rø”Ï-~…-/ö3ßä÷Ùüˆx(6åQufà)4kJùùAðfeúE(þZðhéŠRþúÜ(x–¼Ðù.”ÿxn¼ž!ÛÝs‰mPÙ—gg PÒêé€ÿáü€miñ“gèëÃã__^á÷—°Òž›u<ëL¾öÇn´}ì>×·;¥Ý‰çŽ–@ÛsÒÑÓ¦>÷N³^ó<¿ëáÌ{®¤ßü]bBÉc¯~SÍ:«Ú¬£}Åw}•Pè'›tø†29çö÷Zo<¼]̬ó§'Ö _]äß*ý´«ÒhY~þÒÉ~Úœè‡ë?ŸFr9=^ß½×)¦k÷ÛRWœ¢·yÅ9Î4-ú–6ï7§—¿ûñþ§o_½ýæòg·Þ9–¡Îø)ÅYÖÓ‡ÇmÉÇÝ¥p8³äúáZ.[>üzíVóì= %\õZ·wwïŽz'ç®ý OryùWòæø®I7W<;Fêôx‡ã÷EÓa¾—\gï-lšÉnã7ÏÖÔ¼½ËKÊësö.õðÑÝLÎÒÇ ^+õc/˜%zÞà­µþ;Ý?œÝÑüb“å“7,׳«…_À5Nį¡*xn¾“‹­Ç¾9âW¨SôõÜí>¹JØÚ>ñ*?¬Ýxö[Üi÷ nÿ_yêvó‹HÖüàÓdÓ''zk=bªåKOüîóŽ$ RKÿ˜¹þí×dï¯ðæŽ#ž\,œ¢ø‘F¦>±öó7–ød¤³ƹëG¯6ñÝ3×ß0×ÿϱº9¿Ï±—OŸËÇX…²gc4Zå©K}Ò_Xº«³÷Ë9ÁHbÿ;{ÿËúG-㿞?gçî½[ˆ~¬…Œçl!γW¨&²ü³øìA OèOtPÖ>|PæÈo "/I?®ð=BÀ³ ¼OfYÓ§'(ø ´!?#AÁ_!Ù}…Ç ÌÐèuxo"~ …LßéññþäB¾²Š¡ã6@u6òþÁ|ì¼s 9*ì1~ä°{Ù§GûC:sQã>7æŸ=­<Ú4Щ}º·jñ¬»››Ó|õ׿Ÿx¤þÕx·ùɧy½þ0…E.(yTÿ@þôÝv=s ¥ÇÃPø|ñê¿~Có ´Os ;Ÿ¥.¼»÷ÁúÍÉ;ot¼¸‹YïD+R!­ÈY-º»ûkþ6šàÎü|}s£ŸH{fŸçîQ‡íEƒþú‡ƒ~ôÉÆxÜùK×·ãFäȵYûn%gA»íäþv²{YâYeÒÕöÊ„\ ²ôK±ý|λ³Û¨mK0¤¸ƒœÔK9³U UCÒaïVkŠDÔå\¢&·º–í{üA KÈéðD;àZ$º‰»[v(Hª²g·Ó™pä&ú.ßpý^Ç=ç±Ðlf?Ë'·{xØß‰çhûÜtÞ;E™¿âÄØõæ~øógWf^3,>~{¾%¿øâGáí/õp}ûÃSáƒÝ¾õ~'˲ÁšÂë6<Èÿ´…#ìc¢XÖ¿yžQ›9Ü\rÔž‹¿vö½y•?¦‰²„C4jŸvÃ+…¡)¿Ÿc§DOÃ!Üh®ä§¸ùŸWùVô;®%ãME¥1ÛýÓáÜ$†Ã•,ýc¾.„#]ç5 Ñô–6Àïeƒ–0.µ®Û¶¥I}~Ûúå5ay—“ÚeÈDp[ÏÇ¢³ûšK‡áÉ7•×?Ëôå¶ÝC9wÇÂþ4›dú䘒qH ·™»S5V ªãÌÏÝ|b=<žTûÉÀÒÑ×*áö>óáw3õõITÉC­iFœ³b3qyò’>ËqÀÛ–…OG­Öœ7ć{» ºŸk¿ÏÉjðoÓÅþónyxŽ-ÇD><õ<0ðR`~Üm,|¿¬bnåÓÓÂÑv–]ßo·t-+Éø>:Ò½óâÜ­¨¡rñ VšÓ(µ°#÷óÎ`Lß~Þ‰aE)퉽Áx‘2ßïü˜!1ª["ÄÝvæŸÿ"õ™ïÉ{©ce™\ Ý¿ê —¯Ø ƒr÷ÒE'Lä.ô×°á†A¿¾äò ýëÏÎÙäíœÀˆ…3õrÏá3”˜ÔŸG£¥ùgÉmÉb—Z>49'uæÊ¢’ôËÙ÷ïñçç?Ì}º¹ÆI‚"‰±W…iñE§Â'×^ù KeeÅ¿a‚QG@èÞ[û€ùp}f`ÙÄ÷6îSÏF.ð3\Kç|” »Óç½?T„¾îîâV-K.» ìñ¹ïß_?|oDÆlàð’Ãôa‡‚+ÑK²¬«aÎåà@Gí{¬Ëêjz׳R}?W–wÑ˸QŠ(|t£x?(Ôàž7_…%¤û…)‚ýþA%4™¾skýûu”ØÍÂ}qþç%~´ËöO(Ý’­½›£8Åqƺ‹þåôÄ‹äïÓžó,¶¹Á磊õi­”G=æ“åžÝ©BGAd}Cð–[“z ^4ßûâyGÚÙr¹§ä¶ãéqx‰ª›9¾ø[ùi&’ï|Å ð\dww{íÇ~££‘±9=p®}ò4Ï8á%émÞ° ,•¦òÝf®i1I©°Õ[JÁ`¨%Ÿ„b笗ؿ{2¸æúÿzÙ’ø½_![RùhÖm#!RÿØ6sˆ²óyðgøuN$çPðÝeý˜‹ÌßO¨8¦È…¬tosGôàkÇvQ´Õ0 üíÕ ¹»¿}kc´'™ž]ËŠLLê’ÊÒ} Ó‘²ØÅ¼¸3¥*#¤ÉÚ«¢Ý¯çݶӽ]W è¤çÿ¬ßXöé!¾n†Ñ…Š6”` ϦÒëËùÄu>ò.Õ£ÙJ~â£×—Ÿ.ñX=J(7eù‡Æ“P ‚¼Ä*Ä@\± glä´"÷Ov ÌM¡îFýôtíyðœÏäØoÒaü1}à_.ëgÝÕ³úÀ%ÄÃQsì!—Ç;[k²Ùü—WxT_øýýëÓû×oï¬l˜þûÕöïG²+èFøf¿²ïÒÜ¿}ýëÛÓýKú¯øõüµ~øË‚Ÿài?³¦ÓU|{ýhB›»€‡Çnã7iéPy_½~ûþþýòeøæòïxú¾²¯PDJÖô¥»Ú•Ý "¿?>þúÃÛ—ñ7ÿzI»ëxøñöötÿë7¸ eìû5vSùO'r¼Ýîøæúû·7×ïîîÞØ|w!):„.k—y8üíé†ôö¿ì3 zßÖ2F¹]«Ÿ“¢³3}ç¥MB8ìûðÇ3Í¢˜Åí†Ø0énåï^½ø-ýïß¡Êendstream endobj 180 0 obj << /Filter /FlateDecode /Length 1985 >> stream xœÅXmoãÆîgý†~. n™Pkîû®[h¯.âR49(O¢læDÑ!©³}EóÛ;ûB‘+Q×6ùP–©åÌì¼>3ãç&óÌþ„¿ëj–Íïf?Έ;‡?ëjþ‡ÛÙÕ7T 6™!óÛí̳¹bXe„Εa83b~[Í¡ÉíÀ!tÄÁ ÚòÝnfߣ/÷ Õ8“D¡®©“…ýB¨@›$Ù`ŠdFÏëda¿h¢¥F]Yï“cÎPWÛg†AÝýˆ¥±üýöÏ ‘ÌÆ¹æº×¨i»‡wEÏ›ÁæÒÍsäë„*Ðßåwþv™qÊÃí±ÁbŠóXKÐà Ü:\S°¦nª`¥á¨ æ&E¶¡ªµdg Î-{ŸyðØ ¹-7çŽòtMþvD¸{îÅ)TVck!h`-ÄŒ ÷.”aV’DÆÉY(ܹPè×£ãî‰lË›]4=!¾¬¢W-!£tN8f\R—y’cb88¢Ã”ñŽ8Yˆ ˜ úʇJ2 ~.r›ZJ€A µNYúrthÞ;:n˜ •ïI°å»d2ÀÇ{)ƒœ¡Äß{{?roÙö¦h쯼(ôó¨ â|§Í˜j×{˜£ÒW·Ž‹=…5ÛåãR3áOY7CÈ¢êÌ#5ó£ Æª0¼Ù^(Õ£ Âp­ÑþD<}䡞Ƙ#±’$ÁëºI^Â{… @–}­­`¯ÁR›LÚ¡ï3¿°€-œ9õƒ•OÃy×ïªÏ˜˜Š)-,ž¦;pÞâý¡*šrm‘äiÚž¼>SFmwuݬw Ði•¤Æ\e=í  åùÙ™6-á“O,¿†&2í`ï—Ë,ó»}Ý›ch±0üÅ(ÅÆ>ïì_¿(Áw1ž$íK&ˆ!/Ïg­¸à¢9†Œçˆ:¬Ã ò¦lã;í{‡±Ð§Üv>B¾³=˜ºQåõ6$µm/³Û«Ê lŸÔMŽj¼s·Q£„>aG…üfH ]°ùr×ìµ?陨>œ*n‘QŸÍ®;Æ ûѶn—p*%LT—@‚+¸šÈ˜O³é\ óí¨ø B: w;õ§åþÓ“^³UòÓ—O`vÌàtHQCGI¬´/7‡$Rÿþí}þ!o6ä7¶9¤ƒj›íRœV‰ËÝËÍ¡=TUÞ<¯úy_¸´û¿ûƒ!²‹Þðo'}qFe}’®aoXÞ~óíÍÅ-ÈzÈdG¾ÊŸÊêP è¹+ß»ò¾®7ƒ­EÛ••ÿ‡‡iKÖø5èÌ×à÷, ®´Ýö°ËáË!G7>ít¾þ4Hax¿\ö‚ :Œ: ¥n_dg·›‰ŽOñ54š0”¡Ó ö¶m¶ƒz#b‘Çk·ž]ϯÓ{Ñ+îcâIôª.¶Ûr]û®½¶³)% K&ƒy:¬›7>ªÅ€7Ý7Þ4…xØ3ÝJú¡W€ ˜¢vÙ¾kýºâ‡ ¬¿žýÛpp¤endstream endobj 181 0 obj << /Filter /FlateDecode /Length 16760 >> stream xœí[]Ç•ßßùæå` §gÌãº_&ñØÄ02±Í`H~àP´L/2IYv‚¼çcg]«öns䛬¡¨?Ý«{ïµë²jÕ¿ÖéþÕ%Üâ%ðöï“ÂåÓ¿zÅz±ž¼¸üãßýIjd¹Í0ãåÑÏè%ñÒ󭇘.}æ[˜õòèŃklw~IWÔqº¢Ì[|Ý£O|týo/ïÒ¸…ûõíëWwù›˜êõ“»p 5÷æõóÃ×Oîò7#Ž6®oŸ½zy÷0çt›%_ß¾â¯ómÎëÛ_.yz¸äg~HµpôhÖ[e¸G¯ß¼ýìpõ‹t§_#÷[is½ÆñŠÇOîR'èË}ü©>½…’Š<ýü˜›q\>}ÃG¹q¡›ÕÛL—\G¾ÅqIsÐ÷ãòúéåŸ//´[Ja\¾ ÿ!ýÿKê¢|{ôÔKÍ¡Ò#./”#_å–ç~újYR©·\„JiÎ[ÊjYŽÔ 7+éH¹å@å\ë­Åµ,GjЛŽ#d†sÿ}ox ¾l¸ÆØ/ó6k¦?Œ×Ø ]M/æ-„Îãõ£k¸{X: ÏQ®‰¿¬áÖúµø—ùÚ¶uЗ¥§[Î×îVÇÆF7®ì0ýKn¾X–Sº‘Ò%ï " ƒ¶,'ª§r#_”YŽT 4G?Pn9Q%å[žGÊ,'ªÓ›r¤Ìr¤ü6u|Ç?°C¸3r¯ÄJã>É0•ø =r£>I1…ÛHôMôo}“ä›xk…¾ÉÇŸ”ã5õ]££)’nâÙý ͵?ÜoH©´[nùRhºÆ8ÕíGÏ^<½¼yöòÉÓË'ÏúòÕ›go._{GN…ãõéã×o>¾Ïv$žnäݤ6LBð›'Oß¼¹üâñÿ~üúަò?f'ï»HÜ·^"Mßò‰!<à/=¤v‹U¢Ã4Ø/½Q\å1ûì·zéîÜ8¦Äè¥ÉÛ­v1Drb^zÍ4͇XhTQXë9H8c Ý®uzP+zÛQ"ÅÐK­Ý¨ÃÙBs+ñ`£Y©H·˜/­RëÖ*–F¡•,ePk©¥·[d¡1¨Þ1L†\©%’X&?²åH …ÓÕæÉ-¨ÏiªÞ§Mõ9PèC§AM†F“[‰! W…É R¦®¥QN[S ×F×ê‹—H™+h”Ö*´„FšœBïÂþ6“YÞ»Ðèb).i$Ë…Y&)=‘hY;'…Â\Íl(Ö ”KÜrb 5¾hp‰¿4Ï‚¼S™²ÈB³S˜¢8Li—øR))9à&µL=•bg”l¡¡Ùê/yr¥Ln;jpû•:µsãQ'7}ç*–já¤6i$²DëêU±•¦´ÝxÈœ$CÑ^¢éÅîVŸê/¡¼nÑ,ãõ†,ŒØ ²›ÏâgcK´Öl”ð°Ã4¬o]îÓ(Óïb!ÇÅÊdÄavJ‘Å_"63 +ñ—gzSËäo-J”çðÝÈ-°Ñò¤þÒRÔÊÔ³X¯_dé4ªÄßêQ‹Gò‹‡ÃN©Šø[ÈœQò·>À{ž’HW:ð: ªÄI 唦ê•Û‰@@½Uõ–w#z gb!•Y½¥öÒWî4¦¢Ü‡vÒ,ƒ:4pËQüÔÙ?‚ddéæhû¤Ó<ÒVžùWŽÇÊèú@–hëÄàÊR¯¨’àWŠpEÜ$' KÕÔ".IY² †AC*É]Äm±LÙ¾ðЯÊÐj+îò(̤À!îr¼=¢ˆ¡ò(a )ñ–’)ŸYÒ²$­³HZ@–`=;«¤ÔS'í¤AO†nO-MWµI£Š.³Ú¼æÝ;\xñÐ'ÑŒibI¼Þ=)Sä×#KйŸOW2Èœâï©ÙßBs)›e²Ÿd±Ü‡ò¯¡þò‡XJW‡9!Éb¡‘,Û äÐ$+ KÒU$ófbÊã†Z$+¨…zyñL{ã[ EC¹*R»ñE<­ª(+`CÓ%6S^­s ÏŽ´$ŠÇ<–åbÖ¬ pž¤–¢YoÁÌR5+(4€ª>[3²íñé«Î n™êqÖ‘Û’=¤!³,s*lj pi@ʇ$+(ÔH2(2e’°E¶Ý™ou™B‹„¹œrR—9ŠŠË´ø¨ËM–±Lîj²D´žs9X“RŒ’%–-Aý¡ÆäL¦Tˉi¢iAáJ^‚ƶúLËR—;ÓXQŸ«MñL}¡>ópΡWå´‚,Ux²L~²ÈŽ-YÓ¶èmŠf…z¤ˆ;¾û/œKÈ‹fޏjÐaš©kÕãh]“G4ƒ ÜL¡›%©7S“‚ÂÉ´N¡À‰ [‚<¼DÉø*/Ñ:¸ ° –®ÊHŠº\,;Ì…3ov™^FÖÃ̾5h‡r'É5U“€ÌÓ‚Bƒsꓺ¦lÑ.º‰ª|4%JU‹,™CT’GÙ~%W_êqâËJSÔ㨋|æpÞÕ`HÑÌ€³C8jÑaAK¬¹ly_®<ÊÙ’§lW2/°âqž7%(nˆÃYØBƒK&‹$¼”¾ibPhe’€œ[ÔÌ€-’©fÎOäAÍÂ[£4EÎͦp˲‹‹lWhÜ4õd©Ä®œ§©ÃE—ÍܺflÑÁÕ†¦l‘¦i3˜ÃÙ†h£DEκÌçNkIWC÷dÌK‘³$¹S-²€Ð°ÖÔ€-:{ÑÔ€ÓJ»ªjjÀ»ªs8úU²ÔáÀA—-4¶¢Yt\wJUfR‹F¡N NçwàeAž5‚Êl‘5˜¦™&l‰Ò8#i‚PxG"wtGñ9YÂK–©>“E£Ù ù%>³ø©w¦È’Í"»ãÌ[ýÕbO×›X:æ ÏPùƒ–CNhØ¢q†hþ6›/“†–úÛì6¼íS«EÍ™ºùk›—<³flÉÊÐL愆-vŸZÌ_KM3oLƒYt›´à 5è¼›”°¨ËE²Ls9ÛLœœ0›EÆ‚å¼pˆ!ZŠ@†ÔÄ’Šyœ5(ǦXL£ý «Gj‘ÉY.õ8i’K–©'¿q³,Jè–#P†1Ôa9KnzcÎfªZôÆ1ds9êR"ïèÌ"7Ž “!¨Ü@°`»qÌš#AÖö‹å¼‰7±ZŽ@‰8%ÒÒ«]Î k¼‰-,×È{F]¡©¥éUSÞO,ú¬‚f5œ´6µXŽ@}VŠ–#Eraj¸..Ça¢=­ºLi Ú"ªÇd¨z ¯f‘u’Æo2‡ $41,E ‹ÀÂ’•¤´¬M½jXŠÀ™”>œ»¤yxfÁ.ªANù’l5Ù¢Ï)›Ç¦\>Xif‘Uš¢¥ed‘ÍE]ËbÓ-6Y,C K×û°fWÔÒô>¬ÙeµT½‹vI-YïâYÔŸ,Gàí¡ÜÇØ¢þ,K¶Œe_Å+Æ8Ý™û¨žž›uèò·4§—È&Øìå@OA{”7˜/r»QiiÓ] Ï‹]?uïëÊ©U:ö±¯°{hBv+¾.ïñÄÂåyÌ‘Åf€Ë<üÎ>vÉ¢“v oK Ö ïí¾>GÈRãiñÒÑNs, |>R>ÇiÎ’ET=¯KÐÞûdÑ;¯øP¢E´C8éîÇ0ã ÓŽDdiý­Š ; QœÕ¼‚^IºŽìÀÈ‚Ä8O²Œ| °’=³6VAºøràaœ ýê9•Ýûn¶©ö¼7¼½tãâ{â6TR[»f„º‰Zk¾V7Ö¾ù&KÓ'û½G}kÏ1Fïãýžl°-1€¥“L0èvLµE…^Le[Âuî€]›X‚Ô’/z³±µ$ÝÛ. „‚z3áÄrj2KJ¡5Ye›%·t;ÍÙ’Ì.¹l3¢Ã%íè›9 z3»ÅE?Êè4,apúÎo‰‡4ÀÍâ#«Æú,!9<‰ÁdÊ9mU2!“u`mu×:Y+ÖÇõPÖ“5¦»fZ)’§“®ÊóO›Ëµ×,‹\ú,K×]Ÿe®T«¨ªk:/Kàé¤WUzU‹Y7ï'AYÂÁItfý])\˜®z´w¯+oATñ6}›uývÒÀYø*y›LÎÁÈäv—ÒS±„%·óž\-.ÉK6yTíÓpÜ…ýlùàÿ³Bøé@¶DiŸ äêç~ÊÀ+‚^å'ÙtÃuXÁê™ä,£$ @û°£;sX"º2~hRLß+Õ¯×á EJ=¥Z4ÕO×!¯€zˆã=UÏöYP³ d‡Eëhk&5ÓVö‰S³£Œu(E15ècüÔªû¡å:ÙêÝŽ×é×°é½OÈF¶ó¤uŠÆÁE?icÎñ·Ó¦Ó>«£›Éû¬ã<š¤vZg'~| ©5~*ȇ–zúí'‡|°Ùõ>vºÈ‡ŸI}±Hþ‰¶ŸRr> g™|ÌÚÍ ™ŸÄjÓøi(Öê!å:1ÍÕ2שª!O^‹†æ}8[†¡úñm5ÝgñV+ÉÙÇÀ-Ù˜ñƒbN3ô¨ÛÏ’»moöy3­ :1Ö‘ôˆ6ÐÖ±5õ`9Ÿls´óp;ýžzB²È;çJzÖm‡èœJOù9{ÙÆšÅwSLü¬~Õº­ã|¦Ú¹~äßm—¾Š8•¥z× Zà¥ÕލWõA³á®Pà3 ½¯W1Ð<ÐVX•¼2«Å«!hDë¸Z³Ú+xUŶV¯Ê‹}öxu‚hö ŽÁÏT‹UyŒœmx%ÈÐ0û|‹pQU>דTËÎvÍI³¨^™Õ¢5DMö¾êŽÖ5^G5Y)R ¼w–gY¹…’±Šœ¤¤I +­ÊËž†•cXa×`•Sí§ê±×Wż*®¬+ËV§§8vU¨ iZû/„³#•D\GIvÚºµ–dKôÖcøÈC5lX=‹:Ñ>G±…>{VEɵ¡hGP[?Šg)Z‘Ô¡¢l¡*Øyÿ³‚šnÁ˹-Š“"–n²Uº¶FËŠJ®.¿Qo%Óì¬ZsN×½Z“&šÊû«Z“š¨œÔ@–/ÓI1,zT³J5§%ý»TsZ È.Õœ¶ïRM]S¶ÂymMõíìVI9‚«jëJêhnqµuéÊK‘å ©OrÕvd·¸²»ÊM—ú»„ï¥ËM·ŠL?)çRM®ï¿ÅhêÓz.Õä4Iµ»‰4[ø^gK§«çVK@çOœK5y W¹ßMÚZ=ó¬çÓ §³æ¿ªT×¹U«Ÿô³ƒæÇë|ÁOkÖDó³ÖuL±êV×9F3¹lŸuP4¬zÖaÇ!œO_Ž&-û5~¨ÒlÚ/ܯz•ά3²u€Cq¾Ÿ+5[°Â©uäçs묈“H=+òó¤:4QYGN«ÒեȠÇ7ëÜJ«ŽG[ë\r~­Ò×uBVí³SûW`=øó“¶j"÷>£AoŒرš§?Ó[§¸ëܯš„±Ï9Õ#ÎôCïuâY¼úÏE‹}Šl›®Ãöu´JÑJÛ:~]Çøëˆ¶Øçýö1®dÌÏ'½Åò¼}¼ Öqñ1»•K±ó?w^e·~2]ŠÕ&¬Ãk/§ØÜÅ> ´ÁõÐy’ë'-ŸNÒ½ôc¶—s¦W”ìûb›•}¨ï¥*ûà¿XEÜ.ð"˜]@° wW‘îêU^ˆÀ¹Š4x±‚×ò®z¯õÙ5^d5«´×k&r·²ÝUVáµI»ôbÕú®ò ¯zÚ%^+µËjŽûµ>n (P @ Ô7Œ*)Ü«–YP @ (P @ýyTI·O”[@ (P @õM£Z¹WS³, @ (P @ý%©ÑîU, (P @ (P @úJ©Æ-—#µ, @ (P @}XT·|úã»Ë (P @zߨšn§_2í0`À€ ˜÷éå–Û r (P @ ÔWIÍvÿ,Ä- @ (P þݨǽ“¯e (P ¾½T ·Ë Ô·Jévú@°À€ùª˜B;ìÓg–(P_7ÕÚ­•åP @ý!Ô÷³+·€õ-§J ç¬Ð `À€y˜L›µ3äP @½ŸT-÷2Ôeêϧz»—ã- (P ¾ÉÔ¤ÝÚ©þmY@ú`©šhósª\*µsn²- ¾­T·ÑN”[@ýéTçuh[@}“¨™îÇU·€ú“©im:þîÙmùp¨Üîʼneêý¢*­`åD¹Ô·•ávJÝæƒfRH÷V·eêë¢R¹·n- ¨?*í6O{žeê˨6Î+‡À|ØÌ ÷£µ[@}pTŽé6Ÿ”ßPï•˽h½, þtªÒŠwR-—ÔûAuZšú‰r ¨wP%„{ÑdY@½TJ÷"Ó²€ú]êÇ~õ òïª8üÍÂ4ŠüÅ‹8F¿ÅryýôòÏ——Ú-¥0._<ˆ—Òÿ¿¤ÿý÷“|{Ÿ,töB7®‰;ÿIª|±Î[¥'Å>;}12m‚bbXŠ€T+ýÃßGzø¼Œ@ìÙÄ’2§R½çt‹],ü§8:='Ï[Šb)ñVÚ¥³Ø1ÅPÃ-‘!Dz"äBÌ—6Ú¼ñe´ÎíÐzÍ̲¥7n‘ÖZºuoÔ[%K¥|Îî3 yÚjηZØ0Cf[ó–Õ#{ÜøO:L¹hò/fK·RÕ2ùd·¤…Ø’_ß2= ¨¥H÷<èeäÍ'5»œ[å®a ÿRÉD–*¿t‰-=‹Ë9×[ÒûŒÄ.ç8¹‘Ø0㉰ÞaNr-QW‹)_½‘¥Ç[nb‰]<殊C,‰úŽ-Ô!Š…žÉ'bI,%‹Ç‰úyd±ð¯ï!©á¤¯è'ñFOŠ]†z¸ejQ5YŸD#‹žÙ"Ý­ëEä){½ES˜ [ŒÙü‹4+Ý9ÌÁ=Ä–XÄã0¨Ë‹Xht±ÇvgUž³t~ Ô{2PR,Y[ ÷ìzç2Ùen}qÖøÙå@Yeíb¡Ñi¿ÇM+œø'ͯI®µðçUim™4óº>jfù+ “Fà—yH¶Tïz îØ:É­¨^äråA%‚,CÎ…g¤á%†Üo Ô¯YšƒtßA“䥤cÉãA“¶è³ipòoð(þ¥žD÷âYÔôÆ#Êoû-ðß8` u,{<ÈcíòDmÀê>A2yÁS ¸ µp¡=[¨I›ø—S¿‚<œ“Ë2ØBý¡¾![h$'½.v¹ÏÊã—-ä»Ì±HF;Y¦¸ÜÉõ¢Ïê2Šjç¨÷¡N¢R;ucWË”PB–h£©„Â;úιEBCŸ]†Î¼Ä¡¶0B¡T í;ÄãN3E›”Ö/õ˜:oµhÉK§¨#¹Ô.|ˆ‡ŽöÒÚ­f¶hÄK…FW¦즰zC£K¦¤ã­Ì$¹ÿv¹o ‘n´7+5-;ÜøwPªºN ¶X¤JC‹†]m½YßÑJ" p£Á¡-SK•Ò4j½"m^©‘ªXDŽfKË·LoÐhê(B—Ó¢@†bUù…ýåéf–)Óý52Ðl’E«•hmÞ¨234âe½Hö˜bvÿ¯.ì1µyV†~ÖÅR9ʱ…úL¨w© c§¦Ô²â0 mó6åeÈ­ç:ýŒæ—“ÀŸ¤›ÅRuuòŠý¥9oS¾ó¯Ý#︉²Y&ß°ò/Õq.#3²%ó ÊŠVUÚY¯ÓÂÂþÒܰçðŒCµÙÓéZv—»K_©OY™Éx~’eЫj»ÊKìT‹äd©|?¶Ä¡þÒ8З©«¿ÔªSž5hd‰¿4FáYJ€.diÐÒͮЈÑWMR²KÒ£Kj@šfê/§|óuHB@ßz0”¤ˆ¯¥è¢O­©¯4&ÌByJK°®ž4¦ÄW^ÇåÎ3KfPy~4yŸY$3 ‹Ç½Y%3¨œO„®ê5~…ìÑi6oôNÓzmÒ°ŸÓÐD%MJTÄgŠŸ:ãæÔ?(Uõ¨âùƒ‚ddÉêsæåŠ_‚“RT—iEÉj˜¼ÕeAa ½ŸxLù@¥)â05ÉT„:HŽ’Q²¥Ib@–¬“2‡.‰Y";Ζ!‰AåTõ>SI꺩C$ÇÄažNE ”°¡Ý ¯Ä_Zû%RæÈ+ ûK“Jß:fÉ È’9%dK‘¼ r<ÊÔ¬‡`ï)î³ÃeN]r¤ñÞÅ2tÑ'ˇ  ¢÷²Þ’Åæ ea£:Yªæ‹™R"I §–jÑxBKM3-àâ3‡pm Z ÅçB”ÅZÄçB pÖ«(pN¶Ð×ÖH<“Øç1ÜÒ43(´âU}:EvJfÈÒ4uÉ4Ñ$5(<ÊÄ@Ž‰Ë£h8Ï4RÔåaiS¦¾P—‡4%[’8F–¤ó•,“ç)Y¢†Žœ³¦…fi׫Ц…WÇW®š°E2 œ)Sá÷¤°•ÅãܳzL3Eâ Ý7ªË¼n驺Y‚2Ú·•Ó"÷áü¼È "¶Ðãd†-2÷rá4P,É(-)ærÒ…+ÊTÔå¨ë~.¢Š’Þ˜˜\c‰Tæ¯83(”¯Ø5]3¶d}ÒÐÌ PŒèú$iU-:ºy.p.SZ×µ-óÄ)‹Ðî«”©ˆÇ­éÄçð#Ï®šÿdŽtœ°%)B£‹s™ÒŠÆ·ÌqZ=.Írå'ˆ%[óJ¢']2å…æq²YSg6£u9åÚ²Ò²EçQ‹š”œ‰S]ޤ¡.SH•íHæ¤ ™¥¨…Ã>¿¹n ­&â2Y45r^\æ×SK×ä€3c†&lQÃÔÜ Ôf#§QœÉ"y]ædMžT5}ÈR•ªÁòu¸XÄëY“¶TéÎ.§YduʽjvPjÖ°Ø©MÔßl£­ó¿-[º ±hhèfR‹l׳¤Õò –ÒÞTU¶È²GóL„BK›láóHš °EÊÈÁ\š¾eªË4¨tHŽ2Ôç2mØjÛlI÷óhš HÊ,CgèM/Iüí ƒPNh ­ZØgˆê/Yd ˜' -ñ·tê¼9És&%+ú¨æWeMØbWQšÊ M)USûÛåN]zg6ǗޙƲ¨ÞIqGUÉ¥w&³Kï¤Öïjq½3à—Þ‡¦;[ïä‘xÖ;£éE½Ó¶½3˜Š«z' 6ýnÉÍë(wšwKîL&€ºÜI‘ÌÂÖ–;-e:è®o-½sÚj¾õΙ´ï–Ü9ƒ˜Ü9,ô-¹“V<Õ)—ÞI‰ž`-½“põwéÓºré½ÛÈZz'+ ªUºÞI‹•†Ã¥wv×®—ÞÙLØ0Á“¦†i—&x’ßá,x²®~<[°Óª%x.Õ%ÏjÏ–‘—ÆIÁEá¥qÆi:ÞÒ8y]8kœ±[œY'Ü®qò"}9JœœŠsKâäH§wq‰3Ú:³%Nºäµ—Äl[°%Πr}34×I]àä m8ƒmm—ÀKàÌÃç œ¬¬èjä'[ô ÊÎ<,ñ]'[Š>]N6èp3lSÁN¶(búfæES5GÓ7Ù¢’”ë›l *Cš¾É!Q—7Ù Ë›lQmÉåM.»ê*œª¼É†¬Ï6y“-v‘É›™W#{yòùë§w~ù€[’ÚóòèG®½>÷ˆÿx¼n™6è¦Ï?84üñÝÖ×·¿8¾ó›»Ÿ=úáÍúht?ú›NÃæÍ³—‡ï>¥»ˆ¸Þü.k®¡Å·ûîOh; eZ¡2ϽpyôɃëg¯Ÿ~òìÉÛ—ÏyfÝõòK’’Y·éCŽívtêÉq\ˈÜÜßÝ©;‘‚ùá!¹¹Rü}H£‹Vš¨Oû{jÿÄd48Ÿ~ñÉã·oO_ýÜŒ!]ÿóCþšƒ)5.ÿô篿xúñõ·O¿44üò|ýÞþòó—Ï~õ9AO^=õ2ýg?¾ûÎjySÞö{÷0Òâ\¯o_|/†ï~·wN¾}ÊC\<šõäÝjâ¯?öö;þƒrýùç/Ÿp}|}õ/¿|úäíwìE¿÷ßÿç~D[ïú¶w”1oïh®×çŸE¿åx×s×ÝÝ»c{~¿ó³ïl·ßþö³§ßûëçÏ^þë_Û랟”þŒ'¥?êIñ!?í`÷vþ¿¿§8Ä,½qxÚiúïIó¿»);Ÿ\M OoLê?ß9:°µoÞ>{·ûî—€Ÿ}/ýÍg/_½~ññõñ¿¼ çñ¶FÁóW_<}}{ûøÙóïý×ÿò£Ÿþàã;þïî]S—òcþX™Ï”ióòÇV®^æ! f |Ü6··wŸ°_rï‡ëfkÔóÍÈÈ…³åéÃ}ö+MÐ0FdMnmWJCª#?ýÛ¶•5¥Dñ)MìwÏøå=-àO+1…táC³B <ýœþùC'e_âYçˆÌ•üñú?îx‡7hÁ|õöéË;JlB‘âÍãçÔœ©Åx}þìÅ3]y!àÖ)ª?1‚<}ùô7®ÊÌêeñ•ŸP«IØŠ¹xûìð­½횎!Œ?<è%òo–SBØõÿ½+¤F–—æð˜ú蟾ÿOG½•¸è¾ó:%©Í©_ÓÊ~ŠåÔ•Ï>}Ì«ªÐµ^¿øÅyÞ ÏiY9/¤þ°rýBžr½ú=iÿ…M~KNm÷~ðüÉoÀ(ä5ô!ï·SN×çwÜ“¾z|ZþµÕr=ú:ÑøÖuèicQZÇ2mbRfÓPÚŒÖüþ»Z• Îq9‚_•> stream xœu‘kLSwÆÿ§—sŽX‹ôPYr:†ÑÆÍÛBâ¾Ì °Ì¹U±`°vÈЭPµÑ:Ë¥ô…R+7QZ6°)­µNÝ™¸d[¼ f±ð¾±xÉ>,Æ}ñ-ù›èiÜ·eoò~z’çÉóü¢R†ar>Û¸ÙV_i]W]¿kÅòe›«köÖU6¦•< esɹ5h” Q»¯û#+™9µ¤ÝÝhßS¿’M¤”l!&ò9'[i#Ϙæ¡b—b'´¯K}„–I˜K1RmB7‹,–cv®°0D»—¼ÿ€ª,•­_‰8áoºÞ­6sAA_GÐnp𯎛9ÔùPçQKŸž³ŸqÅÇŒîáRÍΡU|YsŠ8Ä Ù㣧G/½s%±f´¯™è5NÇ@²Åä|2‹Ú\Á˜Z”Ré1žÚ¶½ÒþÉ^ÑûŒ"tM:ýFvè·©q¸ 1Ož´Kdç™AT?g“µ*êˆD¢Ã Qö÷6ÖDŸG™‰ä‹ä@R‰¯Ð ‡«u㾞¨ T3÷šzá2ývgð±þ.±³¹«=üø¿3<ûöìw;·›zmǪ/ZÕ˜_nèw¢µq÷Gîë.ØÈ-Í–"«t«Il?îõ9·Cëe8' tAÿèï>Þã÷%lßà—Ì‘A r3ö[T¹nÛŽòÝ¢óñG¾Z(‚­UÖ/xï VxN?þÏÖÿ®æPyWš<j[%Òð§²”éìÿ•ÔÚ”0 Å‚˜ÄLâ"œ‡¢2eÂF½™õØ[*\ÚÜO5lxäæTx$üéb(xyrX‚+<*VܧÚü5%…Æ›G¢‰o'Ï7Œî<*†Çâþ“ÀÏö-®*u¯ýÀ@WÒŠo\Ðμý)§=Ü—2ö e¸·•2ð½ùb†j‹M3oÂ×ÝÙÕÝ LŸÐhy“9endstream endobj 183 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 940 >> stream xœ=‘mL[e†ßB{ÎYž–gΙKƘÌmjŒ‰nc°%†á™–hULÇ7[ …Á eO)£"ƒAÇ Åv‡r&Ù !,A‘àtñ‡n&›!jfÌsð]‚í}~>?îûÎu)ˆ2‚(ŠØÌ#ÇÊJ Kw?›’VvÒ~mûÚâZ– b"!FyíŸç5?Æ/ÄÎÄ‘ð±*«ª ‹Œ„l!9$—ä‘4r¤.”F”¤š|§°*æ"r"#_ÁqõzäÛå$L’äÅÚb‚ô K;×T Wê¡Ë ¥é| u>þ}£ý¬£ip§ F¹>Y¸æH”XØ=b{÷4nP¡‡™£Iª&èú &aîßÁÑ;x^G­ 28¦R¯+~è÷ý)f4#TŸAµžO–³d¥îVž÷õ ãñÌjU,¿L_jRØy7˜D:ÈÀ¢Æ„„ŠŸÃƒì·¡ú°Ö–ù,^¯Ï3!„â¿î#vŸ9 oòi‚KX¿¤ç­ò^ܬƒI‹¿øªÉkîx¹ç÷«] qó``%Xš{Qpžu6{€†‹Câ]v:kZZÁj*zŠ;ŒÀ•ÐT zã`ù`­8Q´ß© ØWlp”Û¿ N=]±> stream xœcd`ab`ddôñ NÌ+64Ð JM/ÍI, JtwÿxøÓ‹µ›‡¹›‡eýw¡S‚Çù0€cƒ1##KÈ÷5|ÿ™Z¯2,(û~ñÄ÷‡_?ü~ëó¿b¿£¾ßú´òÜ¥î;’ï~3>ú­,÷»õ¯×Ã￱}ø}‘µüÇQï€ß\r¿U¾Ïø®Âöãl€‹<_éÂs¾‡/œ½í×Mn9.–|Îͳz€ ·ˆ¦òð00M“Pëendstream endobj 185 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 192 >> stream xœcd`ab`ddôñ ÊÏM̳РJM/ÍI, Jtwÿþ©ËÚÍÃÜÍòþ»¦Ð)ÁãüG@€ÑAˆ‰‘‘%ðû¾ÿL Ýk~¬^sºœñ{ý-æÁbk2Øu:¦oÿ±Ÿ}YgO\RrX±N7Gû²îƒÝG—qü™ÊžÖQ¯#—‘Ŷ¥ïa÷ |Ô½¥ƒƒ¯lÁçYßó§N^À¶†ë:·KH>çò˜0¡§wòi"Eendstream endobj 186 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 195 >> stream xœcd`ab`ddôñ ÊÏMÌ3Ó JM/ÍI, Jtwÿèý©ËÚÍÃÜÍòþ»¦Ð)ÁãüG@€ÑAˆ‰‘‘%ðû¾ÿLÉR Ý›~ÌßtºœñûÒ‡Ì?zÅ6%°«tÏX#ÿcûÊöî\9OoÕîônŽö¥Ýg»/çøÓËžÕ]§"—Âv¨ÿf÷a ¼Ù}¨ƒ¯lÁçYßó§N^À¶‰ë·KH>çêžÞž¾žÞI=½“óð00¾Eãendstream endobj 187 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1225 >> stream xœ}“kPW†7’lÂ(Í6Õjç¬3úÃÖË(â­Že¼ÔÛˆ¨fD”‘ b‚I A¨ ·ÂÈE¨$@  A´b‹:©J;`/[‹Ò-­¥R­UÊXÛéíÄ9þèh©?Úóçœóíû¼ç=ß‘PÒI”D" Û¥×éWÌß±ÿ 9e_Z`mzIó×?Ù,ƒÐ •ž}IfS>xîæ”ž0*ð…è FSÆŽÃs^§¨hj;µ“Š¡vQ‹©­T0B±”BT¦¤T6õTrr’lRIÐò ï¤ÒB™·Oö7»ùh^ù£€· SÙ‹þ^U»l([èÇqWÄïÉÔìGl_kQ]"Ф³ô ÕxÀÉu‘^J×´‚7ð'—€WÓlÛO>_q"F­uý'7ž>}øü‘.`pУ¬äV¿¾yãšuIƒWÑM9û|o¯ï£¾Þ H¤çóŸó˜ãM¼²ŸÇU|€€•*ð¥œ6:ÕÍieóûÊ7UÃ9¦ÅÛúàAé!s1*Ñ{ væ9hªçx9;èÖ”ÿfî[h}dCÖÚêc;oçpgÒ[óµ¶ÜΆ]LŠ.yîVuC¯åº ªõÀ“…[(·Á묩h­Dï'÷€KtþªûáynÔ  žbQâ¹b:ü1X¥êH…£VK¡¶îV›³ºÝÎÀ‹åÿ$AÒõÐt±_ŒrV.—[  Ñ"6zVò­»}×ôwHüñÚSÁŠÔ4™‚a ž-ë¤QP\刂¶ÄÈÝÐÌm\°~XævC»w5¾Óµ\'ed6QE25mMbÅ˜Ž tÜmÌ|KYªñÙ=nÌGR`(‡¼Fˆœâ‰Güõ#ª3zpØE±"”WxЖ—}ŸB¹Ã²ÛuM¥ ûûÕöSW>˜~÷µ;$‘ vÜOÍÆ‰žéDÌôµKXz¿¹éÜÙþð˜ÁŠ9_“0ÄÎ$Á+W.åØ0µ×îDì°«¥îTCNE~W×ÕÕr˜o„=K^‰Vk8b'ñ9¹¹¹`{QL©áïéöã•g¸ÉG«ýk«ñªšÒbš(DºSüNmUqqIɱ⺒ÊÐPŠú À>¬Jendstream endobj 188 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 235 >> stream xœcd`ab`ddd/O,®441%º3ªüXÅÚÍÃÜÍÃÒ÷½SèœàIþ£ LŒŒ¬Nù@ÄÀÀÀdbÄÀØÎØÁÀÌÈÈR¸æGßÏúÌ-ß³ÏÞÂødó÷ì#ß³73?ù1MôÏöÆ©Så~,f› ò?–°¹r³5455Èßð»Aôwö÷lÖNl¿ý·‹~qþ8±ÿnÿîäüqؾû}o*û RƶìGȦÕ@kjE¦4MY1mÊ”i +¦5Mi€[ñcñŸ~Ñ?Õ?ª~T³ñuóp20òJn#endstream endobj 189 0 obj << /Filter /FlateDecode /Length 1706 >> stream xœ­WmÔ6þ¾¿¡V‡Îucün±•ZjË!Qn¥~`‘ÈífïR²É‘dáŽüöŽófûî€"ª•6‰í™yæñxfü~N0ûž›ýŒÌÏgïg´Í~þÛjöðS0‚’Ðùj7ëEè\s¬ espL9_ígHE«@@š@@LA™¯¶³×è2bE5jë*Šíem#‚‰äš’¼÷MÛC2¨Í«2Š9g8µ•}ç8IP{á‰džÈ›ÕŸ€HQ"±0’ˆê¦½ô¤÷,ê…B7¸ÆB3 ùé&bÁë»ô¼·®ˆ`b°N)õ5ÅLkLÌ<æ%L¯ð—(–LZ.ÐY½IËMVÛÃÑãØ½·uZ6»ªÞ¯§…‹Q–£:Û\gi½„g›ï³A,AÝ®$fbunRŽ¥HØ|u2[(vy;5 kÏÖèôPXö›¬là}¹¤ëèó «ÊÅ(¢Ð6mÓe€ÖŽ ´Ý-G 7¬7‡ý>­¯×ưâá+Á}%ë#p€þ"½Ê÷‡½ó³ÈßeE~QUÛ‘‰²XI»0²*aÛ¸gU 'iQ<ŠÜddðÖ~(R§}é°†L¸%'žÌrt"àÉ}|vk<îúËs`2K½Ýï\a–˜yÜÁ7CPmwnÛ<À#çñ(Ôó`eГ*ÛíòMž•móÈžg*V\õše¯÷iOcævò´Ýb‡òi]Wõ`0ôÉyó!- ÆT–/ë5ú4¢ ,M>¬!e´Y½É.m Ć'‰•ŒÖ‰ÖtQBÁš)Áœ¡8Á\jã»W†YSå¨<>>ž‚°ß€(¦”@Z‚³Ì• j2C™H¨g„ ˉ\VÂ¥âŽOwÙ\­QQOѲŽަ/ïõ'Hb•ÅÎmª´væ!IÆG Ql8g¥;ËÇÿ æ l¤¢b$ ˆ:‚àÀRªÔ÷íÃj'?„‘;—-¨zI±€Š°F5§Ž59§ßfmŠÍ'|5QÌEç„z|Q™òûDqC.³Oóó2ßa/-UÛ Ž6Ø—¬ì-È?pðm,S÷ùv˜ìϸ•u_o§)ÓéMá`Šº·Ôçu©Ù¥á˜9&n§ãä‘› Ê»µÑu×Ö‹;êܽ{NÁ¡Í‹¼½¾ƒÞúÌ–¼©®./5~}ÜÊ­0kTýexJô¶þ\]®Ñæ,/·ð€LëÖ,6U¹ËËÖØß]!Öh‹Ä‹ GñêôÝ…¹Á_-³¾ @ØÀ×ÿ ™ÒV¹Eëè5[,¶uu¹|öëÉéÓ7_¨ë”Ì4›ÇS·e€a/…ÝK¢±h÷‡22ÊedLëã'GaRLGögMÝzh¾XD½K—W.‹ªíòüÂeÂ2ûØ•û‡w6rÖC]’ Qº*Ò³åÑÊ»±JÈ#P…¼^*OÏ˪É—U×ÈÖ´f}³Ry™5<°ðx4€W´×KæÙ¸«/,4Pnm±ûuWÞ¬¹ çÞ¦*–Ggp_:º…>bßv8;Ïl¡>j«Ë:?¿h890þòw§tÜ“£…žî¢K ÃÏ_Ü&Á°t«ot‚&]“= _øJ±´PΊtó´¹§õ¹L]ÐÓÕì/øý -òzendstream endobj 190 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 7341 >> stream xœZ xSÕ¶>¥äpdè1ôÄ¢"³€Š2ZPVÀ…ÊTZ:é˜6M“4ÉÊØ$çy¦ 2c(†QQÐ+ põ ^ïÕ}¼ß{û¤¡Ðú¼Ï6iûí³Ï>kÿë_kýk§Tÿ~”‡‡ÇÈ¥Ë–ÅÆÄ®ŠÚ“ôò´V††%GmI®ŒJÀi¿õûÍ_C·oÌÄ1¡cv¹>–ûÂØícó·wüŒñ''DLp ¶¡|58þéàŸKñhEïþ€ÞõäuÍbC‘Æ.7«ŒÉ ;ùJN»[¦‚È€ÌPú Š“A¨´ÙªÜm–:ºÊ€ù]µ`n6·¤@ìû'‡fÑæ±aê(‰:ºÊ…9ePOæ0xZ+Æ¡ó"— èŒ#Ðáõ«:½Ù&¾¸YlnI dBè=(³ì§÷çd ¬Ý™œÊ°ÎV³±d›ÏB:Èò‚ÅÀ ƒðQHïA4.v=³g¹f´HÄ6Ý/½¾û¨Ïq°Å漊S¸í=·5¸n{Á}C¬S9ÐçP”¸ xýîÂËc’bö‹©¨/Ϫóv¾8óE_ß°Ö_-¹[òÝg_„KpÜ?sš°Np —èSa»œ Î]N¥ó_dÏÃ)¾Êõ€a |‚!8m{ÃŽ£šÌPúÇ­²:ꕺ[†UR-f²cöŒ<„î@[Û·ìS´‚y}_…XfñHv!5%ã5ÿE>ó!å–õPáeŽ!?m?ü¬Ïø`aæ Æå^æð¸ã,r¢D§'ߊNˆÐŒåh2–ƒ·>öü`ªé9d¢äÞƒh+¼ :htšI›ŠÎÃð'0Sè¼LôDÐŽ%)˜y  +¯ÏœHä¬sj:JÞ€ %®§ïò'Dlz…ÑT½Ó'4éªÐä¦õ+]n4•øDЇ_›L|ò)묫aØa8R´žÎìŠVGÕB)±k.]uX/ð#ÅŠ•KçÌ!>[s¡äÛ’;7œ_Ãö» ­¯Ëýºa@É"P” ±ÎMŒzÀ[ö‰Kn+ˆ ‡<©&%{1‡+éÝ(Y„¼iåVMF´ƒ©ÚXQz—3VÉÄpÐf(·2Ø›nG!"¤¥ÙƒŠ5šÔ¼ävt€©ÊXIanɳïæÁ@br¼Ëd”Í.|£{ãË?K·Ífne‹$ôªÉþæÍNâòƒÅÆJõ{³a-,Ió[jiçXg‹™¬ïƒûõFäº+‚^ëS1©;‚âI>`°'M¢@ÄNú{éÕÐ>šÄ¢”:¨†šRsƒÛ‚áå…ú;W9Á‰|Éoö.W‰ /wïLò`DïM´Ñì¯ÂÞ"úpçE·Ü®¢w¡õGhM.h5.hGuÏ2Ò=À²ßtCû(œ‘—e:<ù$4B\öO<¢*ÊìWÈŘü ó÷˜ê;[¾‡¯À­‹×¦ëÒ[Àí'g(5ÕEC"¨dåÖªH<Âæ¨Â2^ú9ý¶ìPîµ,ÅÕŽÍÓ`¬.ȾÆh˵ñÐÍŽŒÉœ&#/¡lPª/ï|?츶Ð+ðÁWÖCnÓ>%ÀE:œÎ»5=¼ÄÆrSU8D€ZªI—/ ÈI‚×ÁvÌTǰ›÷"…Íî €gÓ,S|£›p„™òl2,›#šÑƒo€/{û½k2¦œ » ’+pëý’Ûn'Jh“Ãë¿ÝCˆ9ß“ßÞì-9oj~† ®è­ëýl<¸7{êèx“‡Óì$ªm‘Œöð†Cr¹Ë‡Ü”A0}dÕ2I`CBïq4¸÷ÃhöµIE(œÅR2½7sNï†6P /´½Xƒ^ôfãøâ±¹9dÀl¢?D7ÜÌüCª Ã;Eì—3ggGúÌK›¹õªy¡˜½Û2¦|œHÐÜïÛ÷52ì’ȼ*(÷¹L— Æ´·»w ×pÈìÞûݷ O(“òƒß¡u7Ð:Oþ?î¡×ðÀÞ 5ÒøU|5]5öñäÀÞà7Ó§ð]ËÎJ¨IÔ@YòEçšÃ8ï3tÔáñ þ; öä/ñã ¾‰FÖ@§ k‘‡Ö@0‡é‰ø¨HGC½úõ¾Ü³º‚pÈ!±$KV+—âg”)ŒŽÖ¢£¢Ã=¢"‰\}|™*h¾Í%AæÞ½f›£ñ™½·ŒÅùÕŒžÎ *Ç ¹¶ôr(„N°”Z«ƒnsÍÄònø]\¸èðb7óUÊ[@aVw¡(®à⶯ñ8Ø ã!{¡:º"£–l¿É–ßi°êõ•†b} ßÏà`Tö[x‘së2¦0¬|±ü˜ÿ?|:álþ±†õ*;¤ÛíÓHò"y$žú³X“”'Ý’F&¦oß¹>Ë ¼Ý²ÇvøN'oê¡„×ù®Ä®zò¾‚^öf¼F FQ^:“Æ¢3àþh7‡–¢À]®­HÌÍq{§wóÀ­]° WpP…¨ú!ØíÝR`b_êϳŸ?,×Ýà [¥&W|î÷ÐÏ%™ØüdºI üe®¹÷W£œ«ôxµ¢õx$Zo&¿&£õÞìe^ÛÃïmô4=‹&‰öÒðѲšŒO›ÀüTïÂNÒíî6Éì¥ïâIx ž)ÚF³M½.¡=D–BüІqŸâa±Ü­D»3É@·î¬{ÅD$ Û‰óü£kFþï³X4)yÒ´ƒ±Ò\×­³—YSˆÆ‚e?MôX^h0ÉÿpUÊñ¹.YQiªê–)© +T®äÐE³|oìfõŽÓN—Swôä‡<¦pªc9ò qðÁ¯[h$ïYäýîå7 7€ü5­#Š4àÿÉ”*u‡"-;JˆØ uU^ÃŽ Ö %) ì“Tïº4‚"«°ý©nÓÖ‹Š&„+ñaÍÇ[èø7cŽN ØþjzBhàm¦ ßf("EÕ™2Ë|Ø£ã %-/^¹¥aÛa¸çg)@|0ÉD,5üñ„ï*óÄ¡©ÈClnŒ±"G+OÉÍŠÛ°fÁ»J¾³:ˆ P{@§P‡—ÉjIÊ©)371…—ÇÂ&À¾0Êœž‚‡|>yzŽüh,s3~Ž•’§îòíÉÛ®K!ˆ«¸VW”º ¼ŠÞJDƒ,~"ÞÄ¥…Ébä1b7¡BEU› Äñª„« ˆ¹H>òáÇh _òñœž6nlņ,SR~¨IiÊ-PB”X ŠMÄ"KÕq’ç>ˆï^GÒg¡ž õøÅ‰ô'é>±ýT/Ñ  åp5þ®­ÔeK{²+ߥ#@‘«ŠÈÝÈiR5Dbu€‘($s=‡ 4þo|81E§Ñ¤KT;«…„Ï£k,ÆJcIOúýTˆ8¯KÎ:oÎgö*Æã-VŒãð+±M¡¥›A‚=ˆÜ´>É©x¸ôÊä_|ºà`CkÃ. Sie{U\Ì¢WÅlÇ*EÀì×}Þ‚à‹%·K¸þñ8{V)U䟻ƒxñ[þó‡´®wÕÑóÄ’Â5×(ÛdÆ8¼ÝWïtë–^ƒ¿ô•-_ð±"=ýÓM~x©®$ÍPd´ì&ÛæêzIøè³Ð“¤PÅñÒ§B““½v•"|Áïˆö¥«Ì–Î DÿˆGLÀ™(ÅöMùzû Î|KDã4FŒ+èúËŸ~xŽÁ©„Üq=L@#H*ZãLw.¾ùº ºéÍnåøbûGs‰åsaÖFÙ Ånb¹ä'š5 ½Ã„>’¤¶·’™@³KŽ¡3"4´b]ˆ‡ÒìxëÁ¢kçIa—èòŒÛ; êJÍnÛ–:Æááê¾’Uñ¾âÒ»ßℌI¡KBâÞ¦DÓ-h© ·¾-¹KuîšÀÅS—ïCÑ/ôвX±Æ•0Ó>B N~øzã£è¼JNísf8×Q¼ß §V8¥§\ÝûEž›jd-«AëuA;öüöYdÅFŸàU_Ù,åæÂˆ‚Ô¬Œ¬du´*ÜžŸ=g“üm­\6óûåèI^ÎÿÍÒ©8²¡‘ço¯~˜Et.dÒIüžS¬(6VA˃қLÅ;ÃŽÖh íI‡}îÀß.åξ`nÎkÊn¬)¬5ëõqÕJ;”A]!Éf8{’.7($VÃ΃¶ã ûÉð“ö£ûùœ€ö d§‡0+Cælžáí÷ó÷ËKZ;*Kmp™<”ê›Ô4Èœévˆ+€=\'6žÿñ¼¦-ÿÓê)8ꯜؔ޿¾û(HþÚyMO*4/ˆv.qš¡$ÉÜ–ówÅæÖDâ¡á+Z—«Ø‘±`ý@€Sö³«º&·)µ*»àRg“#_ñ7ËnàA„c‹ú&‚¿ÔŸ}è5º‚pº!¶Bš—¬ÜBZ.J.ŽdØïåÑ…uí>g¡ã“üÝÌDô³8w}àŠiÀ¼éºóÍ~CÝö€Üàž½rß Y÷½Y'¿¹GYy¬Ácú¡ÈÕÖã'úÄ¡}8i5_-65¦UÇ,â“óbÕ±åÉÐõÕÝñ'wðV‡×—ÎD§ðX zMl?óž¢(|o|¾oùürn[ad‡õ íèÉC Ý ú(]²]Uénœ«ÇÝsnzVtxGP!©¬ž0}^æ,ù’¿/‘g× ú"…ä— 5óˆ!Á¦ð†­ m0¾g(7”Ê#Ý]t2æÜm4Ú«ÁV\ÜÚ}*ãP¾y«»%‡¤ô8®šÛ;n£'zÙô{ˆø¿ø!R¯ôÎch$½øÁ Útehd¸$"4 ém–Ñõ}>þÕhJ)“ú°º$HHÏ‹ÉzãGØhîâʰ÷²ö:²çÄE½ >½î‚¾%®N’£ûœ-=Êôƒ^õ(Ï&ïÑ]€‚—“?‚È›íòfûòönEјAkÐ4@ÔÑC_y‹™\õÁ/öiÝoûvÒ8O=þåÞŽoK»Ì_O“œÙ=ΰ*JM®ùôœö¿ºX%µž.¾~犈UPwñK"6‡ê>T~è³Aµ „§¤H ¹N$'IéwþšKS"YÜ·D¬ÄOí’5°êXù¯'ݽl½K²ýÉM+ð½<ìâK÷Ar~¾S‰†B÷ÈmÿGgïÉGõœ”à‘IšÇH×ïFvwóâ>ÃPi¯³]h°ðòfóåÝR3 ö!5g¬$•ÿˆ†ÍYáÛí åD"FÊb“öz³1Ò|"{öR»€$.Ì-.] ôVOu–lFosìáÛ%‡îó©‚t¹ÿv,ãRϸWÿpCÉm2þŸéÂnr¿æcHPhÆI4#Íðf—ð¿º$— öyôÃþà§îö Žžˆ¿I[ž¤Ž•èhÓ9ZuM(HORP•sñ†ÌeDPë͆ Éb~4×ç\j^OûØHºw¢Š3TêÂk¡$6"4Š*MùwQVÁ^áü`S)NÓk õO®×BAšÎWr,SÐÓ2‡Pþé/ôuWhׯ.#qɾ?tù|š€¥Me%¥Évté)x/þ7'ÏÒi5)ª«²ENÈL”S¦DËú”’%½í_F³þåˆ"ÅÄÍ <¿EŒhÔŽþ!r1µ8ÐL‡ÿ6¡ž­—ý´üGR¹Âa“rSr+ZÉ!eŸžj!Í(Ô‘!¸‚Ó¤å%µB9˜Í6{[ëþòSpÚÊýes_{÷U’Ê–YS?´˜mùDâ7¥”JÉ„H…j»lö¥E¨? €èo+gw¢~gPÿ3¤7òàk­z.¼ûA¦mÝžCÔ[ÐÅr“Z¥V©ÈóKRê‰}¤õj¶Ž;1™Xøàñ;ñ¦m8çþÂ{®¶ºÿוhQk²™o¬|ü!úpŽCUk©5ÛÏ8|×á½%Y CìRþ1áÊ#5¿¢5¥i ;!/Y“ªÜÂu'GÒ¼TôŒÊh¼/} Ç¥á~Z™*¢ƒˆ§ŠsÓ1Ô‰üÑ‹§kÊ c±{—ÚèðºìT é&œäñɼ-]]uzQÕ× 'ÛNßxóš Å‡Àäy²×+;×]gØËó¤ ²|3&_›. ç¿Þ*ý/&íç¬\²ð¢e!¬>`ë²;wè ¸‡ƒAÌN¼G,_üƪÙäzàlXÕUà´;œg¿ƒ;ðÁÒœå‚Qè::èÁgñçÄöƒ‘Ö,Ò©EÉóB¤8„Óf‚´‘ k-7•‘|„6ÿçÝœsu’d6ÌÙzí<ñc%úX¼©&9§ ¥˜‚ŸHÅôåWP?ÒG|Xvl_>uÒ—áúÔR³Ùb1–™j3+㉂¤t’|"-o B—4hCëÿÏÅŠÀwVΆ×`Ëù¢+Å7¯w]‚÷¡6©0¥~»%5û-Á”*)zõšpÍJñà+Ðz±¥#²ñ£ßCD‡èBâ@K‡{0”nC :“í™ ‰EŒ&;?Áû?G_§³I€¨ÂUá$Ò™óô<”¦^ƒ{è0ÉýÄ›õåå(Bl,“Û´úä²em‰ÅhÐi®(¿8ßX¡7™›¶õ&g©/üÄܤ·YÚ"Ø"t uLŽŸ6þù³-(‰¤ÈHÓdjRíªBå½ ÈRÊTš‰.O³ШK+WÅgû©ct UD›à‘6½ÍÜdÿÄPßµsgåÙ-µ°]QZÞ}ä5ÛñÛXRŠbÖôT¢©4ê÷ÛXšÚ§(û¹‹2f~‡SG™rÚ‰GýÓ‚¨ö‚Ò_Øxay{³f¾€èÎ}¤õc™Z4ÖP( H„,¦Í&b:‘k½ò[…Èl_rI›­&C¤A0w É8Y@D®¹“XwÖò@?׉íŽÈ=!° bI"W†Ö%}C¾Þjˆ_¶.#;O®IUkR´™…éeÐ ÈóD9ê÷hïèÐ1b~{ç¡ öëÓ¿L¥q¿ß‰•SûŒû=vpM¶îá"ôÃí^ì½%t±¯Ñ·ÎüÇDŠç’Wbî/-È_þm¢;%CNfnÖƒ¿/ær2t ËÕ¤¦WB5ØK¬EüŠßsöR=tÝÕ;{ãO‰[Ðò¹È›¨ áÿ†á§¢±^þ%öþ{„¨¨aè©fäÏ,)'àI³ð ù06¡AuhR-šðͽ+pŽ?Ÿˆ'v£ŠŽ/~SØÜ”@¢û-»Ì- h&gª3í[×üA]U›¹Nh¾Muù{MÖÚÝ· d7Pe1Õ |KƒE¤’gENתrשc3_æTašÌÐŒí™ëH{«©*/Q]«³C½Qåê8ü§ŽÎÝt0fwÒ å!p}:÷°ïê@C‰ ~Çýqÿªžög}“/ë®<’TÈÍVfÍZ-OÑ2¬3C'ÕªcóÊÔ%PïYŽî~ëÁkÜ´>ZØÔ«Z<>†dÄ}bS}Ï_öÅ2XAzQWì½Ôuò\Ñ—D*N¿Š‡Â/ΑÍRí¨—— E±ÌÔh(ÔåæWp¼åC`n€scætù¢€¾ØŒ—sò\•Z#sÊ…î¢çÐz‡×ùÛúÛhsA?Â%D /î8½¼ù̮Γ¶EW–Ç!:?8{±:¢ZVéÂÁÜh(γkŒ-…¾èSØ–»I- NÞŸ  Ó®ÈËuŒ;? YÛ=Ø»$gEÎò%K§‘Tà[vÐb¶ZŒ•‚Ð#*2Õ‘™¯Ü\†ò†Ÿî”ÜuÝJ³K3@Ju®jglL†ŒôoJ›¼0§(½j'ÄATFBzRfD²&M›Q˜AžWùdíŽÆÆÒb°C¾¢ » «TÚNÚ°–Òú²ê’¶jc93T^À¿Y€æ˜ hÇ çàgõŒ2pw©E/|™+M–!C(êëí#endstream endobj 191 0 obj << /Filter /FlateDecode /Length 23427 >> stream xœµ½]¯åÈu%øž¿âBO7{T×dƒd  yðÀpÃÓ Œ¥lôƒÊÕRI*OV•»Jnú×÷^{­ÜÁ¤ÚÊÁ®<ë®Ãà!ãs¬ýß_–·õeÁÿôßß|ûnyùý»ÿþnuôEÿùÍ·/ûáÝßü²†¼õ¥¯/~÷Ž_Y_ʾ¾-Çñrôú¶ôöòáÛw¿~ýÏ_ýðÿ½ÿ¢VƒÖãõÿþøõû/–·¥ë¹Ÿ¯ßNŸ¾{_NûÐÛë|ÿOþÁ*{n¨ìËÛÖOkìÃoß½ï?üó»¿ûðîÁ;_~ÿ£ÝîQk§¼l{oo½¼ÔvÖ·õ|)ý´ÏçË_¿ü×—ïÞío¥,ç˿٭ÿƒýß?ÛýûwkÙê[=_Z]ÚÛ²¿|û®î‡5ÞòñݯX)[{«Yûv ½Ä $±ÊÒÊ[ë‰5ÌÚÚñ¶N¬@2ë´§L¬@«–}«™5̺ýîô$ë×AÖõxéo½U{1©‡¬e}kÇþÒ–þ¶,{ÈbÝÃõu½þY®Ö럛ÿó|ëÇk»ÐÝ{‹w…µ”ýíX_ÚÞ­);޵Ô7»¾Ã;iµ‡€ŸG söu?ߎ=‘™Xû¶¿-%³„dVÜÃÅÊwõ>K<Ç/V§oýn/o¥=Ì7<¢ ï­Ø‡Ý?lÖñìÃyýÅêÃ3Óë.çVÞvyçiÝl³Aó—ßݘ ¾éÍÆÝj]ÕoîÃ7ß~ýòã7ßýæë—ß~óÕï¿ûþÇo~|ùòõOï‹MK]_¿þꇿ|ïw6~æ¹½mmÙ^öÅnÆ~®_éWÿúƒýÿV{ýßü÷¥½~õñúIÿˆûýw–ÏËÛ±­Ö•?ü6/ÔºZ‡³we½íÜðöì1â_†oå°·gHÛ+Ü®#í|kxçö$ªûaÿ8–îó€cÇÜdˆ}guÄ~,ZZº½:l*EC˹¿5¿Ê¶ØpÄÞzqd]½!›zí‘;bÏ-F= t¶d·°ù…7›(½%›#x7›õWoªÙ“ §56ÕlY`SûƦlÆ;x;Gõ¦0ï’b÷åMY“—±ãM›ÚØT·Ù Y··ÓïcÚ›Zì&ü:m=ÐÔÞû©_ÞìuVΔÚД!ö6¼©f÷eMíýXõ(šÍ§ÖÔÞñ;ý½4û—5e Dy[üvšÍm­²­ºåvtoªú“pžo¸{°gw ïlÉ–§Åoo·^f‹ß~Ú wÿÒn?-¡¿Dl´ováoÞ¯³×òVíʧ=ÙÝÛÞí.àÆO¯h?í|Æ»u-oÊÖËÎËØ‹õ¦Ö]?a·&¼)ë|8vIoêèñ죩Þ_õËØ;ò¦›áV¿ãÃ:š:¬/þü{hêÀªÇoÙ«FS‡=.ö“£žljÕL¹¶ú°÷»ùçæëñŽ[XˆØ@KöÔkë[hÉH‡u® Ö?ê‡MØÕçßø™ç‚MÌŽ» 8Ù”ÝxóŸpZßò¦0ƒ’c} MáµV¿ði M5’ü™§5¦š +ñ³U<¦½Ù¾¤‘Ãá´·íTG9­s¡­f#Ä'zClª°.ÙJ<ÒÓz—·e¦’c“„·µT½ˆnOmmöƒùÎûºy[›=0>ÂnÝ mmÖ&‡p·§Ð€´ŽßÄzÚÚ¬Wqêê6¼‹½¾­Úb*¤³-LþB»õ/[Ó¶µëñtë^ޔ͉ìÛØaySöü+›Â¼fMU»åN±éÚ›ª˜¼š#kñ¦ª½ëFÄ^“5U­;ôB {SÕ&¦¶9bÝ MÕíä픟—7es=Á4†¦ì lÝ‘½±©â ˆ5Ц¬;^Æîë°GZ9Óé+›²‘Áû[í÷Ùëß‹í0½W¬ hªà5’³úø1ľ½;bÌš*Ǧ ÛúàM 5oÜf`o Ûè—±þåM5Ÿè€`­·ßYпˆØTçMmÕ†toªîx$ì¾¼©º¼±¥~°%{|~ã-­ÅgKküp°½%ãDìÙvG43eõ¦¬ ±©b MYæp4¤{S6žÞüñá  %ÝXBØJ†–ly[Ù¶ï¾;89”b ×Åñ×[­oyKöâO"vëÕ‘•ÃÓîweS¶ÖñgÖêó·!ö‘“MÙ :ývªu.\ƨlÛ{"Á/c}Ë›ÂÊëO¢Ú›ö¦ðɱ£È∖ӂáMaƒâcðà2ËÂOÝ۱Ôžï†÷äÔêj¯ýðv–sãBn§‘ÝÛYlZ_ü oÖ³ÐÎr4.V¶‹¯hg9–hx÷î³c,¼Œu,oÊ&7v¾Í.h£Öº¦ñ¼ÙmxSö–+ìnД6¿å†î`á:^š=o #À¿ÔÐÁ±'|òKv^ô¦lØð74ëßÞTÑ"cƒbaSëξ֬gá*+÷ð¥YÇò†–]¾YÇò†­ô¥ÙÆÊj½ÇÐð°7 E¿Àî µnëøîýÈÞ³ï,»Í¼ÎŽ“íÅ»ubv€½úTdHUﳉmÙ}ù^¤ØÜͶl²óÆwtÞj@ëÜÀØé¬±){è|¶ò¾á*-¦ºýäù³Û3?ضÝûж±—ðû;–•-YçÐÙR-\=Š/ÖhÉzÔæ>ì_h©îhÊaßö–Ð ýÖ¦·´VnåÊÑ6¶d øÂYë[§#›FÔa}Ë›ÂZÁëXß²¦N{øºŒu-4uÚÙ¼û¶±BS' §í½ÑÎiïÀÑiý Íœö ØCNÌô+mWËiý ÍìZÇüLàÍ`¹!b³…7ƒEÝ þå-aIá…í zSÆå/:ƒMÙ\ÑÈÁ–@»Áœˆ¦l‚ñ„çá-ÕMKžâ‚/ÕsÝú•·TâÁtû›·„׈toÉ–1v½Žu-árþâ:6Lhjñ¥ˆ@½)» ]†kSêøïÖ±ÐÔÑcbP4GV^§b(¡­Ã‡_§.˜ß Õ÷zœ%6ø:þÄ:š:¬ÉNúe²ÀfÄz–7e7êk¨ã0Jº“/¼uÙݸÓÛ^øð£ZC'ô§^1 zSØE“sv6e œäô“MmÚzVì@±M›OZÕìlªVnÑlqÙØ”mOü±W;(²©Òô;×Ík†¬ÜÆU_‹ÐTlÔ«¼)›R:?w¶d¯êdÛÇÁ–m\ªí3Ù’/ºÕšs¸Ï«eñ£ZÃTà3‰­}8ªÙ¤xòPSmE÷–öSgÖŠZ²S6C|'Ôü8áÀv²¥CÓcµY•-í'74)Ðv¶Ú¤À–v4ªD¶dcŠ/Óº:Nj†œ& ±ŽÃ¦6í«ì ¾°)[Ð|Š2¤{SÛÂ!dÛ½“MY‡jDêΦp"ð¦*Þ<š*'W ZÛÆ¦0c°që[6N | õð£šwN¶SÀQÍ€ÊeՀΦlî[‰t?ª5œ}}±êÁ¦0püqm«Õlù:ô·âG5C*ç ºUì–šM‡º¿mó£š!Ú¦Øò£š!…£µn»ÕZ;tœ3¤³©ƒ ŽmmN¶dãΧYÛSÞ’½ÃÝñÖ[ÚýÒØ\_;j[+[jÜ÷ÕVü¤fŸW½˜VW¶„Ý/³-Þí¼Êv²%ûƒo0ªÝ[ÂfÖoÏï ¶·yð[GcS¥ëwû™ W¶ÇXø­îç(CV=P<~oËfMß.VÛu±-;Wù¢iHg[ìv@Êɶ°¥ð+ÛÉ…má¤æ?†?´+ïÙŽƒÞž$ß•O½­­NôãÉvýöl|ù¸ÂAmmØÙñ~ºo³N|ü½³©#žé±Ðʼ٠æ…1ÓxSö†yaÌO ˆm¦~«nlÊn‹·ŒÓ½õWCÿØ j»ç±ã˜f@áºd@g;[ר?Ž“íØpó'Œ5›ÙbîÀÊâÍ`Óí×=—Æ–pþö›Ã*†–ªölvxôSšíOMmg]ÙRÑ˜ÐT‰)ýÜ:›²Õˆâl'›‚Ь²´ç¨çÑØ”Mƺð¹±)ŒÞN÷Sš!+µ/Å›Âàçøè«/†lÜ¢‚SZÀó_/¾47kámñÇÕ«Ó¬‚œ÷ûæÇ´†‰‡ÛB[¬›=[îM*ö’ÞÔ¡Á@0ÏsŒoí§ÌvãÊ»M0|5Ñ:Lâì[q‡n6jéG\«NüNtLv­xØ€ê}êyKŒûx¦°qJŒç~-‚z5°Gqµ·w`ç¹æ7|è@0:ïl{î(XëÔ™ŽRy2þvØÑƒO"ºäæ¶ÑmañâÞ$º6F§èýØ3Oä°%•mk aÛÁÎÃì€)`‡°Ÿqýˆ±Š '®Ïø6'·󰲕<-6Ÿ²©˜:ް]Ùå°I Ö<a ¶ìy–‚ðÌvôšX5ÙaoÇŸâa³{vLšØöib…… \L¾ìJ-OÐÇyj†‰IÛÑy¢?:­ c-8¸ù‹ÅâèÑr,(§uÔsZtðÞ¹=ˆ…É·Ïié:­7îyq;m*áÓŒ»rNR±Fž°Cîy=ËXæµÖº=rMËñi‹ç±X±Olg޼¨ÃdÉ%1~?jô¼98ÃÆ=6çÖbsÀ=ƹZ:b‚c{DlUζéWÅvæÄCó¾[›¸4ĶèäDôqìœN¸DüŽcss)/0ÞÎi“†³–vWÚÈç;DmöNÛ_òyņVxNáÚ3žÖßÙ¶v•˜˜´ÔÎfX#bwŠk#¢lÇ4FD»Ü¾è a8 ¸ÖV¦[´›î«ìZcñ)ï¶7ݹMׯ2'}ííá°àw´ûïÖ%ÊtBèõÔ<‡ˆŽÕØ3°pò޳HߺÎ<¬ôVã²:ÏtÛð)Ä™§£ò*:…•c`Y¦ã7Ó ¬-{:¤uœ"yÐÔAnXaÆa¯Ÿšsã<Ø{ìàâÌã4_’Ž•p4­<‹òäyY‰âtjH£—!N°†tBrmJªêÁ:"ƒJ–݈EÛÔ†4YBtèÞaö.ù`¾/µÊF¥Ãû·[Éü}ҶÜ·Êr;z€aJ°³IËÐÜ`ÈñFS-;ü„4cÊjá–š †„Ҷöu™PhÙᣤ±†”}9µ»+‹!ã=,1ÉØ)kÍéJŽtvt>,Ù|l­`¯³»Ì˲¹!öȦ%7ÖÒÐ!ó“!]ÆZ¨v8ìeÖ¢˃ë0tÙypåI)Œa†ìaˆãëØ×m‰ëШ¶Ãþ¯ë¸ÝÍmŠÃ4·Ã!°fó!G˜Çhá³ÓéÊÍNXwÄÐrHCá¾Ú$Kóm‰lÜÀ…¹q‡fA™$÷_¦­“VKCöý°lÚ’-orX? Ù¹V‡…ÔÎÓËlE5¤q_–VC:_žŒ±;æ7¿Šìµî¨`›.&ÅÉì[ÜårÙ…K]ÃNLÃq±É‘wÆåb/…wèK[–‘úr½„!»4Åp„­Ó<L˜Ãí×Ó·6LæXè;³zAˆ ñ2½cAñåq˜ç­§Ê’) ¾ ‰°ÅËÈ/ÔNDŽ€âñXŽÈYPº6%áP‡E<œ•.¡Ã)Qù¼ÃiaS¿žL86°®òáü€«FÿpTÒé‹‘¡aGö³ÀÃ.®Û™ÈÿîPù„Ã¥c.§pûÔ“c¸†*ÞýTôÙöUöÛp0U jRä„B”Æ>9ª°y¡E?|Yv:‘Ë.ü]xJtn„KÌŽašÂm†PúZµ†ÍD¸ß6Œä¡Ã ã /Þ†Ý#ŒrôÁoËÁ+_ vvûä.ܶpT…Kñ4T‡Û{Æ>¹&wFM¸/a1 ]ZNlFõ%9A7;ÈuJG)bD¸ü…3V.ápÅN˜ÆöpʶE6çðÛ"h„ß‘gRŽfy± ' 1ŒD¼™p"ô4ù™a¢cW®hÌlWÎê{³?ñph7»úûÃéݼ09Æ›¬6Ãwc ä^‡‘á÷ ^W^z•~Ižü'Xräíß+=`# æQDЂJ6ºöX€ _¬Gð‚JNC(@a·1QÖÀ †ýŒ€t€1€; áÇzr0ó)ƒ"¨â(<³¸ ¬ŠÅf›ð¿q0Æ'<œ&r œÇ&‚£ãÊà…’`égC„›œ‹Ü#$åÄQ”- [ƒ†± l©¡M±/g‹X¡ˆÁóÐ…CsÚhäóŒ8›ó\#ÖE±8gœm#\§Û8ð.<"z:Æ)êJ•!GŠ êq€ÑC=‡#¨o²Dvõ'/£8¥n¿3b™°;]`¤x'ìÇù"&ʷߌNJ¸©+¬ËC«<ò‹„ÁWöÑgŽÏ:°k.9†Ë“;ëˆó:àT®9ìX6-½/fˆ RvàpòÂŒ:;·ÌäÀ´=:ß^;dº½Üû® 8<‰—&g£…Qh#’®Ë pEÛõW‰ˆ<Ó¦¨=ln9V#²!¾—‰à?D‡2v-âWEájÏ×w¶#È»_v¬ˆCıŒï?b1©çhFìQ8âËHÄDâ½PØ$N ›ŒÐJ›Ã¼“ÿáÝß¾c4öøÓêWÉQ—v·VY²¯»ÀîdºÏ1–ã—Do¿v‰hµñD–=Âã©-%Â#ìÒÞÃÊ"ì²7ްKl™J~ ¶Îëô’Ïqáè8Ž÷©³X—ã FڵŹzÜ®Eftʈº:î3ÞèÜ[Ä”þ_å˜C¤ £¨(¼äi¶<ònÆh´³âÒÓˆµqߢñˆº »Ìˆº„)»_SƒÍ9=Æ}Ì-‚KÇ ƒ}×4 m\´¯yÊúÓ2ÏeXÞÏ<Ý]óḧ‹üŠWÌ%£-ϬX 9„GÌå~êaÅ }Ò¤xMâçëæ˜çk,õc-(2&^ëÅZ>KŠ}ùriï]š ¹™…×p²GDå…;1yïä«C‡®#Þ¹+&\~ì Ã?¼‚—·9<‡0®ÐíÎEl¨å9”½ŒQ᤼Üáòc"ò¶OQ—aŒBxCÏÂÄð—Â[¯PùTaâã ¿+FÅN„žYD œ“ó{d…ƒ¡¸rçÊ Œ5‘ÂQŒÈþðð%#«ç°KŒcFÏ…C!sØåq®qrl#\e™œßà( ²¤ƒÁ¹M.óÎP\åZ /;‚G )òÄeŸÂ.q¡5<úˆ\™¢.M'¨pÈ¿ÏÀ#¶Ò#¶¡ºŒÈ‹øÊð9DŒÂQÃ%q ˜o—)Öq@Œ`4Ž^Ëq ã%ƒc#¨Âcwy^`®gCŠÍ€ TA™ŠßÀ¹±Å ñ¸b¦" Iìs¤ˆ¯3DM‚ãÐ"âgNÃ(*q< pSÜÊŽ±+€‘-;RC¦¢è—+/¬ø2¢'¢h°V*Ta6;Ïù¯Hœéhh}ç±#ŽFn„ü\¿´cÑcXB‡pdgXH„íõTÐT„ íUþ³¦„£?#P"’ -ðÙD´“íVõ"" INc5…;-SÀ%¢‚JÁWØ´(4RZ{$Ë .ÛBD™½°ùa[ ¶/Êæ‹x1¸ VF~)¤¬Eåˆ:k=ÖŠˆL³Éøm ^Ã+ãRníÁ’ŒCà0׎“ÛçÚ¡tH‡ä p»¶÷ˆËTDzP›b.úÇØç9”¼°bÿÐÛØÚM)†áÅûgˆÍ 2bÛÖ"|’áŠØÜrªˆˆÆ†ù–ˆ¢g¯Wdd³WÆÑ“^ щËV”ó+Ï@ÿ Õ(ä¶ZO¹ÉQØ*àSê%!1]ÎÅ_ÁàéŽÛÌ $³v_S3+Ì:<þ2³I,˜9±”_¬dV]fi‹ ™Xų2KÈÄòÉib ™X–ω%db¹Ázb ù|;Rf2±ÜT5±„L¬£|b ɬÆýOb2±:ÄKHf1ä?³É,kç™XžÉ?±„$<¸Óm0qüq" ɬu¹‰° db­··8‰åf¥‰%db1y/³„dV¹ÿÂòé/Ü<<“ù ,&f–ÌÂ6kz;ù ,w O,!ŸÏÚÆÉ_¬@&V¹õÀL¬ã6Ê’Y'b€2IÀÄ©·Ñ3‰åÁôKÈç³°šMså@ (çô ’Y+Ï$‰ÈÄ:f±  ùk±pjšžê@&ÏO™%db¹Épb É,,Ïó“dbm·9b ëÄ‘eb É,„Mcv Ë0™Dà³9å¶?Hfa9uùL¬ “âÄòXn_œXB&VÃ~ob ™Xžr=±„L¬Ó–™%$³vwfV «ÞæùL,ß0N,!™u¸&³™Xý>®É,ÈÞÌO5Ì¢4³I,dÞÌ#c «ÝÖØL,¤DL$ŸËYÛmï9ÏgÁg=7ÈÄ:osó@2«·]Ò@&V¿­ÖÉ,÷Ig’€‰s¸Á “„L¬ó6O$³à˜zÃ@&Öýl0ÌÚÛm¶ÈÄ:îï'‰Õ],!³„dܸóµù ¬¶ ‰%$³NÚs+‰µ»©5³„L¬1ÖKÈ_‹…Ó™ÈÄj·ã@&Öq›é2±Ü½?±„$Œ˜ÓÒÀÄYo3å@2‹"™ÈĺÉ%^Hf•í662±úmHfU·‹fV «Þö™Xû¼ò0qŽÛXÈÄ:o'ÊdÖF3Nb2±Ü?±„L,º72KÈO`·}Ë@&V¿Íôɬ¶Üvôù«±Êmß2ŸÀri’‰%ä'°<sb ù|ÔX'’€‰Sn§‘L¬ã6' dbYïI2çh·“Á@&Öy;$³(‹—YL¬r[=2±èÔË,!k»¤’Yý&{!‰Õå"¼Xù ¬r›ß2±Úm~ÈÄ:çù-€Ìaz\&’Yˆ3šH&Îvëù|–Gød’€‰Soû²L¬~³g$³ ®17Hfíëm–ÈĪ÷ŸXB2‹f™HfÍ='‰HfÙÞcž¿2±Ú¼7àâ‘N;ð ɬu¿K)’YeŸm×’YðM$g›wº’Y[÷2±Îù¹_Hfµežá/db•y剄KÈÄÚæ}ç…dÖî!÷™ÈÄ:çÞ…dÖ±Ìó÷…L¬uÞ»]ÈÄ:ïï:‰Õo²Ùɬó˜ìºÈ×<ÌÇÕ]&’ÄZ—:ü É,„Lw>‰uÎ{ô É,Ûû.ÓÛÈÄò‰%ä'°ÎÛ¨Hf!îf¾V «½ÝHííÎi˼_ÈÄêó{ spVFþ@2 |óÛ dbÝÎ’’Y}¹¿Ã@~ËŒ'–‰5?…~ÿîßÛü2Ä*Š4¹X™Xåöæ2±êl‘»ÌÂyq¤É,ªDeV ëœOa2±úmHfY¯žÖç ™X«7±„db›fV ™e}£Ì-’X½Ý¦g?ŸÀj³}âB&Ö~›Õ’Yë:Û'.$³ª+­fV k}»‘Öûìáù™$³¶uög]HfµÛ^ìB2ËvKóŒ<‰uÞV¯$¢æþ<̪ý¶ Hfµå6Î2±¶ù™0qŸux*jf’Y}¹­ŒI¬ã̂ÿwêõɬºÎ ɬ›Wu™Ó꼋`âì³çèB2k/·½Ý@2ëîý»Ì:çæÎ[[¨û0¯)É,ÄÆM$™ÓúmD $³öûnz KR„‰%$³lvO;ɬ»GâB Ò[ezšɬrÞúú@2«–Û¨ÈÄÚo¿q Ëö§™ôB&VO‡’YПÊT $³`:&V ™…b%s‹$NŸÓút!ëœw’Yå˜{Î…d–õ¹ùR2çlsDÉ…dˆ2+Ä‚ÌÏd‘»‰ÕæYæB2‹’¨™Èg³¥9í/$± :í¤.dbÕyE¼ÌÚö¹×_ÈÄ:nw?Ì:Úì[º‰uÎ;þ É,F¾gV kŸ×” I¬¶”yÌ^HfÍC±ÝÇáqxý–DHbAâcòv]HbõûLy!ë3ŠZýÚƒmâÃ2¸l/ÿô²¼üöÏÔ½»D|3ümVZˆ<ûKiá d(-L´J ’jNJ Å4.Y ɘ%é‰c¸„$uéWD‡Kâ‚*ŠIc½—·²ÙŒÉï—˜†rš“àÆª ¡³pFù£¡Û±ÝuP\c.ouD9ŸK!d•ÊMVá ^B#£RUh‘HvöZhÊM’&Ê I²'*XsI£Ð·<ɧó…•"«¡Á²6© Hhá@. oOB Ö­sVZè[ˆ1„Ô‚ W…ΨÏ: ‡«.…}—JÅP§i!Ò2l(g2$n¶ªìþ!ƒý"RÊ)¡²" ÈØ©k ‘…. ס±=Oöß!²ÐUÂåÒö9•0äŽ3ŠV…BÐ’KCEHB!3Ô”~;$ ÄÊA ðýŸÒ8r‰TüâO ‰¨ÉN žiFD '2µgq¥¡13ô—ÎC]~h4J¾tœ%t…Ï3‹*í),[Ôê …@¦‚é–ìñU‹J ȪáäXñ*ÒWÀK^f±,tMJ%„ ÖÕ÷¤¯°{BY’WØ%?ÔÐÿ8°C]'#JH\Áõ)Ö—¤®€¦–Õ›©ÊTRW@… „ºÂN›_RWðèW %H]a· XMI]åÖ\Ï aÁ̶u…} ý‚PWÀ?¦zV­¯Q/Jê ž«í× yDK/Yí­Q$ôÚ±†öœôZ¨GÌQTë …ÖF±* , ³çà•)°€ºË$s×BF~(, È³¸Ca¡E½Ž¡°€J.H`ùð“ÀB³7FÑ€X@½t$°€D‚6Õ³BšÓ¦C`ao [×ê9óXØZô¶X€!Oe±¤±€,Èeªg…½ Ó×¥±€„—"€ žNó’$ÑÓ&‘Jìa©4 ø ¥7Cba+ ‰l Ê$™©TϤ±ME)dJcòþ*qE‰ÖL}I P÷_³ÄÔH¨Ø ØÌð½„Ä’S)r ……Š×>IŽ¢Go(,@Ê“æ‚+,àÑK¨A .bÂËHa›/ŽÌPX@*mDTk‹ÄùPX¨ÈÄ}I ž;6ɵ¢ÆÇj,ÔmSæ|,`»HeÆX¨‘>7ê/HòÂÔW¨%RéC_ò(ˤ¯P%?6äêý<ä¬ÌÂ!¯PåK†¼F•OB^¡ôÐU y…‚šG¹ ÕŽLé:É+@j•©+”(Õê (È9>Ô0HoAê —ÆJC –â!^\ö!^,}c(ÊJã€Ș‡¦šV^6pÏò ;Ž˜*F%µeä•o“"3¾ÔÝ ÑfÌ‚ì¢Òu¶É@*ÎR~†0KÏò ¬5H=)HãàÂë†Èt)u(SSˆr-™¦TuYwu€P³F9Bi)Hñº,šÏCrÂ|O!œ ¯¢D$®½B/úåÒV0@úC£ZÆk.håzÇ÷­ï•†ª¤¾ž‘"šáÐ`Zw芣¬!³¯)®=æ—KYÁ_˜+eC$ÍÊ »û¥³ º×=d~ª”\¦%1uÛ°wE°‚í-ë*ìÐN`μt\†¤«à…Y @º ®wͪÔUØÝ•Ÿä/•˜ÐUØ!¸g!ú» jHXaÇÉñÌå¬\7FE¦\Xa_/ +ì8îYXa÷ÌYXÁ…dzVàwIñ–ëYíØ*%ÿ!;®‚×\”<u\Î\ªýÔUpÅs ?HWÁ¥f˜é,]…ÝŠëËÐUØ—]¹Ú’U0 ‚hf½´gBVÁh¡¦/Y…Ýëàu™n½ã,©ÂYÔUØi$Áß  |H+¸¦<³À%­°cÃÊ÷+i/æHí ­·†¬!Š@i…jL8§¶‚ ÖPBÚ ;jD׬­°/k”Ò’¶ÂŽSªŠZP\Á5lTø‚â .ËÏ¡Jq¯Y³¸‚‹Úø K[ÁÃÚ ½SA|H+ô^£v•¤\Ù”J+ô3Šx…´B?7îü‡´B·'͇Ò C÷fH+tµ#]Fà ]O8¦*(}z%!­Ðl›¤FaÉ!­Ð¥ý7”PÜa›*YR“CYJ±u*Ó7É eËêTÉ Š³TMe…«>E(+àt7•¬p-G+ô²G- +àÈN Ðv,“°Jl°©VÀa³ª4 +À ÒUV@p*•SBX1­ÛTÍÊcayƒRV8¡ŽäH(+œ])$¬ýê!HW <çT¢=jÓ„®Âi›ÇEuÎ3ʇ…®Îá%ײB©ñ:Õ²:Ãú2tpœß§ZVˆ¿æÄº '|¬ª\E]DrSKCº pV®’®*frº ]·zP°Aº ®“ìo3tà•¢VJAÝ2‚ëüêݯeÊ\ìÿ¯/¿üûw+„ã*¬Åeø¿: |LȪ*5¡’ðˆ”°NR#á A1 Ú4©ðˆ¬2|Há5’ö5éÒìuÿx¨kdÊ>"E^B¦À>c-Qþë#²†c‹Ù¯OH‹=ƒ2QŸ­«6‹òP‘ð¹* õ ©*3y£H‘ƒLù OH‘¾½Ò<ˆ ñìÍ'®¾[f\>"1Ê”Kù€@’ŽéÊ‘|DÖx²Â= §JFæã#²„î<óŸcÓ*ª|Æ'V\•ÀñlÆ'¤Ir\iŠO@ìé•£ø„l±2Eñ¨!”¯ÌÃ'¤Äeâá ;gä>!ëUQȳ ŸE*·‘%øˆTA”ý÷€ÀwB_«gõ=|^i·‰Œ¾'×r€‰zÀ!Shdà="£¦3ëž]‚È…{Dôn#î iZÝ"î Ù$¬YpHT4SÜRC†^pOˆÍ¹tŠ*ÿí‰bLl{Ö#j^yZÛ z¯‘Óö„,á®QFÛ##¥•©öˆ ï0óÔž3©•ö„§ž„òÊ‘P©fZÙ0”Á•Sö„4ûŠ<°G$|:Ê{B6’#»ë ©!W¯Ü®G„¥DPÐËæŸ|ò+# I+«äQIò‘”ñ)PGmed< åŒRÊÇx@VÕîÙH*ÄÀ\ŒOK°AäX< gøÞ"wâAð+(sâi2ÖFâħÀ¦ÚÜ#kâÁºH·²!«°ò>Eލ6²¦õfDì? EÕhF¼þ§ʲŒ»ìß?Ò‡üñŠÕÿi{xć¬÷'HéÚõo˜poùÕŸ ¾pTI;9ª²Ö¨É)ýAíúT¨:ýœqP—˜ôw Cä)Ùü„ì°-1æ'¤…=y¸3>E6Õ¯“JñPkÔïäDü„”õéBxBËðq µ>!8pÐ=@IÔO‘ñA²K»îè€àÀîj¢ÀQd•¦úç°G?I>!mÕ\’žOȦCÐ0? u•›MÒŒOHYe’’0ã²FT Q>Q"ƒ<ß²3¡ï 9Âa'Á'd:‡’|B B7ðØîâ|OH=£Î0¥òžÙ2©’÷ÉG[@TÊXæÅ$≇YðSæá]Qû4ú= 0Eë[4ú= (_-£4Ü€¦ðÜp{B6ÅI™í¨QºP‚kOHQPU©=!¶ ]”AàcOÈR‡u¬Òð b]_y=ÍzBÎ"“òÈø9´q‘«'dŸ—0ÕÒ” $Å©`‹ðz I=!5"½%õ„¬]º’‡zB–…)‰ô€ØæO3‰=!§ y ³Ër #e€ž딬+GUžç>”äyB6Õ æ’¤®Š¯v{ÈýcQ­ïryB•ÊŒJ´< [8åB å AÀ8Ãíe8x@%˄ʲ³ÂR¨ˆ<myã9 "@Âu’yBJ‹Hz×ÌxÖ¨Ø'ÁŒ'd Sˆä2zQebOÈ9ïjòïxð£ Ãr…Àëà÷€ÔÈãðÀR™(©;ð0kåc¨| `›Ic“ÒòŸCE­"Ýþ Ù‹‡J¶B¶¨[§Tû'¤Fˆ¾íŸ5~„ÒìŸe‰˜g¦©? ë©Ä‘~þ„ØAžQ~Jó~BlYÚüëéÛOHQõùH¸~@–®”®H·~B•¯zb•ÆOÄ3aªõ§Hë‘|0R¨8)^>^ùÓŸëu¤bòô§È©‚OÊR¾}„ÓÚ÷œ²°¢”\g‚ò›÷÷ˆoZÚËŠM<´Ý¼rUùákJ4žcXÖÉíËÆ°¸(tþgSñå¿Ñ^üõå@ƒÇ×|/×óׄü%mb³aÝ7}Y¾¼¼üyÚhÒå~óíËß~x÷7¿\×ã†øj]ãÃïÞ­ä¼À:¿yÐÙ›e^>|ûîׯÿï|ùÃ÷?¼ÿ¢´×o¿ÿîËûúðïl2ï›MùþÓ»ÿáÎêüáÿùÏú¢uš®ðçþÊïþ݇wÿÈ4óÇÛ·.‰äšÅ^wº{sw›ݺnÿ¿¾G={ÛÓ½~m ÙrÙ÷×ß¼ÿ!Ö'¶ƒ¯_}Ç?ôÍþýñÇïñ AíFûÈH)Ç뿾ǟ*ÒÃ_¿ð{þv±ýØ+ì¸ßÚ |üêÖ2üËÖ_ÿøÿÞv–Þ_GÞXyýCºÜWÿsj÷‡ß¦¯üøæmá ®ùÀ¹Ú<¨ò½ÿ¶Þe-¯ÿòñû?~ùú»oþøóï¾þ·ß~õǯ~ÿ÷ö»¾úöë/_íùûSÿòýÏñ<Àýõú—¯ñ³?|õ?­íŸýœ/<~¯ÿدÔöúÿüê¿ýâg¾ùök]ÀÜß|÷›¯u Kyýí7_ýþ»ïüæÇhâ|ýòõO_õÃ_¾ÿÙÏ/ðO¿ùö¿ùòuù¹í9¾|ÿåûÑt{øa¿ùîëùË®–ÿ7¿qÑoä=ýæû¿(ãóþúñš>OÏ ÝÉfSïý|ýû¯¿ûí—¯?ûã÷ÿòÃ7¿ÿÃ6.u¼Ú/úY<çŸý<þ¹ØUŽV×ÿ³üwƒÿþ7ûü³ï¢=Wõ¶øïŸ©Þö¬© [Ï çÜêSÅ—m¦ŠOY±…šf?/ôâ‘ð‰Hbù®½õÄHfmÍCx+ÌBÆ÷1±I,æÅdÖ@2ëö»Ó“H¬Ÿ0i"ÈÎ/.&a —O;‹ Ä*ØY¯–ëŸõúçæÿÄ"öÚ.t¿º@hm¬ØÜÚvúÛT$dÕC/ñ–—ìî™XHk(=³„L¬Ž®L"9Å+º—D dbÁÓ·Ì2±ÎÃÿÄ’Yñ«/V~áëëûbušíü¼ó¯o±jØÌfo°ÃⵞøÔò§5þÖv|ÂßNoWûT¦¿•ñ½Ã>Õåáª;~ªŸò—ÿ”è‰px£'¢în±-¿ÿÌÌ/>!¿ŒyøÅ¦ß÷¨'»Ôõ•ó°ßÙx&È'k¶ß(~Æñ+½þGŸ ßøç´:ÿ»?Âg&„)®6°>¡ü—ò˺Q­àR~ñP~fEPøeEòtËÂ/+¢-)¿xLþ2R l¦ôày†IúemU‚!ý²¶–u_VÄiIF…º/+Š›R²º/Ì­/Qøe…”Æ%üâÖÙE© ¶ÖCøeÝû©p8 ¿¬ª”Ý…_Bðãã~ñ(ÒE2/ž]¸va©ÎPøe=”íº/+Òx Pöe=kD£QöÅU7–,û²bÇÖsO.´·Û#HŸ²/+NX´žIöeí¥BÙ·uñwSöÅ [›ù¶Â?Ç·$Ù—.¿ªàzOÊ.°ž+Zœ²/õç…PöÅE+JV~)ð0¶ÞÏ·n5’6 …_e ÷£¬jÏÚ/.-±ËŽÜ‚j£D µ_Ê 7¤Lá+›:#ÆNâ/Å~ù,þ‚‘££¾BCüÅLèYøKA`„,áq»ÍÕ”)¥®4„üKA53$ÿbÈÆ#¹ä_X¤s²¥Z•X#ý¿0Ê¿xÓtŽHþ¥`úØdlÞØRQ‚qÈ¿¤b+*•ò/†l!,CùCâ5Hþ¥ J£+ZÓÓ ý‰ÊOùCªÜ ’)H¬æð•þKAõ¡ÊÊwQ6¡ÿâo˜Ó€`ìÅœŸ‘ŒG_±ÃI¦ ‹y“I¶‰ÎTæ‘5×È$øB ë“#D’0ÅÓ½ýF ˜‚”bfÒK¦@FŠV"jÀx´]Wìbç°²3Ó.û®ç¢0*IÀ—bð %` òqÚ)ãÆaÚJ)S࣡F0vS›d0$c7®i4$`|Ø+Ê‹0ö”ÿ0+–\ÆRfõÌTÌy‚áêNR†ôQfEŽ)•1$ãᨠţŒ!EÁ–’€Y‘ªt ˜© k–€ñÞAÓ¡$`VOóTüØÎ¦0ÚiTåÈõ~Ç04JÀxH0 qÒ€ñÎJk˜4` áG ÀødÌo0ŒoEvfËú/î­àw(ÿ⣄?Zò/«§ÏðV\þÅ9´CþeÅF¬È–ëÖ%~´ÂKÿÅÝ+=ë¿xðö¡¯“Mí{ ®ÿâÃ¥¤ÿ²ž‘@ú/ŽHX†ú/¡þ‹#Te‘þ‹_™‘OÔñ» A˜®¦Î@(³Â[GK½`üwN0þ,Ö,³"™µ+,¬ò6EIf…Œ…b¾(ãéR¡Œ¿*ÆçIÆ#ÒÙ­¥ã/XñH®ã»-ê©HÆ;ß•`VÏëe %`CõÅ'uj7PöÅʪHöeõÁ@䌓YcO ÙG¶,ûâéK'¥W(ûâ¥(ûâkŽ\LŒHw„’.”}ñ…Š ª¾8@-©¾¢ía¨¾8"U_|ܓꋫ€Î–Žª¾8²fÕÙ šˆT_¡‰T_|ùÇU_…ª/¾ b¿’ê‹#ìWR}ñu]ª¾8B9 ©¾øæ)«¾8 U_|¿ ½ʾ8BŽd_|—á}K²/Üv8@Õ?›“á¢/þy• Ì©v´w ÑGÄ¡è‹ïx¨à"Ñ—kº/¾O‡º/ŽHŒ…º/¾»bÏ’î‹#ì}Ò}ñ-™ogB÷Åzþ$ü⥔$üâ[;ÃJøÅÆ‘Jøe…GùÈÂ/ŽBÝäZ ÝGª®¦”éÂ/ŽP§DÂ/ް“JøÅϦœÙ$üâUg$üâLl¡î Cš$ó‚?9°H¦³%¸ÒÙ6»¸#’˜¡îËŠZ —H÷Å‘-ë¾ñ®úâáV-˾8BEɾ¬LáT'ÙG8eJöÅ ÁPöÅI½IöÅN’}‰x°CöÅzØ%ûâ§Lɾ¸9€Óªd_¡Àe_ÂbðqȾDŽêÇ!ûâÞ’}qdɲ/+ö*{–}q„ÃAˆmòÙ¯oyÇteOþ¨YtƺCC ëúO«šZB»†ÏÂÎ]ˆžWÝ”=IÏ´ ªvK½Àü¸]/Æ>+-ÞeÔø~ ÔX¨"¦>P0SRGýÄ%^'ûRäÎŒîf@,wêŽÖÑ–»¬Ÿ¬J–3*”YKêúq œ;4< ¤i¸Äp„;PŽNƒ¬ ™Ãc­FǪôŽ<ž ‘•†|Á*ÂG¡i¡ 3‘?\S‡!š¯5»°†ªg ;d*ÿ-&)?vjúãDV<¡qM“!Œ]ŠùЀ-¦-ΙZ¢œ¶4¯7[iî-HƒäFJósÞ(§Íá+*;æyC$kAAªdÉ"aFs¾r­)2¥ZA¸îØÞ§k~ÖÚäñ\e½–/v-õZà i—|"/»¥aM§ö‚¸u²/Àeì¤NÿnS¥0 ÝòP.צöM¦Ù Biã-ÂÃj™ª&{E)í”9@& C†Ö®[=  hF ›„ÐxâfáCˆX Å¡¸Ì•Mm{Xwh¨)ˆ6d8m9á|€2÷¸ùyÒ.…é?—Ù¨¸/Mb4-"̰=¹ëhe$©Û¦ÜÒ½)­oeS5¤ÇeÜrבìh4€r„ÙŒF2÷uÑÌ'Cš[Õ´ê¶¶‚‘NCÌq‘“}™ì Yd–Y¯ s˜EZþ 8”Ø,ë`A©Ò6Ý~èþU9š-­²P„9ã/—™Ò>ò´cä"ó'ËÖé^. Èj·ÚÃŽI›©{ ÏlWudUöjcCË!s¶ì³Ž¬YÆÛ}Ìë”×™Ýìí`²;Â."‹rFhuÎߢe:_˜Öëܸ¸ýþhË“ Üšåd'÷ßY³-ÝŸN6·;гIÞ)G­öñdÕ÷´~zÎdù¿œáðwO“¸<Þa謒—Á;UvDxO”t>w/Þ}¥^OFêâòyøÀ CK~w»*Àž¾q]¹ð‡7U{¸Wè±aQ"yŸ^ÿ´\Ë“cH¨xËÛãs % äò JÕÜiä³ߊüJ>Jý€¾'C´û÷TAð%ç¹° ÑÆ ¼\v½ÈO—ÌWŠPD(l‹Ü‡;ÍW)yËèqó[¯Ù+gH—'Bž;_g9‘È»çEå&Üh@øXå#ô턤AèG )‚Ã×èûötù#ý¥Ñ¿"Ÿ¥ïØXžƒnÍ‚­2ò|ìöøØåõ>T²•ÛoádÅi€nšpÄâ´Â—%_íF¿—;×CVx¹|Žs*ÉGÇ´CE]†çx;ÏH’wŠ<ô…ÊíB•ü’|Ôû‘»…Bëðu£¤‡j¦Èá¦5g@ÙD¨íl¸Õ‘k/·º<ïûq ï<&íUêD<§!xãFBSÇH{H€£F€HD x»Qpìk”¡QÔ²{™ ‘ H• +F/àP¬;E8œËÑ Š‚8WöF¤ÖeþŠˆ¦@(c;"ââ\{n(*ã\#%7Rl§Ú*ÒÀSüǹì‘Í©d?JÞNa$øËTi¨à/낟"VpŽW˜ ƒZðE£(î§ö:ÅÆ j†……"~ŠsT‹›½¯‘¨©8b1ªE¡:ȃcÀ‚y°43 /~ö‘AA¨ƒ£L]ÔPã†a.[ÔN¹‚#üÈ×Ô—Ÿ„”²jİ®¢8'HIJ!…BmÔ„¼Â¥\'DJ°QåëØ’b®ÜþÀ'¥°,?O3šF¡[~ŒìŒ k:¨Õè5 ã9ÃïFab 5ŠæòH2_A^†Áf¾.n9­àÌDB…¬Ù\¹©«)¬­x|m}óx>OFÇùì$U_ÐyÜ UP#ÈéV^G·ŽéBXó2#žÏc9äÏ ìþYAg$ŽGÜ Fô—XˆÀm|xì¡0ŠÇVØ£Æcíš\"ÌqR#² ¡WrŒ>‹ˆÊ½6NÆx÷·ï¦2{öü¨ž‚-ñ¢¨M`ZæL·Ñ|©PËC+ÄjÙC8~-v«œñâ‰ì›‚KÆSÛwRǃÅf›?Eþ€LñšßšzÞàráã-½†ü´:‚O%uŸ.)©hËá"Ñ–Ã+9¢-q¶[r×]a÷å¼á–ýXTž-â-!8—ã- Ê ðÂ1\Š`σ ¢0Š¥Ô€Ä9# -¤Á§q½"f¯§¡o_ލMNPò’ú´æij¥9Göݘ† zDž©PÝe™f3lè4mr¾ƒ•4‰5%VÚ¹Ò´ eô9ܳαåÙ·Fͧ1CW¤Ö·4‡cóÌØÏ˜æ‡Qq,Ø•×i¹€¡–¯%–X–·iÙ¯¥… &@-CZ»!!cFš‚ˆ8Ò¡øM•,}¨‰ªêv:B¸’_ÒéÏU©ó:a"Öo/¡x:<ꠊ̦u:Ìz":ð¢ŽÍt&FØ,¥<5£%Òó`½De£qøF`í|@GØû|ˆG[â ô]šd XÊ•2¸b Í2) ô ƒÃìà]™—‘ibÕíÂ|1Ö±°pP<A–8{ CIBdLIß’Á%]XF™«qm®û »*Ê ‘í¿ªË`Dó~y ]¿j‹²~23¡0Y¢ðD{)c,×BdÐòòB/Éæ…‘OcoØÅFΰ¡J‘ªøÑ¼†7^& r—9€ÂJ·(~Sf<ˆÌ†˜]S;Ú¶ s LïTÅ“áR°]ʬˆÉ L@d‹ìj*êÔ…ùzrÛdßD?/9ÊÒˆn•™¿#CêÚ_ÃØº„hØc½0­¸²Ù.*6̺ËVFY~1±®9ÊÒ‘#GYúÐÝr”eYT§lØ¡èK²UCÇDQ 4g{˜üdñ"s¶¬â˜6))ËùBJ˜Ö]±ŠÆv™ßáTa§—…€ÊãɈ¿Ø6„†ô0ô/­Em>9û—Ãj‚|ÙáTrd¿ zI‘A® ôgÈ{ábþ«ÃÃDÎyA0ŸÒ¾ž rÁЙ…QäoÒs´eA —mòÛQü¥|;pJI×Aþ âÈG„RfÛäGBç|øš$“œüQ@N"rY-C×!ÜZ@ŽÉõ…Ê4kvŽàUä>ƒØ2CiÂŤ)ÂrQK ž~:¤mÔÉ—„Žc¹û°Ð1p!<‚¾ôM^C©8'Ï"n¢NÞÇex¤ÃC q„sé@x5»š*!(_(6+ 政ÔUÞ¤‹ÑÔTe T¸]¡œ)Ÿ/=³KT•Î[ üŽü»Xòõù€0Ž+üľ-à·äK^ IE0ÝÍè¢ 4}I^k”Ö['Ï6mò~/\ÉCŽ$œ%;ÑÐí./»D±“#Þ %å°KÏd£Ç<ú@AN×HbÛŠ ÂH… ‹•)ºÈ6E a8„‚p¼Dv^ ªP¨èc4WEÀލªÀþ•\x¤ä KGè›ø ßõ¾\øÜ¥(ÒÔRˆE Žï&q]Bÿ p² m—JÂ++n5®Ö)´ˆBdþâ5ý†#DÛV EÑ(ÒÈTmÏÆÐØPrÐ¥#ª›§ÀŸERõ#6ÈF )~È™c. Q†ìCr„QG UÂè¾gZ"—~„<á<aQ@Ôº"§€0Æ(¢«–3Â# û|ÞOi9˜1rQ”–‚½€p†Œ€0 [Ž£°üÇ+ªlõU#ò ã[": §Ãˆ`󲜌°S”†M(n9sÐ¥Û1>©`: sÀÝÈÝAy@85Gà^BÛ@‘šŠþ«(>ÐÞb/$â ìS,bFz´tL ©ÇhJ…õ¶}45•Ús¤ç˜Ë ùÕçˆ`à躞Ç]Ce÷’rE 0(œÞJÔÝË$!™ÄÂ{™$$“Xy/“„$’Jï%R ™DÁ¼L2‘ÜE8‘ˆL$¯Ð7‘ˆL$OZœHD&’/0‰Èg“(›IB&’϶‰ÈDrÙ‰D$“X80“„L$¦Qf‘LbñÀL’I¬˜IB&’gcL$"‰Ä"ƒ‰#`¢¸¡vâÉ$V"Ì$!i½½¹@&’|&‘‰Ä”¼L"’IåþÛÊ'¿ª½™#äóIL Ì$"™Ä‡™$äóIž¨2‘ˆ|6‰’Ù$d"•[‡ d"·áH&yeÅÌ!0Qêmœ2‘\y"ùl 0f’DRÆ,P$$“(fŸIB&Ò1  ä¯Cb9ÇL2‘è®Ê$"‰YÖ™D$“XÑ1“„L¤í62‘\Âz"É$–~œt£–ûdAWÑÄqàs)å¶Ð’IÔÔÎ$!ÉëHN$"ŸOb v&™H^nr"™H¹7‘ˆL$œHD2‰’à™$d"ÕÛüÈDr;ÏD"’IÔ¼É$!©ßG¯LbÐC& É$Êg’DRÁÌD d"µÛŠÈD‚Áwâ8ð™ê¢gŽÏ&±üf& ™HçmÖ $“X€3“„L¤~[yÉ$¯Á™9&Š×àœ8D&Òy›É$VáÌ$!龓$“X‡3“„L¤ãþR„L$—«ŸHD2‰%=3IÈ瓼ðçD"’I¬ü™IB&’üšHD&’ íO$"ˈf’‰Ôn›½@&Òq›Á™Hg=‘ˆ$ë–&Ž€‰²Þ¦Á@2‰2IÈDºÉ'$“X5“„L¤~›áÉ$–BÍ$!©ÞöL¤}^ÃL”ã6æ™HçíÀH&±B& ™H7‘ˆL$ ;d‘Ï'·ÍG ©ßfð@2‰Å2IÈ_‰Tn›@>ŸäV͉DäóInœHD>›äå%2‡ÀD)·ƒC é¸M:L$T¡˜8d ÚfމtÞŽŽdËÞf’‰Tn‹a ©fµÇo/d"m·óN ™Ôo±I$ÕÇM¤@>ŸTnÓW ©Ý¦¯@&Ò9O_2…Åv3GH&yiµÌ!0Q¶[w ä³I^•7sL”zÛV2‘úÍ„H&±vo& É$Ö4É$!Éë4N$"™Ä®L’I¬œIB2‰õQ2IÈDjó"/à¢DÁà‹3Lb¡•L’I,,œIB2Éë±d‰²ÍûÓd‹¶d’‰tÎO{ ™ÄÒ.™$d"•yRÈDrgñD"2‘¶yÃ8L¢#?“„L¤sÞž $“è+Ï$!iw^™Hçýõ ™Hý¦€H&¹+sdŠ×FÎÅ3P'‘DRqäD $“Xp'“„L¤sÞT$“XC9“„L$Ë›HD>ŸtÞÆn ™ÄzÌ™$d"µ·§½Ý(¬Èœ9B&RŸ_­€LaA¡Ì’I,íœIB&Òí¨7Lbm¢Lòù$jœHD&Òüó{û¼?·$DR¡èD d"•ÛÛ d"ÕÙ6Lb­èL’ILLÎ$!éœOJ™Hý6û’I¬*IB&Õ½3‰H&±`T& É$¨Î$!‰¤²R‰Èç“Úl.ÈDÚo“V ™Ä2V™$$“Xî:“„L¤õíÆYßî”r{”dÓL3IH&µÛVj ™Ä\™$d"·õ(DR®D $“(”IB2‰ºÉ™$d"mó£0Q\tâÉ$–ÙÎ$!ŸMb1îL’IÌáÈ$!‰¤Jd‰H&±Y& ™HÇm $“X!<“„dÒ=(a ©Üf¹öIPB” ŸH÷(¨žIB2É˨eLa-ñÌ2‘ÚìH&±žx& É$¦£g’‰To%DRIñD $“X$.“„d g’Lºûš2‘¨@˜ID>›Äå™$$“X£<“„$Òq÷ì$“X§<“„d+åe’Lº¹#È/–—)&Ê>ûa’I,ŠžIB2éî?H&s[çÜ*£'F ™äÕÑ3‡@¦°`æɤý¾d"Qƒ/“ˆd+f’Lº›ú’Hª˜Hd‹f’Lbù÷L2‘öÛ¯ ä"Eø‹4‰TçÓÛ@2‰%à3IH&±Ìa& É$ŠÏ$!‰¤bˆ‰ÈD:ç%~ ™Äzò™$$“¼¢|æÈV”Ï!™ÄúŒ™$$‘Tw>‘™HmžG’I¬NŸIB>—¤‚‰H"©"d"2‘ê¼Â $“¶}îá™HÇíÆÉ$VŽÌ$!éœ7èÉ$VÌ$!iŸŠ$R[Ê<4’Iók·ñ±czÿ$’JZ&R ‰ÔïÓà@.Òg”dú3•%*4v·Ð×+/~üe¨Ç­Z“âͲ€ÀÙ£S謪¹»¤J‡„À3¯‚ Œ?΢ Ûò 0ˆÕîSÁ¦sÝ"E_ê HßzÉúg”¿4 ¤téD4iÉ%) U>¾ä&°µM W=•!ZÜV&a‹­D…©¿8ó<2 7%y€ÑØBh%t6Ψ •ÚC«£•(¼z°~“#ùdd²Ô}è@döBéHuóV¨€ØÑsÒ@:D™4J»¨Œý1éQ>ü¿,¢$¨ìÒ ðô¤ †‚ 9P&Ý•£Hìw ±Oª*@\ÆJ¹ g”Ñ’€2ìÙiB@à,QN*Î-d6B@àŒ´! OÜ9  оdi¤Â3Ï?P4F:Rè%DjBAÀ«Ñð2RðŠ5ü–º5@m)ôj¡ ÐC-y(ôX ½)…f( É^bR@L?[’€óYŽ-pÇ’<’‚~e%BA ¯G4.í»’‚€²“ˆ€‹ÎS@"𤲮[ˆÀÍû 3´¦†ˆ€‹ ±®’TàÁ*Èï”HU>²òÂR86Ä*ÇÐ> d±ž“Ðr_×I kß7åKE`×C"{Q÷"Hç]&e.$3 >DÚÅ œ€Kk[H¦…в˜)\* kÇ$7æùTTŠÀÖ¥D?T°X¯YÙ 2û$#€|î}’zÓCFùT” LîjJ:È8ïB¨ªªí/IFª¬Å3TßÎH4Êpå½Äãö&©³P€0.ð¤"e *}†Š@Ý"ÍÁ!!ÌTàDí¤Qç@«ÓT AµF¹„ßŠŠ 5¾4Š.lQQ! 3 …ˆQ¼áØâ[QßáªÃ5 én2‡Jþ^•$®j‡*«Œ‚‡öWÑŠ¡1 [„øè¨}qQ×"ÊcQPm”Ð`÷O¨6ÁÁ"@¶IDÇSˆÔãŒ:HR¨‡ªì ¬l*@8‘„ŒR¤"€rÔ´:„%BEà*™*@TÝI*@8îBEHŸŠ«x¿›ê¯Q ©Ùré&GØV¨ 9å¡"0ŽCE…?T‹F*@ÔUÔ\»É‹ ;/# j\2@XD+d´Y¾dðnBIÀU_’€: Ô3j…6 áL%!Q%tð—B@¸Ô…Ê‚„Ìxª±$!:3$$ ñß:xÛ¡#éQ&éÔS2?¿z÷kY9! P=Läx©.BG0»F üÆ£™ôÉ*,~Ð_ÓÁ——ßÃH»¼àúÏo¾}ùÛïþæ—«í°ã³©ûåÃïÞ­ä¼`]mùÜ~чoßýúõßÿðþ Oæ(õõÛï¿ûÅúþŸ>üÃ;{º}³¦>ü§wþÃkqÖß}x÷4?ÞÂp­KÛi?߆«ƒÛŸlî= Àà·ñ_~üúýò'BØ_÷ÿ¶±¶ô×MÿþøñOï¡ÆbÛÍן㎠LY^ÿí½½êžüjWÁ"¼Çëoò¿úŽèÆùêãßçÛÿ_„¥Îuendstream endobj 192 0 obj << /Filter /FlateDecode /Length 9264 >> stream xœµ}]IrÝ;ÿ‚ýp±/ê¶w®+¿3 Œ 0,~Y‹€vüÐ’3”†äˆ¤4+ýzGĉȊ(Ò3"±‹vاOUTeFFFDž{ûoÇ=ÝþŸþ÷û7ÏŽÛÏþñYô¦ÿùþÍí¯Ÿ?ûOÿ;wBîëXéöüÕ3\’n£ÜÇ‘òm¬r?V»=óìa>>ÿ{º ÍpA­÷D÷8nÏ_<ûãÃÿxû˜çýèi<||ÿîñþ!åöðâñ¸­Œt¬‡rÿþþñþa¦ÙçÃÇ×ïÞ>~SJ¾¯Z>¾ã—ûZt—¼t—üŸçÿ“ž¨þ‰V»×Ù²=ÑûvW¿É¸(¾F÷Úç´‹üOß?æAODÿü‡§`½5Wµð›<Æý˜·oJ»Ï^'îgϾ~óô‘ ’ûý0 ufzÕ÷ÿüúŸ[»¯YÇÃÓOL¢VÁ×ÿNo¸ Ýôá½’‡·Ÿ/hášvçþðä¯x¡x}ðcþô¯ÞÂÓ{cõÏ?hŸ{¬¶êœqÖëÃýñ›Zóý8ÚÃß=Î̳ÿÆŽÆÖˆ»z.™PúùJÿþDßFG‘ëû3ò-ùÛÑÈ3^k%}ÿ˜Èì8æƒNÁqÌ妠~ö]{îá·¦@iñ]íÎ3,‰¯ýå?¨›åáI<7•{«+ßžÿ¯gÏÿÃ/†_Á“ò8jô¹÷á§·Îá®.Rxô[Žø;^GJ40ò0ä›ï_É™O¾úó9 O?Êì´ƒ/yÿ¤ÕÊo¼g¥X“Ê'«êunÏ·þÅOÌÓÇ'µ·=äÞä½ ^ˆPÕhm}ü=_Ré’õéjà[Õ_‰Aò~‰H_áŸújO6F¥Å{ÿ‰†•£xx÷!¸Ü 5Û–N;®ðïûÿõC‰´ûwìVìK¿üèüâ5Â^ž‡K}øøô‚Î>> 'eOîð×…‡(ŽKN‡ÌÃm.òIÌÝãÉGŠº‰ïÃÔ|xå~x÷þÍ}ÊYâoôs|êXòtãá¯>;äyÔ=äú«îÉþÊìuÚ=Õ´P:a´~t¥ä~®56^*>fúW”XXÅÄÕ×£˜gaÓuèh‹"ÕŸžÞüìÂÙOøÅ­ôðŸuÏK)]vÊÖz±Pò_¿iS~øù§w¿{xõúãïß¾üåMÍ·ü÷WïŸÞ¼üîáGîwo¿=¾{ü=_‚'üø/?¿üöw?¾xýêÕï~F*ÚSõöÿ‘ž:5z; Áú™FöÅ·¯þéí÷ìŠß=ðí¿{Ô»­!“ýáÙÁ¯ÌÎ2Û‰m›‘öož^¿¥ÇQ¶=f}øþÝ›ŸŸÞ¿|q"¿¼æí·oûÝ~óþôÓÓÿýöwÏ_sL±‹)¤}ÿRGñÈ/^?ýðö݇×ÌØ|øîá_^>½ÿðÝãïèmÙÀ{þìœDÌÛ(G…ãl¾åc-Š ·Òf¹§yËäStƒÛû—·¿»½}Öï9S’ñ åkôŒ·¿§ ï¿?K™h!.ía|Í›g¥šíµ‘ŸžýígX¡t…² °zåeîY†8V¦âÞ–cmijj÷X†xÖìé>ËÇ¢½°ß‹gmij.ïíF±~-+NiÜoY41.-N9ÝÛè·\׽РPZüLJƒœ¢‹"ÿÌç?ËùÏ*ÿœwrñv¢ýt…”)€ŒDÞ)ï2=@jKäCM'ñV¢aàTij(Ú®{žŽeH`ÕACãI‡ý“rkGR$°(«äÿ:–"žU3åX³8–!¥oíXnþÓÇS÷MÚ¼vuZUd óG13Ñlå>úö5ŽÆS~¤+ò#Í+]šè§ã3³¥Ž–'mâ ‚9ÉÁ+-×_{È\n)Ý;Ý$øX§Šª–[ë>+J/‹c7 _7ŽZ7 V(Ì./Í% ÿó›Üê½ÒÃH%Âë&qê¶ÃÓ¢Òcæ7£Dx’WÜÃ6é£g¢:jóô¯TÜ8Þ?Žˆ´u¿|ÿ’àž?ð»ÿæID;î£&ZŸF6ùE·R(Ù·ZʺWñÓR!B¯JrBÖ6´š©r(S6ïMœ2­,Hw¦Ð —"Í;=XMô@u B/̦R+²R¡2˜-¥4ù™ ©½!ÇL÷)÷­üd‰ò9½MeôR ÀbKeÑ#¤$ÍY*”mè×ÚÙT‘áÁU´*:#ô› Sä"dªÌƒvpy‡J{¡ÅH¿¨2”‚‰©‘i`b©Ó/:lÓ3!’ñ3‘‰-õÃ^ª¥!–Z§ÛÉM'Yjt_Œg£J—-U´„ö6ů²º 4úlª¦ÃLQlgSeTC(BS ¡Ì†Ã#ŦÊQïSƦM~òÂAû‚üLQ… er ±Ói@ô"ªNÁ‚í¤ÁËWzrZ^…Þ!0uÊéw…£{Â}(±&àXÜܰxó+ÍÜ’ÉíäXlê Ñ¸ ýŽMä$ ·!Ï"S” 7½NÛxá¸=hp¶A@K¼ß0Ž,ûì*6Vƒ<‹LeÊÛtZy™Ê“&µ& KLMº±"EÞ8OrŸ;ÓÎ@•‹F!\Ý!bS3q"(y–˜:ª]ED 0Å}AVSƒægÊ[̓ÛO÷MùÄ<ôÆ“\‹M š™„‹ÈµØ” k‰%r„!#:iq½1¦jÒMj»à6äZbŠž/˨Or-y«ƒ9Lã׬ȋ(M1ÅÏdIÍ50~ä\CE 9ɈV‡Å[ y$F}‘w‰©¹°î¨ÖáàD“7Õs(#S‹¦lâ"J)sÌd‰©5l8fðö¾¦ÆºEÎ%H^;@!çjâ’4H0NÎUÙ%»†ŽL1žM•cJ6ÇHÊlªðÞ(«5ä]‹—¹T°ÄÔ^2ù(ò…»>ȹØGÑ@lŠþaHob*ç|‡¥Á"ë·V¦¬¦Â™À`Il—5Ÿyø¨r<ø±hk뙄,1Tè72/Yâ4¢'¾y…Äuy"òfÚÄ’l"¸ ›*ìQ¸ˆã?™¢I¥” ³„-z7܇LLÑã,E–˜"ÿÁÃk±¥ztrš;±T½‚  X¢}Š_…Zl‰ö;D ´*–¨¼ã ”.lY:8™~'¶hìå2¹–˜ê4ïÈ‚©¾ìÆ4‰bŠœMo<LÑáòC€ŽÝ#gr-¾/Ïÿ\ȱÄÅdŒ9нÒhZ0Q”vŠ!Ê%04…cï&ÇÀÏýyÃÁ,Ñ3±•–°psá÷ c£Ë…|J¬Ð”phK+äÆŠP´bŠüã]è±Å –+!´M‹¥\7°`Ц¤ÉÃP†Sœ¡À S„ˆ©ZºšÚ.á“Þr+55e¤*y…IyEÈ«`J÷‰\)pRAHžOˆ–ˆœfà‘ɯ0x AŒf¿cü†®íFn%¦h‡Ì?ç‚ˉ)Z=pÆ&}*F2æ¡‘[é4©Ë4r+¹‹¦U¹qh`K˜F.o ]ff‡zF Wä™ f(bHr‘;Gl¶sÄÊ–¥Äh´KÂå;È„›á{‘)œà´d‰©º4“:M±»JÎ\‹ŠBÚò,©‹VA䦒€"»-©œe$<ß’D©ðäÀ£Ç‘`‰7¨dÁ‡ 15ØyeyiB—yVCR%H¥Ãço Ô¦¦’.íA“˜º³äAž5ëYÊÑÂNZìu})Þ‘?^jУ‹%NÍ@áacKœµgC-%ì±’1ˆ% +S^|òRbSäØGf)bªkº!µ€˜¢¡ÆKÍ–`ŠB.ììLñ«˜j)aǧíwÀR[açìb‰’4¸ç¤YKm § ¹ÂR“g$qƒŽ‘ª+~‘o‰)Þ ׂ¥¤ër•K‡†–Ež%–êÒ·\Üí|xè[®Þa©vÄ×Ec-†jEò›¹–XªymýYrq>)<ß´ß%5u`2)÷<`Š3âD¶uB豪 äZbKzM‚ouvÈÒü(…h°U*værРlG°Ý Òþ¢9K9FBÚOc$¯IIÆKya dÁRօȽKXʺ)b‰âeo¤SäPrMÊ–²f…ªCµ”° ÓÎ/Zá"là6-ÁEÇN?ÄRÒ•I ´šÆŒúŒJA,UÊoPŸUN-ä(Yƒ%r)€(ã©j)£ÙD_¥¤Á),X¼”¡@ã}çÀEeÁÔ¡¹Z¡˜S2'®j(Ðê¡Y>úa Tõ 0uh2^¸ýSY6ïBŽŽúŒªÊԑߨ¥CdžæE,Šª† >£”€ìjjê#–(uKTòÂmh¡ˆ¥Âɹ qi¨Ðʪ†kI%HW‘ êd­2¥Bã}<ãɳ`é@¡'ÏÅY+ÿë…RLq²/ÎÀ¸,\ûÉ ¦&2(Yò³nß²þ¸ä.A—÷æhKAŸbÓ¡–2vt‰‹°”KJL†¥„œ”"ù€©‘ìEbŠ+a¹1§NbŠ.n2ßœ¡’ê~œ4TMR%¢Œ6ÁÔhØ#iлâV§šªˆª¥µ¡¦ êYJ¾ºšÊºVÛhj*©‹¶YÕ”ÍL[2UaÒ‘þ‚Ø¢1ÓötÀV0-½ Ø¡g˜÷Úa§k2F©aU;M]¶÷¢v*v2º_æ0#ˆäd3©©¢ƒÞáS„h6FÈR[™XB)!I¯©«­Cr5Ôg ȦN#‹ú¬pNŽ‹*ê3î[IYB3„úŒXêRžÑØk˜å#Ò1(\A£”Ñ4™Üe¨¥†\ª«¥¦Îí$Xª:½Sòn0—3£>ãi)iWMYæ’û 0•5ͪ¿ ¦ZKÆé(ÐZ2ÊÐvV¥L+Ðõй´@#ò‹óœ•´@«û8 "e¥ð*KÜyAtCÁFPyE¿YRÜ~RyAO¿ç¢»ö¥Zê²F¶.à׺» ‚ÌIwÀÊK\ºe¶K r ·“V^ÐÈ3u·1rå}J÷lAà꺯WNlFs{¿ p[Í*kL°4‡.ˆ4£²QJAjvÉJ…RÄ%4‚hÞ†¤§Š4Ä'F‚4—; Óôªr/L)HÁQÒ49~Oj*'|R³½ÊMå #D9’4`ÙŠæ•‚`WÔܳòídª4=Î¥,!MK³\A”#‰0Õ(È•‘¡Ñtº²š‰12nÀ@R^YBâóvà Hí+OÁ‡5û­*·» ˆ>¬…F¥wU7×ZD¤M(W€ kEÃÇ|êæZõ‚¨ª•!CêVO‚hõ„«òùžÖJRƒ €]TË´ÊŠ5ø§–r‚À?µÜ#DÛ¥V ‚(ªe£ ¤®¤Ÿ‹Q-=I@Pž’­–‚>M\Ê#h˜&°Öf‚?Õ ²É -”#PHU}È'²¸¯)ùx#¡"ÆŠÜÿ§SçÈ] •5ª²Ù!ÔÖK²<KÇ4•¬Màûþøì¯ŸAKn¿¡ â½ß©-kÒƒâm{ ¶³§àÁFÐÝý¯ý.\ËcÑØûî¢aI^ÉR‡Ó€†6Wä6ø¬ëlÓÏÇç£ø9Lv6±ç9YËvû‹‹w—cm'<Š‹Û|îàV®wKÖfuç¹e­aKOµ–¬œÅ­€Âµ#ÆJµ–‹Ó+·ŠÊâöÛr+­ð~€7©ålª¸ÞRËÉâµt\³[÷eðùZ?#C‘*+h-ÇÖ¨™Ørs0[n¶§h1ê+˜Ö’ÕÕJÖ²Ó Ö»¨Ö²WmIn­eçÏå4V W1^jYÚºD4:Ë'( €~{V"ÀK×ñð›@iuï.Ø(J+zæe›‰4õ*l8"ÉNj)²tuÛ’£j8±µ‰RS§Û!Úyµ-RÚŽkºmrs£-쓪«Ä^,ÒŒî¶ktsÆ–.ˆê*±íËmŠO ÄÖ f¢. JKy`D*ÍBä¥L{)™Š¼¸¦ÈfDÂ3–ËxD<4¢!)%S÷RKõ¥N“+šÍ<-£ùLºEkŽV|M“8éDC~«‰^a‡³!¤ %_„–«U<‹ -{ÖÎçZ²–mZv‹n¡%û.ª%Zv¢¦Nò:Ír BËqã˜Ðrp Ž\…–| QÁQ¡%77PF¨ÒrÔn©³*-Gë–É«ÔrP"…:ݤ–ÓYŽ©9ÓÖYòÇÄ*è,ç‘­ R夹E¦o:ËÉ:é ³ñíí¬‹ ÷— î«2K>YR(d–¬Š_AgÉ~ =”é,g3ݪé,g‡:RE–ì¶oYò9ªYÎyho"Ë9›¶`Leɪߢµ(T–zævV°…·©,ëVƒÌRº|¸ 2Ëu m¦˜Î’Åàèy˜ÎrñFÂ]u–¼fP®šÐr%Më·Ðrqw WAk¹xEµ¯bKîK¢l3±åÊÖŽ2±%/F´rLl¹¸ˆû¨ØÒö1ÓZòÏ(MkÉÈô¨Ö’¨¨LkÉ&Ü´–§mÕZžgZKF$Fl­%¿¦Ó´–üâ†,5¥Ÿ®ÚZK>‰M®÷$ …™i-W²oZË…“œ³ÍEHƒ$Ú¤–£zKFp¦£rˉ½Ú´–s&;¸R­%#GÐZÊÆ ´–ŒèÑ•j-% ò‡Y‚ä µœ”äA+¦ZKT|©bKz=ÝR±å”O)ÞÎÓ7ApÔjbËÉ Œ«Ø’œ›©Ø’·»Ä–Œ´ ¶dDÎÑLl9i¡/3±%#Ð1™Ø’‘·ØrŽ¢Ç±&¶œC[MlÉŸa‚ÁÄ–Œ@g`bKFpB«ZˉÙ²@acZKFü©®lûzJ-Ñ‹TjÉHñÇÇ”;Ø­J-€zƤ–Œà.ª´dàðgÙEÖ•?î‡Á&µdDÕZNûøÙ–Z2‚c]“Z2Rý½ 8è5­¥ˆz‚Ö’½j-Ñû@kÉ€ÞFµ–”EÙmTkÉncZKF¢Ö’‘ݤj-'‹‹ q€Ø’S¨Ø’ªµd {½… X™¦µœ}‹)TkÉÖ¡j-€r´–Œä µd76­åD ?•&‚t¯F¤©´ò¸+¢i-Aœ0­%#Ð[˜Ö’k,DÓZ2ÒƒÖ’q›Ö’U<ªÖ’Ø2­%#ª7R¹%GU)©Ü’‘á¥C‚¨&Iõ–Œ¨’Iõ–Œ¨rRõ–Œ@ÒjzKApÕ[r–¾¼"J š LÓ[ =–ê-AH4Á%#ªÉTÁå®¶àRTo9›ÉZTpÉÀ—,…Ãó™à’„Z\ "€ê-À›Þ’<°ê-¨^%çÕ[2 —é-Á;™ÞRTn)ÿ¹¥TnɶÉ-gӮ˖[žˆÉ-ÄÌä–A¡ÖTÕ°å–)c›Â5ª¶<U[2Ý©-7ò·òyóã7hðQy¢ç»|…†ŠNÜ×^l¤×ýÝ,`£ ʳ ñ¬.õ­gâYCŽ-<ËÇâæ&m€ŽµÏ*Gü:Ž ,é8–"%Åm`)XR–"%g¢¥È—³ðykÏ2$°øûq"K‘À’ÞÀRijšä?žeH`IÁXŠx žeˆgñǺ£ECKd¥ˆcµƒ…±Žd@à ®…IÏJÇå‹c6Xé2‹ ,Ѻ–"%ud`)âYùú†ùÓ7¬Òð$C¾‚%2°ñ¬&Ÿñ,C¾‚µ¸H,E¾œÕñYsÇ2$°òÅ7Xã²Ê6âYò!bOR pÊeõl$°¤h,E¾œÅ{Yˆ•q¬~Hýæ¿ÉÏ‚àij ¬¿àèDþR,Ú»JÕ–TP¥H`I¿0°ñ,ÊNR C«^bÄFK²«ÀRij P_Tu|IpÈH¾˜“/ùÁF<«IWƳ ¬Â­¹ÀRä+XÒX ,EK>^XŠÖà;° ,éV–"žÅ5FTC«\âüFkq+8°ñ¬!Ÿ/÷,Ck]×µ!žÅm±8ª†xŸ2Äñ2ıø'®ŒV»ì± ,®) À—rR»äžùrŸUGƒ†ּĿxwUCk]vëxËIÀòå9ž¤H`ÍKœÜˆgµ¿zîDëZlijz»D›Ö¸Î!%òÆÀRijøü6Þ˯`‰Ü<°ñ¬‰/7r,CKÔ°¥H` >,EþR¬%GcžeH`µKƸ‘À—H¿‘Àýa`)âX¬ [§“.‘r#ž•Ê%n$°._ñx"ž%ß“X†ÖºÄÀxW¶aL7Xå’Cl$°zÜù œqY‹ ¬y©(7âYUz8žeH`î–"%g¥ÈW°Æ%oÙH`­K¤ßˆgµã’Ñoä/ÆÊ—¼e#_Á’0–"_ÁÜ>,E¾œÅ½Ö@R pò¥ÙH`KLÚH`q1xBždH`ÍKuºÏšGüz× ¬|Ù=7XÅñä‡V½TRñ¬uù¢Ûq¬…3BÇÚÈW°ò%¾m$°Ú%¾m$°fŒoxNN—U½Ïb­_ )8õâùrË}IÀ)—¼l#µ.ýÌx÷ø£AC<‹j˜å7XòÁÝÀRij .ó,C±Ïâ/_s·‘Àùa`)âYPhëXñ¬\.1|#žE!(t™Nij®çç'XúøŽ¥È—³ÆŠêŒñ¬u\vÆ8Ö¸žTŸˆgñùoðúxŸì†ñÚˆg]NU7à9­Ä,Þ€ÀéñäèD< §Â³ ñ¬ëé߉xÖŒææÅÖLý²§lijXGH xN[—±Ïê×lz#Uñ÷KÏšõRílij®''âXòI0šñ¬> stream xœµ}kÉqå÷þ ‹¾­¯+ß•ÂÎöBk¯-k ý ÅáÌÐæCnrdÉö·oœ<y+ªsô , 0ì>UY••xžü·ûíî7ü§ÿ¾zw·Ý{÷owa ÷úÏ«w÷óüî¯~« ×¾õpÿü›;^î[º¶-ÄûÖÓuëåþù»»KØžÿ‹\QvwEîײãºç_ßýâò¿ß?ÄýºÕÐ.Ÿ?<<Ã/!–Ë×Ûu+©…­_¾?üüêá~ÙÃ^÷˧7Þ?¼ÿ‰>×óúhã}øõã›o¿ûôÅa€½zÍþvSû_üøËRc}!ð?üãxsp¹Iã%lYÿo6Òv{ò߯6^ò«·/_ý«Üíö/Þ™ÿ¼xÐWýé󻂦¸ßûQôÈ&ºtà ƒþšã}*{º†ý>ö½ÈÍï_ßÿßû÷wõã¶ßÿ»è”Ò[÷ÿ"ZèßÞÉn‘®I4/ÙV®¥Þ¿»KµažNäíÝW ©‰”}—ñO©šÚ;HrŠ[‘%°¤&r”’õòœ”!G©½Š6ä¤ 9Ha!¸¦£ÔDŽR§÷>ôÄAê÷iî!´û]E>ÌAu1\K­=†]à,Ღ²u,üáöc¼ý˜n?æñã~ííRnh½ … ‹êµIK-ËhÊãóá|µoøD(H/àýqR½K9)EŽR1Ê÷må eˆ“Ê2ê·v”RÄI5Ù³“Rä(•D¹¸Ê,¿Iâ¤bI×x"àdØ5™[_ý‘__÷Ybû5ù!›x³O|Å`u@+ÊöKÅÌ_°ùeÚñ—}Êô,;Ûâ»ë{Ž×*#mßeªd™øü»ØhAn)ÝB‡ÆWÁ6tÿáýýØtîe¯yˆÛ…ûÍxšÙ{SaËòÃu,ƸZ–¶Ð åm~óæ7\jÃååÛÛ»üô¾ÏXȤŸryøtAE-‰‘ÔÛ}Êb¹Ê;È7NyÃNYڮĂˆY˜ ; E~ @‚Œ‘ï ¥  U¬¬)‰¶V oŒ–Rß° -%Y„ †eÈ[D› ó¾h-¥*Ï0®ÊqCK©Š(/Š-•‚."ËühJ:§ñ¢\Ù”ôvãU¥°©”¯;¯ª™M‰n<Ö° úìhJZÜyÑÙ”l¡ÉÛŒ¦6™lJ&ì^dáßÑ[X‘ÐTìb§„6šŠ²íðÎE¾§4›¬ŸãÅ‹Œb4›<ñèÑ"«"šŠòœü0¢/²)YïùaЬé£)¬£Û‹¬ÌEv:ìB‘Wµ>šJòÆ;`ÑÆÃÄÝX֯ђ¬Çìãº"œ§hªÔÄYû}4Ud9y ­±-ÙŽ:e`xI:ܢ̌+nœ6îBQf7›ŠQEdÅ·ód4. 3›Útý‹ jD¢þÈÛH }¨˜A»"A@Vãm|Ì$c -e™…"2¶Ð’è7:LRË£¥Œfô:¶ï¡ÈÈjÌ契ÑTnúâYn#†ïel¦¤¯Ç;A¹-Éœ{¶üÔØRعg‹peKÁ:=çÌ–¶l7–Á%·I²’ñ³Œ-™üã¡2/’o†¦ ‘°'²|×(ß.aY`ã²î¡©„Åm2<Ðzd7.2¶p—¢k¦|ŽÂ–ÊÐ€ÈØ-e™/clY©GK©SQ’±ÙR‚Ñ3[£)t@ ÒGSò•7^„å MI“Û˜ ¢L³©­se“ÁZÙ”Œ½ª—Ñ”,Ùú€u;” 2~FWT[Ã^‘™‰À*“¶dY¢&"3nmÉz¢mUy´…!O ïlJz¿Þ©2¸dyŠPVÆ×ZØR Tíd‰¥†‘llh¦³ ›*›l@Ӳ̌-FÖ¢À–’îÇ‚t¶³>pÃBSCUˆô-š ™Z‘,„•MÉţϛ|³Ñºh<^+ãuå&ª(qÉHÒÉÚ ®Á6Øwk&€ÄÞdd¡!Ùñuò6ŒÕ$Së-¡±%L»ÑY»|èÑR;5¼Z’±1o‡€ßí­aŒ–à6O·KW–r±»Ô-IsgÀN8ZÂdcÛ2´FK¢9±÷vZhj,þø]ÖhI–¨±EʶœÙ’è#ÜîºèÌ. ‰*¤lï-Q‹"ßp´3¢飥ÍÞ. Mm]UgÑ-ÚhJ·4 b¦¢©Mö 8ú¦K×¢)hd|©.?¡©M>Cãeh•dNèa/¶DÓK‡(QÛ’Æf!ˆ<|ù©Dõjl« +ˆt¥P‚¨>(*\a[YDÑòäÃ(ì/Ñ éšÚ²í¢<[MdÝ.ú寖jdÛ{gK˜ DúΖä[ñùÂÖFKò­"PÙ–`"1³¥0L" )±©° V4íaª‰æSõñĪaK2aB|òp‡ÈˆO†©&HZåÐû¥!'™ØÃR“9¶sñóaXj‚¨m)6Çx¬]”ï1¨hº‡‹éÙôlФMµk¼ MUU^ÄHÚÙ”|L½qilJfYâUpˆÐ%]Vé¦dÙo÷Ä–²sÃò}IÂù!»s`Kòu9ä»°%Ù§s!ÒGK²ÔñåÎl)éŠ){FeSò—H$6%Ÿp'R2›Â:Φdh‰Æ.z¶n’bpSmhÞcgm¦šÛ€Mm;7„=¶ Dbbþ76µ©_@ìíaª‰Ú¿s½~4…5ƒÃ$C´Ós¦Ú°†**/5L5AŠvN®Ã*D{*ÊhI¶©À§i;[jE§]J©º)¥Ü [‚{a<\[£%ùÌeܦ„Ä–¤×ø ÐÄò@60%6UtÅ‘NßFSÒùì­’w6UU´TJcSYÑ¿*›ÊY—ŽÒ ›Êk¤¨™MAŸcã}ØjîãXª[`[ÐdÇãÔ°±-1:z%ÒÙV¬ÚV;ÛŠ‰Æ†Œ“ƶ xÉ•maè  d6½z5±%Q$8«t· W±V;?UÝ‚v>€¾±M=A‚t¶# ?‡@Ûè o¢¼4"a˜j‚d}§‡©&HÔ)ûMa×FV‚ $? RuQoeØj‚$î:©UØj[÷ØJèl ëoÜv6…ÙÏïM5µ~Së•MÕ®¯µo…MÕJ…A¦YMÕÌþÜã0ÕÔ¦E½l Š&¯‘±5ZÂÄ«rgKÅÖ^د£%x‚ƇÁˆ.ì¦=Šy1šÊªD¦K¬ ‘ê Lúa«…–ÆÆ"Hß"›ÂÒ3îƒ5b4%}ÍéÐCMáÉÇm°>¦dø±©ž›‚ãk¼gÏ•MÅD?^Âñž~ã­zÍlJ†—lEdcR³Ë®¤\ËáÆ4ضª„Ûóɦtïç+ì½ù–‚ß~;t–Yö·•ý8Ø÷f§öl~ŠÎ:ýtðµÃç•}oÓ=[‡@„/(F‰™~I‚T]÷9Ö°eU‡c„‹‰§Cvš¸fê°¤èÓèÐ ŽÎ)NçU®·$Z‘m:É"Ô¾œˆC—â˜ÐÉ*ˆìfÇ }ÐÀtÒ uÔ…aèm{?,‚4[‚¸ÀÒuÿÐ5H4ÂÀ§«”YGW2A4œc‹ »­S\EùÜ®Ç%S€DÛ–Õ¡±ràèÒ+HóËóÐs9t Äö*]æ)4l+ˆÐèÊq»®Ý.¸¥ˆÚ©vÛ¶#HV F·¦¡¬Çý¶{E„68uƒ¾npÜ#tEj9ºQ ÒôÕu3D}á¶áоu¤pO~£-¶mA9°}Ø(|qÝü#”P¶­ -›~P"Q›^õŒaµ£*B‡T>¨+‚TݶU¥d§wÍÔ1ÅÔÞ0Ոƙ*Ka4U›W°†EÇO®J˜X}QûX5AŠ.›ªÌ [‘Ã_>1'ƒö±*…Nuvê4ÕøUµ3Õ¬U?#\óý¨¢FhÛœøªÆÞÌ]ÓtÅ$ºáRŽPÈùVª/#ܤM©N-¦¶éªwã;ð6Ôͱ‘£ú»ü£ UñHtšG(ŒÖ-¸Ư4%äפ딚±L3†IÄ3qPÐh‰ˆ—ðÌ®[‚Ë€Ù>Q–åFDÍ#O©|š e$ñÌÌ‚£ê²ZbŠåÌXC·îΠ‹mÓž1£/ŠeãíBx9ŒÍvŒ2J6^Eó2NÊ,Ð;‹¨Z©ðéÕ’èWµií"¸¥¬ñô2M«!1èjXcVg|KOª¯Ô ô”ˆñ #F¼ú ¦,eÔ ÎΛ¿Q=ºRÌ¥`4ÓÎW·Cʪ$N×DÊj#O÷EBnuq`’òÕ ÿÍæ'Ah²©w…¾”„-žõ·À¯H—ùd–nÞGý6²³Õ³% æûIû®¾u¥Õ•b.$Ä_én17SÆì¥³J]Qzx¼¿9«2²¶x‘ú³2”)^¤>/Äaù4æËò¼úΚ¥oÔÜkXƒéhT\Âô‚©.çd~1õãe„qy_õõÁÉË‘dþÀ\46=}†¹&u©[1ÃgJ?£zßeœ“Ø{èÕ6f†ßŽ2êãÌÒétš4÷lþTõ•N¯»¹SGÆÄ6ær-a3×­ºeá?fhÃ\·‘çûƒwabvºy€±17uwšFkÌ 3}pækƆÏkÔ]`¦Òk¬.kÜM]ÖêÖ.U·%ó|#öA¬9Çñ˜Q=êôŸk‚ÕÁÇ^önAõÃãý9íÌW凳CÝùuÓazükHÔäfT`hU¼H#Uöw:j-º€X[ÒøCMªÉYˆ¢šé=£µ.«3ÒQK³¸‹FCªìütZĤ6ÝîfTeÀx/‹1ƒ*›©ù*ÂðM•I˯i!ÄÞx5ù—þ}‹µ`nc &ÁÈbZ¼ ¹¼üv“jð@ÃV05ÖÅÈÌMÞUƒ_X 8[,@Öd›âÒlA4XÌ 'Z ­íæ|¶XÜ(Õà5^³g”OczuW÷Ûe?-,¶VE®Q=„ÿƒCÖ"Œ°›¸6[Þúî-R 'G¨3wù¨Ü§4Þ¹7[,$ ?g¦…M÷¾i\ÃB«;ìFq5üÚe\3Äh!ÚŽ0=ÆŒâö‘÷8 ôödË–ƒ{Ö ‹0îæešAex0Ù¥xî3þª±i¸Oó±ðußçÓh„®Û¡´Y\öûÌÍ×"å W3ïA£é v5ónoOpP3QHCòi¤d2ϰ}‚ªá†ö,Î@„áÿ„>Ѧ˜"`òÆÌ"Y™"Ì4™¼f#ŒdŽ©ÌXHøŠÌ6Ѭ†ëˆMiæCÂ`ÈÇìѳæiEB.cäUL²údf뚈Žfxh² &©XBŒËaÒ"JšwÁ¼Ðƒ¦øXêÈPÝ™o¢é%˜`c…™(Ы›KRAÚf¿h" Rƒ†f¹.¿i–ЦÃD¾’åË@ëgrŒ¦ÔȆ¢É&–v«æ4ÌÔœ=ý©Ù;06šàwÕLfÌEMå°D¡8*¿îÉD2Ží*M8J°L)Ü$(§|>K[Blµ»Ì&,Á…MiöTQÍdÒ )”€iž•fQAódΔ&ZAñ,Ìc*öÍßÒl-„™ec]bÚ[F—f}AÍŒ.3,Uþª©cÐ15QŒÙeH«cr™æŸ%88ySÍQK»MoËcƒqË»Ì\·ž,×Íòá°K¶5e‰|”Ф:¨˜zM¼ƒŽÉ/`Éy9ha&ðeæ Y†_ŽªÝZ`F÷ói5O0Ã’dËšK“ŸÈò s²$;ËI„¯ Ñ´E<?µe6–ZÀ-ùQt¦ÈDFK,6MfeUKù–hY WÂïîþ掉åóOðaT—ƒy{ k"«Ý{Œ¤{û|ÒÙóeSá_fuw‚½¸¹Ž 6¾uîfùv–„)c¤¸O”ºê÷·$ÌÝæÞLÂÜ5 é–„Ùæø±$Ì-çR“0«îM·A'ã‹n`š­}¼eÓ5fp8ˆŠ›fúÏiãÑÏ$Yÿ˜ú5§š Ef¨ÎéÇdrSVTrÓÚü$3  Óai^·zˆî¡ËóÌÁÜmëœ9˜ÐBëq¥ŠØeëq5Ãj› ä-×D¬Ù> j·Å¹¶š›î¶þFu ÜÖhY&Ù[¶ŒÏ¬Ñ¹ÒCŸ÷»ö°pÜ1à›²´LMÂÜ ÃÑ·$̦LÛ˜zz?î]ÐüØç¶¿{ ÒF‡Ûuî“ÈÍ»ÛK‘ýŽÛmL×ä6d$ã·ioöñffW×ö- SÖ׿¸¤¹™g·W4àá©í¨ŒÀÃÃc \¸Ì^-íVs0{aUÁÌÁìæÌ9˜‹Ý4³£¨Œ:¬)¨˜ÖÔsM‰ÝvK°ÔL̺|P…÷]Ó˧º¼ï–xh*õ£‚ˆªÝãcð*UÍwY ïLí}Ïæ©0O™¶·Ù{,šÉ9í„ JÚÍ–ØÌ°ž)˜Ýej’À™CÔ¬–áÌ¡¤–Íðæ¸ÌF§„™Gpåh;jBÁ•S ˜¨¡ ÎkÑœ&f¬a ;{³œÆÇ´ù63bÌ.¬¨~¿?˜ŽH!ÕŒL5/«¹[’¬¹…²©ñÓu„¿p.™{)ÑG×=PpéѹiNª\UýžŽ¬\¦ËL]Påè¤0^…SÛ|fÐ9öÔ­†DUmJ=oP>5…S½sЊ˜zgo£îÍÔ4ajº@1ÄèƒR/iá·7?*Êj6—{ ]”ÙßæµT½*泽巚_ZU¡ =¿)ªÁ?âoP™d„²\î%"t(«ù®Ú´ºª¡dqKPo¶ìXüÞnD3¢óˆG+Iš^óQ˜ã/J¡#Óœï±i\Ýüó(Õáa|¨aô˘—?VUðf$@ÆŠ.ÿ-@I8h4ès±TQKŒYº@Œ‹!n`YåJcˆÄ&gj”ѵr ¤Ä k„…Z°~ûpL¤ŸÉâ5Xò5ãSc:!l†^4î¿Ý^Í{È !XÉ, 1!žçr.îfÛŒTAdD΢Y¡©GfF¼°³in$ƒb·(­ÅÍBµà½ÅÖ,Ëv†ß D2êh!:14‚ma<„žwd O·áC,!íîR.õf £Åñ/s(,îˆp:S¶,69Ì\²ð0R*â¶ò&sPÆŒ2T æij É»L‰²`5 ¬δ€öø‚Œ¦kÐé%M3,‡úV4T>bç›ÕšÍðú¨Ëb(_Cð[QÿÐ Ó#iFs4”ü^b ÷#‡±TK ØrҗЬdùd—X½š{°%BÎüdqÜXÃÃŒ9 šç€Ô%¦ui*r€yM–@FTr (ã·¤‹[¦•%f`‚—»Ò2æºhzœÄœª–2Š‘™7¢)—ŸÉò-QE­©“šoÙEkÐüÍ·ìÝÒ4ß²ï~¦™o‰´aÞWÓ-a›lÇÜÑZ-šmé–°@8 ,Ýö g‹¥[¢î‰%–n ‡:ó?,ݲWÕžgºå-µØÒ-{ÕóL·ÄÊÊ1bé–04mSó-g¶±å[ö¬&ÌÌ·DÞ›æqjÂe‡…é2.a°1ûÄ2.±ð3K.asq|ZÂ%\,áÉÑ|K$Ôí.ß–Û¶|K5(ßÎ|KìKlZÓ-;u‡··tË¡Œ¦[b{klIÓ-G¦S'5Ý`eRÓ-aïÆc–œ –—fù–HbÖ$HÍ·Üg&Œå[î]×]K·D  fñ1ÝYÍLÈÔlK˜šÌÙÔdKléÕ%[â/lÙ’-÷Ýr2,ÙF¾f@2ÙºÂvLf$ë:gÉ–H|æ7°dKx4!S“-wxzˆh²%¢_ãq¾µç$‰Qåög ÙFûùÂ6G¤ä+87‡ßô(¥ˆ“bDÿ(¥ˆ“jcà¥9JAw—ë eˆ“Bت;)E¼ÔØœ/5*/5ÂùNŠˆ—Æ¿“"òR™3â ¥ˆ—Jð¡8)"^ªÁ'EÄKí£’ï(EÄIÕ‘¬q”RÄK¥Ó:oˆ—êÐ2'ÅŒ®£”"^ªŸçµ"Njï§Ö'ÕÛIë2ä(…ˆ‚Ÿ†x©rÚc ñR¢B{¡üÉ2¡œtOC>C ”oP/µŸÖfCœ ¾ñRý´[⤬à„x™A5ㄈx©ý´Nâ¤×p£Á/u¶ qRµœVC¼T;E¼Ô¨òsRDœTQ£”"Ÿ#Uñ³“"â¤vÖΤñR#ÄIñR#n龜üÙ¤Ä~n^J/UN£!^ªVzC¼TÕÑG)"G©Q˜zRÀË„ÓJiˆ“ é´â¥N,qRƒ¤ÔI)â¥úi 4ÄIÁ²u}jˆ—J'Â/Uýί€—i§¹hˆ—ÚO¥!N*Ó‡sRÄK%¸ /5NŠÈçHµ“Þbˆ—ê§•Þ'U¶“FoÈŸO*žôC>Gj¤å9)"Ÿ#5b¡NŠÈgH‰­æ=/OÖˆ!^ªÖ$C¼”Œ^/4'Cƒ£"^j?Y§†8)äµø^PÄKÅÓîiˆ—JGÊw7ÄKå“%eˆ“ê'®Û‰¥:ƒƒ)C>G*žÖ7C¼T9­o†x©Ý¯o 8™N³Ú'…Ô'DÀËäÓø3ä3¤PRî„x™tÒË ñRýäÏ4ÄI•~²& qR5œVyC¼T‚ÚIqRÌ&;J)â¤ö2‚&)Eœ”è~ý6ÄK¯(p1§OÄI…zf€VÄIÅê}×qR2‚"àe²×t'â¤XÓp”RÄKí¾ß'â¤ÊæWø‰x©è×î‰x©„À“"⥲×;'â¤{å賂—Ú½†7'Õ6¿~OÄK¯»MÄKíço­ˆ—ê'¶oCœx1'ƒü'CÀËŒÚ,'Dä(¶ägþDœTI4G)E¼Ôîuô‰8)Ñ}7÷u ñR1o'Eäs¤öÓ¬6ÄI!ÛÆßK/U®'¡r=Ë”ÍïÀñRÝgœ lU7ó qR-xÝn"^êdKNÄIõíü ù©Á’ᤈx)ß ýÜðïí´¾r”ŠJíu“2ÄKÅÓ—3ÄK%ï‘›ˆ“‚½è&©!NŠÕKG)E¼Ôî­°‰x©~Ú' qRióûóD¼©ËRDœÔ8ßÅI)â¤ú棥9J%ééìúÞÏ‘*Þ?1/UO«š!N*ˆ“ǰ{GC¼T¸ž„ÂyõHdÎuBñIŸ‚3=ú7TÄI•“.6'%Ú’_‘ ñRûi÷2ä(…<'?ž qR©Ÿ´CœTÙNóÌ/•}Ÿ*àe r”œ'U›þMä3¤Úvê-CœÔž½w|"G©‘ºíîeˆ“ ñ¤³â¥ÚiÇ4ÄIÅr͆8©sÞÅD¼Ô)ïb"^ê”1'•G‘ãQJ'UF:ÑAˆ€“A‹¿“"^ªø8ÎDœÔÎL¤ƒ”"N Ùâ¾ñRé4n 9JÕmóžû‰8)°ò¸>5ÄI!KÌõ„!Nê?Ÿˆ—bàQŠÈgH‰n¼ù§WÄIÉNâwFCŽRí©žˆ“Šù¤Õâ¤Ùuýeˆ“:EU p2%y-^/S}äh"NªÆ“ngˆ“:Gÿ&â¤vßÜ~jkgîéAÄ'%uO'SúiFâ¤êY›6ÄK1-î(¥¬„G)ÒÈ¥qRçˆÄDŽR`‰ˆ®7 qRq?uCœTЧYoˆ—ª§w4ä 5RõÝJ:/•¼u8'ª?k"NªŽ,磔"NªjÔ£”"G)XŸnšˆ—Ú½f0'›9qR¨ÑrBœÌ^|FÉDœT¯§³È 9JÅœ½Gn"^ªøUf"N ¹íþ^ŠüéRÈÒtZàDŽR «“2ÄK%¿#NÄIåêGýD¼T;=½!Nª[šˆ—Ú½Æ?'…’*7ƒ ñRÕï)9J•-ú9;'å§b9ÏCðÙ67 9JíÌ}?Hr”êç•òÆßz“ú޳ú…GÔg_Öïÿù~»ÿúŽë›¬ m$Z¾;°*4婽±*´p>Ùª*ÿdU@yi$ŒU¡&¥:˜¬ U 7n¬ Eù}n¬ %ÛÑQƪO&eµÈJt#¾ÈõĪ€dÛäÙ3¤~$Ø@Fïk$IÓÿ'M'ÔT!G¥]Ÿ¤ 9*!Ö$UÈ ó!I’*Œ“Áîœ ¨{ ǃ­ð²J² œ ycqÔ¤T¸±K¥˜êȰ1)ì4±É¨Ð“2Ü—JWz÷ɶ‚RLOÈ"ïªt ›’¶ PFr#viz.ÎüÌ÷F”N²ß(dª–à„É2Sª±Ì(£ˆ]¢cT¸‘¿£øa8öŒQa‰qÆAãŽ;‡…tÇ¨Š rÿ(¡B Í8 ”PµÌd0B¸%Ê‘P!‰"F4 &aȵyc#Ú•aò5%FŸ| `´$/ƒò)ÜÎ53B”F’ÚÄpVHqLIØÑvǦ“RNB…˜´Rg*DŽcSÀQ~»cSÀ1 …„£ê£Òe‘+à/Ž@ u‚åÀ§ ×Ä3®q‡£êÁßÜè¼FA®2F…*c=²ŠŒ ¥yä „ DˬVBFÊøk„ CQcå«*$gÈ-F>…Q¡ÙŽ| ƒ°‚¥£äSHãþ!ŸÂZÌ Ô”<Ž„ 2†‹>¡N:ÛÈY „ ÆÜP¡ëÉ“O¡7en0:”¼z:…ËäM”QDlv€zžGF¨Ö¬57F…QÁãèïºqªLJÔ=‘|Â(0蔎O)@8—§‚êÊ  œ 8RA¹•Sa¤ (Ë9nÔFª“G¹”UÉÙÑ* …„„ŒJ«°g{d£UØ“ñ:­rŒÈh´ È`Š”QZ…±¸C­vY󔌴 û–‹AiPì]E#N P–¥U@Ê›cU@ypgZµ–•XOiZgF)¯‚ÄbÒä?P^°ò+u¦ò*àdYå^P^…Æ\ì¯8•9S‰XIàUS~Wò* f/)'yZØt‚¯´±|<Óªmvbñ*`ßaŶñ* QW/R^ðYrܯBmvR’ñ*T”QéJo‡À¯2“Yo¼ Ø<‹ãU@†6ÉŒWš£RÂ*¯B•ÑÆId¼ #»Ýñ* +žÌ“Æ«Peáh3^äꓘmÓ(—2#V@5I&ŒX åxªÕ8pŽ·Qf”fÇb;4²ì*³wzb•2+”½7¯2+;·Â˜  )Ã2+”fÓÁ˜ @UG­€jXeVnT¤(ůr+”¢G•·B™\F¯P²­ÐF¯P@!ãH‰KÖc&½Xk+y”^£ŠóUéJìv¥W€§˜K¿Ñ+ 0‰L)F¯P‚-ôF¯PŒv|Ò+ãþ3zL}>¥W€)¥ÇM)¿´áèPÙLfåWÀQ{Ü_ÜÁ$˜&½|ð|mãWÈ»ñfü 0`xeX€ý¢‡X)Ãþd>5† ”ÜZ`®°>Ø`®ËßÀ•²+BŠ…\”fwR,Lö”I±0,p X€uÂó”bÆItÇZÁ:Q¶¥X€ÝÞܹV¨­d1·q,`ýäqDƱó$ÙÔa°lÜH° ³)#YLƒ$eW’…”»c’,À>!¾‘,ä­LR…Á²›Ž‡uËñx¦‚±,ˆÉkçc)Ë O$¢4 #v<Ùj{ó¨¥Y/£;Ù*Š!EÑ,€/¼O¶ 0¬6š…Ôì2£Y˜LäF³_Œu¥4 ÃÒáEJ³î=¾•Ñ,€7&¶Šƒ±òþÀ²Rã], ©¨ù1Y`“ÂÞXRVk²,€l&8–Ä#ËøƲ0ô‚ûÉnGÂ%YÀq‹äï0’…4ŒeOEJ%YÝçØ&ÉŠ—9DdjËñ\«AiOcYU gƒ±,à@éæŽ¶@ä7)B–…´é¡“eƉ"”eÔ7HƲ0> ô,Žu¿×»’˜Î3= ¯‘ÐÁÎýÀgæ›ëÑ °ùöãÁVD¬ü vÂÁx<ØJc?°“JÀfX[EœÜ‰'`ÚáIv*Jœl vr ÈwŠž¥ÂÓUdW=À:žíÈ´asrJÛA.ÑΟ‡½ Ï€cÒ„]J ;4§<ð/;Wf’øÌ³g`»r2Úù4ƒÖ‡'Eé61+/â<ç¾XN¦àbv^¸ôT*=S60ûÇÎÝPSr…A‚“sh§÷ÀFÐÇÑ~°²¤ãáV#DGO ‚ë.¸Ó„Ôú˜l K{ÇÎ$­P?žn5Žþ0nm³f×ÃŽh´ ªâ#ÝÂ8T„KŠž¢4ìöãéVT“\¼ì0&±7 Ñ›TCŠ ;Ó );NvîŽ5?. ÓL== ë9;ÐN˜ÂÁ î *p4ûcªÂnKže/ÂØs¿ºû…º87ù¸ÿùßÞ|}Ù¼Çt¦W“ô ¼½¹ë0î„%BŽ8#NXz޳‘&¬€`.C2&¬f'y+ ©]ù¬•a‰èq\Æ‚°BdõQ–Z2,e-2¦’«ñßÒ ^"›2þ*ËÀ IÆÎª+$îÆ=ÈV@Tçr¬PGšŒKÄØ;•`…Ü<±dX Ø#•Üv¬€¤½¥5þ+ƒ‰ÞZV實ü˜Vm¿BªÚƒVE¿BJ3Ê^ÖÐ/=YSKè@.F™Íúù’Ì©¦uñK$)ó/‹â€ Æ´"~‰D#?J¥ü‘1°)_ðð¦-ðÇéîNeD£õeõú ÙÕÛ`µëKDZ¸¾Zž\ì£j}…`}âU¬F_"ј’•óø Plìk•ù Éêú°ºð’Œ®Z«ÂWˆž–l%á+À£µÒ{…˜ébÜ+dëö}Y¿½D—q-¸~ ŒÜV:ñYG½Dæ‘Û0”Wˆ™.Ò @´9^²çP›Àšç%¢ÇS[Åó )ºC[½ó ɶëhµóQ…A‹@Ò3ù¬Òy‰nÙZæ¼ì°I«q^!Ðwy+œ—HÒó$´¾y…lÍ‚`­ñAò?CSZi¼Bö®G?°Ìx¨ÜjŒWˆ…¬*x…ÔbW±&x…%+ÕÝÀ0„Ô.€la­¦]"¾«¥]!¢ÅðÆ,¤]±Û}Gì PKѪcWVu‰ u}‰¨ahuª+Äe«R}ŠDî]جQ]"Ô‚­¨tìztÕŠ®ìúì Ö€®j‘H­í\"êF·zÌRšQ°³Òr‰Ì&+(WHV.Z«Œ\!i7*wÖE.‘hqOVE®¨Ç˜[µã ™'€h©ãØ”ZKW€iÊZ¿¸@à6¥¥ÁòÅ`ŒëV•¸BìüV-J\v¾ƒÖ®Ä•‰°Òp…S·µ‚p‰D;ùˆ•+$ÛjÈ’¿`¤ÛZî·ÔGbU|+$VåNÖú¼º•éÏZ!GÑJ¹²3·ÖÉ-=“ªäNù"¯¹ÖÈ­ÝN+Ô ¹%²Y˜õq+dFé´:n…TõWiÙÛ Ø,d=ŠÞ@áô±‚·ÕK`ÕnKÄxõŠm…À<`™5l+$6lhmÚÙtœhÍÙ êÔÔ’³°é™«Vo¶@àåê3ò|…${>Vˆ­½Z•_+l˜ì/Ö}-‘y\/O…{†Ü1 Œ™iE×QBU«çZ!ØŒb®š4­äZ"›2þk× ‰–k U\+$hÐǪ³VȦG‘j9Õ °³µJj V›5þ?j¤VˆGkRKD¼­òi…4‹þ²ðiT%¤µª§Rì¬O­yZ"z´U<­<³X}´B’‘eµG+DÔAò¾³ôh‹÷³îh…„d'e²žhÀWÈ8¤V-‘MãÌZ³³BvMx³ŠÒ,™DëuVHÕÔ -ÖYE]ÓV©³D6îk Î a\ËožüjQJ«¼Y!òîY³¢Æ-Ÿ ÁöP­ºY!Û®9!Zs³D6MºÐZš’Ì&·Jš‚¯¢ ù,–ìì ÖǬœ„ʼ&T­³¹­6f…dÓg´2f…$–X¥Ê ‰ÊDni9+$èYÇÝΠv¿j¢ê¨O9ý/7­LY!û®Ç8º”§¿7Ë€Ñj“Rõ(L«ÖX!ÅÎÒZ’õ°8«ÔX!)[Ôu+Dv¡À"”÷ZK/ž8‚(­¨X!p1,ÏzŠÒ‚EáG9Å@ Cù¬¥X!¢q1,ª5+‘†ÊYÕ°@pŽÁ®œú퇪>FËã_!ÉN©Ð,þ²…_ç_‡Ý¢ìšÁÿAÔ¬ƒO ¹CcÏH¹DÕÁD¾ú¡”ü§a*åɾ…© ‡g3`Â…|…´d§R’Šz…Ø©ëF1½BJœ—Aä¼Bò<5“Í+ŸB“×ÈX P«€`ÚØ Ù4ˆnÁ )%Qà :xŠì:qŒÀu…À}F„T©+îuZBÒR¦CŸD£+$—™Ó>¨AWHÒµŒt…X$Ù?Wd4ñÎâ²Esš’¸qĦCtÐ6®}›nJº HµPR®v…²>ù5kF©®Ô´bA)WH´Ê%\!¡è·SÚ¾²YðEIôÈt«óp+ˇ:é`\ Múæ\!¨®8ºýVH²€‡ºýVHÜíèÁñ¶‚U-(ÁÛ Ùª9ˆÛžüO:2IǶBd3¡4k+ªMÛ [!5jÐS ºVHÑd)£ÔZ!8 ÞU,hA¥ÀZ!v~‡ÑV­Íˆ'Õ â =œ‘4S+õ ê’Úè ~Š ˆHç ÏVˆ¨|I  X½­¼Ü. $îæS!EÐ a@þ­1ö,ÒÑyCºž2²\ÔBwÉš*çð†œ­}Vt:Ÿ"È'T§Á0üWH.V@ò–’T¥šnƒ‚ƒöè AÊ Á©Ÿ³XYX½@"“Æßβê»æ·kQõ ¬Åx; ˜êÊÆn“QŸÅí9fèýíã¹À+8 )aÇX“-ñþñ5©ÊLÍŠ,~‡I”&ò{̪y1RvE¥:\¬È2ip^†¤ôÔ—)òÇ´¹Ér.›ÁábEpñvÿ-ê¸Ñ¤4Ê^½»ÿ›çwõsÑ™îE?“!¾ß?ÿæ.PvÌ8> åš²=w÷‹Ë_ÿÝýwžÅry÷áý—ÛÃ??ÿû»€š&YöŸÿìîùžÈ„!ƒ?üÃ?ê·ÛÒá?ôW^ûÓçwÿÄ2ôåãƒuTùæÇ§‡7§`íCÿü»Ôç]ô“Ë›ÏàõÛB»¼zx†?té°ýòò=ÿÐs½üJ•½áòZ¥k“#*[ãåëqÇÔÂÖ!‚_v(–—·o_? Ø\[„ïXº\üh·’ûÿ׺ü·o~uøÓÛßáôKº|À?¾y‹D¿ éò­½ÏåÓw?p[tæ_ýÜ@·þIN²Ÿl÷Ï¿¾»||÷áçï®ß|x|÷ýÛ—ÏÿåIÿîH4;fÈÿâòòñÛã½soñþ q¥—˧ëÃ3Ô¾m!\þ×Þ/øÒ8 wÛöËè)¸úå·/ßýz¼R–Õ.ìD±§s¸üX.ÀRòåßÇ}ñ±Îo÷ ÚE“¥ñ¤Y~O©xo¹¦Ë‡ïÃà­|›Q™ÿØ ù:^ä›Ã}ä}V½Û wëÜ{üôâòøúÕï^¿||ñ°ê]”5YI­wßc>iº¼9â¯Üã}ï®p/1ž»æËKýq«—ã}^~:^ûøÒÞt‹—¿>ŽFm½téßy_ùÙAü†( Õ¯+¦m»<êÈeì;>ó˜õÚ§ç±;p™)îüþVEωͿÿ'm¢Ëw>´±ù(ú”åŸGÖYqVßáú*úå~]‘þ?ÞLryendstream endobj 194 0 obj << /Filter /FlateDecode /Length 14199 >> stream xœ½}ݯ¹qå»þŠ‹yÉ•cýÜ$›MÒˆˆ#Abk[@¬–g43ŠõaK'΃ÿö­ªsŠMö¥g}w7 ÖÜsëvu³Ùd}þán»…»MÿÇ¿|÷d»ûæÉžCïøÏ—ïî~òâÉ~™« ·¶µp÷âë'ø“ppÛJ¹+-ݶ–ï^¼{òëûŸ¿úø»§ÏR(”ûxûúé³í¶åêQïßM?½«üÐòýçOOÿíÅ?‹¢xŒŠâ±ÝöVEÙ‹¯žÜ‡ðôÅ¿‹Laz¶ïåVË~÷,å[=öªÂ¿¾ÿOŸå˜å&âý×o>ëû­ÕzÿwÏü¿Óý§Ï¿_Þÿê»|yÿñõ—zýêã¿|ýþ“ü÷óçáåÓ?‡RºÝõêó«ç¿ýøå«÷_¾þèpÝïß¾yÿ»Ûç?ýþõó/þþŸ¾ø¡=HH·¼·x÷âgO^üà×÷ûôYI{ñûOï>|øüííëß}÷öÕó?¿ÿôòþÓ>~îú_>ýáW_?O/Ÿþí·"óáýUÂï ¿yùԔ蕇§üôÝ»w¯>þé¥>.%~ôË=Mã™n±íÁoëç¯þóÍ»ïÞù%’<Êï^¿}óí‡_ùSçûן>¿y÷êó›ï풱ȫ®z…ûxõöíŸþ ¶V¿*•Ox^üùy«ó€Ÿ"úáožû8‡{yç>eú+XßÑyëÏO¡ó½ÙCD’»gzçÓ¥¿E¿XooV¼¼Às Ê–/•¿ÞêýW_/þ*ܧóùv™1ç}î¸Q›Oz«‹y±ºxoéœ5ÏvùJB•‹ú«”Oë>¼þúë7_¾yýþó§ëWŽãæ#dïVÿSáõy›¿úüÕíïŸ~üøá£ßJ¼ÿ¯Sý_½ýNþ,ø”þçÇ—÷ÿå÷3ªâËø¾ñ‹Ã#N“J1<}rÉ÷ÛíHm«[ÿqËAV£ó¾C¼åxÔóÿîüÏx‹¯å¦Îóƒü oÿ§wû­ÔœcËç[kãí·-Æíÿß%ÞŠ,å[ªå­[ŠÃ…ÛqÔüø;ûžùZÖ7–ø2}Í–=#íuÛÛps{Û÷óæžÉ°µ²ŸØo¡Ô×϶|^åÿÁ=Åùždó+ëlau¸§tKǑΠˆˆ\þõá=qòÿìÿææÒtsqOG,ýæB¬áæÙ³ KËÖ¦›Ë%Åm¸ÊíÜ˰¼ß?{öL|½Ç_½ùæý›¯oÃÚýá«×²v< [–K…ûíœe¿‘§ü›s.ê0„óÇßð—XCôoÏŸ~Ó%·£w8üê6ýj˜-¿9oʵʌ —íKâY<Çòí‡oÎKüìÇç/BÙ² _âŽz±>lKMýŠÃ~üû·>ÛfÜ÷§vÿþõ˜¡ÿwûúã«w¯_òm?ߦïõ?ß¾úíó/^¼y÷ú|bÙûÒþéów_ýéy¯³äÓ˧_pU½ “™ðûß|ýéÓ¿¾úøþÍûodŽÉÖ÷úÓt§ß{£aºÑ·Ÿÿô<þ%“„Wþ$Û½%ßgháâÜc'S‹êðb¾üðöù¿•Íä‹Ë=„Ç¿p¯¿yýþ«—÷_|þðûo¾ùöóÃÇôåKÝÚÏ+ù»øâ‡',ÓÈŸ\àùùx›à|Jë?ø¸ÅÜC3[÷ýÃs®éãé=ýöí«/'—=ÿÕ'Æ?}°úâÉ/Ôd®wß|˽¤¢|çÿ¦\Ó-Ô»Øj–‹ß}|}÷¯wïŸ7Ù^ê݈/wv÷ïb÷ÿã“ «ÅMfqHûq ùîÝ“t™ä­#oŸüj!Õ‘X›Øš&uˆ=Þ&)G©¸eÙƒÛ Õ‘QjÏå&)GF©*ŽH™¤¤RC#R¥.Ï=ŒÄ õ}¾RåN^oNòbg)ÄpËEÜ™ !p–d‘Lykº^†ó?ãùŸéüÏÝþ³ÞZ¹Ï'zœS!ÄxÜŠhÚ7n¼ )ù¶ûK| ¥˜> ‘IêÈ¢&ŽRD&©tû¥ˆŒR1ÈK‘'?¥™¤v1Îb¥ˆLR²±Þ&!“ŒìÇ:9!"£”Í)5ŽÖ_ù’õ? &VoÉ>‘$>iá[¾©‘RgV~ØÇ2ȺãoÊøCÅÚù±Ú€s7Ö=ŠÍvj•of—௢î㹤ìþµÉºQH÷¥»ïïlº“ÍçiÜî±ÙÝôᨻ ä¶ËU‚$Ùdþªòýßüñ)ßpÿêíù,¿Ðýß>­h2TâÓ~³XÙ첺¥$ÖN‘+š‚Íš´Ë˜îŠ$]Þ*ÒÄkPDd Èõ–u~D†å¦¡é4Q ºÂ³!òĦ)ÈWCZ‚¦PnÅdöMžÂãvCdxLUÈ·QjªÒíUGd7U²D 2L¦j“… Ϊ¶tÛ 8vhÚ6û±èG“¶v蚪@¦fkò¯=ôÞ6S³É˜¸†ì^5+"î©)ÖeIÕˆ=|+¦8ËÓªž­D|pAü-S%ߨq2T2ñMy–ÍÄTåÝÿH¶SµûàeY1L•¼ÀYž³lw›|rdJ3U¢·WëMïEÞI²ŸåqM¬QÑîå¯(²ÉË"+…è‰M^_²Ç>dªÈò/Û©LjÈÈ7˜t)™¯ÿØe=@ZèN/H¶™¢ˆL+QÛ®óÕ£@U»á£P%ó$ŽTÉ Ùp;m7U›z: ™Vªªj4Îþ¨È\QUµŽU‘i¥ªªŒ™­»‚4SUå¶0gJª¦ªÊ f»Á"£¯@’×bXr†ª]•Ì+S%“1CF¦–ª*Í&¥"2_vEÄ.±÷]Z0MEîÃU7 HÆ"{<¦DÕ O4•}çk¨ÁæX,É?Ë*ïÙ4Éoð!T™Z¦I§½Ý_Õ¿×mCÖ±ª²îÂÈËãudj©®ã°ÕB¹1Õuì•£^ejɉ‡ŒÞU•É¥ºZ¼ˆÚ tÉghÛVh›½Ù˜å«vS•Kå 6™]ª*Ë@Ú‹iºÚ+ îTÅÉäRM9Ù꧈üN4ÄÕÜÒ I·_{ª&³K÷Py Ù†´ÉäRM»¼ÞžL.Uµ³¿ÉäRU»LÛªH”ÅÚTíòÚíD±1MÕ./¢UCdl»®·ˆŸ4Éוƒ!2·TS’°%4ê—­šRÕ !Ù†-¦ÃVùœTS’ß$\¹èŠiçBu-’)“ŒÚU-@UܨJÖ<ì˜tŽf ÍTÉ7¯3꺭ªä ¹mÅ™]¢*ʨÙˆ²1˜ª¨w¹ UeÝÚd›xQÍㆿ:Ć‘猾JEù<¡*r’ ÒL•,ú»=ƒL.¨Úø~£¼=S°«u±U2ÅmnÉŸgÓ$Ÿí­‰6Y£Ú5ÅÆOFE—n=ð9ˆˆ­ò,å@æ–iJjgiÐ$/ÜöL‚ UºgB•ì¦J7. ê}("“`‡r™\ráM?S•ôñ‘ÓBöÜ[2@nÊ€L‘½wüòêt?Á,³Ëm¹âó•éQLQØgm™¢>o’ ‰i’o S+ɰ™*QñWò¡¨ ³¹­ Ó7@UàG%S|3U2¡jРjãWfŸ…¨’oËÇ|EU ²aáÒ˜ª’/2ak•ïm×ÿ’÷^8±w™[z™>¶ ÉgÕÖºë$¨’ß™*yc 2òyÉ%Hâ“ï2ئJÉ}—÷ašd&Øâ+3à0M2ámYU%C“Î-u\MSܱóËê” Im"\F¬6Ó$s¢â¯dn™*YÝÍ£¤™*­‘à ([L+.## ªª¬xY2U¥æ`Æešm‚DαÙHÊÂ]øQ2¹Š!‘ÊuÍT—,•øÌ}@Õ%C[ “tåÂ7ÃMÁ7EtµL‚Èo¨]¿8Õµû£2½ô2r9,G…­»+^ð¡¶—*×)n¯¦ˆYbªÜ¤A•Ü:®Sdz™ªpðM”XLUð±(2»L• {Àeö U:JvEÖ0UUÄÈÃ,(2Õìב饪¸+"ÓKTy–Ù¥ª bŠè+ªŠ,rxÅUÜMS%;°ígâ_d¨*t ÅÂØ¡J^ ®Se~©*q÷"€=B•.Oø£ JÌ” DlLS%¿ÁîUe~™*}‹¸5^U•|q¼²Ì/U%¦&ö‹*C`ªÒaŒ[_$>¸NòMÿHö>SÝä ™"yw "ò^M‘XOXOZj¦H^!fI“»2EêØÐ4 {¨&±é*.£yý«ÍÖEdn™*¹+³§¢®#¦J&ÐD&WV¿^^ǦˆÙ¼ªK ÊH0SF€åÃLgYÄ ­˜’b\Óuȶc_ˆ,â‡.ù‚|ib£gè*Ü^aÙ+°c[ãßæ‡ 6¥)f}‰ULƒTüŒ ªt}‹@T³_¶ô Uœ§˜ªœaÁ˜»eªÄ§(͸C•éxsÛUÕN/%…Ýœ5A–ú$¾ Tíìã$J\†hP%ß´Íœ$SªÄ͸p= *šI¤HËP¥_¹!²QA•Ìû“ÚªJW³è“lîP%OW¤ ª4•tiPøY%Yý¡J玽Y^¡J·i{ Ž)@‹*Åb›¸OÍUUsØ)œ2Ýuz ²ó]ÉÜ1UYí1dv©&õÊÊDýµ Ë9Þ\šÔDµçNé€&7SÒ<¦j*Ü RÊ;43€‘Ù%¯HÈ——йlb÷4X,b5¨Ë&@ÁW/@ƒ*µÄ!ÒÌe„îNÒH™©Ò5Çþjæ² r`…I{ÌP%·e^fÚÕiP€¬˜¯æ²‰ãÛ°…ÈC¨Ú*ß ªdY¢ò£AÕ8söR¡Jm5ÜŽFH ’ö–¡ÊîA€¼íДPH9$hÒPƒéÎÑ<6óÝÍpL*mšäÓ‰Ù7Ó¹² P¡IÞêŽ?ʪÄAà ÎÇUawå%C•Æú ¨;4éNg@³}V€Â1?¶M2gÍXOGØ I&­Å ’~)¦I»?ýàTÓÞ*]?\U¥c„¯J¿ÿ`Hž"v¢yl‚lVšÚ3]{媙\²= rðÅØZ¨º*Ý×tˆ­gºÄBÙ ½5è* w*Âå{¡=’ 6uA2?ÝN²!ôöSI;t:ÆbÉšívYJ±š•¡K­fÈê³Y\“´ ªt²C¤T¨Ê4n“îó¦*®Úêå›*Ýrívê–¡*#ô$ßY2M9ðëÔèAÑÇÜi ‰¡ i/œ*³Ë4ÉìÇ2^÷M{äËÒÐ…iÚ7ÞMÕ@®êmâfJ†*ù0wjÝ¡JGÍ€fn˜Vtj[„¦Ä0‘˜ýšd ™oÔÊUM‘4ql+4©ÏeÃ×R&]©qáý€ªH/µlKVPkv;v¨’7¹íHÑ”cÿªD_©üÊÝØèÚÕÄ^îwXbå|ãChD%ŒYR€ßÞ‡¢¨ßÇá*ê#ZÔ?ÞÇQ׌TÈËÑvAw%58mýý–þMŸEÞxæI7Õú\RƒÅ馱+¼*ŸjñÁÎñI[2C7}b«È/†“¿¨•?} j)yø†ŠÆøöñ3³8Ö>~Šj¤âåùçª\Æ/Zím<”õ+Ͱ2”ƒâ¾zÙ4®0E=¨qÒ0v_¨ÔÎÆ#øb¦Q»Æ¯¨QÙÆE±”ƒŸ•/œ:HaZ\ÕÊçRʸà.†EÚ|ƒq/jKãZ_ª¯S¾å㎡®FvõK0½|çÑ Åis*bŸ´cØ¿t.À*ô-N–YG5ºyNJ½U|¯ncUMQÁä£V1çßž¶ZM 2w{®êÚ0Ù|úýcÝ.T—K MG ïÒ¤u©Ñk¼`7@uaÁ$u#UýÄ8²êËãÝØ­šA ìáè&³:—³Y­aƒ{¦wíÆ¤›ç¶â¯hÂWy÷¼XùU?Oû™~@•oû¢û U¾E,¿îOT™Stfèshøë’û%µ2:箋zºØ­Ü»Ñ°6,3÷€ª|U˜ëî%é@/‰žTm,èÞV•Tq8d îæÛÓgS'zƒ I¿Nãå°Ý÷kú…Àc¤ØÄP¤KRƒêXèf6MBÁ[¥'Úâ_¹{«wÇÎím“¹ŽAv¯WwÌFžq“5‚ªè=7™Úˆ­º‡­;¯™#Ý o;–úî¨7Ù tg^7ð÷žÛÛ%(ÐdwA€“qK.A„¡ ü!xéá‡vDÆà=B¡á‚Ø£í¨Œ®z £$,<¢™.©ù\¤ñ±€A'™ig6j­23 äZÖ"ˆõZ:†±hă£&ìýµ±\ï<ªuy*cäYÊü£Ó–²A„‘lA<|È(wÛcÚÁz•[FÅ <§[V'Þwü‹fT>ÊÞɸ#÷–çÁŒà¾¥weü?jÉXs1nôV=µÊ‚ªkÄ£çžÐ\І$RºaÖzV#¦ƒå™McmSv$êh!Â Š¼!NIϲÈôà d"&Œ–ô\fÕ0k=Ÿ£;q˜r>Q³#Pδ¬ŸžšaæHx^™É¥ç€çŸÔRÀ…=G•âá9*æ±Rò9ê¹.±’8€ž³: L™¥\àî÷´šŽIžRo©p«ìé95›*ò ^jþ&<Ëgæ×” T-ŽÉÂ=xrÆó‰êybxÎqOÉ/ü¤9ÏaîRJÄŒ=¿¹Üï=ª|!ž%Õ’!žIÕÏ€ÉLf[µZgd­ˆ ‰]fms ‘à‰Ýì¾iÏýf™1Èô2=œ÷)œÝ±ê9f ñáµxZëB¨™ê,#ŽiãÉluE°yÂ[ƒ¦ÒäLŠk46M‰ó#1Ô“ë.¶­ÔóïêNÕ)EoË22òLãkÙJ<ÕˆÇPQÀrÛ£VÂ+J°R/)(1ø½°ê@v$ú½2A½QVS°zAwµ·7š§çü×]9Ÿˆšîm¿"uÂ1Wz=feìóüe¨ùWþÅ_õAK½øùàôñ¥ÁÈsõØ™t8W˜ä‹z_„"=Ãs¡Ò‚³8-fÓ{}½S7}XÝK;dÖ„hÁYY¼è°¯¾ãLç ½d×q™6{Öù”½Ò÷‚ÈLö¹_ôºÎ¾§lœæ½³Á9êå˜Z~»{—Æ‹0ûz9æÁ”ȹî ¤œ›¤ÌY|s}#•ŽãV+#ï»ñFù,Çl›—Zz9f©œ ½ó`.£[UÇýu BÞƳ±Ûnˆ¯oîÆŠ:™y4h¦›ÏjÌâ‹¢ÛE‡Ü«&i;©‘†uÂ+>Çl€E/·îFZð¡rúî Ëë1›×AÓÔDv˜ê1ÕÃÝ B³2»KÕMOM£’ÖiölU·`sôj7r屆Óë1uHðG´•÷Ê‚ånOïE€*Ü»®ã@h“ï²ÄÑlßõc›ê15w–¦zÌ=°Bøô¶zñ"ÔïIS=fÒÂÈÀIšö@E·8fîÓ$ß»ßcŽ(.LßH=QEÜÒ 3‹-áb©çHGˆ^˜V»ìžÚæA÷æä“vï’Ÿ|W ]¸WuØàÒsÔ¢Rü¸w©~u*25Êœï'UF^´;²z98]îìªJT_ÒÖÆŽ4ÖcFÝ4î§Z&}_w¼5,NwÎCu÷ÓxYWè麓¯ ŸqY„9)>^&ó=ÕÖ35³‰ªg1Îz\Ït¨Í3%Cª÷Þô„‰Þ9³,È©hî>¥]4U‰Ë23£ùMìž½©ÑcÈžá1Sʆܓ@šnŬöDQUÛe–L&i©gO8iö—Y3&¥jàR×Wú‘|óäVÝhÏôXÕ¹;æÈJcÏgO£©qOµ©]Ø œé8ÍÂ7&è²+¾üõ´^/ýõÌŸNKä7=9X Ó5=¨Õ¬˜d’Ѧ7²—LDjaC›’•jX"Ljt¦L ØÅ3žZeqào˜ÕÚ ¤Œ=sªf4“—Ì®jáž-{czŸ9Z3ƧJL-JÉSªWmZ¯ÍD:XË] ÂŒ±.ÈÚzVYëC˜UFâÙªqp3ÌM««€L4Ó×EMo Lqki’Þž×øàÁÜ9RåE#ã,Í´lºÕ`½/ó¤|¯Cî‰{]™îgr_«U¨œZ™ŒBB/P' ©rÖhAK#€RƒC¦(êa½áh´’zÉÂÑ’WP²¬AË`ÊTú ÅË(§cuÄQ¼¯ŸÐÕÝk,´v¦Nu‡ìA, `­Æ¡³u¬çО2$•Yò¡7,Õ`Uˆ6•—©rD žñb¼ºDT]xÊ!–j«½JEK -!à…,‡.‘ø#Öº¨ƒ»M…˜ZÛñ’™#3^ÕËjŽXwÉÊ›³JÚ«s´­ŸåC¬à9v¯uñ"Ÿ³nÚ Ì¥2€µBº™S!¦þ‹¯ÕkŽ1òQ±àuIs'ÂÚ%­­Æz}“új¸e¯:bñÂP–Iiµuei&J©4¬€©íåVj‘´©S»ýP³àe[Gð(¯ìR¿µ^¬þÒê|¼BL­¼b‘é¸e¨3Ómܲעic!nÙëÕ4ZÂbMÖ´©¡…B=–½é+Bé(+ã´Œ›v,žÓ2n  Ø©‡EÒ‹ð´°{› õԵŠôb>M«Œå~îA Wª©ˆõªÁ\3?`¯,ÔâoÔjxõa®ÁëY¡¨‘%Ükµ¡µ.^æ˜5tc+!³š"¨„dµ¤–‡cCñŠÊ\èÈöªKË&õà=Ù†`Y,+ÛFŠØjO† G4I~Yl£„ˆŒB‡•¸ŽBDF!-Ú'!"ƒ9u#?……Ò6“vtdŠf B@&!«Ùž„€LBEmœIÈ$dóxòh!”BD&!k霄€LBE÷ËIÈ(”aó BD&!ÛU'! £P±<æ(DdÒݬŽÈ$´«q? „ò¦±µA†À$R´y’2 …íB'ãÈ$.oΑIÈ: &! “œÆQÈ(¯Ï<ÛnFÌ(CäñBpZG! £P6×i"òx!3ô&! :,¾0 ™„âeÂ92 •ËçäÈ(TÕoeL"éò82 Y»É$äÑBºIM ¡#ƒÐ±Á1ˆˆŒB¾Æ Dd*3ÁQGþ{„´ÓyLG&!¸D£IÈ"H“Q(Yê(DdÚ/ë€#“ź'! £Ð¾] G&!óFF+/½#£P¶ÆQˆÈ$dyÕIÈã…в= ™„¬‚i2 YÄ}2 UsG! £Ðae7£‘I(]ÖoG&!kNœ„€ŒBÅj#G!"“P»~½DF¡Ú.û¥#£& æq"2i kþ™„òeÇtdª·2ËðH´2D-¤™æY‘I¨^V]GF¡T.vŽ#“P»ì¼ŽŒBZp0ɘDй÷£ I¨^AGF¡gJ¹ŽLBWKÞ‘QèÈ—õÄ‘I¨\_ ‘I¨Y}2 ib¾‘Ç ™/< …*‚.ƒ‘Iè°ˆè(d² ç$ä¿G¨3ŒBD&¡|1ö™„Êewd2_t2iî~Ú L"á² :2 iMö4ÞŽLBšÆŽŒBF-: ™„Úe…sdR§sJG&¡t±™„Žy'0‰”Ë7çÈ$T/Ÿ#£¶G!"“Q…LB@&!$F! *ãÑI¨]VpGF¡¼],pGþ›„âÅøpäñBF”4 y¼Ò ÏB@-¤…•“ €I$^G&¡rYt™„”°k’1`)ùbÇ;2 Õ‹ëèÈ(T·™…µ#“P¼l†ŽLBid‡|w"“Ð~ñw…Ú…‹¶#ƒ×!G//Ë—#“P¾,_ŽLBu^¾Œ"1\¾]GF!mÕœdL"ûeº9òh!-N˜dL"ébV92 µKÑ‘Q„0£‘Qè—ÕÛ‘IÈŠ_&! £йF!"£P5§QˆÈ(¤DÓ‚ãÈ$”çMžÀ)7´Æœ2…@d6 …Ð/3 …´òh’0‰ì³}Ú‘QhO³ÁØ‘I¨Î£Ý‘QH«[æÛ&2 ÅyQîÈ$du°“IhŸ ÆŽŒBZå4_‰È$Tgó¬#£PÙæ…¹#“P˜-¯ŽLBõúz‰LBí´íÈ(TËCu`Ñ î$`©šœd€ BJl;}Þ…‚5qBD&¡:Õ…´{nz%ŽLBVY7 y¼P½|»ŽŒBZÂ2_‰È$”o™|»ˆämÞN;2 µùÕEÔœ>oGF!ô¾ŒBD&¡‹«×‘Q¨m×÷FäñBQëp&! “Ðüø-?î×岂82EVjœBŽLBñò¶™„Ò ëÈ(Òœ®ëÈ(„’´QˆÈ$TgO©#“P»¬þŽŒBi›÷ÚŽLB`…€ŒBÇvYi…Ðb: „Òf}íƒ#Ês¸ #“ÐqY´…B˜Ã…”×gz:G&¡p»È„ÛU$^†Ò‘QH<Ú8?‘Q(_L©ŽŒBÊ71Í&G&¡zÙ„´$hž¼ŽŒB©]l GF¡¼]>(G&¡}J“ˆ•fN2@F!m¥›ïˆÈ£…Pl4 …ê> ;2i ò<á…B¼X\ŽLBå²:2 )aÿ,Ddº%tdŠ—U.?(JˆùZ%БQh·^“QˆÈ(”­Æf0ŠiNŒtdÊsb¤#£PEmÎ DdRÚÜyˆLBé2Q„Pé BŽŒB1]gGF¡æ@OGF¡k®¹#“ÊáF! RB“ùƉŒBm»ìtŽ BåšÙíÈ(÷‹eâÈ(¤éÐiœ….éHFëßEL"Çœ‡éÈ(ÞÕQˆÈ(tÍŸudª³®:+ÒBèy£pdÒÚIÀ(’Ûeò;2 WØ‘Iõ`£™ú¡º_¼GF¡k¨¿#ƒPÛ@~ 92 Åz™×ŽŒB¨V…ˆLBÇåé9…¬J}Z%;2 ¥Ù{ëÈ(Žù¤¨ŽŒBŠ)“‘QíᣑAH]ÃiËéÈ$Tç-¾#£P,óTéÈ(¤|™“ €Q¤æ¹Ð¢#£P;.gs92Å}Ÿƒa™„ò¼ŽtdÒßùJD+”ÐÑ892í)̦PG&¡4ïp…öcžá™„Ê寅Jž5™„êl wdjqvø:2 óFÑ‘AH)m§O³#£ÐüÉåË÷¦LëezÿŽ BÚE<¥:2µë2x–v¡Gáôë;ãàŠÚ³~ Û~÷owÛÝWᬺ“X êwùn&p:‚‰9xÈjЙ:óÁÀ–˜‘QAÓž¤ Íy$:1Ce“tçnpž‹“ÞÁÙ N 2ÉŸ 98)D§’¨~T§›`AÿÉHᇌ §îœ¤›”;€Ú}7‘c’p ÐÈñÊ;âÖv¼%´Ý¹,œ8@ëñ1;q€õŠƒ€Äȧ4?€¸´÷¹ó(w,x œ7@ ¨Óq/ç!Π¾$ÞyZ˜H4Àl@ »×Σh³ÖªSr4 :ql' P.\|AN G<`çpÖõ†ãxžŽºàÛt|“/A޲hÕ/x!œ5@‹… €4@ßLi€úía<½IÿÙ¦s„´¾™šÈ Yœ2ߤ|@Xª5@}¬.ÎÀjò“5@KÞÁ+@Ò /à8k€Vꇉ5@ üÉ@Ö Sà<ªAö ¿zòkÆ47ùÿp÷Ë|”U=Y¸Ñbï: €#o$óÌb'X"´B`…ìܱ`‰ø©ÞdX!éð0%ÒèK„'$xkÿ ‰»UÎþâç3x§ýñà{èWÈv8«*<ß%HÂÈú¢{gè¡Ô½,‘Ú&µÖøÅÏÉi’Ñò¾Bôø7ÄMÑñ¾DÂÀðºÅ%r0äãýî+$;M7úÝWÏôFö²×NkÝç+$ ´•/€¸ûS¢_|…íæíâK$r– ]|lÎhÎfñ%â‡Ó³ ü!5¸† (»ÀWHmÚ÷ ñ¨={ÀWH)Q6n¯5–z[ÖÙ%â ålÛ^!{á·È®í%B¢Uöl/€ÄCc¼c{…ÄÆYË^ì%’œ³ÜÂò š]Ö @£±tF/ÝJžÑ+¤:Y+û¢—HdÔ›Ï+¤Ðœó^æ%“·2¯=¿wˆþã":AÑÌÎâ%Bß‹WÈÎ#×Ù5¼’óß²x…DOb±x‰DæÔØ ¼Bœ¬Ì{—Èæé´¯ ‘>v?øY#˜'l^"ÑÏ$@ð ©ç›€—† À~sˆ 4ÿ®ƒy3î É…³‘½¸K$xŽ­¸+a§·½w…$8 Þ=»bñ¿Aïì '1õ±øY#åÐ~ºB¶Æo‡Ý§K$ñºè=}h?ÏÔ@çéáÙìl*]•ÙIv”.€âdìì']"žÀdç Ѩ?®ŒöÎ%<'‡îÎ’3SÄ4¢WˆÌt¤OÙl¹B’'‰ÙF¹Dp\š÷G.€è]°«q…rÏzÇâñ+{WÈF¾dï2\"äÞó&âj§±Xá ѸÈÁÓ[ …ñdo\!š EúÏúW@òœ&ºWHöÌ6ºW#o÷[!<À‡Ý~‹Ÿ£s¦£‹o…(›*4ñ-Ï,³=o…÷‹Øx·B6²Ñ2x²lðŽº¢ìYÈ£°Wn…T2z¤i‰‡Þ;ÜVHÉÎ¾Ž¶´rø‰RìJ["$ôó¦´’ý @ö¤­½1VÍ–´%³:¼#m…$'fCÚ ‰Œ^³×lÄ¡Ò –‡?÷ƒ´Øf¶Bt§@]fK$:¿=úÇHÒƒÆíÙ>¶Bj?{+ÅÅ(©ñ^¯ 9º§<üù Ý;#â+ Üzf[í‡ÓÚèÊzðã^yKèµZÙvZ­ÄÃ'¬™êÁb#ðL24R-ÖáxÕ ^­À6ª²ù¹xì¢Z âø1éÄ&ª%â¼Ñì¡Z!Õçd Õ )~H›£–ˆ'/ÙÑ´B4øÊĽÙú+Ä—|oUZ"¿v*­ó$Aô ­ä‡*¢iDgÍgÒÙüd4 ­y#™…Øj}Þö~ žÞ´D‚ç÷­hhîehZ!ºÇ#½6ŸrøA©ìòY!9zQjVÈÎÌ¢÷Ó¬ÄÃǼf…Dz™ÞM³D6~Öl¦Y!ÁkYØ(³BÎSFÑ'³@tÁo¬8°ðô ©…_»dVHñ#Ù$³D6¯ @Ì ñrSï~Y!™ÑAo~Y!;Ïðó¶–’2ç7»ZVHä9MÞÔ²By”½§e…lnY°¥å!b©*h÷6“¢é<lÀ.“â•dÞd²@Š×aY›Éõǃµ£½Åd¸ïë-&ý<Õ`ë‡>_?{¯w`,Ðxª†7`,ÍOJ÷þ‹‡ˆf}@×ìí D‹q¶6»/Há´½¯bž|óމ²O¿³ab¤ž´GÃÄC 0rÚÛ%È©Ÿ‘¢¶¾…w/,yÅ \÷F‰äY·ÿP~zä@Y´ÿ8xÚ ªö¯?FOkyÅþC$Gžª}’V?@¢öµk¥ÞYG~õ—ªð‰*²>‰ªŽäÝÏ'ÄÒ¾BÒîíàW^!Z€Æ1'¯O—;Iñ ñì¸/+}`Å:ÍðT<«[!…=$Ã]‡ŸúÕ“ ‘çÖ:wé IP!Uè ‰ÕëÚÁʹBü\çÛ\!ÛáÁzd>D¬"½A•ÊQ†w–ºÛVºBŠŸ4çaâr$&Hk¸B²ŸwJVÃ2T²#¹@MFçê[!ZØ  £ðؼç€<} ¤ê‘g8ƒo…hâžÁÌ„þCDœ/¤ÁÈv·Bž8äüs+$û±·¤Ÿ[!{ò°ÃŒ Y' ^ÔŒDŠwZ€5g<ÙÃ9sVꘆ0ÊÙ“GZòƒŸÔ‡F«ˆWVH`’Á)UVÈæï„Œ* ÄvaHX ÚGd¨KÀáæ>@VH.¬&È Ùw¯¹ÿÇ ñCdœýb…ƱÈ}±6¯&óÅÑ;Ǩ“øb…ôS.Á±Ž½×½[6|…ä‘wHbk•S ¬   fùö‡À–9Á,ðРtCþ )´ ¼·~…d?F”­õ+ÅAo{gý Q§®ëWH ¥ç}õ $´Ý]/t§¯=5N úÎWHvŽMÞ+$±HÅÛ·WHàÑ¢Þs½@´|gP±åz…è>W×+$ìÆ†ë‡ˆì4™§¢y+õñ³ž{'õCÄJq‡l¤^ líêËí‹°bÜ][²p‘±Rïµ>c/ð¦\ïô¤$]L?¾@†_,¥}îúµ§Ž|sålC²ìȲx°ÿ™¬ØêøgDþÚ÷™÷ñ‰èowßh·ª¥øçËww?yñäG¿ ¡Üi3E’—üâë'2w ‡&&-g’ôÅ»'¿¾ÿûºûöÃǧÏb¾÷áýóí鿽øç'A›ñäÙ^üìÉ‹< &£¿ø—ŸóúH% WøK¿ÅßþôÅ“_ ÿ|yûÊì)+—xyãÝku÷.¿ÒŠu=ÓÉnÿÅ·Oe©Ì©„­Ý¿]Úï—ï?ýá»õѳçûä¿õ´â-Þø¬¸Ö8§ûÏ_½þæÓ³ñNÿzÌ4endstream endobj 195 0 obj << /Filter /FlateDecode /Length 1534 >> stream xœ½XKo7¾ë7ä Âu¼[røâÚ¦@ŠôÐDEQQ/¤•³­¶´JÀ?¾Cî®HJrl Q¬ƒÅ×7‡Ão†ºÒ‚ ©ûtÿ'‹^nÌ÷»“ÅðÇÑàû7Ò`Oa©eÃÑlÐ.aCP¬ Zµåµr8Z Þ‘ßÊõ¿YÎ9v1M~šWYN * 3ÊEÒZf`°a%i6Ù_£_ѨØ(ZkÐØh: Œg£pŽàñœ\]-†9—…Q¸¹ïȘ¼Z6ÕzRÝ4ã,ËW’’œVkÎ;¤–ÄQZ›,— kÉ5Šjz^¸¯7ÃPåLyªŒRXŽ^FçïÈ«1ùT•k#­è–â®./{NÎ~®ËëåjSMø‘¹gãlôæ— ĤTŒ’ ©A’Œ ‹ I®   1YH)õÔŸåæ¿1™¯®Ç¤YŒ³‹]“é,pºì€È‹Ð=Ù®«hý$NÏqƲ¨õDxÁ3m#wr¦T`ª TA`úoÊÞ—'ä1wF1r§wS€´ôQÜ£H8!{سBqa„Œb„’=Ʊւ=ÈþÄ”E ¬ i™u÷££Ì“TÊÒb×#~bÊ2‰oám‚—èø&jS âAÊ Q CŒ§óóóOÆœ@Yz §t—›ú­,Â7·È-~+ ÇMG!sÚ˱oœäyž=õ†ßÖ×ËzV„E“Õ´Ú­ë’B(°I—ÒZrs,ö FÓ—j#1 È2¬ÙîÚòBY¥ñ|e”„BSÍ(âËöä dÀ@$1LH<⤠,öÒC5P_Fçsá…±õô nv6Gï3_Þ")K06¸Q˜¾4é+p-'»ÈéGgnÔbùIY­»~Fšc`RO¾‚Ç ØÃZŽÐ¤ìVº­Üø•˜G©Åþ_hŒ–ˆš¼ü¼‰L ‹°f½Z¸éÁ:íÈŽÅ*sw©È4 Ì{A>Ö Òj5šŽ•d/ç¬w¶©7½›Ø>n½ìü dJ}í½ 9Gܪ³§5Ù ~ÆËŸdÁ|ËER IÙ>„B¶GjÐ'Ñi]·¼±p¡ÂóÿNkIû›UuÙtO9ÊÛÍpÀIŒ¼õa¢€ãü²)Qñ…Àå˜~É NÁ¥>zºWàÁ±¹~©“ØH©µ‡ˆ5ÊnCS¯bm.œˆ‚ôÀÊÛøp‘màõè°qÛFWÖ2ÀÓ´Ò)˜âŽ©5‘⊣\‹B(jý+öYþÐß3÷ÌMôã)°6ƒn¶ëm9Ú·þžOê®@õÍ­kö¯×»}&wÚ¿CEI…,Ÿ*Šï‚¦u’¦úÒÞé˜]Ùì´Ln÷Yùtqb›9Ü·…À´AÝ51e(N"ò{ÛDÂû÷žË"œÙ`€*cƒ*ÇžÛƒøªÛßKœò>pŸz@îИà»mà5Užàññÿ›È£N#ïøÑ«¯»÷#ôy1ös]žÞ2芢?½¬ {%ÀK;‰s_Ùë™”iö IÑ銔‡ÙÏ KšÚÖ«›VK„¨}^¥ZxZ8ë¾s“ä¶²žïg•}uÆ=°ÔPÝ*+ø£hVý÷c*+<Íy¹iz S©p¡ž!e‹Jrä‡9å²A¯®øµN½{~OmÒŸÂA黬>N]²¨V³Pè¿ÈC\ùÑ™«Ò7o[¶Go‘í²¾ÝV}åü]?×½uŽÜ¬gŒ‚a46‹KF»Êú3e9½–"λw&ÝO7ÕåÙ ï,ê=,ß_Ž¿ãç(¿Ïendstream endobj 196 0 obj << /Filter /FlateDecode /Length 1065 >> stream xœ½VMoÛF½ëW̡˄Üî7w°@‹º@ WEVŒ¸’ØR”LRv_ßYŠŸ¶Œ¸‡‚ îóöí›™GÝyS¸O÷»Þ/ˆ·]Ü-hõºŸõÞûi¹øþ†)ˆ`C õ–›Å9…z1Ç1¡Ì‹ ÇÄHo¹_ *‚å_!õ,C,µË[f‹[ô¡ ˜ÆDÑ5Õ!ˆÜ‚2‰²€`"yL‰A§Éõ:ˆÜBS­4jòCDœ3lGÍÁ]sl jv“;Iù´ü)2ed$ZèžQU7ÇIöžç¤ù1xŒ…2Ã1¦é:`10‚Ë¿ÓíywEÝî‚O"¦$æ’{—X+àÑ^ÕM¾OÈfŠIЇ[µKáŽx:aé#cª™QŽ¥0ì @ƒH¶‰ ¬€€!Â… YIC‰ |R TRq Úbi s½X¾½ElŠ&%e‚“WBI3 ) ¦SR:=µbÄ¢=ü#ü±²Y¾nVh“7a&1*íC–6)¶‡ÍU¨y<ÚÄߤyáO¢µÅœ,oþ¸ZÁ%Ñ{ÅZ$þ’ƒ¾œÓ¹H±2\Ë™äD2.È×%ç’h6K•ŒÂÓjšÂþÉwé—Qqö ŹÀÐ"ô,¹2æ©ä‚ã4î$ŒW‰ä‚ÓI>Sœb&ÜFDg ˜h31*ˆ ˜:EÛè ½+ã3é æ‚Ò9¬Á F6&§°Œq¦Õ{±íá¯P€ïžÙé“ýhæJ+‡9k0Š£´÷?)gTšÞ ãÞ ]s˜IšYB5uÉ™ûæÝ††Ã]ÔØé*ëÝW£zêÒÕ}~H×–Œ¢´è¶9g» Åw! zY8IÁÏÂ=iÞf_'µ½[!R¶Ü6»„º n#úi¨®¼Ô÷ RÛô$ìz=i~S¥{»B6­4Ðê$JúKŽüŸót[j›uEÒ22b J[ôVAØ©@E¾OÈ{^ùw •mãÿS¤Ÿ™ïíˆ_çåÚŽC—äu®Ñ™4ìè‡cð±…º±EÚä÷v¤RŸ\™ÒÂïFö«ËHƒ:£&ýž“S§YÖšHXä¥ÅëC‘øàM~X¶É/?^ÿ~u™ê›7ý©8zH«2/·ÐHƒ1þvö· hþ•VY=2.l]\›¬~õź&ýjs¨Fœõ çU=ö‰~e‹ÍE|¹‹=×ùY¿°hö5=_G:™tüÅ«ò@ãi½çt/“,ìÖ–Ù ùÍáXåÛ]i°j›ü!ov‡S3ªê*æ‡~Ës´î{^Z8¥þ Žc^ÞåÉ3³Žo wýZ TƒÑ…ðÍLÄiï¸{³;ŸáŽ_öƒÝ¾j®–‹ðùRdäßendstream endobj 197 0 obj << /Filter /FlateDecode /Length 15836 >> stream xœí[³Çyï÷¯øŠ7ÙHÈqŸ©bªìDq•ʹ„”/D_À$DA(„,Ë¿>ï±{æEQ$ƒà*쵟o¦g¦§ûíÕkoüë-ñøö积Âíó‡}ˆ¢ÞìO_ÝþîéÃßü¼RŽf¼=ýÕƒ~$ÞR‹GèýÖg>¬·§¯~ùøž½þO>Ê™¤ØÿçËçO> G¨#Ž6_]¾úâIôŬo¾|òOOJ'Jí|¢ÔÂQæ “=ýìá1Ö'Oóð“§?cpÜ>ÿ’ÛG9Ƹ•6ë1Ó-ב8niúzÜ^?¿ýã틇v¤Æí÷ÔöŸÒ¿¡«ýû‡Ø;]@½ÕêÚíÕC)1ò§\yùð‹¯ –’J=r*¥9”OÔRÎÔHý(éL¹r¢r®õhñD-åL ºÒq†L81÷×sºÂõuO>Æ~›Ç¬™nøéÑÇ^èÓtqa!t}ôáÉG¥—yŒò˜ø¯5­?ÿk~l[ô×ÒÓ‘óc òðåÁÆF®Ü`ú“šùj)=¦tP#ä‘|©´¥\¨žÊAm=Q¦œ©:ݽ~¢\¹P%å#Ï3eÊ…ête£œ)SΔ_ѦÎ×ø ?Œø©ÄJý>I7¥ƒG{"=“S8F¢/’Ñè‹"_Ä£ú¢¿3ög¨ŸÕÃÑÞ”FIG£7vŒ~ÄBïÚ7o÷CJ;rË·B¯kŒS›ýôÅ«ç·/_|ñéóÛg/ž}þÅo¿|ñåí“Ç?<¡F…ããóg¯¿ü䉴l߀įµnŒ£»?þòÙ›ÿö$QƒC©tØß½¦Ë£–P£ÿM¾õøìå¾ÈŸñüÙ •A%Èy>ÿŠÁE¾! ¿ ·h(èI†j]n-i?}ö£’@¢ò×#йµ9è(òu¤6L ?`Q¨ÇÑ×& •!‹’©}ýÖÆˆÜnVJ< õ»Q»3ôâ%Vr=jQe‘N5"Q?Õú1IéÔÞ ­éíè‘Võ8ô¤*+mh_cnq¯EG”8C–&Ó]8¢fÒ¨ÃMî4âWUèY6VèäE?EO…¾×z(|³YɃØM0)ŠRä´6ÒäfL¹ÉÇd¹a³¾Ù­Ñì‘U¡™›Ühpšzú<(Óó‘¯'µ”¾NSßRí¬>áˇõ+º-JÃY‰]ÜÝkUÝIRêLGM¢ÐÝæó´Ô³(ô¹ÁµWž¨X©I\[;Æ…fV:U­rJzàA†”À÷Q”Éo•»E…:'7¹Ò)›ž|ÒÃc…îz%R‡®|dêmI>iè‘&óŸ"Pï’‡®})Å,7›”¨})ÅBÍ ûUèÉ·¢ÊäêÞEÏDmç¾Óz&ê\‘êRU®*v™£I v<›s‹K«‡†=¡•*o)t“¹ÃBcx…:M´­Pô¢‰•¢‡”¡-¦'®·"åÎS*)6$‹øÀÔ º\x¢¾%-NÕ:A¢¾¸}Ü{¥Å‰v¾rêÇIz [e…fÚ*Ê Údº¥z`- HÈŒ’’©wq‹3}§É5d:à…§ôŠœ¤ %Z'ÈÜvº4õk¹’hRæ·’¿;™z79¿É¹irî]ß`R¦49Ó‹Òõ\¤(Ag7Z‰¦‹ÈÔK§*Ô½"·§e;r¡Ww²¬û—Hß"F¡"×Yh†+ŒTën%Gmpö` u.ip¡¤ ýML5‹>ªBl¢$¾%¬P³*ÝÒLX/J >")]³Tè¦Hƒé¶éEzQ§(‘ÆlV¸“óÉ©Aj Úbz·› ôðD(ö:ðû¹5<Ê5ÔÜøÙ·Ì¬*Ôöη«´¸Ò-¨¢>+t#3_C¤2@ZL• ú-S5õ\ô¥ÅÔ—zWeJ‹Cµ[Qç*$Sï*Òd*eø%$%êHO¥{“&sOÌò©F—ÃMN4郠»rtQª=ê÷ÒäDo¥ õ©ñcˬD{4<ìr“5K;ßüe—ù,Q)Ĉ„j½¸&í¥iÖóY”d­ãIAÚK—_å8T,“ê©SºýÒ^:C”ëî™ëNVªL®$LŸHÈv?;õ-"¿Ç:xt:>}©Óoê4Isé‘é—ŽNÏM”Îg…wi.õA½€Ný*òah¼Ð±nðàÉ·Žž±Ì‰¤ÈdÓx¥ƒ-‹´¹t õùÛê ÑCÖ‰) êYÒ^~¥äìƒßSê;:!ÒmåU ņѴ8 NI¥–(]‹ƒÄCƒcÈI <Ý‹"%õŠihPÇöò“SM*U¤½4pN¹[3ÊÚxu¡ÓÝLEÛ[ŠM’3kux¨’kšE«Ž LÕê€F^Õ‰Bíà«à÷[Ú3¹á« *A…ÞµÉÙo /¥É¹Ù¥O±HÑ &S=)µœú|é‘Ú q3‹Ô¯¤Á4H̦Ê䙚”à 7‚¬ßa…Ji°Î<¬Ô¦ ¦‡jJÓê€æëYÑŽIJuehu@ÓÓ1²(ô®UQ²)1ir²E “ëšµ›g*¿µÅ4q™ÂãÙPEzNŽY‹šty˜d¥hq@ó2O„¬T­hîÖ¹ƒÆ³¨-æ*²‹ÂïŽ(UG}R¦¶8­=3•‘üf“’µÃÑHÙ¥ ¡D&ÉLu‘T<½KïÊüq®X‘é.ó-Ð&žPY¡bEšLw@Δ¸åÓ [õ0\ŠÒuÐÏüzI‹©CËX’å厪m•-\Ðp³²~jhy@%Œ.™‡Eiq° 1SOÑÓŸzÛéIh‹I‘ò/Ó…rç$%j'Í<ùD¹† CzÎY˪Ky&d¥hyÀŠ>,óHö 2>……®ÓRæù[L5²Ž½t\±D‰Ú@*Vº(U_ü,5Ie¥h – ÝË"GÎöh ÷‡¬ŠŒØ437\HI:f®´´ÉtNhÐG{z…F$9nÐ)‘®’¾EFú:p­ÈÕ+QÛµ:à.%¡ -hñbïG¡«ãQ’)–s¥§ÈÕLä¹GÚ˰´WÇ VøuJªè£ªYŠ®Rej£*F‹Zq—eJ=ÃJÒSQçÒ[­’¥Ð7EÆßÌ‹m²÷Êœ49h=“ëÌÖä`#U ZÈë%gçÅ W‘'ŦŠT,È™hÕó4,­¡OêV´ PùÍž”¦«µLË m1µS‡7Z;i‹¹ÊÒãt-Øêzœ¡Å+Q3ƒµ8ÛËH ]kqÒ²’*ή-NÖx‰Èw‚f-}9; ŽÚ⨅ õk-dè‘3õ¢å+úÈ{Õò 6+±sç:µ¨ôTô7i1Í-Ú-:ݸhJP…ºÌäkh6ÍäN¯ /’#—Æ¢Œ F+YÚ3¢Ö‘†|}ƒGÒí)C§RŠ®@H™Öæ¢ÓÕ ÉW›œý ÕÙ%š‘§}UôÉzÚ„Çí¦å7tª¢`jHJ°À^ƒ66h‰CÊÐÆÖé Íkrª:ÉZ ðbÐ.á“*:„ϪB¤ Ñqb66U1†47§6G¸ œªÈªŸ”©M¦QP{Ö¤žM¦„ BäÊ[•¨+2š”@Ó¬69ë ÖhYj™úT¡¾•ä"’3Ô·´ÉI{)S›µC–дB`%©ÒµBˆÕVf4¬j…ÀŠÌ1%P×’&s&J¤ÉEšÌ…Y…fÌ&ÊÐîWØ×“&—¡æ ­Ã‚6¹ íI‘!R™RU(Z"ðŸ2£¾»Òdš*ÔW¥É¤è‡èÕN"Té…ǽÐTHS^®Ê%µS Ïk=©’MÑ!²9"·‚KŽU)ªP÷2Aê²Â5œ68iO.\djƒ“®û ½E”¨sMKÉZýP×AL©Š¬mßÐošØv…—IÒbR¤O–ÌÆ]TEÜZÚVYoÆ`Eûqf㮨¢}4³q'-®Ö3wI•¬­aãN”¢#kaCB „¬%oˆ CäVh‚ÒÞ¶>D'Hír`>弜|TûÔj õyíëë"Hiýr¡£_îÄèþ¿Y£ûUúýdKd\î9{Sñò\ø©Ö˳óªb?_Rʼôa.âî'4«¥réKÓ–©»»‘b=Ç»ä4Çcw[R´Ÿ¬®MCs¸ô~ʸ¼ ¤Œxy‰¸PÈ—mfë¤ëeôÊm¿°ÓL‘ýN{½·_{b¾ ¤ÈȾ‡iëú5ÂPñe#B³ií±*ºÛúR¯ÁŒ}ï×€ÇëÏ~i„×#¯“”~[½<Þã/)¥ž‡h¯©×(ηM7k¤—J|žg®ÖíÀ6c°¢#©Ï*¬hg÷™‡«~­|vJºB8Í`¼zH—Yޱœ}"ä‡,>W®5ˆO§,ÈÊyM¹¼p)é<-³¢²OݼÜI—é•~)xÙ¤•·— ¬èœë¥/¶t^¶jƒ­æ†žgèÛ°Ê•µ^ó‚†ý€•<¼ÆÓJÓ«"V†)Z9ñÊЫ®XÑE‹W`¼ÀLªX•ÆŠ2^Éñ²4]ª½½PõŠW£Z.yÕÈJ3%X›«U]^}²¢e™W¨¼p6ƪXVŒ±J——ۺʳb˜­aµZÞ+t/¨Yi¦˜#ÇëzU¬0gE;Ÿïìh1ê>+º˜õE» ºö…+ºfòÅ[ÚÙ|ÁÁŠvH[’ÈÚývZ´°Ã¡km_ذRuåe‹öEâeÄŠ®â}ÅnJÖå™-´XÑ5”­Åx4-z`[¯±M£Å¦¯éXiz`]ö±·£ÇW†âöÜN‹G6„²*¶ÀdÓH‹a_„²¢½ÄªìYhoóµ,+CÖ¶Þe;JÍ[oÃÊÍ,èªÁ×Õ<‹äËÒ›05{|yΊv_³}¦c”/óS¶¢qYIí®—Û.`_N;…[ ©ùÒ<¶òÚÙ–`c¦\œ‹åÿ-wƒ]÷»®¡$Ë%áMµ.ÜI)Øn ú,—#SšNw۵ѽŗ'cG§´—'ó§ {vË *Óžø2‘x£UM$7šH™ê¹Å£Ùý*zˆUìž–ûµÛ÷âUŠ~ʽ1RÔwXöÝK}¥—ÅÆ«&5ï܆sïx[uuØÓ[v^ueY~Mžçò[°åøò é£ú°–·HÅO¿úÍ*‘eQrgÐöš‰©µÆË“ÏÙlz{¡­ëÄ¿ýÒ6\qO•e5PÝv¥kUÁY.Öô3îÞòv‹*îðölÞÏr¹:RÏ׌â^]p/¹[I»íf*GòÕ’îVnÛº[¥¹mšÿug`¹ß#º¯îùP»t›èÖPÛhVµm3~XI¶ ûá;tËÔZJmßX´÷d×ü¼}@Ó¿^øÚbàÊóº 1m±±v*¦­Yl'cÚм·:¦9èk;„î´mÈú– ïlÕ˶ ¿èº¿ä[/ôàíª}{†÷Ìt«×·px[-*cÛ<¼3«ûý¾”¹R…·ŠxŒÑ-[ßK¢7bm@é~ïñéþ¢oIñ>`¾l[åh£ÍÚÚâÝC½(ßþâFÝÐö-²œl¦XÛh¼/©¾ÕÆ[—º·%[q™§ºy;íÕeÏ=¬ý<ÞÕ nßóãHŸ>ßÌ<½èqlï·Zuжy7VoùÚ‚,Ñ6×6e1§tíd{¡öfgé+X¢eÞošVßF[«5Û ]›¯Õ\î½A[Í,ß›¸ÍJý½ÑÛòý^p³ýDß-æ•ëuC™½[kÓ™FÛ†öéîAµyMƒ‚ÞŠµÁ=¢ÚŽ{|d-È÷Fù0`o¦©cèÞoç7SÛc[òÓjƒµiOCwÍ|_¿$­­&uôñx'tçÏ#lè÷˜AáªXK"Ð’Óî§§ ‡Ÿô0–hàÈ…n2zê¡ð>Ú%Qx©¯ùKO6DXX‹âae0xòšÓà9]C"žåà@Ž2ž÷`+R£%ž iÑc±‘Öl3u%Kz°±o¥OôÉ¿<%TØÌ×OyŠE’p¢xÒ…ëwÇxfú›ç™l¿Ú35•7®±ÜM>wx6§Fô-¾S“ïë{§&ϬçÇvRˆ^iݤ]a¢2¼}8ª~U+”d%O-±¯A+O6uOÔ¬ôÓQY@jÚvÉÎP郹sV<ðè€ãY¬Æsžæ¬,¯Åã—Ü3]tµú–­Ü;ˆ·s4Œ³XùvJ5³ V¼¬­¼™'к͡;¥6ÌQ\I¶‚çè,íÖ£m3¯DÏvnOÍåäGödõô¨Çñô]­oó„õ ý”‡ø†9þ;çG}nhîв€#ØVÈÊ r"1jÐ3…Ù/tå«m;›Ø-Ô°ò‹“z|Ò”¡g“­Yw²Yy½’’ô2¨àQʬ[!;lÙÍ™YÌÈ+>ѯþîÁÃàþ­ÄWpÉjö»P’/MàN/­¬6žÒšSǸÖd/®]îH³`ßµÒüîûMflî»=ú¸Òš¼w;.OqxòMÎíÒxÚŒ—þBS¼¦5³ÖлÛE«Žv×ä‰~ž»/=2?•‡5¹Uãòôj‰ÓõªðwÚùmª6û¬÷­Øâg¿’ô†_Ú©ù°ã/6MóÖlÄãaM¶ÇyáÆh¸î¾„5»ùá{¸jݳ£>¤ñ^Ù¼ {Õ–þ{\,¶]µÇN_~ïñ•çùtƒS±#¯qš¡tËù±ÎópÏåo;Ïezzn¥5uu|šY8ãi“„§5yY6.T·N°'1.ÜÚe¢£3„ëdHK-‘Ö„I󮦥֤Z}‰áón±`Ùš™K¾OkòþK¹Ìð¹øQ¼  žmÓ®W TxèBjUIƒ »Þ N¥3ߪIغÖ-ÑÆ«]ÛР¡ÕÙª‚Ù;­É§¼¦5§-ìwZsÕt+­IÆÊ1OkŽjuüJkÒÃÒòÑê¾î©Y¯ »îííÚ±[ö{×—Ýâ6»mÝÂ\«Nå…½ÇkYyQÎån¶¢\%ñ*ÐWÙÌ»%Úb-#jÅX—YÕ½¡U§Û`nzqU¨Ÿrc¬v»Ë<ólë6Ø–íé\õüÕ²éªÕÃÛÊ[žë²ûªg«–%X¦+îòpv;ûŠ¥›àÖciçt{’ÇUÜÂ,Å­Qs9¹°¸lÐ’ÜMu§´\­ÔmËoÙ­Å“MË’Í6ilÏ–‹2`º¯›-ï±½ßléŽíg³Å¶‡œ‹ÝÍå3g[2m/ÚÊîmWçäÖ¸[ÚÙ\ºm{g ok|%h—}ÎY|5ÂÝbOöù– ¿6t–UŸšyÏËÎç ]?å–ÿÚMZÛ©ø¦„o$ íí…µ“µ¶ ’Å~ö6E²<üÞÊHÁ·L|»#N…ÚŽH´©xošÐ £OkíªðÆßuçeí ®Ý™Ø|¯Èwp¢Æsö&¯Säñ­ ®-uûÈ7‹Ö–çÚPŠÙ7³lω_¿sPso·®«Ö]›[1ø‡|Œ^‚~Ij².Iͽƒ¼6ÛøÇi®ûqÁªµešo ú®žoòÙ¶ßJó®­A6¹ä×î!OhzßaÔqèåir|×NåÚê_»™\¯èÞªïxßð=Ñ•ø]Û¦ÁõÓôÃÎiN³ÆvNÓ“;§9»l+§9mY»sš³ÙîÖÊiNû‰†ÓôÀÇÊi²Ÿ¯[Ñ–Óœ¾£³ršÓŒØÓœöC³;§é1–ÓœöÃ;§9}ƒiå4Wrxå4ù­ºršžÎÙ9M®Ã4là9Í•&^9M^ü_sšc8ã9Mî¾–Ü´œæ ¯ ¦‡™vR“”xÉ>p(J‡j®¼±G5Gñï{Ts)VT“½1U<ª¹È+ª9VÖÄ£šÃ~àxG5‡™;ª¹2É+ªI%ˆö·Õ$Eû¤G59¥‚G5WHyE5»Y~;ªÙ­ßQM}¬ç¨¦—wT“ŽMƒ7Õ¤9à’ßaAâAM2¯P7Ëd…üGÉw˜¨ÛOó켑'›w&©›G¹sKÝãX+ÛÔ­xÚù';k"Ê3Rœv¶Ô”ƨºýlïNZñ¼ªâi¬n?–¸[Ý~”h§ºÚJ’zò«M]©ít˜fV|ŒÓЦXĬ í¢;†Fq¿$Õš-{v˜ÍãÑ;ðÆ AÀy(Ž”¨§òà\³uï×5ۺؼfõàé53øv¯ l­°g¨5"è@^ÕiÔÐCƒüsÚ×`aKÚwø[z;ç›Uš;ÀØìïvȱEK¼­ d ÖùWXҭΨäÎ*ÇY¡Ëj[=;˜éñë_è³³ßÁ?•Æ1Ëû_‘1$’qþå®ðEÆ›þŠ P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @õS#þî‰Z (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ê?ŸJíˆéB¹ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ú>©2ŽxL 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À€ 0`À¼LGÈP @ (P @ (P @ (P @ (P @ (P @ (P @ (P @ Ôw¡f:b¹P®€ (P @ (P @ (P @ (P @ (P @ (P @ ¨oIÍXŽ˜ÏÔR@ (P @ (P @ (P @ (P @ (P @ (P @ú~¨ÜŽ/”+ @ (P @ (P @ (P @ (P @ (P @zŸ¨:Ž0/”+ @ (P @ (P @ (P @ (P @ (Po‹áˆõB¹ (P @ (P @ (P @ (P @ (P ¾_*…®ÿÎõV@ (P @ (P @ (P @ (P @êÏS©\ÿ½Ì­€ (P @ (P @ (P @ (P @ý8¨ÒŽØ/”+ @ (P @ (P @ (P @ (P Þ}ªë¿ó³P @ (P @ (P @ (P @ ÔÛ¤f¸ÿw2\ (P @ (P @ (P @êIŘŽt†\ 0`À€ 0`À€ 0`À¼L.GÈP @ (P @ (P @ ¨¿UÛÛ…r(P @ (P @ (P @½¿TGºÆÜ] (P @ (P @ (P Þ2•B¸þnÀ€ 0`À€ 0`À€ùk0)Ýý$þR@ (P @ (P @½ïT)G*ÊP @ (P @ (P ¾9ÕÚÝOÎ-(P @ (P @ ¨oNq÷óp&€ 0`À€ 0`À¼LŽáHý -(P @ (P @}S*§#Õ å (P @ (P @½Mª–#å å (P @ (P?ª·#Í å (P @ (P @ý9jŽû¬+ @ (P @úQ%…»´ÌR@ (P @õݨ’Ž/”+ @ (P @ú¡Q­Üej– (P @ Ô_“í.ý±P @ (P @õ½R5Œ#—3µP @ (P Þ/*‡#_þñÝ¥€ (P Þ5ª¦ãòK¦] 0`À€yט^ŽÜ.+ @ (Pß'5Ûý^ˆ+ @ (P þÓ¨ÇÝÎ×R@ ¨/U‘Džr(P @õ®Q-ÝíQ,(P @êíS£Ü9óK (P @}Tí(—™d) @ê}¢Ò8òå÷ÿ/(P @zW¨Ž|ù]ÉK (P ¾ ÕÓQ.¿ d) @ Ô—šåÞUt(P @ê­S#¶;y) @ Ô»Båq”z¡\ (P @}=ÕÂk½P @õŸMtçÞ-(P @úJj†r”Ëo/[ (P @úaP©åò»ž– (P @}ªŒ;7j) @êJõp\¶X] 0=f¦{×ÄP @z—©b¹®É· (P @ý°¨ÜŽš.”+ @õã¡ê¸xK ˜?ÅŒpu¶ (PC:êeÈY (P @õÕT*GÍÊP @Rª´ëªÖ0`À€y˜6ŽÚ/+ @õnS3ܯØ\ (P*Åt·v] (P @½T.GÊP @½mª¶»ÕÜR@ Ô_êãne¸P @ú ¨ÂÑ.?ç³P ~ìTJÇå‚]æûb ­°/?ã°P @½mªµ£• å (P ¾ 5Æ}uå (P?rªÄp­ ]Ì»ÃdZ¬]!W@õnRµÜU¨Kê»S½ÝÕxK Ô™š´Z»äß– Ô{KÕD‹ŸKòh) @½[T¡šÿ’kY (P ÞMªþû™r¨w‹í®fZ (P @ Õ¸«W—êÛS9ÜÕK Ô÷GÕtW -¨ïNõr7‹.¨w‹ší¾6q¨÷–êqý’yX ¨UÂÑ/ûÛKêmQªÀ d0ï3ÊÑ/iÒ¥€ú+S#´»9m) @½-*»9m) ~HT¥Jä²Â_ (P_Gõt7[-¨·EÍr?[¹ê+¨Û1.»Kõc¥ò¸ï—êÝ Í¿—EùR@õ¶©‘Žqù·–ê}£Jå:‹n¨÷—JíZ›lÔ•*ãíB¹êÛS=\ç¡­€ú!Q3Ý«®€úÖTŒ47÷ìVÞ*·»qb) @½[T¥¬\(W@ýX©ŽKñè˜÷šI!ÝÍnKêmQ©ÜÍ[Kõí©ÒŽyYó,¨¯£Ú¸Î.€y¿™îGkW@½wTŽé˜çŸ”ß ¨wƒÊån´^ ¨oOUšñ.®åR@½T§©©_(W@}UB¸M–êÝ Rº™–꩟=üëCäßUqú7 Ó(ò/^Ä1úËíõóÛ?Þ¾xhGJaÜ~ÿo?¥ÿ~CÿúßÏÿþ!ö>ÙèìaŽcL:UìüOReRê8 Ÿ*öÙJ;y°À?-•om¶~„)B¬ü·6S=j%e.¦Ú £ ýÿc”ÚÜD)ñ(”ŽXE©áH¬ð L™G¤sõQ(­tÖÉJ«Ü…Xéo Ý j±*DWVèœö©Y¸É³Á‚Ì¥É=¤£$Qb”&7¾Êðïf¥Wú°“ÿ‰ìÖ}H®“£¬¹R&Ѭ¹õ­åÎÿ8+µJ‹Ý.ÿVÉDBÔï÷,­mÔûÄHÜÚ:ãQµmô7"êwaò×j§;ÆçM! þÑVéŽÍ$JìÒÚJm“g8îE¡;®J®ÒZêAÜ$VJ–ÖÖd'Oy5·R(ú)ê†|*º‡½‹@ÍÈt7ˤ;¥Í¡ŽE§h…zbP…þÆM.::³2žº:Q"õãJG.-kGJ¼“ÈM.4e¨kq“ =î© =æX‰Ü‰Y¡ tÃhêÔ.JÊä&—d}$±Å/M¦ëœrUô6‘êÍMzð“/"L~'XáWå&Ó¥7=ÎÌüÔZ¦·DºVbû®ˆ’¸ï²B]+Ñ=Íük•¡®ÅMÎ#reH“3õæ —•¸‰ì²ØˆàS×z`êZÜä܂݋D}‹îSãšA;Fê‰}/RèÊLtRjFËE¿¤…´—}â‰z—´—z·$Sï’öfê"ð›Ä½].)S÷–æòŸÊPeI†µR¦Î•X¡®9T¡Î%ít`ý]‹´7»5¹Mm/ M?Õå1’’ífeê]‰.‚›^õSÔ»èå'…þ¥ªtY²aNJçNcÚ…ó8[¡•¤5´è§!½Žê[ÜâD=\;NѼ )r? pM¾,ÖõKkGͬDRá!…n; z‡ õ,i.=ܬ§¦vNQ’õ𢴷ùŠn4–GÔ¢Êäf“RìTêU‘ÛB·Y®¦6[*Þ¥k©<¨BwPúx¥ð3f…ÞÇÌ@]D&:'un¾¾z*Þ:áæf*ÝWnn®öØ*Í2•o&õ¢,÷ª…Î#%Ú}h±i‹©cé §sh“iôÒNÝ;]cKW;Mã¾ËMæ‰RšLÕ6™:Ÿ>`µÉt—‚2oõE}(­wNƒ‘R½1Ô¤ÁÔQ²žšG8Q"®¤têUÒ`$ºÜÑÎëTQº5¯óÀ ¦œôSü÷¸yôéªLž<5qÿ•)Ò9H‰ü–³B/p£Áßî'ÏÜ`šBt.¤(‡#¥Yƒû¦“BS–ä0ÙÆêAǧ·ˆ”hÏ{) H ÜMY‰R´Èº\åH]ÚKó¯u¿‘eÌ!E&! ¸µÉÑzÍÐJ”Ÿ£FÓ’€†„fp†”,Ø÷ùŒ|Ci@VdÒÑö’"“{ž1h{uI)ÊÐöŽî LzªæLÖ’€•ªG¦i„KV´_ͪ5AÕêWÁ” Ç¡ê@šSlh™T¡h“‹¤LkrÖ҂Ƭ!³ +ÒÓJZÈTZDÑC\J aQ›µê¢ug–*&h_f…zW’‹ÚK¨ÑšÔÛ ej“ƒÖÂ%4- x™^UéZ°"}á»Â…Aè:AîeÒâ>´G~ý¤Å\‰uQ¢˜¢$UhP–wÉY²BKZÌÕZQEjƒÀëmЬHÿ+R° U¤©§¤ÅåÐ3Ñ_’ 2'®4ƒ\BÖa¬H[U‘ú²¤ Ö)V®ä«)âBZ÷KuÀŠ,éi¡ØµÅ¶´-¼ÊÑÇC ªH´ÁAëB‹/Y³RôÜTÝi‹ƒNˆE–ˆ|ÿxÍ«çîZ°"d¡Xj~ˆCOÎ]RE&ÀÂkei1Ûerö寉"“[ÉlÒMU’´9³I'ŠÕ*4GjuÀŠ4‡&*)¸HœzªªÅ+v`>iQ%é§Ø£“&ëș߰¤ŠÔÚ%³G§ ÉK”¶d^#°µ6`EÞ_<üòÆëZ!Þ¸À¡qéŸnáöÙC¸¼MžÒÕÛl]þò6éifµ2ÍÛ6áoo“ [u2ÍÛœqšQ¸¼Í¹üF÷6›YÛÛäêöâm.®Ô5os°Óv;[›Ó–¾ÛÚ¤1B&ÝemR÷Ðs/k³ÚbsY›½du’–µÙé¶ÉK¹¼Íž‚ʼÍt5±­Íiú¶6u|ö6{Õ7nÛ›ÜôTjoÊ®ˆÚ›­oŒÙ›-Û »ìM6Qe@Xö&ÒÉ–½É¦BTëÒíMž‹¯ö&{jfº½I#êÕÞ¤†ëzÍíÍÚlVXöf­Ý–ºnoÖÌXq{³Ò)u5éö&›0znoV^¹)cöf¥?Õþr{³ÒëØíMv€Îî&×êu,wsN3²–»Is¼ÚËÝV¨lws-ÐÝÝäš6\ÜÍBw'Èírw³ðÂWEs7ÙÆmê(š»Y¨Ïõ;ÍÝäD¹êqÔÝ,ü¢èaÌÝ,eY¢ænn§×ÝÍ®“z¢æn–l…ô28iPÔòfœ¼(¸œìªKêg‰C‡‚åp²AœÕó4‡“G¦¡Ÿ2‡S–$êCšÃYtæäp–Ý;u‡“ ²«ÃÉ~“~ÊN¶•­ÍæpRÍäÞ¤:œì3K!âgæªæ¤9œTÚ€;œT^Ú™Üá¤ÂÕ®ÁN*uVZ&g–ˆÔÉã¤BÜíVó8sËvQîqÚ 8yœ´¼0R-NY:ª=i.'-uìö¹ËÉ3‘>*w9i¡e}ÒmNZÀ™½æ6'? 5ÓÜæÌ%ØPà6'/nÕ=s›“V®ÖÿÝæd'\ß#³9i!íÞ¨Ùœ¼jVoÔmNZÄ›·ç6gNV¨/›3Ó2sÔlN^›i6gŽþ:ºÍɳ»žÊ\N6Ô»ú§<£ó*¿éQÍåÌA˜eræÐͧs““·uœr““ wínrfz`j¹-“sYðËäœVrl“sVóÜ–É9³½ br¦iÆ29ù-VÛÖMN®ƒT0“m{½unr¦Q¬¹É™ø×ÌÛÉääC_79¹äRÁgж^\F'+Q?dF§ìÔèÉÍèä†Jo[N'ïݨohF' æ>šÑ™¤×|N.i´ÿ¹ÏIµ›Ëçd%é§Ìç”u£\ƒùœTªå6' êE¹ÏÉ{DúÜçd%\ŒNÞ5*ê>šÑÉHªet²’.F'ï,551ÍèdÅìG3:¿€jZªÑÉÂÙçäjO-V³9YÐwÁmNÞRÄ\NÙ®Òƒ˜ËÉKìvq9Y‰ê+ºË9çq59çÔ±e™œœQQÄMÎ9ܯt““u§–ËÉ‹iðr9§[ÖËå¤vêVÁr9IÑn´\Îi¥âv9iæišËIо­îrÎêr›sÿÛœólÎifør9Iл\Îiz¹œ$¨ñµ\Nn¸Æ]N.¶ôSîrêÏ¢Ÿ\NvßÔ~T£“Ýýp§“xÝédOEî§,èæ‡¬¨OëF'+ú*¸ÑÉŠØŒNÞ~œ£“ÝDq§“µáÜéd¥H{Üé\Û˜ËédE _w:YQÏÎ8,Ó³œNVÔ8v§“•vq:Y±³ûAôÝ5§“…¬Žª9¬Ä‹ÓÉŠîtF{ÜæäA\›æ6çÚ—]6'+:œ»ÍÉJ»Øœ¬¨Ëí6§(·írò×Ú~w9eÑ3™ËÉŠŽ=îr.e¹œ¬˜ïi.'+r‘Ëå<)ærF5ÎÜâä­æ«ÅyV¦¶·»SjçI1‹“•®­3‹ó¤˜Ç¹÷8Yió¤˜ÇÉJUŸÑ<γ¢ûŸ[0ó¤˜Ç)ÊídqnÁ,Î-˜Ã¹38YPó× Î³bÛŸ[1ƒó¤¨ÁyÌà<)æpžs8OŠ9œ+%°γb»Ÿ[1‡ó¤˜Ã¹w8OŠ9œ'ÅΓbçI1‡ó¤˜ÅyVlÿs+fqž³8OŠYœ'Å,έ¸ËyRÌå\Ê/þD^“*滼¦¼–;¯=zéyÍfÜÎk–?Êkö?Êk6OUº§™l„;å5«Å*w^Ó­¼s^s¨zÊkÚÙOyͤg÷¼f?®žfHú®\âšÝÒ™_×Lš¼<Å5Õã\iM7XwZ³Ü§5m›ýØ þ! lŽéƨ6Ùű§6[·ÜÐlÚêâØlf-¬À&5¯_›ôzš3ꎦÐÛÐ 6¸»¡Y¬Ä:Å5£ù%;®™üD+®YÌGXqÍf…ùŽkÒS×EèŽk&w"W\³ØêvÅ5óðHçŠkFs\W\Ó‚ÛÐŒž?ÚqÍäÍYqMÛò;Å5m·ì׬ö©×´-ÊS\³šk¼ãšË›\qÍj–Ã9®©öÇ×Ä5£æ×ÔŒîŽkzÚvÇ5mR=%6Ë¡Ol²s§yÈØtãj%69­ŽâJlº¼›îJ­Äf²-ÝSbÓöLN‰ÍìN©û™lÞÉ¥ïĦ÷öågrŠøêg†àHOlö«Ÿ™4ìºâš\ê÷W\³[?^qÍaÎÉJkòžªÚ’+°9Ì9ÙÍj>É lv] í¼&'°õÀ+¯Ù­#­¼f±põŠl¶d]G6§»‡+²iI€Ù¬¶…¿3›¼)¥ÑϕٜnT®Ìf³Ž´3›žµ]™Íb›[;³éÖåÎl63vfÓÓk+³É¹#õWfÓ¶1O™Ín/ÕÎl®çÊl&óWf“º_=g6}«ag6͸d6­1§Ì¦F ¿6²i¾äŠlV»5;²é~öŽlzVÞÝL^¼šsZmÉ©ÏiG6ÝàÞ‘Íl½dG6ÝÉ[™M_’ì̦×Ì;³9lš?e6‹½…;³¹ ʕ٠æÛif“浜=³Ù½S¯Ì&½ãbirqª¯éÎl&-N™ÍàùQÏlò¾¶:†žÙdH]EÏlò¦ÂídirrR¨•Ù¤î/–&ûcf<®Ìf°DþŠmÒ´¢ýsÅ6«m†ïÜ&Úf¨zn³χzn³ÚnØnV3ÜWp“«Ê‹§É“œùŠÜ,–£ØÉÍbå×NnÒ»¯òàfÉžõàf±¨ÜÊmK+ïàf±1v'7ó4¿À£›>?¯èfn¶ê\ÙÍì>Ô oÒ  «ÎÞ̶¿Ó›ÙЏÞÌöíôf®xzsåWz“­P=»§7“½g;½ÉíRÏÐÓ›ÉÞ¼ÞäROžžÞLf¯¬ðf²]ƒÞ\éÃÞLî_¬ðfrßa…7£»+½}Q¾Ò›Ñ¬;½—%èñÍh{û;¾«% W|3‹’­ø&{mj?z|“=ŽÇ7W¶pÅ7W¸Ðã›1š3·â›Ñ ¾•ߤ.3¯ùÍ0=)êN®€/¾&+ñâkr¸Pƒa+Àܬ[Î.\NOz~s… =¿lJÞùMR´û¯üfÈfÌ­ü&/ÖÔdõü&?ÍPz~“Ó&×üæŠ.k3¸÷åÖföf-k3¸‰µ¬MR´¸µÉ!Dí:nm²’.ÎKtk“EÌÙd!ªuhÎæ*º³ÉŠö.s6ƒ¾_'g“—ö!s6Y±™³ÉŠFYÝÚd¿E7ÜÚÜéF÷6Y)ʘ·¹òŽnmrºq\œ;iÖ& EÓ—žá,æAïg¶ž¾CœÙ"Ð;Äé©Éâ̵Ý!NËOœBœÉ^‡âL~äâô7o§8“'+WŠÓVȧg²M‘â´-¸SŠÓâ §gT·ýâ¬kóë\!Îhoððcè‰-Ã9£'C=ùr +ÃÉ•ú5Ã9ƒ%ŒW†sZ‚fg8§m!î çÊ“® '{¼jez†“mîÊpNÛH_ÎiÁÎpž”¹š¬—µ3œ–^=e8íG0NÎ¥¬ ç´ âÎpN î çRV†Ó~Nkg8—àÎa{„;ùÏpz¾v‡8—²BœzÁççV<ĹqÝÌ]ÎõµG8—à ÎaµåNpnÅ#œ[ñçV<¹”áÓã™áÜŠG8·bÎ-x„s+žáÜŠg8·âÎ1ï3œ'Å2œ[ñ çV<ù”•áÜŠg8·âέx†s+žáÜŠ‡8OŠ…8·â!έxˆs+âÜŠ‡8—²rœ[ñ§+œãÜÁM*3­ý§Ð^ñ)û#®0΃H½qq•n’qþ¹}Œ–z™Ï¿?æÊŸI‹ê§GÎúcðëÓ¦|ýI{”©õô1Säc·ÏùGõƒx¸öǧ¯n÷ôáo~N…Ýë$ªýnOe>o¼ÑœJçb›—f*Óž¾zxõ#z¿ñæ×¿ýݛۧ¿{ýüÉÓßþ'Uöczü——¿}óÉã¯^¼ ~ñü÷Ÿ={óìcþ¿ãW¯Ÿ½zþÉãž?{=ê,þúø±ÿ5?~ð¿^<ûü‹ß~ùü3ÖØÎ¨zã?øÐ¡øøæÕÇo^}ùÉ“¥e‘¦}kÈ£kåbˆxùâÕÇŸ~ò>¤)‰q=ä(oþð/Ï?þà×ÏþƒîÍz˜»ÏþûËgÿüñO_¼z¾òå‹/>}nÍéñ3mê‹/ý¸ãQ¯ŽšöÁ‡üäß?}þ¥óÑÎøÉ“Õòún tÓosÿümzöÙg?ýùÿýɇ/_|ñüøô·/?þàõsb_ÿîóÿ÷ßþÃ/~b—ú§®ð›\`ß±‡üù«º<‰¯º¼O_èå|øòÍ>Ntyr ©JùšgùµWúñõªø¢ËýcËñUý©‹Y­¿j׫üêG÷òùçÏ¿øì“ÇÞüö_^¿øü×oècô•<‚ý‚Ùà¹ÛÎãã~ ×ä—Øþö•Ï„–Æ©žN´°;Ÿ>ËséûûÁÑi ;Žs<ò]¡ ‹¦é¿=zÌG¾9òþÞå;ÿLßùà ½é®­ áÿ}SÑ·endstream endobj 198 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 156 >> stream xœcd`ab`ddòñ ÊÏMÌ34Ð JM/ÍI,‰JtwÿXùƒ›µ›‡¹›‡eýw&¡Ó‚'ø 0€cC ##‹æ÷5|ÿ™93<ú¾…ñ{ç÷-Ì?V~¯½åuÆÆÆËËÆæŒ×­[gÎÜ’ã+]øÃyÎ÷¼i²­âºÀ-ÇÅ’Ïù°§·§··gRooß Ÿs5Žendstream endobj 199 0 obj << /Filter /FlateDecode /Length 554 >> stream xœuTÉnÛ0½ë Ë»n3ŠöÙCÆ&+Z^u‹.ÊìýweÁBu •÷ÙœÂ׌Pcq‚P§PÙfwøºêy!˜˜ÁŸš]^PB•eV[Ü®NÇœ[88…Ãÿ(¿×)×”Hg¬Üf˜™¼ü1L¹4¨B%*„"VK;ÿ›c×õ˜ NÄzw¸¼¹¼ÙŒ\9qVâ«|¤&-wÿ S'€-0¿…aÔáíÜ“‡ŸIÊnéZ9¼ÕæKòÊÑWV–íÂF0<<&iý“Ê•šœáª‰óå¸íò‚°+ ÉgpšaI ‡n¡ïp 0Dö†ã*u„®­‚¯¯f+ÿfÆÑ\knpJ] êz(Ñ¥c QnŽ#N)>) p#P¡9ÑšºIÈo›9}sRQC4íËoYùîìòÍ"¶¯$èY—–CIÇc©ËØŒ‘Zà߉ÐUN•’0º0‚ËI™î>jiðõ*|5Á:õ<+ žtSt?§+'­]ËÜú®éöcÿWÇÑ ï$KWëÂwC€™!ÂÏæ9ŒÍ­ú®ñ©báZ 8üyå><&üÖ?Nx­ŠƒMk+ßl¦«2»Í(QÓÕÒŸ¿‰¤8u2.ŒšjÆ›j÷R7»vw ǃ'°ã°AÐmö`®#Žendstream endobj 200 0 obj << /Type /XRef /Length 218 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 3 0 R /Root 2 0 R /Size 201 /ID [<16c33755f87e3d9a36866d6a3e9b8eb7><262532e3a04bd217f3bc285c516f5d44>] >> stream xœíÑ? aðçyŽsþåÒÕ)E&“Å ”Í`4¤,7ñ ”×@yŠM±L²š,Fd0à¾ßwqu7|úöÜó|{î~JàQRˆ}…éë1¼mܬ1ÇûП£×ü‰üjëæÔ³ËT`²³'hÎaî ÃG(0Þ`¾P UÆ h9ìÃH”«ÔØ£yêÉS;æóŒN¸çƒK¾åº±†å.s¶l^P;óÔ¢6 ìlÃÐ Ú¸¡ìóëŠSX«ÃêêžÂýe³Äþåˆ?Sg$D endstream endobj startxref 198821 %%EOF rstpm2/inst/doc/predictnl.pdf0000644000176200001440000017373115105126152015714 0ustar liggesusers%PDF-1.5 %¿÷¢þ 1 0 obj << /Type /ObjStm /Length 3785 /Filter /FlateDecode /N 72 /First 597 >> stream xœÕ[ÙrÛ8}Ÿ¯À[§«+&@,$»ºRã=ŽíÄñ'éʃ,Q6;²èˆT–ùú9\ÄMí¨»fJQàÅrÏ]»Œ3É„ð˜bž ˜f¾̰Àà™ îræ£Yq0¡ºr&¼@ Ž¹.: —¹&@½d®ç&“•B3)5ê “>Ç3Fpž}¦4µLyÚg@ ßc®`Zù D™6Ï’éÀ`ÅŒtñ¬™Ñž 3¾Kƒ1Ó³Ï&Ã|ßÃä 8^–šRbr´Vš¬Çƒ¡«à±(øœaí‚‹@1…Usi ‚‚ÆÈ´î)Í6‚Ø”…Ta+°ahÂ6 _£”]zÊ® |¦AÙõ<¬”%ÇÖ¡›Ë¢“ÂC@YJâ (K…Ö ,5ÆÒ , ¨a…ôiç*`ª”eì gX‘P“7  N (+о¢f0CìӞǰÿ˜h€×AYy>š@Yù6™([t€²æxôˆÙD ±¦Ã³vx'i2œE)äe‹»[}.æ7…Ô=Cù2J'aÉÀbƒU…!ùÙœP6y[7®”ýÅÂ<žÓÑùæ:a¶‘vL>FØ5΋m»ñ|šÊÎq¦ †¢¡h úÑ\!ªôó©Àmå’Î4 §i¼\,NÃQ4؉¿ƒ&QÑÞ‚²ñ•Ø‚BøDoÏп„ó0‰ç³!è±ýïéáEJ\Ì„ äI f¢5‹‡a ÊÎÙÞ¦~'|ñ¢:³úÉé,IY¶çd°(gï”"š¿·&éBÈßø• ­çoIl&›Î'“Ê*r™ÿ Æ— Ù$¡]­³õæúúú·“Óóø~0îóx2Bõt¢é-iÃ\aa»wƒÙ »S˜»Å'Ä0X¬×v!+I`Mí¢i風lÔëh”ÞX¾ò#…ÌxkäÒ¶âãkû­V‰ / n¼5ƒ­¨'öë׌¬¹T"zÊÕ²%Z€íƒéÑ/„IQè­ò–O¥ÎM†ÄFȩ㇗at{Wœ*h,fW¢Ñ-ÂB4áHzÁ‘8^ABÓ¾lƒðƒ’¡/,»ÿÌ#ßIÚß ;]_Ί_7'{;kØ‚%pÔà¢xp ÔÁ’cñŒ({1O3ñ$Í’ÞÊ€îÖ¥ª:0-ˆàYüJnÊz»zv³©Ñ²©¾h§zǧì‹:˜~éÛ‚»®Ã]7à¾Àï9ûÎsàú¯sçÒ¹†ÜD³áü~< ¿çò0ŒïïV*,E'œŽÉ~™&VP¬¬Ø_!9ÐøÎ-DîÁ]8…ýÕ–!Ò¯“pœf¥™%› ÖÃdž8_¬|%á}”M!uÒ»Y:é·Ø™;_oÎwç‡óŸpWÐ¥¥v às˜<Û W!°;RA¯)‚Ë%£·ŠÕRx±ÍƃI½Ʊ-¦o¯ß]îW&Ó´~SFM[DUËb˜ž"ê[kýÏ|<ù]mý’¡QäF¬^ƒB( à!ÖhË“¨Ë“hÈÓEt ñhÉŽ5Utš¥ÆÁ0ŸbFÑ„eÁ×,»‘Гˆ!{Z†ýãó÷×1Ði<; ð1Ýž&Ñ¢¢â°tàÏ4ñ[ØÓD¸ºà*™ýü©(gÏÕ§ußeï¶ÇXÔðŽíž¼ñÖúÑŸÞ«:¯&b 9" ÄWÖKºÿÄjý èý+`w¾7³Á0´ZÙ–2­ç‹‚UjIÞ«‹÷Û§'φë)yP{-Éó[’××9óž IÓ’CÞÝbu-ö_ñ‚²1d™”o֢د¡øØ:$±ÅÈ7çG \/Ï}² Mø¼‰€¥¬è­o{@ÀmCàý›;G„¼Az—Õ©‚=Év_¸­¡\Þ‹ýñÕ®Ö(¤p¸>7U± (ï˜ÿþ„‰îþ,|ôÒ…®¸ÞÊàÕ :Ô¾ê1 ‚x˜|òú$eH…[…)/"Ìû·užkßyœ«½oÕëM˜rí>$t©€¾¼µjѪ¿4LF¼è\ë%ò®IÛÑ›ßØ^êâê¶ÕZ®_$Jp¯Y_ˆ‹Þ.ÅÛãW{×Wù€ðvC¨°xIÐÙ ØnØAOµ&ËØRžýR4Gß&U½ªÆÝÒpíD·‹‡›èö¶bÉÊ6ûd¿†´ömç$¬±VB--sm#åT“³²ÉÙõÝ—¹¤Gû1wwowgÿ¬†&¿‹±^‹±mƒå¶BÞª,4V-íÞ൒…Ä› kª§|Œè¯/¥qíìÛÙ,UÏf©**/J†ŒÕ!uÛ¸$Gõ\¨¬•ÎŒˆheÅ©H‰²Õï­>ÖDÉõññäðü¨0Æà*\¸\Êoƒ«‡“Ñ/ ‘¢üvñËwaD»í‰šdK~WÎÌ'¯š<ä–_, ¾­oéa Q¯3¾•\ʈ͛Œ«o_廸qO’nOˆ7YßN™»-?xZ©#4=co]ýÿñCŽ×ã\œ„‚÷Ñtž8ÓðÖ$Z綾ǒ§äÈoû+­ÔÇ:,ô¶i½Ñwñöâä¬/&ƒiúøDˆj #y†nßD\Wâá1‰Ç¼_´5û4ë+ºkiZd]åçR%ë’#OIdéñ#礚"I†Q”F“Qˆb W=ù¼,gBÅÏaZV£¼.™ÒN£t'Rši”éüþ&œ%Ñíúä:­¼‘dÿ2Ópt3idÛ)Û²ˆBúä\JÇ5ðë^6ß6›®¤‹ßJº¬–¹ªŒ?«¤\>&ò>§»CY4QÖÐ}šlrç‚®¹eCk^öéæPVF”-‚¢ìÒY^Vt[(/æïÚãž¼ àï̯Σ<~òÉlèø½¢]é2Ñãß+žÿáÁËÓw…;ð45‰° ¥&uSMö>á.å²Oó¯Ÿ%Ì’ÍS»Å™_zbÇ[çum^×x]U>»ù™GgÑõCè‡5'ÏIOj iGªÉ_P¹†‘{õ«¹Ù×Ȫâç·±t}ýæàè´nã»<}¯˜÷ÂÐÊ6‚*wBÊh`¹»äé„NHÁUì:Ž®xN~Ûs¢³§ Ÿ³Ç’σÙ,þ–ëæYt_ˈ÷è–Z—­<ÀšÝì}ÉW;Lë´gEcÖ´ä#5#Ø) µ•%MuÄíé4N­‹”!ãSUuªMªN]I¤ÑMÈŸQ×ç¯ßž½\Ò®Rš*hqD5SbªoJ¬3ð45=•=–ø…¯Qléâ#¸4~´Ü«ÒûuĶr K7¤'VÉŽôóíß퟼:,RͶ¾™´"±éµõ†.5‹'l?9eýY érT‹­è~éÆôd¿F[T‡·Î?#eA;ÀW­#æÞae«´M^`9ºFÚ_:¶RöÛ­ø©åÉJ )ë¤WÏe-žÎ2Ež·ìR‚Ó£+Û^ùkëí­r“›Ã|r<èJvÞŸVA‡kÚ®&«¡9­ ê›.È>œ3Ä>Wŵ†Å ¨TB’G^ìÉ­ B•A„l' ÐHžV+Q´®î,ÅUï ÁÓœ—ËóÓËíZB´ Ô^ëz§îÐ&O?³uý® äº?†Ððåíý> °Ûk|ü±žov\–A-m{-ÎtÛà@›çóÿ¶•EZͤÞÌevfõ¹îñîÇ·ÛVDLù'˳™š7Ò™Í쌂¾‡ý{þ/|ùÏ^R:%Sj6ù˜Ì¥··­Z95lï­–ÌËÏFá,·övR»¹ùÅ÷üùx[Ú÷é}ø–çªÅõ÷—˜¹ÀCzÃåîVà‘·®·4YElH–«Ì–±nãv'Ñôs1Kë“ÿlðÈÀ€þ‚©H½(û7PYLRús§‚Ýø ª³*£Áó¹m(l¨øºLKô˜°áŸÚÁ§ìÚ"üʪ?Õ6Rlr# ¯l¤OØÈ…>~N¾†i4Tuo>þ MZ,ÚÎì‚9WçG%æ³?"³UÏîÑ$¿Ì>o 'á=mÇ¿?G[ 'šZ·À‚wL´„P½Ø?][^»ëˆ,ý #D7;¬Ý¨.ƒ",Õf®’öu…ë¾Ç!8L,ýÓþIËx-þê¨ìøjt;¤v­‚®›Ö.h°ú V¿°Áw464-OfT6Dä à »•Y˜² Bžfvß´¸„oT2Œ‹3çMñU\[ ûŠÙµ… '·ˆnhÿ=Sÿ[ˆ–Œ†¦­¬nšÙ”7]d"mŠÔf#7DžBëÐoPÐé>Ý2Ähš¿6‹qa"²£,ÒìÕÛvÝ3ú/`¾}endstream endobj 74 0 obj << /Subtype /XML /Type /Metadata /Length 1492 >> stream GPL Ghostscript 10.02.1 delta method,variance estimation 2025-11-12T16:48:58+01:00 2025-11-12T16:48:58+01:00 LaTeX with hyperref Introduction to the predictnl functionMark ClementsKarolinska Institutet endstream endobj 75 0 obj << /Filter /FlateDecode /Length 2991 >> stream xœÍZKÛȾíAÈ!Ù“±À"ÔbİßÝNìf›Ça³äàIzF3ÖZ[¢_ÿ>_u7ÉnŠÒŒm8¶)ªY]¯¾ªjêeQW¬¨éOüÿz3«‹»ÙËów‹øßõ¦øãåì·ÿt3gJ—·³ð+˜¬+©Ea8«¸²Ååfö¤ün;¬ªk«Ëv¿›/D]9ëTyóêº]í¶¸adå¾ÝuתlŸ-郪jÆÊûåÍêºÝ®ã­š—·óºª¥ÓB‰òÕ6ú÷å_ƒb¬rJq¯”Ö É+­¤(.o Ñ?æ <­pµ(›ýó(VËòÛõr³ ú2aËö@Û(V+Áƒt#¡í‰_ÈJׯ²bÁD¥¤µAþßšýn½Úúg…aµ+Ïl"8lãää›vÕ¾J>·K¯œ²Ìj(àúóåì{Ú[w‡™€÷Š7ˆÍ_f1ÑÂÁÜb3Sœ÷ŸÖ³NŽÉÂUNsŽW)Ë Íte¬\ùÍÓC»o®ÛùåÁðá±SºZÁn[Ic‚ٗϼŠ ãÊÎ ‹OÑu:Ýûë°9M|¼—t•t2®|RÞ¥‚ËàI-´`ÙŽå~u=_p)À¢à®ËWÉuúôuÀnKQ\r€Æ‰ò>òbh7W n4ÍÊÝ@ Ë,_ÏÁV´VÍ6yø:ÕpõÓt HIå8#8lšt{ži¿Ûwû°2•¼K?,zìù™_š^@¢¸ñnðˆ[X ,âës‰ß§Ž8d{ÜÍ)P3ƒÌÍ÷– ¢Œ(oŽU2Ø[–ë¶¡UÐÉšr“)•É;p‹ä7²üvq{³Â¢ð¸Ò寢®Wm§‰Ô™&«_yç#Ý â~™‚à$:r¿EUÜq ¼GÀU§<ò"¹ÝìÛU³ž™ðVlà‹8²¶%€òzN tj¬U5_hKËl—–ÉöÂoÔ ë³b±–ýw‰ôÿûìò«'åzr‚˜kwÈZ¿#þ#Ûl®éÛ6CºùMB'‡Ž>vŽf¬®è)c™ ޏòÅLFâ:ÚdøR̰®ŠÕ 9—Ö°ê—,\U‹õe®@wï‚{„ç¼Þ ¬ss˜OÕ*©Pš9ëŒ|äuïpæKOVy|V !)áú¬t_÷ð…×5ø$•uQ þJXÐun³Œ.LÒÊßxpx°Š!U>x®®P{céë>ž«}è d%à†¬öI42µ-$ò…j¹oZHÕØ›ùþ¥¦·±ñÍïû—ÉÆ€ií….8¸A9›UHiy _A²¤¹7 µçë§*C%Å`A¬b Ð)ÝÄÕšwìâeBm¢N†à½^ÜÌç+›¨ÓC&øï·§ÜsuÏ4鯹͵g+‰ÏE}Û'ÈÕ*ÇF³Ž•CkU¦]Òºi{÷¹Ý}Å©kbSý â cË+OÜÁ*ÆÙC©ãš}çjeCý5ºÚr¿G ½š{Pøžr6°ãm{¿‹sÁa ä:˜¿õa’LgÆnBð´+Ÿ~Õ}³rßI(w·$×RÛ²^=ïŸËV¯W) ;Êv]}eBg–.ž¦f²ÀßÄÝ›Ê^x‚Êu`öïnƒÉòßxÍj¡¼ïɦLcØÌ=§ Ò¿+™HV6Û(INí:© r,“4¬ˆ¤Ìµæ(-»Î• z_òÇ;Ùd"ò-c.r(ô4Ô•ÖÎùôŸP|x‘Ű–W]±o·ÊÏûB•¬uêEÍ;ݪ Ü*:T‡0Ç”ºKßýui‚Ÿ=@Ö’Ò­„÷«·³ÉTÆ”ïø1O ^‹Áªƒj°‚Œè¿zR~æ·p€™"JêE¸í«Ò(ߢeÜs’Ó⨩¯‰m3º.ËgEoJ-racà–U. Œ¥´·êK»—ð*yæ$Ÿäe+XGDL]RìK*å½–\•SÀ‘Zy×µ7“xA°¸°¢ó/˜‰5Â*®Ê |}ië(´'Ä!'¶CŽxVÓübýÄs?ÅÒb%GŸH?"7¿ÄO#Ì€‹žRɘN’‘Z Å"|<.Ðob/©L¶¬›hBjÜ…Æ„ˆ±=ªÚd‰»·jS·+ËWŒ{'ÊQ„"•õ(TŒÈh×hÁX7a§¤Jä<tL¢ÌUŒ×æ>”)Á2”© ¤axA\äÄ=´%Œ ¬W> „Cn¼éåãNwž4äèšjTj×8ÚßDr®ƒ« R€ PÆò8§~ÞM‡f²;£±Å‰ûS‹¹§eÖøæ”k#*i a-:K‰•ß•êoœkQG!ìÏgзZˆ„ÓXÁ÷¨ƒ™ŸOúÐOUçšQ¯ãÏBxº\A] nü&üC7µSýMˆ’’ÑÔ^ !È$7K£ŒÍ¢“…ÀªoEŸ<¦°XGuËäxJ÷œ´EÙðUpXÚí’Z&±•; A›_Nˆ4’ÐÑ)êÍÃÂËK™ãÈ2ƒp/(£ÆE „sOQËÔƒ\kkö ð€~*ðªcè éTey]$¸¬`ŇcWÀ ½7v¡Çÿ¼²?-xðÖ€þÁ˧°;!ð#•.˜Ü àÛus8¬²¾ÍaÖ~biW胳tDÅ«F­ê©áæb"¡á,7Y#D¥ °µ"¯ç¯ÆR¸?‚¢vÊ_k™·xÍú]» }Q[÷^Ó`~Rp8¡ô>¨Ae9 —ñ>œ•wúñPÎ;Cž.øþPNQ³À’C9>>ÓÀ4d÷¢¾9 #"·‡‘Ú!iéTYä3ÛÛf“*¶Îä¢S~þ×ýñ f²-°”SÝq¦ùtüýI&K 4œYO¿z‡©f5µrÕ臓…¡WUB{\?î.UîÒ·©WN´AH´{÷éIñáz"†•ümÌäÌò:“ ÛJ Õi|Bb²~lòGà´•§FÕ5£QõwÄÂÀíñʘ$üãSÊÒÎt§È§*^+t×i¼bµ›Ú•ÙŽú¿žÝí¸W>+æã±F ljœCNˆÿßœà†gú³ƒ±9a½X4•©ÝUê¬øøj<,Ÿ¶™ºØÙÜ-<«a×3Àú$Êÿ8µL€†€…‰Œp®DY‡IÙJ6>½œ•¬”Ñ#ÞâÙ ÿvYwvè)õê´ÿ:ê)ZÈÞW“æÁLÛŽPr¥ 'Aÿš[êF†Wì,ë…ñ_³ñÁ$y¦æ£ƒÉAÞÐT4mßmýõU0‰Xðâ ù…gÄþ‡ ))pOßþ#}ÔŸgäôK 4ÇjžÓï µ^7ëÞ‹õêÐÆ­wî'ïuÈkªcA²Ív¼ä{U~Î÷åW_ˇùŸºdßuÐî£-oš¶©ni¢¹*oWíãÁK^é‹AâaYÑ‚ÃË=´ fCßÄ®±ó%pë謽ó,¥#DÌÈRå…FuK³ü±AKV±Z1Ãôw:›xºšs&k‘®Žwúß:|?û/|r2endstream endobj 76 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2405 >> stream xœ–yTW‡«éåˆh¨i$V»š¸ả3I4*Æ— bâŒv#Šˆ‚Ð"hdë¾ÝÄF#‹liY „ÂÁ &æ$Æ`¢r2£Ygœ“Á8 ‰·à1'S 5ÆÉ™~]ÿ¼W¯î}ß½¿{Ÿ‚Q¹1 …bÌŠÐWâãŒ;g?5ã¥øØH×”?Ðõƒ…«Õà©OÕÉÇG½ã?öõ˜÷Ç2®Ÿß‚ñ w%$îIZjܹuÛöè˜Ø¸y3gó 3‰YŬf˜5L³–YǬgžd^b13™ÅL³„YÊ,cV0¡ÌJÆŸÃx+F1ãd7“Áô+V*®º½âvZ©<¥âT«UWÕóÔŸj^Öt“ɤÜb+ØkîÝϺë1Áã?(xý¢\ca@Ä`QÚdR túˆÓ -ðÊ,³J¿°dg¦PÛÐßÌT°Äç&äæ@°)Í[ö œpª,¬H’`+Äå€ÝþFúøb…æ#¬žaÐ4Øû à¨±°ô"fké~ ºc«Úk@-›vŠ-b‚àJTà&T踩ÏG Áò]ÄÛÔmaèöùѼÝ4Ü?éóÕòa>Dêé§!Re¿ Çå1âCFî 2׺.œ¬H|‘§Î‡_ñúÅí)3“Õ$õè‰Åè©”œ¯EÿYßÓÙtîÓ“©ÕÝœ³qî·ß£7O= µÏe©–úºÑï”7ñ•§N—‰ð4í*?á°Qþ´rº™y]Ä&&£IT|ˆ%[›r ÷jK³liéé`¶òt:Նφe0§,ì£íÍ1Ý€<Ü:z¥ãÜ…ÞÛ…g p´±Ž.²g@1°U`¯ÖãNRyIüü…ag^®^~ô Ié6OÐ'Ђ!HÐ =ô2Rº^Ä@AbÅø&ï~™©=uÜXéKLÔ"?óõ_½Á³…?K¸>ºàÏ¡Ã๖Ô$µ'|,Ž¿ó%é©§ \¸a¹ÁPÙËc>áþpædWI‹ÿÇçWS_½×/Š fW6I®€ö÷ÿˆ¬Ž› ½(mgøñŠ1î—#©Ôp—è³G²W¶[ סZ¶ü4.#ÜT!ç ;¿ßœ¹RØa_MPÚÊËVÎt1YŽ«Ãñu×)š{0µG)=z-œÙ-˜Ê"£ë —­*‚3ìÇ7 •ŽÅ vÞvà° iäUé¿!埖eŒ4>'ל™_²Íl}¨Ï$›TŸ­wf YoÀ©ŒS `d_†ä +Júâù¬cVÛ>`“!wž²2æÛ¡äÿVùéíïBøuãcÅèç"Ò6œpDÄ0“÷¨0¶áè6×'yàXm—1œ,Û» >©â±D€aFbºqêÔ\v‡œÎ×i½fâ{._m?w•—£›%ìrñ5t> ˜µ.ÁÐLhÑK* 4ä>Ü äÅM+ŸŸŸSÓÍs¾ø/ÂÕ>¸šN¦|²óNõU¸.ò¶y/i.ˆRŸ¨ÀÉè«”t>"UI}¨I”e å1¢ì¬UC}Te MöÛÐ&ÛÐ4,®I_ËqÙ唯 Þµ²{.çNK͕ڊ ØÏ¯°A T±Kn¾ô!F=²çRœuµÍå™eûŠx¡ ÊíiÝúGýBŸ¢s6Se0²¦KŸ¿ÝÖ~LÏm؆óšŠÃP©§áè®17%æµá¯ÿ@¦þÖ!ÞKÊ•iëšͲ¼— ‡RÚ.¿Tl†ôT«õõl>sï®—gK'N?}Þ†:Ô執dƒÕb±êss¤AklÜWSÑ|¤ã JëhÈbYý„>þÝ,œ‚³ë‘Í—3P5ms—Ô”©_¶3Xè#N”ú~i4I† ÈH¦™C'|i¦t"C>}²¬ÙhÃÏCŸh ÉjÝ“b1YS€ÝcÐTÙÿ6¬¹¿knÙHÌÛù†Õ•¬Ôm#X3tçÙ‘^ ~¥à(Hf·4¤¼UÙt´iP%bÏ]¢÷%÷ݯzTÐk‹â\•í–æWp‡Þdúý¥xön 5t~ƒÞ_a eûu\ 6øˆ¡Ò4½G_pY8ÿ@í¼$÷áãpÁu.Î÷Ué'mktýÖˆ˜‘±Í­ B‹œ²nk\¨":q¬ˆKEÜè:O¿üá"鲜©`³m^NžùMúÆú¢÷Å…E—ÀO$»-&Ø»! öÈâ'ÅÕ¹s²r,=]FƒÔ’pÖ‡OÍÍ·WÉ^ùsN¸t÷äãHIñÑ#•e8šûróóB.ŒãÌé&¹6 慨èÚaî„7¡í> Ye.ôjÙדØ"Sйüóg2'|6BQY7LÑ)ìxàv±yäÑq=ƒ#Ñ»y–ª‚þ¼$&•OýzÉÑå0 ÂC“7²Ã×öÿãºÑƒŠëg?:Y™ôü#‚9íßyáî1ƒ1@ñ(q¯Äj[wÔGFb[Z„úVžv©~3woïÝ}—»mäº#Ì/˜¸ÕJÉ$×ôñÒuRk~Árªt]çöÊ5' Ëqê;TIõ‚ëíê{Å-o_Á1“Äk®¦Ž‘®¿Ž«6úÉ¥™„.ÈVs«Ì94à6A5zž*jS›~ v³gÞæLlä¹³p¼ª¹{ÓûAÏ­8»Nol_r ¤júd4­º¯ÓB)3ÄÈÿ1¿˜Ô8¬Ûõ´÷áÕ¡¨m\FZ2ÄAòá½åfv¾Mnô6^+m°¤8y¯×‹¥Õ¸ùXa±Fô@Å(ÞCµ6ÞÓ½6Ï–—g³Ûçõzz2ÌÛ–Ä endstream endobj 77 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6044 >> stream xœ•XXT×¶>ÃÀœcCå82£¾3&1v¨h4ÅnŒ¢(vDŠÒ;ˆÀP†)kfhÒëÐ= ‚½÷5êµD†hnb‹‰Ù‡lÞ»oˆñÞxsß?¾3göÞk­ÿÿ׿¶ˆ²´ D"‘Íç‹üÜüíÆqòð óu 6?䎿«Ú¬ §zZÖâä6HÛõé}¡eþ7ÍÁVÀìÀ9Asƒç…Ì [á¶(rS”ûâÍK<<½¼¶l]áãë·j¢ýÇS?Ù8}øˆQƒF‘Žg7~Â@Ž¢Þ§©¨¥Ôjõ!åD ¥–SèÔpÊ™ZI¤VQ«©YÔhj 5›ZKÍ¡ÆRs©¨yÔ|jµš@}F-¢ì©Ï©ÅÔêcJJõ§äÔ@jKqT7ª;Õ“ò£zQÖTÕ›êKÙP,ÕOÔ]ÔƒšNb¦,©(ê•(Qô½Å‹ÇâÕâs–– VYÝ—„J.Уé8ú%SÚ;ÛÃî;{Œïq¾çˆž'{-íõ•õTëòÞ™}úõ¹Ö×®o®M›=6ÏÙ¢~®ýöK“ú÷ì?·Iÿ“¶½l}lÏËä²FÙ 9#ÿ/ù§òý,lh=ðâ JTkÝ–¦ÜæÕe”Ï–í#"_)bG>ÖÓÝ\Â"¸š}‚‡˜«z5]å¢h÷~S/K#²ú£ªÓètjt³ó߀A=~yФŠûã^s';¸{7r1% ‡b…Ðl¿£Õ‡«¼v~¶2ŸG*Þ&âEˆ{pø9Š}.n[…Z¥È DvxÆ»+l!AÓ‡†£¥Šaý‹#½ÖF:- ÌÐÎJ »éŽb?—\€ËaGçì]ºÃ¦›SÞû\Wè#ËE»î¡üËb¡ ¯”¾E8F{Œ‹­Útñ’Aæý‘¸?îûd(b®4í­6)ðü·2`å‹îHÁ'* ,$6Æ'p=0³–´"õ¸rïúæ‰+ÍñU›Ù„Îñx4™9¨­-G£Êåâ¶Á(K, ÆcCgᙄ‡ò× ,þž~’å3IQŽ ƒ%öJß‘œJz]©ÊùXÁ”KP˜Uû¹7ù)y“ŸëëˆÔü¿jyõÀ–,PB_ioµë,¯®1²0sVñ.ÎJŒ{à ìÑÈùpÚA›U¯@civø³æÖ¿¥@gà4ºˆ8bJ¶› ˳k8¨þœ9Ѓ<:@¨;¨Õ½õvkp9ú Ü–m~ÖI;{àχ•°zcÝ-hØ ^Ãð[iÖi4äÔ)îýSfW"&ÇoÅÙ£4 ;¢3=%h$”/ÏÇ)«HD)M†"á½"›ÚChÓ¡ÐC¶ìǨõ“Âq¿qÙ[k6g¸e,ÏZg˜ºŠ¦È"ÕÎ×Àé²€ÉÔ"Å‹%k!.–Ó¨ãÔªM°”ÆÚcÁrïü€Ê0EMP•ê놽fRßž=`µ·ûôÉ^§¿ä49º”x`b!)Jeô6HÊJÕ닊8ƒ …EûÜöëJ;è_~Mp!îs0Åð‡äŸÔ*n AÉ…ØZã“ÀË(÷­¡¿7*=‹hl‰Ù„€ÏðÚºXS{î·GvxX1÷"àSã|b8ð< ÇnØ MÄÓµ;gw)rÂö¸g³2òhݘ’ú©¡(é;JYŽ>‰@‰<ú<Âæ—ˤ‚HGߢ>ÒÓÁ+h?Ïð¨€C<ú€Ç˜õ|b°D7Åoð5F³ü·¸Z‚{ÿWµêê%®Sk”&%ˆG{yßæ7=峎ž271ý°!šÝ‹‡ýÄyôÄuógMV<Ʊ=Ñ·4ÛÔùé-ÐŒWà‘ôt‡FŸÚWu¡š³£É¹· ê‘A­bô ?DOÓÔ e¤ÉeÝæ*x‰·fxÀf˜ÞFÆ·‚¾m|-)å4.ÈWRg¼Mša#܆:Ík™È >âEEBŒXH†Ò„jýu¡0Ñ(ó¥tY¡ ZµZù!ÎaKT£ÊyE#r¤Ž"M ¸ëý r_ú"¤¨r|ÑŒdi1†ä oîHÉD¶è–lGiÁÞýëf@¶ñy¼¨°ÍAܶ¼cÓ0²iŒ5oZ¯3E?¨@›;ï G5êlRå•PLöü@ãþ[6@¾636U•å—i“e£Qqr6 ¥ë]r¾±DÁè#­ÉöA6ø7YjŒ1Ñ|6CZjî T/û7¤(Íä9`4Ÿ·úFVx„Ï©#ç%íÑ´Gùß2ÙÔÜDî—¯ Ä ­ÒSÁËéeÁ*åVõþT­§¡½67®É_Ì”yëúo«¨*,®ÈN®Ý WTÖΪæðéÍãžôjÍ\Íç~3·¯†UN}|±åÀžƒE;Ë=¥ÒíàÀ’ó¹ß(ð'G¥¬~ôì-×nª;r²ùš’F°&îvî- ´…€9CxŠß>~¡È!#ãøÑoôržÒø@ iÙN°…àÞ£K …ˆŽOLÂ-ø˜ ]¥ë Y7¹23tt<`ftÊèéF:× tvà 3tøúÓÁœM#Y …¸$-aG,ÄÉý6CÑÖºN×Õ 1à;šð6Ù‚Þ–Õ9äÈìRgˆ2„VãÈA¶s÷îÃe|}SÞA=CŽ­õÓ¬4ÄêɱÙÁ%ÚŒØèäà±ÉªÅÓeÓ_$d’*§É!/oG±žasH¥)M8¬×šaqôºƒŽÏ°T¶Þ´ëÖ-[ª ²R…×WÀÙf˜1)'o˜ªkÏý·a² eN4A]BÂö@ÃjH Œ•Ш۩•wñû|3:kBžÍ¤Õ,¼‡ ÄL|m&F<Ã’é®ë£¢9t…îô$oÿ¡œ®¿Ú¼æ:È»Lƒ^ žZGÿá¾[a=7‚WYHñF(dÐ&Š@Ÿ•ßxêdFì‡ú 2ŠMF'ØÔÕÙÝL…÷Á$¸ð6E÷‰qü3qy]þ6âcãuÚ両X'ÃbdRgjS1* è_ˆ{ˆì—ëF¶‹dÁKÃVÌ[röf2îò)&Èg*"óC#Âbý66{¹Øtút‡æ3*.ÕçIèpYSk7t¸UÅÂÔCš"*-ç?ö³8O`VNØ‹ìÑä»ÍÇw\ÔyÕ)6iT~ËFTUìüjF㧸ïG˜Â}p¿gà ´Ô ž™fÌïà»0?¸ åU¡øoÄ¿‹ûwáÐ,8ÆÓ%Aº¤(Ð~N†ý„Ó & ‰Dާ¿éÊ:Ö1;€nFÔÍìï†ÀÁJ…P¯§‘ê¿-RcS ¼äY`ÌHÉBº¶^2}ûUIŒ_m„/¡¡CB_ ÿ)$Ð0k?I@Q‹-ë!”uI¿ð Íæ¿… ìKû×»VÚãîïÀRÌ>Ž$—öïª)W,$ÈDRKˆ­rÃ6®óÛæ: ¤"dwP“æ44Aƒá\õþ~wí ¨ƒæíüƬm …(¦c–êÔ…*aJ•¸Íµm°¹×vÓànf| ëí3hüJÈOÈÖé#IV>õ­–äA±.OWªÑë ’i/ú7Ù) S“õº•0ºý‰lGœ^—L.¤)„Ãt%|ɽ_ šÕ1Q$´¼ÆA¢!9A«JÔrÞCì Ö€ûÎпCÐõ ª‘˜ŒPòÌù ™6˜†ß~I ¦õ~$.R,Dr)Ž—¤¡÷Ëwó2ÜL¬…Èîõ‡&ÞÏ0‰eËã‡bÔÖÖ[ÚàY»rïq˜žæ{ßü »wIxÜ 1ôw‡í3æAR§ŽŠ…`&4?¢²:¯¸Œ#o*ENgö—æ—"(+µAn¼aËÒJ!J.-ˆ«Ùá¢Ú䯱XYëæf 8vÞ¼O]LåáŠØíQ[Á|s<øÇm>®àÎÌ~¶Y£î¿½Ustu·²j,!lu…$½OJ85¤Ã–74iŠ€ùáòå› Ñ Á¥Šú]õ©…D/l•é`Ô)ÕÉJˆc¶åÄåg¥—rx¦¤¨óÙœàÌDx^Z©¯É+W°—”Ù¥U{>„a¡ dÑÞCêéáu[v{/,€ÏÀ½Éƒaz5Tíx«àn•‡ ¤óB¦âáÔl ”B¶É˜i¨†b`¾G–jü¡™ÒsÈômF¢W6ßþ6•ˆA9’¼…êÔF… ¦ÙÓx°9G_ìP10½‰ßÂXuÚ]:9+[!¼V†Vøm‰, Ú¹«¸ªœë„=‘ÿüÕÝým!YÿGä¹F*(i<Ú¼îÍæÜ¦7&Ø/J…œ ./¥8*™Š¨â€€¨ˆ U§N߸péÇök{ßòû˜m bI8ZÉ‹êËQF+Ê Ãœƒ°Ziq$‡Y•Kr‘}^-…P™Ú5(!”!éÞ1ïsî¾’&ãÏp€ü¼„&’lwú}ÈÝeVk’±Ü”,C%i=äëy[s±ý·`fuz¯Zn´4’èî ${žÇ1‹æËt†ä4Ò,S®žË̸x´ÙPbv þšX fg±!ÆìŠt™Jˆ…ˆ˜8bvÞÃÖ2!”fëÞ N‘Y¼çKúÒÉ›ï5/‡(yä6u$×᪡ZWmvå%*k¦†˜®™×9VÿyÖ|çb3´ÅÎÿrëÔÁ¬Ãm'þ’YÛ %íeš+Êvl/(uFÒLŒï|ùø HIÎöDëÛÛdÆc|ä‚!=%MRehj{ZçCyçS†LÃË…û…§÷f6_"hˆŒ à…°:~Õ|»5EÊÖÑÅ 1ø\û+_T4Ñlt¸p3dh†ã}Ý*Òsx)ÖHFèfEÖ «BOGÝCkLÈöÞܧUá&c„Í‘gá­“ž!i«-Û¯àŒ6HQ)Ï1µÎ5ÚÛ‹C«h–)Q×&Õ D½¯<ÊIÓ¤&)Øn€’5 k#u· ÜaCúú’D£Ú<³³»‡ÇCb´¦£ 17Ý`LKá²òN|Ç |CFT¾§a3é¨Þàâ²Ù3hÁ‰ÓñmgvæLѨËX[P^V¶­|kŒwÒ["³¿<Y"æçŸËuÄÒÖ»\Ô|¤äÒ Ð4)Ô+÷{4G–Dg.ÚóuÃácÐÂ<zܰ©c£ ›×sYq ÁåÛ–ùÛ/‡áÌ{?/øYýxï7núY N›×9zã>wdvªwAsþ‹æ«×.­šÍ•´K¥3WM±Ÿ}áÞ™šKßäPïéU‘ý`I±^¡€W¢¯Äh…`-­)ó÷ ñ÷/ ©®.+«æð-Ë?=ëü"žŽœÿúËFÒòªµ×½£ƒ‚ ëSzàÒõY†Œt"Ó9$%¥a’RÕ©Y_ßAŒ97®p4'B$ *¥x4š„GãI91H(¤À”Uç0†ä{ÐØ=¢SmcÄmè¹´8b¸öŸ$1‘Qy áï’¼"(Và•–ä³í\ûß%Û;?ËU?IrÍŸu^Là¨ðß·Gˆž£û8IJ4ΰ­÷E6>h 1€fíF³PoÔ7Ç<æ™tµQo7³K¹ÕØ"‹‰`LϽNb«s¸÷ƒÏ2IK1¦ÿóê(š,ߌŒR¸¥D½V +GÔÛþ‹x`TjµJÚ¢(ÅÓá§ñÀ„†3<‰­èƒmbã:²£JQ§e~ÿbÏrG‘E6Ã}¦3 ‹ÃQËÔB’eµÇœcgp ª•äBQDD’¿jq-Ó;"Ib ²¸Šr9T‹jè×¹xs?ØÖzóÕú°ˆØžì0Õb+¦±MB´N«kuZˆ1Ûid%aÛŸ=Øsag}|h1·I« €hfkElQiiþγ+šÆâ«±ˆÃ’v‡b#ÿ¡Š7Ñxú@zì&.ýg ÿl"´Ð$F.zé¥&÷.Påå¦efq†iK\Ö«T:¨;ð”}û6¢ÍP]ìL!Ç3¢,T(FÕÈQz.£ Îñ° ¨Å‚eHMíê0º‹€>þg<›™kj“™D÷PÆ=±àŠ®IáNòïë~š’ïŽ0+hÓXŸyÉÓᘙb×4cïÔk‡áü­dß5—SoÁmæãl)™øç+míä·6ÃÒò¨Ÿ”çà1œ…KÐ’q¢õ¸±£j¡%ªhxær˜Ÿ3º*4𗔯‹…ÉýyÚN“Õ ÎÐe`å/š>滘¬s¬‚iÏ#ªgÇù˜ïÂòó°ã ЬtóÉM4ï׼͑_Ÿþ lÙ߉rÎ’K’ý’\â·'%.$}ŸÁ $¯^¢qˆ;wžË‘Äî¶ÆV_~ŒuÙMQÞ‰ZÐi¸Ò/N4œæÑÞ©SìðÉši+ãx«L©$aZÒ¡zWÉ|9¤uq¡\„Æ>&1?6«ß )ÜýüÖ%w+Ï\!º;áÔ¨¡3gl5EVóŦê#ë ùÃ-9õÀ4 ³‹Ó. rQø­Û¢ Ö%êB´I¨KÒA<£L‡nŸänÃüxÐ<×™g½uɼ v3õÅþ!>1.ã~XˆDÈúÑ£ŸÍ¦kþk{€RÉDc$€‡qCfšzï]Ë—ºx¨“9ÿ†å©ÀŒÆÌ*L)þˆ=ÿÃøCó„1 Ýzèàþw?8®Z­‰0+•>¸2X¬2r`oAVô“»Í_®Šî-kƒØÇµ&!¬—ù¿¸mÿ[|ݬy?±“©ò¦þ%O'8¹oâBëÜŠ×3w#¤ýñzý ÷· ”nÖ&„@„eG&3¸?ÞJB{þ°ñlY]r@%gff ÿ¬4“„ï~¹×ÝrE@Ïn&½Ao0èÓ ãùž=)êŽÙyQendstream endobj 78 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1080 >> stream xœ=’mLSgÇŸRzï…a…^Jé\îeKDœ‚—eÙ2„™,êT0SWØ ub÷—”òf¡xj¡ò.œˆ€­ÇuF§[ŒSãDÆ\Ì>l¸ãÍrn÷¸°òaûzNòÿŸü~GABCˆB¡Xºeë΢‚œÂµ¯%¦4-ŽbÁ¸Ø«‚%D„žû{V3õÃÒï"wLÆý9„°”Ò²òœ\c6CÈ+$ƒd’]$•l"iĪh&áÁlJÊÉ=…Eq=$#äŽr½2[yÇÕ Ê}Å$Œ—äl³"p'Fz•¥íUÝ©Z¨}47©¢ŽçObm‡í€«40æü®Á9»^b!ºÄÖÎK¸D…æ:W­60~çï0 0^;Gïã-µ0Èà¨J½ ø©o±ïOÉpUó@õ!Tëøy›ª½²käƒtãž-åªX~†¾Õ¨2°7Ü`éw ,jœ~¸ ¾`ñ븉½ûªÿKuaî˜yddÌ3!ã¿í%¶±|Ÿ¼lLãŸÆÚio‘×aœ&ÍÞ¼Ó¦‘|×;]Ÿ¸ß뉻1ý³þÂÌ6ÁqØÑäî$´ ‰Ø~h¯jn‹I(éÊs+ I@uÆâjq"Ïo»_ã³ÍZa;·q T¼\23Y+4u7A pe`+©‚µ@à ÷1èñ¼ýTßTþeý(&Æ‹Á#/¿Il¸ a†Yóƒ„á’Ž,k0R{Ű›Ýœ_V´n 84Cã1ÃÀ]±7!ÁÎírù™3q¿VLÿøå73‚Z¾fóHøþLôi†1 MÈèxƒ|é¤vÈ Va›º`ˆÃ|öaÚ-ºr'U7¯ûÈkóœ?cé³N»ÆÀÍzs6ˆØ4;u7]Îñu«0²êûÒç~ãAÈz&\d:á¤H³Õòã«ÖXKw½`r÷%gˆuŽØ|r´w,úe£1£u|±üË´¨O|D—§î)4— 8ÅÒôÿ?,±½ý}'zû9þVã§_íz¸ W>ý E‘FÇ€2KL…¹Yuù¦¯ë{8le‡½G®‡j KÒ±.¼Ä*/Ðø10ª£Öb”ŽŸ—K1LÛ]õUG[¬MBÉ–-»£"àŠ©k€1¨õöÙí]"ŸYu¨¥²áÅÿèüB9×÷ÐÍ)”¥Õ?ZIøÆäÜ¢Z¾'{*ÑhVÈûäA-MÇ­4n=QÉO09!øéÊõN·å»’"`””7vi L%MYQIã‚íƒ ^ÀW›« Úõàjn³·R žÅL€¹âAú6'1Ѧú‡g̵PV-ÇëDôÓgÔG[mM¶&hÐWõAàu]‡¼½³=Ç;)™„ðÐÌ¢ˆ°q§Óá8Öêp»Ï^ˆ ä_“jendstream endobj 79 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 4880 >> stream xœ…Xw\TWöCyóDá9ê¾·qcI,1 b‰!‚-"Š- "Eª fèC»CoÒÛÀÐD ر$X5q$j4‰q5ƶ›ý·¹üñ»Ã€M6; ðyóî»§|Ïùžïed@‰D"‹µëÖ¿;oŽ‹—OxÀn©îÃ)i8J¨ú·³123DfF‡¦ØŒ±„h 0§Oé^ï¯ Þï u ˆÜµgm´çÞõ^Þ¾.û6ù¹úo|oá¢÷mÛ½¹tÙò™o­˜=gî¼ØwçËPÔTjõ1µ‘šNm¢fP®Ôfj åFm¥ì©mÔ‡Ôj;µŠr Þ¡©('jåL½G­¡Rk©EÔ:j=%¡&RV”5eCM¢&SÆÔ_(Žâ©1” õ5–2§ÆQÔNÊ’b)wjeKb¤Œ¨8J-7°3PZªŒ¢ŒîGÓt¥ØPì*ÆÌÇÌÕ1öcêMLL’Lç˜f›ÙšuŽ5[e.2w06nç¸ëã7Žo±˜aQkñ­¥Òò&kÍîbÕì‹ !Z&\›ðR²Dri⤉ÅV±ê€6s¡iþ©Þˆ5†§°ÁPP4KÐÔ¢ø\Ev8’!¹øÆrÊЊHbj«Ë‡ŒùéÞ¢WZ˜BÂ5â…dØa‹Ûä~#W0—.S‘íCIzÝÀ¦Ð˜‹)äVö¨D¼®¯4P©1<ÀB‚þ‰%5þ¹•Xå|T‚>eZ[~ú¾40$›SÆdÅ´ F÷(¯—#U`hš<%ƒó¨ñ@QˆÁKÂû¼óKÌ#9ßümÚÂx{ûÍÛ¹©øŽ”K­L+AŒ.þmq,’6–+;J¸nŸsjRó[¿?5T®×4"]ªç“Ø7ƒ¥¤ÕøúeFÄp™ë\óUñ¶â×cÛ»ôëbXüž¾T$-p:=ëšÏ›ßí×ëªÓ`®£ÖæZ±2¡°EÒ‚äœ;Ü¥Óü›öÛG³ÝïÚÅû/Em­Ô‰¿¢ž¥ ½ÑÕU¤îàØþÊT9ù]®B-º€*"¨¶Ý…m†Bºð¦Dç2‡ÇŒÔ†šÆ"| ‹à–±zF²"6t(ŽfÄøqɾjTƒlªP*n1<±n\®3“ö5œÑˆÊaÇØa(ä Ó$Í¡(šÃb::”˜©CU|7½ Ÿ1ΤÓâNÄwE_N/öE‰·„ðôOÌ¥E2™´œ1îÖÓ[Šâ‡¯!F.áþœ°lY'²éDÙ…•Õeiv-£¤sÝ:ð˜œä’˜JT‚:PvyNí%è·n®Ñ'`0ç}ËÓZˆ%½%”“|K‘lwbnv2â¾Í÷𛻦!ûÀšØú2ua‡’CJeuV©ò*DÌ×gVñØ!Û†f1l‚ãeçW½ù-'9vE@í©ÌÓյÄ^ö ¡êˆ½Ñ { ÆÇ%O^·çà§Ý÷;`ZÎë>¶l„íØ¶Ÿ#ÿÖÂv+ö¶B¨˜´%çIã °h˜iÜI—67ëPµ¨‘_9ýƒ—Æ Ä˜ÎÿÁ;!C„ÛIƒ ž‰Çã…Æž4«zý9ŒÑøû0®3•ÜÓYªú›0ÖˆÉ呺ÿrçß—Ý@‰"H‹W«¸?!ÓßR© '½%Ò‚BgCG¡¤ H×DF UòñHØ‹Fª¯c@î=r%˜ÑÃ̈£4ëÁÒC#ìÐX6À6¼ú.8Â6+vÒ«óñ¾8oEtJ€M&Z•T“R5R¬U\ô-4LÅÿÎIDéÙ $}?Nʰ)A®>²LåàÙªèJ)Çݲû g÷‹ã`]œÃÃ;Âã‘ÞÐSÜ -„ö Þ ’¨ƒ"61#2…SÄEí\‰˜E^ÿñ”š´ÔäšOQ¯ô­’×#¦¾¦¢éÆß;^±OY€ÍžLKà>«x]Ö×t f“¸6òþ€MæÓ~M{Êw®ÍšYžÍÆã¾ý¯ž#MjŽ]ïƒäÜwà¹ð¾„mßän»|Õ†¾þ§×¯^¿Ò½ÉuÈÇ=Ñc(¤·õ©~c$uªàL¯ÒãÛdÙû‘ÍG# ¨äÒ‘«¤^*+iX;~À·<³Ù4—dæ…<•x$èÒ×—`‚Æ’Ý/ìJctrzT ¾usR0ZVœŽ½ÏÀº¦ u½æžˆMgÍÀãx¶›¿œ°>ùPÅ­‚©\E—Þ¸øùutõJ ßd†,H‰®Õþüƒ¡à$|&¹´Å.YþÉ{Ü–#´þ÷NÝP?2Z§C/˜*'ó“ô/Q3—V¸·½º®\=¤(® 7›+i„?–b°þzNþ'Zì*±áÑnùƒœ´»µÕ„ ªKZCQ™l™\r†wL0:qî2*Hªãâ›ÂjäÅ ûËUš®I÷?¸‹M8ì0f‚åë+0&øÝ!#±µ3쯵(|÷$䌫ü+Õ±s¹þ‹Ã<žÿlwß8ûü¾¢ÙþGÇ>Þñš*o¾°„}/쉗¤Á‡8rêðŒÄSG`Œ{ñØQbäÔ <;Oj%êðÚààððààÚpµº¶vƒP ±<{ÕY{R ¼Öëª €]ñ9`Oçþüe•v•Ö»K¼ÚÑIæL÷©>0)›Çe‡+ª‡4XëEHjL`2·§}s‰;i,ÃK­>áô}(âýÆl™Zñ}ä{“Üv}¼4x{N£'·»1íHfefEf¥ÿÁÖƒ‚¤6¯´µë ÔÄ^!\Ê|õ ˆãH»í×eãT?X¿p ùðŒ<$‚£¾@HO¿.L˜80‡F1È+Äw¿W™FA(>K–¥ÌFY(ŸQ‡UD„…ÇqlÒÏPL;fW8v‚Rxú‡IÒ·ù—ÚGäÇPH¥'Ó~ÉÉ~¼½øµ’;6r7ñˆÞ\9J r°þ­êÓ·š)i5;ر©gÓ hÂ8€ÆoÁbãöQ¢uî¨@ãEx¶1ü¢wÇy„OºäÛG‰ÞQªtûwô·7Á¿£?* fËD_'úzH׈ni!DZ!ÜÑq¨ŒÃ’Q?¡ÿêäæ¶Åùìÿqð¤YLmiôì7«žÓxÜï¼xñÃ#ÇÁófñ°š~QºcPóÐpš8LÒà 6öÄ9ÙsäúîëI2|8צº·Û- ›E RÉ4z~àž¸½Áœì`p¥òGòÐp†ý®9#EOö×;Zƒñ¸Wì1ÄôY&›ðð‘˜íîï:ÙUWãÌa¹8j˜HnýfÑŸ,ò“Ò‰ÁÍž^2#’a‡>âeð Ý–R° ¦CQjf\$ŽÂ¿Z'Å¡ Éø¦´p‹©u£Heõ„뀺£O¶o‘`) Rxe<ˆ´h`¡Fô@ ™$¿à"y¹ü6ñõH ßà ¤Œëµ´_J’?«ÄÑ(¬µ2'·¨€klíª¼€˜»Çí—¬Úð~ðš‚σùÜÜ‚|TÍ4…•GÈ“öÚÞs#°xþ õ½`Ô ‹ }«¾´oÜHožüa³èýØÀÍ-f;W o<¹ûDå ¹©ä¥@ÑLhedƒªº¢¹Ûç³·ñ$ò3»ãD0²αAô옵ÐÉåCç½ÝšH.±>«•2½—NýݹÕ+uö‹"„ Ñ1íypØð ÆßÓŠòh”Œ˜}(<Šß=Ô Uj*h¼¯Ý‡÷#lÀÈ‘_{EEq— 0ì5«+³²ˆ}`YøDcyL명:­î ƒÙBØKÐ-ç‹+k¾m<ÞÎ3wÝÁ¦Øìý¥v.'¶}±}+"Ö|¼bÒÛ€X>zð3g —uöÛf¿îxÏÙžSßÜ9¿Ã/ÅŸJ6Ùr¬‹­SVsáòί]¯oDXÜ $¥Z¨¿³ªÏŠý…$ôªØP;N·%©¢Ìƒ³g+ºŽs‰xü²™³PòQF”çäææ¡ ¦>º:Dè_¹ &€5a ØÎ-»-qÝìbk·åË›?ôõ|uTYαLëÞ¨U“t5KV9…v‚…!ÜŒ$ þ^Ò€ïæÖê–_4úÝgäÉ WÀ@¢+:q÷u?ÇÓØ+nK;-/ßš˜œâB¾5õ%·]¿Â&E\Çàè@ÒXÎKŒ âÖ|€V¢Ð¾^ÖòÂtebb£ââȧ)=KGÜÌç…Ø›^·»Ùýô¬¼Š ¯ÂSÈ Ï ¯Æ9¶¿>¼w¾‰ßá;w—];w_ºsïÄçGŽÛhÇéëYWËÓ á¹J¢Ùû©‡gX ¿W“´-/_™•ÏÉÖíŒOKLN%Ì++‹©h}õè„z©•v_l}t¼/­]i]Ò®‡ tJïïeXa‰È¡ûS‚K\Àúi`… °Ñ BwÎxý+l`ô&3çX,Á3±É²eÎ`3aºöùÍ×ßÂ3t[Ùjà´î=4<Ý$MRe‡§d£C¨……b¤Jïrm>¢*kSª"Ê ufT~ÕŽ˜¼ê¼zÂÑX· †ÏT m(˜yWŒ|Ì'ÖG¶-3 1ŠHEh`}fß ¢ô¬Í ¶£@ä~6èHØç)§SYÿzŠ›kÀœL¶TâËú¡A>O¨ uí¥ˆOå¼¹%DeÄfFdCÒÊÔ²ª®¼ÃǸ»y⑹–3j¨íay¶¤Ú BµéB@—¤aèK³¨`'Ñìø‹gžÞ:Úɰ/÷œ¸òí$0›~ ›c“¥‹y«*jê*Ô%©’ò¹²'[>'sìö' ¶otråq^Ÿ”¬HEr›"„— h–>AÿGj LÍ¡ÊD.T‰ ²2zX"FjtÜ­iGÃÚ_ÄÄQR•F˜Ë ùóc0I¾g™ÿѰMþ;QƒÅDsúàiƒ)%&+~ø©ú»2^™‡N#5óPL0+;T~¨ì”²^Íëg]ídäôoè?Ð&ZO’‰ ýÐéÛyÑ©¹çú<úŒ¹iÿ%c3‡Ž~*yµ.îREQz6×ÒÒ§ûªæÚi÷@™ïþpÞ?Dšá“á’&C(ˆÑ‰AîÍ=?³zãúMkçy./>Bæ{~™ïõQÕÒ°p™ÿüŸ7’Qaõ÷G9ó„báÃbXVœSLkL´¦œ‰‘k°Ù˜ÃåyJÝ+·:'ÏÌŒ¢þ“ýhâendstream endobj 80 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1313 >> stream xœ“kLSgÇO)âÁ¼­Ñ:wN†DÝ&dlÆhÜÁÍ;*âœr)×j[J¡ôf[8œ§-§=m)•V*´ÚSƒP@`ˆÓá^â>hæt›û`6MdÉ[r–¸2³d÷>ßÞ7ïsûýÿ,1ó·ïØ#?R(Ëz/cKMááŠâ™Ë%ÀN?ŸÞ: R„’xvé¬C Ï¿5÷ê²¥#Ížâ#öFh‰ËHZBkM:¨×;Zg£6è%¡Nîd[½3ê}bÃøÂÚ0CpÁ³q˜ðŽ/Zø{ìJôGŒ°Ø­ ØþarÄ$‹3ù„ÿÚ$+Þ•âƒÇ†ÎLœyÒ=I²LûÿäQ•]µòðÕWd—F¸.‡(á×m<”ø—š>,V‡…䘶Ç;Õîzb!£“˜÷æ T|;õÛ‹gÝäLŒJ›Æ"h™Èe“ަkÍ„f¯j{œA„Úàµw‘hYlÒb³ºÄN³ÍHhš"Vu´ž•Xï‚öQ«É@Q vóÚFN*1/äçð«øåkF²8;Ôy¾ŸtïïUö@/tv{9__Ûµ¸øÏ”"ãáës?`¼ãP²oìžNÒ>¹Kí’ (º¹ÅŒ§Æ ô¤ õq£$ÝBM}ÂXù”ˆ1ºÍ4m03Þon|«þN´Ï5ì‘Ѥ0|oõßÀMpà#¥Ñmiü²å|vÖèš§èõ‡Ï½DbEoñë ’P&Ck_Ø\€÷ŸTT©µØ&7ª¶$挿FÌIÌ•§$l–Ö™ˆv´ÚSR0ìo_‰²Uendstream endobj 81 0 obj << /Filter /FlateDecode /Length 273 >> stream xœ]‘=nÃ0 FwŸB70ý«0¸¤K†EÛ Ø2xˆl8ÎÐÛ÷#]wèð> stream xœuVyTSg!Ÿõľ§u´¶§Xíª¶ŽuœŽ¨µU¬ **J°„@BHB $d¿/+Y KX’°Š"Å­j]ŠÚRÇ¥=í±§ÇVO©3mÇç ~œv^ºü9çýõ¾ï¼wïýÝßïþ.‡HN"8ΓomÞœ++Ø Ë-Z¾,#Kx¸¢8·j¾r8ì~ú ÚåŽD¢M‚þî˜;ä`{Á–-…x’RHOû%é›åt£‘nÔÛÇÏAÀðitƒÁBmÄKò3ñ ñb^5XÀÀh3õ`›³é:êLÿwäåzÐèKh‹ÑjfK4: žz»³ÑA]B5).£SÏþLc¦äk”²çÌà ƒ§Ÿq ƒ-à¡i]â•R°˜$4¬z0’F»Þãc\Í6ª­µGŒP‚ ¯R •µhˆ‚Ò£’ÆéÚ<ÖŠF©ššÝ‡v”‰„⨆}vÕ± 4@Àïõx ™ì–8´²ÂªÝÙÃùW>ü¥DY´9|‰¤›ïÅ%ÝhÑý¦0çüºÎ"~f<2§í è-å’Ê 7k¥x&ù7žâÊŒòÞ˜ •Ϫ–í‰%›¢é¤ÝsÉ6¥_Q&®î–¿0øáÑ&ªçZšÊ¸GÐô¯ÿ`ˆŠ^Áó]¶Z|—­›.¿§9ÔØ è„få~“¶Ô¤¬IÓÜ M¤ùe<‘¦ÿî×áøSaÎí[\4‘ÉGÜøÆes‚[ ™V¢?l¢”‡Xéñpžÿ´äÊ–[ž:åóÒŒµ§›t¢% @ €B¦ÔÓåñuBˆ Ö6K*Š”‡Tþ͸õÅH#‹ÏæïÁÛ e²ò …@®,V²¬ÉVŸ<CS"géÈ™÷‡€ ¬2-«)Ñþ]u ±d„Ñìûœ;#ïpÑÀx ¿¥:(“HÊ$Š€ª½­«­‹òLÈ¥²Ìj#¥|«ðí]@ªôÞ¶W í }ì?þؼA}‹3Àv-Á„ áÿc‚\/7i麲}˜¬: -«)9¹·¯àôƒ´È““p9QÑ=¾,ÊAëo õ nü}¤áÃßE}ꀬMíx¡-³)]âÅà<ùå»ßuåN.2)Á@hý^ÆrP Ò»Å­3Z­ÕjOVÙ©A€gáT< O]u>笚þoé€î‚V –¯Ìxfæ†QZ»³qQŒƒ±³ÓÄ«gX¨¬f3e2mà vàœ&—“a~êÌ¥÷¶^¯¾Ì¶¹h  ´œÁO÷~·ÿŠhÍ_ãÆ°6W‡¤²YIe ª-éŒP¹øc>;j`'/åög/Êú.Ã4×SWN^¹d É”û›cdLLV¬Ù“µ PƒÒÓånìd5— A¹X~øÐ`Åéßÿ¡#_ævÊÇñgüÕx)?‚þ–ã» Á`jâO V«^ñþkºÕb¬bë48n/ã ºXØžïlBK€<Æ‹‚©Î`ÖXÍ4ž3Ñ­Ë7×ÎÁa«$¸"QDè»ÌWÖtY¢ ðúY…ÔAYy ØÊh±½ÎAp9‘ MwG.¿Ýcë…V :aZ­6å™Êh«É¢I š°[}£-¡þߣí8hC˜‹ö3üÑòcy…•奒–²^ƒÃã¥ì6Ãæ 6kõÚ‚w éÚZֲ̤Þirúî|Ž&ÿþ#xÄùú½{ž“¶‹ÅR©XÜ.ÅÚÛcÔ´¸+åÕ•œø–q1ß§óÔêõfƒ™Â?þ¼ÙXFA­Gçk°»C. }ÿøÏ¬);ÙCà—[ ¼VŽ6…ÑÏá†6äl›]­¹øä¬äx z›ï ÛÃЃÚÊnM¨ºQåóºØ§~°«ë¸ï9ë±½Áæ÷ÏîÚ˜2,éÉmÚ 8–áy"</Àéu“‹ròœ¬¥3Žë(’ÚzòÐu¸WšÏ=}dàlà<¹ÁÉ×äTìÍ+îUìrÝÁ 7ƒ¶ kj#ÈØƒf~ø( }­–yÔv( Ê¢2ªtB¥°X\§×éuÆÊz™S ‡!ô«%Q3)=ýOÕ õÖ¸«ÈY/yåYù(5–èÅäfTÀWÕæj¨€b`vO/k_ à·øÌ¬ý&Í#*¢ñµáÑ{w:8ƒŸ!ýgÜøµx½¸ôGvkY”ƒg—V×Ë»z[»Úú‹¡Šþô¦+äí;1?ϰ«b­½zðâjx6V­^½b…~)“›‡1‰æ#Ý¿Ñ}´ÂSñRþºM¸/ÅIðÐé@óPƒ—Îô\e—$Ž 'W&ùi;ßÐít;ÌE}£Üøž¸™?ªDô"L³÷ceF s¿E Ðshɨgð<>òBµÜ¼93pñg\›²v×í’.¡uEüÚù+Âuë…»Y(}7äºÜùÏD0ïX"XQ7ZØÍ9õ=äÛ­>˜À £Š+óU쪶5{è^ýQvUC+yÁ&4¬­àWxíw/^þÈn^(ÈÖ°‡<<Ïygà¤Ï^ôñǃ>zZE8¾Îçk@%a^xÊÈÔ”äwKS'‡›W0À42©©ñ?f9¡endstream endobj 83 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 666 >> stream xœ]‘_HSqÅw›nÚXjŒ$î6õ $8qÑ“¡ j0b>D`Íœ×Á˜¡s“œŽÙÀ]¿ÛÔÍiÓ­ §jæDß”"¡ Œ”@‚èÅÙ÷Žß »öÇÀÇÃáËçœïaˆBF†9wÓjux»šû½NO¯«ÛSwåò-'×çvô¹,°…õ¢-_j9¨¹â*¬¯ÄÚÓh¬ % £akš8zœž×åmrqÿE»‹û£ÜÎÎßÂç<‚tôº<œÛyìH7„’Ê3Uê ÂŒ0†gF ¥R<¢ rÀ¸™¤ì,¾ÔÊZ [lð±J¥ŸÁïŸäBýÏ}-`Þ‚kô6ö Îv.ôfÂ< *4 ¡‘±‘oxÕõÖ¾NeH¨=OhΦO©…Þày>UhRcœÔÿØ) a ¹eÔe±Ф’¸_u„-ìúز»~F°íÊ…ç,íׂ «jhWýÏœ‹í¹à4ƒ  ƒ_s›–MJÐD§>Òmµ@³ݧfºr>ò?ŽÁÌŒ÷pí@hÁ|’‹»ò¢-|ÐÂããó–M‹ÔÉ„SM¸ ‚ô‡l÷ÑŒ+ŸÑ¸³³¼C âªTyôt®Å6Í ê¾‰5˜ «sÞ7í‹Üt0iP¥2hk+Á Kr´‰_´Â†r2¾>ð?Ô‹Êðe²0÷Dr‹4Ç{¶xño<.×úΊ2©½ý>`Va¯c³là(Xpˆ‡GÃúKæjh¡Ü=Zí¥& W†–hëhàEǼ L$à \ul4’N³¥ñdtÒ  ¥„óã‚!–æË·NéËönuYv6–ˆNDÇâ‰ô¼ZMÈ/ƒ™bÎendstream endobj 84 0 obj << /Filter /FlateDecode /Length 192 >> stream xœ]=à …wNÁ U#E^Ò%C«ªí˜ˆ!‘dèíKœ¦C‡ïIlüŒh»KçÝÂÅ=Nú‰ ·Î›ˆó´F¼ÇÁy–åÜ8½|©U`¢½ªðzä©íîojDñ¨K:Éö=œƒÒ•5RBc-0ôæïªÚz{TZØ)l¬Ér dÑŸ“­J ¤LÊšS „”I“U@$«hÖñê6vËÄåzýBKÒ[xçñ÷a [O°Õû`©endstream endobj 85 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 813 >> stream xœ-‘khSgÇß“ËáØ…Övi`œS¨©(¨û2 :Ûm®­—5 AÛæÚ®±I“4Mr’'—¦mNÒ$ÕЦ é¼Ô -"‚ *ü`…©° ÑùAØ{Â[péÏ·ÿóá÷ãÿ§B†(ŠÚp¨¥Ec;}À¦éÒkwm=¬;ÕÛ¥±¬}ÔNÒQqVÚ” ’ƒJq±’mxWÿªîùz$£(ºÖvZgÓèLV}—±§!¤ÔÚê:ˆ¾C;©% º @ $RŸQeÛd".×~¤ô‹ÈSøfÿ¤^?.?‘ãÅŠ‚=?±™{¬Ý½™ Ó³ù"—[íeÞè°+8ì8Û×Z`\®‘™üèdªÄ—VJ+ã’%Ȫ´¿Ù¬!MƒC£±T8žˆr…77gŠÀL$üFOÈééæMûM hÚ§ö;ü.8Ë´_>uûíUÜ”âªFs—é(H/ÿSr¼Á¶e¹Ô\uÊ9rÖn³ÑÜŸîϧ Óœ†,±Ñdd ÒÌ_®ü¸±å¨ަG¹âãÅÅ`¦’NƒS¨¿uµÆÑÚ~°ÔàˆÃ¥tlÆ™¼=Õ×c²t—,wïcÙe¬*V-dAYúgžªtJ=ì þA9á;·ú’¶@†ûZÉÞÆ _ð‚ñŽúÆÄÈH6ÎÝÅ;f“ø+`®ÐÅpÈ+~ xÒ¸z~H'¸?õô8³<®‹*§qƒ KCn &«"fþL4ƒıh«¥ÙÆñ‹áÈU`žÑ’†£_GÈÏÝ!738.ÄÅX<]ëì}©º"^šÃKêÆS|½Z™Ur±¸þØë]dÙFJĺ¥LÖý¿ÄÍ8Ïr_OYb¦oá“/°ì0÷ ©ÿ'ûW;?¤g“»‰¼˜Ÿ}Ïo>Ì­ˆ×øµa|km7•©…¹´á ¡¬+ Îî>a<Ì÷‡çÿBâ:÷Ó™IÈfÁΓ½túÖü_x=0sôd&ÓÎjª¥I=ÙÔL¶“šWß`êÑòü_Û7%}›Elš¢ 5ËŸp5Š6£jÝt$Ž$ÃçF⩈J…п…o|Ûendstream endobj 86 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 577 >> stream xœ5]HSaÆß㶳㜫ml}Á9PÐLP/,ÌÒ,6‚QI J,Ò5¬•[›ÔÖlü×ÉZ/\Ó¶¨i4,´±„˜„aßÐ…5¢„ aôžñ¶!=ÏÝóƒçG!i ¢(J}¤©Åz¶ëÜžŠ–Ó={»úŠãFpäCy“ ”PJˆ“š·ê̺ôzTŒìľʪj„® ©‘i]xBR´ ÙÑ µŸJaAµZ¢m@¢àÀ‡œ”X#ÞÖ®!RsÓ9Œ0GLµ*©íF¸<‰k“Ô\¾]’aQ³‹ý[J»l`·ÏåÕ4? 1Ž˜¥1g‘©i—³ÀÆŠ¬”æÇ lÍçHä j*‹cY‰èÆ‹:øí·d:¿ÔÞj¢ãnkO£'´Ãáàöé½Éoúga–ø§?'ƒY˜gª#:h†*O«c«Ñm3`qä¼iø3°¯n¤¢+Âãp.VFÚ LÌšñžqRØóQ"¶ê³Üà‹LpâŒ<îœgOž:j3c‘Çá<3ÂònŸÇÀš-ôTp ú¦|ÿÏ>á_¹‚f6×´Ü™Ãúå Ú¸x›t½´Ï9Ðáé¿6P—!FoÁªþ‘02¼éEz._\¶ã=Q³Úf¢¬«¬>öðêpô.?Éi-3àaï¼~9þ˜oÓu»·5Ö)爆èeÚÇ þ¾Í"G«Qñ ­á¡(-(Þ•± i›UYš38¸>”V*ú èÿ¼endstream endobj 87 0 obj << /Filter /FlateDecode /Length 178 >> stream xœ]OA ¼ó ~P I­IÃ¥^zÐõtY¡ôàï-Ôãa6™ÝÉLÕ§ÁÙD«kôpÇDu:âì—HGœ¬#5§ÚBú°2á©©ú³ W@º> ÙøE=±ºÛ²©7 xsP€Q¹ Iǘ쌑þ;‰M0šŸÏ Îk.I'YÀ„hWÚ(YÀØŠÛ®ËÆ9áˆÂ#ºTj”˜9žuøm|È*º‚¼çùY°endstream endobj 88 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 298 >> stream xœàþLMMathSymbols10-Regular‹ûŽùJù‚‹ ‹ ®÷ŽèáÜnegationslash6j‡¦]@h–÷¬ûWvú8w÷ø‡ùùL’…˜}………üVþ…Љ‹‡„‘~™•‘‘—‘øVú‘—Œ‹ÿ È÷z³ùJ÷ŽŸx‹}üµ}x‹wwž‹™øµ™ž‹ŸÿÇûyvú|w÷ ³÷3ûmú:™‹žww‹x}þ:}‹xŸŸ‹ž™•³ù§²¡³ ³  W/ ¡Ž‘”Ž•Œ‘ޤ ¢sÃendstream endobj 89 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 6293 >> stream xœ•Y xSUÚ¾¥äzYdé5ôÖâ2"‹€¢ ‹`AAZ  )[ºïi›¤I³5é—µIšîû¾Q7vD0Ű:Œ2ŽPÇ_ptfÎe>ÿnZ*­ãÌü4žsÏ=ç[ÞïýÞ¯õ¡†£|||&¼¹rerRòº„íIÏÏzvmTLfÂö4áÉÄ4œswØÝŒö…ÑÃ÷L|ÊÏ•ŽGÜØOÆQŸ %IÉ)¯¥.K[žž‘œ%Ùž½ãÍœ»¢¢cb×î^¶>!ñÅ9sŸš?iÁÓ '¿¼hñ´g¦G̘ùÖ³Ïý~–ôùÙòò(ê)j5J­¡&Sk©)Ô:j*F­§6PÓ©pj#µ”ÚD½J=Km¦^£–Q˩שT0õB½H½AÍ¡æR+©U”˜š@ùS¾Ô£Ôp*Q)šzŒzœz‚A¤FQ/S£©‡©ÅÔj,5ŽOm¡ü(–ÚJ=BERKH ÈkzŸ)>éÃ& søN÷½0ú•щÃõŒ wo¼Óó+óû=úÈêGþ(Þ)Þ3aÿpÿn·#เ܀s>óèÀõ5Ù‰k&–OtOüŸÇ&=–ûøˆÇÓÿé õ“Ï< q ¿ø6ÂÇgZŸ…Ù?ÎDÃ@øø~Wƒü˜×‹Ä²ç‚‚–ÀØ|¥ìVÙ7Ÿ}|.ÂñÙ,á0œæF¿w£OwÏ{Ò<{<Ï߈Ïã(¾Æ{ÁØ¥ßÿ" "gWÃ>MµX¡4ê×®²…Ôì{Í¿é-Ãj¨6+ñ8íQFÒ]hGçöªv@>€D©A,³|»”š!]²,pHnع.qìxåiç¹ãg/ÃûKe/2ÞÔðr·ÏMO‰¥{|ùvtBÜ„^\…¦ã`ðŽî/¦–žO.ʼˆvÐÈŸD=Ù„æk³ñˆ—ñXì Ì ú/}G#tâ fÐe·ßg$ò4xô$:Þ„Ã$Ò…n¦oñ'Dln•ÙR»;0ô¹Ú¨Ì–èÆµÞ´ŒœIr’…Ç]Nrò)ën¨cØ{18^´™– v%êꡜص.ƒ!XÏòεoΟOr¶á|Ù×e7¯y>†vÚ+ƒû€2Ý(R€(‰Ä&O"1êo; .ë5W3  ²ôÅrWÓ{Q¦ùÓšzit‚¥Ö\U~‹3W™ÉÆX0H5;ìOw¢H2ÐìAÕ}vAf't¥Æ\Mam+pîæÞbrª×do([½ñM_þ ºk;ó@%¡—ÏîìDÍþCð-nvžëÏQêÃé=(N„&þ:´ohõÞÐNìÛe¦Ë~ÕÚ_Êù¹‘ÌíËg ñ⊟ðøšk°‹K²»ŠöY»ÛþGbaª!·0· úãáLå–†DH­\¯ÙQ Ù€BÌ|mŒô÷?æöÊ©¯æ©6h£·ÅÍ‚-°¾Xq•1TŠS¡Òéœ^ZÖ (7Vv¿sÜÐ h6¼ÿ'û¡~Ó>%‹÷„zÂ<·HÔŒ|ò›+-5±º,}®reh~,Ç1KÃnÛT"4opØP…oÙvWC TATt  ô-×zŸrÈ¥Ÿ¡£nŸ?¡ˆoQ„/‘ŸLâ›9䬇èá,riTs˜žŠŠ ihÔ½¯; >SX ùyòLæMü¸FÂÒtTtx g§S­`Á½\Èöï·:ÜÍï¿a.-ªeŒtAx%aR;r+ÁÝ`+·×"õr­Äò¾ð{±pÁíÇnãk ¤‘(o•UcÞƒ¸â ;¿ÄOÃ6˜ Š¥ºÄ*i=q¿ÅQÔm²Õ¦Rc ûgp0Añ^¦ÇÜ&é †U.W ùk`7œ):ÖÆ°A ‡ ÷6!Wâ™?ŠõYÛsÈÆÜ][A¸b;mû‡ov£É–šókG›ñ´ÙJþ™Ž6û³—xÃ:vÒSÐôš&ÚOzbÓøø%¥µd}Ö.ô‡FïÍ}¾õíHýE ì§oáixž#ÚI³-ƒ¡0È‚øË}ŠÇ&CfŸêñBìé3 ¿Â/»‘ˆÀ¹“´}ß_÷üVò›Õ2÷žM/)Èê‚€N0W[úzúƒ-]:ƒôsèçÎÓ¤™Ãfî‡F‘Jú«—•ÿÆ«½-¬ÚRÓ×Â$ú,¡…i½¥u’fùÁ±›;åÝÞÒŠ¼È~ ál÷*äéæ#Ü~7Ð&F¾ç’ïÕ×V]3]ò¿™hQ?¡ÿ¡ê(V*;Z•£Hð^¥«)¨bØñÔ¤5Ðì#Ô`O‘SØáTŸi ëG%êˆy¬õx} ß5çêv½”›m9L%ŽTƒEV™Ⱦ÷d Hr R5Û›v†;pq¶b$å#H³Ô¸_J¹¿¥ø„f#±µ9 ´ÄŠ|ƒR¢ÎKÙ²æÂêóeߨD¡@RYû P¥‹­×“‚­«°¶0®K“`+à ˜'Ê^àјŒü=G¾7W Tá§tü.z~òÜ É“ âä?ó¶ßâä<;¹%ª|`¢‘DJ ˺<ýï'á`S{ Ã.Ñäû!^Ì¢—Äl×:Uè¼Å¯AÄ…²Þòï¾øø<œ…}ëTa}6ÁGŸ}„!ÜÂg 8ž*}~vâÆuªd‚à#†¯t”®!Tfë®BtÄ÷xàQÄ©Yx,Ãvã1’/§ q â çkÒÕ¶ §Ä¸Šn¼ôéçáœJS?=Póh<ÁïO®gùõÅ4òº?»ƒoâOˆ-$_sß’¿¨ÚÀMÒæVü@³VAÜLÒê7)4»âê¡1CZêR<†f'Û–\=G¸4 °À¼« ª¡¡ÜÚì…yÎGhɇ|„^ù(ñ#¿²S6 .*`$ &¹‰a£Ùh21ìkÍIEV [˜i¹Iy¯|M†“htñYÒ˜~à¿û·¡ìoÒ>iÑžcIHCù«ƒ¦§@:TjmÃÞV,4<:Žs(À ½ð!sÜ’¡£”W=sôé³?›zÒÏz’”îÏüUo›€xè@º›ódPx8l€uÇ*ÿña¿Ê%¸iûÍ—ÖàÛ<öÂïï@Àøñf5{ Ý&¯ý ÍïË'´è‚ t¹RÓÇ út¾xÈòµ$÷ýéøÌI4Jøø³‡ùJáø,ágVHÇ™«Iƒš ‰°-/v—ª3­2â!^žœÉ°_´š%?àK ìR6\ dýB37ú‰pd+zc÷–>x °Šs•!»°œË~—®üê…²^²þÃö~o(7ÿ˜Ä}y2êä['ÍÄŸh¾EÜ×"ú4ú›­Ck'áJ¦ æJð~üON™WhÐK´qvM›Ð‘•tÇL‰Va«ƒ!³’fC*Eøª?¤xQ›§Ñ¨ýUä… js£9nþu’7#Z+®øaÕ÷„ca«fkf;ZË!͹©V@²J‰«8}NAF;T‚Õêpv´¿[y ®AÇReˆ|á‚Õ/‘jYiÏþÀfuíÛ")ÏFñ*í.ù¼‹ËÐp@ãÑ_W!ß>£a=hxšO¬YN¬´^Lr»´ƒpË ß±ýQ×n@'”*-:­N«%÷§—I‰}D“µÚ§œ˜N,|ðsøáÝxëNœgém¯Þþe5Mô¶|Î+k_…H<œïÖÖÛêM¥ÎÏ‘Ïà x{EÞÁô:èÃçñgÅ΃ñö<2˜%( "³p$gAV3¹Ë^i© ÐFÛþýŽ>§æ÷ nRc=íWϯªÑÇâýH;Í3SàJüÐ< ~8Ó—f£aD9}Pqì@7sÚ PA¬1»ÜjµÙÌ–zYu*é=‘Kpo{MP §Ñø´™ ùƒXöÆÚy°¶Ÿ+¹\zý‹“á¨ÏpIwÙ²¯ ¦Ôd¡—Σ)çÑ\‰_…6‹m]± &˜~M¢]„×m]ý‹Qtz¨¸;Ó)ƒ€P%é±øaî鹺˜V¸hcµ±]d eÎÑÛñÑæÁ‹ûè<¶P Ï)έ6°·X\{ÐîÇßzðY¿AÂOžƒÅ‘O{ ªGÁh¼?..êNmŒ‡(HLÐ%h¢SÛa/´¶JÚˆOÿöC!Í™n-ùòåÕè±ý°â6~²©íâ: Êí•jBŸ§Ï(Éj"â¿Ñeë.ùö‹˜qÚºû»^¤é¥Ú(‹ò^y%oIAºS襄(,ã"mQµÚ£6‹Ën©³4gUHH6£ 4oÉç½·ÑJm´·×µ 3~ƒ¹Ü¶—C~Uå:ÏàH*snÙc?j?ôÁþ3Næï÷üŪá[‚•{Pw6¯k«z#óÿ·ââOÒÚ£S%$ëvë’‹cCæúÙ¹j­^¦ÑK 2Wn¦ÿv¢ ž×ƒžêAú4©Ç‰OF ¬ÛCxê=ôÿ¡¸äjÒÉØ kAy‹ZÖ‚Ãpè”ë ƒ ·ÅæJq5ò³5Š{ÜÏË8m¾^W¨Ñg—H«kݬg¥­˜¸û:gsš­¤õnº÷wqÉå”Ó›`l Í[¢XÒzŽÀÁÓ®Ë 6óv±:2#™’ý\²fû»¶u­%@¾µ;´áž¨ÛôÁ¬¼©è]û»uM.‚·²u¤à /ùFl®RÚó‹°sè< v•ÙÍU–º\—”dE_(UáÿÅ;¹|­L­Ï6äÙ” :Š£¸•©ÐAÚpËRçÅKøùkç}øƒ¼©œha‚÷i9D{AÞ!€ý“`¶CÀl*žI6Å •„ÿI*!ŽlÒÅv{»Ûm¢j»ÁÚ嵯›J´Åª"|Eq ‡Þ¨"$›¥(ÈÐg«äÄÁ>ƒÁ¾€‚Œ E98Àb,sðÚÉ9m¥Ä¯„^‚Ö‹MeZ‹Ô…‡}™ŽHN+î¸Ñè™o*‹íS™Ñ^H˜$ pæ¶a‡j{¾iÓ¥¯«¦ÕF»÷¬ë䬩ĸj4*áë”#;.…œL']-_R¨6È«MÁ> Ìüü§K°äw’Œ? WPýy?d<ÿÖù5äÛŸµò$ˆý¤JD<ËÔ£I&—° УAAän:ž$"Ï&[ƒÈî òȠБ%"õ¬]&Y'ˆÈ³~vìcôcƒØéŽß ;!™tMTCñŠŒvSêÊMRERŸ­ÓKúª½ï‰J4ìßÑ¡íbÄÜ}ã¾R ¢DgÒxØÏÄÊ™CÖƒøÁqÝÇ èûî^ìº0Ôè=ÿ–¡ùKw§ösJ&äËÔy÷Öü¼œË—B¡ZŸãÊ­&´å,³—ðkî.çœåFèîw°ñ!öœ“1u!ò'úAø5ÓXüh"IÀ«>ÇþÂ/ÿˆþ‹mE!ÌŠbqž6\‹`+Ù€¦Õ£)_ݾL†äãϤã©}BG„¿5\lmI#…ŠͶ=Ö¶&4‡³4Xlj}¿¡¦ÃÚ LF–†¢ý{ýÞ^ñjl–zB9°Œtý¼ø Zõ&]²ìyN£—EIwÉ6‘ÙC YÚ‚t]b}¡ ¥×¬OÁ 8]¢zëÁ¤½'4‡Àûãâûr{Œ!RòþßÖ¬Pݳèë|E_— ȵB£Ÿ»^)10¬GZ˜eÐ%¤UèÊ  Þ¶ÝûÚ½ܬ!*Ò2H “ŸD!ý€ØÒ8ðË3¨d«èO"êÊ‘ýO~x¶äs"²^¸‚Ç‘ÏÍ—ÏÕF7*+„Zai6¹ %ê¢Ú÷·}Ì5ð¼%{A¹,tMP¶âUœR­Õé庄/®n>€«À£ž‰e$±ÖÖtc>¤±©èd3ZÈYšíïmi‰l\i‰…Ü>ùZUP è1ƒ6F—‚çpšÎø}«âó·$áåœ.Iƒ§ú£N.®€ëð}uË&›ýˆµ¹ìkζÇ\¶·|_Ù!c}û5é,Úìö;×kìE<[HôãxZ*v]ˆ>½ªµgO÷‡Ž%—WžÃ ‹"Ëuqµòjo¬Í¦Ò§ÞÜÝvÐ8ó)¼£ÞªKÌŠMÌŒNM3ÄÖÈ@—Ô_`ïÓ¬ã6ì_‘¿&ÕŠ7g‘ê*Î9h³ÚmæjAEi2]¼löõ5h, øáfÙ-oñ¨Ðu±©\Q.%htjíîä$©òAãPºòKrkvC $HÓr3dq™úƒÔ%%÷C9»«¹¹¼œP¤*Vç•guB´•7VÔ–uÔš+™1ÊbþÕb´¨ØRL»GzF=>rxXòè{ËmFáµÚb=š¢þ˜’õšendstream endobj 90 0 obj << /Filter /FlateDecode /Length 3475 >> stream xœ­ZKoäÆÎY—ü€ÁĉŽ­¡Ùo¶måÄ1l+Èa'®4ÒÒžÑh‡ÔÃòßSUÝÍé&›Ú‘ìa)Nwuu=¿ªâûEU²E…ÿüÿW»³jq{öþŒÑÛ…ÿïj·øóåÙgß3oJ[Y¶¸¼9s[Ø¢f £Li…Z\îÎ ¾¼üÖ “¬ªÔw\^Ÿ½)þv·äuYifŠþ°_®ðÆUq½¬ÊJ Ã*[‹ÒÚ¢mٸו2Å}ôú°‰I¹ó”•u]´é!wѦ­?®VÅÍ„C·û7ã“åÀ-<Ân¯ÃŽ]þ}"ÅUÍ þ¯µvúvßã /+î%k—lz|/Š'’`%u1,äE,€fÉ ,¨Mñè–r/õ·µn\4ÛäÏXôÛ¦‰ŒHX%¦òFÒŠ]ßÄÒ‹•Úh?ƒý´åH÷pØ:OÛÖÅ[âY2]üì W¼è›ŸÚ˜ò-‰Âý4ÇËû‡äøß"UA†‡"2ºØ÷þèšûÏbî†hQur¥¶¹u ²\¢ž™(•´|qùÍÙå'oˆ¨T""êÔ¹Á×þäÅ®éís¹\Õ•FêâŸË…1¬1l¤µ;OS¢»=-K}[¡²„Fµ¢j.¸×*nÆÛ¯é8Jü¦9ô-œáƒc±vc­Ð"ÐÝo£×ñ’¶NÑ©0“Eò×Ý$"h®5xY²ª;Ò52iŠ. "\ƒü™7qrÝ]‹ÞÃÎÏÅý!ÜJÊE9©E±wM ˆB­{ÏŒ¾ˆ”ÞùØÄBÍÁGV…[ý:GEÂÅk–€”™:åWk=ùÕÜIÕÀÌÿõÖ)/é­_àåµ—þêòì;\(·˜ñ¸çë3^KØhZ[Ìp‹Ý™0à÷p‘ðf{öÃ+ёಬ™]hf\Ë"¥WQ%ÄË^ºËŠK[r#+0v%%Д‡C¦øþsï"!LhÃMÈFZ®Wˆ¹ŠÝÏÁ?$eœ/WáY7wWlÖÅÍùóùæ¾»`›•BߤÖ€^oÖÅó§ðÓz¹ÂÇ=®—Ÿ­ þ =©Pe޾wI%¼Éñ×W×ÈݺØ<ߟ÷ï6}ó®é‘|.¿Fd›CþFý:y¼…*>þäããòÚÛ]ãIªH~ ì†yÝôMyshvIÛ_ÇëâÈòy·)ñu÷þ<¸›—xдN¬"<‘J §g ±\1eTáèÑÎUXJqaïMÁ޼±’2ì(‡áM¸ WsÎ EÄ«ý›z%þ” Z¸Œ¡M‹h޵¬¸m)ûZÉC¶vélXc§¸ˆ[[ˆþ𣔣Ý}»ð©âß9K"¸kŸÝd[)Ü9fú;é­'éç>ÁÄÉÂ~€3‚M’³}‚³¯=Ü0G×0S@!Ÿ)RwR›bºãžnX¾²T h>Ì ¤;úš–Óreک܆BIO´9(-kî d¹?l®Û«þn›‹J•¬>b…íw;_y0i¸MÊ»s¹º>Å¢i,ä®ßyî Õ•PC)Y‚?÷ËP:< 䇱æÕembÅ¥ómHè˜IÁ¹Ôˆ.3¢%š-¸#5;I´€ÃËÑÞ&®v7£Î ³Di™³¡<~±˜—¨ÌI¥¾'a‚&‹Ç6ÖäÈ@ñl€åŽ@Ô·³5CZZ4Û¶k¢ã…tE=O Êag^ȶDI„œE#²4˜µR{Çœçõ(b‘T&ÓŠ!SM+†˜RY×f”4\+…Q“T7lÐ.'ÙÊß÷-¨òU\ù{Âʿ̦ArUÒœ”:LIy:¶b£¶/—§îNõkËSg£/äO¨­©²t—hÂÈâ „yª!-@X¬s±±T!ë‡ü€™ÒÉúû™çm;iã  Öaß ×àií3B#úÅÖh. Y0[( RsÉ›ˆûsj"KrÃ'y׊‚ë´Ùà÷@îÍ×€ a ÄaðåG ÊÖºžXš’Ñ{Pn—#·¦#4ö›¢ãh]­9TWžWeÇ™8umƒ¶ËÚ1®ðÆ92XÀÛ7Wýùrì>àTw›'Ä–ßþã›oÎ2­•‡ÕàeY†jnÏ ¯‡sŸæbÚ`ɳŒTê¡Ò&³ÇU¥d8­o~"}ÔÚL0Ÿ€([1óJ”e%¸—çÁI.dž€CÁ- §\ 0nè¡ÔÁ*ãHpèúã†æpÛò.ÉÒ¾éEDÿE>~UØÚðœefó‚(õP ¿!èLX×åÃ"¬k;IÖ±íè¤ ˆq†é¦¦Ã!2xú˜ÿ•`Pþš(°Üš×>3€Ì†ÔFÌ­&÷mbìpíÜ[÷û\Žõ9Á¯²‘ÜþݕС¼™÷‡˜ZUrÛ*nÜãÕþ±¼Ú‚³Ý-(‰ÙQ›tE_bœÏý!-Ñá´Ëýp#Ìë¼6pÙ/© #•@>;´Í,lN¤³J«Ê¡tqÅÝȸƒ•Ÿ>„›ø)ü†û$jjÒ,×âGäÔx–Ќԛæ¢î‹Pý€ k‘Ð`;$;=r$£‚'WûÍÍ *¬Àd¬An1ƒóY úîû’ìgc¡p‹HBŒJ|1Y[±TX¿K; ™-œ’X È!ˆ\7b®¹!2, dΨ™6¥®M$’/WóB¡™—eS©B!F´w—Ʊh^&/ .NÆPùYJO(+ ¤¿.k‰àÙ3 xØ8.fÆÝ¤ÊP¦OõÛìŒLë0AÚyë¸F¹boœLRdpâeþ“ë ð""3®Cˆ åÇHuAy(C`¯è²qRÚQÄ T멆Ċ1xï"÷,žN ¢$@¹ Mc“k6ªëuÚlÌKQ=n_Ìz€”œ@JÒéaòÌ`f¾ –M£€/ù/ÑY²=x€idž«òÁ#n*çì1¬xâ“Ùt]—’ Ԝ➬èF&š¦WÔãöso—b£¯[ Ëdäzž~u5 sŽJ=oC7QÜ´ŸßLûûòûÃÄëù<{/€n÷³M<—Éê­á¤ÎK1ó Tï˜/¢{×ü¢,JН³é.'§ßQÅt†E“H¶~ä•„d•ææôñN6C£ás?¿O†™«°fEcM߯qÛöí¡9ü¼ÆRþ~Ç=8 ãSŽõ£.;3þtU<2toþˆr” zþO”‘ÂM{Õnƣ8>^onš‡mÿâxõ#÷“òCÖ1+çÍöaOXSŸOiöˆlÿ>ò"ÃÇ£XA”¿}.í7þ烷]Šf ¹án×®ú‡Ãf êïú5é÷‚æ¹ç1wÑX–ðÅG$ ¼‘„ q’ôbEÒ·ÌŸõánçþÀSÆÂ8vÍŽ…5ÔdB£æê⇯2Cã$NϾ‘é`91ËÓ&̳oä Shiæ§Ðçsµ›BþUê´†“‚Ç…9½W:L¡µû0ùœ«s_ øû@–0íPú6¹â/K÷iÅo…cïëÙ‘CfbD¬û'BGÜLFž°•µJuº¦·óe‹UQ—mæÑ,dÈÄ‡Ï‰æ²øø€CÐžÖØ“Â*Z% –vÛPÛ@(*þ’ú`%êªdZ'H?)4½¡Ï!u±ÛS×XqúÜ!i§·éŸ]ç>`¦/7ì sÌÎC±-u´$3nÜfLá§¢pêSø l‚Sµ“ê÷H ×4ÆÏqûfÔxî‚ì)¶ÂQ¦æ¤ê‡óJ$ q%?4 ÎâÚ_WàtÞ ½®0hÆ¥½A‡)ò¥!”¹ZèQX½§ MB +~jnGNŽgÓ§ißýCËÇ-endstream endobj 91 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 2465 >> stream xœ–yTSWÇ_‰OÄ×”÷JS—ÓS—öhmµUG´*´îŽÖ"¢a ’Iùe%\0$²‡%*®¸`«­MK™.ŽeœZ™¶tz<¶ûèu¦s¸ÌÌ©çÌää¿wïù}Ÿßr¿"*8ˆ‰Dá«VoÈÊHÊŒU$eæÎ›ûüyšJ‘”øaÀñ¿¨†â$*†Ð`ßÓ¡‘aˆ<8Ñ?‰ üd™Y˲svåªb’ÞL^"OÝž¾S‘AQk©uÔ j=Km¤â¨xjµ”šC½N½@-§VP+©ê jµšZC=I$PÁ”‰º+ÊbƒŠ×ˆ»ƒ§›$s%HºkÌô1—èôõ±ò±ý!…!=ãJQë„_ƒf[(ð ¯Æ†&ö‘8ãZž´y7AX›¹{à–Ý›ããÔÕ™5ëa)Ä%¦¬>üËôáé½â¨(+ÙÂmÃîÒ D§W ©‰y›74à8É5£U¦éÇÃ_ö^‹øÌq%Rp;rZ¯`ÉiÉ×Ô s="ÁŠvÈÜè‰?ãñ€'ƒEyx² ËnÏFcò77bè™.­$.s[F–ÌÍÉîݧ º÷]µû*:+/z»ÛOswA7tª\‰®Dízœ&Ùö¿B©¼CÏ{EHrW<´ÉÌûLÅD¨QÇkwâé8tÁÀ±mçPÏ9tmm» HŸÍ5àgé"#àÉâ¶LéBZsµ¹Bœ  U¯Šb¾¤s³¯¼ÏOljé8Eàyh  H@Ðï\ˆ¦Gãx/šã8oQ]Ø­¾µ}oÞDÝ7ÙIÂE¤ ù3¯ý€ƒalÞ–«rúYf~V#afèý`וnã~ѽíex[d”wÅIމmD ͕潭q_‡Æj™Œ~åÉ|<>22 ’a{Mþ1­L–š´‹=Ús±©>…Sówc (2xôDë-ðÞ gž–“e¶eS"i­ÑªD b™h<õßz@ÂT&”YDÕKœ†Nž³y%yRfN€Óî«G/°‡~¸<øT€ÌFÞ¨R땆¬Ã…8 Uö–€£’ÒxÌ.aªK„Þ>óå±0=!«¼Ó¬­Ên‘;ÞqÄ9ߨ¿ï]{{ë±[€‚@;Ï  KœûM6—eJõKµ)P=”C¡Ú`Дèùï@!à °%Z«Û^•uDÕ¨lÐõy 7öª—•þ!)yБ}Ùð•q¿Ñª…b0–ñ*̲üc™l`2q™‰n·«#é¤Ñ h \þ¨êÍe·)Mz-•zѪü0ôû>gÝùº½uáLúM’U^–äH™ž’ê¨Ty*pÑpèsõiäeÑt)a„§KÉEr¦pÁ[ÏÏ^@ývŸÕy¸ÚazQzrX2B¯Vz`˜^Ó0=ƒf1p»†é} w>'ôl^v—tñðp5¡e,Š@Aèiì¶–T—«9}F äö¬Ïò ¹hÔ³Ê@£¶~ÛQöÉMu3ùÛpFV¢qdj‡à ¼.á…hu*ÄÃk'êÑË(rðø¨„÷MDÎëïðšŒòb½ò`~#ÔÑj[3Íœüع¢sqD`ka*OÊÃOüù9Dz ΣPó¾ÂJïBz±Qp ÿ"tÔý H;±#DèÚá¡X$UµØï ‹' —õr#ô É}B¯ÜãY}véÖÃ/JˆÑË pœ¶5pƒ‚Ob’¢)ÿ²[Jöç«ÃîD? gMÒÙ÷ú{Ôò1tÚò#ðñÌZ¯]ò ÔÀ¸d+n~L–uŠF¨}8ww„%Ì! YÔ/ +r}òú8"6„¬™yX–‡™ç®AO[s‹&†e–P$“ñÆòâ=4ÓE½%ߢJŒH€õ{Žæ«¸\qÌÞQuÅw²Á{¢õ"´CWá‘Ç(ç –2Ö’·3Â/­b©Y¨¢Ž/Ÿ1´°¶7ïíPqúÉÌ¢©,`qWÿ ÿ>P-°hyesñSƒ³ÈBCà[\ô6Äɰ–l¥™·ëÚà.¨qDYJ ì¼QÓ€^ú‹ÃÖæ_ã¯ñ«ý1_£ ¯Ã™”<4QfïP´ÆÃrx>¾`ên<†](eb(R²RFOÅáë£v1RÿõVŒ¼4E]DŸï2Üc¥ÌÜ ä=x»÷L7p8ÊŠ ùņCîþüh‚Ã5ÖZú§áF vßÖô=ÎÖDBÜZUm”¾‹îH˜ï-ãË÷ªcmÿH| p¿el~É®Œ°RG¢ŸÃŽR†¿‡3uˆ˜àmÜUA,a>ÄÓHÌÁ¡+ÝÂ%`ÏØbK;´•·9&ì”pGfm(¨Ï€tÈÉ2äè³]ÊfhƒºFk] ó‰£Ár8ói~Ôæg – *ȼÀÍB+fƒÝdáÀ:p¥ÊÑßsÂì6‘%’ÁC¤Ás‘‰ÈwšrÂw¯šìª—ñöK!—ø¸ß$dA¢‡dªï~z齩­±|Çï.0ì"²4A£±©œ»…,‚€ÌIDc h½}Wø§„øËß +ŽŠûçZ=j_‡.>¾Î»ä¦¯—9þ_+Ûþ8+û¿u‡Ê#,«F™N»Gê 7%$xcVèX·Éd6™Í¦J³åjh(Eý ëâ÷oendstream endobj 92 0 obj << /Filter /FlateDecode /Length 169 >> stream xœ];à {NÁ ø¸ŠdÑ8‹DQ’ àe±( ã"·Á8EЇ´ðf5°a¼ŽÞeÊ)À 3µÎ›„kØ pvžIƒÜ¦z¢#aÃMÇ÷'"Ý hù®dOÁy½Áà5`Ò~FÒs®zkAoþžäL¶5¥P-©Hßí`‰ä¬øY,›ŠÓ©@aK }®âU¬ø8¿¿Å E÷/r[V)endstream endobj 93 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 313 >> stream xœ.ÑþLMMathSymbols8-Regular‹}ú}øÃ‹ ‹ ®÷æáÝ arrowrightprime!0‡ˆs¨÷¬ÿ&€’v÷…¹÷…wÛvúBwú}÷Ž‹‘‡‘…Œû¬8çu÷Š‘…„‹zƒ……€œ0¿;×Vý­|„€€’šù­?VW;z0€‘…“œ’‹‘Œ‘¡÷Þç÷¬‘Œ‘‹‘ÿ 1÷¦ø©o£mcjˆûüFЉ‡|‹‹~ª‚’‘–÷Kø:–‹–•³ù§²¡¹ ¹  W/ §Ž“Œ‘ŒŒ– »ç{öendstream endobj 94 0 obj << /Filter /FlateDecode /Length 2819 >> stream xœåZYoäÆöó ?!Ã@z²n߇`ùÁÁ&Èõ`[A$ f(yì9d’ZÍ"p~{ªºÙÃnGZy×~1H<ª«ª«ëøª¨§´`SŠ?ÝßÅfB§w“'Ì?v›é——“×_ O G›^ÞNÂ6e†\ò©Q¦pBM/7“+òϲþa6B”ò§u5›Ó‚*ˬ¶d“ÝmgÜÂS¤mfsxÆ` ù{YïÖ«í é„aÔ‘æ‡9òÂ9Nþš½iWí²ñRŸ ^:®¤}{ù7бTw¡Xa”ý/—"f—ßãöhJ2—’MçBVk¤º"_ÌæŠ+PŽ“ºiï7üüüüÓÅ®ºý|^,«ÛòaÝ~¥éLÅEpùÉå¯ÈíÃvÑ®v[d' g¹&û³xgÉÛrýP]Ï<+& ¥p!ùïìΑçtŽO¥ãA­ýg¨Ãíj±ª¶hÁÀF’Ïç½ÏòÀPZëYîå|„'ù ‚ª~~ó®­»euÞñ‚S¢{¥ªËŠ j¿ÈÕô‹ªíÛU½Ûn@Ÿóh3A¶å¦jîËEu¬÷ÅøÉä¶úóÌâ;²«gsI­¿.ÃáKËñEû]r×y–à]Ä/qÞ›Õæ>ñôGÿJ–ìË#ºÞSáŒ$G~Œ,Òç»ÌWËä®[¯ØœÄ-ÀeÙɧ’ä^ž ,ã(,ÎÞÜå·MãýÉs—š<®À(~%Þ%²šNVÐçî`%;ò1É('ogJ«² 5ך›` ˆwÇH󨿘áS!‰ ëî„E#’gá–úåðË¡_ØB[NE±×$„lÎCBb1¨ßŠœ‹*Œ¤¼ãrE ÈæÂ„¾U‹Ã%“‘çï:©z ›4ÔSè‚iÈH@…†2OHÇ„›Bù-¤„¯ÆöÁX!„â/ÊÆmbÄPè~”#‡¤¨G9æÛ@O29GÈiiD‚× ÇÀ9À1Û2õ¸44ÊzÙÑI’FÀ®Þ”k|Ãá\t¶dÕ´õê&yº^›ED²lÔÝ XiMüáQVç !è·'I`·Ù5Y°Ò›”PØ% ïmÞŽÛR˜c¢æ\‹B;1¨Q¸‘ZºÞÕM+œžÎ³o(抔áÒYCîVo}¼»~!n»J-Ù=$®Ñ.Rª]Ƴ‚.ðòéPîbHŸyíÈ#è…*y¥!=ú„Fá(Ê€7´mð½ôÑßî:aW¿Oì—<€æYF«:6Êa¶…)‡¤»~Hü>’hIv·Ïx&Ú^¸Ü3‡gquÜò0½†MSAšÝÚŸÔÜËšÑd§d¡µáOYÛÆ'ž@r$àNÝžƒV–ñŸ±T‘¤”¢v:OIŸMo¨Ñ9"¹KF‘ÐçTÆ ©å/¯Õɤ+x¦ÔèAbŽçí¬YŒÃP¨NPOd=B¢MÕMU-¯ ãB*ÝáFÄN ÕžõX0Å…õ,¥”ç€Ã»þòƒ³=KxøsÄåvÕö87å³&ïþwà0X¶Ú¾­ê¶»§:[Ñô5ÙÝ|_-Ú³mõ¸,Ûk{ ·€#ÓW3°#‡Ừ-¿+Ûq³  ŽüââkÒÉøìÝ<2ºbß^Ï^îø·ÇÖ|Õoè§!lø¾®–«E»]_£ÉÎzP,q– ê Éþ*nkÀØ`È‹¦úñšÐ3~vóî‚êz†?£½ ÔAn (p·¯æxL¸UìÄšª÷Ôœsä T¥‡ƒÒ€1¾yÊKd”UÖo‰"lpF¸ˆã:±Bؤ¿x†ðÈ®<¢ ÅqÉ0_«,4˜*ò4áÈñˆ^ Ãôª±Šg«¥’ÐQÐ^Ìs„ѳdÊ[A•}t¶D€ÕF§¼Ÿ&Œ¼UÊй°\Z–-1ÌA¥b)ï§ Own.šëß;X`†ÅOãb í6éœAL–ˆv(Še³ëˆ¨"F(×Ùm øÖÞ ý*ìQ<±XƒCéOúÀò® Â`]G3,Ïim zYÐ+Ãiõ®i¢–ütz4Ǥ%M¦ü1’Q¥ŽªÈÎr•Ÿu8À&  @9Ç¿u€]¹H{·6ÕÃCm”áL.{)ÄäÛ5A¤2VJЊù`h·"úÀÃG çá jC?÷ùްÂ[F†ý>b2ª4I­žwÇoWmú1RÕû£ïüq“RJf¹!gXÀ!H·ŠdÍzæë‡àÍúº`¼…®æ¥/ÏUdàå:9HÓPtÅp(²ô~×+9¬ö^O`½)ë»lMœ¶0ؽ=$ÑiKÀÑ»úD3ë©`¿HLs{r‚B¾ã’e°ç'6½£Žc £™Éºã+ÈàÖw4؉RˆO…ü8šU ØÖ}Û çÅG¦éÓ݇˜æž5 ·î„i¿û5 2&-95 -P¾?Š31÷«8Óû[L OX¬3ˆÔ%isýOFÓ/-Œr¿=“…øTk?Lõ]•} ORyœ&q5•ºÃÙÛ3ßWòýÇ¥ôH“¯j!« ŠÙTf°ì  hœôªCËÖu~¡eÃÑ+U#ƒðSÛôãE¤ãÔ[æÓö¶lRHÖ}d~s9ùj>§«i}ú3ºLÏ-~E?‚gSÕ~Dè¡czš[~¸=;[x.4*|“÷ƒ}鱿åÉÓL~Þ…Î`"Éàø÷Ë&’§‡‚>œÜónVÛ]O²3? {fòö^sÎW{>>¨|v¾yr%~ÜY–õr…ž'./snªÞwÃÃcÂqÉ'g‰JqàHõèÀqÏÎöü‚$x§×Ó»f‚ŸŠ¦àÙXð]Æ)/ um&\ïóñÉzòÍ阱S(aÆèÔÉ$qðÔ)Ãã4²š×_+:µcŸúÌ5v:©¬ë²Æ¿¶ËªžÍµé>?¬ÚòÛ~‰²( H-Mó°Áð0Ô8aÉ=G¦|?01?EÑÆ„¡Íîa½ô KÎëU[uìÎ1²›º:ˆ†|‰Ø0`bG ½w„ŒÐØöÛRW¬Ì¦à®/F±`åL eûO]½‚ ’ZÓ*8‰¼\eb uÖ fl—;¿Í…ÃÙù˜êp€âðE+Ö·ìÌUÁ9äÚ)Nhœÿ䓸£ÓöÍpB:U+µ“ ¼Ö–uÅŽ;Iµ9€ÍLµ¹¤²Àz9Çæ}ʸ4ùómÛ[î¶5šB¾þul‹‘tl[n•ÿG›‹p‰•> UÉ iðv–cÊÁ1@µaÏøìo٬ಜ³bZÖ ¤Íöˆ]Añ?±“+8ÓÃ&àçØš?gj'Ÿ6µ²‡ãZîFåxërö«8­ëÖÆî“9 ¿è«ÙW“ÿ±I endstream endobj 95 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 192 >> stream xœcd`ab`ddôñ ÊÏM̳РJM/ÍI, Jtwÿþ©ËÚÍÃÜÍòþ»¦Ð)ÁãüG@€ÑAˆ‰‘‘%ðû¾ÿL Ýk~¬^sºœñ{ý-æÁbk2Øu:¦oÿ±Ÿ}YgO\RrX±N7Gû²îƒÝG—qü™ÊžÖQ¯#—‘Ŷ¥ïa÷ |Ô½¥ƒƒ¯lÁçYßó§N^À¶†ë:·KH>çò˜0¡§wòi"Eendstream endobj 96 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 318 >> stream xœcd`ab`ddôñ ÊÏMÌ3Ó JM/ÍI, JtwÿX÷S—µ›‡¹›‡eý÷ÅBgOð`&C#!afFF–Àãß×ðýgJ–bèÞôcþ¦ÓåŒß—>dþÑ+¶)]¥{Æù»ØW¶wçÊyz«v§ws¤°/í>Û}|9ÇŸ^ö¬î:¹„¶Cý7»áÍîCíPÞ~þáÉ&ÆËß¾OýÀücÝwÑ4¶ÎÚFÏš†–V«îÚnŽßþlßE>¯]öäôª•’+WnÙ×}‰ã»àoÖ+¿¥~‹šéFlk¶dÅÜõ ëVÇË-Úwbã…nŽ/‡m­\bœ\½å7þÎmlìêêΑüáÎÆW¶à‡ó¬ïùS'/`ÛÄu[Ž‹%$Ÿ‡suOoO_O爛ÞÉÇyx„$endstream endobj 97 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 3152 >> stream xœ•V Xgºž˜A#ZÛºU¼kÕG­zZ­h½²µU¼ å&A®*"ážä# ðpG@ 0ˆ€+¨•Jµ[mµôѵÛ.V¡ „Óû(‰ö^±_Ä%¢+ºÜ¨°àl Xܸ_ÔCó±PAG“yQžd°ÄÞ£Ík°üóç"å"Á‚G#èEÉÊü\L£õy<¾@s¾ ï2âÎZèT9 _WVÑ7ôê a¸œ Òªßàc•Ö?ÑÎVÛÝÛ*De›ëàµÁoܸÍÖQֱІðzŸ·ýü¼byÝcšûŽüæWôÕ­/Îîä4Åxf•¦°YÀ™Lk!NCš×1Z]b2İ‘•«*«Jëyç¿Ê ‚(µi3Ö˜d]x¸Kn¥q¼NÅתªBç½Y•³ªz؆ª¶»H彭糓!CâºòÊ…O¨ÎÔBòa^«MMÍÈT𔹡.÷¯ÚVU¥•-é]©])G4¦ƒiædz@ÒÔ¨?Kæ5ºÜd`“ í}ŒgBjQnvvùQÞ˜[Xœ“Óæß¡1Kº´_¿"‘#36Ûº€qS¼ëÏ}–Þ>-÷ñ>ŽUôDx3o*ƒƒ×Á7Gy¬Ç©"™Š›"Ý’)35l4Ã}~›ÔÑÄþËØnž³»rüãk6õ©Û¬m²§.ÒßkSóΈ ™õwŒ×0 vnô|-³ý_üs4 2“ à×Rßš~>€3Uu½lök“ ˆC2Q&IHŽÄhf¹¶¨I°š˜&}Ñ-Þ,Òþšµ°OZkÁßÀ*ÍÌ-}r°0lb‚µÉËùh%Ýj¸ íÒº ­š‘þ,ˆ³ÎeCÖ) ‘ Ðha?BHç3íº’Hˆ‡m†&}1LôÀZ©) `˜T#êkx‘Ù«ñ‡DP³ío€ ]aR¾º84™I—Õl,Î(•:Ã8©ö”Kg™f¿´=Ô0IÉH ¦- EùybN²!¥JÁXh,x„Ç&þHŽSŒêR˜T †cÔs7'š>j5Vf?ó.süq 6ã³ëå{¸¼ïºD›5ãŽâBÄVF ;ƒƒátžŒdJ>­AÇv—îvÉ¿Êʃ5µå5í>9 Ô֜ί¶«'p¡°ŸñÖ®Ì\æ¢Ú,§^ú]䕯ZÎ[Jxn•_N]pûdóåÒ[Yõ‚3Ï\î»Ç·ñì'=Ÿáœ\ÞF¼¿57›1¨M6x Í’§>qœqÓ Nk÷„DÆðx…yj8O40|ÏÂ4$úž8“þæ*Ù Ø“±-*@æ¯Ü>XÓœT Ù6wñe ² Ë;ΔµH<žŒ©ñ«Ù§ß a*².IZƦ»uYc?úÞ“[WàhE‘4jÐÌàcßÚµØK?Àéøê­ÎÞâsÚèf!.+> °Qñ55•GÄKkZ’ñ³ÜÉ8¢x<QhÀ1ùOë‹nSŠ&3´aª¹QªÓf)Ò úW_sãÜs¬ÍÏ´n}ÌpÛ7?W* e2s}º_—úØÅ}Qq=pôç§Ú+ n:…nöð>hűœaŸroBÀä}PÕÕ®½ ЙÛ]sÒÔÐ*vCœŒ« ,J$ØÊ¾4ÛVvH5¾ñd–i®>­;/375E“ž¥ãC§.ЂÝà_Û¸ÿŒ®ÚXl¡M9Pùã–ûÒ sšó KÜ~š†Îè|f°JX‹/(HsÊ,pzý²Éxö™•GH[ð²èzò À#IvC k†âû)·‰Àò76¸0Í” ÷[é Ð1™ëê€ pJʱÌZ›¡&ãrÝÝ~ LàÄŽ,ãÉ4=uú4.•~óž¥ýˆý¿ ÖÁ®åV‡h®ýyå•ý‹ñÿÈ?½ok]fìe·á‘|(ýŽ"Фñžš¦ã37)c”ꊴ#©¦Ô«§Ò.¥^!òã÷ko^„›ì÷dÌ—dO®ÿ/Ä”t§á,Øn&}>•˜ëÐh̪‚C°ZªÏ÷t`gP/ûuéíjÄ[(ùn"/ò„ÅjôùåÆ|}TÛ6×I-=»ÕAr)×;H-‘lÆ\ Ê Y9'«œázÈ^çgHò­|†Â)}eöï Lá ËMÜb}¨¨©‰ ¯Ž©¯¯®¶ÍA¹h >nO¼ú¸G”E¹Kë­=¤Û »àpö½ä˜`w¤@2äÅ‹§½CŽã:Þ:–iÖÞà«DÚG³öJk øHþZÅ<…É‘!8æeäqÚ×øÒC‡™zè|Ä?+Lš6…8H55cÉ„V­ÿÅpŸþS t@'ѱ1+ßacöIR6dÕ`ÛÛË곩mûsj» –ýÍ,çRP´w²'ìò‹Ø–|1 i ,‡]Ûãö²º?ÓœåßJ¯F¤nží=ô½5ÿL~ßü/·Jõû(äÚqQ»¬gh¥|è}üIaRÁ!~x>¤U\ Ö_è’r¨ˆ¯}e$ñÿЇã!Ne‚RÁ:H—šÀ4HBÜ_ãe?\–ã·$U9CFQ ã{¸Ðp^=nÆ—ñ£Qo€6/Ó˜ž<ߓȼùݳb¦ žù„>O/—{«Š€ÍË1æýãÅ1YºzðÇd´ÛŽòÍè2÷s)Ö¤hÓ4™zM^ºðáv´#/iòJÙM¦’ÉZMVd²}ZAÑÀu”ãO?¨þÐi„ÕqØ×Ž}ñ2«s» ƒÂ”‰ð\kÙf¿Ê<äj–ìÇiƆãç ¸¢éùÂ÷ÛÕïÀÛ°"ÆwVØ[™Ë`lÐÏlÿÎÅ7;à÷ÐgiûÏú+¹_À-vQ‘¼`IÊæ8B¿™ áàY’€)¡_Ê WáEç+î||´Zàr|ùÜ­ð:lI’s4‹K$Åß[WOعš¢fÁz1ëôÑ¼×ÆyR"’z»>‚s5ìp ¤IžË‡)é&Ãh•Ö4IñKe²zÁ…¹&ZtÍ;ÚopU­—–Qʬy:9QÔ±PAKendstream endobj 98 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1252 >> stream xœ-“{lUÅgºÝíµaI—è Z•øhÒ4áa)*ŠP(µ¥¥ÚÒvûî¶ÓÒ}Î>ç›Ù™î»léÒéö ”‡€4€¨PB‚"%Tâã Ñx· N#÷ß{ósÏw~8–™á8¾tkQQeûÁÍí•ÆÚªÕùÅטŒ•­s7Ë@©œ˜-ÑB¶²3?§ÍZ<³èö³_/ÄæNÖ;ít×Î]k1ì¬+ÃʱUØ›Ø3¡ŽÅ2±ðÚŒ¼Œ»š¡ÌŠÌ>4‘ó$ã¯ÆÐÄ$>Ûˆ|ú^—À0,Ûn#‹”å¶*k€Pòufð‡³s^$ð/$n¢Tî#Ý­¸µŽñvxQ>ë/`‰F8) /£ê@ xæFÚXí&;×-kxC¿ö)*"bLâ'€@+thÑp㻜#8ƒêˆO mÚ˜hòqDGÛ Ë‚@|}TÒËyÀ^ð¹»Ãã‘\Gϱˆ§¯TZÖ%Tq¿ßÏsœ¤î£b9Oð¶<Ì&§—Ž¡ÒNÝCyzÁ+Ùí¬·ÛI ËÊËè´F'’þH NÝFgµ¿ëHDíÐE­ÔFk´}–hW=Óh÷‘UJ6_G[UͰªù³î=EfԨ̆íçj/ýu½"Õß ¨’ñT6—ñÑ_Ñß4iñ©²õô¸ISᎲR ›’±+Á)j"ÇG/_Cú½q{µÓV=ë–‡SƒÇΗ­xÿàî+IOï“÷±|‡²¤Å!y¥ _yjìcS@Œ Ñ5û•U–=cl(ÚÐ!ÙÅ”pä( 2¦kË?ë<óåä…Tœ”7_u¤Ô}`_ ¥ƒ”Ö¿¯aJ¥<õð´œ^!ãH{SøF“fÓz='ð"ˆDÔÑg²t14Cvo*S*˜FðùÖS¹®ˆ"¸Þ.:ý ʤzŠ1è'¦«•¿^¥¼hsV÷ pˆA ÍÝž.GU¡,´TÂBÑ<´˜>6”H–l~TÖPUÕ¼š .d&.KgCÉC1S[=½·ô|ÍõG€æ¨ž3Úîa¦±Ù‚amº…<·4ékȬ´ðUÙ( æÖõn냻ÄÝïgþÉjeÝÝr·bÔº·$p\,JŠÒÈñHôÒ¦_<£jþ$ÊFz´xî7¥’ hZ9ÏnI7ë‡ÐNàDÕÔÿ\ÜеË:é"ec®Ç¢ò„Ûτ¼˜É+¨`,†^â¤n¼ŒËçô1”²ìñ¸£Æk} õµ¸Q ð¢îs?²|Úà\ÙÐÚj¾™j÷[98 ßËKhYz> stream xœcd`ab`dd÷ñõM,É®ÌMÊÏ)¶Ô JM/ÍI,IIvÿîû󳉵›‡¹›‡eÝ÷mBïð_Ir大–&æ00003d‰00,cˆelg`addÑ ?ü} ßfù†ï•ÛÆ|ï]XÑ]-÷ç[mYwYé¼îÙò?°Í\н@žï?£l-ÃϦrÆï¼Û˜¿[üÎýeÆ>³{AYiwEµÜ?3öê@•3å FþÖyQ´{FKÄ?k¿O—ø±úû”©¦Nèž!9«~RS{gwkƒÜŸ3¿—T7··v7Jv×OnŸÚöãÌï¥3Zz»ûº9fMš>Eþw<ËÂòî³jÊ»KËtÏD8«qêæ ?…–oZȶk·s¸>ç’žÞ¾i=½'ô÷Nááa`BÕŠ¿endstream endobj 100 0 obj << /Filter /FlateDecode /Length 3270 >> stream xœí[ÝoÇï3ŸÛ·>,ñ²ß»×TRC-\¤@#«O¢Î"eÓE…w–eéßޙݽ»ÝãH}%Ja°ŽÇý˜ÏßÌ.g~ÓŒ)þ ÏV#:~;úqÄÜÛqøs¶ÿõdôÍ1cð&ËiÎÆ'ç#?…-e²\¨ñÉjDäää=Œ&+T¦9Î8™NÉËË ·ÕÌj³žLñãŠÌ'4£JFsò!z>›LñƒeV[R-×—“©<Ë¥ ÕŸE–ç¤zMYø×Tr½Þ,â¥ü~*—Ö’eºÉe4é"lg9ߢÐϾÄÉø”s a7žÖfÆë“ u,™©Í3KOADVk/ óeRÑ\\H¹ÈÜgFÅÏGeµ\p" íÕÑžJ˜ÏìxÊD¦dÎýBl2UnN`®Q\kƒ¯$p“ã+)e¦~—«ía6æY4fƒò-ì÷ýèä«Sò—vÇ«Íb¾<«./fÈÐA½ $eU\΋Í|Y.ÂpªÉåâ㼨ŠCü/;߫Ōܰƒ~Èf“ÙdÒ'¾šiGÍŸRz¹V`*•ž’†Ú<–^g˜‡õI¯#3'šùòü¼ÝçÏÓúYó—ghT3²~ó~qV¡ñ8ê­­uñµC,ïfbµ).Ëóõf5«ßHzêÖ €”µ;¬AmÝÉéƒV’ýÖ°Ÿ!ðG²”ä–ØœfmbZ(øgc;è ³ñ°À@§°¾À'¯¹ïJ ‹!,JRøÇ<äüx`‘–ƒrŠ‹z8'árXFnŠU  ü´¥„T’©Ô8Ý­$Øõ+Å@FÊå<ÅÚ 78?w„¯Úµ³Û¹ÃGÍÒ×ÀãÅÅ2^õm`´ƒ³k·$è5YÄûÆÏËjyíx`”{€E–>ÒH ¡Jxß=AÅí"Uoà 0** D˜Í„”¸&EéÊ-C”/ku¶Êw½vKE¦©ö‘‘lÊêjÅ}MÍCÈLh"(ÉpÈT ØÓ€­Â0°ïEГäÔZëÉ[Ib TÁQO L8õcÀZ%£¦Õzš¼¸v F§«…€®9©Üº0Né ªÍ²x3dƒ^$‰©HTSl>…é`À‰™Ü\y ¡üГIx«/'½œÀÆÂÔœÜxN¸£Ú¨¡3.¤Af¹tYË6Ì€¶£§¤¸ìw‡>b8˘†y;1 Ì3!¦×ef§"%&C84 ,í»‰Ãa!-b(ªº®_Ë+Cí) !øäÆÇ¨©>•úÀÊížËÚ½õ_M6æ_€×rƒPƒž¬x!Ù¬Wþåñ:!c‚†÷Ò¡Cb •ŒgäŸz=̧èÓ,'ÉQ”FÆêƒX?{µ\_¬ß~šX6t€´ÞÞr3¯·Ñ¤'ñm3Áöz57œR ñÖqV­Ãß!üRÓm25¤ón'¥;"°Ùtr†â3› _×"«j¸6R ²NÉ+!}ìÂiÀPHáâÜî áA.œ<ÐÆa£­ K(€HŠÊ* ¾|áÆYE%`ý@aEç'ïšU/þAªT#jw0+; àw–ݳšÿuã5÷Útð.á*•dÙ2µY–ÿ +@¸ík…x»Œ"g¢Ü­àëÂ*¤È¤0 ÷ñQ´îñKœ!©0j@Šr(Éå½ÄhR}z™ÂA@(Ÿ2i%Sœyã \ƒ ÖÇMÉIbÅEbAq¹(ª$„ÎÃ)N¬oœÜÀö?>8j-ýa:cxÖ™B®„Ç2ÇíË ǰâéXð?žŠ$Y #b‰p‹þbÈ¡D{ù×)‡S!ÍU+þd+ŒuHM¶Adíˆ<ãLñ°ù}¹yfZbre‡\Ëêï{Öà™R6·iœ“v Œ£q„Ê8VŒ]!1‰º‰ptf°[4ðÔË“z“z$Á W²ÉN¾…C‡ ¸Wžrc9“rø9øý9š°æt” rax¬Eò»ž•ÕœÖêVÀP7X–TùmkÊwh[çêÁÚAîÒ6U{jûvñj»v±ý´í2–½´=`|ÊŸ(EÛ ì!èøeÜ:ü€‚5eú©$úH ÎsþpwÎ;O9æÅ9s—9ð¼îãžÔÚãâöd µ×:ßóã[ÅõhÚ{ 0Î÷tw¯xÁ¥ Íw+öª$xŸã8ÂV;e¯ÛBÀ·¢‘ø«^™°Úì¿ÈSª^ò®§ÜCõÏ,›[ã°áóA¯Ò^Þ\=©ö~sqõÁÚ«£G¤ä.¶«Æ6Àª±Qô°»©û³ ž^‹¿ûgG·j1Oã°øë ³üv%IÚ¨qPIàJÏÊ׆“FH#†µtG¤|œ§ý±h*ŒÊ,fÌß鹡ǘé@X*'Gñ‡—§PØQê®>ö>ðº«&ƒ']`×Ëxs r÷à³Ú<ûÑ]|6Ô{ù|=ð)â.w¿€'ä Xu޲MNëó{ÇÝî‰H¶÷BµºÿÿÀ;Õ]ƒG¿|‡!>¿ÄïR÷mÖ§o?ïÐv£™Ç»íØ}·µû8µ3žß%§~ˆoßÏï™S?DÙO~.ÈŒ¼?ÈUw†aí…´#¸êÑÉè˜ rz[âm¼ÑñßG d—ɱ¤¹Îh>^ÀZ¦yóæbôj°0-½ui<çþ`*)˸ÕXœö[öçpñuÏ8¾++lâø­7›S® ×þ·ȳó;ÞÄÜØLh\!Êë~íöçë‘Ï×#¿¥ŸöȺ>ߊ¿†g“o )šº§öåÚn¯C~ýòB§endstream endobj 101 0 obj << /Filter /FlateDecode /Length 6858 >> stream xœœMs¤·u…÷ü©®Ù¤ÇætÜ/W&•8V¥œÄ É“ÊBã=¢$ZŽ4¤cëßçÜs.ºAK²]ZPýôûqñuœƒéïé”Éÿ‹¿ïÞ_¥ÃWWß]eÒCüy÷þðË7Wÿô™5ÓH#Þ|y¥[ò!·t*[9´ÚNÃêáÍû«Ï¿¹ùøÍËWfvJ¹ÿýþöå«tJµç¾÷ãûgŸ^–Ž£Ÿ_¾˸çø_7?Üß=¼ôë¬å4ŽßÜøËiŒrüõ³ožîžþèÄë·Ϲŗ£ì5ÛñéåïÞü'bÏyÝj>µÚÿ›/®Žõå›?xñÒzÉ«mˇWVO}ßýªÏÿòòU-Á•ãÓÝûÛG~<þó+ÿ»F·ããíwoéºÔ”®ïo¾zúúµ¥üöåç¯òïG¶SÝF9¼ùï«7?{öÄ·ïâAãùC¿ýxûÅÝ»§‡û·Ç/ïžòõ—|xýÙ'ŸýúúáöO_Ü<ݼ~úxóðøå‡ïß]¼}çñ½fo_^óÍþºŸ¿|5Fó÷ÿïæc~ýâkÜôááÅ5>•×/þ¼Šù‡ûòúÍgÿóÉÛ—ç;—@ÿt÷ôõ[†{}‰÷ýÍÓ·÷žÞªb®çÏßýþîá ¯Wù4öŸ=Þž@¯¾|˜¡y¥ÔY%ˆ1'Ôßñéûoo_¿¸q}ÿôýëwoùº\ÜòîÃýë|¹që}½5'4ÉŸïo~ÿúÅ›;ïg3ÂÇ»‡w·QŠTŽ_ÜÝ|õðáñîñÅõ~Ïû¼n_¼}ù㥿ù=:åíÛãׯ³¸ ×üãÕ'o®>õ®f‡¯}•QNy¬ä|²q(mŒS²CÙ¶ýTòáãíáWû)—jvøFÊtøÆà l]ÏÛfÛ©Þ_å­ä àÀÊ ‹ŒSy¶vêUÝØIÝO5‹´d¯§¼‹ ë;ivPæFÐË©î"¦KF>•"Rõ`Ná!îᤦ~ª,Š+’›WIA½*Àv2>§²xH |UÝ ùEDe¨½|Ê8m,fÝ“w¡mÛÒÉ‚ ¯b<ŸÛPÍI9 ^û®øð‚xê<{6T_¾';u9šLáì¹xån^µ|ÌŽva|[÷ ¯‚m«é„Äè±3ÀZµHp;¬vjº«Vˆ¿UdGUx%#³nº -S¼!ê8™žŒt9üš=G%ï#)ÀÝNèV$¨ /(ZZÏi©)½ŻZÞ!*®±2š†6¼Aé¼ûÛ2…îBeì§•ÑÐ4 °udc‘áÝ µ3l{÷—‚ è mÃÑ"™µÜzU€½GÿjcSo9Z¢£mŠt ýxMÇ@¼¦FWî%1ÀÑ£ämSPN¤˜è¦]Ϭxœé4¶X‚ @“x|Þ£‹.Aåzo¯˜1X½¡&Š;eVE÷ó’zRt}0:CaU”²"Êñ4 Ã+%FÈÈUá•9RšÆZÐ-øª†ñÑXQ¸ÆZ›'ZËÑ‘b|•"2¼Aöè¦c÷)Ü †šîBË2BŒ¬.‚–a„hz•b ¦‹º!@¯®‚\êÝ…!ð蟇ª`(¼¢$,v/f^[Ú…á¡ò­‘à ã!®©›Âó¢è9»²Eõñ w©ÿ‚˜÷g'=)>Œ‡¤»:ïÙOCï¨ /&:kçsrÚ!Ö;ÅÊhFˆ¶¯"Å8+Fˆ‰`Á²{I[tí’=%ñš¦N 2aªö‚Üäÿ·a‰¤¦)úаGÿ*Yаo3Bü#ì»FuAÏàp¬F| êÙ? Ò?¢û2: ªZE†¢Ã™­YÐ͆—°ë.tF7vªRÐ2ŒZ5Š)MÑ!÷05”²3Wì)+yà¹Ù31H™îÉ?nÑÞQïÕIU'.­‚ ¤)eóïšέNòÆèöœ4 +Jžº³®A«xMì­;ú÷ÎKb” E—÷hóîp2 iè. •Võ4Š¿sBb© íå=}Ç€fUÙP¢Ø½«ðM[âR5W• ¡3¼²kÔtŇaÂÑ‹7Áæ“ÍÎh|æe|óˆ>yGßQÜMïòá候ÜZ%ñ’ãeóþí`–{C·d|>%ëÝ“3ÈPÞ*ºÂîw¡9sOžŒyBßS£wóÝç[‘¢D±#NìéÊxÉ-žxŸO·A:ãó?Œ†éÀ[N]À‡1ãCzQ¢ðé}¯%º£$ïè»:ª“¡DᱪbOê {t7ïf ïd~.ì ^N¤ ÎKÅ[m÷vÀªDIÀ+—")U¾%öEsaXrÔÐcq)/©ÑÞ;š%ñ’]Y¤{]ƒ4¯{'½ùÐéšÜÊŽvat¸;ó9 ËÑ5ÎÔNÐ.ìéHcïj>™øZC a¡ÙxÁ½¦¡áÑÇÍwpþ±E´ 5ÆØ£sÛ«bCoª¬§†Ç±—{:f}7¬3ÙË‘öXÝm0ÿŸ:A:š$ñ’-:yǤܼˆ“´L°ŒyP/ïhˆ R¦î¶)ÀÞ#WvtKvsdGu¬^#K`EÕô.4iókFL« CbX]ƒ"'/(ò¥²MGŒÐ——¬àŽÿc„huµfa?÷ Ç·d+>¦kuƒÝDä ¤Tb˜ïÜ1`g¦¢XRäèæCã¤Dk4Ç×°ÞÙuÖ™Ÿw¦hÐöÞÍ›¯€ØX£+O´K÷2T+×’º m¼¦kf³”˜*A†:$¶Ã»"ô­v%AÚc„9êÔÚ†¢â9H">›Rˆ“ªLÑí¹ ±´³‹ƒÔù ƒÆçìó9è ›—4·Ú†bw=yláPo·Œšòba•Ö7æc±ù–¬øw ;.>o5S×±Œ¦É^L¬Þv$9†‡ Øõ"d†W"÷ö Ù¾Š`”6FÓ5ŽÌ‚HƆU¤¯6·6D:óXnYIÜR€ÍÆØ¤îŠSCA¤ŒOÍáßygo¾3dãaâpt¢æDâW|˜?T[H¬ž=Aš¶œ†DåC¤«›Òƒw«ÍKéUbØD|@y„[ÖÎÐw8}¡ohEˆÁœEÐ2™×lš@º· ;®"Û¼¤XÆ4Ÿ€<Â-v6fXj2B (EhHÖŠ°kÞÆc Ç£¯sºòE󩩉 ßÞ:hšL’5°°Ù}ÐÍì¶¡K3>ÌU o+›Â«±Î´ ÉÑXcÂ0ßúr4úxgÀ¾Í]DÇRÛ[×î8…˜ï7/f¼h¾¹S€C›kÛ|ÅébÄéUÚd­¬¢e8AÔ ¸Sò—û2°Š0˜V'VÑ2 ½^ýÔ÷&®‚øìÁ¾í» Æ0ô*Ô{»cNöÂÞ¾·ù\ÌuНÏçöHHßz.æ¾ DÀÈÄ®”´–bxîh˜ìÍàãƒwd†‡†çÞÂ|YÇÎŽ ªªðÅãizΦdùOU¼oìõ ¡¯Ø^}Á°G7öiß…'ÊJ;.V|í$€fQx=OJìé˜s3«Æ'…7"Ýy"fxûC¦BìÙÈIiŠ“€rƒnWrœ(µÆh±1ê­[ôozE í¬›P· °×è‘Xå5»æ4k¾wñrö˜­aÖt¥Ä¿Q꘧\Êq¢AÔÑ2 0&Këž›½ÈŽé° Ý´E®ÀôÎ}4WR % Ñ1T*ï²(Dßw¢Bt_(y€CRuT »:æýÂÊé® v%‚‘RÄ7“ÿHÊ#´1h×!Úˆ•86{Ä×#s Wäx× >e ãáùÊ)‹ ±x_w¢Ú¾0-NrL3£)WôT´éÜÛ:Q“Nõhs!†ù·WŸ^}wÕs:`YŒÈA#zœÿþ ÉÏC÷šzéûó&ñ7üðª3É(W«BHY®šd¹jn¢.WÉzU¬¡–«&Y®š™s‰~’õª¿(ÑRÆåª¿f Mc覄æZMîýÚk0ïNô`ÒËW› ckJî •ó8æÄOÉÙÛ1×øä£cI—OýèFåm*Ûg=Û<+¯Ó •“˜©æä*ãjr’gW¹J†ìº\d½jc ÛrÕ$Ï®ò1UÇzUõªëåª5ú¿¯Ö½Æ_yÕ»”±4×H+Yï¯0†P‡c~þ)ñ² _%~‡É=ö˜ø•ÏJøÊ¿ùa]ÿ¤wðw;»Hñ™ CÙ—Zº%b=ºGr 5r8;"n† èºP÷UR%ÖB¼É ¿ˆ~ú÷Ÿ²oQ[>Ó ‰‡|ñ7ü¬ñ¨dº‚íÉæÝ(M=,‘•È!a“†'BPd]È!‘YžI]=’.{ƒž€i 7=’]‘'²…Jž‰ôèðD̦´–À_X" -¤[Y"1‹OK«Ý˜³Ã(ñê°DÌÕ°„–È.ùjZ" !*MK„‹æªkd‰˜khI~‡,bsX"\Xë®ðD°°Î®H^<M 鉀t-Þ§'‚KrxSቀÔéeÈ1—ç²\y"X [”+<sÁ.ë]òD˜eþ„'Rµòž²T’²0=mº$òD@F¨üቘë|*—<€mžVúz}x"\û«¹ÂÁÚß¼ã]<>_%OµcJ£Ó1WUÐðD°A°éTÈéáÝÉÁŽÁ¢ÿ‡'bî°)ÀðDÌ­±Õ17¹Tቘ+ŠuõD¸©P£‡)bnE©c„)r~Ž\ó¶‰È1÷àœºÝ1Ê«+b¡D^\ô‹®R¸" áÔ…)ÂÍI’u!SdŸ†‡LlNrä‹0EÌ}ù/òDÌ]›ˆFžˆ¹Ù\å¤Ðá²G:Qx"è¤SW—)ÐBâS[œz^˜"ÜôpS2Ms+E~˜"¾ :\|ÔKd‡ø–èpñB̈K^ˆyvŠ^Ïԇ 1ÏásÈ ±ªæ¼x! 5”ïðB¸³’$^vVE«¹é…˜; l‘é…}y!æy'ËÕÂý˜" /Ä\ó—Â^ˆ¹Â¿Z!±p ‚ýZ é>¼îàäË„ÒB* /{º¤.>½sE}èy! -ôÈðB¸ï“À*/Ä\ —‚^ˆ¹ð-5Ú½sI;‚•b.W›Þ,/Ä\œ–³ +Ä\‰–!'Ĩ3óžpBÌeeézᄘKÆ*uX!ær°äþ°B¸ã WCVˆ¹¼«v +Ä<÷J—•¢]©,+Ä\„ÇÈ 1—\%ž†Âëç#)@_„;Ò E­‹ÂÍ­úLX!抦zlX!æY^rª¬î¹%›Vˆ¹È(SƒNˆ¹ Øõ"9!Ü!7E§üc®ÖÕ 1×ùdI†b®ê©”ᄘKvjÿpBÌõ8Yja…˜+kêFa…˜ëh#Hg€[ [!¬sù«¬Vˆ¹´¥ñVˆ¹lUW+Ä|¢Ê GV·ðáPÈ 1׎lµBÌ•"õœ°BÌEî"§b.訟„b®ÖTY›—ÉuÝ"+Ä\dQcÊ 1—K4¶Ã ±6L+„êA^­sC¹/¬s=B_X!F­A¶…¬j2çÜ 1׸l˜Vˆù^_2xX!%òꆘïÉëê†XŸ‡¦bœ¯u—ÜJa»È Y½ëÞaå"È  Imz!T?Â/‘bþ7Üy! ã¹b½„íVÀNgX!æ7ÇËe…€ô0 Á0YaZ! %l­°B@ª épBÌW2,d„ŒH±2B¬c®/BFˆy˜2BÌW)2Çá~£ú[öî‡rØ´a„XŸïi„€ÄùŸi„€„š= ?Œë®\óå´»pA@jÈgá‚€´$Ã1¯D[]ltsHOá‚€˜– Ó©ÊjÓi’žÂ˜Êz˜ Ühëy R©t‰<ªKdàsÓboZ æË·°!hX9B ÄBG Ä¢Ñ/HÓá›é€ŒÐBñô.)*<8 @ a,<HºáôPñ‘Óô%ä˜÷8i¡á€„’@äÁiHœ[-Ìn1{O ¤h¹:-S¯žH Ù?,8í0-1-Y Ø[DîžHЙÈ6í Y {´gX æ'ÌY 6¶©†b\G¯ˆ…F.  ŽšM Ä|üåÅè3>Y ÆÕ¸Y T*mµ@@b˜HöšH‹æ Ä|Uo«BÅ3­H¸ñgÝÎÓn’Ǧb¾9à 逌èÿáØh³ß†R¢ÑÃÙBx Ä|—¡ $ÎLdÄÈ 5™5ц bž®Ô›ÂÙ"Ä b¾}QK„ "MRwÉa±… bcºâÓ)Óx bÜÉœ RO‹ ‚Ï-¬‰0A@ú|®L„iΞ™ ™@öí4ARнõÙI)Nòœ]äÛá‚xbÎÏ\”Æt/Âñmšn $åØ`žM„òË' $å³!$å³wH:ûÍÓI¥ê£ÓIesz ©XŒûé$ŒùUÓI˜¢í™’¹RÞô@R™³Lx É’Œëi¤³1<-„̧49-d5\¯i$‹ÙÙIÖ£}§’|b—#HÚâHçÙñ™N/<´Å)³âû^U×ô@–î $m=rÅô@һʳâ3¨òÀô@¾QWšHª6ð@’ŸI<,Hª»†ÙoÏÊe­È ÉårW3µ‰Ê‡¡æª‡$:XêáJ$®Dò!IŠ”W ùPäpV—Ï B_”x¸‰‡$u=OM¢ó¸!’HÉ ñ$Ž+K< ©0ŸÃ“†â!IŸ–xX)dH”xH¢ƒ½!Š.Ú!Ž+‡vH¢cÆ¡’l«vH"-´C)—¡’H¢ ídÓÒwj‡":ä,íDz§´CuíDÏ•tH #Ã!’”õ85‰ÑEt—¤Ãê§b»4?I‡$m=NM"@åŸ%s…rH¢cö¡’èŒxH‡$:ÜÒ!‰†CH‡•“–ž#éDçÑC:$Q éD]0¤C’gÒ!IY¥C‘U:$I«tXýqr–vH"7´C’¶¨&Qÿ íDý+ÄCõ¯IÔ¿$”U<$Éq€ÚÅCíeC<¬>t%2„x(r¸h‡Mb¡´CíµC>$y¦ Š."Á¶ž§&‰sÙÒIâ¶4D’Pñ¤!’h“¢“ÃE@¬~¸{¬‡©I´ ‘¤­"IˆƒEýp’ Bà”|H²éHöˆTáKI)t)^Ç™¥’H§ýPDšôC’´ž¥^‰ôC>¥@é‡$’À¤è`bè‡"‡×OT ¤†„zH"(äCIP¡®¤DލóXgè‡$B? Eqœƒ "ý$NdK?$IzõÃH?¬.riçú!I_õC‘ÃE>\AðZó ùDrRȇ+‘|H¢ƒò’ âhµäÕP?$Üú¡ˆÔBé‡+‘~HžôCþÐWRÊ9>%„ÐW"ýä¬CR?8\äÃH=$ÐýPW"õDi%ÔC’ð¤>##›ÿV!ÔÕH=$‘nꡈ4Çm{ö±–sxJERW õ$ŽyK=\‰ÔC’Ð¥’([…z¸©‡N!žÿ_ºaõÌ¢\ºáJ¤’(»…n¸é†$mÕ I”ïB7\‰¤C’ºJ‡Ï¥CÖeH‡+‘tH¢¬ÒáJ¤’(O†v¸i‡$Jž¡®DÚ!I^µÃ•HG‘ø&õp%T ”_C=\ ÕÃê{豪‡+‘zH¢êáJ¤’(+‡z¸’>“ĦÌ»èP>$Ø×CÔ+‘|H‚äÕH>$‘òáJj>Çg&%>#ÔIBª”~¸ ˆ+‘€(" â ¤ ’H%“‚ø PK!ÑÖPW"±ú?ë)ê•h!LÒWq%=ò„Å n ˆ+èŠ.>‡|HФàI>\‰äC’8è,ýp%ÒIêª>#CÈ:ʆ~¸é‡+‘~H"E ôÃ…„~(˜C?\‰ôC’²¡^‰ôC’¼ê‡+‘~¸é‡$iÑWÐg®ˆ`úá ¤Š.òá¤èÀ~¨‡+‘z¸©‡$mUŸ‘® ­&ž‹z¸ɇ$q¦ZòáJ$’lRÞ$®$§s„“ íhëTÞB>\‰äC’Ðý$®Dò!IYÎP¯@òáJz:˜Wùp%’I’D=ɇ+‘|èäpÑÏ%Vj"[¤‰ ÚË^•C‰c¡®DÊ!I[ÏO¯DÊ!‰d­PW’Ó9>I¦¡®DÒáJ$Ьç§WBí ŽaK;\‰´C[ÏO¯DÚ!‰½ÐÚáJ¤’H" íp%Ôíp]²Cÿ. ¤Ã•H÷Ia*„t¸I‡$!dJ:\HH‡$m‘W ép%’EépR 4ù†r¸)‡$ÏNO?#=6³)&ß/ä·WŸÒÁµˆ„̤Ñ?<Ûº¥‘užûr¶õÓŸ< :®áÔç'A‘y|³º¡KúyÎû‡û»›§»¿Ðï <ÿ©,1@óü‘Ÿøa,¡êå‡]ô)~Ø¥›ÿ°Ëü^ǯæÏÀ´m·ã·üA—­ct¼ùøôcÚZ9>ùË7þLJ/ã÷`¬óìò/–‡¹{·~ssÁã›O–7êíu ¼ãÝzûó®¹ûpÿá«ïgù·ã̓~vfŒ-ã­N>þòîÃãêôñi¾^x<ÿ¦È_ý}›ûy›K¬OÏÊút~äZž÷7w÷¿¸'véÆÛþãOŸ+ÇÀý±÷ñ:‡¥“NσœñìßœÞÝß¾¿}xzü×oîN·ËqàÿÕÒ{‚endstream endobj 102 0 obj << /Type /XRef /Length 127 /Filter /FlateDecode /DecodeParms << /Columns 4 /Predictor 12 >> /W [ 1 2 1 ] /Info 3 0 R /Root 2 0 R /Size 103 /ID [<812b10f4c57aedd98f1903335ea583c5><262532e3a04bd217f3bc285c516f5d44>] >> stream xœcb&F~ñ‰ Èc%hJüç·ÛÉÄÀ¦ lž@‚k?ø$X& ‘, ÁZ $#÷= ÁüÄå)iL³@Ü_ V3|$øî€Œú ’ø"@Fqû€”H‚¸Óï*Év ±ù ®aCÇ endstream endobj startxref 63048 %%EOF rstpm2/inst/unitTests/0000755000176200001440000000000013416410274014462 5ustar liggesusersrstpm2/inst/unitTests/runit.Basic.R0000644000176200001440000000146013416410274016767 0ustar liggesusers.setUp <- function() { suppressMessages( require(rstpm2) ) data(brcancer) fit1 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=5) fit2 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, logH.formula=~nsx(log(rectime),df=3,stata=TRUE)) } test.basic.1 <- function() { suppressMessages( require(rstpm2) ) data(brcancer) fit1 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=5) checkEqualsNumeric(round(coef(fit1)[2],5), -0.36457) } test.basic.stata <- function() { suppressMessages( require(rstpm2) ) data(brcancer) fit2 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, logH.formula=~nsx(log(rectime),df=3,stata=TRUE)) checkEqualsNumeric(round(coef(fit2)[2],5), -0.36144) } ## .tearDown <- function() { ## rm(fit1,fit2) ## } rstpm2/inst/unitTests/runTests.R0000644000176200001440000000050513416410274016434 0ustar liggesuserspkg <- "rstpm2" require(RUnit, quietly = TRUE) library(package = pkg, character.only = TRUE) ## path <- system.file("unitTests", package = pkg) path <- "c:/usr/src/R/rstpm2/inst/unitTests" testSuite <- defineTestSuite(name=paste(pkg, "unit testing"), dirs=path) tests <- runTestSuite(testSuite) rstpm2/inst/math.input0000644000176200001440000000517313416410274014500 0ustar liggesusers-- Axiom/Fricas source file -- Translate into .org? -- general case )cl p all )pile eta := operator 'eta G := operator 'G rule1 := rule (D(eta(t,beta),beta)==X; D(eta(t,beta),t)==XD*beta; D(eta(t,beta),[t,beta])==XD; eta(t,beta)==X*beta) S := G(eta(t,beta)) H := -log(S) h := D(H,t) [D(expr,beta) for expr in [S,H,h]] [rule1 expr for expr in [S,H,h]] [rule1 D(expr,beta) for expr in [S,H,h]] -- Proportional hazards G(x) == exp(-exp(x)) S := G(eta(t,beta)) H := -log(S) h := D(H,t) D(G(x),x) [rule1 expr for expr in [S,H,h]] [rule1 D(expr,beta) for expr in [S,H,h]] -- Proportional odds G(x) == 1/(1+exp(x)) S := G(eta(t,beta)) H := -log(S) h := D(H,t) D(G(x),x) [rule1 expr for expr in [S,H,h]] [rule1 D(expr,beta) for expr in [S,H,h]] -- Probit (is there a more canonical approach in Axiom?) Phi := operator 'Phi phi := operator 'phi rule2 == rule D(Phi(x),x)==phi(x) G(x) == Phi(-x) S := G(eta(t,beta)) H := -log(S) h := D(H,t) rule2 D(G(x),x) [rule1 rule2 expr for expr in [S,H,h]] [rule1 rule2 D(expr,beta) for expr in [S,H,h]] -- Additive hazards G(x) == exp(-x) S := G(eta(t,beta)) H := -log(S) h := D(H,t) D(G(x),x) [rule1 expr for expr in [S,H,h]] [rule1 D(expr,beta) for expr in [S,H,h]] -- Aranda-Ordaz G(x) == exp(-log(theta*exp(x)+1)/theta) S := G(eta(t,beta)) H := -log(S) h := D(H,t) D(G(x),x) [rule1 expr for expr in [S,H,h]] [rule1 D(expr,beta) for expr in [S,H,h]] -- Any other links? -- Estimators )cl p all h := operator 'h H := operator 'H rule3 := rule (exp(logtheta)==theta; 1+theta*H(beta)==S0) -- hazard loghaz := log(h(beta)) rule3 D(loghaz,beta) -- marginal hazard marghaz := h(beta)/(1+exp(logtheta)*H(beta)) rule3 D(marghaz,beta) rule3 D(marghaz,logtheta) D(marghaz,beta) / (((1+exp(logtheta)*H(beta))*D(h(beta),beta)-exp(logtheta)*h(beta)*D(H(beta),beta))/(1+exp(logtheta)*H(beta))^2) D(marghaz,logtheta) / (-exp(logtheta)*H(beta)*h(beta)/(1+exp(logtheta)*H(beta))^2) logmarghaz := log(h(beta)/(1+exp(logtheta)*H(beta))) rule3 D(logmarghaz,beta) rule3 D(logmarghaz,logtheta) -- marginal survival (identity link) margS := (1+exp(logtheta)*H(beta))^(-exp(-logtheta)) -- identity transformation link rule3 D(margS,beta) rule3 D(margS,logtheta) D(margS,beta) / (-(1+H(beta)*exp(logtheta))^(-exp(-logtheta)-1)*D(H(beta),beta)) eval(%,logtheta=1.5) D(margS,beta) / (-margS*D(H(beta),beta)/(1+exp(logtheta)*H(beta))) eval(%,[logtheta=1.5, H(beta)=2.0]) D(margS,logtheta) / (margS*(exp(-logtheta)*log(1+exp(logtheta)*H(beta))-H(beta)/(1+exp(logtheta)*H(beta)))) eval(%,[logtheta=1.5, H(beta)=2.0]) -- marginal survival (log-log link) margS := log(-log((1+exp(logtheta)*H(beta))^(-exp(-logtheta)))) rule3 D(margS,beta) rule3 D(margS,logtheta) rstpm2/inst/working_code.R0000644000176200001440000062737515105126012015270 0ustar liggesusers## package.skeleton(name="rstpm2", path="c:/usr/src/R", force=TRUE, namespace=TRUE, code_files="pm2-3.R") ## Local Windows setup: ## Rtools.bat ## R CMD INSTALL --html "c:/usr/src/R/rstpm2/pkg" ## R CMD build "c:/usr/src/R/rstpm2/pkg" ## R CMD INSTALL --build "c:/usr/src/R/rstpm2/pkg" ## R CMD CHECK "c:/usr/src/R/rstpm2/pkg" ## ## Local Ubuntu setup: ## R CMD INSTALL --html ~/src/R/rstpm2/pkg --library=~/R/x86_64-pc-linux-gnu-library/2.12 ## R CMD build ~/src/R/rstpm2/pkg ## R CMD build --binary ~/src/R/rstpm2/pkg ## ## testPackage <- TRUE ## if (testPackage) { ## require(splines) ## require(survival) ## require(bbmle) ## } ## example for prediction using type="meansurv" library(rstpm2) fit <- stpm2(Surv(rectime,censrec==1)~hormon+x1,data=brcancer,df=3) nd = expand.grid(rowid=1:nrow(brcancer), rectime=seq(0,1500,101)) nd2 = cbind(brcancer[nd$rowid,],nd) predict(fit, type="meansurv", newdata=nd2, se.fit=TRUE) ## Risk prediction using riskRegression library(rstpm2) library(riskRegression) ## Example stpm2 model fit <- stpm2(Surv(rectime, censrec) ~ hormon+x1, data = brcancer, df = 4) ## Define a predictRisk() method predictRisk.stpm2 <- function(object, newdata, times, ...) { sapply(times, function(time) 1-predict(object, newdata = transform(newdata, rectime=time), type = "surv")) } Score(list("stpm2" = fit), formula = Surv(rectime, censrec) ~ 1, data = brcancer, times = c(500, 1000, 1500), metrics = "AUC") library(timeROC) library(rstpm2) fit <- stpm2(Surv(rectime, censrec) ~ hormon+x1, data = brcancer, df = 4) risk = 1 - predict(fit, newdata = transform(brcancer,rectime=1000), type = "surv") with(brcancer, timeROC(rectime, censrec, risk, other_markers=x1, times=1000,cause=1)) ## is the other_markers argument correct? ## Shat library(survival) library(rstpm2) ## Fit model fit <- coxph(Surv(time, status) ~ age + sex, data = lung) # Get baseline survival curve base <- survfit(fit) # Function: survival at time t for covariates x predict_surv_at <- function(fit, newdata, times) { stopifnot(nrow(newdata) == length(times)) utimes = sort(unique(times)) ## baseline survival base <- survfit(fit) ## linear predictors hr <- predict(fit, newdata = newdata, type = "risk") ## interpolate baseline survival at requested times S0 <- summary(base, times = utimes)$surv S0 <- S0[match(times, utimes)] ## subject-specific survival S <- S0 ^ hr return(S) } # Example: each subject has their own time ## newdata <- lung[1:3, c("age", "sex")] ## times <- c(100, 250, 500) # each row its own time newdata = lung times = lung$time predict_surv_at(fit, newdata, times) rstpm2:::Shat_old(fit) rstpm2:::Shat_old(fit) - rstpm2:::Shat(fit,newdata) # the same! plot(predict_surv_at(fit, newdata, times), rstpm2:::Shat_old(fit)) plot(predict_surv_at(fit, newdata, times) - rstpm2:::Shat_old(fit)) with(survfit(fit, newdata=lung[1,]), surv[time==lung$time[1]]) rstpm2:::Shat_old(fit)[1] rstpm2:::Shat(fit,newdata)[1] predict_surv_at(fit, newdata, times)[1] ## bug report library(rstpm2) fit <- aft(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3) # ok fit <- aft(Surv(rectime,censrec==1)~1,data=brcancer,df=3) # now ok fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3) # ok ## Issue with S3/S4 conflicts library(rstpm2) fit <- aft(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3) # ok inherits(fit, "mle2") class(fit) methods("predictnl") plot(fit, type="surv", newdata=data.frame(hormon=1)) ## bug report from Alex library(rstpm2) fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3) update(fit, formula. = . ~ . + x2) ## nsx for cure library(rstpm2) FUyear = seq(0,20,len=301)[-1] n1 = nsx(log(FUyear), Boundary.knots = log(c(5,15)), knots=log(c(10,14)), cure=TRUE) matplot(FUyear,n1,type="l") ## bug in tinyplot library(tinyplot) x=y=0:1 conf.low=y-0.5 conf.high=y+0.5 par(mfrow=1:2) plt(y~x,ymin=conf.low,ymax=conf.high,type="ribbon") plt(y~x,ymin=conf.low,ymax=conf.high,type="ribbon",xlim=c(0,0.5),ylim=c(0,0.5)) plt(y~x,type="l") |> names() plt(y~x,type="l",xlim=c(0,0.5),ylim=c(0,0.5)) # ok plt(y~x,ymin=conf.low,ymax=conf.high,type="l") plt(y~x,ymin=conf.low,ymax=conf.high,type="l",xlim=c(0,0.5),ylim=c(0,0.5)) ## Bug report library(rstpm2) colon3 <- data.frame( sex = ifelse(colon$sex == "Female", 0, 1), status = ifelse(colon$status %in% c("Dead: cancer", "Dead: other"), 1, ifelse(colon$status == "Alive", 0, NA)), persontime = as.numeric(colon$exit - colon$dx)) modvc <- stpm2(Surv(persontime, status) ~ sex, df = 3, tvc = list(sex = 3), data = colon3) plot(modvc, newdata = data.frame(sex = 0), type = "hr", var = "sex", ci = TRUE, rug = FALSE, las = 1, ylim = c(0.8,1.5), lwd = 2, main = "Hazard Ratio (TVC)", xaxt = "n", xlab = "Time (years)") axis(1, at = c(seq(0, 365*20, 365)), labels = c(0:20)) abline(v=365,lty=2) df = data.frame(sex=0,persontime=365*c(1,2,5)) predict(modvc, type="hr", var="sex", newdata=df, se.fit=TRUE,full=TRUE) |> transform(labels=sprintf("%.3f\n(%.3f, %.3f)", Estimate, lower, upper)) |> with({abline(v=persontime,lty=2) use.upper=c(TRUE,FALSE,TRUE) text(x=persontime,upper*use.upper+lower*(!use.upper),labels=labels, pos=ifelse(use.upper,3,1))}) library(rstpm2) library(broom) test1 <- stpm2(Surv(rectime, censrec == 1) ~ hormon, data = brcancer, df = 3) tidy(test1) tidy(test1, conf.int=TRUE, exponentiate=TRUE) model.matrix(~factor(x)-1, data.frame(x=1:2)) library(rstpm2) aft(Surv(rectime,censrec==1)~hormon,data=rstpm2::brcancer,df=3) # ok aft(Surv(rectime,censrec==1)~factor(hormon),data=rstpm2::brcancer,df=3) # ok aft(Surv(rectime,censrec==1)~hormon+factor(hormon),data=rstpm2::brcancer,df=3) # ok aft(Surv(rectime,censrec==1)~factor(hormon),data=rstpm2::brcancer,df=3,tvc=list(hormon=2)) # ok (drops second spline term) aft(Surv(rectime,censrec==1)~hormon,data=rstpm2::brcancer,df=3,tvc=list(hormon=2)) # ok (drops hormon) aft(Surv(rectime,censrec==1)~1,data=rstpm2::brcancer,df=3,tvc=list(hormon=2)) # ok ## marginaleffects library(rstpm2) library(marginaleffects) test1 <- stpm2(Surv(rectime, censrec == 1) ~ hormon * x3, data = brcancer, df = 3) nd <- data.frame(rectime=1000, hormon=c(0,1), x3=50) pred1 <- predict(m, type = "surv", newdata = nd) pred2 <- predictions(m, type = "surv", newdata = nd) all(pred1 == pred2$estimate) pred3 <- predict(m, newdata=nd, type="meansurv") pred4 <- avg_predictions(m, type="surv", newdata=nd, by="x3") pred3 == pred4$estimate ## Bug fix: aft with factor library(rstpm2) summary(fit1 <- aft(Surv(rectime,censrec==1)~hormon,data=rstpm2::brcancer,df=4)) summary(fit2 <- aft(Surv(rectime,censrec==1)~factor(hormon),data=rstpm2::brcancer,df=4)) vcov(fit1) |> cov2cor() |> "rownames<-"(NULL) |> "colnames<-"(NULL) vcov(fit2) |> cov2cor() |> "rownames<-"(NULL) |> "colnames<-"(NULL) ## Bug report: aft with left truncation library(rstpm2) brcancer$start <- 0 fit <- aft(Surv(start, rectime,censrec==1)~hormon,data=brcancer,df=4) # now okay:) brcancer$start <- 1 fit <- aft(Surv(start, rectime,censrec==1)~hormon,data=brcancer,df=4) # now okay:) length(rstpm2:::lhs(Surv(start, rectime, censrec == 1) ~ hormon)) ## test for predict(..., type="lpmatrixD") library(rstpm2) fit = aft(Surv(rectime,censrec==1)~hormon,data=brcancer) plot(fit, newdata=data.frame(hormon=1)) lines(fit, newdata=data.frame(hormon=0), lty=2) ## test for predict(..., type="lpmatrixD") library(rstpm2) fit = stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer) m = predict(fit, newdata=data.frame(hormon=1), grid=TRUE, type="lpmatrix") m2 = predict(fit, newdata=data.frame(hormon=1), grid=TRUE, type="lpmatrixD") ## check that offset works library(rstpm2) stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer) stpm2(Surv(rectime,censrec==1)~hormon+offset(hormon),data=brcancer) library(survival) library(rstpm2) brcancer = transform(rstpm2::brcancer, id=1:(nrow(brcancer)/2)) survreg(Surv(rectime,censrec==1)~hormon+cluster(id),data=brcancer) survreg(Surv(rectime,censrec==1)~hormon,data=brcancer) ## Andreas's bug report library(rstpm2) two_states <- function(model, ...) { transmat = matrix(c(NA,1,NA,NA),2,2,byrow=TRUE) rownames(transmat) <- colnames(transmat) <- c("Initial","Final") rstpm2::markov_msm(list(model), ..., trans = transmat) } ## ERROR death = gsm(Surv(time,status)~factor(rx), data=survival::colon, subset=(etype==2), df=3) ts = two_states(death, newdata=data.frame(rx = levels(survival::colon$rx)), t = seq(0,2500, length = 51)) sts <- standardise(ts) as.data.frame(sts) ## ## OK death = gsm(Surv(time,status)~factor(rx) + age, data=survival::colon, subset=(etype==2), df=3) ts = two_states(death, newdata=data.frame(rx="Obs", age = c(65, 70, 75)), t = seq(0,2500, length = 51)) sts <- standardise(ts) as.data.frame(sts) ## predictions library(rstpm2) fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, df=3, tvc=list(hormon=2)) plot(fit, type="hr", newdata=data.frame(hormon=0), var="hormon") predict(fit, newdata=data.frame(hormon=0, rectime=c(250,500,1000)), type="hr", var="hormon", full=TRUE, se.fit=TRUE) ## fit0 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, df=3) anova(fit0,fit) Y = 10 T = 1000 poisson.test(Y,T) ## log(theta)~normal exp(log(Y)+c(-1.96,1.96)/sqrt(Y)) ## theta~gamma qgamma(c(0.025,0.975), c(Y,Y+1), 1) Ys = rgamma(1e6, Y+1, 1)/T quantile(Ys, c(0.025,0.975)) rates = exp(rnorm(1e5, log(Y), 1/sqrt(Y)))/T quantile(rates, c(0.025,0.975)) ## left truncated library(rstpm2) brcancer2 <- transform(brcancer, startTime=ifelse(hormon==0,rectime/2,0)) ##debug(stpm2) summary(fit <- stpm2(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2, df=3)) tmp=predict(fit, newdata=data.frame(hormon=0), type="hazard", grid=TRUE, full=TRUE, se.fit=TRUE) library(rstpm2) library(biostat3) library(survival) colon = transform(biostat3::colon, male=0+(sex=="Male"), Unknown=0+(stage=="Unknown"), Localised=0+(stage=="Localised"), Regional=0+(stage=="Regional"), Distant=0+(stage=="Distant")) localised = subset(colon, stage=="Localised") system.time(fit1 <- aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=4, data=localised, mixture=TRUE, tvc.integrated=TRUE, control=list(reltol=1e-12), tvc=list(male=2))) system.time(fit2 <- aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=4, data=localised, tvc=list(male=2))) library(Rcpp) library(RcppArmadillo) sourceCpp(file = "~/src/R/rstpm2/inst/vintegrateRcpp2.cpp") vintegrate = function(f, lower, upper, ..., subdivisions = 100L, rel.tol=.Machine$double.eps^0.25, abs.tol=rel.tol) { f <- match.fun(f) ff <- function(x) f(x, ...) ny = max(length(lower), length(upper)) if (ny>1 && length(lower)==1) lower = rep(lower,ny) if (ny>1 && length(upper)==1) upper = rep(upper,ny) limit <- as.integer(subdivisions) if (limit < 1L || (abs.tol <= 0 && rel.tol < max(50 * .Machine$double.eps, 5e-29))) stop("invalid parameter values") if (any(is.na(lower) | is.na(upper))) stop("a limit is NA or NaN") if (!(all(is.finite(lower)) || all(!is.finite(lower)))) stop("lower bounds are a mix of finite and infinite values") if (!(all(is.finite(upper)) || all(!is.finite(upper)))) stop("upper bounds are a mix of finite and infinite values") if (all(is.finite(lower)) && all(is.finite(upper))) { res = vdqagsRcpp(ff, lower, upper, rel.tol, abs.tol, limit, ny) res$value = drop(res$value) res$abs.err = drop(res$abs.err) res$abserr = NULL } else { if (all(is.finite(lower))) { inf <- 1L bound <- lower } else if (all(is.finite(upper))) { inf <- -1L bound <- upper } else { inf <- 2L bound <- rep(0,ny) # ignored:) } res = vdqagiRcpp(ff, bound, inf, rel.tol, abs.tol, limit, ny) res$value = drop(res$value) res$abserr = drop(res$abserr) } res } vintegrate(exp, -Inf, 1)$value - exp(1) # ok (scalar) vintegrate(function(x) exp(c(x[1],2*x[2])), -Inf, c(1,1))$value - c(exp(1),exp(2)/2) vintegrate(exp, -Inf, 1:2)$value - exp(1:2) # ok (one function and two bounds) vintegrate(function(x) exp(x*1:2), -Inf, 1:2)$value - c(exp(1),exp(4)/2) # ok (vector function with vector bounds) vintegrate(function(x) exp(2*x), -Inf, 1:2)$value - exp(c(2,4))/2 vintegrate(function(x) c(exp(x[1]),log(x[2])), 0, c(1,1))$value - c(exp(1)-1, -1) vintegrate(function(x) c(exp(x[1]),log(2*x[2])), c(0,1), 2:3)$value integrate(exp, 0, 2) integrate(function(x) log(2*x), 1, 3) vintegrate(function(x) c(exp(x[1]),log(2*x[2])), c(0,1), 2:3) test_vdqags() test_vdqags()$result- c(exp(1)-1, (exp(2)-1)/2, -1) tm1 <- system.time(for (i in 1:10000) integrate(function(x) exp(2*x), -Inf, 0)) tm2 <- system.time(tmp <- vintegrate(function(x) exp(2*x), -Inf, rep(0,10000), subdivisions = 10)) tm1/tm2 head(tmp$abs.err) vintegrate(function(x) log(2*x), 0, 10) unclass(integrate(function(x) log(2*x), 0, 10)) tm1 <- system.time(for (i in 1:10000) integrate(function(x) log(2*x), 0, 10)) tm2 <- system.time(tmp <- vintegrate(function(x) log(2*x), rep(0,10000), 10, subdivisions = 20)) tm1/tm2 lapply(tmp,head) vrdqk21Rcpp(function(x) log(c(x,x)), 0, 1) ## Rcpp::List vrdqk15Rcpp(Rcpp::Function f, double boun, int inf, double a, double b); ## inf - int ## indicating the kind of integration range involved ## inf = 1 corresponds to (bound,+infinity), ## inf = -1 to (-infinity,bound), ## inf = 2 to (-infinity,+infinity). vrdqk15Rcpp(f=function(x) exp(c(x,x)), boun=1.0, inf=-1, a=0, b=1) integrate(exp, -Inf, 1) (tmp <- vdqagsRcpp(function(x) log(c(x,2*x)), 0, 1, 1e-6, 1e-6, 15, 2)) vdqagsRcpp(function(x) exp(c(x,2*x)), 0, 1, 1e-6, 1e-6, 50, 2) c(exp(1)-1,(exp(2)-1)/2) vdqagsRcpp(log, 0, 1, 1e-6, 1e-6, 50, 1) vdqagsRcpp(function(x) log(rep(x,2)), 0, 1, 1e-6, 1e-6, 50, 2) ## tm1 <- system.time(vdqagsRcpp(function(x) log(rep(x,10000)), 0, 1, 1e-6, 1e-6, 50, 10000)) # FAILS tm1 <- system.time(vdqagsRcpp(function(x) log(rep(x,10000)), 0, 1, 1e-6, 1e-6, 10, 10000)) tm2 <- system.time(for (i in 1:10000) integrate(log, 0, 1)) tm2/tm1 # Only 3 times faster -- and does not scale for memory:( ## Nicely behaved functions are faster: tm1 <- system.time(vdqagsRcpp(function(x) exp(rep(x,10000)), 0, 1, 1e-6, 1e-6, 10, 10000)) tm2 <- system.time(for (i in 1:10000) integrate(exp, 0, 1)) tm2/tm1 # 30 times faster:) ## testing for voptimize library(rstpm2) voptimize(function(x) {y=dnorm(x, c(0,1), log=TRUE); cat("x:",x,"\n","y:",y,"\n"); y}, lower=c(-5,-5), upper=c(5,5), maximum=TRUE, tol=1e-5) set.seed(12345) z=rnorm(1e4) tm1 <- system.time(tmp <- voptimize(function(x) dnorm(x, z, log=TRUE), lower=c(-10,-10), upper=c(10,10), maximum=TRUE, tol=1e-5)) tm2 <- system.time(for (i in 1:length(z)) optimize(function(x) dnorm(x, z[i], log=TRUE), lower=c(-10,-10), upper=c(10,10), maximum=TRUE, tol=1e-5)) tm2/tm1 ## Conditional distributions set.seed(12345) grs_variance = 0.68 ## variance on the log scale or on the frailty scale?? other_variance = 1.14 grs_log_mean = -grs_variance/2 other_log_mean = -other_variance/2 grs_log_sd = sqrt(grs_variance) other_log_sd = sqrt(grs_variance) ## conditional on the sum (on the log scale), what is the GRS? f1g = function(g,k,mu1=0,sigma1=1,mu2=0,sigma2=1) integrate(function(y1) g(y1)*dnorm(y1,mu1,sigma1)*dnorm(k-y1,mu2,sigma2), -Inf, Inf)$value f1c = function(y1,k,mu1=0,sigma1=1,mu2=0,sigma2=1) { denom = f1g(function(x) 1, k, mu1, sigma1, mu2, sigma2) dnorm(y1,mu1,sigma1)*dnorm(k-y1,mu2,sigma2)/denom } dbinorm_total = function(x,k,mu1=0,sigma1=1,mu2=0,sigma2=1) dnorm(x,mu1,sigma1)*dnorm(k-x,mu2,sigma2) integrate(f1c, -Inf, Inf, k=2,mu1=1,sigma1=2) # check: value==1 print(muc<-integrate(function(x) x*f1c(x,k=2,mu1=1,sigma1=2), -Inf, Inf)) print(varc<-integrate(function(x) (x-muc$value)^2*f1c(x,k=2,mu1=1,sigma1=2), -Inf, Inf)) y1=seq(-10,10,length=1001) plot(y1, f1c(y1, 2,mu1=1,sigma1=2), type="l") lines(y1,dnorm(y1,muc$value,sqrt(varc$value)),col="blue") abline(v=1.8,lty=2) ## set.seed(12345) r1 = rnorm(1e5, muc$value, sqrt(varc$value)) r2 = 2-r1 c(mean(r1),sd(r1)) c(mean(r2),sd(r2)) plot(density(r1),xlim=c(-10,10)) lines(density(r2),lty=2) library(Rcpp) code = "#include #include struct sbinorm_total { double k, mu1, sd1, mu2, sd2, norm, mean; }; void dbinorm_total(double *x, int n, void *ex) { sbinorm_total *p = (sbinorm_total *) ex; for (int i=0; imu1, p->sd1, 0)*R::dnorm(p->k-x[i], p->mu2, p->sd2, 0); } void dbinorm_total_expected(double *x, int n, void *ex) { sbinorm_total *p = (sbinorm_total *) ex; // for (int i=0; imu1, p->sd1, 0)*R::dnorm(p->k-x[i], p->mu2, p->sd2, 0)/p->norm; } void dbinorm_total_var(double *x, int n, void *ex) { sbinorm_total *p = (sbinorm_total *) ex; // for (int i=0; imean)*(x[i]-p->mean)*R::dnorm(x[i], p->mu1, p->sd1, 0)*R::dnorm(p->k-x[i], p->mu2, p->sd2, 0)/p->norm; } // [[Rcpp::export]] Rcpp::NumericVector test(Rcpp::NumericVector x, double k=2.0, double mu1=0.0, double sd1=1.0, double mu2=0.0, double sd2=1.0) { double * xx = &x[0]; int n = x.size(); sbinorm_total p{k, mu1, sd1, mu2, sd2, 0.0, 0.0}; dbinorm_total(&xx[0], n, (void *) &p); Rcpp::NumericVector out(xx, xx+n); return out; } // [[Rcpp::export]] double binorm_total_norm(double k=2.0, double mu1=0.0, double sd1=1.0, double mu2=0.0, double sd2=1.0) { sbinorm_total p{k, mu1, sd1, mu2, sd2}; int inf=2, neval=0, ier=0, limit=1000, last=0, lenw; double epsabs = 1.0e-6, epsrel = 1.0e-6, result = 0.0, abserr = 0.0, bound = 0.0; lenw = 4 * limit; int *iwork = (int *) R_alloc(limit, sizeof(int)); double *work = (double *) R_alloc(lenw, sizeof(double)); Rdqagi(dbinorm_total, (void *) &p, &bound, &inf, &epsabs, &epsrel, &result, &abserr, &neval, &ier, &limit, &lenw, &last, iwork, work); return result; } // [[Rcpp::export]] double binorm_total_expected(double k=2.0, double mu1=0.0, double sd1=1.0, double mu2=0.0, double sd2=1.0) { int inf=2, neval=0, ier=0, limit=1000, last=0, lenw; double epsabs = 1.0e-4, epsrel = 1.0e-4, result = 0.0, abserr = 0.0, bound = 0.0; lenw = 4 * limit; int *iwork = (int *) R_alloc(limit, sizeof(int)); double *work = (double *) R_alloc(lenw, sizeof(double)); double norm=binorm_total_norm(k,mu1,sd1,mu2,sd2); sbinorm_total p2{k, mu1, sd1, mu2, sd2, norm, 0.0}; Rdqagi(dbinorm_total_expected, (void *) &p2, &bound, &inf, &epsabs, &epsrel, &result, &abserr, &neval, &ier, &limit, &lenw, &last, iwork, work); return result; } // [[Rcpp::export]] Rcpp::NumericVector binorm_total_sd(double k=2.0, double mu1=0.0, double sd1=1.0, double mu2=0.0, double sd2=1.0) { int inf=2, neval=0, ier=0, limit=1000, last=0, lenw; double epsabs = 1.0e-6, epsrel = 1.0e-6, result = 0.0, abserr = 0.0, bound = 0.0; lenw = 4 * limit; int *iwork = (int *) R_alloc(limit, sizeof(int)); double *work = (double *) R_alloc(lenw, sizeof(double)); sbinorm_total p{k, mu1, sd1, mu2, sd2, 0.0, 0.0}; Rdqagi(dbinorm_total, (void *) &p, &bound, &inf, &epsabs, &epsrel, &result, &abserr, &neval, &ier, &limit, &lenw, &last, iwork, work); p.norm = result; Rdqagi(dbinorm_total_expected, (void *) &p, &bound, &inf, &epsabs, &epsrel, &result, &abserr, &neval, &ier, &limit, &lenw, &last, iwork, work); p.mean = result; Rdqagi(dbinorm_total_var, (void *) &p, &bound, &inf, &epsabs, &epsrel, &result, &abserr, &neval, &ier, &limit, &lenw, &last, iwork, work); Rcpp::NumericVector out{p.mean, std::sqrt(result)}; return out; } // [[Rcpp::export]] Rcpp::NumericMatrix test2(Rcpp::NumericVector k, double mu1=0.0, double sd1=1.0, double mu2=0.0, double sd2=1.0) { Rcpp::NumericMatrix out(k.size(),3); Rcpp::NumericVector y(2); for (int i=0; i=control$maxn) { if (n>=control$maxn) warning("Exceeded the maximum recursive depth") return(int) } else { m = a+(b-a)/2 int1 = step(a, m, n+1) int2 = step(m, b, n+1) int = int1+int2 attr(int,"serr") = attr(int1,"serr")+attr(int2,"serr") attr(int,"err") = attr(int1,"err")+attr(int2,"err") return(int) } } out = step(a,b,0) out+attr(out,"serr") } myintegrate(log,0,1,control=list(tol=1e-12)) + 1 ## Based on gsl/integration/{qag.c,qk.c}: see integration.cpp and vintegration*.cpp library(Rcpp) library(RcppArmadillo) sourceCpp(file="~/src/R/rstpm2/inst/vintegrationRcpp.cpp") vintegrate = function(f, a, b, abstol=1e-8, reltol=1e-8, maxit=1000) { ff = function(x) f(a+(b-a)*x) res = vintegrationRcpp(ff, abstol, reltol, maxit) res$value = drop(res$value*(b-a)) res$abserr = drop(res$abserr*(b-a)) res } vintegrate(log, 0, 1) vintegrate(function(x) log(c(x,x,x,x)), 0, 1) system.time(vintegrate(function(x) rep(log(x),100), 0, 1)) system.time(for (i in 1:100) integrate(log, 0, 1)) sourceCpp(file="~/src/R/rstpm2/inst/integrateRcpp.cpp") integrateRcpp = function(f, lower, upper, ..., rel.tol=.Machine$double.eps^0.25, abs.tol=rel.tol, subdivisions = 100L) { f <- match.fun(f) ff <- function(x) f(x, ...) limit <- as.integer(subdivisions) if (limit < 1L || (abs.tol <= 0 && rel.tol < max(50 * .Machine$double.eps, 5e-29))) stop("invalid parameter values") stopifnot(length(lower) == 1, length(upper) == 1) dqagsRcpp(f, lower, upper, abs.tol, rel.tol, subdivisions) } integrateRcpp(log, 0, 1) rdqk21Rcpp(function(x) {cat(x,"\n"); exp(x)}, 0, 1) integrate(function(x) {cat(x,"\n"); exp(x)}, 0, 1) sourceCpp(file="~/src/R/rstpm2/inst/vintegrateRcpp.cpp") vintegrateRcpp = function(f, lower, upper, ..., rel.tol=.Machine$double.eps^0.25, abs.tol=rel.tol, subdivisions = 100L) { f <- match.fun(f) ff <- function(x) f(lower+(upper-lower)*x, ...) fmid = ff(0.5) limit <- as.integer(subdivisions) if (limit < 1L || (abs.tol <= 0 && rel.tol < max(50 * .Machine$double.eps, 5e-29))) stop("invalid parameter values") stopifnot(length(lower) == 1, length(upper) == 1) res = vdqagsRcpp(ff, lower, upper, abs.tol, rel.tol, subdivisions) } vintegrateRcpp(log, 0, 1) integrate(function(x) {cat(x,"\n"); exp(x)}, 0, 1) rdqk21Rcpp(function(x) {cat(x,"\n"); log(x)}, 0, 1) vrdqk21Rcpp(function(x) {cat(x,"\n"); log(x)}, 0, 1) vrdqk21Rcpp(function(x) log(c(x,x)), 0, 1) ## Based on https://github.com/jacobwilliams/quadpack/blob/master/src/quadpack_generic.F90 dqk21 = function(f, a, b, ...) { ## n = 11 xgk = c(.995657163025808080735527280689003, .973906528517171720077964012084452, .930157491355708226001207180059508, .865063366688984510732096688423493, .780817726586416897063717578345042, .679409568299024406234327365114874, .562757134668604683339000099272694, .433395394129247190799265943165784, .294392862701460198131126603103866, .14887433898163121088482600112972, 0.) ## xgk = c(-xgk, xgk[10:1]) wgk = c(.011694638867371874278064396062192, .03255816230796472747881897245939, .05475589657435199603138130024458, .07503967481091995276704314091619, .093125454583697605535065465083366, .109387158802297641899210590325805, .123491976262065851077958109831074, .134709217311473325928054001771707, .142775938577060080797094273138717, .147739104901338491374841515972068, .149445554002916905664936468389821) ## wgk = c(wgk, wgk[10:1]) / 2 wg = c(.066671344308688137593568809893332, .149451349150580593145776339657697, .219086362515982043995534934228163, .269266719309996355091226921569469, .295524224714752870173892994651338) ## wg = c(wg, wg[5:1]) / 2 fv1 <- fv2 <- vector("numeric",10) epmach = .Machine$double.eps centr = 0.5*(a+b) hlgth = 0.5*(b-a) dhlgth = abs(hlgth) ## resg = 0.0 fc = f(centr, ...) resk = wgk[11]*fc Resabs = abs(resk) for (j in 1:5) { jtw = 2L*j absc = hlgth*xgk[jtw] fval1 = f(centr - absc, ...) fval2 = f(centr + absc, ...) fv1[jtw] = fval1 fv2[jtw] = fval2 fsum = fval1 + fval2 resg = resg + wg[j]*fsum resk = resk + wgk[jtw]*fsum Resabs = Resabs + wgk[jtw]*(abs(fval1) + abs(fval2)) } for (j in 1:5) { jtwm1 = 2L*j - 1L absc = hlgth*xgk[jtwm1] fval1 = f(centr - absc, ...) fval2 = f(centr + absc, ...) fv1[jtwm1] = fval1 fv2[jtwm1] = fval2 fsum = fval1 + fval2 resk = resk + wgk[jtwm1]*fsum Resabs = Resabs + wgk[jtwm1]*(abs(fval1) + abs(fval2)) } reskh = resk*0.5 Resasc = wgk[11]*abs(fc - reskh) for (j in 1:10) Resasc = Resasc + wgk[j]*(abs(fv1[j] - reskh) + abs(fv2[j] - reskh)) Result = resk*hlgth Resabs = Resabs*dhlgth Resasc = Resasc*dhlgth Abserr = abs((resk - resg)*hlgth) if (Resasc != 0.0 && Abserr != 0.0) Abserr = Resasc*min(1.0, (200.0*Abserr/Resasc)^1.5) if (Resabs > uflow/(50.0*epmach)) Abserr = max((epmach*50.0)*Resabs, Abserr) c(Result=Result, Abserr=Abserr, Resabs=Resabs, Resasc=Resasc) } dqage = function(f, a, b, Epsabs=1e-10, Epsrel=1e-10, Limit=15L, ...) { epmach = .Machine$double.eps uflow = .Machine$double.xmin Key = 2 Alist <- Blist <- Elist <- Rlist <- vector("numeric", Limit) Iord <- vector("integer", Limit) Ier = 0L Neval = 0L Last = 0L Result = 0.0 Abserr = 0.0 Alist[1] = a Blist[1] = b Rlist[1] = 0.0 Elist[1] = 0.0 Iord[1] = 0L if (Epsabs <= 0.0 && Epsrel < max(50.0*epmach, 0.5e-28)) Ier = 6L if (Ier != 6) then Neval = 0L res = dqk21(f, a, b, ...) Last = 1L Rlist[1] = res$Result Elist[1] = res$Abserr Iord[1] = 1L errbnd = max(Epsabs, Epsrel*abs(Result)) if (Abserr <= 50.0*epmach*defabs && Abserr > errbnd) Ier = 2L if (Limit == 1) Ier = 1L if (! (Ier != 0 || (Abserr <= errbnd && Abserr != resabs) || Abserr == 0.0)) { errmax = Abserr maxerr = 1L area = Result errsum = Abserr nrmax = 1L iroff1 = 0L iroff2 = 0L for (Last in 2:Limit) { a1 = Alist[maxerr] b1 = 0.5*(Alist[maxerr] + Blist[maxerr]) a2 = b1 b2 = Blist[maxerr] ## call dqk21(f, a1, b1, area1, error1, resabs, defab1) ## call dqk21(f, a2, b2, area2, error2, resabs, defab2) ## c(Result=Result, Abserr=Abserr, Resabs=Resabs, Resasc=Resasc) res1 = dqk21(f, a1, b1, ...) area1 = res1$Result error1 = res1$Abserr defab1 = res1$Resasc res2 = dqk21(f, a2, b2, ...) area2 = res2$Result error2 = res2$Abserr defab2 = res2$Resasc Neval = Neval + 1L area12 = area1 + area2 erro12 = error1 + error2 errsum = errsum + erro12 - errmax area = area + area12 - Rlist[maxerr] if (defab1 != error1 && defab2 != error2) { if (abs(Rlist[maxerr] - area12) <= 0.1e-4*abs(area12) && erro12 >= 0.99*errmax) iroff1 = iroff1 + 1L if (Last > 10 && erro12 > errmax) iroff2 = iroff2 + 1L } Rlist[maxerr] = area1 Rlist[Last] = area2 errbnd = max(Epsabs, Epsrel*abs(area)) if (errsum > errbnd) { if (iroff1 >= 6L || iroff2 >= 20L) Ier = 2L if (Last == Limit) Ier = 1L if (max(abs(a1), abs(b2)) <= (1.0 + 100.0*epmach)*(abs(a2) + 1000.0*uflow)) Ier = 3L } if (error2 > error1) { Alist[maxerr] = a2 Alist[Last] = a1 Blist[Last] = b1 Rlist[maxerr] = area2 Rlist[Last] = area1 Elist[maxerr] = error2 Elist[Last] = error1 } else { Alist[Last] = a2 Blist[maxerr] = b1 Blist[Last] = b2 Elist[maxerr] = error1 Elist[Last] = error2 } } } } myintegrate = function(f, a, b, control=list()) { control = modifyList(list(tol=1e-8,maxn=20, debug=FALSE), control) step = function(a,b,n) { if (control$debug) cat(sprintf("(%g,%g), n=%i\n",a,b,n)) fx = f ( a + (b - a ) * ( xi + 1)/2) qb1 = (b - a ) * sum(w * fx[seq.int(2,20,2)]) qa1 = (b - a ) * sum(wk * fx) xi2 = c( ( xi - 1)/2 , ( xi + 1)/2 ) fx2 = f ( a + (b - a )*( xi2 +1)/2) qb2 = (b - a ) * sum(c( w , w ) * fx2[ c(seq(2,20,2) , seq(23,41,2))]) / 2 qa2 = (b - a ) * sum(c( wk , wk ) * fx2) / 2 int = qa2 qab1 = qa1 - qb1 ; qaa = qa2 - qa1 ; qab2 = qa2 - qb2 ; qbb = qb2 - qb1 ; noise = 21 * .Machine$double.eps * (b - a ) * max ( abs( fx )) if (abs( qab1 ) <= noise) qab1 = 0 if (abs( qab2 ) <= noise) qab2 = 0 if (abs( qaa ) <= noise) qaa = 0 if (abs( qbb ) <= noise) qbb = 0 if ((qab1==0 || (0<=qab2/qab1 && qab2/qab1 <= 1)) && (qaa==0 || abs(qaa) <= abs(qbb))) { serr = if(qaa==0) 0 else qab2*qaa/(qbb-qaa) } else serr = 2*tol attr(int,"serr") = serr attr(int,"err") = abs(serr) if (abs(serr)<=control$tol || n>=control$maxn) { if (n>=control$maxn) warning("Exceeded the maximum recursive depth") return(int) } else { m = a+(b-a)/2 int1 = step(a, m, n+1) int2 = step(m, b, n+1) int = int1+int2 attr(int,"serr") = attr(int1,"serr")+attr(int2,"serr") attr(int,"err") = attr(int1,"err")+attr(int2,"err") return(int) } } out = step(a,b,0) out+attr(out,"serr") } myintegrate(log,0,1,control=list(tol=1e-12)) + 1 mintegrate = function(f, a, b, control=list(), ...) { stopifnot(length(f(a))==length(a), length(a) == length(b)) control = modifyList(list(tol=1e-8,maxn=20, debug=FALSE), control) xi = c(.995657163025808080735527280689003, .973906528517171720077964012084452, .930157491355708226001207180059508, .865063366688984510732096688423493, .780817726586416897063717578345042, .679409568299024406234327365114874, .562757134668604683339000099272694, .433395394129247190799265943165784, .294392862701460198131126603103866, .14887433898163121088482600112972, 0.) xi = c(-xi, xi[10:1]) w = c(.066671344308688137593568809893332, .149451349150580593145776339657697, .219086362515982043995534934228163, .269266719309996355091226921569469, .295524224714752870173892994651338) w = c(w, w[5:1]) / 2 wk = c(.011694638867371874278064396062192, .03255816230796472747881897245939, .05475589657435199603138130024458, .07503967481091995276704314091619, .093125454583697605535065465083366, .109387158802297641899210590325805, .123491976262065851077958109831074, .134709217311473325928054001771707, .142775938577060080797094273138717, .147739104901338491374841515972068, .149445554002916905664936468389821) wk = c(wk, wk[10:1]) / 2 width = b-a olda = a oldb = b ff = function(x) f(olda+x*width, ...) ## fmid = ff(0.5) step = function(a,b,n,side) { if (control$debug) cat(sprintf("(%g,%g), n=%i\n",a,b,n)) fx = t(sapply(xi, function(xii) ff ( a + (b - a ) * ( xii + 1)/2))) qb1 = (b - a ) * colSums(w * fx[seq.int(2,20,2),]) qa1 = (b - a ) * colSums(wk * fx) xi2 = c( ( xi - 1)/2 , ( xi + 1)/2 ) fx2 = t(sapply(xi2, function(xii2) ff ( a + (b - a )*( xii2 +1)/2))) qb2 = (b - a ) * colSums(c( w , w ) * fx2[ c(seq(2,20,2) , seq(23,41,2)),]) / 2 qa2 = (b - a ) * colSums(c( wk , wk ) * fx2) / 2 int = qa2 qab1 = qa1 - qb1 ; qaa = qa2 - qa1 ; qab2 = qa2 - qb2 ; qbb = qb2 - qb1 ; noise = 21 * .Machine$double.eps * (b - a ) * max ( abs( fx )) qab1 = ifelse(abs( qab1 ) <= noise, 0, qab1) qab2 = ifelse(abs( qab2 ) <= noise, 0, qab2) qaa = ifelse(abs( qaa ) <= noise, 0, qaa) qbb = ifelse(abs( qbb ) <= noise, 0, qbb) serr = ifelse((qab1==0 | (0<=qab2/qab1 & qab2/qab1 <= 1)) & (qaa==0 | abs(qaa) <= abs(qbb)), ifelse(qaa==0, 0, qab2*qaa/(qbb-qaa)), rep(2*tol,length(qaa))) attr(int,"serr") = serr attr(int,"err") = abs(serr) if (all(abs(serr)<=control$tol) || n>=control$maxn) { if (n>=control$maxn && side==TRUE) warning("Exceeded the maximum recursive depth") return(int) } else { m = a+(b-a)/2 int1 = step(a, m, n+1, TRUE) int2 = step(m, b, n+1, FALSE) int = int1+int2 attr(int,"serr") = attr(int1,"serr")+attr(int2,"serr") attr(int,"err") = attr(int1,"err")+attr(int2,"err") return(int) } } out = step(0,1,0, TRUE) out+attr(out,"serr") } system.time(mintegrate(function(x) c(rep(exp(x),10000), log(x)),c(rep(0,10000),1),c(rep(1,10000),2),control=list(tol=1e-12)) - c(rep(exp(1)-1,10000), 2*log(2) - 1)) system.time(mintegrate(function(x) c(rep(exp(x),10), log(x)),c(rep(0,10),1),c(rep(1,10),2),control=list(tol=1e-12)) - c(rep(exp(1)-1,10), 2*log(2) - 1)) system.time({for (i in 1:10000) integrate(log,0,1); integrate(exp,0,1)}) system.time(mintegrate(function(x) c(exp(x[1:10000]), log(x[11])),c(rep(0,10000),1),c(rep(1,10000),2),control=list(tol=1e-12)) - c(rep(exp(1)-1,10000), 2*log(2) - 1)) mintegrate(function(x) c(exp(x[1:10]), log(x[11])),c(rep(0,10),1),c(rep(1,10),2),control=list(tol=1e-12)) - c(rep(exp(1)-1,10), 2*log(2) - 1) myintegrate(function(x) rep(1,length(x)),0,1) - 1 myintegrate(function(x) x,0,1) - 1/2 myintegrate(function(x) x^2,0,1) - 1/3 myintegrate(function(x) x^3,0,1) - 1/4 myintegrate(function(x) x*log(x),0,1,control=list(tol=1e-6)) + 1/4 myintegrate(function(x) 1/x,0,1) - 1 myintegrate(function(x) 1/sqrt(x),0,1) - 2 integrate(function(x) 1/sqrt(x),0,1) integrate(function(x) 1/sqrt(x),0,1)$value -2 ## AFT model fitting with linear constraints library(rstpm2) library(biostat3) library(survival) colon = transform(biostat3::colon, male=0+(sex=="Male"), Unknown=0+(stage=="Unknown"), Localised=0+(stage=="Localised"), Regional=0+(stage=="Regional"), Distant=0+(stage=="Distant")) localised = subset(colon, stage=="Localised") system.time(fit1 <- stpm2(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + factor(stage), df=4, data=colon)) pred=predict(fit1,newdata=transform(colon,stage="Localised"),type='meansurvdiff',grid=TRUE,full=TRUE,se.fit=TRUE,exposed=function(data) transform(data, stage="Distant")) ## Get the penalty matrix for the baseline splines system.time(fit1 <- aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=4, data=localised, mixture=TRUE, tvc.integrated=TRUE, control=list(reltol=1e-12), tvc=list(male=2))) # 10.3s plot(fit1, newdata=data.frame(age=50, male=1)) system.time(fit1a <- aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50), df=4, data=localised, mixture=TRUE, tvc.integrated=FALSE, control=list(constrOptim=TRUE, reltol=1e-12), tvc=list(male=2))) # 13.5s fit1 fit1@args$negll(coef(fit1)) fit1@args$negll(-coef(fit1)) fit1@args$negll(coef(fit1a)) fit1@args$gradient(coef(fit1)) fit1@args$gradient(coef(fit1a)) fit1@args$gradient(-coef(fit1)) ui = fit1@args$ui negll = \(coef) fit1@args$negll(coef,add.penalties=FALSE) grad = \(coef) fit1@args$gradient(coef, add.penalties=FALSE) ## negll = fit1@args$negll ## grad = fit1@args$gradient system.time(fit1b <- constrOptim(coef(fit1)*1.05, f=negll, grad=grad, ui=ui, ci=0, mu=1e-10, outer.eps=1e-10, control=list(reltol=1e-12))) fit1b print(fit1b$value,digits=12) fit1@args$gradient(fit1b$par) ## library(alabama) system.time(al1 <- alabama::auglag(coef(fit1)*1.05, fn=negll, gr=grad, hin=function(coef) ui %*% coef, hin.jac=function(coef) ui, control.optim=list(rel.tol=1e-12), control.outer=list(eps=1e-10, method="nlminb"))) al1 ## library(nloptr) system.time(nl1 <- nloptr::auglag(coef(fit1)*1.05, fn=negll, hin=function(coef) ui %*% coef, gr=grad, hinjac=function(coef) ui, localsolver = "LBFGS", localtol=1e-10)) nl1 fit1@args$gradient(nl1$par) ## par(mfrow=c(2,2)) plot(coef(fit1)/al1$par) plot(coef(fit1a)/al1$par) plot(fit1b$par/al1$par) plot(nl1$par/al1$par) aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50), df=8, data=localised, mixture=TRUE, tvc=list(male=2), reltol=1e-12, init=-coef(fit1)) # wrong:( print(fit1@args$negll(coef(fit1)), digits=12) print(fit1@args$negll(coef(fit1a)), digits=12) print(fit1@args$negll(fit1b$par), digits=12) print(fit1@args$negll(coef(fit1b)), digits=12) coef(fit1) coef(fit1a) aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=2, data=localised) aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=2, data=localised) aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=2, data=localised) survreg(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, data=localised) aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=2, data=localised) aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male + bhazard(bhaz), df=2, data=transform(localised,bhaz=1e-4)) aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=2, data=localised, mixture=TRUE, cure.formula=~1) aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=2, data=localised, mixture=TRUE) aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=2, data=localised, mixture=TRUE, cure.formula=~1) aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=2, data=localised, mixture=TRUE, tvc.integrated=TRUE) fit1 = aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=8, data=localised, mixture=TRUE, tvc=list(male=2)) fit2 = aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=8, data=localised, mixture=TRUE, tvc=list(male=2)) fit3 = aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=8, data=localised, mixture=TRUE, tvc.integrated=TRUE, tvc=list(male=2)) aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=2, data=localised) # ok aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male + bhazard(0*age), df=2, data=localised) # ok aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male + bhazard(0*age), df=8, data=localised, mixture=TRUE, tvc=list(male=2)) # fails fit2 = aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=2, data=localised) fit3 = survreg(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, data=localised) ## Examples for the second AFT paper library(rstpm2) library(biostat3) library(survival) colon = transform(biostat3::colon, male=0+(sex=="Male"), Unknown=0+(stage=="Unknown"), Localised=0+(stage=="Localised"), Regional=0+(stage=="Regional"), Distant=0+(stage=="Distant")) localised = subset(colon, stage=="Localised") ## Story ## Some sanity checks -> move to tests ## Introduce the dataset: simulated data based on a population-based cancer registry ## We could also use the brcancer dataset ## Time-varying acceleration factors: stage or sex? ## What about left truncation? We could use population-based data for prostate cancer incidence or time to next PSA test or biopsy. Both of these analyses could use the Stockholm PSA and Biopsy Register. ## What about recurrent events? This would require either a marginal model, a copula model or a random effects model. This could use Stan or ADMB or Benjamin's library. For the last option, we could simplify Benjamin's VAJointSurv library -- and then think about other extensions. ## What about relative survival / excess hazard modelling? This would be a modest extension. ## show that aft(..., df=2) and survreg(...) give the same results for the beta coefficients fit0 = aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=2, data=localised) fit1 = aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=2, data=localised) fit2 = aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, df=2, data=localised) fit3 = survreg(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, data=localised) fit0 fit1 fit2 fit3 ## The following models also give the same estimates... fit0 = aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, data=localised) fit1 = aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, data=localised) fit2 = aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, data=localised) fit0 fit1 fit2 par(mfrow=c(3,2)) plot(fit0, type="surv", newdata=data.frame(age=50, male=0), ylim=c(0.7,1), main="Females") # ok plot(fit0, type="surv", newdata=data.frame(age=50, male=1), ylim=c(0.7,1), main="Males") # ok plot(fit1, type="surv", newdata=data.frame(age=50, male=0), ylim=c(0.7,1), main="Females") # ok plot(fit1, type="surv", newdata=data.frame(age=50, male=1), ylim=c(0.7,1), main="Males") # ok plot(fit2, type="surv", newdata=data.frame(age=50, male=0), ylim=c(0.7,1), main="Females") # ok plot(fit2, type="surv", newdata=data.frame(age=50, male=1), ylim=c(0.7,1), main="Males") # ok ## plot(fit0, type="surv", newdata=data.frame(age=50, male=0:1)) ## issue with plotting multiple rows ## plot survival library(survival) summary(aft(Surv(surv_mm, status=="Dead: cancer") ~ male, data=localised)) ## Kaplan-Meier estimators versus a fitted AFT model par(mfrow=1:2) summary(fit1 <- aft(Surv(surv_mm, status=="Dead: cancer") ~ male, df=4, data=localised)) plot(fit1, newdata=data.frame(male=1), type="surv", xlab="Time since cancer diagnosis (months)", main="Males", ylim=c(0.4,1)) lines(survfit(Surv(surv_mm, status=="Dead: cancer") ~ 1, data=localised, subset=(male==1))) plot(fit1, newdata=data.frame(male=0), type="surv", xlab="Time since cancer diagnosis (months)", main="Females", ylim=c(0.4,1)) lines(survfit(Surv(surv_mm, status=="Dead: cancer") ~ 1, data=localised, subset=(male==0))) ## Female patients are older -> potential confounding t.test(age~male, localised) plot(density(subset(localised,male==1)$age)) lines(density(subset(localised,male==0)$age), lty=2) summary(fit0 <- aft(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=2)+male, data=localised, df=4, tvc=list(male=3), tvc.intercept=FALSE)) summary(fit1 <- aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=2)+male, data=localised, df=4, tvc=list(male=3), tvc.intercept=FALSE)) summary(fit2 <- aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=2)+male, data=localised, df=4, tvc=list(male=3), tvc.intercept=FALSE)) par(mfrow=c(1,3)) plot(fit0, type="accfac", newdata=data.frame(age=70, male=0), ylim=c(0,2), var="male", main="aft") plot(fit1, type="accfac", newdata=data.frame(age=70, male=0), ylim=c(0,2), var="male", main="aft_mixture") plot(fit2, type="accfac", newdata=data.frame(age=70, male=0), ylim=c(0,2), var="male", main="aft_integrated") ## summary(fit0 <- aft(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=2)+male+Distant, data=colon, df=4, tvc=list(Distant=3), tvc.intercept=FALSE)) summary(fit1 <- aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=2)+male+Distant, data=colon, df=4, tvc=list(Distant=3), tvc.intercept=FALSE)) summary(fit2 <- aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=2)+male+Distant, data=colon, df=4, tvc=list(Distant=3), tvc.intercept=FALSE)) par(mfrow=c(1,3)) plot(fit0, type="accfac", newdata=data.frame(age=70, male=0, Distant=0), var="Distant", main="aft") plot(fit1, type="accfac", newdata=data.frame(age=70, male=0, Distant=0), var="Distant", main="aft_mixture") plot(fit2, type="accfac", newdata=data.frame(age=70, male=0, Distant=0), var="Distant", main="aft_integrated") ## summary(fit0 <- aft(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=2)+male+Localised, data=colon, df=4, tvc=list(Localised=3), tvc.intercept=FALSE)) summary(fit1 <- aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=2)+male+Localised, data=colon, df=4, tvc=list(Localised=3), tvc.intercept=FALSE)) summary(fit2 <- aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=2)+male+Localised, data=colon, df=4, tvc=list(Localised=3), tvc.intercept=FALSE)) par(mfrow=c(1,3)) plot(fit0, type="accfac", newdata=data.frame(age=70, male=0, Localised=0), var="Localised", main="aft") plot(fit1, type="accfac", newdata=data.frame(age=70, male=0, Localised=0), var="Localised", main="aft_mixture") plot(fit2, type="accfac", newdata=data.frame(age=70, male=0, Localised=0), var="Localised", main="aft_integrated") ## summary(fit0 <- aft(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=2)+male+Distant, data=colon, df=4, tvc=list(Distant=3, male=2), tvc.intercept=FALSE)) summary(fit1 <- aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=2)+male+Distant, data=colon, df=4, tvc=list(Distant=3, male=2), tvc.intercept=FALSE)) summary(fit2 <- aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=2)+male+Distant, data=colon, df=4, tvc=list(Distant=3,male=2), tvc.intercept=FALSE)) par(mfrow=c(1,3)) plot(fit0, type="accfac", newdata=data.frame(age=70, male=0, Distant=0), var="Distant", main="aft") plot(fit1, type="accfac", newdata=data.frame(age=70, male=1, Distant=0), var="Distant", main="aft_mixture") plot(fit2, type="accfac", newdata=data.frame(age=70, male=0, Distant=0), var="Distant", main="aft_integrated") ## Predictions for a tvc for one covariate does not change with a change in other covariates. ## I had expected that the aft() and aft_mixture formulations would lead to small differences in predictions. This is a pleasant property:). predict(fit0, type="accfac", newdata=data.frame(age=70, male=0, Distant=0, surv_mm=50), var="Distant") predict(fit0, type="accfac", newdata=data.frame(age=50, male=1, Distant=0, surv_mm=50), var="Distant") predict(fit1, type="accfac", newdata=data.frame(age=70, male=0, Distant=0, surv_mm=50), var="Distant") predict(fit1, type="accfac", newdata=data.frame(age=50, male=1, Distant=0, surv_mm=50), var="Distant") predict(fit2, type="accfac", newdata=data.frame(age=70, male=0, Distant=0, surv_mm=50), var="Distant") predict(fit2, type="accfac", newdata=data.frame(age=50, male=1, Distant=0, surv_mm=50), var="Distant") ## summary(fit0 <- aft(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=2)+male+Distant, data=colon, df=4, tvc=list(Distant=3, male=2), tvc.intercept=FALSE)) summary(fit1 <- aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=2)+male+Distant, data=colon, df=4, tvc=list(Distant=3, male=2), tvc.intercept=FALSE)) summary(fit2 <- aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=2)+male+Distant, data=colon, df=4, tvc=list(Distant=3,male=2), tvc.intercept=FALSE)) par(mfrow=c(1,3)) plot(fit0, type="sdiff", newdata=data.frame(age=70, male=0, Distant=0), var="Distant", main="aft") plot(fit1, type="sdiff", newdata=data.frame(age=70, male=1, Distant=0), var="Distant", main="aft_mixture") plot(fit2, type="sdiff", newdata=data.frame(age=70, male=0, Distant=0), var="Distant", main="aft_integrated") summary(fit1 <- aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ male, data=localised, df=4, tvc=list(male=2), tvc.intercept=FALSE)) summary(fit2 <- aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ male, data=localised, df=4, tvc=list(male=2), tvc.intercept=FALSE)) par(mfrow=c(1,2)) plot(fit1, type="accfac", newdata=data.frame(age=70, male=0), ylim=c(0,2), exposed=function(data) transform(data,male=1)) # ok plot(fit2, type="accfac", newdata=data.frame(age=70, male=0), ylim=c(0,2), exposed=function(data) transform(data,male=1)) # Does this make sense? plot(fit1, newdata=data.frame(age=70, male=0), type="sdiff", ## exposed=function(data) transform(data, male=1), var="male", xlab="Time since cancer diagnosis (months)") plot(fit2, newdata=data.frame(age=70, male=0), type="hr", ## exposed=function(data) transform(data, male=1), var="male", xlab="Time since cancer diagnosis (months)") fit0 = aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50), data=localised, tvc=list(male=3)) fit1 = aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50), data=localised, tvc=list(male=3)) fit2 = aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50), data=localised, tvc=list(male=3)) fit0 fit1 fit2 par(mfrow=c(1,3)) plot(fit0, type="accfac", newdata=data.frame(age=50, male=0), ylim=c(0,2), exposed=function(data) transform(data,male=1)) # ok plot(fit1, type="accfac", newdata=data.frame(age=50, male=0), ylim=c(0,2), exposed=function(data) transform(data,male=1)) # ok plot(fit2, type="accfac", newdata=data.frame(age=50, male=0), ylim=c(0,2), exposed=function(data) transform(data,male=1)) # ok fit0 = aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, data=localised, tvc.intercept=FALSE, tvc=list(male=2)) fit1 = aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, data=localised, tvc.intercept=FALSE, tvc=list(male=2)) fit2 = aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, data=localised, tvc.intercept=FALSE, tvc=list(male=2)) fit0 fit1 fit2 par(mfrow=c(1,3)) plot(fit0, type="accfac", newdata=data.frame(age=50, male=0), ylim=c(0,2), exposed=function(data) transform(data,male=1)) # ok plot(fit1, type="accfac", newdata=data.frame(age=50, male=0), ylim=c(0,2), exposed=function(data) transform(data,male=1)) # ok plot(fit2, type="accfac", newdata=data.frame(age=50, male=0), ylim=c(0,2), exposed=function(data) transform(data,male=1)) # ok fit1 = aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ ns(age-50,df=3) + male, data=localised, tvc=list(male=2)) fit2 = aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ ns(age-50,df=3) + male, data=localised, tvc=list(male=2)) fit1 fit2 par(mfrow=c(1,2)) plot(fit1, type="accfac", newdata=data.frame(age=50, male=0,Unknown=0,Regional=0,Distant=0), ylim=c(0,2), exposed=function(data) transform(data,male=1)) # ok plot(fit2, type="accfac", newdata=data.frame(age=50, male=0,Unknown=0,Regional=0,Distant=0), ylim=c(0,2), exposed=function(data) transform(data,male=1)) # ok fit1 = aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=3) + male + Unknown + Regional + Distant, data=colon, tvc=list(Distant=2)) fit2 = aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ ns(age,df=3) + male + Unknown + Regional + Distant, data=colon, tvc=list(Distant=2)) summary(fit1) summary(fit2) par(mfrow=c(1,2)) plot(fit1, type="accfac", newdata=data.frame(age=50, male=0,Unknown=0,Regional=0,Distant=0), ylim=c(0,2), exposed=function(data) transform(data,Distant=1)) # ok plot(fit2, type="accfac", newdata=data.frame(age=50, male=0,Unknown=0,Regional=0,Distant=0), ylim=c(0,2), exposed=function(data) transform(data,Distant=1)) # ok ## Email from Breanna M library(rstpm2) ## choose knots based on user-defined quantiles for the event times aknots=quantile(log(subset(brcancer,censrec==1)$rectime),c(0.05,0.5,0.95)) nknots=length(aknots) ## fit using those knots stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, smooth.formula=~ns(log(rectime),Boundary.knots=range(aknots),knots=aknots[-c(1,nknots)])) ## or (for shorter output) myns = function(rectime) ns(log(rectime),Boundary.knots=range(aknots),knots=aknots[-c(1,nknots)]) stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, smooth.formula=~myns(rectime)) ## Bug: gradients were different for aft and aft_mixture with tvc :( fdiff = \(f,x,eps=1e-5) sapply(1:length(x), \(i) (f("[<-"(x,i,x[i]+eps)) - f("[<-"(x,i,x[i]-eps)))/2/eps) fdiff(fit0@minuslogl, coef(fit0)) fit0@args$gradient(coef(fit0)) fdiff(fit1@minuslogl, coef(fit1)) fit1@args$gradient(coef(fit1)) ## fdiff(fit0@minuslogl, -coef(fit0)) fit0@args$gradient(-coef(fit0)) fdiff(fit1@minuslogl, -coef(fit1)) fit1@args$gradient(-coef(fit1)) summary(fit0) # ok - same fit as aft() par(mfrow=1:2) ## debugonce(rstpm2:::plot.aft.base) plot(fit0, type="surv", newdata=data.frame(age=50, male=0), main="Females") # ok plot(fit0, type="surv", newdata=data.frame(age=50, male=1), main="Males") # ok ## plot(fit0, type="surv", newdata=data.frame(age=50, male=0:1)) ## issue with plotting multiple rows fit1 = aft(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, data=localised, tvc = list(male=2)) fit1 = aft_mixture(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, data=localised, tvc = list(male=2)) fit1 = aft_integrated(Surv(surv_mm, status=="Dead: cancer") ~ I(age-50) + male, data=localised, tvc = list(male=2)) summary(fit1) par(mfrow=1:2) plot(fit1, type="surv", newdata=data.frame(age=50, male=0), main="Females") # ok plot(fit1, type="surv", newdata=data.frame(age=50, male=1), main="Males") # wrong-o! plot(fit1, type="accfac", newdata=data.frame(age=50, male=0), var="male", ylim=c(0,3)) plot(fit1, type="accfac", newdata=data.frame(age=50, male=0), exposed=function(data) transform(data, male=1), ylim=c(0,3)) ## Email from Paul S library(rstpm2) fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3,tvc=list(hormon=2)) ## Plot marginal HR ## Straight from plot function plot(fit, type = "meanhr", newdata = transform(brcancer, hormon = 0), exposed = function(data) transform(data, hormon = 1)) ## Using ggplot (need to manually extract predictions and plot) library(ggplot2) ## debugonce(rstpm2:::predict.stpm2.base) system.time(pred <- predict(fit, newdata = transform(brcancer, hormon = 0), grid = TRUE, full = TRUE, se.fit = TRUE, type = "meanhr", recent=TRUE, exposed = function(data) transform(data, hormon = 1))) system.time(pred2 <- predict(fit, newdata = transform(brcancer, hormon = 0), grid = TRUE, full = TRUE, se.fit = TRUE, type = "meanhr", exposed = function(data) transform(data, hormon = 1))) ## Plot ggplot(pred, aes(x = rectime, y = Estimate)) + geom_line() + geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.3) + ylim(0,2) + xlab('Time (days)') + ylab('HR') + theme_bw(base_size = 15) ## Email for episig ## install.packages("extRemes") library(extRemes) library(survival) set.seed(12345) n<-500000 x1<-rnorm(n) x2<-rnorm(n) error<-revd(n, loc = 0, scale = 1) b0<- 1 b1<-0.5 b2<--1.2 c<-1 time<-exp(b0+b1*x1+b2*x2-c*error) status<-rep(1,n) survreg(Surv(time, status==1) ~ x1+x2,dist="exponential") library(rstpm2) object <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3,tvc=list(hormon=2)) newdata = data.frame(hormon=0) simulate(object, newdata=newdata) # currently returns just the times -- this will later return a data-frame simulate(object, newdata=newdata, start=1500) # left-truncation plot(object, newdata=newdata) grep_call = function(name,x) { local_function = function(x) if(length(x)==1) x==name else any(sapply(x, local_function)) which(sapply(x, local_function)) } gsm_design = function(object, newdata, inflate=100) { stopifnot(inherits(object, "stpm2"), is.list(newdata), is.numeric(inflate), length(inflate) == 1) ## Assumed patterns: ## timeEffect := (ns|nsx)(log(timeVar),knots,Boundary.knots,centre=FALSE,derivs=(c(2,2)|c(2,1))) ## effect := timeEffect | otherEffect:timeEffect | timeEffect:otherEffect terms = attr(object@model.frame, "terms") factors = attr(terms, "factors")[-1,,drop=FALSE] variables = attr(terms, "variables")[-(1:2)] predvars = attr(terms, "predvars")[-(1:2)] indices = grep_call(object@timeVar, variables) if(length(indices)==0) stop("No timeVar in the formula -- unexpected error") index_time_variables = grep_call(object@timeVar, variables) # time variables index_time_effects = grep(object@timeVar,colnames(factors)) # components in the rhs with time variables ## I want to know how wide is each term nms = names(coef(object)) term.labels = attr(terms, "term.labels") coef_index <- sapply(strsplit(nms, ":"), function(c) { if (length(c)>2) stop("current implementation only allows for main effects and two-way interactions") pmatchp = function(x, table) !is.na(pmatch(x, table)) if(length(c)==1) { for (i in seq_along(term.labels)) { t = term.labels[i] ## browser() if (pmatchp(t,c)) return(i) } if (c == "(Intercept)") return(0) return(-1) } ## => length(c) == 2 term.labels.split = strsplit(term.labels, ":") for (i in seq_along(term.labels)) { t = term.labels.split[[i]] if (all(pmatchp(t,c))) return(i) } return(-1) }) ## how to map from term.labels to factors to predvars? ## Can I replace each term with its predvars? parse_ns = function(mycall,x,index_time_effect) { df = length(c(mycall$knots, mycall$Boundary.knots)) - 1 stopifnot(mycall[[1]] == quote(nsx) || mycall[[1]] == quote(ns), length(mycall[[2]])>1, mycall[[2]][[1]] == quote(log), # assumes log mycall[[2]][[2]] == object@timeVar, # what about a scalar product or divisor? is.null(mycall$deriv) || (mycall$derivs[1] == 2 && mycall$derivs[2] %in% 1:2), mycall$centre == FALSE) # doesn't allow for centering cure = !is.null(mycall$derives) && all(mycall$derivs == c(2,1)) time = object@args$time q_const = attr(nsx(log(mean(time)), knots=mycall$knots, Boundary.knots=mycall$Boundary.knots, intercept=mycall$intercept), "q.const") ## browser() list(call = mycall, knots=mycall$knots, Boundary_knots=mycall$Boundary.knots, intercept=as.integer(mycall$intercept), gamma=coef(object)[which(coef_index %in% index_time_effect)], q_const = q_const, cure = as.integer(cure), x=x) } time = object@args$time newdata[[object@timeVar]] = mean(time) # NB: time not used Xp = predict(object, newdata=newdata, type="lpmatrix") index2 = which(coef_index %in% index_time_effects) etap = drop(Xp[, index2, drop=FALSE] %*% coef(object)[index2]) list(type="gsm", link_name=object@args$link, tmin = min(time), # not currently used? tmax = max(time), inflate=as.double(inflate), etap=etap, log_time=TRUE, terms = lapply(index_time_effects, function(i) { j = which(factors[,i] != 0) if (length(j)==1) return(parse_ns(predvars[[j]], rep(1, nrow(newdata)), i)) else { if(length(j)>3) stop("Current implementation only allows for two-way interaction terms") if (j[1] %in% index_time_variables) return(parse_ns(predvars[[j[1]]], eval(predvars[[j[2]]], newdata), i)) else return(parse_ns(predvars[[j[2]]], eval(predvars[[j[1]]], newdata), i)) } }) ) } library(rstpm2) library(microsimulation) object <- gsm(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3,tvc=list(hormon=2)) newdata = data.frame(hormon=0:1) inflate = 100 (design <- gsm_design(object,newdata)) replicate(10,.Call("test_read_gsm", design, PACKAGE="microsimulation")) set.seed(1002) simulate(fit1, nsim=10, newdata=nd) simulate(fit1, newdata=data.frame(hormon=0:1)) set.seed(1002) replicate(10,.Call("test_read_gsm", design, PACKAGE="rstpm2")) set.seed(1002) range(replicate(10,.Call("test_read_gsm", gsm_design(fit1,nd), PACKAGE="rstpm2")) - simulate(fit1, nsim=10, seed=1002, newdata=nd)) library(microsimulation) set.seed(1002) replicate(10,.Call("test_read_gsm", gsm_design(fit1,nd), PACKAGE="microsimulation")) simulate.stpm2 <- function(object, nsim=1, seed=NULL, newdata=NULL, lower=1e-6, upper=1e5, ...) { stopifnot(!is.null(newdata)) if (!is.null(seed)) set.seed(seed) ## assumes nsim replicates per row in newdata n = nsim * nrow(newdata) newdata = newdata[rep(1:nrow(newdata), each=nsim), , drop=FALSE] e <- rexp(n) objective <- function(time) { newdata[[object@timeVar]] <- time predict(object, type="cumhaz", newdata=newdata) - e } vuniroot(objective, lower=rep(lower,length=n), upper=rep(upper,length=n))$root } setMethod("simulate", "stpm2", simulate.stpm2) setMethod("simulate", "pstpm2", simulate.stpm2) ## Can we estimate the hessian externally? library(rstpm2) library(numDeriv) fit = stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=4) summary(fit) fit@vcov = solve(numDeriv::hessian(fit@minuslogl, coef(fit))) summary(fit) ## Can we also use the gradient? (solve(numDeriv::jacobian(fit@args$gradnegll, coef(fit))) - solve(numDeriv::hessian(fit@minuslogl, coef(fit)))) |> range() (solve(numDeriv::jacobian(fit@args$gradnegll, coef(fit))) - vcov(fit)) |> range() ## Can we improve on accuracy using nsxD? This would also include predictions using C++ code. ## library(rstpm2) m <- rstpm2::stpm2(Surv(time, status) ~ sex, data = lung) predict(m, newdata = data.frame(sex = c(1,1), time = c(100,200)), type = "rmst", se.fit=TRUE) # ok plot(m, newdata = data.frame(sex = 1), type="rmst") plot(m, newdata = data.frame(sex = 1), var="sex", type="rmstdiff") ## Predictions for differences ## Can we return the predictions, gradients and covariance matrix and use those for differences? ## preddiff = pred1 - pred0 ## graddiff = grad1 - grad0 ## vardiff = graddiff^T Sigma graddiff ## Note that we can silently return attributes d = structure(data.frame(a=1), attr1=1:100, class=c("Test","data.frame")) print(d) # print.Test() does not exist, so this uses print.data.frame() ## What about gradients on transformed scales, ## with a transformation g and an inverse transformation G? ## var(eta1) = grad_eta1^T Sigma grad_eta1 ## and pred1 = G(eta1) ## => var(pred1) = var(G(eta1)) = grad(G(eta1))^T Sigma grad(G(eta1)) ## where grad1 = grad(G(eta1)) = G'(eta1) grad_eta1?? (chain rule) ## preddiff = pred1 - pred0 ## graddiff = grad1 - grad0 ## vardiff = graddiff^T Sigma graddiff ## add cure for the AFT models library(rstpm2) fit0 = aft(Surv(rectime,censrec==1)~hormon,data=brcancer,df=4) fit = aft(Surv(rectime,censrec==1)~hormon,data=brcancer,df=4,cure=TRUE) par(mfrow=1:2) plot(fit0,newdata=data.frame(hormon=0),main="Without cure") plot(fit,newdata=data.frame(hormon=0),main="With cure") cov2cor(vcov(fit0)) ## cure models paper library(cuRe) colonDC <- subset(cuRe::colonDC, stage %in% c("Regional","Distant")) colonDC <- transform(colonDC, stage=factor(stage), stageDistant=as.numeric(stage == "Distant"), bhaz = general.haz(time = "FU", rmap = list(age="agedays", sex = "sex", year = "dx"), data = colonDC, ratetable = survexp.dk)) fit.lat <- stpm2(Surv(FUyear, status) ~ stageDistant + bhazard(bhaz), data = colonDC, df = 4, cure = TRUE) fit.lat.timevar <- stpm2(Surv(FUyear, status) ~ stageDistant + bhazard(bhaz), data = colonDC, df = 4, cure = TRUE, tvc.formula = ~nsx(log(FUyear), df=4, cure=TRUE):stageDistant) fit.lat.timevar2 <- stpm2(Surv(FUyear, status) ~ stageDistant + bhazard(bhaz), data = colonDC, df = 4, cure = TRUE, tvc = list(stageDistant = 4)) predict(fit.lat, newdata = data.frame(FUyear = 0, stageDistant = 0), type = "probcure", se.fit = TRUE) predict(fit.lat, newdata = data.frame(FUyear = 2, stageDistant = 0), type = "uncured", se.fit = TRUE) predict(fit.lat.timevar, newdata = data.frame(FUyear = 2, stageDistant = 0), type = "probcure", se.fit = TRUE) plot(fit.lat, newdata = data.frame(stageDistant = 0), type = "probcure") plot(fit.lat, newdata = data.frame(stageDistant = 0), type = "surv") plot(fit.lat, newdata = data.frame(stageDistant = 0), type = "uncured") ## solve A x = b set.seed(12345) A = matrix(rnorm(18),3,byrow=TRUE) b = c(0,0,1) x = qr.solve(A,b) # under-determined system drop(A %*% x - b) # this is a solution -- noice! qmat = qr.Q(qr(t(A)), complete=TRUE)[, -(1:3), drop=FALSE] A %*% qmat %*% rnorm(3) # should be close to zero... A %*% qmat library(rstpm2) library(splines) print(ns1 <- nsx(1:10,df=4,intercept=TRUE)) ## check how to calculate q.const Bstar <- splineDesign(sort(c(rep(1,4),attr(ns1,"knots"),rep(10,4))), x=c(1,10),derivs=c(2,2)) qr.Q(qr(t(Bstar)), complete=TRUE)[,-(1:2), drop=FALSE] - attr(ns1, "q.const") # OK ## Now, solve: Bstar x = c(0,0,1) Bstar <- splineDesign(sort(c(rep(1,4),attr(ns1,"knots"),rep(10,4))), x=c(1,10,10),derivs=c(2,2,1)) b = c(0,0,1) x = qr.solve(Bstar,b) # magic sauce drop(Bstar %*% x) - b # OK qmat = qr.Q(qr(t(Bstar)), complete=TRUE)[,-(1:3), drop=FALSE] theta = rnorm(3) drop(Bstar %*% (drop(qmat %*% theta) + x)) - b # OK Bstar %*% qmat %*% theta + Bstar %*% x - b # OK ## transformation: theta -> B %*% (drop(qmat %*% theta) + x) = B %*% qmat %*% theta + B %*% x ## nsx(..., derivs, target=rep(0,length(derivs))) for target=b ## returns an attribute for offset=x ## For fixed design matrix, we get N = B %*% qmat and C = B %*% x, so that theta -> N %*% theta + C ## How will this affect the linear predictor? ## Rather than N(t)^T theta, we will have N(t)^T theta + C ## For the derivative, we get N' = B' %*% qmat and C' = B' %*% x, ## so that we have N'(t)^T theta + C' xs = seq(1,10,l=301) B <- splineDesign(sort(c(rep(1,4),attr(ns1,"knots"),rep(10,4))), x=xs) N = B %*% qmat C = B %*% x theta = rnorm(3) plot(xs, N %*% theta + C, type="l") ## Plot of derivatives... B <- splineDesign(sort(c(rep(1,4),attr(ns1,"knots"),rep(10,4))), x=xs, derivs=1) N = B %*% qmat C = B %*% x theta = rnorm(3) plot(xs, N %*% theta + C, type="l") ## How to predict outside of the boundaries? ## test for smoothpwc library(rstpm2) library(dplyr) relative_survival <- function(model1, smoothpwc, ...) { transmat = matrix(c(NA,1,2, NA,NA,NA, NA,NA,NA),3,3,byrow=TRUE) rownames(transmat) <- colnames(transmat) <- c("Initial","Cause-specific death","Other causes of death") rstpm2::markov_msm(list(model1,smoothpwc), ..., trans = transmat) } ## use popmort colon2 = inner_join(survival::colon |> filter(etype==2), mutate(popmort,sex=2-sex,rate) |> filter(year==2000), by=c("age","sex")) |> mutate(t=time/365.25) excess = gsm(Surv(t,status)~factor(rx)+bhazard(rate), data=colon2, df=3) smoothpwc1 = with(filter(popmort,sex==1 & year==2000),smoothpwc(age+0.5-70,rate)) # example is for men aged 70 years rs = relative_survival(excess, smoothpwc1, newdata=data.frame(rx="Obs"), t = seq(0,7, length=301)) plot(rs,ggplot=TRUE) ## Spline interpolation library(schumaker) d <- data.frame(x=(0:9)+0.5,y=((1:10)-5.5)^2) xs=seq(0,20,length=301) plot(xs,Schumaker(d$x,d$y,Extrapolation="Constant")$Spline(xs),type="l") points(y~x,data=d) library(splines) plot(xs,splinefun(d$x,d$y,method="natural")(xs),type="l") points(y~x,data=d) d2 <- rbind(d,transform(tail(d,1)[rep(1,2),],x=c(9.5+1e-7,9.5+2e-7))) xs=seq(9.5-1e-3,9.5+1e-3,length=301) plot(xs,splinefun(d2$x,d2$y,method="natural")(xs),type="l") points(y~x,data=d2) abline(h=20.25,lty=2) splinefun(d2$x,d2$y,method="natural")(15)-20.25 splinefunx <- function(x, y, method="natural", constant.left=FALSE, constant.right=FALSE, ...) { xstar <- x ystar <- y if (constant.right) { xstar <- c(xstar,tail(x,1)+(1:10)*1e-7) ystar <- c(ystar,rep(tail(y,1),10)) } if (constant.left) { xstar <- c(xstar,x[1]-(1:10)*1e-7) ystar <- c(ystar,rep(y[1],10)) } splinefun(xstar, ystar, ..., method=method) } splinefunx(d$x,d$y,constant.right=TRUE)(15)-20.25 splinefunx(d$x,d$y,constant.right=TRUE)(15000)-20.25 splinefunx(d$x,d$y)(9.5)-20.25 ## library(numDeriv) xs=seq(0,20,length=301) plot(xs, numDeriv::grad(splinefunx(d$x,d$y,constant.right=TRUE), xs), type="l") rug(d$x) xs=seq(9.5-1e-3,9.5+1e-3,length=301) plot(xs, numDeriv::grad(splinefunx(d$x,d$y,constant.right=TRUE), xs), type="l") ## Rather than using mid-points, we could use intervals and then assume a monotone smoother... numdiff <- function(f,x,eps=1e-5) (f(x+eps)-f(x-eps))/2/eps d <- transform(data.frame(x0=0:9,x1=(0:9)+1,delta=1), xmid=(x0+x1)/2, yint=((x1-5)^3-(x0-5)^3)/3) set.seed(12345) d <- transform(d, yint_ = yint*rgamma(NROW(d),10,10)) xs=seq(0,20,length=301) ## cumd <- transform(d, H=cumsum(c(0,diff(x0)*head(y0,-1)))) cumd <- with(d, data.frame(x=c(x0,tail(x1,1)), H=cumsum(c(0,diff(c(x0,tail(x1,1)))*yint)))) sf.natural <- splinefun(cumd$x,cumd$H, method="natural") sf.mono <- splinefun(cumd$x,cumd$H, method="hyman") plot(xs, numdiff(sf.natural,xs), type="l", ylim=c(0,25)) # constant from rhs of last interval lines(xs, splinefunx(d$xmid,d$yint,constant.right=TRUE)(xs), col="blue") # constant from mid-point curve((x-5)^2, col="green", add=TRUE) lines(xs, numdiff(sf.mono,xs), type="l", col="orange") # extrapolates nicely if quadratic ## now with variation in the outcome cumd <- with(d, data.frame(x=c(x0,tail(x1,1)+1), H=cumsum(c(0,diff(c(x0,tail(x1,1)+1))*yint_)))) sf <- splinefun(cumd$x,cumd$H, method="hyman") plot(xs, numdiff(sf,xs), type="l", ylim=c(0,35)) lines(xs, splinefunx(d$xmid,d$yint_,constant.right=TRUE)(xs), col="blue") curve((x-5)^2, col="green", add=TRUE) ## gradient for penalty in the AFT model library(Rcpp) library(RcppArmadillo) fdiff = \(f,x,eps=1e-5) sapply(1:length(x), \(i) (f("[<-"(x,i,x[i]+eps)) - f("[<-"(x,i,x[i]-eps)))/2/eps) src = "#include using namespace arma; // [[Rcpp::depends(RcppArmadillo)]] // [[Rcpp::export]] mat differenceMatrix(int n) { return join_rows(zeros(n-1,1),eye(n-1,n-1)) - join_rows(eye(n-1,n-1),zeros(n-1,1)); } // [[Rcpp::export]] vec quadraticPenalty(mat Q, vec beta) { vec delta = differenceMatrix(Q.n_rows) * Q * beta; return delta % delta % (delta<0); } // [[Rcpp::export]] vec gradientPenalty(mat Q, vec beta) { // Q: (nbeta+2) x nbeta size_t n = Q.n_rows; mat D = join_rows(zeros(n-1,1),eye(n-1,n-1)) - join_rows(eye(n-1,n-1),zeros(n-1,1)); // (nbeta+1) x (nbeta+2) vec delta = D * Q * beta; // nbeta+1 mat M = Q.t() * D.row(0).t() * D.row(0) * Q * (delta(0)<0.0); // nbeta x nbeta for(size_t j=1; jbetaStar(i+1)) { D(i,i) = -1.0; D(i,i+1) = 1.0; } mat M = Q.t() * D.t() * D * Q; // nbeta x nbeta return 2*M*beta; } " sourceCpp(code=src) ## library(rstpm2) Qmat = attr(nsx(1:10,df=3,intercept = TRUE),"q.const") # 5x3 differenceMatrix(nrow(Qmat)) # 4x5 quadraticPenalty(Qmat, c(1,-1,1)) # 4x1 as.vector(gradientPenalty(Qmat, c(1,-1,1))) as.vector(gradientPenalty2(Qmat, c(1,-1,1))) fdiff(\(x) sum(quadraticPenalty(Qmat, x)), c(1,-1,1), 1e-5) as.vector(gradientPenalty(Qmat, c(1,-1,1))) - fdiff(\(x) sum(quadraticPenalty(Qmat, x)), c(1,-1,1), 1e-3) quadraticPenalty(Qmat, c(1,-1,2)) # 4x1 gradientPenalty(Qmat, c(1,-1,2)) ## Error report by Joshua (now fixed) ## Load package library(rstpm2) ## Define start time brcancer2 <- transform(brcancer, startTime = ifelse(hormon == 0, rectime * 0.5, 0)) ## Stpm2 call without explicit specification of the type argument stpm2(Surv(startTime, rectime, censrec == 1) ~ hormon, data = brcancer2, df = 3) ## Stpm2 call with explicit specification of the type argument ## Do not run, this will cause your R-session to terminate ## debug(gsm) stpm2(Surv(startTime, rectime, censrec == 1, type = "counting") ~ hormon, data = brcancer2, df = 3) ## Are 2D thin-plate spline approximations in mgcv dense matrices? library(mgcv) df=expand.grid(u=seq(0,1,length=100),v=seq(0,1,length=100)) set.seed(12345) df=transform(df,y=rnorm(nrow(df),sin(u*2*pi)*cos(v*2*pi),0.1)) gam1=gam(y~s(u,v,bs="ts"),data=df) ## Email from Grace library(rstpm2) fit = gsm(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3) fit@lm attr(fit@lm$terms, "predvars") nd = data.frame(rectime=1000, hormon=0) rstpm2:::lpmatrix.lm(fit@lm, nd) %*% coef(fit) # or, more simply predict(fit@lm, nd) ## eps=1e-4 (predict(fit@lm, data.frame(rectime=1000+eps, hormon=0)) - predict(fit@lm, data.frame(rectime=1000-eps, hormon=0)))/2/eps ## or (predict(fit@lm, data.frame(rectime=1000*exp(eps), hormon=0)) - predict(fit@lm, data.frame(rectime=1000*exp(-eps), hormon=0)))/2/eps/1000 ## exp(predict(fit@lm, nd))* (predict(fit@lm, data.frame(rectime=1000*exp(eps), hormon=0)) - predict(fit@lm, data.frame(rectime=1000*exp(-eps), hormon=0)))/2/eps/1000 predict(fit, newdata=nd, type="haz") plot(fit,type="haz", newdata=data.frame(hormon=0)) ## biostat3: coxphHaz and coxphHazList as.data.frame.coxphHaz = function(x, row.names=NULL, optional = FALSE, ...) { newdata = attr(x,"newdata") ## To avoid "row names were found from a short variable and have been discarded": rownames(newdata) = NULL data.frame(newdata, x=x$x, y=x$y) } as.data.frame.coxphHazList = function(x, row.names=NULL, optional = FALSE, ...) { do.call(rbind, lapply(x, as.data.frame)) } fit <- coxph(Surv(surv_mm/12,status=="Dead: cancer")~agegrp, data=colon) newdata <- data.frame(agegrp=levels(colon$agegrp)) haz <- suppressWarnings(coxphHaz(fit,newdata)) library(ggplot2) head(as.data.frame(haz)) ggplot(as.data.frame(haz), aes(x=x,y=y,ymin=y.lower,ymax=y.upper,col=agegrp,fill=agegrp)) + geom_ribbon(alpha=0.5) + geom_line(col="black") # + facet_grid(~agegrp) ## Constrained MLE ## relative survival and LEL library(rstpm2) library(biostat3) head(melanoma) head(popmort) merged = merge(transform(melanoma, ye = floor(yexit), se=ifelse(sex=="Male",1,2), event=status != "Alive"), popmort, by.x=c("age","ye","se"), by.y=c("_age","_year","sex"), all.x=TRUE) merged = subset(merged, sex="Female") ## sum(is.na(merged$rate)) model1 = stpm2(Surv(surv_mm,event)~bhazard(rate),data=merged,df=3) # only intercept - was buggy ## model2 = stpm2(Surv(surv_mm,event)~age+bhazard(rate)+cluster(age),data=merged,df=3) ## model1 = stpm2(Surv(surv_mm,event)~1,data=merged,df=3,bhazard=merged$rate) ## mean(subset(merged,event)$yexit) ## We need event counts and person-time in the popmort data-frame library(dplyr) temp = cbind(filter(popmort,sex==1) %>% mutate(males=rate,rate=NULL,sex=NULL), data.frame(females=filter(popmort,sex==2)$rate)) plot(males~females,temp,log="xy") abline(0,1,col=2) ## d = data.frame(y=c(1000,2000),sex=0:1,pt=1e5) # some data fit = glm(y~sex+offset(log(pt)),data=d, family=poisson) # Poisson regression pred = predict(fit,newdata=transform(d,pt=1),type="link",se.fit=TRUE) with(pred, exp(data.frame(Estimate=fit,Lower=fit-1.96*se.fit,Upper=fit+1-96*se.fit))) library(rstpm2) exp(confint(predictnl(fit,predict,newdata=transform(d,pt=1),type="response"))) set.seed(12345) n = 1000 x = factor(rbinom(n,1,0.5)) y = rnorm(n, x==1) fit = lm(y~x) predict(fit, newdata=data.frame(x=0)) # fails predict(fit, newdata=data.frame(x=1)) # fails predict(fit, newdata=data.frame(x=factor(0:1))) # okay predict(fit, newdata=data.frame(x=factor(0,0:1))) # okay ## library(expm) ## K = 2 Z = c(1,0,0) Y = c(1000,2000); N = 1e4; Sigma=diag(Y/N^2) lambda=Y/N ## alpha=cbind(c(-sum(lambda),lambda),matrix(0,K+1,K)) expm(alpha*10) # ok ## Z = c(1,rep(0,(1+2)*3-1)) alpha=cbind(c(-sum(lambda),lambda,-1,-1,1,0,0,1),matrix(0,length(Z),length(Z)-1)) expm(alpha) m=matrix(expm(alpha)[4:9,1],2,3) t(m) %*% Sigma %*% m # includes covariance terms expm(alpha*10) m=matrix(expm(alpha*10)[4:9,1],2,3) sqrt(diag(t(m) %*% Sigma %*% m)) # includes covariance terms ## This approach works! ## We can add further differential equations for the covariance matrix for P (for a time-dependent covariance matrix for the parameters) library(deSolve) func <- function(t, y, parms, ...) { ## browser() index = findInterval(t,parms$t) lambda = parms$lambda[index,] # length=K K = length(lambda) q = rbind(c(-sum(lambda),lambda),matrix(0,K,K+1)) # length=K+1 Qm = lapply(1:K,function(k) { m = matrix(0,K+1,K+1) m[1,1] = -1 m[1,k+1] = 1 m }) Sigma = parms$Sigma[[index]] # dim=K^2 P = y[1:(K+1)] # K+1 rowvec Pm = matrix(y[(2+K):(1+K+K*(K+1))],K+1,K) # (K+1)*K dPdt = P %*% q dPmdt = sapply(1:K, function(k) Pm[,k] %*% q + P %*% Qm[[k]]) # (K+1)*K dphidt = dPmdt %*% (Sigma %*% t(Pm)) + Pm %*% (Sigma %*% t(dPmdt)) # (K+1)^2 list(c(dPdt, dPmdt, dphidt)) # length=1+K+(K+1)*K+(K+1)^2 } Y = c(1000,2000); N = 1e4; Sigma=diag(Y/N^2); K=2 lambda = Y/N y = c(1,rep(0,K+K*(K+1)+(K+1)^2)) parms = list(t=c(0,Inf), lambda=rbind(lambda), Sigma=list(Sigma)) ode1 = ode(y,seq(0,10),func,parms) ode1[11,2:4] sqrt(diag(matrix(ode1[11,11:19],3,3))) ode1 ## Using markov_msm (with an *identity* link for comparability) fit1=glm(rate~1, data=data.frame(rate=0.1,N=1e4), family=poisson(link="identity"), weight=N) fit2=glm(rate~1, data=data.frame(rate=0.2,N=1e4), family=poisson(link="identity"), weight=N) test=markov_msm(list(fit1,fit2), trans=matrix(c(NA,1,2,NA,NA,NA,NA,NA,NA),3,3,TRUE), t=0:10, newdata=data.frame(N=1), tmvar="t") print(test,se=TRUE) test$Pu ## fit1=glm(rate~factor(findInterval(t,0:2))-1, data=data.frame(t=0:2,rate=c(0.1,0.2,0.3),N=1e4), family=poisson(link="identity"), weight=N) fit1=glm(Y~offset(log(N)), data=data.frame(Y=1000,N=1e4), family=poisson) fit2=glm(Y~offset(log(N)), data=data.frame(Y=2000,N=1e4), family=poisson) test=markov_msm(list(fit1,fit2), trans=matrix(c(NA,1,2,NA,NA,NA,NA,NA,NA),3,3,TRUE), t=0:10, newdata=data.frame(N=1), tmvar="t") print(test,se=TRUE) ## Inquiry library(survival) library(rstpm2) m <- rstpm2::stpm2(Surv(time, status) ~ sex, data = lung) plot(m, newdata=data.frame(sex=2)) predict(m, newdata = data.frame(sex = 2, time = 100), type = "rmst", se.fit=TRUE) ## plot(m, newdata=data.frame(sex=2), type="rmst") # fails ## predict(m, newdata = data.frame(sex = 1:2, time = 100), type = "rmst", se.fit=TRUE) # fails ## Inquiry ## Cross-validation with bias correction (Davison and Hinkley, 1997, p. 295) crossValidation = function(object,data,prediction,K = 10,correction=TRUE) { N = nrow(data) ndex = 1:N part = as.factor(sample(1:K, N, replace = TRUE)) folds = split(ndex, part) p = sapply(folds, length)/N sum(sapply(1:K, function(k) { training = data[unlist(folds[-k]), ] validation = data[folds[[k]], ] objectStar = update(object,data=training) prediction(objectStar,validation) - p[k]*prediction(objectStar,data)*correction })) + prediction(object,data)*correction } library(rstpm2) setMethod("update", "stpm2", function(object, ...) { # I have added this to rstpm2 on GitHub object@call = object@Call update.default(object, ...) }) fit = gsm(Surv(rectime,censrec==1)~hormon+x1+x2+x3,data=brcancer,df=3) set.seed(420) ## Currently, there is no simpler way to predict out-of-sample -2*log-likelihood for an stpm2 model predictDeviance = function(eventVar) function(object,newdata) { events = newdata[[eventVar]]>0 -2*(sum(predict(object,newdata=newdata[events,,drop=FALSE], type="loghazard"))- sum(predict(object,newdata=newdata,type="cumhaz"))) } crossValidation(fit, brcancer,predictDeviance("censrec")) set.seed(420) crossValidation(fit, brcancer,predictDeviance("censrec"),correction=FALSE) AIC(fit) BIC(fit) library(rstpm2) library(survival) library(timereg) library(ggplot2) library(lattice) ## Two states: Initial -> Final ## Note: this shows how to use markov_msm to estimate survival and risk probabilities based on ## smooth hazard models. two_states <- function(model, ...) { transmat = matrix(c(NA,1,NA,NA),2,2,byrow=TRUE) rownames(transmat) <- colnames(transmat) <- c("Initial","Final") markov_sde(list(model), ..., trans = transmat) } ## Note: the first argument is the hazard model. The other arguments are arguments to the ## markov_msm function, except for the transition matrix, which is defined by the new function. colon2 <- transform(survival::colon, Obs=(rx=="Obs")+0, Lev=(rx=="Lev")+0,Lev_5FU=(rx=="Lev+5FU")+0) death = aalen(Surv(time,status)~Lev+Lev_5FU, data=subset(colon2,etype==2)) cr = two_states(death, newdata=data.frame(Lev=0,Lev_5FU=0)) plot(cr,ggplot=TRUE,stacked=FALSE,which="L") # ok plot(cr,ggplot=TRUE,which="L") # ok - is this sensible? plot(cr) # ok -- no legend plot(cr,ggplot=TRUE) # ok plot(cr,lattice=TRUE) # ok -- no legend plot(cr,ggplot=TRUE,stacked=FALSE) # ok ## competing_risks <- function(models, ...) { transmat = matrix(c(NA,1,2, NA,NA,NA, NA,NA,NA),3,3,byrow=TRUE) rownames(transmat) <- colnames(transmat) <- c("Initial","Event 1","Event 2") markov_sde(models, ..., trans = transmat) } ## Note: the first argument is the hazard model. The other arguments are arguments to the ## markov_msm function, except for the transition matrix, which is defined by the new function. colon2 <- transform(survival::colon, Obs=(rx=="Obs")+0, Lev=(rx=="Lev")+0,Lev_5FU=(rx=="Lev+5FU")+0) progression = aalen(Surv(time,status)~Lev+Lev_5FU, data=subset(colon2,etype==1)) death = aalen(Surv(time,status)~Lev+Lev_5FU, data=subset(colon2,etype==2)) cr = competing_risks(list(progression,death), newdata=data.frame(Lev=0,Lev_5FU=0)) plot(cr) ## illness_death <- function(models, ...) { transmat = matrix(c(NA,1,2, NA,NA,3, NA,NA,NA),3,3,byrow=TRUE) rownames(transmat) <- colnames(transmat) <- c("Initial","Illness","Death") markov_sde(models, ..., trans = transmat) } ## Note: the first argument is the hazard model. The other arguments are arguments to the ## markov_msm function, except for the transition matrix, which is defined by the new function. colon2 <- transform(survival::colon, Obs=(rx=="Obs"), Lev=(rx=="Lev"),Lev_5FU=(rx=="Lev+5FU")) d1 = subset(colon2,etype==1) d2 = subset(colon2,etype==2) index = d1$time < d2$time & d1$status==1 # index for initial -> recurrence d12 = d1 # initial -> recurrence d23 = transform(d2[index,], enter=d1$time[index]) # recurrence -> death d13 = transform(d2, # initial -> death time=pmin(d1$time,d2$time), status=ifelse(d1$time==d2$time,d2$status,0)) progression = aalen(Surv(time,status)~Lev+Lev_5FU, data=d12) death1 = aalen(Surv(time,status)~Lev+Lev_5FU, data=d13) death2 = aalen(Surv(enter,time,status)~Lev+Lev_5FU, data=d23) cr = illness_death(list(progression,death1,death2), newdata=data.frame(Lev=FALSE,Lev_5FU=FALSE)) # fails plot(cr) ## illness_death = function(models, ...) { transmat = matrix(c(NA,1,2,NA, NA,NA,NA,3, NA,NA,NA,NA, NA,NA,NA,NA),4,4,byrow=TRUE) rownames(transmat) <- colnames(transmat) <- c("Initial","Illness","DirectDeath","DeathAfterRecurrence") markov_sde(models, ..., trans = transmat) } ## Note: the first argument is the hazard model. The other arguments are arguments to the ## markov_msm function, except for the transition matrix, which is defined by the new function. colon2 = transform(survival::colon, Obs=(rx=="Obs")+0, Lev=(rx=="Lev")+0, Lev_5FU=(rx=="Lev+5FU")+0) d1 = subset(colon2,etype==1) d2 = subset(colon2,etype==2) index = d1$time < d2$time & d1$status==1 # index for initial -> recurrence d12 = d1 # initial -> recurrence d23 = transform(d2[index,], enter=d1$time[index]) # recurrence -> death d13 = transform(d2, # initial -> death time=pmin(d1$time,d2$time), status=ifelse(d1$time==d2$time,d2$status,0)) progression = aalen(Surv(time,status)~Lev+Lev_5FU, data=d12) death1 = aalen(Surv(time,status)~Lev+Lev_5FU, data=d13) death2 = aalen(Surv(enter,time,status)~Lev+Lev_5FU, data=d23) cr = illness_death(list(progression,death1,death2), newdata=data.frame(Lev=0,Lev_5FU=0:1), weights=c(-1,1), los=FALSE) plot(cr,ggplot=TRUE) + facet_grid(~Lev_5FU) # ok plot(cr,ggplot=TRUE,stacked=FALSE) + facet_grid(state~Lev_5FU) # ok plot(cr,ggplot=TRUE,stacked=FALSE,which="L") + facet_grid(state~Lev_5FU) # ok plot(standardise(cr),stacked=FALSE,ggplot=TRUE) # CIs are *very* wide -- error? ## Non-parametric baseline: SDE approach due to Ryalen and colleagues markov_sde <- function(models, trans, newdata, init=NULL, nLebesgue=1e4+1, los=FALSE, nOut=300, weights=1) { transfun <- function(tmat) { indices <- sort(as.vector(tmat)); indices <- setdiff(indices,NA) nStates <- nrow(tmat) out <- do.call(rbind, lapply(indices, function(i) { index2 <- which(tmat == i) from <- (index2-1) %% nStates +1 to <- (index2-1) %/% nStates + 1 data.frame(from=from,to=to) })) matrix(as.integer(as.matrix(out)),nrow(out))-1L } ## TODO check parameters nStates <- nrow(trans) nTrans <- sum(!is.na(trans)) if (is.null(init)) { init <- c(1,rep(0,nStates-1)) } stopifnot(length(init)==nStates) ## init <- rep(init,nrow(newdata)) n <- sum(sapply(models,attr,"orig.max.clust")) cumHazList <- lapply(models, function(object) -t(log(predict(object, newdata=newdata, se=FALSE)$S0))) timesList <- lapply(models, function(model) model$cum[,1]) eventTimes <- times <- sort(unique(unlist(timesList))) hazList <- lapply(1:nrow(newdata), function(i) { hazMatrix <- matrix(0,nrow=nTrans,ncol=length(times)) for (j in 1:nTrans) { hazMatrix[j,match(timesList[[j]],times)] <- diff(c(0,cumHazList[[j]][,i])) } hazMatrix }) hazMatrix <- do.call(rbind,hazList) if (length(weights)==1 && weights != 0) weights <- rep(weights,nrow(newdata))/(weights*nrow(newdata)) vcov <- matrix(1,1,1) if (!los) { out <- .Call("plugin_P_by", n, nrow(newdata), hazMatrix, init, transfun(trans), weights, vcov, PACKAGE="rstpm2") out$P <- out$X out$P.se <- sqrt(out$variance) } else { out <- .Call("plugin_P_L_by", n, nrow(newdata), hazMatrix, init, transfun(trans), times, weights, nOut, vcov, nLebesgue, PACKAGE="rstpm2") PIndex <- 1:(nrow(out$X)/2) tr <- function(x) array(as.vector(x), dim=c(nStates,nrow(newdata),ncol(x))) out$P <- tr(out$X[PIndex,]) out$L <- tr(out$X[-PIndex,]) out$P.se <- sqrt(tr(out$variance[PIndex,])) out$L.se <- sqrt(tr(out$variance[-PIndex,])) } out$n <- n out$times <- if (los) out$time else times out$newdata <- newdata out$trans <- trans out$los <- los out$init <- init out$weights <- weights class(out) <- "markov_sde" if (!all(weights==0)) { stand <- out # Warning: copy! This may be a bad idea... if (!los) { stand$P <- stand$Y stand$P.se <- sqrt(stand$varY) } else { PIndex <- 1:(nrow(out$Y)/2) stand$P <- stand$Y[PIndex,] stand$L <- stand$Y[-PIndex,] stand$P.se <- sqrt(stand$varY[PIndex,]) stand$L.se <- sqrt(stand$varY[-PIndex,]) } ## tidy up stand$X <- stand$Y stand$variance <- stand$varY ## out$X <- out$variance <- out$Y <- out$varY <- stand$Y <- stand$varY <- NULL stand$newdata <- stand$newdata[1,,drop=FALSE] class(stand) <- "markov_sde" out$stand <- stand } out } standardise.markov_sde <- function(object) { structure(object$stand, class="markov_sde") } cr = two_states(death, newdata=data.frame(rx=levels(survival::colon$rx))) cr = two_states(death, newdata=data.frame(Obs=1)) plot.markov_sde <- function(x, y, stacked=TRUE, which=c("P","L"), xlab="Time", ylab=NULL, col=2:6, border=col, ggplot2=FALSE, lattice=FALSE, alpha=0.2, strata=NULL, ...) { stopifnot(inherits(x,"markov_sde")) which <- match.arg(which) if (!missing(y)) warning("y argument is ignored") ## ylab defaults if (is.null(ylab)) ylab <- if(which=='P') "Probability" else "Length of stay" if (ggplot2) rstpm2:::ggplot.markov_msm(x, which=which, stacked=stacked, xlab=xlab, ylab=ylab, alpha=alpha, ...) else if (lattice) rstpm2:::xyplot.markov_msm(x, which=which, stacked=stacked, xlab=xlab, ylab=ylab, col=col, border=border, strata=strata, ...) else { if (is.null(index) && nrow(x$newdata)>1) { warning("More than one set of covariates; defaults to weighted estimator") x <- x$stand # Warning: replacement index <- 1 } browser() if (is.null(index)) index <- 1 df <- merge(x$newdata[index,,drop=FALSE], as.data.frame(x)) states <- unique(df$state) if (stacked) { out <- graphics::plot(range(x$times, na.rm=TRUE),0:1, type="n", xlab=xlab, ylab=ylab, ...) lower <- 0 for (i in length(states):1) { # put the last state at the bottom df2 <- df[df$state==states[i],] if (length(lower)==1) lower <- rep(0,nrow(df2)) upper <- lower+df2[[which]] graphics::polygon(c(df2$time,rev(df2$time)), c(lower,rev(upper)), border=border[i], col=col[i]) lower <- upper } graphics::box() invisible(out) } else stop('Unstacked plot not implemented in base graphics; use ggplot2=TRUE or lattice=TRUE') } } plot(standardise(cr)) # ok (no legend) plot(standardise(cr), ggplot=TRUE) # ok (includes legend) plot(standardise(cr), lattice=TRUE) # ok (no legend) plot(cr, ggplot=TRUE) + facet_grid(~ rx) # ok plot(cr, index=1) # incorrect plot(cr, ggplot=TRUE, index=1) # incorrect plot(cr, lattice=TRUE, index=1) # incorrect plot(standardise(cr), ggplot=TRUE, stacked=FALSE) # incorrect: wrong CIs for standardised estimates plot(cr, ggplot=TRUE, stacked=FALSE) + facet_grid(~ rx) # incorrect as.data.frame.markov_sde <- function(x, row.names=NULL, ci=TRUE, P.conf.type="logit", L.conf.type="log", P.range=c(0,1), L.range=c(0,Inf), ...) { if (any(x$weights<0)) P.conf.type <- L.conf.type <- "plain" .id. <- 1:nrow(x$newdata) nStates <- nrow(x$trans) state.names <- rownames(x$trans) stateNames <- if (!is.null(rownames(x$trans))) rownames(x$trans) else 1:nrow(x$trans) out <- expand.grid(state=stateNames, .id.=.id., time=x$times) out <- cbind(x$newdata[out$.id.,],out) names(out)[1:ncol(x$newdata)] <- colnames(x$newdata) out$P <- as.vector(x$P) out$P.se <- as.vector(x$P.se) out <- out[order(out$.id.,out$state,out$time),] out$.id. <- NULL if (ci) { tmp <- rstpm2:::surv.confint(out$P,out$P.se, conf.type=P.conf.type, min.value=P.range[1], max.value=P.range[2]) out$P.lower <- tmp$lower out$P.upper <- tmp$upper } if (x$los) { out$L <- as.vector(x$L) out$L.se <- as.vector(x$L.se) if (ci) { tmp <- rstpm2:::surv.confint(out$L,out$L.se, conf.type=L.conf.type, min.value=L.range[1], max.value=L.range[2]) out$L.lower <- tmp$lower out$L.upper <- tmp$upper } } if(!is.null(row.names)) rownames(out) <- row.names out } temp = as.data.frame(cr) head(temp) ggplot(temp,aes(x=time,y=P,fill=rx,ymin=P.lower,ymax=P.upper)) + geom_line() + geom_ribbon(alpha=0.5) + facet_grid(state~rx) # ok rstpm2:::ggplot.markov_msm(temp) + facet_grid(~rx) # ok ## Competing risks ## Note: this shows how to adapt the markov_msm model for competing risks. competing_risks <- function(listOfModels, ...) { nRisks = length(listOfModels) transmat = matrix(NA,nRisks+1,nRisks+1) transmat[1,1+(1:nRisks)] = 1:nRisks rownames(transmat) <- colnames(transmat) <- c("Initial",names(listOfModels)) rstpm2::markov_msm(listOfModels, ..., trans = transmat) } ## Note: The first argument for competing_risks is a list of models. Names from that list are ## used for labelling the states. The other arguments are as per the markov_msm function, ## except for the transition matrix, which is defined by the competing_risks function. recurrence = gsm(Surv(time,status)~factor(rx), data=survival::colon, subset=(etype==1), df=3) death = gsm(Surv(time,status)~factor(rx), data=survival::colon, subset=(etype==2), df=3) cr = competing_risks(list(Recurrence=recurrence,Death=death), newdata=data.frame(rx=levels(survival::colon$rx)), t = seq(0,2500, length=301)) ## Plot the probabilities for each state for three different treatment arms plot(cr, ggplot=TRUE) + facet_grid(~ rx) ## And: differences in probabilities cr_diff = diff(subset(cr,rx=="Lev+5FU"),subset(cr,rx=="Obs")) plot(cr_diff, ggplot=TRUE, stacked=FALSE) ## Example using Crowther and Lambert (2018) library(readstata13) library(transform.hazards) library(timereg) library(rstpm2) # standardise mex.1 <- read.dta13("https://fmwww.bc.edu/repec/bocode/m/multistate_example.dta") transmat <- rbind("Post-surgery"=c(NA,1,2), "Relapsed"=c(NA,NA,3), "Died"=c(NA,NA,NA)) colnames(transmat) <- rownames(transmat) mex.2 <- transform(mex.1,osi=(osi=="deceased")+0) levels(mex.2$size)[2] <- ">20-50 mm" # fix typo mex <- mstate::msprep(time=c(NA,"rf","os"),status=c(NA,"rfi","osi"), data=mex.2,trans=transmat,id="pid", keep=c("age","size","nodes","pr_1","hormon")) mex <- transform(mex, size2=(unclass(size)==2)+0, # avoids issues with TRUE/FALSE size3=(unclass(size)==3)+0, hormon=(hormon=="yes")+0, Tstart=Tstart/12, Tstop=Tstop/12) ## Slow fitting... c.ar <- aalen(Surv(Tstart,Tstop,status) ~ const(age) + size2 + size3 + const(nodes) + pr_1 + const(hormon), data = subset(mex, trans==1)) c.ad <- aalen(Surv(Tstart, Tstop, status) ~ const(age) + const(size) + const(nodes) + const(pr_1) + const(hormon), data = subset(mex, trans==2)) c.rd <- aalen( Surv(Tstart,Tstop,status) ~ const(age) + const(size) + const(nodes) + pr_1 + const(hormon), data=subset(mex, trans==3)) ## nd <- expand.grid(nodes=seq(0,20,10), size=levels(mex$size)) nd <- transform(nd, age=54, pr_1=3, hormon=0, size2=(unclass(size)==2)+0, size3=(unclass(size)==3)+0) system.time(fit1 <- markov_sde(list(c.ar,c.ad,c.rd), trans=transmat, newdata=nd[c(1,2),], los=TRUE)) system.time(fit0 <- markov_sde(list(c.ar,c.ad,c.rd), trans=transmat, newdata=nd[c(1,2),])) plot(fit1) plot(fit1, ggplot=TRUE) plot(fit1, lattice=TRUE, stacked=FALSE, which="L") ## plot(fit1,which="L",xlim=NULL) # does this make sense? df1 <- as.data.frame(fit1) fit2 <- standardise(fit1) plot(fit2,ggplot=TRUE) df2 <- as.data.frame(fit2) diff1 <- diff(fit1) plot(diff1) ## type="af" library(rstpm2) fit = gsm(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3) plot(fit,type="af",newdata=brcancer, exposed=function(data) transform(data,hormon=1)) pred2 <- predict(fit,type="af",newdata=brcancer, grid=TRUE, exposed=function(data) transform(data,hormon=1), se.fit=TRUE,full=TRUE) with(pred2, matplot(rectime,cbind(Estimate,lower,upper),type="l",lty=c(1,2,2), col=1, xlab="Time since treatment (days)", ylab="PAF", ylim=c(0,0.5))) ## Bug report from Joshua # Loading rstpm2 package library(rstpm2) # Fit stmp2 model using breastcancer data set fpm_model <- stpm2(Surv(rectime, censrec) ~ hormon, data = brcancer, df = 3, tvc = list("hormon" = 3)) # Predict hazard difference comparing hormon users and non-users # using full=TRUE option for obtaining a full data set for ggplot() predict( fpm_model, type = "hdiff", newdata = data.frame(hormon = 0), var = "hormon", grid = TRUE, se.fit = TRUE, full = TRUE) ## test plots for PO models with random effects library(rstpm2) set.seed(12345) logit <- binomial()$linkfun expit <- binomial()$linkinv Spo <- function(eta) expit(eta) eta <- function(t) {} rPOgamma <- function(n,eta,theta,eps=1e-16) { ## U <- pmin(runif(n),1-eps) U <- runif(n) ## solve_t(U=expit(-eta(t))^theta), where eta(0)=-Inf and eta(Inf)=Inf V <- -logit(U^(1/theta)) if (any(is.na(V))) browser() c(list(U=U),vuniroot(function(t) eta(t)-V, lower=rep(1e-50,n), upper=rep(1e100,n))) } t0 <- rPOgamma(1e5, function(t) log(t), 1) with(t0,plot(U,root,log="y")) t1 <- rPOgamma(n=1e5, function(t) log(t), rgamma(10,1)) range(t0$root) range(t1$root) plot(density(log(t0$root))) ## Plots with three levels library(rstpm2) table(brcancer$x4) # cancer stage ## define indicators for the "exposed" levels (*R* needs these to be numeric) d <- transform(brcancer, x4.2=(x4==2)+0, x4.3=(x4==3)+0) ## fit the model with the indicators as main effects and with tvc fit <- stpm2(Surv(rectime,censrec==1)~x4.2+x4.3,data=d,df=3,tvc=list(x4.2=2,x4.3=2)) ## predict for each exposure level pred2 <- predict(fit,newdata=data.frame(x4.2=0,x4.3=0),type="hr",var="x4.2", grid=TRUE, full=TRUE, se.fit=TRUE) pred3 <- predict(fit,newdata=data.frame(x4.2=0,x4.3=0),type="hr",var="x4.3", grid=TRUE, full=TRUE, se.fit=TRUE) pred <- transform(rbind(pred2,pred3), x4=factor(ifelse(x4.2,2,3))) library(ggplot2) ggplot(pred, aes(x=rectime, y=Estimate, ymin=lower, ymax=upper, fill=x4, col=x4)) + geom_line() + coord_cartesian(ylim=c(0,10)) + geom_ribbon(alpha=0.3, col=NA) ## how to extract the design information library(rstpm2) fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3) names(fit@model.frame) attributes(fit@model.frame[[3]]) fit@lm$terms fit@x <- matrix() ls(environment(fit@model.frame)) ## withEnvs <- sapply(slotNames(fit),function(nm) !is.null(environment(slot(fit,nm)))) slotNames(fit)[withEnvs] lapply(slotNames(fit)[withEnvs],function(nm) ls(environment(slot(fit,nm)))) ## withEnvs <- sapply(fit@args,function(obj) !is.null(environment(obj))) names(fit@args)[withEnvs] lapply(fit@args[withEnvs],function(obj) ls(environment(obj))) ## bug in predict for meansurv library(rstpm2) library(ggplot2) fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3) ## Easy to use plot and lines functions plot(fit, newdata=transform(brcancer, hormon=0), type="meansurv") lines(fit, newdata=transform(brcancer, hormon=1), type="meansurv",lty=2) ## More tedious to do for different covariate patterns with ggplot2 pred0 <- predict(fit, newdata=transform(brcancer, hormon=0), type="meansurv", full=TRUE, se.fit=TRUE, grid=TRUE) pred1 <- predict(fit, newdata=transform(brcancer, hormon=1), type="meansurv", full=TRUE, se.fit=TRUE, grid=TRUE) ## bug with values returned AsIs - I'll try to fix this unAsIs <- function(object) if (inherits(object,"AsIs")) "class<-"(object, setdiff(class(object), "AsIs")) else object pred <- rbind(transform(unAsIs(pred1),hormon=1),transform(unAsIs(pred0),hormon=0)) pred <- transform(pred, Hormone=ifelse(hormon==1,"Yes","No")) ggplot(pred, aes(x=rectime,y=Estimate,ymin=lower,ymax=upper,fill=Hormone)) + xlab("Time since diagnosis (years)") + ylab("Standardised survival") + geom_ribbon(alpha=0.6) + geom_line() ## bug in predict for meansurv library(devtools) install_github("mclements/rstpm2", ref="develop") library(rstpm2) fit.tvc <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3, tvc=list(hormon=3)) out <- predict(fit.tvc, newdata=transform(brcancer,hormon=1),type="meansurv",grid=TRUE, se.fit=TRUE, full=TRUE) ## bug in plot(..., xlab="Something") library(rstpm2) fit <- stpm2(Surv(rectime, censrec)~hormon, data=brcancer,df=3) plot(fit, newdata=data.frame(hormon=1), type="hr", xlab="Time since diagnosis (years)", var="hormon", ylab="Hazard ratio", main="Lung cancer-BMI") ## predict linear predictor library(rstpm2) fit <- stpm2(Surv(rectime, censrec)~hormon, data=brcancer,df=3) predict(fit, newdata=data.frame(hormon=0:1, rectime=1000), type="link") predict(fit, newdata=data.frame(hormon=1, rectime=1000), type="link") - predict(fit, newdata=data.frame(hormon=0, rectime=1000), type="link") ## library(rstpm2) library(Hmisc) d <- local({ set.seed(12345) x <- rep(0:1,length=200) y <- rexp(length(x), exp(-3+x)) data.frame(x,y,e=TRUE) }) fit0 <- stpm2(Surv(y, e)~1, data=d,df=3) fit <- stpm2(Surv(y, e)~x, data=d,df=3) rcorr.cens(predict(fit0,type="link")-predict(fit0,newdata=transform(d,x=0),type="link"), with(d,Surv(y,e))) rcorr.cens(-predict(fit,type="link")+ predict(fit,newdata=transform(d,x=0),type="link"), with(d,Surv(y,e))) summary(fit) ## testing - Bug requires loading devtools *before* rstpm2 setwd("~/src/R/rstpm2") library(devtools) devtools::test() ## offset library(rstpm2) brcancer2 <- transform(brcancer,off=0.1) fit <- stpm2(Surv(rectime,censrec==1)~hormon, df = 2, data=brcancer2) fit2 <- stpm2(Surv(rectime,censrec==1)~hormon+offset(off), df = 2, data=brcancer2) fit fit2 zeroModel(fit) ## p-value for survival differences library(rstpm2) fit <- stpm2(Surv(rectime,censrec==1)~hormon, df = 2, data=brcancer,tvc=list(hormon=2)) test <- predict(fit, type="sdiff", var="hormon", newdata=data.frame(hormon=0,rectime=500),se.fit=TRUE) z <- test[1,1]/((test[1,3]-test[1,2])/2/qnorm(0.975)) 2*pnorm(-abs(z)) ## ## test the difference in survival rates test <- predictnl(fit, function(object,newdata=NULL) { lp1 <- predict(object, newdata=data.frame(hormon=1,rectime=500), type="surv") lp2 <- predict(object, newdata=data.frame(hormon=0,rectime=500), type="surv") lp1-lp2 }) with(test, c(fit=fit, se.fit=se.fit, statistic=fit/se.fit, p=2*pnorm(-abs(fit/se.fit)))) ## same p-value as predict(..., type="sdiff") ## s18 <- summary(survfit(Surv(rectime,censrec==1)~hormon,data=brcancer),time=500) z2<-diff(s18$surv)/sqrt(sum(s18$std.err^2)) 2*pnorm(-abs(z2)) ## library(bpcp) with(brcancer, fixtdiff(rectime,censrec,hormon,500,doall = TRUE)) ## bug #3 on GitHub library(rstpm2) # Function with model_formula paramter **ERRORS** f_bad <- function(model_formula) stpm2(formula = model_formula, df = 2, data=brcancer, link.type = "PH") # Function with formula paramter to match the name pf stpm2's formula parameter **PASSES** f_good <- function(formula) stpm2(formula = formula, df = 2, data=brcancer, link.type = "PH") f_bad (model_formula = Surv(rectime,censrec==1)~hormon) f_good (formula = Surv(rectime,censrec==1)~hormon) ## random draws library(rstpm2) predict.cumhaz <- function(object, newdata=NULL, ...) { stopifnot(inherits(object,"stpm2") || inherits(object,"pstpm2")) args <- object@args beta <- coef(object) if (is.null(newdata)) X <- args$X else if (inherits(object, "stpm2")) { X <- object@args$transX(lpmatrix.lm(object@lm, newdata), newdata) } else if (inherits(object, "pstpm2")) { X <- object@args$transX(predict(object@gam, newdata, type="lpmatrix"), newdata) } link <- object@link # cf. link for transformation of the predictions eta <- as.vector(X %*% beta) link$H(eta) } simulate <- function(object, nsim=nrow(as.data.frame(newdata)), newdata=as.data.frame(object@data), lower=1e-6, upper=1e5, ...) { e <- rexp(nsim) objective <- function(time) { newdata[[object@timeVar]] <- time predict.cumhaz(object, type="cumhaz", newdata=newdata) - e } vuniroot(objective, lower=rep(lower,length=nsim), upper=rep(upper,length=nsim))$root } fit1 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer) set.seed(12345) d <- do.call(rbind,lapply(1:100,function(i) brcancer)) system.time(r <- simulate(fit1, newdata=d)) length(r) library(rstpm2) fit1 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer) negll2 <- function(beta,svalues,missingIndicator,k=2) sapply(svalues, function(s) fit1@args$logli2(coef(fit1),ifelse(missingIndicator, s*coef(fit1)[k], 0))) head(negll2(coef(fit1),c(0,1),(1:686) %% 2)) ## values for the tests library(rstpm2) brcancer2 <- transform(rstpm2::brcancer, w=1) brcancer2$w[1] <- NA fit1 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2,weights=w) nd <- data.frame(hormon=1,rectime=1000) predict(fit1, newdata=nd, type="surv") predict(fit1, newdata=nd, type="fail") predict(fit1, newdata=nd, type="haz") predict(fit1, newdata=nd, type="hr",var="hormon") predict(fit1, newdata=nd, type="hdiff", var="hormon") ## predictions for relative survival (email from Anke Richters) set.seed(12345) d <- with(list(t0=rexp(10000), # constant hazard t1=rweibull(10000, 1.5), # rising hazard bg=rexp(2*10000)), # constant background hazard (rate=1) data.frame(t=pmin(bg,c(t0,t1)), x=rep(0:1,each=10000), e=TRUE, bhazard=1)) library(rstpm2) uniroot(function(x) pexp(x)-pweibull(x,shape=1.5), c(1e-6,10)) # survival overlaps at 1 uniroot(function(x) 1-dweibull(x,shape=1.5)/pweibull(x,shape=1.5,lower=FALSE), c(1e-6,10)) # hazards overlap at 0.444 fit <- stpm2(Surv(t,e)~x,data=d,tvc=list(x=3),bhazard=d$bhazard) ## fit <- pstpm2(Surv(t,e)~1,data=d,smooth.formula=~s(log(t))+s(log(t),by=x),bhazard=d$bhazard) ts <- seq(0,4,length=301)[-1] ## hazard plot - ok plot(fit,newdata=data.frame(x=0),type="hazard",ylim=c(0,4)) lines(fit,newdata=data.frame(x=1),type="hazard",lty=2) abline(h=1,col="blue") # theorical lines(ts,dweibull(ts,shape=1.5)/pweibull(ts,shape=1.5,lower.tail=FALSE),lty=2,col="blue") # theorical ## survival plot - ok plot(fit,newdata=data.frame(x=0),type="surv") lines(fit,newdata=data.frame(x=1),type="surv",lty=2) lines(ts, pexp(ts,lower.tail=FALSE), col="blue") # theoretical lines(ts, pweibull(ts,shape=1.5,lower.tail=FALSE), lty=2, col="blue") # theoretical ## hr - now fixed plot(fit,newdata=data.frame(x=0),type="hr",var="x") lines(ts, dweibull(ts,shape=1.5)/pweibull(ts,shape=1.5,lower.tail=FALSE), lty=2, col="blue") # theoretical abline(h=1,lty=2) ## plot(fit,newdata=data.frame(x=0),type="hr",exposed=function(data) transform(data,x=1)) # same mistake plot(fit,newdata=data.frame(x=0),type="sdiff",var="x",ylim=c(-1,1)) S0 <- predict(fit,newdata=data.frame(x=0),grid=TRUE,full=TRUE) S1 <- predict(fit,newdata=data.frame(x=1),grid=TRUE,full=TRUE) lines(S0$t,S1$Estimate-S0$Estimate,col="blue") abline(h=0) abline(v=1) library(rstpm2) fit1 <- coxph(Surv(rectime,censrec==1)~ns(x1,df=2),data=brcancer) ## Missing values in predictions library(rstpm2) brcancer2 <- brcancer brcancer$rectime[1] <- NA fit1 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2) pred1 <- predict(fit1,newdata=brcancer2) head(pred1) fit1 summary(fit1) brcancer2 <- brcancer brcancer$hormon[1] <- NA fit1 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2) pred1 <- predict(fit1,newdata=brcancer2) head(pred1) fit1 summary(fit1) ## library(rstpm2) brcancer2 <- brcancer brcancer$rectime[1] <- NA fit1 <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2) pred1 <- predict(fit1,newdata=brcancer2) head(pred1) fit1 summary(fit1) brcancer2 <- brcancer brcancer$hormon[1] <- NA fit1 <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2) pred1 <- predict(fit1,newdata=brcancer2) head(pred1) fit1 summary(fit1) ## Examples using predictnl for Alessandro library(rstpm2) brcancer2 <- transform(brcancer, x4.23=x4 %in% 2:3) fit1 <- stpm2(Surv(rectime,censrec==1)~hormon*x4.23,data=brcancer2,df=3) summary(fit1) newd <- data.frame(hormon=0,x4.23=FALSE) plot(fit1, newdata=newd) RERI <- function(object, newdata, var1, val1=1, var2, val2=1) { exp1 <- function(data) {data[[var1]] <- val1; data} exp2 <- function(data) {data[[var2]] <- val2; data} s00 <- predict(object, newdata, type="surv") s10 <- predict(object, newdata=exp1(newdata), type="surv") s01 <- predict(object, newdata=exp2(newdata), type="surv") s11 <- predict(object, newdata=exp1(exp2(newdata)), type="surv") -(s11-s10-s01+s00)/(1-s00) } times <- seq(0,2500,length=301)[-1] reri <- RERI(fit1,newdata=transform(newd,rectime=times),var1="hormon",var2="x4.23",val2=TRUE) plot(times,reri,type="l") reri2 <- predictnl(fit1,fun=RERI,newdata=transform(newd,rectime=times),var1="hormon",var2="x4.23",val2=TRUE) with(reri2, matplot(times,fit+cbind(0,-1.96*se.fit,+1.96*se.fit),type="l",lty=c(1,2,2),col=1, xlab="Time since diagnosis", ylab="RERI")) abline(h=0,lty=3) RERI.hr <- function(object, newdata, var1, val1=1, var2, val2=1) { exp1 <- function(data) {data[[var1]] <- data[[var1]]+val1; data} exp2 <- function(data) {data[[var2]] <- data[[var2]]+val2; data} h00 <- predict(object, newdata, type="haz") h10 <- predict(object, newdata=exp1(newdata), type="haz") h01 <- predict(object, newdata=exp2(newdata), type="haz") h11 <- predict(object, newdata=exp1(exp2(newdata)), type="haz") (h11-h10-h01+h00)/h00 } RERI.hr(fit1,newdata=transform(newd,rectime=1000),var1="hormon",var2="x4.23",val2=TRUE) predictnl(fit1,fun=RERI.hr,newdata=transform(newd,rectime=1000),var1="hormon",var2="x4.23",val2=TRUE) ## testing of relative survival library(rstpm2) ayear <- 365.24 brcancer2 <- transform(brcancer, age=80*ayear, sex="male", year=as.Date("1980-01-01"), time=1, recyear=rectime/ayear) rate0 <- survexp(time~1,data=brcancer2,method="individual.h",scale=ayear) (fit1 <- stpm2(Surv(recyear,censrec==1)~hormon,data=brcancer2,df=2,cure=T,bhazard=rate0)) head(predict(fit1,type.relsurv="excess")) head(predict(fit1,type.relsurv="total")) head(brcancer2) ayear <- 365.24 timeVar <- substitute(times) scale <- ayear rmap <- substitute(list()) newdata <- data.frame(sex=c("male",rep("male",5)),age=ayear*60,year=2002,times=c(1,1:5)) survexp1 <- do.call(survexp, list(substitute(I(timeVar*scale)~1,list(timeVar=timeVar)), ratetable=survexp.us, scale=scale, rmap=rmap, cohort=FALSE, data=newdata)) plot(fit1, newdata=data.frame(hormon=1,age=80,sex="male",year=1980)) ## lines(fit1, newdata=data.frame(hormon=1,age=80,sex="male",year=1980)) ## Bug report from Alessandro for 1.4.0 library(rstpm2) data(kidney) fitg = stpm2(Surv(time, status) ~ age + sex, cluster = kidney$id, data = kidney, RandDist = "Gamma") head(predict(fitg)) fitln = stpm2(Surv(time, status) ~ age + sex, cluster = kidney$id, data = kidney, RandDist = "LogN") head(predict(fitln)) fitln = stpm2(Surv(time, status) ~ age + sex, cluster = kidney$id, data = kidney, Z=~age-1, RandDist = "LogN") head(predict(fitln)) ## test meanhr library(rstpm2) fit <- stpm2(Surv(rectime, censrec==1) ~ x4+x5, data = brcancer, df=3) fit <- stpm2(Surv(rectime, censrec==1) ~ x4+x5, data = brcancer, df=3) summary(fit) eform(fit) plot(fit, newdata=data.frame(hormon=0,x4=0,x5=0)) plot(fit, newdata=data.frame(hormon=0,x4=0,x5=0),type="hazard") plot(fit, newdata=data.frame(hormon=0,x4=0,x5=0), type="hr", exposed=function(data) transform(data, x4=1)) plot(fit, newdata=transform(brcancer,x4=1), type="meanhr", exposed=function(data) transform(data, x4=2)) plot(fit, newdata=transform(brcancer,x4=1), type="meanhaz") ## test rmst library(rstpm2) fit <- stpm2(Surv(rectime, censrec==1) ~ hormon, data = brcancer, df=3) plot(fit, newdata=data.frame(hormon=1)) predict(fit, newdata=data.frame(hormon=1,rectime=1000), type="rmst", se.fit=TRUE) predict(fit, newdata=data.frame(hormon=0,rectime=1000), type="rmst", se.fit=TRUE) library(devtools) install.packages("bbmle") devtools::install_github("mclements/rstpm2",ref="develop") ## 2017-06-21 ## Verify: the choice of basis dimension (default: k=10) for penalized regression splines is not sensitive to estimates ## Adjusted by a constant coefficient (e.g. alpha=2) to correct potential overfitting by GCV for lambda ## alpha = 1.4 suggested by Kim and Gu (2004) library(rstpm2) ## k = 7 pfit7 <- pstpm2(Surv(rectime, censrec==1) ~ hormon, data = brcancer, smooth.formula = ~ s(log(rectime), k=7), alpha=2) plot(pfit7, newdata = data.frame(hormon=0), type="hazard") ## k = 27 pfit27 <- pstpm2(Surv(rectime, censrec==1) ~ hormon, data = brcancer, smooth.formula = ~ s(log(rectime), k=27), alpha=2) plot(pfit27, newdata = data.frame(hormon=0), type="hazard") ## Estimated effective degree of freedom (EDF) pfit7@edf ## 5.36 pfit27@edf ## 5.96 require(coxme) ## Fix error in code for gradli library(rstpm2) data(brcancer) fit <- stpm2(Surv(rectime,censrec) ~ hormon,data=transform(brcancer,censrec=1)) fit <- stpm2(Surv(rectime,censrec==1) ~ hormon,data=brcancer,cure=TRUE) fit <- stpm2(Surv(rectime,censrec==1) ~ hormon,data=brcancer) plot(fit,newdata=data.frame(hormon=1),type="uncured",exposed=function(data) transform(data,rectime=2500)) X <- fit@args$X XD <- fit@args$XD args <- fit@args beta.est <- coef(fit) eta <- as.vector(X %*% beta.est) etaD <- as.vector(XD %*% beta.est) link <- switch(fit@args$link,PH=rstpm2:::link.PH,PO=rstpm2:::link.PO) h <- link$h(eta,etaD) # - as.vector(predict(fit, type="haz")) ## Ok! H <- link$H(eta) #- as.vector(predict(fit, type="cumhaz")) ## Ok! gradh <- as.matrix(link$gradh(eta,etaD, args)) gradH <- as.matrix(link$gradH(eta, args)) gradli <- residuals(fit, type="gradli") ## n*npar dim(gradli) gradli2 <- gradH - ifelse(fit@args$event,1/h,0)*gradh head(gradli + gradli2) ## Gamma frailty require(rstpm2) brcancer2 <- transform(brcancer, id=rep(1:(nrow(brcancer)/2),each=2)) brcancer2$hormon[1] <- NA fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2, cluster=brcancer2$id) summary(fit) plot(fit,newdata=data.frame(hormon=1),type="margsurv") fit2 <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2, cluster=brcancer2$id) summary(fit2) plot(fit2,newdata=data.frame(hormon=1),type="margsurv") # Aranda-Ordaz link refresh require(rstpm2) ## PH summary(fit <- stpm2(Surv(rectime,censrec==1)~1,data=brcancer,link="PH", df=3)) summary(fit <- stpm2(Surv(rectime,censrec==1)~1,data=brcancer,link="AO", df=3)) # Same: OK summary(fit <- stpm2(Surv(rectime,censrec==1)~1,data=brcancer,link="PO", df=3)) summary(fit <- stpm2(Surv(rectime,censrec==1)~1,data=brcancer,link="AO", theta.AO=1, df=3)) # Same: OK summary(fit <- pstpm2(Surv(rectime,censrec==1)~1,data=brcancer,link="AO", theta.AO=0.5)) refresh require(rstpm2) ## PH summary(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,link="PH", df=3)) predict(fit, newdata=transform(brcancer,rectime=1000),type="meansurv",keep.attributes=FALSE,se.fit=TRUE,use.gr=F) predict(fit, newdata=transform(brcancer,rectime=1000),type="meansurv",keep.attributes=FALSE,se.fit=TRUE,use.gr=T) plot(fit,newdata=transform(brcancer,hormon=1),type="meansurv",times=seq(10,1500,by=10)) plot(fit,newdata=transform(brcancer,hormon=2),type="meansurv",times=seq(10,1500,by=10),lty=2,add=TRUE) newd <- merge(transform(brcancer,rectime=NULL), data.frame(rectime=c(500,1000))) unlist(predict(fit,newdata=newd,type="af",exposed=function(data) transform(data,hormon=1),keep.attributes=FALSE,se.fit=TRUE) - predict(fit,newdata=newd,type="af",exposed=function(data) transform(data,hormon=1),keep.attributes=FALSE,se.fit=TRUE,use.gr=FALSE)) system.time(plot(fit,type="af",exposed=function(data) transform(data,hormon=1),recent=TRUE)) system.time(plot(fit,type="af",exposed=function(data) transform(data,hormon=1),recent=FALSE)) plot(fit,newdata=NULL,type="meansurv",ci=F) plot(fit,newdata=NULL,type="meansurvdiff",exposed=function(data) transform(data,hormon=1)) plot(fit,newdata=data.frame(hormon=1),type="surv",ci=F) plot(fit,newdata=data.frame(hormon=1),type="fail",ci=T) unlist(predict(fit,newdata=newd,type="meansurvdiff",exposed=function(data) transform(data,hormon=1),keep.attributes=FALSE,se.fit=TRUE) - predict(fit,newdata=newd,type="meansurvdiff",exposed=function(data) transform(data,hormon=1),keep.attributes=FALSE,se.fit=TRUE,use.gr=FALSE)) unlist(predict(fit,newdata=newd,type="meansurv",keep.attributes=FALSE,se.fit=TRUE)- predict(fit,newdata=newd,type="meansurv",keep.attributes=FALSE,se.fit=TRUE,use.gr=FALSE)) ## comparison with AF ## Example 1: clustered data with frailty U require(AF) set.seed(12345) expit <- function(x) 1 / (1 + exp( - x)) n <- 100 m <- 2 alpha <- 1.5 eta <- 1 phi <- 0.5 beta <- 1 id <- rep(1:n,each=m) U <- rep(rgamma(n, shape = 1 / phi, scale = phi), each = m) Z <- rnorm(n * m) X <- rbinom(n * m, size = 1, prob = expit(Z)) ## Reparametrize scale as in rweibull function weibull.scale <- alpha / (U * exp(beta * X)) ^ (1 / eta) t <- rweibull(n * m, shape = eta, scale = weibull.scale) ## Right censoring cen <- runif(n * m, 0, 10) delta <- as.numeric(t < cen) t <- pmin(t, cen) d <- data.frame(t, delta, X, Z, id) require(rstpm2) fit2 <- stpm2(formula = Surv(t, delta) ~ X + Z + X * Z, data = d, df=1, cluster=d$id, smooth.formula=~log(t)) predict(fit2, type="af", newdata=transform(d,t=1),exposed=function(data) transform(data, X=0), se.fit=TRUE) plot(fit2, type="af", exposed=function(data) transform(data, X=0)) plot(fit2, type="meansurvdiff", exposed=function(data) transform(data, X=0)) plot(fit2, type="meansurv") fit3 <- pstpm2(formula = Surv(t, delta) ~ X + Z + X * Z, data = d, df=1, cluster=d$id) predict(fit3, type="af", newdata=transform(d,t=1),exposed=function(data) transform(data, X=0), se.fit=TRUE) plot(fit3, type="meansurv") predict(fit2, newdata=transform(d,t=1), type="meansurv") ## check analytical gradients for margsurv and marghaz predict(fit2, newdata=data.frame(t=1,X=1,Z=1), type="margsurv", use.gr=TRUE, se.fit=TRUE)-predict(fit2, newdata=data.frame(t=1,X=1,Z=1), type="margsurv", use.gr=FALSE, se.fit=TRUE) predict(fit2, newdata=data.frame(t=1,X=1,Z=1), type="marghaz", use.gr=TRUE, se.fit=TRUE)-predict(fit2, newdata=data.frame(t=1,X=1,Z=1), type="marghaz", use.gr=FALSE, se.fit=TRUE) predict(fit2, newdata=data.frame(t=1,X=1,Z=1), type="hazard", use.gr=TRUE, se.fit=TRUE)-predict(fit2, newdata=data.frame(t=1,X=1,Z=1), type="hazard", use.gr=FALSE, se.fit=TRUE) require(boot) meansurv <- function(data,index) predict(fit2, newdata=transform(data[index,,drop=FALSE],t=1), type="meansurv") meansurv(d,TRUE) boot1 <- boot(d, meansurv, R=1000) boot.ci(boot1) require(rstpm2) fit <- stpm2(formula = Surv(t, delta) ~ X + Z + X * Z, data = d, df=1) diag(vcov(fit)) fit <- stpm2(formula = Surv(t, delta) ~ X + Z + X * Z, data = d, frailty=FALSE, cluster=d$id, df=1) diag(vcov(fit)) fit <- stpm2(formula = Surv(t, delta) ~ X + Z + X * Z, data = d, cluster=d$id, df=1) diag(vcov(fit)) ## fit <- stpm2(formula = Surv(t, delta) ~ X + Z + X * Z, data = d, cluster = d$id, df=1) predict(fit,type="af",newdata=transform(d,t=1),exposed=function(data) transform(data,X=0),keep.attributes=FALSE,se.fit=TRUE) fit <- stpm2(formula = Surv(t, delta) ~ X + Z + X * Z, data = d, cluster = d$id, df=4) predict(fit,type="af",newdata=transform(d,t=1),exposed=function(data) transform(data,X=0),keep.attributes=FALSE,se.fit=TRUE) fit <- stpm2(formula = Surv(t, delta) ~ X + Z + X * Z, data = d, cluster=d$id, df=1) predict(fit,type="af",newdata=transform(d,t=1),exposed=function(data) transform(data,X=0),keep.attributes=FALSE,se.fit=TRUE) ## Fit a frailty object library(stdReg) fit <- stdReg::parfrailty(formula = Surv(t, delta) ~ X + Z + X * Z, data = d, clusterid = "id") summary(fit) ## Estimate the attributable fraction from the fitted frailty model time <- c(seq(from = 0.2, to = 1, by = 0.2)) time <- 1 ## debug(AFfrailty) library(AF) AFfrailty_est <- AFparfrailty(object = fit, data = d, exposure = "X", times = time, clusterid = "id") AFfrailty_est ##AF:::summary.AF(AFfrailty_est) ## tvc for Maarten Coemans require(rstpm2) brcancer <- transform(brcancer, x1c=x1-mean(x1)) summary(fit.tvc <- stpm2(Surv(rectime,censrec==1)~ hormon+x1c, data=brcancer, df=3, tvc=list(hormon=2,x1c=2))) plot(fit.tvc,newdata=data.frame(hormon=0,x1c=-10),type="hr", var="hormon") plot(fit.tvc,newdata=data.frame(hormon=0,x1c=+10),type="hr", var="hormon", add=TRUE,ci=FALSE,line.col=2) ## same model summary(fit.tvc <- stpm2(Surv(rectime,censrec==1)~ hormon+x1c, data=brcancer, smooth.formula = ~ns(log(rectime),df=3)+hormon:ns(log(rectime),df=2)+x1c:ns(log(rectime),df=2))) ## and again... summary(fit.tvc <- stpm2(Surv(rectime,censrec==1)~ x1c, data=brcancer, smooth.formula = ~ns(log(rectime),df=3)+hormon:ns(log(rectime),df=3,intercept=TRUE)+x1c:ns(log(rectime),df=2))) ## new model with time different time transformation for the TVCs summary(fit.tvc <- stpm2(Surv(rectime,censrec==1)~ hormon+x1c, data=brcancer, smooth.formula = ~ns(log(rectime),df=3)+hormon:ns(rectime,df=2)+x1c:ns(rectime,df=2))) plot(fit.tvc,newdata=data.frame(hormon=0,x1c=-10),type="hr", var="hormon") plot(fit.tvc,newdata=data.frame(hormon=0,x1c=+10),type="hr", var="hormon", add=TRUE,ci=FALSE,line.col=2) ## ## not including the main effect and no intercept is not the same summary(fit.tvc <- stpm2(Surv(rectime,censrec==1)~ x1c, data=brcancer, smooth.formula = ~ns(log(rectime),df=3)+hormon:ns(log(rectime),df=2)+x1c:ns(log(rectime),df=2))) ## Standardised survival require(rstpm2) plot.meansurv <- function(x, y=NULL, times=NULL, newdata=NULL, add=FALSE, ci=!add, rug=!add, recent=FALSE, xlab=NULL, ylab="Mean survival", lty=1, line.col=1, ci.col="grey", ...) { if (is.null(times)) stop("plot.meansurv: times argument should be specified") if (is.null(newdata)) newdata <- x@data times <- times[times !=0] if (recent) { newdata <- do.call("rbind", lapply(times, function(time) { newdata[[x@timeVar]] <- newdata[[x@timeVar]]*0+time newdata })) pred <- predict(x, newdata=newdata, type="meansurv", se.fit=ci) # requires recent version pred <- if (ci) rbind(c(Estimate=1,lower=1,upper=1),pred) else c(1,pred) } else { pred <- lapply(times, function(time) { newdata[[x@timeVar]] <- newdata[[x@timeVar]]*0+time predict(x, newdata=newdata, type="meansurv", se.fit=ci) }) pred <- if (ci) rbind(c(Estimate=1,lower=1,upper=1),do.call("rbind", pred)) else c(1,unlist(pred)) } times <- c(0,times) if (is.null(xlab)) xlab <- deparse(x@timeExpr) if (!add) matplot(times, pred, type="n", xlab=xlab, ylab=ylab, ...) if (ci) { polygon(c(times,rev(times)),c(pred$lower,rev(pred$upper)),col=ci.col,border=ci.col) lines(times,pred$Estimate,col=line.col,lty=lty) } else { lines(times,pred,col=line.col,lty=lty) } if (rug) { Y <- x@y eventTimes <- Y[Y[,ncol(Y)]==1,ncol(Y)-1] rug(eventTimes,col=line.col) } return(invisible(y)) } brcancer <- transform(brcancer, x1c=x1-mean(x1)) summary(fit.tvc <- stpm2(Surv(rectime,censrec==1)~ hormon+x1c, data=brcancer, df=3, tvc=list(hormon=2,x1c=2))) times <- seq(0,3000,by=100) plot.meansurv(fit.tvc, newdata=transform(brcancer, hormon=1), times=times, ylim=c(0.2,1)) plot.meansurv(fit.tvc, times=times, newdata=transform(brcancer, hormon=0), line.col=2, add=TRUE) ## Examples using ns() for covariates - this was buggy. refresh require(rstpm2) summary(fit <- stpm2(Surv(rectime,censrec==1)~1, smooth.formula=~ns(log(rectime),df=3)+ns(x1,df=3), data=brcancer,link="PH")) summary(fit <- stpm2(Surv(rectime,censrec==1)~ns(x1,df=3), df=3,data=brcancer,link="PH")) summary(fit <- pstpm2(Surv(rectime,censrec==1)~ns(x1,df=3), data=brcancer,link="PH")) grad <- function(f,x,eps=1e-5) sapply(1:length(x), function(i) { lower <- upper <- x upper[i] <- x[i]+eps lower[i] <- x[i]-eps (f(upper)-f(lower))/2/eps }) link <- function(S,theta=0.5) log((S^(-theta)-1)/theta) S <- ilink <- function(eta,theta=0.5) exp(-log(theta*exp(eta)+1)/theta) H <- function(eta,theta=0.5) -log(S(eta,theta)) h <- function(eta,etaD,theta=0.5) exp(eta)*etaD/(theta*exp(eta)+1) gradH <- function(eta,X,theta=0.5) exp(eta)*X/(1+theta*exp(eta)) gradh <- function(eta,etaD,X,XD,theta=0.5) { eta <- as.vector(eta) etaD <- as.vector(etaD) ((theta*exp(2*eta)+exp(eta))*XD+exp(eta)*etaD*X) / (theta*exp(eta)+1)^2 } X <- cbind(1,1:2,1) # (constant, t, x) XD <- cbind(0,1:2,0) beta <- c(0.1, 0.2, 0.3) eta <- as.vector(X %*% beta) etaD <- as.vector(XD %*% beta) S(eta) H(eta) h(eta,etaD) - grad(function(t) H(cbind(1,t,1) %*% beta), 1) # OK gradH(eta,X) - grad(function(beta) H(X %*% beta), beta) # OK gradh(eta,etaD,X,XD) grad(function(beta) h(X %*% beta, XD %*% beta), beta) ilink(link(.1)) link(ilink(.1)) require(abind) X <- matrix(seq(0,1,length=5*10),nrow=10) beta <- seq(0,1,length=5) H <- exp(as.vector(X %*% beta)) dHdbeta <- X * H # row=indiv, col=beta d2Hdbeta2 <- aperm(abind(lapply(1:ncol(X), function(k) X[,k] * X * H),along=3),c(2,3,1)) abind(lapply(1:nrow(X), function(i) (X[i,] %*% t(X[i,])) * H[i]),along=3) - aperm(abind(lapply(1:ncol(X), function(k) X[,k] * X * H),along=3),c(2,3,1)) numder <- function(f,x,eps=1e-8) (f(x+eps)-f(x-eps))/2/eps expit <- function(x) 1/(1+exp(-x)) numder(expit,2) expit(2)*expit(-2) numder(dnorm,2) -dnorm(2)*2 require(mgcv) d <- data.frame(x = seq(0,1,length=100), x2=rnorm(100), y = rnorm(100)) fit <- gam(y~s(x)+s(x2,by=x), data=d) X <- predict(fit,d,type="lpmatrix") X0 <- predict(fit,transform(d,x=0),type="lpmatrix") Xstar <- X-X0 index0 <- rstpm2:::which.dim(Xstar) lapply(fit$smooth, function(s) { which((1:ncol(X) %in% index0)[s$first.para:s$last.para]) # index for S' }) lapply(fit$smooth, function(s) { range(which((1:ncol(X) %in% s$first.para:s$last.para)[index0])) }) lapply(fit$smooth,"[[","S") ## outline: given a full index=1:n, a reduced index set index0 and a smoother with first.para, last.para and a square matrix S, return a revised first.para', last.para' and matrix S' ## For S': refresh require(rstpm2) ## additive fit <- stpm2(Surv(rectime,censrec==1)~1,data=brcancer,link="AH", smooth.formula=~ns(rectime,df=4)+hormon:ns(rectime,df=3), optimiser="NelderMead") summary(fit) fit2 <- stpm2(Surv(rectime,censrec==1)~1,data=brcancer,link="AH", smooth.formula=~ns(rectime,df=4)+hormon:ns(rectime,df=3)) summary(fit2) plot(fit2,newdata=data.frame(hormon=0),type="haz") plot(fit2,newdata=data.frame(hormon=1),add=TRUE,lty=2,type="haz") fit <- pstpm2(Surv(rectime,censrec==1)~1,data=brcancer,link="AH", smooth.formula=~s(rectime)+s(rectime,by=hormon)) plot(fit,newdata=data.frame(hormon=0),type="haz") plot(fit,newdata=data.frame(hormon=1),add=TRUE,lty=2,type="haz") ## test robust estimators from penalized models ## most spline coefficients become statistically significant require(rstpm2) summary(pstpm2(Surv(rectime/365,censrec==1)~hormon,data=brcancer,robust=FALSE)) summary(pstpm2(Surv(rectime/365,censrec==1)~hormon,data=brcancer,robust=TRUE)) ## robust standard errors for clustered data refresh require(rstpm2) brcancer2 <- transform(brcancer, id=rep(1:(nrow(brcancer)/2),each=2)) fit <- stpm2(Surv(rectime,censrec==1)~1,data=brcancer) summary(fit) fit <- stpm2(Surv(rectime,censrec==1)~1,data=brcancer, cluster=brcancer2$id, robust=TRUE) summary(fit) ## require(rstpm2) brcancer2 <- transform(brcancer, id=rep(1:(nrow(brcancer)/2),each=2)) fit <- stpm2(Surv(rectime,censrec==1)~1,data=brcancer, cluster=brcancer2$id) summary(fit) predict(fit,type="gradli") ## Stata estimated coef for hormon ## PH: -.3614357 ## PO: -.474102 ## Probit: -.2823338 system.time(print( stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, stata=TRUE))) system.time(print(pfit <- pstpm2(Surv(rectime,censrec==1)~hormon,smooth.formula=~s(log(rectime))+s(x1),data=brcancer))) ## system.time(print( stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,type="PO"))) system.time(print(pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,type="PO"))) ## system.time(print( stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,type="probit"))) system.time(print(pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,type="probit"))) # slow summary(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,smooth.formula=~nsx(log(rectime), df=4, stata.stpm2.compatible = TRUE))) if (FALSE) { debug(pstpm2) pfit <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,sp=1) ## towards the end of the pstpm2 function... sum(diag(solve(optimHess(coef(mle2),negllsp,sp=1)) %*% optimHess(coef(mle2),negll0sp,sp=1))) sum(diag(solve(optimHess(coef(mle2),negllsp,sp=fit$sp)) %*% optimHess(coef(mle2),negll0sp,sp=fit$sp))) negllsp(coef(mle2),sp=1) negll0sp(coef(mle2),sp=1) } update.list <- function(list,...) { args <- list(...) for (name in names(args)) list[[name]] <- args[[name]] list } ## right censored ## Stata estimated coef for hormon (PH): -.3614357 refresh require(rstpm2) summary(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, smooth.formula=~nsx(log(rectime),df=3,stata=TRUE),trace=0)) summary(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, smooth.formula=~nsx(log(rectime),df=3,stata=TRUE),trace=0,optimiser="NelderMead")) summary(fit2 <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer)) summary(fit2 <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,optimiser="NelderMead")) ## delayed entry ## Stata estimated coef for hormon (PH): -1.162504 library(rstpm2) brcancer2 <- transform(brcancer,startTime=ifelse(hormon==0,rectime/2,0)) ## brcancer2 <- transform(brcancer,startTime=0.1) ##debug(rstpm2:::meat.stpm2) summary(fit <- stpm2(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2, smooth.formula=~nsx(log(rectime),df=3,stata=TRUE))) summary(fit2 <- pstpm2(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2,control=list(optimiser="NelderMead"))) # OK summary(fit2 <- pstpm2(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2)) plot(fit,newdata=data.frame(hormon=1)) lines(fit2,newdata=data.frame(hormon=1),lty=2) head(predict(fit)) # OK head(predict(fit,se.fit=TRUE)) ## delayed entry and tvc (problems?) summary(fit <- stpm2(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2, smooth.formula=~nsx(rectime,df=3)+hormon:nsx(rectime,df=3,stata=TRUE))) head(predict(fit,se.fit=TRUE)) pstpm2(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2) ## left truncated with clusters library(rstpm2) brcancer2 <- transform(brcancer, startTime=ifelse(hormon==0,rectime/2,0), id=rep(1:(nrow(brcancer)/2),each=2)) ##debug(stpm2) summary(fit <- stpm2(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2, cluster=brcancer2$id, control=list(optimiser="NelderMead"),recurrent=TRUE, smooth.formula=~nsx(log(rectime),df=3,stata=TRUE))) summary(fit0 <- stpm2(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2, control=list(optimiser="NelderMead"), smooth.formula=~nsx(log(rectime),df=3,stata=TRUE))) require(foreign) require(rstpm2) stmixed <- read.dta("http://fmwww.bc.edu/repec/bocode/s/stmixed_example2.dta") stmixed2 <- transform(stmixed, start = ifelse(treat,stime/2,0)) summary(r2 <- stpm2(Surv(stime,event)~treat,data=stmixed2,cluster=stmixed$trial,RandDist="LogN",df=3,Z=~treat-1,adaptive=TRUE,optimiser="NelderMead")) summary(r2 <- stpm2(Surv(stime,event)~treat,data=stmixed2,cluster=stmixed$trial,RandDist="LogN",df=3,Z=~treat-1,adaptive=TRUE)) ## library(foreign) library(rstpm2) stmixed <- read.dta("http://fmwww.bc.edu/repec/bocode/s/stmixed_example2.dta") summary(r <- stpm2(Surv(stime,event)~treat,data=stmixed,cluster=stmixed$trial,RandDist="LogN",df=3,Z=~treat-1)) ## non-adaptive system.time(print(summary(r2 <- stpm2(Surv(stime,event)~treat,data=stmixed2,cluster=stmixed$trial,RandDist="LogN",df=3,Z=~treat,adaptive=FALSE,nodes=20,optimiser="NelderMead")))) # slow and gradients not close to zero system.time(print(summary(r2 <- stpm2(Surv(stime,event)~treat,data=stmixed2,cluster=stmixed$trial,RandDist="LogN",df=3,Z=~treat,nodes=20,adaptive=FALSE)))) # gradients close to zero ## random intercept and random slope with 20 nodes summary(r2 <- stpm2(Surv(stime,event)~treat,data=stmixed2,cluster=stmixed$trial,RandDist="LogN",df=3,Z=~treat,nodes=20,adaptive=FALSE)) summary(r2 <- stpm2(Surv(stime,event)~treat,data=stmixed2,cluster=stmixed$trial,RandDist="LogN",df=3,Z=~treat,adaptive=FALSE,nodes=20)) # gradients close to zero ## Simple examples with no random effects and with a random intercept (check: deviances) summary(r2 <- stpm2(Surv(stime,event)~treat,data=stmixed,df=3)) summary(r2 <- stpm2(Surv(stime,event)~treat,data=stmixed,cluster=stmixed$trial,RandDist="LogN",df=3,Z=~treat-1)) ## check modes and sqrttau args <- r2@args args$return_type <- "modes" .Call("model_output", args, package="rstpm2") args$return_type <- "variances" # fudge .Call("model_output", args, package="rstpm2") ## check gradients args <- r2@args args$return_type <- "gradient" .Call("model_output", args, package="rstpm2") fdgrad <- function(obj,eps=1e-6) { args <- obj@args args$return_type <- "objective" sapply(1:length(args$init), function(i) { largs <- args largs$init[i] <- args$init[i]+eps f1 <- .Call("model_output", largs, package="rstpm2") largs$init[i] <- args$init[i]-eps f2 <- .Call("model_output", largs, package="rstpm2") data.frame(f1,f2,gradient=(f1-f2)/2.0/eps) }) } fdgrad(r2,1e-3) ## random intercept and random slope summary(r2 <- stpm2(Surv(stime,event)~treat,data=stmixed2,cluster=stmixed$trial,RandDist="LogN",df=3,Z=~treat)) summary(stpm2(Surv(start,stime,event)~treat,data=stmixed2)) summary(r2 <- stpm2(Surv(stime,event)~treat,data=stmixed2,cluster=stmixed$trial,RandDist="LogN")) ## summary(r2 <- pstpm2(Surv(stime,event)~treat,data=stmixed2,cluster=stmixed$trial,RandDist="LogN")) ## summary(r2 <- stpm2(Surv(stime,event)~treat+factor(trial),data=stmixed2,cluster=stmixed$trial,RandDist="LogN",Z=~treat-1)) ## summary(r2 <- pstpm2(Surv(stime,event)~treat+factor(trial),data=stmixed2,cluster=stmixed$trial,RandDist="LogN",Z=~treat-1)) ## gradients for RE parameters require(expm) link.PH <- list(link=function(S) log(-log(S)), ilink=function(eta) exp(-exp(eta)), h=function(eta,etaD) etaD*exp(eta), H=function(eta) exp(eta), gradh=function(eta,etaD,obj) obj$XD*exp(eta)+obj$X*etaD*exp(eta), gradH=function(eta,obj) obj$X*exp(eta)) link.AH <- list(link=function(S) -log(S), ilink=function(eta) exp(-eta), h=function(eta,etaD) etaD, H=function(eta) eta, gradh=function(eta,etaD,obj) obj$XD, gradH=function(eta,obj) obj$X) corrtrans <- function(x) (1-exp(-x)) / (1+exp(-x)) l <- function(gamma=c(log(.3),log(.4),0.5)) { ## initially assume an additive model H <- function(eta) eta h <- function(eta,etaD) etaD delta <- 1 eta <- 1 etaD <- 2 Z <- c(1,2) d <- c(1,1) mode <- c(1,2) ## define sqrtmat var <- exp(gamma[c(1,2)]) rho <- corrtrans(gamma[3]) cov <- rho*sqrt(var[1]*var[2]) Sigma <- matrix(c(var[1],cov,cov,var[2]),2,2) ## SqrtSigma <- chol(Sigma) SqrtSigma <- sqrtm(as(Sigma,"symmetricMatrix")) b <- mode + SqrtSigma %*% d Zb <- sum(Z*b) l <- delta*log(h(eta+Zb,etaD))-H(eta+Zb) l } g <- c(log(.3),log(.4),0.5) ## gradient wrt g using finite differences sapply(1:3, function(i,eps=1e-6) { g[i] <- g[i]+eps val <- l(g) g[i] <- g[i]-2*eps (val - l(g))/2/eps }) bf <- function(gamma=c(log(.3),log(.4),0.5)) { Z <- c(1,2) d <- c(1,1) mode <- c(1,2) ## define sqrtmat var <- exp(gamma[c(1,2)]) rho <- corrtrans(gamma[3]) cov <- rho*sqrt(var[1]*var[2]) Sigma <- matrix(c(var[1],cov,cov,var[2]),2,2) ## SqrtSigma <- chol(Sigma) SqrtSigma <- sqrtm(as(Sigma,"symmetricMatrix")) b <- mode + SqrtSigma %*% d b } ## gradient for b wrt g using finite differences (gradbwrtg <- sapply(1:3, function(i,eps=1e-6) { g[i] <- g[i]+eps val <- bf(g) g[i] <- g[i]-2*eps (val - bf(g))/2/eps })) var <- exp(g[c(1,2)]) rho <- corrtrans(g[3]) cov <- rho*sqrt(var[1]*var[2]) ## wrt g[1] matrix(c(g[1]*var[1],cov*g[1]/2,cov*g[1]/2,0),2,2) ## A=1; B=0.5; D=2 M=matrix(c(A,B,B,D),2,2) tau <- A+D delta <- A*D-B*B s <- sqrt(delta) t <- sqrt(tau+2*s) sqrtM <- matrix(c(A+s,B,B,D+s),2,2)/t sqrtM %*% sqrtM lb <- function(b) { ## initially assume an additive model H <- function(eta) eta h <- function(eta,etaD) etaD delta <- 1 eta <- 1 etaD <- 2 Z <- c(1,2) d <- c(1,1) mode <- c(1,2) Zb <- sum(Z*b) l <- delta*log(h(eta+Zb,etaD))-H(eta+Zb) l } ## gradient wrt b using finite differences gradlwrtb <- sapply(1:2, function(i,eps=1e-6) { b[i] <- b[i]+eps val <- lb(b) b[i] <- b[i]-2*eps (val - lb(b))/2/eps }) t(gradbwrtg) %*% gradlwrtb ## gradient for a multivariate normal require(mvtnorm) fdgrad <- function(f,x, ..., eps=1.0e-6) sapply(1:length(x), function(i) { e <- rep(0,length(x)) e[i] <- 1 (f(x+e*eps, ...)-f(x-e*eps, ...))/2/eps }) ## hess(i,i) = (-f2 +16.0*f1 - 30.0*f0 + 16.0*fm1 -fm2)/(12.0*hi*hi); fdhessian <- function(f,x, ..., eps=1.0e-5) sapply(1:length(x), function(i) { ei <- rep(0,length(x)) ei[i] <- 1 sapply(1:length(x), function(j) { ej <- rep(0,length(x)) ej[j] <- 1 if (i==j) (-f(x+2*ei*eps, ...)+16*f(x+ei*eps, ...)-30*f(x,...)+16*f(x-ei*eps, ...)-f(x-2*ei*eps, ...))/12/eps/eps else (f(x+eps*ei+eps*ej)-f(x+eps*ei-eps*ej)-f(x-eps*ei+eps*ej)+f(x-eps*ei-eps*ej))/4/eps/eps }) }) -fdgrad(mvtnorm::dmvnorm, c(1,1), c(0,0), Sigma <- matrix(c(1,.5,.5,1),2), log=TRUE) ## fdhessian(mvtnorm::dmvnorm, c(1,1), c(0,0), Sigma <- matrix(c(1,.5,.5,1),2)) as.vector(solve(Sigma) %*% c(1,1)) summary(fit <- stpm2(Surv(start,stime,event)~treat,data=stmixed2,cluster=stmixed$trial,optimiser="NelderMead",recurrent=TRUE)) summary(fit <- stpm2(Surv(start,stime,event)~treat,data=stmixed2,cluster=stmixed$trial,recurrent=TRUE)) summary(fit <- stpm2(Surv(start,stime,event)~treat,data=stmixed2,cluster=stmixed$trial,RandDist="LogN", optimiser="NelderMead", recurrent=TRUE)) summary(r2 <- stpm2(Surv(start,stime,event)~treat,data=stmixed2,cluster=stmixed$trial,RandDist="LogN", recurrent=TRUE)) summary(fit <- stpm2(Surv(start,stime,event)~treat,data=stmixed2,cluster=stmixed$trial,optimiser="NelderMead")) summary(fit <- stpm2(Surv(start,stime,event)~treat,data=stmixed2,cluster=stmixed$trial)) summary(fit <- stpm2(Surv(start,stime,event)~treat,data=stmixed2,cluster=stmixed$trial,RandDist="LogN", optimiser="NelderMead")) summary(r2 <- stpm2(Surv(start,stime,event)~treat,data=stmixed2,cluster=stmixed$trial,RandDist="LogN")) summary(r <- stpm2(Surv(start,stime,event)~treat,data=stmixed2)) ## check gradients args <- fit@args args$return_type <- "gradient" .Call("model_output", args, package="rstpm2") fdgrad <- function(obj,eps=1e-6) { args <- obj@args args$return_type <- "objective" sapply(1:length(args$init), function(i) { largs <- args largs$init[i] <- args$init[i]+eps f1 <- .Call("model_output", largs, package="rstpm2") largs$init[i] <- args$init[i]-eps f2 <- .Call("model_output", largs, package="rstpm2") data.frame(f1,f2,gradient=(f1-f2)/2.0/eps) }) } fdgrad(fit,1e-3) require(rstpm2) require(mgcv) x=seq(0,1,length=5001) set.seed(12345) y=rnorm(length(x),sin(2*pi*x)) i <- x>0.65 d=data.frame(x=x[i],y=y[i]) fit <- gam(y~s(x),data=d) ## plot(fit) plot(x,predict(fit,newdata=data.frame(x=x)),type="l") plot(x,y) ## weighted estimates refresh require(rstpm2) ## unequal weights brcancer2 <- transform(brcancer,w=ifelse(hormon==0,10,1)) ## unweighted summary(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2, smooth.formula=~nsx(log(rectime),df=3,stata=TRUE))) ## weighted estimates ## stpm2 summary(stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2,weights=w, smooth.formula=~nsx(log(rectime),df=3,stata=TRUE))) ## stpm2 robust summary(stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2,weights=w,robust=TRUE, smooth.formula=~nsx(log(rectime),df=3,stata=TRUE))) summary(pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2)) ## pstpm2 summary(pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2,weights=w)) summary(pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2,weights=w,robust=TRUE)) ## ## equal weights brcancer2 <- transform(brcancer,w=4) ## unweighted summary(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2, smooth.formula=~nsx(log(rectime),df=3,stata=TRUE))) ## weighted estimates ## stpm2 summary(stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2,weights=w, smooth.formula=~nsx(log(rectime),df=3,stata=TRUE))) summary(stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2,weights=w,robust=TRUE, smooth.formula=~nsx(log(rectime),df=3,stata=TRUE))) ## pstpm2 summary(pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2)) summary(pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2,weights=w)) summary(pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2,weights=w,robust=TRUE)) refresh require(rstpm2) brcancer2 <- transform(brcancer,w=ifelse(hormon==0,10,1)) ##debug(rstpm2:::meat.stpm2) summary(fit <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2,weights=w,robust=TRUE, smooth.formula=~nsx(log(rectime),df=3,stata=TRUE))) summary(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer2, logH.formula=~nsx(log(rectime),df=3,stata=TRUE))) ## code for the SAS PROC ICPHREG examples read.textConnection <- function(text, ...) { conn <- textConnection(text) on.exit(close(conn)) read.table(conn, ...) } hiv <- read.textConnection("0 16 0 0 0 1 15 26 0 0 0 1 12 26 0 0 0 1 17 26 0 0 0 1 13 26 0 0 0 1 0 24 0 0 1 0 6 26 0 1 1 0 0 15 0 1 1 0 14 26 0 1 1 0 12 26 0 1 1 0 13 26 0 1 0 1 12 26 0 1 1 0 12 26 0 1 1 0 0 18 0 1 0 1 0 14 0 1 0 1 0 17 0 1 1 0 0 15 0 1 1 0 3 26 1 0 0 1 4 26 1 0 0 1 1 11 1 0 0 1 13 19 1 0 0 1 0 6 1 0 0 1 0 11 1 1 0 0 6 26 1 1 0 0 0 6 1 1 0 0 2 12 1 1 0 0 1 17 1 1 1 0 0 14 1 1 0 0 0 25 1 1 0 1 2 11 1 1 0 0 0 14 1 1 0 0") names(hiv) <- c("Left","Right","Stage","Dose","CdLow","CdHigh") ##hiv <- transform(hiv, Left=pmax(1e-5,Left)) hiv <- transform(hiv,Event = ifelse(Left==0,2, ifelse(Right>=26,0, 3))) hiv2 <- transform(hiv, Left = ifelse(Event==2,Right, ifelse(Event==0,Left, Left)), Right = ifelse(Event==2,NA, ifelse(Event==0,NA, Right))) library(rstpm2) summary(stpm2(Surv(Left,Right,Event,type="interval")~Stage, data=hiv2, df=2)) summary(stpm2(Surv(Left,Right,Event,type="interval")~Stage, data=hiv2, df=1)) survreg(Surv(Left, Right, Event, type = "interval")~Stage, data=hiv2,dist="exponential") library(rms) psm(Surv(Left, Right, Event, type = "interval")~Stage, data=hiv2,dist="exponential") ## library(rstpm2) my.brcancer = brcancer my.brcancer$left = my.brcancer$rectime my.brcancer$right = ifelse(my.brcancer$censrec==1, my.brcancer$rectime, Inf) test.stpm2.C = rstpm2::stpm2(Surv(left, right, censrec, type = "interval")~hormon, data=my.brcancer,df=3) ## additive model summary(fit <- stpm2(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2, logH.formula=~nsx(rectime,df=3), tvc.formula=~hormon:nsx(rectime,df=3,stata=TRUE))) require(foreign) require(rstpm2) stmixed <- read.dta("http://fmwww.bc.edu/repec/bocode/s/stmixed_example2.dta") system.time(r <- stpm2(Surv(stime,event)~treat,data=stmixed,cluster=stmixed$trial)) system.time(r <- stpm2(Surv(stime,event)~treat,data=stmixed,cluster=stmixed$trial,RandDist="LogN", nodes=20)) summary(r) require(mexhaz) system.time(mix <- mexhaz(formula=Surv(stime,event)~treat, data=stmixed, base="exp.bs",degree=3, random="trial", verbose=0)) ## Frailty model require(rstpm2) require(frailtypack) data(dataAdditive) ##debug(pstpm2) system.time(mod2n <- pstpm2(Surv(t1,t2,event)~var1, data=dataAdditive, RandDist="LogN", ##optimiser="NelderMead", smooth.formula=~s(log(t2)), sp.init=0.07723242, adaptive=TRUE, cluster=dataAdditive$group, nodes=10, trace=0)) summary(mod2n) localargs <- mod2n@args localargs$init <- mod2n@args$init*1.1 localargs$adaptive=TRUE localargs$return_type <- "gradient" .Call("model_output", localargs, package="rstpm2") fdgrad <- function(obj,eps=1e-6) { args <- obj@args args$init <- args$init*1.1 sapply(1:length(args$init), function(i) { args$return_type <- "objective" args$init[i] <- args$init[i]+eps f1 <- .Call("model_output", args, package="rstpm2") args$init[i] <- args$init[i]-2*eps f2 <- .Call("model_output", args, package="rstpm2") (f1-f2)/2/eps }) } fdgrad(mod2n) ## OK for adaptive=FALSE localargs <- mod2n@args localargs$return_type <- "variances" .Call("model_output", localargs, package="rstpm2") localargs$return_type <- "modes" .Call("model_output", localargs, package="rstpm2") system.time(mod2nb <- stpm2(Surv(t1,t2,event)~var1, data=dataAdditive, RandDist="LogN", logH.formula=~ns(log(t2),df=7), cluster=dataAdditive$group, nodes=20)) system.time(mod2g <- pstpm2(Surv(t1,t2,event)~var1, data=dataAdditive, RandDist="Gamma", smooth.formula=~s(log(t2)), cluster=dataAdditive$group)) mod1 <- frailtyPenal(Surv(t1,t2,event)~cluster(group)+var1,data=dataAdditive, n.knots=8,kappa=0.1,cross.validation=TRUE) mod1n <- frailtyPenal(Surv(t1,t2,event)~cluster(group)+var1,data=dataAdditive, n.knots=8,kappa=0.1,cross.validation=TRUE, RandDist="LogN") system.time(mod2 <- stpm2(Surv(t1,t2,event)~var1, # Gamma data=dataAdditive, logH.formula=~ns(t2,df=7), cluster=dataAdditive$group)) system.time(coxph1 <- coxph(Surv(t1,t2,event)~var1+frailty(group,distribution="gaussian"), data=dataAdditive)) summary(coxph1) system.time(mod2n <- stpm2(Surv(t1,t2,event)~var1, data=dataAdditive, RandDist="LogN", optimiser="NelderMead", logH.formula=~ns(log(t2),df=7), cluster=dataAdditive$group, nodes=20)) system.time(mod2nb <- stpm2(Surv(t1,t2,event)~var1, data=dataAdditive, RandDist="LogN", logH.formula=~ns(log(t2),df=7), cluster=dataAdditive$group, nodes=20)) system.time(mod3 <- pstpm2(Surv(t1,t2,event)~var1, data=dataAdditive, RandDist="LogN", criterion="BIC", smooth.formula=~s(log(t2)), cluster=dataAdditive$group, nodes=20)) system.time(mod3 <- coxph(Surv(t1,t2,event)~frailty(group,distribution="gamma")+var1,data=dataAdditive)) summary(mod2) coef2 <- coef(summary(mod2)) theta <- exp(coef2[nrow(coef2),1]) se.logtheta <- coef2[nrow(coef2),2] se.theta <- theta*se.logtheta test.statistic <- 1/se.logtheta pchisq(test.statistic,df=1,lower.tail=FALSE)/2 library(rstpm2) library(ICE) data(ICHemophiliac) ICHemophiliac2 <- transform(as.data.frame(ICHemophiliac),event=3) ## fit1 <- stpm2(Surv(left,right,event,type="interval")~1,data=ICHemophiliac2,df=3) fit1 <- pstpm2(Surv(left,right,event,type="interval")~1,data=ICHemophiliac2, smooth.formula=~s(left,k=7)) estimate <- ickde(ICHemophiliac, m=200, h=0.9) plot(estimate, type="l", ylim=c(0,0.20)) tt <- seq(0,20,length=301)[-1] lines(tt,predict(fit1,newdata=data.frame(left=tt),type="density"),col="blue") ## reg1 <- survreg(Surv(left,right,event,type="interval")~1,data=ICHemophiliac2) ## weibullShape <- 1/reg1$scale ## ## weibullScale <- exp(predict(reg1,type="lp")) ## weibullScale <- predict(reg1); ## tt <- seq(0,20,length=301) ## estimate <- ickde(ICHemophiliac, m=200, h=0.9) ## plot(estimate, type="l", ylim=c(0,0.15)) ## lines(tt,dweibull(tt,weibullShape,weibullScale),lty=2) library(rstpm2) library(survival) data(veteran) ## Re-define variables veteran <- dplyr::mutate(veteran, squamous = ifelse(celltype=="squamous",1,0), smallcell = ifelse(celltype=="smallcell",1,0), adeno = ifelse(celltype=="adeno",1,0), large = ifelse(celltype=="large",1,0), prior.ty = ifelse(prior==0,0,1), trt = ifelse(trt==2,1,0), high = ifelse(karno > 50,1,0)) lung<-subset(veteran, prior==0) ## patients with no prior therapy ## Why no optimal smoothing parameters?? divergence with version 1.3.3 pfit <-pstpm2(Surv(time,status==1) ~ adeno + smallcell + squamous, smooth.formula = ~s(log(time)) + s(karno), data=lung, link.type="PO", trace = 1) ## two-dimensional smoothers x1 <- x2 <- seq(0,1,length=11) dat <- expand.grid(x1=x1,x2=x2) dat$y <- rnorm(nrow(dat)) require(mgcv) fit <- gam(y~s(x1,x2),data=dat) fit$smooth system.time(print(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,type="probit"))) system.time(print(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,type="probit",use.rcpp=FALSE))) system.time(print(fit2 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, type="PO"))) system.time(print(fit2 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, type="PO",use.rcpp=FALSE))) system.time(print(stpm2Gen(Surv(rectime,censrec==1)~hormon,data=brcancer))) system.time(print(stpm2Gen(Surv(rectime,censrec==1)~hormon,data=brcancer, use.rcpp=FALSE))) head(predict(fit,se.fit=TRUE)) head(predict(fit,type="haz",se.fit=TRUE)) brcancer <- brcancer[rep(1:nrow(brcancer),each=500),] system.time(print(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer))) # faster than Stata! system.time(print(pfit <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer))) plot(pfit,newdata=data.frame(hormon=0)) refresh require(rstpm2) data(brcancer) system.time(print(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, tvc=list(hormon=3)))) system.time(print(pfit <- pstpm2(Surv(rectime,censrec==1)~1,data=brcancer,sp.init=c(0.0001,0.0001), tvc.formula=~s(log(rectime),by=hormon)))) print(pstpm2(Surv(rectime,censrec==1)~1,data=brcancer,init=coef(pfit)*100, tvc.formula=~s(log(rectime),by=hormon))) summary(pfit) plot(pfit,newdata=data.frame(hormon=0)) plot(pfit,newdata=data.frame(hormon=1),add=TRUE) plot(pfit,newdata=data.frame(hormon=0),type="haz") plot(pfit,newdata=data.frame(hormon=1),type="haz",add=TRUE) pfit <- pstpm2(Surv(rectime/365,censrec==1)~1,data=brcancer) # OK plot(pfit,newdata=data.frame(hormon=0)) system.time(print(pfit <- pstpm2(Surv(rectime/365,censrec==1)~1,data=brcancer, tvc.formula=~s(log(rectime/365),by=hormon)))) plot(pfit,newdata=data.frame(hormon=0)) # OK times <- seq(500,2000,by=500) meansurv1 <- t(sapply(times,function(time) predict(pfit,transform(brcancer,rectime=time,hormon=1),type="meansurv",se.fit=TRUE))) meansurv0 <- t(sapply(times,function(time) predict(pfit,transform(brcancer,rectime=time,hormon=0),type="meansurv",se.fit=TRUE))) matplot(times,meansurv1,type="l",lty=c(1,2,2),col=1) matlines(times,meansurv0,type="l",lty=c(1,2,2),col=2) meansurvdiff1 <- t(sapply(times,function(time) predict(pfit,transform(brcancer,rectime=time,hormon=0),type="meansurvdiff",var="hormon",se.fit=TRUE))) matplot(times,meansurvdiff1,type="l",lty=c(1,2,2),col=1) system.time(print(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,control=list(parscale=100,reltol=1e-10),use.rcpp=FALSE))) summary(fit) system.time(print(fit2 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,control=list(parscale=10000.0),reltol=1e-10,init=0.0001*coef(fit)))) summary(fit2) plot(fit2,newdata=data.frame(hormon=1)) brcancerN <- brcancer[rep(1:nrow(brcancer),each=100),] system.time(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancerN,use.rcpp=FALSE, control=list(parscale=0.1,reltol=1e-10))) summary(fit) system.time(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancerN,use.rcpp=TRUE)) summary(fit) ###### penalised likelihood ## environment(pstpm2) <- environment(rstpm2::pstpm2) ## require(rstpm2) try(detach("package:rstpm2",unload=TRUE)) ## source("/home/MEB/marcle/src/R/rstpm2/R/pm2-3.R") refresh require(rstpm2) data(brcancer) brcancer$recyear <- brcancer$rectime/365 system.time(fit0 <- stpm2(Surv(recyear,censrec==1)~hormon,data=brcancer,df=5)) system.time(pfit0 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer,sp.init=1)) system.time(pfit0.1 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, smooth.formula=~s(log(recyear),k=15),sp.init=10,alpha=2)) system.time(pfit1.1 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, smooth.formula=~s(log(recyear)),sp.init=10,criterion="BIC")) system.time(pfit2 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, smooth.formula=~s(recyear),sp.init=10)) plot(pfit0,newdata=data.frame(hormon=1),line.col="red",type="hazard") plot(pfit0.1,newdata=data.frame(hormon=1),line.col="blue",add=TRUE,type="hazard") plot(pfit1.1,newdata=data.frame(hormon=1),line.col="orange",add=TRUE,type="hazard") plot(fit0,newdata=data.frame(hormon=1),line.col="green",type="hazard",add=TRUE) plot(pfit2,newdata=data.frame(hormon=1),line.col="black",type="hazard",add=TRUE) plot(pfit0,newdata=data.frame(hormon=1),line.col="red") plot(pfit0.1,newdata=data.frame(hormon=1),line.col="blue",add=TRUE) plot(pfit1.1,newdata=data.frame(hormon=1),line.col="pink",add=TRUE) plot(fit0,newdata=data.frame(hormon=1),line.col="green",add=TRUE) plot(pfit2,newdata=data.frame(hormon=1),line.col="black",add=TRUE) system.time(pfit0.check <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, sp=pfit0@sp, use.rcpp=FALSE)) system.time(pfit0.check2 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, sp=pfit0@sp)) summary(pfit0) summary(pfit0.check) summary(pfit0.check2) system.time(pfit0 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(log(recyear),k=30),sp.init=1)) system.time(pfit0.1 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(log(recyear),k=30),sp.init=1,criterion="BIC")) plot(pfit0,newdata=data.frame(hormon=1),line.col="red",type="hazard") plot(pfit0.1,newdata=data.frame(hormon=1),line.col="blue",add=TRUE,type="hazard") system.time(pfit1 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(log(recyear),k=30),sp=10,pen="h", smoother.parameters=list("log(recyear)"=list(var="recyear", inverse=exp, transform=log)))) plot(pfit1,newdata=data.frame(hormon=1),line.col="green",add=TRUE,type="hazard") system.time(pfit1 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(log(recyear),k=30),sp=10,criterion="GCV")) system.time(pfit2 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(log(recyear),k=20),sp=10,criterion="BIC")) plot(pfit1,newdata=data.frame(hormon=1),type="hazard",ylim=c(0,0.25)) plot(pfit2,newdata=data.frame(hormon=1),add=TRUE,line.col="blue",type="hazard") system.time(pfit1 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(log(recyear),k=30),sp=1,criterion="GCV")) system.time(pfit2 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(recyear,k=20),sp=1,use.rcpp=F,penalty="h")) system.time(pfit2 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(recyear,k=20),sp=1,penalty="h")) plot(pfit2,newdata=data.frame(hormon=1),type="hazard") system.time(pfit2 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(recyear,k=30),sp=1,use.rcp=FALSE)) plot(pfit1,newdata=data.frame(hormon=1),type="hazard") plot(pfit2,newdata=data.frame(hormon=1),type="hazard") system.time(pfit2.0 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(recyear,k=30),sp=0.055,penalty="h",cr="GCV")) system.time(pfit2 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(recyear,k=30),sp=0.055,use.rcp=FALSE,penalty="h")) rstpm2:::gcv(pfit2) plot(pfit2,newdata=data.frame(hormon=1),line.col="red",add=TRUE,type="hazard") plot(pfit2.0,newdata=data.frame(hormon=1),line.col="green",add=TRUE,type="hazard") require(frailtypack) fpack1 <- frailtyPenal(Surv(recyear,censrec==1)~hormon, data=brcancer, cross.validation=TRUE, n.knots=10, kappa1=0.1) plot(fpack1) system.time(pfit1 <- pstpm2(Surv(recyear,censrec==1)~hormon+x3,data=brcancer, logH.formula=~s(log(recyear),k=20)+s(x3),sp=c(0.1,0.1))) system.time(pfit1 <- pstpm2(Surv(recyear,censrec==1)~hormon+x3,data=brcancer, logH.formula=~s(log(recyear),k=20)+s(x3))) system.time(pfit1 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(log(recyear),k=20)+s(x3))) plot(pfit1,newdata=data.frame(hormon=1,x3=20)) plot(pfit1,newdata=data.frame(hormon=0,x3=20),type="hazard") plot(pfit1,newdata=data.frame(hormon=1,x3=20),type="hazard",add=TRUE,line.col="blue",lty=1) summary(pfit1) brcancerN <- brcancer[rep(1:nrow(brcancer),each=100),] system.time(pfit1 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancerN, logH.formula=~s(log(recyear),k=20))) plot(pfit1,newdata=data.frame(hormon=1)) pfit1@gam$sp par(mfrow=c(2,2)) plot(pfit1,newdata=data.frame(hormon=1)) summary(pfit1@gam)$edf rstpm2:::gcv(pfit1) rstpm2:::gcvc(pfit1,nn) sps <- as.list(10^(seq(-4,2,by=0.5))) system.time(pfit2 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(log(recyear),k=20), sp=sps)) gcvs <- lapply(pfit2,rstpm2:::gcv) plot(sps,unlist(gcvs),type="l",log="x") plot(sapply(gcvs,attr,"negll"),sapply(gcvs,attr,"trace"),type="l",asp=1) plot(sapply(gcvs,attr,"trace"),sapply(gcvs,attr,"negll"),type="l",asp=1) plot(sps,sapply(pfit2,rstpm2:::aicc,nn=nn),type="l",log="x") plot(sps,sapply(pfit2,rstpm2:::bic,nn=nn),type="l",log="x") ##gcvc brcancer$recyear <- brcancer$rectime/365 sps <- 10^(seq(-4,2,by=0.5)) gcvcs <- sapply(sps, function(sp) { gcvc(pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(recyear,k=30), sp=sp),length(brcancer$recyear)) }) plot(sps,gcvcs,type="l",log="x") ###bic brcancer$recyear <- brcancer$rectime/365 sps <- 10^(seq(-4,2,by=0.5)) gcvcs <- sapply(sps, function(sp) { bic(pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(recyear,k=30), sp=sp),length(brcancer$recyear)) }) plot(sps,gcvcs,type="l",log="x") ###aicc brcancer$recyear <- brcancer$rectime/365 sps <- 10^(seq(-4,2,by=0.5)) gcvcs <- sapply(sps, function(sp) { aicc(pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(recyear,k=30), sp=sp),length(brcancer$recyear)) }) plot(sps,gcvcs,type="l",log="x") ######################### ### penalty functions require(mgcv) require(gaussquad) ## Outline: ## get w, lambda, X0, X1, X2, X3 ## calculate s0, s1, s2, s3 ## calculate h2 and pfun=integrate(h2^2,t) ## calculate dh2sq.dbeta and dpfun=integrate(dh2sq.dbeta,t) ## ## calculate w, lambda, X0, X1, X2, X3 derivativeDesign <- function (functn, lower = -1, upper = 1, rule = NULL, ...) { pred <- if (length(list(...)) && length(formals(functn)) > 1) function(x) functn(x, ...) else functn if (is.null(rule)) rule <- ## gaussquad::legendre.quadrature.rules(20)[[20]] data.frame(x = c(0.993128599185095, 0.963971927277914, 0.912234428251326, 0.839116971822219, 0.746331906460151, 0.636053680726515, 0.510867001950827, 0.37370608871542, 0.227785851141646, 0.0765265211334977, -0.0765265211334974, -0.227785851141645, -0.373706088715418, -0.510867001950827, -0.636053680726516, -0.746331906460151, -0.839116971822219, -0.912234428251326, -0.963971927277913, -0.993128599185094), w = c(0.0176140071391522, 0.040601429800387, 0.0626720483341092, 0.0832767415767053, 0.101930119817241, 0.11819453196152, 0.131688638449176, 0.14209610931838, 0.149172986472603, 0.152753387130726, 0.152753387130726, 0.149172986472603, 0.142096109318381, 0.131688638449175, 0.11819453196152, 0.10193011981724, 0.0832767415767068, 0.0626720483341075, 0.0406014298003876, 0.0176140071391522)) lambda <- (upper - lower)/(2) mu <- (lower + upper)/(2) x <- lambda * rule$x + mu w <- rule$w eps <- .Machine$double.eps^(1/8) X0 <- pred(x) X1 <- (-pred(x+2*eps)+8*pred(x+eps)-8*pred(x-eps)+pred(x-2*eps))/12/eps X2 <- (-pred(x+2*eps)/12+4/3*pred(x+eps)-5/2*pred(x)+4/3*pred(x-eps)-pred(x-2*eps)/12)/eps/eps X3 <- (-pred(x+3*eps)/8+pred(x+2*eps)-13/8*pred(x+eps)+ 13/8*pred(x-eps)-pred(x-2*eps)+pred(x-3*eps)/8)/eps/eps/eps return(list(x=x,w=w,lambda=lambda,X0=X0,X1=X1,X2=X2,X3=X3)) } hpfun <- function(beta,design) { lapply(design,function(obj) { s0 <- as.vector(obj$X0 %*% beta) s1 <- as.vector(obj$X1 %*% beta) s2 <- as.vector(obj$X2 %*% beta) s3 <- as.vector(obj$X3 %*% beta) h2 <- (s3+3*s1*s2+s1^3)*exp(s0) obj$lambda*sum(obj$w*h2^2) }) } hdpfun <- function(beta,design) { lapply(design, function(obj) { s0 <- as.vector(obj$X0 %*% beta) s1 <- as.vector(obj$X1 %*% beta) s2 <- as.vector(obj$X2 %*% beta) s3 <- as.vector(obj$X3 %*% beta) h2 <- (s3+3*s1*s2+s1^3)*exp(s0) dh2sq.dbeta <- 2*h2*(exp(s0)*(obj$X3+3*(obj$X1*s2+obj$X2*s1)+3*s1^2*obj$X1)+h2*obj$X0) obj$lambda*colSums(obj$w*dh2sq.dbeta) }) } smootherDesign <- function(gamobj,data) { d <- data[1,,drop=FALSE] ## how to get mean prediction values, particularly for factors? makepred <- function(var) { function(value) { d <- d[rep(1,length(value)),] d[[var]] <- value predict(gamobj,newdata=d,type="lpmatrix") } } lapply(gamobj$smooth, function(smoother) { var <- smoother$term pred <- makepred(var) derivativeDesign(pred,lower=min(data[[var]]),upper=max(data[[var]])) }) } ## example data d <- within(data.frame(x=seq(0,1,length=301)), { mu <- exp(x) y <- rnorm(301,mu,0.01) }) fit <- gam(y~s(x),data=d,family=gaussian(link="log")) beta <- coef(fit) design <- smootherDesign(fit,d) hpfun(beta,design) hdpfun(beta,design) ## Testing... require(mgcv) d <- within(data.frame(x=seq(0,2*pi,length=301)), { mu <- sin(x) dmu <- cos(x) y <- rnorm(301,mu,0.001) }) fit <- gam(y~s(x),data=d) mat <- predict(fit,type="lpmatrix") with(d,plot(x,y)) with(d,lines(x,mu,lwd=2)) with(d,lines(x,predict(fit),col="blue",lwd=2)) par(mfrow=c(3,2)) pred <- function(eps,obj=fit,data=d,var="x") { nd <- d nd[[var]] <- nd[[var]]+eps predict(obj,newdata=nd,type="lpmatrix") } ## First derivative eps <- .Machine$double.eps^(1/8) matD <- (pred(eps) - pred(-eps)) / 2 / eps with(d,plot(x,dmu,lwd=2,type="l")) with(d,lines(x,matD %*% coef(fit),col="blue",lwd=2)) ## ## 1/12 −2/3 0 2/3 −1/12 eps <- .Machine$double.eps^(1/8) matD <- (-pred(2*eps)+8*pred(eps)-8*pred(-eps)+pred(-2*eps))/12/eps with(d,plot(x,dmu,lwd=2,type="l")) with(d,lines(x,matD %*% coef(fit),col="blue",lwd=2)) ## ## Second derivative eps <- .Machine$double.eps^(1/8) matD2 <- (pred(eps)-2*pred(0)+pred(-eps))/eps/eps with(d,plot(x,-mu,lwd=2,type="l")) with(d,lines(x,matD2 %*% coef(fit),col="blue",lwd=2)) ## ## −1/12 4/3 −5/2 4/3 −1/12 eps <- .Machine$double.eps^(1/8) matD2 <- (-pred(2*eps)/12+4/3*pred(eps)-5/2*pred(0)+4/3*pred(-eps)-pred(-2*eps)/12)/eps/eps with(d,plot(x,-mu,lwd=2,type="l")) with(d,lines(x,matD2 %*% coef(fit),col="blue",lwd=2)) ## ## Third derivatives eps <- .Machine$double.eps^(1/8) matD3 <- (pred(2*eps)- 2*pred(eps)+ 2*pred(-eps)- pred(-2*eps))/2/eps/eps/eps with(d,plot(x,-dmu,lwd=2,type="l")) with(d,lines(x,matD3 %*% coef(fit),col="blue",lwd=2)) ## ## 1/8 −1 13/8 0 −13/8 1 −1/8 eps <- .Machine$double.eps^(1/8) matD3 <- (-pred(3*eps)/8+pred(2*eps)-13/8*pred(eps)+ 13/8*pred(-eps)-pred(-2*eps)+pred(-3*eps)/8)/eps/eps/eps with(d,plot(x,-dmu,lwd=2,type="l")) with(d,lines(x,matD3 %*% coef(fit),col="blue",lwd=2)) ## (browse-url "http://en.wikipedia.org/wiki/Finite_difference_coefficients") require(mgcv) data <- data.frame(x=1:10,y=1:10) fit <- gam(y~s(x,k=5,bs="ps"),data=data) round(cbind(1,(spline.des(knots=fit$smooth[[1]]$knots,x=data$x)$design %*% qr.Q(attr(fit$smooth[[1]],"qrc"),complete=TRUE))[,-1]) - predict(fit,type="lpmatrix"),1e-10) round(cbind(1,(spline.des(knots=fit$smooth[[1]]$knots,x=5:6)$design %*% qr.Q(attr(fit$smooth[[1]],"qrc"),complete=TRUE))[,-1]) - predict(fit,newdata=data.frame(x=5:6),type="lpmatrix"),1e-10) cbind(0,(spline.des(knots=fit$smooth[[1]]$knots,x=data$x,derivs=rep(1,nrow(data)))$design %*% qr.Q(attr(fit$smooth[[1]],"qrc"),complete=TRUE))[,-1]) - (predict(fit,newdata=transform(data,x=x+1e-5),type="lpmatrix")- (predict(fit,newdata=transform(data,x=x-1e-5),type="lpmatrix")))/2e-5 #######Optimal fitting####### ###GCV,AICC,BIC or GCVC to choose smoothing parameters### opt.val<-function(pstpm2.fit,nn){ like<-pstpm2.fit@like Hl<-numDeriv::hessian(like,coef(pstpm2.fit)) Hinv<-vcov(pstpm2.fit) trace<-sum(diag(Hinv%*%Hl)) loglike<-(like(coef(pstpm2.fit)))/nn gcv<-(trace-loglike)/nn aicc<-(-2*loglike+2*trace*nn/(nn-trace-1))/nn bic<-(-2*loglike+trace*log(nn))/nn gcvc<-(-2*loglike-2*nn*log(1-trace/nn))/nn out<-c(loglike,gcv,aicc,bic,gcvc) return(out) } ############################### ############################### # setClass("opt.fit", representation( # num.ind = "numeric", # cr = "numeric", # tops = "data.frame", # sp.opt = "numeric", # fun.min = "numeric" # ), # contains="pstpm2") # ######################### # opt.fit<-function(formula,data,logH.formula,sp.low,sp.upp,num.sp,timeVar = NULL){ # ###number of individual # num.ind <- nrow(data) # #####Censoring rate#### # ## set up the data # ## ensure that data is a data frame # data <- get_all_vars(formula, data) # # ## parse the function call # # Call <- match.call() # # mf <- match.call(expand.dots = FALSE) # # m <- match(c("formula", "data", "subset", "contrasts", "weights"), # # names(mf), 0L) # # mf <- mf[c(1L, m)] # stopifnot(length(lhs(formula))>=2) # eventExpr <- lhs(formula)[[length(lhs(formula))]] # delayed <- length(lhs(formula))==4 # timeExpr <- lhs(formula)[[if (delayed) 3 else 2]] # expression # if (is.null(timeVar)) # timeVar <- all.vars(timeExpr) # time <- eval(timeExpr, data) # if (delayed) { # time0Expr <- lhs(formula)[[2]] # time0 <- eval(time0Expr, data) # } # event <- eval(eventExpr,data) # cr <- sum(event > min(event))/num.ind # # # # cr=table(lhs(formula)[[if (delayed) 4 else 3]][2])/nn # ##nn<-length(brcancer$recyear) # # system.time(pfit1 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, # # logH.formula=~s(recyear,k=30), sp=1e-1)) # # plot(pfit1,newdata=data.frame(hormon=1)) # # #sps <- 10^(seq(-4,4,by=0.5)) # # sp.low=10^-4 # # sp.upp=4000 # # num.sp=30 # sps <- 10^(seq(log10(sp.low),log10(sp.upp),length=num.sp)) # optvals <- sapply(sps, function(sp) { # opt.val(pstpm2(formula,data,logH.formula=NULL, sp=sp),num.ind) # }) # tops<-t(optvals) # colnames(tops) <- c("loglike","gcv","aicc","bic","gcvc") # rownames(tops) <- rownames(tops, do.NULL = FALSE, prefix = "Obs.") # # tops<-as.data.frame(tops) # tops<-as.data.frame(tops) # ####Plot######### # #par(mfrow=c(1,2)) # ###to choose optimal smoothing parameter ### # ind.min <- sapply(2:5,function(x) order(tops[,x])[1]) # sp.opt <- sps[ind.min] # obj<-pstpm2(formula,data,logH.formula=NULL, sp=sp.opt[1]) # fun.min <- sapply(2:5,function(x) min(tops[,x])) # # if(ind.min[1]==1) # # stop("Hit left boundary, make sp.low smaller.") # # if(ind.min[1]==num.sp) # # stop("Hit right boundary, make sp.upp bigger.") # # with(tops,matplot(sps,tops[,-1],type="l",col=1:4,lty=1:4,xlab="x",ylab="y")) # # points(sp.opt,fun.min,pch=4,lwd=2,cex=1.2) # # lines(sp.opt,fun.min,err=-1,col=1:4,lty=1:4) # # ###Estimate final model with optimal value of sp### # # # # # summary(pfit.obj) # ######################################### # out <- as(obj,"opt.fit") # out <- new("opt.fit", # coef = pstpm2@coef, # fullcoef = pstpm2@fullcoef, # vcov = pstpm2@vcov, # min = pstpm2@min, # details = pstpm2@details, # minuslogl = pstpm2@minuslogl, # method = pstpm2@method, # data = data, # formula = pstpm2@formula, # optimizer = "optim", # xlevels = .getXlevels(pstpm2@terms,pstpm2@model.frame), # ##contrasts = attr(X, "contrasts"), # contrasts = NULL, # wrong! # logli = pstpm2@logli, # ##weights = weights, # Call = pstpm2@Call, # terms = pstpm2@terms, # model.frame = pstpm2@model.frame, # gam = pstpm2@gam, # timeVar = pstpm2@timeVar, # timeExpr = pstpm2@timeExpr, # like = pstpm2@like, # negll<-pstpm2@negll, # call.formula = pstpm2@call.formula, # x = pstpm2@x, # xd = pstpm2@xd, # termsd = pstpm2@termsd, # wrong! # y = pstpm2@y, # num.ind = num.ind, # cr = cr, # tops = tops, # sp.opt = sp.opt, # fun.min = fun.min) # # return(out) # } #####load data#### load("brcancer.rda") data(brcancer) brcancer$recyear <- brcancer$rectime/365 ####model fit### opt.fit(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(recyear), sp.low=10^-4,sp.upp=4000, num.sp=30,timeVar = NULL) # ###methods for Plot ### # setMethod( # f= "plot", # signature(x="opt.fit", y="missing"), # definition=function (x,y,...){ # matplot(x@sps,x@tops[,-1],type="l",col=1:4,lty=1:4,xlab="",ylab="") # points(x@sp.opt,x@fun.min,pch=4,lwd=2,cex=1.2) # lines(x@sp.opt,x@fun.min,err=-1,col=1:4,lty=1:4) # } # ) # ####methods for print#### # setMethod ("print",signature(x="opt.fit", y="missing"), # function(x,...){ # cat("*** Class opt.fit, method Print *** \n") # cat("* Optimal SP ="); print (x@sp.opt) # cat("* GCV = \n"); print (x@fun.min[1]) # cat("******* End Print (opt.fit) ******* \n") # } # ) ########################## aplot <- function (x, y, ...) { .local <- function (x, y, newdata, type = "surv", xlab = NULL, ylab = NULL, line.col = 1, ci.col = "grey", lty = par("lty"), add = FALSE, ci = !add, rug = !add, var = NULL, ...) { browser() y <- predict(x, newdata, type = type, var = var, grid = TRUE, se.fit = TRUE) if (is.null(xlab)) xlab <- deparse(x@timeExpr) if (is.null(ylab)) ylab <- switch(type, hr = "Hazard ratio", hazard = "Hazard", surv = "Survival", sdiff = "Survival difference", hdiff = "Hazard difference", cumhaz = "Cumulative hazard") xx <- attr(y, "newdata") xx <- eval(x@timeExpr, xx) if (!add) matplot(xx, y, type = "n", xlab = xlab, ylab = ylab, ...) if (ci) polygon(c(xx, rev(xx)), c(y[, 2], rev(y[, 3])), col = ci.col, border = ci.col) lines(xx, y[, 1], col = line.col, lty = lty) if (rug) { Y <- x@y eventTimes <- Y[Y[, ncol(Y)] == 1, ncol(Y) - 1] rug(eventTimes, col = line.col) } return(invisible(y)) } .local(x, y, ...) } aplot(fit,newdata=data.frame(hormon=1)) apredict <- function (object, ...) { .local <- function (object, newdata = NULL, type = c("surv", "cumhaz", "hazard", "hr", "sdiff", "hdiff", "loghazard", "link"), grid = FALSE, seqLength = 300, se.fit = FALSE, link = NULL, exposed = incrVar(var), var, ...) { local <- function(object, newdata = NULL, type = "surv", exposed) { ## browser() tt <- object@terms if (is.null(newdata)) { X <- object@x XD <- object@xd y <- object@y time <- as.vector(y[, ncol(y) - 1]) } else { lpfunc <- function(delta, fit, data, var) { data[[var]] <- data[[var]] + delta lpmatrix.lm(fit, data) } X <- lpmatrix.lm(object@lm, newdata) XD <- grad(lpfunc, 0, object@lm, newdata, object@timeVar) XD <- matrix(XD, nrow = nrow(X)) if (type %in% c("hazard", "hr", "sdiff", "hdiff", "loghazard")) { time <- eval(object@timeExpr, newdata) } if (object@delayed) { newdata0 <- newdata newdata0[[object@timeVar]] <- newdata[[object@time0Var]] X0 <- lpmatrix.lm(object@lm, newdata0) } if (type %in% c("hr", "sdiff", "hdiff")) { if (missing(exposed)) stop("exposed needs to be specified for type in ('hr','sdiff','hdiff')") newdata2 <- exposed(newdata) X2 <- lpmatrix.lm(object@lm, newdata2) XD2 <- grad(lpfunc, 0, object@lm, newdata2, object@timeVar) XD2 <- matrix(XD, nrow = nrow(X)) } } beta <- coef(object) cumHaz = as.vector(exp(X %*% beta)) Sigma = vcov(object) if (type == "link") { return(as.vector(X %*% beta)) } if (type == "cumhaz") { if (object@delayed) return(cumHaz - as.vector(X0 %*% beta)) else return(cumHaz) } if (type == "surv") { return(exp(-cumHaz)) } if (type == "sdiff") return(as.vector(exp(-exp(X2 %*% beta))) - exp(-cumHaz)) if (type == "hazard") { return(as.vector(XD %*% beta) * cumHaz) } if (type == "loghazard") { return(as.vector(log(XD %*% beta)) + log(cumHaz)) } if (type == "hdiff") { return(as.vector((XD2 %*% beta) * exp(X2 %*% beta) - (XD %*% beta)/time * cumHaz)) } if (type == "hr") { cumHazRatio = exp((X2 - X) %*% beta) return(as.vector((XD2 %*% beta)/(XD %*% beta) * cumHazRatio)) } } type <- match.arg(type) if (is.null(newdata) && type %in% c("hr", "sdiff", "hdiff")) stop("Prediction using type in ('hr','sdiff','hdiff') requires newdata to be specified.") if (grid) { Y <- object@y event <- Y[, ncol(Y)] == 1 time <- object@data[[object@timeVar]] eventTimes <- time[event] X <- seq(min(eventTimes), max(eventTimes), length = seqLength)[-1] data.x <- data.frame(X) names(data.x) <- object@timeVar newdata <- merge(newdata, data.x) } pred <- if (!se.fit) { local(object, newdata, type = type, exposed = exposed, ...) } else { if (is.null(link)) link <- switch(type, surv = "cloglog", cumhaz = "log", hazard = "log", hr = "log", sdiff = "I", hdiff = "I", loghazard = "I", link = "I") predictnl(object, local, link = link, newdata = newdata, type = type, exposed = exposed, ...) } attr(pred, "newdata") <- newdata return(pred) } .local(object, ...) } environment(apredict) <- environment(stpm2) dim(apredict(fit,newdata=data.frame(hormon=1),grid=T)) # n=300 or 299?? apredict(fit,newdata=data.frame(hormon=1),grid=T) dim(apredict(fit,newdata=data.frame(hormon=1),grid=T,se.fit=T)) # n=300 or 299?? apredict(fit,newdata=data.frame(hormon=1),grid=T,se.fit=T) debug(rstpm2:::numDeltaMethod) try(suppressWarnings(detach("package:rstpm2",unload=TRUE)),silent=TRUE) require(rstpm2) data(brcancer) system.time(fit2 <- stpm2(Surv(rectime/365,censrec==1)~hormon,data=brcancer,df=5)) system.time(fit3 <- pstpm2(Surv(rectime/365,censrec==1)~hormon,data=brcancer,use.gr=F)) plot(fit3,newdata=data.frame(hormon=0),type="hazard") plot(fit2,newdata=data.frame(hormon=0),type="hazard",add=TRUE,ci=FALSE,rug=FALSE, line.col=2) ## penalised likelihood brcancer$recyear <- brcancer$rectime/365 system.time(pfit1 <- pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(log(recyear),k=30), sp=1e-1)) system.time(fit1 <- stpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~ns(log(recyear),df=4))) plot(pfit1,newdata=data.frame(hormon=1)) plot(fit1,newdata=data.frame(hormon=1),lty=2,add=TRUE,ci=F) rstpm2:::gcv(pfit1) sps <- 10^(seq(-4,2,by=0.5)) gcvs <- sapply(sps, function(sp) { rstpm2:::gcv(pstpm2(Surv(recyear,censrec==1)~hormon,data=brcancer, logH.formula=~s(recyear,k=30), sp=sp)) }) plot(sps,gcvs,type="l",log="x") ## system.time(fit <- rstpm2:::stpm2Old(Surv(rectime,censrec==1)~hormon,df=5,data=brcancer)) system.time(fit2 <- stpm2(Surv(rectime,censrec==1)~hormon,df=5,data=brcancer)) system.time(fit3 <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer)) ## plot(fit3,newdata=data.frame(hormon=0),type="hazard") plot(fit2,newdata=data.frame(hormon=0),type="hazard",add=TRUE,line.col=2,ci=FALSE) ## system.time(fit <- stpm2(Surv(rectime/365,censrec==1)~hormon,df=5,data=brcancer)) system.time(fit2 <- rstpm2:::stpm2Old(Surv(rectime/365,censrec==1)~hormon,df=5,data=brcancer)) ## system.time(fit3 <- pstpm2(Surv(rectime/365,censrec==1)~hormon,data=brcancer)) plot(fit3,newdata=data.frame(hormon=0),type="hazard") ## plot(fit2,newdata=data.frame(hormon=0),type="hazard",add=TRUE,line.col=2,ci=FALSE) ## plot(fit.tvc,newdata=data.frame(hormon=1),type="hr",var="hormon") ## summary(fit.tvc <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3, tvc=list(hormon=3))) anova(fit,fit.tvc) # compare with and without tvc summary(fit.tvc <- stpm2Old(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3, tvc=list(hormon=3))) anova(fit,fit.tvc) # compare with and without tvc ## plot(fit.tvc,newdata=data.frame(hormon=0),type="hr",var="hormon") # no lines method: use add=TRUE plot(fit.tvc,newdata=data.frame(hormon=1),type="hr",var="hormon", add=TRUE,ci=FALSE,line.col=2) ## ## plain: identical results (good) stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer) stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, logH.formula=~ns(log(rectime),3)) rstpm2:::stpm2Old(Surv(rectime,censrec==1)~hormon,data=brcancer) ## cure: identical (requires bhazard to be sensible) rate0 <- 10^(-5+brcancer$x1/100) (fit1 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=2,cure=T,bhazard=rate0)) (fit2 <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, logH.formula=~nsx(log(rectime),df=2,cure=T,log=T),bhazard=rate0)) (fit3 <- rstpm2:::stpm2Old(Surv(rectime,censrec==1)~hormon,data=brcancer,cure=T,df=2,bhazard=rate0)) (fit4 <- rstpm2:::stpm2Old(Surv(rectime,censrec==1)~hormon,data=brcancer,bhazard=rate0, logH.formula=~nsx(log(rectime),2,cure=T))) ##### examples ##### require(foreign) if (FALSE) { # testing in open code install.packages("bbmle", repos="http://R-Forge.R-project.org") require(bbmle) brcancer=read.dta("brcancer.dta") brcancer=transform(brcancer,rate0=10^(-5+x1/100)) } try(suppressWarnings(detach("package:bbmle",unload=TRUE)),silent=TRUE) try(suppressWarnings(detach("package:rstpm2",unload=TRUE)),silent=TRUE) ## require(rstpm2) data(brcancer) summary(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, logH.formula=~nsx(log(rectime),df=3,stata=TRUE))) brcancer <- transform(brcancer,w=10) summary(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, weights=w,robust=TRUE, logH.formula=~nsx(log(rectime),df=3,stata=TRUE))) ## sandwich variance estimator (from the sandwich package) coeftest.stpm2 <- function (x, vcov. = NULL, df = NULL, ...) { est <- coef(x) if (is.null(vcov.)) se <- vcov(x) else { if (is.function(vcov.)) se <- vcov.(x) else se <- vcov. } se <- sqrt(diag(se)) if (!is.null(names(est)) && !is.null(names(se))) { anames <- names(est)[names(est) %in% names(se)] est <- est[anames] se <- se[anames] } tval <- as.vector(est)/se pval <- 2 * pnorm(abs(tval), lower.tail = FALSE) cnames <- c("Estimate", "Std. Error", "z value", "Pr(>|z|)") mthd <- "z" rval <- cbind(est, se, tval, pval) colnames(rval) <- cnames class(rval) <- "coeftest" attr(rval, "method") <- paste(mthd, "test of coefficients") return(rval) } ## weights.stpm2 <- ## function (object, ...) ## { ## wts <- object@weights ## if (is.null(wts)) ## wts ## else napredict(object@na.action, wts) ## } require(sandwich) coxph1 <- coxph(Surv(rectime,censrec==1)~hormon,data=brcancer) update(coxph1,robust=TRUE) sandwich(coxph1) sandwich.stpm2(fit) # hurrah! ## require(lmtest) ## coeftest(coxph1) ## coeftest(coxph1,vcov.=sandwich(coxph1)) ## coeftest(fit,sandwich(fit)) sandwich(fit) sandwich(fit,bread.=bread.stpm2,meat.=meat.stpm2) ## some predictions head(predict(fit,se.fit=TRUE,type="surv")) head(predict(fit,se.fit=TRUE,type="hazard")) ## some plots plot(fit,newdata=data.frame(hormon=0),type="hazard") ## time-varying coefficient summary(fit.tvc <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3, tvc=list(hormon=3))) anova(fit,fit.tvc) # compare with and without tvc plot(fit.tvc,newdata=data.frame(hormon=0),type="hr",var="hormon") # no lines method: use add=TRUE plot(fit.tvc,newdata=data.frame(hormon=1),type="hr",var="hormon", add=TRUE,ci=FALSE,line.col=2) plot(fit.tvc,newdata=data.frame(hormon=0),type="sdiff",var="hormon") plot(fit.tvc,newdata=data.frame(hormon=0),type="hdiff",var="hormon") plot(fit.tvc,newdata=data.frame(hormon=0),type="hazard") plot(fit.tvc,newdata=data.frame(hormon=1),type="hazard",line.col=2,ci=FALSE,add=TRUE) ## trace("predict", browser, exit=browser, signature = "stpm2") set.seed(10101) brcancer <- transform(brcancer, x=rlnorm(nrow(brcancer))) summary(fit.tvc <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3, tvc.formula=~hormon:nsx(log(rectime),df=3))) ## cure model ## cf. http://www.pauldickman.com/survival/solutions/q37.do ### Data setup require(foreign) colon <- read.dta("http://www.pauldickman.com/survival/colon.dta") popmort <- read.dta("http://www.pauldickman.com/survival/popmort.dta") brcancer <- read.dta("http://www.stata-press.com/data/r11/brcancer.dta") popmort <- transform(popmort, age=`_age`, year=`_year`, `_age`=NULL, `_year`=NULL) save(colon,file="c:/usr/src/R/rstpm2/pkg/data/colon.rda") save(popmort,file="c:/usr/src/R/rstpm2/pkg/data/popmort.rda") save(brcancer,file="c:/usr/src/R/rstpm2/pkg/data/brcancer.rda") ## require(rstpm2) popmort2 <- transform(popmort,exitage=age,exityear=year,age=NULL,year=NULL) colon2 <- within(colon, { status <- ifelse(surv_mm>120.5,1,status) tm <- pmin(surv_mm,120.5)/12 exit <- dx+tm*365.25 sex <- as.numeric(sex) exitage <- pmin(floor(age+tm),99) exityear <- floor(yydx+tm) }) colon2 <- merge(colon2,popmort2) ## compare relative survival without and with cure summary(fit0 <- stpm2(Surv(tm,status %in% 2:3)~I(year8594=="Diagnosed 85-94"), data=colon2, bhazard=colon2$rate, df=5)) ## CHECKED: same year8594 estimate as Stata head(predict(fit0)) ## estimate of failure at the end of follow-up 1-predict(fit0,data.frame(year8594 = unique(colon2$year8594),tm=max(colon2$tm)),type="surv",se.fit=TRUE) plot(fit0,newdata=data.frame(year8594 = "Diagnosed 85-94"),ylim=0:1) plot(fit0,newdata=data.frame(year8594 = "Diagnosed 75-84"),add=TRUE,line.col="red",rug=FALSE) ## summary(fit <- stpm2(Surv(tm,status %in% 2:3)~I(year8594=="Diagnosed 85-94"), data=colon2, bhazard=colon2$rate, df=5,cure=TRUE)) head(predict(fit)) ## cure fractions (I need to add this to the predict function) 1-predict(fit,data.frame(year8594 = unique(colon2$year8594),tm=max(colon2$tm)),type="surv",se.fit=TRUE) newdata1 <- data.frame(year8594 = "Diagnosed 85-94") plot(fit,newdata=newdata1,add=TRUE,ci=FALSE,lty=2,rug=FALSE) plot(fit,newdata=data.frame(year8594="Diagnosed 75-84"),add=TRUE,rug=FALSE,line.col="red",ci=FALSE,lty=2) plot(fit,newdata=newdata1,type="hazard") plot(fit,newdata=newdata1,type="cumhaz") ## http://www.pauldickman.com/survival/r/melanoma.relsurv.r library(foreign) library(survival) library(relsurv) # Download rates files from http://www.mortality.org/ # # 6. Life Tables By year of death (period) 1x1 # Save tables by gender in text files # The transrate.hmd command translate these to R ratetables Finlandpop <- transrate.hmd("c:/usr/tmp/mltper_1x1.txt","c:/usr/tmp/fltper_1x1.txt") ## The relsurv package requires time in days (exit and dx are dates of exit and diagnosis) colon3 <- transform(colon2,tm.dd=as.numeric(exit-dx)) colon3$sex <- ifelse(colon2$sex==1,"male","female") as.date <- function(x) if (inherits(x,"Date")) as.date(as.numeric(x)+3653) else date::as.date(x) model1 <- rs.surv(Surv(tm.dd,status %in% 2:3)~year8594+ratetable(age=(X_age+0.5)*365.25,sex=sex,year=as.date(exit)),colon3,ratetable=Finlandpop) plot(model1,lty=1:2) oldx <- 0:100 oldy <- (oldx-50)^2 oldy[c(20,30)] <- 0 old <- data.frame(x=oldx,y=oldy) predict(lm(y~nsx(x,knots=c(25,50,75,95)),old)) # as per Stata newx <- seq(min(oldx)/1.05,max(oldx)*1.05,length=101) new <- data.frame(x=newx) plot(oldx,oldy) predict(lm(y~nsx(x,df=5,cure=TRUE),old)) sum(oldy) terms(lm(y~nsx(x,df=5,cure=TRUE),old)) lm(y~nsx(x,df=5),old) lines(newx, predict(lm(y~nsx(x,df=4,cure=FALSE),old),newdata=new), type="l") # oops lines(newx, predict(lm(y~nsx(x,df=3),old),newdata=new), lty=2) summary(fit <- stpm2(Surv(tm,status %in% 2:3)~I(year8594=="Diagnosed 85-94"), data=colon2, bhazard=colon2$rate, logH.formula=~nsx(log(tm),df=6,stata=TRUE))) # okay summary(fit <- stpm2(Surv(tm,status %in% 2:3)~I(year8594=="Diagnosed 85-94"), data=colon2, logH.formula=~nsx(log(tm),df=6,stata=TRUE))) # okay ## Stata ## stata.knots=c(4.276666164398193, 6.214608192443848, 6.7833251953125, 7.806289196014404) stataKnots <- function(x,df) { intKnots <- round((1:(df-1))/df,2) # yes, Paul implicitly rounded to 2 dp logx <- log(x) c(min(logx),quantile(logx,intKnots,type=2),max(logx)) } stata.knots <- stataKnots(subset(brcancer,censrec==1)$rectime,3) ## sapply(1:9,function(type) log(quantile(subset(brcancer,censrec==1)$rectime,c(0.33,0.67),type=type))) summary(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, logH.args=list(knots=stata.knots[2:3], Boundary.knots=stata.knots[c(1,4)]))) ## formula specification for logH summary(stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, logH.formula=~ns(log(rectime),df=3))) pred <- predict(fit.tvc,newdata=data.frame(hormon=0:3),grid=TRUE,se.fit=TRUE,type="cumhaz") pred.all <- cbind(pred,attr(pred,"newdata")) ## require(lattice) ## xyplot(Estimate ~ rectime, data=pred.all, group=hormon,type="l",xlab="Time") ## relative survival brcancer <- transform(brcancer,rate0=10^(-5+x1/100)) summary(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,bhazard=brcancer$rate0,df=3)) head(predict(fit,se.fit=TRUE)) ## delayed entry brcancer2 <- transform(brcancer,startTime=ifelse(hormon==0,rectime*0.5,0)) ## debug(stpm2) summary(fit <- stpm2(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2, logH.formula=~nsx(log(rectime),df=3,stata=TRUE))) head(predict(fit,se.fit=TRUE)) ## delayed entry and tvc summary(fit <- stpm2(Surv(startTime,rectime,censrec==1)~hormon,data=brcancer2, tvc.formula=~hormon:nsx(log(rectime),df=3,stata=TRUE))) head(predict(fit,se.fit=TRUE)) ## multiple time scales brcancer <- transform(brcancer,recyr=rectime/365.25) ## predictions from a simple model summary(fit <- stpm2(Surv(recyr,censrec==1)~hormon+x1,data=brcancer, logH.formula=~nsx(log(recyr),df=3,centre=log(50)))) head(predict(fit)) grid.x1 <- with(brcancer, seq(40,70,length=300)) newdata0 <- with(brcancer, data.frame(recyr=5,x1=grid.x1,hormon=0)) matplot(grid.x1, predict(fit,type="hr",newdata=newdata0,var="hormon",se.fit=TRUE), type="l") ## predictions with multiple time scales summary(fit <- stpm2(Surv(recyr,censrec==1)~hormon,data=brcancer, logH.formula=~nsx(log(recyr),df=3,centre=log(50)), tvc.formula=~hormon:nsx(log(recyr+x1),df=2))) matplot(grid.x1, predict(fit,type="hr",newdata=newdata0,var="hormon",se.fit=TRUE), type="l") brcancer <- transform(brcancer,recyr=rectime/365.25,entry=recyr/2) summary(fit <- stpm2(Surv(entry,recyr,censrec==1)~hormon,data=brcancer, logH.formula=~nsx(log(recyr),df=3,centre=log(50)), tvc.formula=~hormon:nsx(log(recyr+x1),df=2))) summary(fit <- stpm2(Surv(recyr,censrec==1)~hormon+x1,data=brcancer, logH.formula=~nsx(log(recyr),df=3,centre=log(50)))) plot(grid.x1, predict(fit,type="hr",newdata=newdata0,var="hormon",se.fit=TRUE)$fit, type="l") plot(fit,newdata=data.frame(hormon=0,x1=50),var="hormon",type="hr") head(predict(fit,type="hazard",newdata=newdata0)) head(predict(fit,type="hazard",newdata=transform(newdata0,hormon=1))) newdata0 <- with(brcancer, data.frame(recyr=5+1,x1=grid.x1-1,hormon=0)) predict(fit,type="hr",newdata=newdata0,var="hormon") summary(fit <- stpm2(Surv(recyr,censrec==1)~hormon+x1,data=brcancer, logH.formula=~nsx(log(recyr),df=3,centre=log(50)),tvc=list(hormon=3))) brcancer <- transform(brcancer, startAge=x1, endAge=x1+rectime/365) summary(fit <- stpm2(Surv(startAge,endAge,censrec==1)~hormon,data=brcancer, logH.formula=~nsx(log(endAge),df=3,centre=log(50)),tvc=list(hormon=3))) ## some simulated data: H_{weibull}(t)=(t/b)^a n <- 1000 sim1 <- data.frame(age=seq(20,70,length=n),x=rep(0:1,each=n/2)) y <- rweibull(1000,shape=1,scale=1) with(brcancer, plot(density(x1[censrec==1]))) summary(fit <- stpm2(Surv(recyr,censrec==1)~hormon,data=brcancer,logH.formula=~nsx(log(recyr),df=3,stata=TRUE))) brcancer <- transform(brcancer,ageStart=rnorm(length(rectime),50,5)) brcancer <- transform(brcancer,ageStop=ageStart+rectime) summary(fit <- stpm2(Surv(ageStart,ageStop,censrec==1)~hormon,data=brcancer,df=3)) brcancer3 <- transform(brcancer,startTime=ifelse(censrec==1,0,10)) summary(fit <- stpm2(Surv(startTime,rectime,censrec==1)~hormon,data=subset(brcancer,rectime>10),df=3)) summary(fit <- stpm2(Surv(startTime,rectime,censrec==1)~hormon,data=subset(brcancer3,rectime>10),df=3)) ## check the performance time refresh require(rstpm2) data(brcancer) brcancer10 = do.call("rbind",lapply(1:10,function(i) brcancer)) system.time(summary(fit <- stpm2(Surv(rectime,censrec==1)~hormon,df=3,data=brcancer10))) system.time(summary(fit <- stpm2(Surv(rectime,censrec==1)~hormon,df=3,data=brcancer10))) system.time(summary(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer10, logH.formula=~ns(log(rectime),df=4)+hormon:ns(log(rectime),df=3)))) system.time(summary(fit <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer10))) system.time(summary(fit <- pstpm2(Surv(rectime,censrec==1)~1,data=brcancer10, smooth.formula=~s(log(rectime))+s(log(rectime),by=hormon)))) fit <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer10,trace=1) fit <- pstpm2(Surv(rectime,censrec==1)~1,data=brcancer10, smooth.formula=~s(log(rectime))+s(log(rectime),by=hormon),trace=1,sp.init=c(1,1), reltol=list(outer=1e-5,search=1e-10,final=1e-10)) system.time(summary(fit <- pstpm2(Surv(rectime,censrec==1)~1,data=brcancer10, smooth.formula=~s(log(rectime))+s(log(rectime),by=hormon), sp=c(0.006,0.0031),trace=1,outer_optim=2,criterion="GCV", reltol=list(outer=1e-5,search=1e-10,final=1e-10)))) ## > fit@sp ## [1] 0.06104312 0.31430954 system.time(fit <- pstpm2(Surv(rectime,censrec==1)~1,data=brcancer10, smooth.formula=~s(log(rectime))+s(log(rectime),by=hormon),sp=c(1,1))) nsx(1:10,df=3) - ns(1:10,df=3) nsx(1:10,df=3,centre=3) nsx(1:10,df=3,centre=3,Boundary.knots=c(2,8),derivs=c(1,1)) nsx(1:10,df=3,cure=TRUE) nsxDeriv(1:10,df=3) - nsDeriv(1:10,df=3) nsxDeriv(1:10,df=3,centre=5,derivs=c(1,1)) nsxDeriv(1:10,df=3,centre=5,cure=TRUE) nsDeriv(1:10,df=3) - nsDeriv2(1:10,df=3) ## bug with calling mle2 require(bbmle) mle2a <- function(...) mle2(...) ## some data x <- 0:10 y <- c(26, 17, 13, 12, 20, 5, 9, 8, 5, 4, 8) d <- data.frame(x,y) ## some fits (fit0 <- mle2(y~dpois(lambda=ymean),start=list(ymean=mean(y)),data=d)) # okay (fit0.2 <- mle2(y~dpois(lambda=ymean),start=list(ymean=mean(y)),data=d, control=list(parscale=2))) # okay (fit1 <- mle2a(y~dpois(lambda=ymean),start=list(ymean=mean(y)),data=d)) # okay (fit1.2 <- mle2a(y~dpois(lambda=ymean),start=list(ymean=mean(y)),data=d, control=list(parscale=2))) # FAILS ## stdReg::parfrailty documentation library(stdReg) library(survival) ## simulate data n <- 1000 m <- 3 alpha <- 1.5 eta <- 1 phi <- 0.5 beta <- 1 id <- rep(1:n, each=m) U <- rep(rgamma(n, shape=1/phi,scale=phi), each=m) X <- rnorm(n*m) ## reparametrize scale as in rweibull function weibull.scale <- alpha/(U*exp(beta*X))^(1/eta) T <- rweibull(n*m, shape=eta, scale=weibull.scale) ## right censoring C <- runif(n*m, 0,10) D <- as.numeric(TL incl <- ave(x=incl, id, FUN=sum)==m dd <- data.frame(L, T, D, X, id) dd <- dd[incl, ] ## fit <- parfrailty(formula=Surv(L, T, D)~X, data=dd, clusterid="id") summary(fit) ## library(rstpm2) fit2 <- stpm2(formula=Surv(L, T, D)~X, data=dd, cluster=dd$id, smooth.formula=~log(T)) summary(fit2) ## ignore left truncation fit <- parfrailty(formula=Surv(T, D)~X, data=dd, clusterid="id") summary(fit) fit2 <- stpm2(Surv(T, D)~X, data=dd, cluster=dd$id, smooth.formula=~log(T)) summary(fit2) ## normal random effect fit2 <- stpm2(formula=Surv(T, D)~X, data=dd, cluster=dd$id, smooth.formula=~log(T), RandDist="LogN") summary(fit2) ## end of examples ## ## ## * stata ## cd c:\Users\marcle\Documents\Home\ ## clear ## webuse brcancer ## use brcancer ## stset rectime, f(censrec==1) ## cap program drop dopredictions ## program define dopredictions ## preserve ## predict hr, hrnumerator(hormon 1) ci ## predict haz, hazard ci ## predict surv, surv ci ## predict sdiff, sdiff1(hormon 1) ci ## list hr* in 1/5 ## list haz* surv* in 1/5 ## list sdiff* in 1/5 ## restore ## end ## * basic model ## stpm2 hormon, df(3) scale(h) ## dopredictions ## * cure ## gen rate0=10^(-5+x1/100) ## stpm2 hormon, df(3) scale(h) cure bhazard(rate0) ## dopredictions ## * tvc ## stpm2 hormon, df(3) tvc(hormon) dftvc(3) scale(h) ## dopredictions ## * delayed entry ## preserve ## replace _t0 = rectime*0.5 if hormon==0 ## stpm2 hormon, df(3) scale(h) ## dopredictions ## restore ## * relative survival ## preserve ## gen rate0=10^(-5+x1/100) ## stpm2 hormon, df(3) scale(h) bhazard(rate0) ## dopredictions ## restore ## * test speed ## clear all ## set mem 100m ## use brcancer ## stset rectime, f(censrec==1) ## expand 100 ## timer clear ## timer on 1 ## stpm2 hormon, df(3) scale(h) ## timer off 1 ## timer list ## hazard.pm = function(obj,tm,X,XD) # obj$par ## { ## Xlocal=predict(X,newx=log(tm)) ## XDlocal=predict(XD,newx=log(tm)) ## with(obj, ## c((XDlocal %*% par)/tm*exp(Xlocal %*% par))) ## } ## with(list(df=df,x=seq(0,3,length=100)[-1]), ## { ## plot(x,hazard.pm(fit,x,X,XD),type="l",ylim=c(0,2)) ## lines(x,dweibull(x,shape=1)/pweibull(x,shape=1,lower=FALSE),lty=2) ## }) ## ## ## require(deSolve) ## temp <- as.data.frame(ode(y=0,times=seq(0,10,length=100)[-1], ## func=function(t,state,parameters=NULL) list(exp(sin(2*pi*log(t)))))) ## plot(temp,type="l") ## temp <- transform(temp, cum=`1`,logcum=log(`1`)) ## with(temp,plot(log(time),logcum)) ## temp1 <- temp[-1,] ## fit <- glm(log(cum)~log(time)+sin(2*pi*log(time))+cos(2*pi*log(time)),data=temp1) ## lines(log(temp1$time),predict(fit)) ## ## In summary: ## ## we can model using sine and cosine terms for the log-cumulative hazard - for log(time). rstpm2/inst/fig2-README.md.jpg0000644000176200001440000003713015040711753015350 0ustar liggesusersÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀàà"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¬ T¾×o­­µ%´‚Ù"‹urÅ$’OµoÑXßÙºßý ù&ŸãGön·ÿCþI§øÐÍý›­ÿÐÁÿ’iþ4fëô0äšlÑXßÙºßý ù&ŸãGön·ÿCþI§øÐÍý›­ÿÐÁÿ’iþ4fëô0äšlÑXßÙºßý ù&ŸãGön·ÿCþI§øÐÍý›­ÿÐÁÿ’iþ4fëô0äšlÑXßÙºßý ù&ŸãGön·ÿCþI§øÐÍý›­ÿÐÁÿ’iþ4fëô0äšlÑXßÙºßý ù&ŸãGön·ÿCþI§øÐÍý›­ÿÐÁÿ’iþ4fëô0äšlÑXßÙºßý ù&ŸãGön·ÿCþI§øÐÍý›­ÿÐÁÿ’iþ4fëô0äšlÑXßÙºßý ù&ŸãGön·ÿCþI§øÐÍý›­ÿÐÁÿ’iþ4fëô0äšlÑXßÙºßý ù&ŸãGön·ÿCþI§øÐÍý›­ÿÐÁÿ’iþ4fëô0äšlÑXßÙºßý ù&ŸãGön·ÿCþI§øÐÍý›­ÿÐÁÿ’iþ4fëô0äšlÑXßÙºßý ù&ŸãGön·ÿCþI§øÐÍý›­ÿÐÁÿ’iþ4fëô0äšlÑXßÙºßý ù&ŸãGön·ÿCþI§øÐÍý›­ÿÐÁÿ’iþ4fëô0äšlÑXßÙºßý ù&ŸãGön·ÿCþI§øÐÍý›­ÿÐÁÿ’iþ4fëô0äšlÑYzÍÕÎ!¼•fš+™á2*lÜFPqôµ(¢Š(¢Š(¢Š(”Ôþ"h:oö¢7öŒ×j¹¸Š6á¶•à¾Í pÄíÇ9Ç5Ñi÷ðêv^[¬Ë •À𿣀çqÏ^•Åkp\xÍ/£³Ðm䂚Á¯SkYØRDP‘?ÈNFàðqÐ×[¡jqêú<7‘ÄÐä¼m0b®ŽQ†GnS‚:ŽhF±ôÿùuŸ÷`ÿÐMlV>Ÿÿ#.³þìú   Š(¢€ (¢€ (¢€ (¢€ MÊná»Ó<Ön³©}†‘‘çÉ÷ٵɴŽò‰rs¸žs@ý‰¢jÆãýá³(ûŒˆz}kn€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€1ü9ÿWöºÿÑÏ[áÏøò»ÿ°…×þŽzØ Š( Š( Š( ;ÅšG†¼ø&º·ÑãÔ¯. LݺÆ× æ c#{ye€ëÎ+©±[5°·x€YˆÇ-ñåìÇqÆ1é^yâÛÛ ­}åÓ5x£[Ã5«XMrçÈŸÏXˆn8`Cà÷rTžÃÂ6öÖÞ´[K´»…Ì’ùÉ–¥žFv*1O#í@oâÕdt:u핺ó‹‹F˜“ìVDÇëXž–øø¯ÄV÷ó[M$"×A D(Çî—oç]Ms/ü~)ÿvÏÿEµtôQEQEQEŒÁ³2M-ek÷>Fžc )Ûøwÿ>ôÍß]5åä“7Bp£ÐvªôQ@GhÝ]«)È#µvšuêßZ,£‡8ô5ÄÖŽ}ö+À± Ÿ+ûzì(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¨]kv¹ .÷œÿõ¨ýCMÔ¿´D¬#ب@äš¿@þÿ+¿û]èç­ŠÇðçüy]ÿØBëÿG=lPEPEPEP&Þ 0j’jZv·}ip^f‰JG$q Ÿ|Ê®Hg¹$‚£{GÒâѴȬ¢’IB³»Ë)¤wbîÇ –f<9«ÔP\Æ‹ÿ#ߊݳÿÑm]=s/ü~)ÿvÏÿEµtôQEQEQEÊx‚ãÍÔ<°~X—‰äÿJê]‚#;5ÁÍ+M;Êßyرüh”QEQEuº÷Ú¬Äns,_)÷jW§Ý›+Ô›øz8õÛ+PÊrÈ#½-Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@VUþ¹ok”‹J;ÀúšÔfTRÌÁTu$à Ǽñ åm×Î^‹ÿ׬ »û›ÖÌÒ;(à«P»­Nîó"YNÃü Àª”Q@†Ôܼ?­oV†Ôܼ?­oP?‡?ãÊïþÂ_ú9ëb±ü9ÿWöºÿÑÏ[QEQEQEQEW1¢ÿÈ÷âŸ÷lÿô[WO\Æ‹ÿ#ߊݳÿÑm@=Q@Q@Q@ÚÜþF—& ˜Aøõý3\}oø–|ɰ.þF°(¢Š(¢Š(®ŸÃ÷Þu¹µsóÇÊû¯ÿZ¹ŠžÒå­.£:©äzŽâ€;ª)‘H“D²!ʰÈ4ú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*›˜m"2LáWõ?J«¨êÐØ.ÑóÌz íõ®RæîkÉL“9cØvJ¿¨ks]æ8³>ƒ«}k*Š(¢Š(¢Š(£ðÏú›÷‡õ­êÁðÏú›÷‡õ­êÇðçüy]ÿØBëÿG=lV?‡?ãÊïþÂ_ú9ëb€ (¢€ (¢€ (¢€ (¢€ æ4_ùüSþíŸþ‹jéë˜Ñä{ñOû¶ú-¨§¢Š(¢Š(¢ŠŽyDòJz"–ü¨ÕæóõIÛ<+l‡J”’ÌXœ’rM%V}ýÔÍp–D ™{ÈFD1ôÜGrO ;œž€Ó§Ì‘<³w¸’F2çÔ>r? Ú€4謨§ŸL¹ŽÖîVšÚVÛËýånÈþç³wèyÁmZ(¢Šè<;}ŒÙÈÚúëù×C\r4R,ˆpÊr v¶‰}h²®teô4jŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š) $:“@ Xz¦¸"Ý¡N'eú{Õm[[3n·µlGÑœuo§µaг3±f$±ä’y4”Q@Q@Q@Q@†Ôܼ?­oV†Ôܼ?­oP?‡?ãÊïþÂ_ú9ëb±ü9ÿWöºÿÑÏ[QEQEQEÅÄ6–²ÜÜJ‘A $‘Î ’O  €AÈ=+Éð_Y¬Å<¹),däÆàá—óïÜ`÷  TQEwOÔæ°“å;¢?y ãðô5JŠîlï`¾‹Ì…¾ªz­X® å¶”K•qÜWS¦k1Þ¸ŽNÍôÿ Ô¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÈÔ5Øm³¾%—×øWühõåô60þZ¹+íBkùwHp£î è* ç–æS,®YÏsQÐEPEPEPEPEPEPGáŸõ7ïë[ÕƒáŸõ7ïë[ÔáÏøò»ÿ°…×þŽzجÇ•ßý„.¿ôsÖÅQEQEQEyÎ¥áM[ûgtš.Ÿ®iíwqréwu´HdÆÍèÈÃ1±z§ 5ØxkM¸Ñü?kctèÒǼâ6,±†rË“ÉU('²Ž•­EÌh¿ò=ø§ýÛ?ýÕÓ×1¢ÿÈ÷âŸ÷lÿô[POEPEP f_'JœŽ¬6Çå\mt¾%—ÐÅŸ¼å¿!ÿ×®j€3/Òu>×øcÝu'ümPÜ?Ü­:ÍÓ¿Ò5 F÷¨2 xϪǜÿãí ü+J€ )@$€Ièh&‡~ñoò€ÿd°€3¨§ËÈc•ub™@e]ijRË[’±ÜŽÊýOä§þØÕ¦MsÂðÊŠñÈ¥]Xd0<hôVn›,–ò¶™rìò»¡‘ŽLÑtú°à7àˆV•QEAEÐišö1 ãqÐKþ?ã]°e ¤yw¯?«–Z͉Ämº>èÜþµv´V=¿ˆ­$¾W‰»ñ¸~•uuKQ~-Š·ESmVÅzÝGøÕy5ûû®ïþêëŠÔ¢°%ñ2ôŠØŸwl~•Fm~ú\…dŒ°¿ã@c2¢–f £©'™u¯YÛä#ŸÑ:~uËK<ÓœË+¹ÿi³QÐûÝ^êô-åÄ{ý}j…PEPEPEPEPEPEPEPGáŸõ7ïë[ÕƒáŸõ7ïë[ÔáÏøò»ÿ°…×þŽzجÇ•ßý„.¿ôsÖÅQEQEQEQEÌh¿ò=ø§ýÛ?ýÕÓ×1¢ÿÈ÷âŸ÷lÿô[POEPEP-â9wê dAùŸò+òé,¬n.¤¤1´ŒRÍijrùÚÃÿ¶WòãúV±ûå³²òór¿ÝOÞ6}ˆM¿ð*ŸJµ{=.Ú H3*)Äç–?‹jåkO´7·±Ãü$å ï@Zšä«ó7ú°{ZݤU ¡T`€jZ§¨éÑßÀU°$qý?úÕÆËÁ+E"•u8 ×}XºöŸçÃö¨×÷‘˜â_þµsQESÔlšî$h\Eu o‚R2½ª‘Á‡×—O¾[è 1Mlš91¸ê=û{‚z·Y×ö“$ãP±Ý"í’"p'Oî“ØŽJžÄ‘КѢ ³¼†úÙg‰RH!†XuR;zŠž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€:? ÿ©¸ÿxZÞ¬ ÿ©¸ÿxZÞ  Ç•ßý„.¿ôsÖÅcøsþ<®ÿì!uÿ£ž¶(¢Š(/[ñáè}I®Rù‘ZK2¨Îã¶Þ£®3Û¡¨´¯éZÍûØÙ½ßÚR/9’{àÂgæDQ×úú‡Æ¡O„îØÅu.džE€™U–T`È6¶J`ãæ³|3,:†ºogÕ5 ëØíZ(¼í*[8ã™K}äbU;öàh±¢Š(¢Š(®cEÿ‘ïÅ?îÙÿè¶®ž¹þG¿ÿ»gÿ¢Ú€:z(¢€ lŽ#œôPI§U-ZO+J¸lõ]¿ŸÖ€8ÆbÌXõ'&³úG‰ÿ ¥°Qþô“øÿßU¥Yº7ïbº¼=n®]Çû«ûµ?Š ?iWMáËO.ÙîX|Ò/Ðõÿ•s‘DÓL‘/Þv +»†%‚‰>ê(Q@¢Š(£¨Á¢Šãµ{cvvÜ¿)ííYõÛêK}hѪ7¡®)Ñ£‘‘Ô«)Á± ÑE›we47-§…ûA΄œ-À¾Œ;7àxÆ-Y^Ã} ’"AS¶HÜaãnêñÿõô«BóN2Î/-$÷ª6ù˜ÊÈ¿ÝqÜ~£±ë ôU=HO1µ¹ŒÛ^¨É…ŽCï#þ£ŒW¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š©sªØY¸Žâòä=#.7Ÿ¢õ4nŠÍþ×2Ç®qïäùCÿ"ý3G›¬Ë÷-l­Ôÿ“4Œ>ªüz€4¨¬ß±jrÿ®Õ„õël©ÿ¡—£ûý}ö¡1õûKGúG´P•VŸQ±¶ÿ‹Ëx¿ë¤ª¿ÌÕoì %¿ÖØC?½ÀóOæÙ«0iöV£övðúg¯ò[þýÍNÖOh¥ü³A×lq•oÿ\ìæ䦴¨  Ñ­Û°ù-õ>Ÿa™ô%¿ÚÄýÍ7Poûdù‘Z4P߃®d¹·º/g=¶@lù¸=6±ýk¦¬ ÿ©¸ÿxZÞ  Ç•ßý„.¿ôsÖÅcøsþ<®ÿì!uÿ£ž¶(¢Š(ÅBý¼;r4Ç‘n‹G)Õ$dóz£7Ên Or+Ÿðņ§eâÙ#¼mRDŽÞá·×~b83!ŒÆ»¹;0‘ÁP2s·ã+Kß Í§41X¬öòÎf]ÊÈ“£”Ç}ÛvvÎøbâÒóÆgëSj6šuÂÅż‚HCËVxÌD üÜ6IÇEPEyߌtÏCm«Ëc®j—V—J-í¬¢¶Y r§jóçLànV=þðîtÛyí4è`¹¼žòe4óªlœòUxéÀ=y  uÌh¿ò=ø§ýÛ?ýÕÓ×1¢ÿÈ÷âŸ÷lÿô[POEPXÞ#“m‚ êòÈÿUl×7âi35¼_ÝRß™ÿëP/ª]5–•urƒ2GÞl|£ñ8%ªØØ[Ú!ÊÁÆ îÇôªš¿ï_O´í5Ò3{ó'óEiP¿‡­¼Ûó1,KŸÄð?­uU™ Ûùj¹4§qúv­:(¢Š(¢Š+_Ów©¼ˆ|Ê?xqë[Ô‘ƒÒ€<úŠÕÖt³g)š%ýÃûäú}+*€ (¢€+ÝÙ[ßD#¸MÀÊÀ•doUaÈ>â©y÷Ú_AïmKˆÓ2 ÿmÞú¨ÿ€÷­Z(+{˜.àYíåIboºèÀƒøÔµŸ>“Î×6²=ÓrÒÃŒ?ûêxo©ô"£ûmý—ÖfxÇü¼Y©oÎ?¼>‹º€5(ªÖš…öï³\Ç+/ßUo™=™zƒõ«4QEQEQTîum>ÒO*{È–nÑËŸ¢ŽOåPiÜÏÅ–™pàô’ã÷ ø†ùÿñÚÓ¦M4Vñ4³H‘Ƽ³»âj‡ÙuKŸøø¿Ke?Ái,=‹¾sø(§Ã¢ØE"ÊÐyó)Ȗጮ±bqøb€#þÛ‚^,`¹¾=šùÒF!àMñ9¹ÿŸK%ügsÿ …?÷ÕiÑ@£FŽNo.îîϤ’íSìQ6©üA«v¶V¶I²ÒÚÿ Q…¥OEQEQEQEQEQEt~ÿSqþðþµ½X>ÿSqþðþµ½@þÿ+¿û]èç­ŠÇðçüy]ÿØBëÿG=lPEP=âæY´Å±m?U¹2ȲéȌ𙠠_õþ%–¶Ÿ™•¿ ‹ÿ­XbiçŽ%ûÎÁGãYZWïgÔn»Ktȧý˜ÀŒûé\þ5ÔxzßÍÔ<Â8‰søžõ ¦4XãTQ…PÔê( Š( Š( Š( º,±²:†V ÷®KUÒžÅüÄË@ǃýßc]}5ÑdBŽ¡•†=耢µµ]¬Éš´ôîŸýjÉ Š( Š(  ×zu•öÓuk¬¿u™Aeú£ðªßÙ_ü{j7ðO;ÍÿÑ¡¿JÒ¢€3~ɪ'ú½UÓkPÇÿ+Kö}`õÔ­ÿf̃úÈkFŠÍþνõšÍÐöŠ(”~ªOëGö›ô†¹¹õÜ;)ú¦vþ•¥ECmimg—koÿv$ ?!SQEQEQEQEQEQEQEQEQEt~ÿSqþðþµ½X>ÿSqþðþµ½@þÿ+¿û]èç­ŠÇðçüy]ÿØBëÿG=lPEPEPEP›xæ÷Ŷz³Mý”ÚrÃ,–S&—%ë;Uÿ{„|àØW=qµßi‹zšl ¨M×[~w·„ćž0¥˜Ž1ÜóéÒ­Ñ@s/ü~)ÿvÏÿEµtõÌh¿ò=ø§ýÛ?ýÔÓÑEɤò ’Oî)oÈWŸM2à “HØDRì}‡&»mbO+Jœ÷#oæq^u¯|Ú4ÐÏÉKoÂFOàŸÂ€¢Dðè–bQ‰Z1$£ý¶ù›õ&»ŸÛùV )ÊÙüã\°äðwvЋ{X¡À P´QEQEQEQEQE!‚È=A®wTЊnžÍI^­ê>•ÑÑ@}ÐÑ]v¡¢Á{™÷SxÔW7w§ÜÙ6&Œ…ìã•?U¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(£ðÏú›÷‡õ­êÁðÏú›÷‡õ­êÇðçüy]ÿØBëÿG=lV?‡?ãÊïþÂ_ú9ëb€ (¢€ (¢€ (¢€ (¢€ æ4_ùüSþíŸþ‹jéë˜Ñä{ñOû¶ú-¨§¢Š(Ä’m±Ž>ï'èÿª¸]C÷ºž—n9į;UD#ÿBt®¿ÄÒfx"þê–üÏÿZ¹ý÷‰e'¥µ¢ªŸy–”kùÐþ“Ÿ©À¤dÜk´®sÃ0æYç# דü…ttQEQEQEQEQEQERÀzƒKEf\èVS䪛Õ:~U•qá˘òat”z}ÓþÔQ@$Ö³ÛœM §¹~u z Œ‘T¦Òlgå­ÔTù•qtWO'†­˜þîiëƒP 7k±ÿ~ÿúôÏÑ]øcŸšïòÿ¯V#ðݪ༲¿Ð€(—¥Tgmª¥ ®Î-"–ÈÇý¿›ùÕ´DŒaTzŠâãÒï¤û¶²À†?XMýºÆ‹õqý+®¢€9QáËÓüpøÿ CáÛÑÐÄ~Œºº(mP^‘+}T¥ßGÖÖCþèÏò®ÚŠà^cÿY§ûÊE2½¡’ÒÞ_õDßT€8J+²}O“­¸ý’EVZ7Ü’TüAÊ€9j+  Ÿùguø2õê»ørñ~ëÄÃÙˆþ”E_}POùw$²ÀÿZì.ãûÖÓ}†€+ÑJÈÈpÊWê1I@†Ôܼ?­oV†Ôܼ?­oP?‡?ãÊïþÂ_ú9ëb±ü9ÿWöºÿÑÏ[QEQEQEQEW1¢ÿÈ÷âŸ÷lÿô[WO\Æ‹ÿ#ߊݳÿÑm@=Q@†½'™ªÈ; úgú×7¥~ò}Jç´·Lª}‘V2?ï¥oζ/æwq3{ú ÉÐŽ‹fÅO™:yÌ?Ûï?«ïô(|­- 2ÇùJÒ¨àˆCqˆ¡*’€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€€FȨžÒÚO¿o}PšŠŠhmÃbXÃuÚ1š–Š(ßñåwÿa ¯ýõ±Xþÿ+¿û]èç­Š(¢Š(¢Š(¢Š(¯<ñޝã]ÛW•'Ó£°JÖWi²Í"§j9ó~GÎm…3×v»4^®Ôf‚k¼fI „ćž0¥˜Ž1ÜóéÒ€-×1¢ÿÈ÷âŸ÷lÿô[WO\Æ‹ÿ#ߊݳÿÑm@=Gq'“m,¿ÜBß©+?[—ËÒ¦Áå°£ñ?ášóÝuˆÐîÑdòŽÌçbþ¬+sH·WÔm¢UÂ)Î;9þ•…«~òm6Û´·jÍôEiÿ¾•:ë|5ë©f#„M£êýTÓQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEáÏøò»ÿ°…×þŽzجÇ•ßý„.¿ôsÖÅQEQEQEyõìI¨^¾µgâ{‰åþË.™¨4PyE±ª¤¨`€wŽ[Ÿÿ#.³þìú ­ŠÇÓÿäeÖ݃ÿA4±\^¯!“U¸'³mü¸®Ò¼ëÅs=¼¬‘K‡Xÿߟÿ#.³þìú ­ŠÇÓÿäeÖ݃ÿA4±^q ¿ë3/>mïÙã?ì  Gýöd¯G®bÎÙ_ÄÒ…P$yç¯æs@* ¢€:Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ßñåwÿa ¯ýõ±Xþÿ+¿û]èç­Š(¢Š(¢Š(¢Š(¢Š+Oÿ‘—YÿvýÖÅcéÿò2ë?îÁÿ šØ¬½2 ^ßÎGÞ” ü:ÿ:Ô¬[eltÈn–×"h>ÐS~0K #8ÿ¦Ÿ¥mQY~ Ö?°´™¯¼?ËIfý¹Û?\îãñ¬MÇÛ$ºö•²Í;vv¢¶ÜíÞÆ}¨¯¢¸»_ý¦ÇV¹þÍÛýžÐ ¾~|Ï1¶ÿwŒ~9¨ôˆgUOoìÏ+ív2Þ¯ÎÍ™ù~ï9ÇZî(¯%‹ãa–kHÿ°ûC™ûgÝߟö9Æ+rûâWØå‰?²wù’2gíÆ3÷h¾¢¼êã♂GOì}Û.¦·ÏÚqŸ-]³÷{ìéïU_âùO A«ÿa‚eržWÚº|Åzìöô O¢¼“MøØÚ…•½ÁÐyÉ+mûfq±Iþç|WMwñì«§ŸìÍßl·3¯ÆÏÝÆøû¼ÿ¬Çáï@­ʯŒ·\¤?`ûÖjÏ›þʶޞýj…çÄCk<ñÿeîò ’lùøÎÛ„‡wý½ß†=è¹¢¼öçây·Ód»þÈݰÆ6ý§ß·¾ÞÛ¿JØÕ|eý™s<_`ó<«Y®sæã>ZÇNøÆhª¢¸Ÿ üA> ¼Ómÿ³<¶¬­»Ïݳgüg5¯¯x—ûÃíª}“ÎÛ#Gåù›zÎ÷};Ðýgâ_µêßaû&ÞToó3Ö$“¦?ÛÇáWn5_#Qû'“»åC»v>óªtÇûYü(JŠæ/|]ö=KìŸaßȼÜw¸1ÿNÿø÷·-×ǵ6ÝÞoÝùÝ}9û™üh£¢³ìõ?µØiw^Nß·"¶ÝÙÙ˜ËõÇ=1ÚªgX¸ÓþÍþ¥cmþg]ò˜úc¶3@tVx‹{i«ö\}¶SúϹònÏN}+GT½þÍÓ./<¿3ÉMÛ3Œþ4nЦo±¦OyåÿªYÍÝv:û⣻ÔþˬiÖNï¶y¿>ìlØ ôÇ9ÍhQTí¯¾Ñö?ÝíûM¹Ÿïgn6qï÷ÿJ4«ïí=6+¿/Ëó3òîÎ0HëøPÊ+/ÃÚ¿öö…m©ùG»÷{÷c W®¥jPECm?ÚbgÛ·:c9û¬W?¥PƒYóõ‰´ÿ#o—æüûú잘ïæÿã¾üjÑXÚ½ý³$Éöo'Ë‚ÞlïÝŸ57c éÓÞ´üÿôÑo·þYïÝŸ|b€&¢Š(¢Š†Ú´ÄÏ·n$tÆs÷X®JšŠ†æ³D¯·vdDÆq÷˜.Zš€ *Ÿuì¶û~ähû³×qaüwõ©¨ßñåwÿa ¯ýõ±Xþÿ+¿û]èç­Š(¢Š(¢Š(¢Š(¢Š+—ŸYµÐüKö诀»­¹‚ÂyÄ„#8ë]EfêV³\j:<±&ä·»i%9j˜%\ûüÌ£Z¥ÿ †™ÿ>ºßþïøÕsz޹ ú%­¼Z~¶Ò¥˜‰—ûìa·Dqþ«ý–ü«Ðè  Æý¾©áë‹[+ nYž9UWûðd´.£“Xƹ Ü˧xZ{;­'\Žá´Ù ýtræ4dGŽª*öJ(Ĭ$¸‡Jñ 2iâÉvö†ý‘uóì–ÿ–|`zÔ^7V0é s£ëˆmô©íåÿ‰EÑÛ#ghâ>sž£Š÷*(å›}\K9›ÃÚàXe·g?ÙwÝ»ø;dWWªÇ{sqE¢ëŒ«3³ì‹‘€[#þY×½Ñ@<ÞZê2Í+&‰®×÷3ø”ÜýÇŽ@§îw,¿fý‹R¸ð5­Œ:.³%ÄS°uM2à€D‘˜ÈèFxkuXí5²Âh˜ì;΂E'þYzVá0Ó?ç×[ÿÁïÿ­ú(—OéãSžci­ùm jöç$3“ÿ,¿ÚjiW*ƵWÅ=ßÊè?ºàÖõfèö³Z‹ÿ96ù·’Jœƒ•8Á†ðÉfÓ&•¢š!-å̈³DÑ6Ö•ˆ%X29äVÍPEPEPEPEPUnu=>ÎæÞÚêúÚ ‹ƒ¶¥•U¥>Š Éü*Õy·Œšï|QmrûCPÓ ‹I >idM««,…XÓ ŸZôš(9¢€ (¢€ (¢€ (¦LY`®w$m9ÇaÞ€3ì㯕»)èA‘d9y=릠Š( Š( ˜&ˆÎÐ P̪£Ü7$€Hë‚AçØÓ뎋OKoxû= w7ZE¼…·“™L—ON(¦µÕtëç¸KKû[†¶m³ˆ¦W1FÁùO­2 gKº°’þßR³šÎ,ù—έc®X W–²Ã¨hâB]­eÄs«F˜ë–bÒòÖþÖ;«;˜nmäIapèÃØŽ y®¡=õþ¥©éÆ)´›J72B3ås!ã‚L;½óÒº¯b2àÔ­Ü—f®u‹e·×5m Ñl +†7_÷qçÉ+@ädë@žÚžžšŠiÍ}l·Î»ÖØÊ¢V_P¹Éõj¼Öí¡ÅîžÁ·eñ¥Ô+Þ4 ä“"÷Ø"Yž€äu5éTQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVU߉t‹JM>êñb¹Ž´H¥ņ;Ù±µGÈÜ“íÔŠÕ®_Xð¬Ú´Þ!ÌñÄš„Ñ:“¹3)ËcfEès×¥]‹ÅÚ$¶77‚íÒ;fE•e·’9~ÙCÄü¸wlÖ]ÿÄ-:ÞX–Ö).#’ÊêèÊñKÆÐ²)GýÙ(~fÎy\(#.µJj&½o²G©,öÒÂst®!.v¼’ä€|ÇÀUùIÏÍK¬x_Ä:Ä>dϦ-ÌÖwÖ²¢;ªD&1ÚÛ2øò@$…Îâ{`€nÝøÏ@±¿’ÊâõÖxå0ò°•pR F9=&‰ZÃÓïe¶1Íd]x#T[¡{k,/9–÷1ÿh\Z®É§2£n‹‘œ#Ôc$½†h®`Žx$Y"‘C£¡Èe# ƒÜbŸTô‹Ò´k96ìµ·Ž³;pª$ãŽäýjåQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÿÙrstpm2/inst/tvc-cox.R0000644000176200001440000003256013416410274014174 0ustar liggesusers## Times are shown for my computer require(survival) require(foreign) lung1 <- subset(survival::lung, !is.na(ph.ecog)) # one case with missing ph.ecog lung2 <- lung1[rep(1:nrow(lung1),each=10),] # n=227000 - and many ties ## write.dta(lung1,file="~/work/lung1.dta") ## write.dta(lung2,file="~/work/lung2.dta") system.time(fit0 <- coxph(Surv(time, status) ~ ph.ecog, data=lung2)) # 0.5s system.time(fit <- coxph(Surv(time, status) ~ ph.ecog + tt(ph.ecog), data=lung1, tt=function(x,t,...) x*log(t))) # 300s - SLOW anova(fit) system.time(cox.zph(fit0)) # 2.2s refresh require(survival) require(rstpm2) require(foreign) library('Rcpp') library('inline') rcpp_inc <- ' using namespace Rcpp; using namespace arma; ' set.seed(12345) lung1 <- lung3 <- within(subset(lung,!is.na(ph.ecog)), { event <- ifelse(status==1,1,0) x <- ifelse(ph.ecog==0,0,1) }) lung2 <- lung1[rep(1:nrow(lung1),each=1000),] lung3 <- lung3[rep(1:nrow(lung3),each=10),] lung3$time <- lung3$time+rnorm(length(lung3$time),0,0.001) lung3 <- lung3[with(lung3,order(time,-status)),] if (FALSE) { write.dta(lung1,file="~/work/lung1.dta") write.dta(lung2,file="~/work/lung2.dta") write.dta(lung3,file="~/work/lung3.dta") } system.time(fit0 <- coxph(Surv(time, event) ~ x , data=lung3)) beta <- betaInit <- c(coef(fit0),0) tvc.coxph <- function(obj,var,method="logt") { stopifnot(attr(obj$y,"type") == "right") stopifnot(method == "logt") y <- as.matrix(obj$y) time <- y[,1] status <- y[,2] X <- as.matrix(model.matrix(obj)) index <- order(time,-status) X <- X[index, , drop = FALSE] time <- time[index] status <- status[index] k <- match(attr(obj$terms,"term.labels"),var) beta <- c(coef(obj),0) names(beta) <- c(names(coef(obj)),sprintf("%s:log(t)",var)) minuslogl <- function(beta) -.Call("test_cox_tvc2", list(time=time,event=status,X=X,beta=beta,k=k-1),package="rstpm2") gr <- function(beta) -.Call("test_cox_tvc2_grad", list(time=time,event=status,X=X,beta=beta,k=k-1),package="rstpm2") parnames(minuslogl) <- parnames(gr) <- names(beta) fit <- mle2(start=beta, minuslogl = minuslogl, gr = gr, method="BFGS", hessian=TRUE) fit@data <- list(object=obj) ## plot the result betak <- beta*0 index2 <- c(k,length(betak)) betak[index2] <- coef(fit)[index2] Xk <- cbind(X,log(time)) Xk[,-index2] <- 0 Xk[,k] <- 1 fitted <- as.vector(Xk %*% betak) gd <- t(Xk) se.fit <- sqrt(colSums(gd * (vcov(fit) %*% gd))) matplot(time,exp(fitted+cbind(0,-1.96*se.fit,1.96*se.fit)),type="l",lty=c(1,2,2),col=1,ylab="Effect",log="y") abline(h=exp(coef(obj)[k]),lty=3) fit } summary(tvc.coxph(fit0,"x")) system.time(fit3 <- optim(par=beta, fn = function(beta) -.Call("test_cox_tvc2", list(time=lung3$time,event=lung3$event,X=X,beta=beta,k=0),package="rstpm2"), gr = function(beta) -.Call("test_cox_tvc2_grad", list(time=lung3$time,event=lung3$event,X=X,beta=beta,k=0),package="rstpm2"), method="BFGS", hessian=TRUE, control=list(trace=1))) system.time(fit3 <- optim(par=beta, fn = function(beta) -.Call("test_cox_tvc2", list(time=lung3$time,event=lung3$event,X=cbind(lung3$x),beta=beta,k=0),package="rstpm2"), gr = function(beta) -.Call("test_cox_tvc2_grad", list(time=lung3$time,event=lung3$event,X=cbind(lung3$x),beta=beta,k=0),package="rstpm2"), method="BFGS", hessian=TRUE, control=list(trace=1))) fit3$par ## system.time(fit4 <- .Call("test_cox_tvc3", list(time=lung3$time,event=lung3$event,x=lung3$x,beta=beta),package="rstpm2")) fit4 system.time(fit <- coxph(Surv(time, event) ~ x + tt(x), data=lung3, tt=function(x,t,...) x*log(t))) (coxph(Surv(time, event) ~ x, data=lung3)) fit0 <- pstpm2(Surv(time, event) ~ x, data=lung3, smooth.formula=~s(log(time))) fit <- pstpm2(Surv(time, event) ~ 1, data=lung3, smooth.formula=~s(log(time))+s(log(time),by=x),sp.init=c(1,1)) fit2 <- pstpm2(Surv(time, event) ~ x, data=lung3, smooth.formula=~s(log(time))+x:log(time),sp.init=1) summary(fit2) ## i <- -(1:10) coef1 <- coef(fit)[i] statistic <- as.numeric(coef1 %*% solve(vcov(fit)[i,i]) %*% coef1) 1-pchisq(statistic,length(i)) ## fit0 <- stpm2(Surv(time, event) ~ x, data=lung3, df=3) fit <- stpm2(Surv(time, event) ~ 1, data=lung3, tvc.formula=~x:ns(log(time),df=3)) fit2 <- stpm2(Surv(time, event) ~ x, data=lung3, tvc.formula=~x:log(time), df=4) summary(fit2) anova(fit2,fit0) ## ## Wald test by hand i <- 5:7 coef1 <- coef(fit)[i] statistic <- as.numeric(coef1 %*% solve(vcov(fit)[i,i]) %*% coef1) 1-pchisq(statistic,length(i)) ## system.time(fit <- pstpm2(Surv(time, event) ~ x, data=lung3, smooth.formula=~s(log(time))+log(time):x,sp.init=1)) src <- ' List largs = as(args); vec time = as(largs["time"]); // length n vec event = as(largs["event"]); // length n mat X = as(largs["X"]); // design matrix, n*c vec beta = as(largs["beta"]); // length c+1 int k = as(largs["k"]); // column to use for tvc int n = time.size(); int c = X.n_cols; double llike = 0.0, lsum; vec eta; vec eta0 = X * beta(span(0,c-1)); for (int i=0; i(args); vec time = as(largs["time"]); // length n vec event = as(largs["event"]); // length n mat X = as(largs["X"]); // one covariate, length n vec beta = as(largs["beta"]); // length 2 int k = as(largs["k"]); // column to use for tvc int n = time.size(); int c = X.n_cols; vec grad(beta.size(),fill::zeros); vec lsum(beta.size(),fill::zeros); vec eta0 = X * beta(span(0,c-1)); vec risk; mat Xrisk; for (int i=0; i|z| [95% Conf. Interval] ## -------------+---------------------------------------------------------------- ## main | ## x | 1.920236 .9687835 1.98 0.047 .0214556 3.819017 ## -------------+---------------------------------------------------------------- ## tvc | ## x | -.3795621 .1682714 -2.26 0.024 -.709368 -.0497561 ## ------------------------------------------------------------------------------ src <- ' #include using namespace Rcpp; using namespace arma; // [[Rcpp::export]] double fn(NumericVector time_, NumericVector event_, NumericVector x_, NumericVector beta_) { vec event = as(wrap(event_)); vec time = as(wrap(time_)); vec x = as(wrap(x_)); vec beta = as(wrap(beta_)); int n = time.size(); double llike = 0.0, lsum; vec eta; for (int i=0; i(0,10,11); return(wrap(find(index>5 && index/8==1))); ' (cxxfunction(signature(), src, plugin='RcppArmadillo', rcpp_inc))() src <- ' List largs = as(args); vec time = as(largs["time"]); // length n vec event = as(largs["event"]); // length n vec x = as(largs["x"]); // one covariate, length n vec beta = as(largs["beta"]); // length 2 int n = time.size(); double llike = 0.0; vec eta; for (int i=0; i0)$ gamma : integrate((1-v(tau))*mu(tau)*delta(x,tau)*exp(-integrate(beta(u,tau)-alpha(u),u,tau,x)), tau, 0, x); diff(gamma,x); nu : integrate((1-v(tau))*mu(tau)*exp(-integrate(beta(u,tau)-alpha(u),u,tau,x)), tau, 0, x); diff(nu,x); diff(nu,x) - (nu*alpha(x) + mu(x)*(1-v(x)));d iff(nu,x) - (nu*alpha(x) + mu(x)*(1-v(x))), expand, ratsimp; diff(nu,x) - (nu*alpha(x) + mu(x)*(1-v(x))), ratsimp; subst(x=x+Delta, nu) - nu; /* what about doing this using Kolmogorov's forward integro-differential equation? */ assume(x>0)$ assume(tau>0)$ healthy : exp(-integrate(mu(u)+alpha(u),u,0,x)); illness : integrate(exp(-integrate(mu(u)+alpha(u),u,0,tau))*mu(tau)*exp(-integrate(phi(u,tau),u,tau,x)), tau, 0, x); prev : illness/(illness + healthy); prevOdds : illness/healthy; mortality : integrate(exp(-integrate(mu(u)+alpha(u),u,0,tau))*mu(tau)*exp(-integrate(phi(u,tau),u,tau,x))*(phi(x,tau)-alpha(x)), tau, 0, x)/(healthy+illness); diff(log(-log(theta)), theta); diff(gamma,x); fpprec : 33; /* 1234567891123456789212345678931234567 */ xi : [0.995657163025808080735527280689003b0, 0.973906528517171720077964012084452b0, 0.930157491355708226001207180059508b0, 0.865063366688984510732096688423493b0, 0.780817726586416897063717578345042b0, 0.679409568299024406234327365114874b0, 0.562757134668604683339000099272694b0, 0.433395394129247190799265943165784b0, 0.294392862701460198131126603103866b0, 0.14887433898163121088482600112972b0, 0.0b0]; xi : append(map(lambda([x], -x), xi), rest(reverse(xi))); w : [0.066671344308688137593568809893332b0, 0.149451349150580593145776339657697b0, 0.219086362515982043995534934228163b0, 0.269266719309996355091226921569469b0, 0.295524224714752870173892994651338b0]; w : map(lambda([x], x/2b0), append(w, reverse(w))); wk : [0.011694638867371874278064396062192b0, 0.03255816230796472747881897245939b0, 0.05475589657435199603138130024458b0, 0.07503967481091995276704314091619b0, 0.093125454583697605535065465083366b0, 0.109387158802297641899210590325805b0, 0.123491976262065851077958109831074b0, 0.134709217311473325928054001771707b0, 0.142775938577060080797094273138717b0, 0.147739104901338491374841515972068b0, 0.149445554002916905664936468389821b0]; wk : map(lambda([x], x/2b0), append(wk, rest(reverse(wk)))); wk; mintegrate(f, a, b) := block([width, olda, oldb], width: b - a, olda : a, oldb : b, ff : lambda([x], f(olda+x*width)), step : lambda([a,b,n,side], fx : map(lambda([xii], ff(a+(b-a)*(xii+1)/2)), xi)));rstpm2/README.md0000644000176200001440000000554713566731054013005 0ustar liggesusers### rstpm2: An R package for link-based survival models ### #### NOTE: versions 1.4.1 and 1.4.2 of rstpm2 included a critical bug in the predict function for type in "hr", "hdiff", "meanhr" or "marghr". #### Introduction ----------- This package provides link-based survival models that extend the Royston-Parmar models, a family of flexible parametric models. There are two main classes included in this package: A. The class `stpm2` is an R version of `stpm2` in Stata with some extensions, including: 1. Multiple links (log-log, -probit, -logit); 2. Left truncation and right censoring (with experimental support for interval censoring); 3. Relative survival; 4. Cure models (where we introduce the `nsx` smoother, which extends the `ns` smoother); 5. Predictions for survival, hazards, survival differences, hazard differences, mean survival, etc; 6. Functional forms can be represented in regression splines or other parametric forms; 7. The smoothers for time can use any transformation of time, including no transformation or log(time). B. Another class `pstpm2` is the implementation of the penalised models and corresponding penalized likelihood estimation methods. The main aim is to represent another way to deal with non-proportional hazards and adjust for potential continuous confounders in functional forms, not limited to proportional hazards and linear effect forms for all covariates. Functional forms can be represented in penalized regression splines (all `mgcv` smoothers ) or other parametric forms. Some examples ------------- The default for the parametric model is to use the Royston Parmar model, which uses a natural spline for the transformed baseline for log(time) with a log-log link. ``` require(rstpm2) data(brcancer) fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3) plot(fit,newdata=data.frame(hormon=0),type="hazard") ``` (Hazard plot) The default for the penalised model is similar, using a thin-plate spline for the transformed baseline for log(time) with a log-log link. The advantage of the penalised model is that there is no need to specify the knots or degrees of freedom for the baseline smoother. ``` fit <- pstpm2(Surv(rectime,censrec==1)~hormon,data=brcancer) plot(fit,newdata=data.frame(hormon=0),type="hazard") ``` (Hazard plot 2) rstpm2/build/0000755000176200001440000000000015105126151012575 5ustar liggesusersrstpm2/build/vignette.rds0000644000176200001440000000057315105126151015141 0ustar liggesusers‹­SMKÃ@M?µ•ÖB€£A¨=xô\*"BQ¼,ÙM»t³v'©"‚?\¬›dÓ&¥x*!“™7_//›×®çyu¯Ù¶¶aÝÆÐx{7íÕIý{‰ZÑØG®äøI®~úÌÃH°»˜SV‚ûa,$XF{‘f”û(EV7\”7*Àm0 o`Fü%™3Wyö†ì?óì×-0 ˜§<\ÙÕ,ßfÇ”†G¢—*ŒÚuÆ BE™0®árƒ eb™eþU&¢Á>e¶pY™-ZR&«úUí‹–ŠòôÜ󤤴 ‡Y"ŸZs%í\½ƒ ûæL¬ž1 .Ùóç ÑœHŸ3ÈC’Š3û9‘@Èp¡¨åT/5´$ ™qSÚlN¹(Lë…ã&hÌ&SçÖ u&,b’çåø}¬”¶quQG«Õ¸XÖK®okÖëõÏ.#_cvÞ«K ’q m¿~ÿv|žrstpm2/man/0000755000176200001440000000000015105126152012252 5ustar liggesusersrstpm2/man/predict.nsx.Rd0000644000176200001440000000172713416410275015016 0ustar liggesusers\name{predict.nsx} \title{Evaluate a Spline Basis} \alias{predict.nsx} \description{ Evaluate a predefined spline basis at given values. } \usage{ \method{predict}{nsx}(object, newx, \dots) } \arguments{ \item{object}{the result of a call to \code{\link{nsx}} having attributes describing \code{knots}, \code{degree}, etc.} \item{newx}{the \code{x} values at which evaluations are required.} \item{\dots}{Optional additional arguments. At present no additional arguments are used.} } \value{ An object just like \code{object}, except evaluated at the new values of \code{x}. These are methods for the generic function \code{\link{predict}} for objects inheriting from classes \code{"nsx"}. See \code{\link{predict}} for the general behavior of this function. } \seealso{ \code{\link{nsx}}. } \examples{ basis <- nsx(women$height, df = 5) newX <- seq(58, 72, length.out = 51) # evaluate the basis at the new data predict(basis, newX) } \keyword{smooth} rstpm2/man/simulate-methods.Rd0000644000176200001440000000242114363600352016030 0ustar liggesusers\name{simulate-methods} \docType{methods} \alias{simulate-methods} \alias{simulate,stpm2-method} \alias{simulate,pstpm2-method} \title{Simulate values from an stpm2 or pstpm2 fit} \description{ Given an \code{stpm2} fit and a data-frame of new data, return simulated values } \section{Methods}{ \describe{ \item{object = "stpm2"}{an \code{stpm2} fit} }} \usage{ \S4method{simulate}{stpm2}(object, nsim=1, seed=NULL, newdata=NULL, lower=1e-06, upper=1e+05, start=NULL, ...) \S4method{simulate}{pstpm2}(object, nsim=1, seed=NULL, newdata=NULL, lower=1e-06, upper=1e+05, start=NULL, ...) } \arguments{ \item{object}{an stpm2 or pstpm2 object} \item{nsim}{number of simulations per row in newdata} \item{seed}{optional random number seed} \item{newdata}{list of new data. If not specified, then defaults to object@data} \item{lower}{smallest possible time} \item{upper}{largest possible time} \item{start}{left truncated entry time (assumed to be zero if NULL)} \item{\dots}{additional arguments (for generic compatibility)} } \examples{ set.seed(1002) fit1 <- gsm(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3) simulate(fit1, nsim=10, newdata=data.frame(hormon=1)) simulate(fit1, newdata=data.frame(hormon=0:1)) } \keyword{methods} rstpm2/man/nsxD.Rd0000644000176200001440000001220314706157711013466 0ustar liggesusers\name{nsxD} \alias{nsxD} \title{Generate a Basis Matrix for the first derivative of Natural Cubic Splines (with eXtensions)} \description{ Generate the B-spline basis matrix for the first derivative of a natural cubic spline (with eXtensions). } \usage{ nsxD(x, df = NULL, knots = NULL, intercept = FALSE, Boundary.knots = range(x), derivs = if (cure) c(2, 1) else c(2, 2), log = FALSE, centre = FALSE, cure = FALSE, stata.stpm2.compatible = FALSE) } \arguments{ \item{x}{the predictor variable. Missing values are allowed.} \item{df}{degrees of freedom. One can supply \code{df} rather than knots; \code{ns()} then chooses \code{df - 1 - intercept + 4 - sum(derivs)} knots at suitably chosen quantiles of \code{x} (which will ignore missing values).} \item{knots}{breakpoints that define the spline. The default is no knots; together with the natural boundary conditions this results in a basis for linear regression on \code{x}. Typical values are the mean or median for one knot, quantiles for more knots. See also \code{Boundary.knots}.} \item{intercept}{if \code{TRUE}, an intercept is included in the basis; default is \code{FALSE}.} \item{Boundary.knots}{boundary points at which to impose the natural boundary conditions and anchor the B-spline basis (default the range of the data). If both \code{knots} and \code{Boundary.knots} are supplied, the basis parameters do not depend on \code{x}. Data can extend beyond \code{Boundary.knots}} \item{derivs}{an integer vector of length 2 with values between 0 and 2 giving the derivative constraint order at the left and right boundary knots; an order of 2 constrains the second derivative to zero (f''(x)=0); an order of 1 constrains the first and second derivatives to zero (f'(x)=f''(x)=0); an order of 0 constrains the zero, first and second derivatives to zero (f(x)=f'(x)=f''(x)=0)} \item{log}{a Boolean indicating whether the underlying values have been log transformed; (deprecated: only used to calculate derivatives in rstpm2:::stpm2Old} \item{centre}{if specified, then centre the splines at this value (i.e. f(centre)=0) (default=FALSE)} \item{cure}{a Boolean indicated whether to estimate cure; changes the default derivs argument, such that the right boundary has the first and second derivatives constrained to zero; defaults to FALSE} \item{stata.stpm2.compatible}{a Boolean to determine whether to use Stata stpm's default knot placement; defaults to FALSE} } \value{ A matrix of dimension \code{length(x) * df} where either \code{df} was supplied or if \code{knots} were supplied, \code{df = length(knots) + 1 + intercept}. Attributes are returned that correspond to the arguments to \code{ns}, and explicitly give the \code{knots}, \code{Boundary.knots} etc for use by \code{predict.nsxD()}. \code{nsxD()} is based on the functions \code{\link{ns}} and \code{\link{spline.des}}. It generates a basis matrix for representing the family of piecewise-cubic splines with the specified sequence of interior knots, and the natural boundary conditions. These enforce the constraint that the function is linear beyond the boundary knots, which can either be supplied, else default to the extremes of the data. A primary use is in modeling formula to directly specify a natural spline term in a model. The extensions from \code{\link{ns}} are: specification of the derivative constraints at the boundary knots; whether to centre the knots; incorporation of cure using derivatives; compatible knots with Stata's stpm2; and an indicator for a log-transformation of \code{x} for calculating derivatives. } \seealso{ \code{\link{ns}}, \code{\link{bs}}, \code{predict.nsx}, \code{\link{SafePrediction}} } \references{ Hastie, T. J. (1992) Generalized additive models. Chapter 7 of \emph{Statistical Models in S} eds J. M. Chambers and T. J. Hastie, Wadsworth & Brooks/Cole. } \examples{ require(stats); require(graphics); require(splines) nsx(women$height, df = 5) summary(fm1 <- lm(weight ~ ns(height, df = 5), data = women)) ## example of safe prediction plot(women, xlab = "Height (in)", ylab = "Weight (lb)") ht <- seq(57, 73, length.out = 200) lines(ht, predict(fm1, data.frame(height=ht))) % plotNsx <- function(obj,x,coef=c(-3,-4,2)) { % ## numerical derivatives returning a function % diff <- function(f,delta=1e-4,...) function(x) (f(x+delta,...)-f(x-delta,...))/(2*delta) % par(mfrow=c(2,2)) % plot(x,predict(obj,x)%*%coef,type="l",ylab="y",main="Natural spline") % ## first derivative % plot(x,diff(function(x) predict(obj,x) %*% c(0.1,-1,1))(x),type="l", % ylab="y", main="First derivative") % ## second derivative % plot(x,diff(diff(function(x) predict(obj,x) %*% c(0.1,-1,1)))(x),type="l", % ylab="y", main="Second derivative") % } % x=seq(0,12,length=100) % plotNsx(nsx(1:10,df=3,derivs=c(2,2)),x) % plotNsx(nsx(1:10,df=3,derivs=c(2,1)),x) % plotNsx(nsx(1:10,df=3,derivs=c(1,1)),x) % plotNsx(nsx(1:10,df=3,derivs=c(1,0)),x) # NB: predict(obj,Boundary.knot[1])==0.0 if intercept==FALSE % rm(plotNsx,x) } \keyword{smooth} rstpm2/man/tvcCoxph-class.Rd0000644000176200001440000000346014706157711015460 0ustar liggesusers\name{tvcCoxph-class} \Rdversion{1.1} \docType{class} \alias{tvcCoxph-class} \alias{plot,tvcCoxph,missing-method} \title{Class \code{"tvcCoxph"}} \description{ Experimental approach to modelling time-dependent effects in Cox regression. } \section{Objects from the Class}{ Objects can be created by calls of the form \code{new("tvcCoxph", ...)} or \code{cox.tvc(...)}. See the \code{\link[bbmle]{mle2}} documentation. } \section{Slots}{ \describe{ \item{\code{call}:}{Object of class \code{"language"} ~~ } \item{\code{call.orig}:}{Object of class \code{"language"} ~~ } \item{\code{coef}:}{Object of class \code{"numeric"} ~~ } \item{\code{fullcoef}:}{Object of class \code{"numeric"} ~~ } \item{\code{vcov}:}{Object of class \code{"matrix"} ~~ } \item{\code{min}:}{Object of class \code{"numeric"} ~~ } \item{\code{details}:}{Object of class \code{"list"} ~~ } \item{\code{minuslogl}:}{Object of class \code{"function"} ~~ } \item{\code{method}:}{Object of class \code{"character"} ~~ } \item{\code{data}:}{Object of class \code{"list"} ~~ } \item{\code{formula}:}{Object of class \code{"character"} ~~ } \item{\code{optimizer}:}{Object of class \code{"character"} ~~ } } } \section{Extends}{ Class \code{\link[bbmle]{mle2}}, directly. } \section{Methods}{ \describe{ \item{plot}{\code{signature(x = "tvcCoxph", y = "missing")}: ... } } } %% \references{ %% %% ~~put references to the literature/web site here~~ %% } %% \author{ %% %% ~~who you are~~ %% } %% \note{ %% %% ~~further notes~~ %% } %% ~Make other sections like Warning with \section{Warning }{....} ~ %% \seealso{ %% %% ~~objects to See Also as \code{\link{~~fun~~}}, ~~~ %% %% ~~or \code{\linkS4class{CLASSNAME}} for links to other classes ~~~ %% } \examples{ showClass("tvcCoxph") } \keyword{classes} rstpm2/man/numDeltaMethod.Rd0000644000176200001440000000422114706157711015465 0ustar liggesusers\name{numDeltaMethod} \Rdversion{1.1} \alias{numDeltaMethod} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Calculate numerical delta method for non-linear predictions. } \description{ Given a regression object and an independent prediction function (as a function of the coefficients), calculate the point estimate and standard errors } \usage{ numDeltaMethod(object, fun, gd=NULL, conf.int=FALSE, level=0.95, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{object}{ A regression object with methods \code{coef} and \code{vcov}. } \item{fun}{ An independent prediction function with signature \code{function(coef, ...)}. } \item{gd}{ Specified gradients } \item{conf.int}{ Logical for whether to also calculate the confidence interval } \item{level}{ Numeric for the level of the confidence interval } \item{\dots}{ Other arguments passed to \code{fun}. } } \details{ A more user-friendly interface is provided by \code{predictnl}. } \value{ \item{fit}{Point estimates} \item{se.fit}{Standard errors} \item{Estimate}{Point estimates} \item{SE}{Standard errors} \item{conf.low}{Lower confidence interval (if conf.int=TRUE)} \item{conf.high}{Upper confidence interval (if conf.int=TRUE)} } %% \references{ %% %% ~put references to the literature/web site here ~ %% } %% \author{ %% %% ~~who you are~~ %% } %% \note{ %% %% ~~further notes~~ %% } %% ~Make other sections like Warning with \section{Warning }{....} ~ \seealso{ See Also \code{\link{predictnl}}. } \examples{ ##---- Should be DIRECTLY executable !! ---- ##-- ==> Define data, use random, ##-- or do help(data=index) for the standard data sets. ## The function is currently defined as function (object, fun, ...) { coef <- coef(object) est <- fun(coef, ...) Sigma <- vcov(object) gd <- grad(fun, coef, ...) se.est <- as.vector(sqrt(colSums(gd * (Sigma \%*\% gd)))) data.frame(Estimate = est, SE = se.est) } } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. %% \keyword{ ~kwd1 } %% \keyword{ ~kwd2 }% __ONLY ONE__ keyword per line rstpm2/man/voptimize.Rd0000644000176200001440000001101714706157711014602 0ustar liggesusers\name{voptimize} \title{Vectorised One Dimensional Optimization} \alias{voptimize} \alias{voptimise} \usage{ voptimize(f, interval, \dots, lower=pmin(interval[,1], interval[,2]), upper=pmax(interval[,1], interval[,2]), maximum = FALSE, tol = .Machine$double.eps^0.25) voptimise(f, interval, \dots, lower=pmin(interval[,1], interval[,2]), upper=pmax(interval[,1], interval[,2]), maximum = FALSE, tol = .Machine$double.eps^0.25) } \arguments{ \item{f}{the function to be optimized. The function is either minimized or maximized over its first argument depending on the value of \code{maximum}.} \item{interval}{a matrix with two columns containing the end-points of the interval to be searched for the minimum.} \item{\dots}{additional named or unnamed arguments to be passed to \code{f}} \item{lower, upper}{the lower and upper end points of the interval to be searched.} \item{maximum}{logical. Should we maximize or minimize (the default)?} \item{tol}{the desired accuracy.} } \description{ The function \code{voptimize} searches the interval from \code{lower} to \code{upper} for a minimum or maximum of the vectorised function \code{f} with respect to its first argument. \code{optimise} is an alias for \code{optimize}. } \details{ Note that arguments after \code{\dots} must be matched exactly. The method used is a combination of golden section search and successive parabolic interpolation, and was designed for use with continuous functions. Convergence is never much slower than that for a Fibonacci search. If \code{f} has a continuous second derivative which is positive at the minimum (which is not at \code{lower} or \code{upper}), then convergence is superlinear, and usually of the order of about 1.324. The function \code{f} is never evaluated at two points closer together than \eqn{\epsilon}{eps *}\eqn{ |x_0| + (tol/3)}, where \eqn{\epsilon}{eps} is approximately \code{sqrt(\link{.Machine}$double.eps)} and \eqn{x_0} is the final abscissa \code{optimize()$minimum}.\cr If \code{f} is a unimodal function and the computed values of \code{f} are always unimodal when separated by at least \eqn{\epsilon}{eps *} \eqn{ |x| + (tol/3)}, then \eqn{x_0} approximates the abscissa of the global minimum of \code{f} on the interval \code{lower,upper} with an error less than \eqn{\epsilon}{eps *}\eqn{ |x_0|+ tol}.\cr If \code{f} is not unimodal, then \code{optimize()} may approximate a local, but perhaps non-global, minimum to the same accuracy. The first evaluation of \code{f} is always at \eqn{x_1 = a + (1-\phi)(b-a)} where \code{(a,b) = (lower, upper)} and \eqn{\phi = (\sqrt 5 - 1)/2 = 0.61803..}{phi = (sqrt(5) - 1)/2 = 0.61803..} is the golden section ratio. Almost always, the second evaluation is at \eqn{x_2 = a + \phi(b-a)}{x_2 = a + phi(b-a)}. Note that a local minimum inside \eqn{[x_1,x_2]} will be found as solution, even when \code{f} is constant in there, see the last example. \code{f} will be called as \code{f(\var{x}, ...)} for a numeric value of \var{x}. The argument passed to \code{f} has special semantics and used to be shared between calls. The function should not copy it. The implementation is a vectorised version of the \code{optimize} function. } \value{ A list with components \code{minimum} (or \code{maximum}) and \code{objective} which give the location of the minimum (or maximum) and the value of the function at that point. } \source{ Based on R's C translation of Fortran code \url{https://netlib.org/fmm/fmin.f} (author(s) unstated) based on the Algol 60 procedure \code{localmin} given in the reference. } \references{ Brent, R. (1973) \emph{Algorithms for Minimization without Derivatives.} Englewood Cliffs, NJ: Prentice-Hall. } \seealso{ \code{\link{optimize}} for the standard single optimiser solver, \code{\link{nlm}}, \code{\link{uniroot}}. } \examples{ library(graphics) f <- function (x, a) (x - a)^2 xmin <- voptimize(f, lower=c(0, 0), upper=c(1,1), tol = 0.0001, a = c(1/3,2/3)) xmin ## See where the function is evaluated: voptimize(function(x) x^2*(print(x)-1), lower = c(0,0), upper = c(10,10)) ## "wrong" solution with unlucky interval and piecewise constant f(): f <- function(x) ifelse(x > -1, ifelse(x < 4, exp(-1/abs(x - 1)), 10), 10) fp <- function(x) { print(x); f(x) } plot(f, -2,5, ylim = 0:1, col = 2) voptimize(fp, cbind(-4, 20)) # doesn't see the minimum voptimize(fp, cbind(-7, 20)) # ok } \keyword{optimize} rstpm2/man/predictnl-methods.Rd0000644000176200001440000000447515040675731016212 0ustar liggesusers\name{predictnl-methods} \docType{methods} \alias{predictnl-methods} \alias{predictnl,mle2-method} \alias{predictnl,stpm2-method} \alias{predictnl,pstpm2-method} \alias{predictnl,aft-method} \title{Estimation of standard errors using the numerical delta method.} \description{ A simple, yet exceedingly useful, approach to estimate the variance of a function using the numerical delta method. A number of packages provide functions that analytically calculate the gradients; we use numerical derivatives, which generalises to models that do not offer analytical derivatives (e.g. ordinary differential equations, integration), or to examples that are tedious or error-prone to calculate (e.g. sums of predictions from GLMs). } \section{Methods}{ \describe{ \item{object= "stpm2"}{an \code{stpm2} fit} }} \usage{ \S4method{predictnl}{mle2}(object, fun, newdata=NULL, gd=NULL, ...) \S4method{predictnl}{stpm2}(object, fun, newdata=NULL, link = c("I", "log", "cloglog", "logit"), gd=NULL, ...) \S4method{predictnl}{pstpm2}(object, fun, newdata=NULL, link = c("I", "log", "cloglog", "logit"), gd=NULL, ...) \S4method{predictnl}{aft}(object, fun, newdata=NULL, link = c("I", "log", "cloglog", "logit"), gd=NULL, ...) } \arguments{ \item{object}{ An object with \code{coef}, \code{vcov} and \code{`coef<-`} methods (required). } \item{fun}{ A function that takes \code{object} as the first argument, possibly with \code{newdata} and other arguments (required). See notes for why it is often useful to include \code{newdata} as an argument to the function. } \item{newdata}{ An optional argument that defines newdata to be passed to \code{fun}. } \item{link}{ A character string to represent the link on which to calculate the variance and confidence intervals. } \item{gd}{ An optional matrix of gradients. If this is not specified, then the gradients are calculated using finite differences. } \item{\dots}{ Other arguments that are passed to \code{fun}. } } \value{ A data-frame with components \code{Estimate}, \code{lower} and \code{upper}, with an attribute "newdata" for the \code{newdata} data-frame. } \details{ The confidence interval estimation is based on the delta method using numerical differentiation. } \seealso{\code{\link{stpm2}}} \keyword{methods} %%\keyword{ ~~ other possible keyword(s)} rstpm2/man/eform.Rd0000644000176200001440000000426214706157711013670 0ustar liggesusers\name{eform.stpm2} \alias{eform} \alias{eform.stpm2} \alias{eform.default} \title{ S3 method for to provide exponentiated coefficents with confidence intervals. } \description{ S3 method for to provide exponentiated coefficents with confidence intervals. } \usage{ eform(object, ...) \method{eform}{stpm2}(object, parm, level = 0.95, method = c("Profile","Delta"), name = "exp(beta)", ...) \method{eform}{default}(object, parm, level = 0.95, method = c("Delta","Profile"), name = "exp(beta)", ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{object}{ regression object } \item{parm}{ not currently used } \item{level}{ significance level for the confidence interval } \item{method}{ method for confidence interval estimation } \item{name}{ name for the fitted value } \item{...}{ other arguments } } %% \details{ %% %% ~~ If necessary, more details than the description above ~~ %% } %% \value{ %% %% ~Describe the value returned %% %% If it is a LIST, use %% %% \item{comp1 }{Description of 'comp1'} %% %% \item{comp2 }{Description of 'comp2'} %% %% ... %% } %% \references{ %% %% ~put references to the literature/web site here ~ %% } %% \author{ %% %% ~~who you are~~ %% } %% \note{ %% %% ~~further notes~~ %% } %% ~Make other sections like Warning with \section{Warning }{....} ~ %% \seealso{ %% %% ~~objects to See Also as \code{\link{help}}, ~~~ %% } %% \examples{ %% ##---- Should be DIRECTLY executable !! ---- %% ##-- ==> Define data, use random, %% ##-- or do help(data=index) for the standard data sets. %% ## The function is currently defined as %% function (object, parm, level = 0.95, method = c("Profile"), %% name = "exp(beta)") %% { %% method <- match.arg(method) %% if (missing(parm)) %% parm <- TRUE %% estfun <- switch(method, Profile = confint) %% val <- exp(cbind(coef = coef(object), estfun(object, level = level))) %% colnames(val) <- c(name, colnames(val)[-1]) %% val[parm, ] %% } %% } %% % Add one or more standard keywords, see file 'KEYWORDS' in the %% % R documentation directory. %% \keyword{ ~kwd1 }% use one of RShowDoc("KEYWORDS") %% \keyword{ ~kwd2 }% __ONLY ONE__ keyword per line rstpm2/man/residuals-methods.Rd0000644000176200001440000000167614706157711016222 0ustar liggesusers\name{residuals-methods} \docType{methods} \alias{residuals-methods} \alias{residuals,stpm2-method} \alias{residuals,pstpm2-method} \title{Residual values for an stpm2 or pstpm2 fit} \description{ Given an \code{stpm2} or \code{pstpm2} fit, return residuals } \section{Methods}{ \describe{ \item{object= "stpm2"}{an \code{stpm2} fit} }} \usage{ \S4method{residuals}{stpm2}(object, type=c("li","gradli")) \S4method{residuals}{pstpm2}(object, type=c("li","gradli")) } \arguments{ \item{object}{an \code{stpm2} or \code{pstpm2} object} \item{type}{specify the type of residuals: \describe{ \item{"li"}{log-likelihood components (not strictly residuals)} \item{"gradli"}{gradient of the log-likelihood components (not strictly residuals)} } } } \value{ A vector or matrix. } \details{ The gradients are analytical. } \seealso{\code{\link{stpm2}}} \keyword{methods} %%\keyword{ ~~ other possible keyword(s)} rstpm2/man/coef.Rd0000644000176200001440000000225613566730271013476 0ustar liggesusers\name{coef<-} \alias{coef<-} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Generic method to update the coef in an object. } \description{ Generic method to update the coef in an object. } \usage{ coef(x) <- value } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{ object to be updated } \item{value}{ value of the coefficient to be updated. } } \details{ This simple generic method is used for the numerical delta method. } \value{ The updated object is returned. } %\references{ %% ~put references to the literature/web site here ~ %} %\author{ %% ~~who you are~~ %} %\note{ %% ~~further notes~~ %} %% ~Make other sections like Warning with \section{Warning }{....} ~ %\seealso{ %% ~~objects to See Also as \code{\link{help}}, ~~~ %} \examples{ ##---- Should be DIRECTLY executable !! ---- ##-- ==> Define data, use random, ##-- or do help(data=index) for the standard data sets. ## The function is currently defined as function (x, value) UseMethod("coef<-") } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. %% \keyword{ ~kwd1 } %% \keyword{ ~kwd2 }% __ONLY ONE__ keyword per line rstpm2/man/plot-methods.Rd0000644000176200001440000000401614363600352015165 0ustar liggesusers\name{plot-methods} \docType{methods} \alias{plot-methods} \alias{plot,stpm2-method} \alias{plot,pstpm2-method} \title{ plots for an stpm2 fit} \description{ Given an \code{stpm2} fit, return a plot } \section{Methods}{ \describe{ \item{x = "stpm2", y = "missing"}{an \code{stpm2} fit} }} \usage{ \S4method{plot}{stpm2}(x,y,newdata,type="surv", xlab="Time",line.col=1,ci.col="grey", add=FALSE,ci=TRUE,rug=TRUE, var=NULL,exposed=NULL,times=NULL,...) \S4method{plot}{pstpm2}(x,y,newdata,type="surv", xlab="Time",line.col=1,ci.col="grey", add=FALSE,ci=TRUE,rug=TRUE, var=NULL,exposed=NULL,times=NULL,...) } \arguments{ \item{x}{an \code{stpm2} object} \item{y}{not used (for generic compatibility)} \item{newdata}{required list of new data. This defines the unexposed newdata (\emph{excluding} the event times).} \item{type}{specify the type of prediction } \item{xlab}{x-axis label} \item{line.col}{line colour} \item{ci.col}{confidence interval colour} \item{ci}{whether to plot the confidence interval band (default=TRUE)} \item{add}{whether to add to the current plot (\code{add=TRUE}) or make a new plot (\code{add=FALSE}) (default=FALSE)} \item{rug}{whether to add a rug plot of the event times to the current plot (default=TRUE)} \item{var}{specify the variable name or names for the exposed/unexposed (names are given as characters)} \item{exposed}{function that takes newdata and returns the exposed dataset. By default, this increments \code{var} (except for cure models, where it defaults to the last event time).} \item{times}{specifies the times. By default, this uses a span of the observed times.} \item{\dots}{additional arguments (add to the \code{plot} command)} } %% \examples{ %% } \seealso{\code{\link{stpm2}}} \keyword{methods} %%\keyword{ ~~ other possible keyword(s)} rstpm2/man/lines.Rd0000644000176200001440000000603214363600352013660 0ustar liggesusers\name{lines.stpm2} \alias{lines.stpm2} \alias{lines.pstpm2} %- Also NEED an '\alias' for EACH other topic documented here. \title{ S3 methods for lines } \description{ S3 methods for lines } \usage{ \method{lines}{stpm2}(x, newdata = NULL, type = "surv", col = 1, ci.col= "grey", lty = par("lty"), ci = FALSE, rug = FALSE, var = NULL, exposed = NULL, times = NULL, type.relsurv = c("excess", "total", "other"), ratetable = survival::survexp.us, rmap, scale = 365.24, ...) \method{lines}{pstpm2}(x, newdata = NULL, type = "surv", col = 1, ci.col= "grey", lty = par("lty"), ci = FALSE, rug = FALSE, var = NULL, exposed = NULL, times = NULL, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{an \code{stpm2} object} \item{newdata}{required list of new data. This defines the unexposed newdata (\emph{excluding} the event times).} \item{type}{specify the type of prediction } \item{col}{line colour} \item{lty}{line type} \item{ci.col}{confidence interval colour} \item{ci}{whether to plot the confidence interval band (default=TRUE)} \item{rug}{whether to add a rug plot of the event times to the current plot (default=TRUE)} \item{var}{specify the variable name or names for the exposed/unexposed (names are given as characters)} \item{exposed}{function that takes newdata and returns the exposed dataset. By default, this increments \code{var} (except for cure models, where it defaults to the last event time).} \item{times}{specifies the times. By default, this uses a span of the observed times.} \item{type.relsurv}{type of predictions for relative survival models: either "excess", "total" or "other"} \item{scale}{scale to go from the days in the \code{ratetable} object to the analysis time used in the analysis} \item{rmap}{an optional list that maps data set names to the ratetable names. See \code{survexp}} \item{ratetable}{a table of event rates used in relative survival when \code{type.relsurv} is "total" or "other"} \item{\dots}{additional arguments (add to the \code{plot} command)} } %% \details{ %% %% ~~ If necessary, more details than the description above ~~ %% } %% \value{ %% %% ~Describe the value returned %% %% If it is a LIST, use %% %% \item{comp1 }{Description of 'comp1'} %% %% \item{comp2 }{Description of 'comp2'} %% %% ... %% } %% \references{ %% %% ~put references to the literature/web site here ~ %% } %% \author{ %% %% ~~who you are~~ %% } %% \note{ %% %% ~~further notes~~ %% } %% %% ~Make other sections like Warning with \section{Warning }{....} ~ %% \seealso{ %% %% ~~objects to See Also as \code{\link{help}}, ~~~ %% } %% \examples{ %% ##---- Should be DIRECTLY executable !! ---- %% ##-- ==> Define data, use random, %% ##-- or do help(data=index) for the standard data sets. %% } %% % Add one or more standard keywords, see file 'KEYWORDS' in the %% % R documentation directory. %% \keyword{ ~kwd1 }% use one of RShowDoc("KEYWORDS") %% \keyword{ ~kwd2 }% __ONLY ONE__ keyword per line rstpm2/man/markov_msm.Rd0000644000176200001440000005272314706157711014740 0ustar liggesusers\name{markov_msm} \alias{markov_msm} \alias{vcov.markov_msm} \alias{as.data.frame.markov_msm} \alias{as.data.frame.markov_msm_diff} \alias{as.data.frame.markov_msm_ratio} \alias{standardise} \alias{standardise.markov_msm} \alias{plot.markov_msm} \alias{subset.markov_msm} \alias{diff} \alias{diff.markov_msm} \alias{ratio_markov_msm} \alias{rbind.markov_msm} \alias{transform.markov_msm} \alias{collapse_markov_msm} \alias{zeroModel} \alias{hrModel} \alias{aftModel} \alias{addModel} \alias{hazFun} \alias{splineFun} \title{ Predictions for continuous time, nonhomogeneous Markov multi-state models using parametric and penalised survival models. } \description{ A numerically efficient algorithm to calculate predictions from a continuous time, nonhomogeneous Markov multi-state model. The main inputs are the models for the transition intensities, the initial values, the transition matrix and the covariate patterns. The predictions include state occupancy probabilities (possibly with discounting and utilities), length of stay and costs. Standard errors are calculated using the delta method. Includes, differences, ratios and standardisation. } \usage{ markov_msm(x, trans, t = c(0,1), newdata = NULL, init=NULL, tmvar = NULL, sing.inf = 1e+10, method="adams", rtol=1e-10, atol=1e-10, slow=FALSE, min.tm=1e-8, utility=function(t) rep(1, nrow(trans)), utility.sd=rep(0,nrow(trans)), use.costs=FALSE, transition.costs=function(t) rep(0, sum(!is.na(trans))), # per transition transition.costs.sd=rep(0,sum(!is.na(trans))), state.costs=function(t) rep(0,nrow(trans)), # per unit time state.costs.sd=rep(0,nrow(trans)), discount.rate = 0, block.size=500, spline.interpolation=FALSE, debug=FALSE, \dots) \method{vcov}{markov_msm}(object, \dots) \method{as.data.frame}{markov_msm}(x, row.names=NULL, optional=FALSE, ci=TRUE, P.conf.type="logit", L.conf.type="log", C.conf.type="log", P.range=c(0,1), L.range=c(0,Inf), C.range=c(0,Inf), state.weights=NULL, obs.weights=NULL, \dots) \method{as.data.frame}{markov_msm_diff}(x, row.names=NULL, optional=FALSE, P.conf.type="plain", L.conf.type="plain", C.conf.type="plain", P.range=c(-Inf,Inf), L.range=c(-Inf,Inf), C.range=c(-Inf,Inf), \dots) \method{as.data.frame}{markov_msm_ratio}(x, row.names=NULL, optional=FALSE, ...) standardise(x, \dots) \method{standardise}{markov_msm}(x, weights = rep(1,nrow(x$newdata)), normalise = TRUE, \dots) \method{plot}{markov_msm}(x, y, stacked=TRUE, which=c('P','L'), xlab="Time", ylab=NULL, col=2:6, border=col, ggplot2=FALSE, lattice=FALSE, alpha=0.2, strata=NULL, \dots) \method{subset}{markov_msm}(x, subset, \dots) \method{diff}{markov_msm}(x, y, \dots) ratio_markov_msm(x, y, \dots) \method{rbind}{markov_msm}(\dots, deparse.level=1) \method{transform}{markov_msm}(`_data`, \dots) collapse_markov_msm(object, which=NULL, sep="; ") zeroModel(object) hrModel(object,hr=1,ci=NULL,seloghr=NULL) aftModel(object,af=1,ci=NULL,selogaf=NULL) addModel(\dots) hazFun(f, tmvar="t", \dots) splineFun(time,rate,method="natural",scale=1,\dots) } %- maybe also 'usage' for other objects documented here. \arguments{ For \code{markov_msm}: \item{x}{ list of functions or parametric or penalised survival models. Currently the models include combinations of \code{\link{stpm2}}, \code{\link{pstpm2}}, \code{\link[stats]{glm}}, \code{\link[mgcv]{gam}}, \code{\link[survPen]{survPen}} or an object of class \code{"zeroModel"} from \code{\link{zeroModel}} based on one of the other classes. The order in the list matches the indexing in the \code{trans} argument. The functions can optionally use a \code{t} argument for time and/or a \code{newdata} argument. Uncertainty in the models are incorporated into the gradients, while uncertainty in the functions are currently not modelled. } \item{trans}{Transition matrix describing the states and transitions in the multi-state model. If S is the number of states in the multi-state model, \code{trans} should be an S x S matrix, with (i,j)-element a positive integer if a transition from i to j is possible in the multi-state model, \code{NA} otherwise. In particular, all diagonal elements should be \code{NA}. The integers indicating the possible transitions in the multi-state model should be sequentially numbered, 1,\ldots,K, with K the number of transitions. See \code{\link[mstate]{msprep}}} \item{t}{ numerical vector for the times to evaluation the predictions. Includes the start time } \item{newdata}{ \code{\link{data.frame}} of the covariates to use in the predictions } \item{init}{ vector of the initial values with the same length as the number of states. Defaults to the first state having an initial value of 1 (i.e. \code{"[<-"(rep(0,nrow(trans)),1,1)}). } \item{tmvar}{ specifies the name of the time variable. This should be set for regression models that do not specify this (e.g. \code{\link{glm}}) or where the time variable is ambiguous } \item{sing.inf}{If there is a singularity in the observed hazard, for example a Weibull distribution with \code{shape < 1} has infinite hazard at \code{t=0}, then as a workaround, the hazard is assumed to be a large finite number, \code{sing.inf}, at this time. The results should not be sensitive to the exact value assumed, but users should make sure by adjusting this parameter in these cases. } \item{method}{ For \code{markov_msm}, the method used by the ordinary differential equation solver. Defaults to Adams method (\code{"adams"}) for non-stiff differential equations. For \code{splineFun}, the method jused for spline interpolation; see \code{splinefun}. } \item{rtol }{relative error tolerance, either a scalar or an array as long as the number of states. Passed to \code{\link[deSolve]{lsode}} } \item{atol }{absolute error tolerance, either a scalar or an array as long as the number of states. Passed to \code{\link[deSolve]{lsode}} } \item{slow}{ logical to show whether to use the slow \code{R}-only implementation. Useful for debugging. Currently needed for costs. } \item{min.tm}{ Minimum time used for evaluations. Avoids log(0) for some models. } \item{utility}{ a function of the form \code{function(t)} that returns a utility for each state at time \code{t} for the length of stay values } \item{utility.sd}{ a function of the form \code{function(t)} that returns the standard deviation for the utility for each state at time \code{t} for the length of stay values } \item{use.costs}{ logical for whether to use costs. Default: FALSE } \item{transition.costs}{ a function of the form \code{function(t)} that returns the cost for each transition } \item{transition.costs.sd}{ a function of the form \code{function(t)} that returns the standard deviation for the cost for each transition } \item{state.costs}{ a function of the form \code{function(t)} that returns the cost per unit time for each state } \item{state.costs.sd}{ a function of the form \code{function(t)} that returns the standard deviation for the cost per unit time for each state } \item{discount.rate}{ numerical value for the proportional reduction (per unit time) in the length of stay and costs } \item{block.size}{ divide \code{newdata} into blocks. Uses less memory but is slower. Reduce this number if the function call runs out of memory. } \item{spline.interpolation}{ logical for whether to use spline interpolation for the transition hazards rather than the model predictions directly (default=TRUE). } \item{debug}{ logical flag for whether to keep the full output from the ordinary differential equation in the \code{res} component (default=\code{FALSE}). } \item{\dots}{ other arguments. For \code{markov_msm}, these are passed to the \code{\link[deSolve]{ode}} solver from the \code{deSolve} package. For \code{plot.markov_msm}, these arguments are passed to \code{\link{plot.default}} } For \code{as.data.frame.markov_msm}: \item{row.names}{add in row names to the output data-frame} \item{optional}{(not currently used)} \item{ci}{logical for whether to include confidence intervals. Default: TRUE} \item{P.conf.type}{type of transformation for the confidence interval calculation for the state occupancy probabilities. Default: log-log transformation. This is changed for \code{\link{diff}} and \code{\link{ratio_markov_msm}} objects} \item{L.conf.type}{type of transformation for the confidence interval calculation for the length of stay calculation. Default: log transformation. This is changed for \code{\link{diff}} and \code{\link{ratio_markov_msm}} objects} \item{C.conf.type}{type of transformation for the confidence interval calculation for the length of stay calculation. Default: log transformation. This is changed for \code{\link{diff}} and \code{\link{ratio_markov_msm}} objects} \item{P.range}{valid values for the state occupancy probabilities. Default: (0,1). This is changed for \code{\link{diff}} and \code{\link{ratio_markov_msm}} objects} \item{L.range}{valid values for the state occupancy probabilities. Default: (0,Inf). This is changed for \code{\link{diff}} and \code{\link{ratio_markov_msm}} objects} \item{C.range}{valid values for the state occupancy probabilities. Default: (0,Inf). This is changed for \code{\link{diff}} and \code{\link{ratio_markov_msm}} objects} \item{state.weights}{Not currently documented} \item{obs.weights}{Not currently documented} For \code{standardise.markov_msm}: \item{weights}{numerical vector to use in standardising the state occupancy probabilities, length of stay and costs. Default: 1 for each observation. } \item{normalise}{logical for whether to normalise the weights to 1. Default: TRUE} For \code{plot.markov_msm}: \item{y}{(currently ignored)} \item{stacked}{logical for whether to stack the plots. Default: TRUE} \item{xlab}{x-axis label} \item{ylab}{x-axis label} \item{col}{colours (ignored if \code{ggplot2=TRUE})} \item{border}{border colours for the \code{\link{polygon}} (ignored if \code{ggplot=TRUE})} \item{ggplot2}{use \code{ggplot2}} \item{alpha}{alpha value for confidence bands (ggplot)} \item{lattice}{use \code{lattice}} \item{strata}{formula for the stratification factors for the plot} For \code{subset.markov_msm}: \item{subset}{expression that is evaluated on the \code{newdata} component of the object to filter (or restrict) for the covariates used for predictions} For \code{transform.markov_msm}: \item{_data}{an object of class \code{"markov_msm"}} For \code{rbind.markov_msm}: \item{deparse.level}{not currently used} For \code{collapse.states}: \item{which}{either an index of the states to collapse or a character vector of the state names to collapse} \item{sep}{separator to use for the collapsed state names} For \code{zeroModel} to predict zero rates: \item{object}{survival regression object to be wrapped} For \code{hrModel} to predict rates times a hazard ratio: \item{hr}{hazard ratio} \item{seloghr}{alternative specification for the se of the log(hazard ratio); see also \code{ci} argument} For \code{aftModel} to predict accelerated rates: \item{af}{acceleration factor} \item{selogaf}{alternative specification for the se of the log(acceleration factor); see also \code{ci} argument} \code{addModel} predict rates based on adding rates from different models \code{hazFun} provides a rate function without uncertainty: \item{f}{rate function, possibly with \code{tmvar} and/or \code{newdata} as arguments} \code{splineFun} predicts rates using spline interpolation: \item{time}{exact times} \item{rate}{rates as per \code{time}} \item{scale}{rate multiplier (e.g. \code{scale=365.25} for converting from daily rates to yearly rates)} } \details{ The predictions are calculated using an ordinary differential equation solver. The algorithm uses a single run of the solver to calculate the state occupancy probabilities, length of stay, costs and their partial derivatives with respect to the model parameters. The predictions can also be combined to calculate differences, ratios and standardised. The current implementation supports a list of models for each transition. The current implementation also only allows for a vector of initial values rather than a matrix. The predictions will need to be re-run for different vectors of initial values. For \code{as.data.frame.markov_msm_ratio}, the data are provided in log form, hence the default transformations and bounds are as per \code{as.data.frame.markov_msm_diff}, with untransformed data on the real line. TODO: allow for one model to predict for the different transitions. } \value{ \code{markov_msm} returns an object of \code{\link{class}} \code{"markov_msm"}. The function \code{summary} is used to obtain and print a summary and analysis of variance table of the results. The generic accessor functions \code{coef} and \code{vcov} extract various useful features of the value returned by \code{markov_msm}. An object of class \code{"markov_msm"} is a list containing at least the following components: \item{time}{a numeric vector with the times for the predictions} \item{P}{an \code{\link{array}} for the predicted state occupancy probabilities. The array has three dimensions: time, state, and observations.} \item{L}{an \code{\link{array}} for the predicted sojourn times (or length of stay). The array has three dimensions: time, state, and observations.} \item{Pu}{an \code{\link{array}} for the partial derivatives of the predicted state occupancy probabilities with respect to the model coefficients. The array has four dimensions: time, state, coefficients, and observations.} \item{Lu}{an \code{\link{array}} for the partial derivatives of the predicted sojourn times (or length of stay) with respect to the model coefficients. The array has four dimensions: time, state, coefficients, and observations.} \item{newdata}{a \code{\link{data.frame}} with the covariates used for the predictions} \item{vcov}{the variance-covariance matrix for the models of the transition intensities} \item{trans}{copy of the \code{trans} input argument} \item{call}{the call to the function} For debugging: \item{res}{data returned from the ordinary differential equation solver. This may include more information on the predictions} } %% \references{ %% %% ~put references to the literature/web site here ~ %% } \author{ Mark Clements } %% \note{ %% } \seealso{ \code{\link[flexsurv]{pmatrix.fs}}, \code{\link[mstate]{probtrans}} } \examples{ \dontrun{ if (requireNamespace("deSolve")) { library(readstata13) library(mstate) library(ggplot2) library(survival) ## Two states: Initial -> Final ## Note: this shows how to use markov_msm to estimate survival and risk probabilities based on ## smooth hazard models. two_states <- function(model, ...) { transmat = matrix(c(NA,1,NA,NA),2,2,byrow=TRUE) rownames(transmat) <- colnames(transmat) <- c("Initial","Final") rstpm2::markov_msm(list(model), ..., trans = transmat) } ## Note: the first argument is the hazard model. The other arguments are arguments to the ## markov_msm function, except for the transition matrix, which is defined by the new function. death = gsm(Surv(time,status)~factor(rx), data=survival::colon, subset=(etype==2), df=3) cr = two_states(death, newdata=data.frame(rx="Obs"), t = seq(0,2500, length=301)) plot(cr,ggplot=TRUE) ## Competing risks ## Note: this shows how to adapt the markov_msm model for competing risks. competing_risks <- function(listOfModels, ...) { nRisks = length(listOfModels) transmat = matrix(NA,nRisks+1,nRisks+1) transmat[1,1+(1:nRisks)] = 1:nRisks rownames(transmat) <- colnames(transmat) <- c("Initial",names(listOfModels)) rstpm2::markov_msm(listOfModels, ..., trans = transmat) } ## Note: The first argument for competing_risks is a list of models. Names from that list are ## used for labelling the states. The other arguments are as per the markov_msm function, ## except for the transition matrix, which is defined by the competing_risks function. recurrence = gsm(Surv(time,status)~factor(rx), data=survival::colon, subset=(etype==1), df=3) death = gsm(Surv(time,status)~factor(rx), data=survival::colon, subset=(etype==2), df=3) cr = competing_risks(list(Recurrence=recurrence,Death=death), newdata=data.frame(rx=levels(survival::colon$rx)), t = seq(0,2500, length=301)) ## Plot the probabilities for each state for three different treatment arms plot(cr, ggplot=TRUE) + facet_grid(~ rx) ## And: differences in probabilities cr_diff = diff(subset(cr,rx=="Lev+5FU"),subset(cr,rx=="Obs")) plot(cr_diff, ggplot=TRUE, stacked=FALSE) ## Extended example: Crowther and Lambert (2017) ## library(rstpm2); library(readstata13); library(ggplot2) mex.1 <- read.dta13("http://fmwww.bc.edu/repec/bocode/m/multistate_example.dta") transmat <- rbind("Post-surgery"=c(NA,1,2), "Relapsed"=c(NA,NA,3), "Died"=c(NA,NA,NA)) colnames(transmat) <- rownames(transmat) mex.2 <- transform(mex.1,osi=(osi=="deceased")+0) levels(mex.2$size)[2] <- ">20-50 mm" # fix typo mex <- mstate::msprep(time=c(NA,"rf","os"),status=c(NA,"rfi","osi"), data=mex.2,trans=transmat,id="pid", keep=c("age","size","nodes","pr_1","hormon")) mex <- transform(mex, size2=(unclass(size)==2)+0, # avoids issues with TRUE/FALSE size3=(unclass(size)==3)+0, hormon=(hormon=="yes")+0, Tstart=Tstart/12, Tstop=Tstop/12) ## c.ar <- stpm2(Surv(Tstart,Tstop,status) ~ age + size2 + size3 + nodes + pr_1 + hormon, data = mex, subset=trans==1, df=3, tvc=list(size2=1,size3=1,pr_1=1)) c.ad <- stpm2(Surv(Tstart, Tstop, status) ~ age + size + nodes + pr_1 + hormon, data = mex, subset=trans==2, df=1) c.rd <- stpm2( Surv(Tstart,Tstop,status) ~ age + size + nodes + pr_1 + hormon, data=mex, subset=trans==3, df=3, tvc=list(pr_1=1)) ## nd <- expand.grid(nodes=seq(0,20,10), size=levels(mex$size)) nd <- transform(nd, age=54, pr_1=3, hormon=0, size2=(unclass(size)==2)+0, size3=(unclass(size)==3)+0) ## Predictions system.time(pred1 <- rstpm2::markov_msm(list(c.ar,c.ad,c.rd), t = seq(0,15,length=301), newdata=nd, trans = transmat)) # ~2 seconds pred1 <- transform(pred1, Nodes=paste("Nodes =",nodes), Size=paste("Size",size)) ## Figure 3 plot(pred1, ggplot=TRUE) + facet_grid(Nodes ~ Size) + xlab("Years since surgery") plot(pred1, ggplot=TRUE, flipped=TRUE) + facet_grid(Nodes ~ Size) + xlab("Years since surgery") plot(pred1, strata=~nodes+size, xlab="Years since surgery", lattice=TRUE) ## Figure 4 plot(subset(pred1, nodes==0 & size=="<=20 mm"), stacked=FALSE, ggplot=TRUE) + facet_grid(. ~ state) + xlab("Years since surgery") ## Figure 5 a <- diff(subset(pred1,nodes==0 & size=="<=20 mm"), subset(pred1,nodes==0 & size==">20-50 mm")) a <- transform(a, label = "Prob(Size<=20 mm)-Prob(20mm20-50 mm")) b <- transform(b,label="Prob(Size<=20 mm)-Prob(20mm50 mm")) c <- transform(c, label = "Prob(Size<=20 mm)-Prob(Size>=50mm)") d <- ratio_markov_msm(subset(pred1,nodes==0 & size=="<=20 mm"), subset(pred1,nodes==0 & size==">50 mm")) d <- transform(d,label= "Prob(Size<=20 mm)-Prob(Size>=50mm)") ## e <- diff(subset(pred1,nodes==0 & size==">20-50 mm"), subset(pred1,nodes==0 & size==">50 mm")) e <- transform(e,label="Prob(20mm=50mm)") f <- ratio_markov_msm(subset(pred1,nodes==0 & size==">20-50 mm"), subset(pred1,nodes==0 & size==">50 mm")) f <- transform(f, label = "Prob(20mm=50mm)") ## combine diffs <- rbind(a,c,e) ratios <- rbind(b,d,f) ## Figure 5 plot(diffs, stacked=FALSE, ggplot2=TRUE) + xlab("Years since surgery") + ylim(c(-0.4, 0.4)) + facet_grid(label ~ state) ## plot(ratios, stacked=FALSE, ggplot2=TRUE) + xlab("Years since surgery") + ylim(c(0, 3)) + facet_grid(label ~ state) ## Figure 6 plot(subset(pred1, nodes==0 & size=="<=20 mm"), stacked=FALSE, which="L", ggplot2=TRUE) + facet_grid(. ~ state) + xlab("Years since surgery") ## Figure 7 plot(diffs, stacked=FALSE, which="L", ggplot2=TRUE) + xlab("Years since surgery") + ylim(c(-4, 4)) + facet_grid(label ~ state) plot(ratios, stacked=FALSE, which="L", ggplot2=TRUE) + xlab("Years since surgery") + ylim(c(0.1, 10)) + coord_trans(y="log10") + facet_grid(label ~ state) } } } \keyword{ survival } rstpm2/man/bhazard.Rd0000644000176200001440000000242014363600352014156 0ustar liggesusers\name{bhazard} \alias{bhazard} \title{ Placemarker function for a baseline hazard function. } \description{ Defined as the identity function. } \usage{ bhazard(x) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{ Input (and output) value } } %% \details{ %% %% ~~ If necessary, more details than the description above ~~ %% } \value{ Returns the input value } %% \references{ %% %% ~put references to the literature/web site here ~ %% } %% \author{ %% %% ~~who you are~~ %% } %% \note{ %% %% ~~further notes~~ %% } %% %% ~Make other sections like Warning with \section{Warning }{....} ~ %% \seealso{ %% %% ~~objects to See Also as \code{\link{help}}, ~~~ %% } %% \examples{ %% ##---- Should be DIRECTLY executable !! ---- %% ##-- ==> Define data, use random, %% ##-- or do help(data=index) for the standard data sets. %% ## The function is currently defined as %% function (x) %% x %% } %% % Add one or more standard keywords, see file 'KEYWORDS' in the %% % R documentation directory (show via RShowDoc("KEYWORDS")): %% % \keyword{ ~kwd1 } %% % \keyword{ ~kwd2 } %% % Use only one keyword per line. %% % For non-standard keywords, use \concept instead of \keyword: %% % \concept{ ~cpt1 } %% % \concept{ ~cpt2 } %% % Use only one concept per line. rstpm2/man/markov_sde.Rd0000644000176200001440000001235514363600352014705 0ustar liggesusers\name{markov_sde} \alias{markov_sde} \alias{standardise.markov_sde} \alias{plot.markov_sde} \alias{as.data.frame.markov_sde} \title{ Predictions for continuous time, nonhomogeneous Markov multi-state models using Aalen's additive hazards models. } \description{ A numerically efficient algorithm to calculate predictions from a continuous time, nonhomogeneous Markov multi-state model. The main inputs are are a list of Aalen's additive hazards models, the initial values, the transition matrix and the covariate patterns. The predictions include state occupancy probabilities and length of stay. Standard errors are calculated using the delta method. Includes differences and standardisation. } \usage{ markov_sde(models, trans, newdata, init = NULL, nLebesgue = 10000 + 1, los = FALSE, nOut = 300, weights = 1) \method{standardise}{markov_sde}(x, \dots) \method{plot}{markov_sde}(x, y, stacked=TRUE, which=c("P","L"), index=NULL, xlab="Time", ylab=NULL, col=2:6, border=col, ggplot2=FALSE, lattice=FALSE, alpha=0.2, strata=NULL, \dots) \method{as.data.frame}{markov_sde}(x, row.names=NULL, optional=NULL, ci=TRUE, P.conf.type="logit", L.conf.type="log", P.range=c(0,1), L.range=c(0,Inf), \dots) } \arguments{ \item{models}{ list of models. Currently allows only for \code{\link[timereg]{aalen}} regression models. } \item{trans}{ Transition matrix describing the states and transitions in the multi-state model. If S is the number of states in the multi-state model, \code{trans} should be an S x S matrix, with (i,j)-element a positive integer if a transition from i to j is possible in the multi-state model, \code{NA} otherwise. In particular, all diagonal elements should be \code{NA}. The integers indicating the possible transitions in the multi-state model should be sequentially numbered, 1,\ldots,K, with K the number of transitions. See \code{\link[mstate]{msprep}} } \item{newdata}{ \code{\link{data.frame}} of the covariates to use in the predictions } \item{init}{ vector of the initial values with the same length as the number of states. Defaults to the first state having an initial value of 1 (i.e. \code{"[<-"(rep(0,nrow(trans)),1,1)}). } \item{nLebesgue}{ Number of steps for the continuous integration } \item{los}{ logical variable for whether to estimate the length of stay } \item{nOut}{ number of rows to represent the continuous changes } \item{weights}{ numeric vector to represent differences or standardisation } For \code{plot.markov_sde}: \item{y}{(currently ignored)} \item{stacked}{logical for whether to stack the plots. Default: TRUE} \item{index}{indicator of which row of \code{newdata} to plot} \item{which}{character to indicate either transition probabilities (\code{"P"}) or length of stay (\code{"L"})). Default: \code{"P"}.} \item{xlab}{x-axis label} \item{ylab}{x-axis label} \item{col}{colours (ignored if \code{ggplot2=TRUE})} \item{border}{border colours for the \code{\link{polygon}} (ignored if \code{ggplot=TRUE})} \item{ggplot2}{use \code{ggplot2}} \item{alpha}{alpha value for confidence bands (ggplot)} \item{lattice}{use \code{lattice}} \item{strata}{formula for the stratification factors for the plot} For \code{as.data.frame.markov_sde}: \item{row.names}{add in row names to the output data-frame} \item{optional}{(not currently used)} \item{ci}{logical for whether to include confidence intervals. Default: TRUE} \item{P.conf.type}{type of transformation for the confidence interval calculation for the state occupancy probabilities. Default: logit transformation. This is changed to \code{"identity"} if any of the weights are negative} \item{L.conf.type}{type of transformation for the confidence interval calculation for the length of stay calculation. Default: log transformation. \code{"identity"} if any of the weights are negative} \item{P.range}{valid values for the state occupancy probabilities. Default: (0,1). } \item{L.range}{valid values for the state occupancy probabilities. Default: (0,Inf). } For \code{standardise.markov_sde}: \item{x}{object to extract standardised values} \item{\dots}{ other arguments. For \code{plot.markov_sde}, these arguments are passed to \code{\link{plot.default}}. For \code{standardise.markov_sde}, these arguments are not used, as the standardisation must be done earlier in \code{markov_sde}. } } \details{ Uses an approach developed by Ryalen and colleagues. This is a re-implementation in C++. The current implementation only allows for a vector of initial values rather than a matrix. The predictions will need to be re-run for different vectors of initial values. } \value{ \code{markov_sde} returns an object of \code{\link{class}} \code{"markov_sde"}. } %% \references{ %% %% ~put references to the literature/web site here ~ %% } \author{ Mark Clements } %% \note{ %% %% ~~further notes~~ %% } %% ~Make other sections like Warning with \section{Warning }{....} ~ \seealso{ \code{\link{markov_msm}} } %% \examples{ %% } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory (show via RShowDoc("KEYWORDS")): % \keyword{ ~kwd1 } % \keyword{ ~kwd2 } % Use only one keyword per line. % For non-standard keywords, use \concept instead of \keyword: % \concept{ ~cpt1 } % \concept{ ~cpt2 } % Use only one concept per line. rstpm2/man/smoothpwc.Rd0000644000176200001440000000367514363600352014603 0ustar liggesusers\name{smoothpwc} \alias{smoothpwc} \title{ Utility to use a smooth function in markov_msm based on piece-wise constant values } \description{ Utility to use a smooth function in markov_msm based on piece-wise constant values } \usage{ smoothpwc(midts, rates, tmvar = "t", offsetvar = "", ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{midts}{ mid-point values for time in each segment } \item{rates}{ rates at those mid-points (or for the interval) } \item{tmvar}{ string for the time variable } \item{offsetvar}{ string for a time offset variable } \item{\dots}{ other arguments } } \details{ Uses splines to smooth the log-rates. This assumes that the rates are strictly greater than zero. } \value{ a function that is used in markov_msm } %% \references{ %% %% ~put references to the literature/web site here ~ %% } %% \author{ %% %% ~~who you are~~ %% } %% \note{ %% %% ~~further notes~~ %% } %% ~Make other sections like Warning with \section{Warning }{....} ~ %% \seealso{ %% %% ~~objects to See Also as \code{\link{help}}, ~~~ %% } \examples{ ##---- Should be DIRECTLY executable !! ---- ##-- ==> Define data, use random, ##-- or do help(data=index) for the standard data sets. ## The function is currently defined as function (midts, rates, tmvar = "t", offsetvar = "", ...) { log.smoother <- splinefunx(midts, log(rates), constant.right = TRUE) haz <- function(newdata) { t <- newdata[[tmvar]] + (if (offsetvar != "") newdata[[offsetvar]] else 0) exp(log.smoother(t)) } structure(list(haz = haz), class = "smoothpwc") } } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory (show via RShowDoc("KEYWORDS")): % \keyword{ ~kwd1 } % \keyword{ ~kwd2 } % Use only one keyword per line. % For non-standard keywords, use \concept instead of \keyword: % \concept{ ~cpt1 } % \concept{ ~cpt2 } % Use only one concept per line. rstpm2/man/nsx.Rd0000644000176200001440000001211614706157711013365 0ustar liggesusers\name{nsx} \alias{nsx} \title{Generate a Basis Matrix for Natural Cubic Splines (with eXtensions)} \description{ Generate the B-spline basis matrix for a natural cubic spline (with eXtensions). } \usage{ nsx(x, df = NULL, knots = NULL, intercept = FALSE, Boundary.knots = range(x), derivs = if (cure) c(2, 1) else c(2, 2), log = FALSE, centre = FALSE, cure = FALSE, stata.stpm2.compatible = FALSE) } \arguments{ \item{x}{the predictor variable. Missing values are allowed.} \item{df}{degrees of freedom. One can supply \code{df} rather than knots; \code{ns()} then chooses \code{df - 1 - intercept + 4 - sum(derivs)} knots at suitably chosen quantiles of \code{x} (which will ignore missing values).} \item{knots}{breakpoints that define the spline. The default is no knots; together with the natural boundary conditions this results in a basis for linear regression on \code{x}. Typical values are the mean or median for one knot, quantiles for more knots. See also \code{Boundary.knots}.} \item{intercept}{if \code{TRUE}, an intercept is included in the basis; default is \code{FALSE}.} \item{Boundary.knots}{boundary points at which to impose the natural boundary conditions and anchor the B-spline basis (default the range of the data). If both \code{knots} and \code{Boundary.knots} are supplied, the basis parameters do not depend on \code{x}. Data can extend beyond \code{Boundary.knots}} \item{derivs}{an integer vector of length 2 with values between 0 and 2 giving the derivative constraint order at the left and right boundary knots; an order of 2 constrains the second derivative to zero (f''(x)=0); an order of 1 constrains the first and second derivatives to zero (f'(x)=f''(x)=0); an order of 0 constrains the zero, first and second derivatives to zero (f(x)=f'(x)=f''(x)=0)} \item{log}{a Boolean indicating whether the underlying values have been log transformed; (deprecated: only used to calculate derivatives in rstpm2:::stpm2Old} \item{centre}{if specified, then centre the splines at this value (i.e. f(centre)=0) (default=FALSE)} \item{cure}{a Boolean indicated whether to estimate cure; changes the default derivs argument, such that the right boundary has the first and second derivatives constrained to zero; defaults to FALSE} \item{stata.stpm2.compatible}{a Boolean to determine whether to use Stata stpm's default knot placement; defaults to FALSE} } \value{ A matrix of dimension \code{length(x) * df} where either \code{df} was supplied or if \code{knots} were supplied, \code{df = length(knots) + 1 + intercept}. Attributes are returned that correspond to the arguments to \code{ns}, and explicitly give the \code{knots}, \code{Boundary.knots} etc for use by \code{predict.nsx()}. \code{nsx()} is based on the functions \code{\link{ns}} and \code{\link{spline.des}}. It generates a basis matrix for representing the family of piecewise-cubic splines with the specified sequence of interior knots, and the natural boundary conditions. These enforce the constraint that the function is linear beyond the boundary knots, which can either be supplied, else default to the extremes of the data. A primary use is in modeling formula to directly specify a natural spline term in a model. The extensions from \code{\link{ns}} are: specification of the derivative constraints at the boundary knots; whether to centre the knots; incorporation of cure using derivatives; compatible knots with Stata's stpm2; and an indicator for a log-transformation of \code{x} for calculating derivatives. } \seealso{ \code{\link{ns}}, \code{\link{bs}}, \code{predict.nsx}, \code{\link{SafePrediction}} } \references{ Hastie, T. J. (1992) Generalized additive models. Chapter 7 of \emph{Statistical Models in S} eds J. M. Chambers and T. J. Hastie, Wadsworth & Brooks/Cole. } \examples{ require(stats); require(graphics); require(splines) nsx(women$height, df = 5) summary(fm1 <- lm(weight ~ ns(height, df = 5), data = women)) ## example of safe prediction plot(women, xlab = "Height (in)", ylab = "Weight (lb)") ht <- seq(57, 73, length.out = 200) lines(ht, predict(fm1, data.frame(height=ht))) % plotNsx <- function(obj,x,coef=c(-3,-4,2)) { % ## numerical derivatives returning a function % diff <- function(f,delta=1e-4,...) function(x) (f(x+delta,...)-f(x-delta,...))/(2*delta) % par(mfrow=c(2,2)) % plot(x,predict(obj,x)%*%coef,type="l",ylab="y",main="Natural spline") % ## first derivative % plot(x,diff(function(x) predict(obj,x) %*% c(0.1,-1,1))(x),type="l", % ylab="y", main="First derivative") % ## second derivative % plot(x,diff(diff(function(x) predict(obj,x) %*% c(0.1,-1,1)))(x),type="l", % ylab="y", main="Second derivative") % } % x=seq(0,12,length=100) % plotNsx(nsx(1:10,df=3,derivs=c(2,2)),x) % plotNsx(nsx(1:10,df=3,derivs=c(2,1)),x) % plotNsx(nsx(1:10,df=3,derivs=c(1,1)),x) % plotNsx(nsx(1:10,df=3,derivs=c(1,0)),x) # NB: predict(obj,Boundary.knot[1])==0.0 if intercept==FALSE % rm(plotNsx,x) } \keyword{smooth} rstpm2/man/aft.Rd0000644000176200001440000001032614706157711013330 0ustar liggesusers\name{aft} \alias{aft} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Parametric accelerated failure time model with smooth time functions } \description{ This implements the accelerated failure time models S_0(t exp(beta x)) and S_0(int_0^t exp(beta x(u)) du). The baseline function S_0(t*) is modelled as exp(-exp(eta_0(log(t*)))), where eta_0(log(t*)) is a linear predictor using natural splines. } \usage{ aft(formula, data, smooth.formula = NULL, df = 3, tvc = NULL, cure.formula = ~1, control = list(), init = NULL, weights = NULL, tvc.intercept = TRUE, tvc.integrated = FALSE, timeVar = "", time0Var = "", cure = FALSE, mixture = FALSE, contrasts = NULL, subset = NULL, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{ a formula object, with the response on the left of a \code{~} operator, and the regression terms (excluding time) on the right. The response should be a survival object as returned by the \code{\link[survival]{Surv}} function. The terms can include linear effects for any time-varying coefficients. [required] } \item{data}{ a data-frame in which to interpret the variables named in the \code{formula} argument. [at present: required] } \item{smooth.formula}{ a formula for describing the time effects for the linear predictor, excluding the baseline S_0(t*), but including time-dependent acceleration factors. The time-dependent acceleration factors can be modelled with any smooth functions. } \item{df}{ an integer that describes the degrees of freedom for the \code{ns} function for modelling the baseline log-cumulative hazards function (default=3). } \item{tvc}{ a list with the names of the time-varying coefficients. This uses natural splines (e.g. \code{tvc=list(hormon=3)} is equivalent to \code{smooth.formula=~...+hormon:nsx(log(time),df=3)}), which by default does \emph{not} include an intercept (or main effect) term. } \item{cure.formula}{ a formula for describing the cure fraction. } \item{control}{ \code{control} argument passed to \code{optim}. } \item{init}{ \code{init} should either be \code{FALSE}, such that initial values will be determined using Cox regression, or a numeric vector of initial values. } \item{weights}{ an optional vector of 'prior weights' to be used in the fitting process. Should be \code{NULL} or a numeric vector. } \item{tvc.intercept}{ logical for whether to include an intercept in the time-varying acceleration factor (defaults to TRUE) } \item{tvc.integrated}{ logical for whether the time-varying acceleration factor should be based on a integration, rather than a cumulative effect (defaults to FALSE) } \item{timeVar}{ string variable defining the time variable. By default, this is determined from the survival object, however this may be ambiguous if two variables define the time. } \item{time0Var}{ string variable to determine the entry variable; useful for when more than one data variable is used in the entry time. } \item{cure}{ logical for whether to model for cure using a non-mixture model (default=FALSE) } \item{mixture}{ logical for whether to model for cure using a mixture model (default=FALSE) } \item{contrasts}{ an optional list. See the \code{contrasts.arg} of \code{\link{model.matrix.default}}. } \item{subset}{ an optional vector specifying a subset of observations to be used in the fitting process. } \item{\dots}{ additional arguments to be passed to the \code{\link[bbmle]{mle2}}. } } \details{ The implementation extends the \code{mle2} object from the \code{bbmle} package. The model inherits all of the methods from the \code{mle2} class. } \value{ An \code{aft-class} object that inherits from \code{mle2-class}. } %% \references{ %% %% ~put references to the literature/web site here ~ %% } \author{ Mark Clements. } %% \note{ %% %% ~~further notes~~ %% } %% ~Make other sections like Warning with \section{Warning }{....} ~ \seealso{ \code{\link[survival]{survreg}}, \code{\link[survival]{coxph}} } \examples{ summary(aft(Surv(rectime,censrec==1)~hormon,data=brcancer,df=4)) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{ survival } \keyword{ smooth } rstpm2/man/incrVar.Rd0000644000176200001440000000347213566730271014167 0ustar liggesusers\name{incrVar} \Rdversion{1.1} \alias{incrVar} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Utility that returns a function to increment a variable in a data-frame. } \description{ A functional approach to defining an increment in one or more variables in a data-frame. Given a variable name and an increment value, return a function that takes any data-frame to return a data-frame with incremented values. } \usage{ incrVar(var, increment = 1) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{var}{ String for the name(s) of the variable(s) to be incremented } \item{increment}{ Value that the variable should be incremented. } } \details{ Useful for defining transformations for calculating rate ratios. } \value{ A function with a single \code{data} argument that increments the variables in the \code{data} list/data-frame. } %% \references{ %% %% ~put references to the literature/web site here ~ %% } %% \author{ %% %% ~~who you are~~ %% } %% \note{ %% %% ~~further notes~~ %% } %% %% ~Make other sections like Warning with \section{Warning }{....} ~ %% \seealso{ %% %% ~~objects to See Also as \code{\link{help}}, ~~~ %% } \examples{ ##---- Should be DIRECTLY executable !! ---- ##-- ==> Define data, use random, ##-- or do help(data=index) for the standard data sets. ## The function is currently defined as function (var, increment = 1) { n <- length(var) if (n > 1 && length(increment)==1) increment <- rep(increment, n) function(data) { for (i in 1:n) { data[[var[i]]] <- data[[var[i]]] + increment[i] } data } } } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. %% \keyword{ ~kwd1 } %% \keyword{ ~kwd2 }% __ONLY ONE__ keyword per line rstpm2/man/predict-methods.Rd0000644000176200001440000001372714706157711015661 0ustar liggesusers\name{predict-methods} \docType{methods} \alias{predict-methods} \alias{predict,stpm2-method} \alias{predict,pstpm2-method} \title{ Predicted values for an stpm2 or pstpm2 fit} \description{ Given an \code{stpm2} fit and an optional list of new data, return predictions } \section{Methods}{ \describe{ \item{object= "stpm2"}{an \code{stpm2} fit} }} \usage{ \S4method{predict}{stpm2}(object, newdata=NULL, type=c("surv","cumhaz","hazard","density","hr","sdiff", "hdiff","loghazard","link","meansurv","meansurvdiff","meanhr", "odds","or","margsurv","marghaz","marghr","meanhaz","af", "fail","margfail","meanmargsurv","uncured","rmst","probcure", "lpmatrix", "gradh", "gradH","rmstdiff","lpmatrixD"), grid=FALSE,seqLength=300, type.relsurv=c("excess","total","other"), scale=365.24, rmap, ratetable=survival::survexp.us, se.fit=FALSE,link=NULL,exposed=NULL,var=NULL, keep.attributes=FALSE, use.gr=TRUE,level=0.95, n.gauss.quad=100,full=FALSE,...) \S4method{predict}{pstpm2}(object, newdata=NULL, type=c("surv","cumhaz","hazard","density","hr","sdiff", "hdiff","loghazard","link","meansurv","meansurvdiff","meanhr", "odds","or","margsurv","marghaz","marghr","meanhaz","af", "fail","margfail","meanmargsurv","rmst","lpmatrix", "gradh", "gradH","rmstdiff","lpmatrixD"), grid=FALSE,seqLength=300, se.fit=FALSE,link=NULL,exposed=NULL,var=NULL, keep.attributes=FALSE, use.gr=TRUE,level=0.95, n.gauss.quad=100,full=FALSE,...) } \arguments{ \item{object}{an \code{stpm2} or \code{pstpm2} object} \item{newdata}{optional list of new data (required if type in ("hr","sdiff","hdiff","meansurvdiff","or","uncured")). For type in ("hr","sdiff","hdiff","meansurvdiff","or","af","uncured"), this defines the unexposed newdata. This can be combined with \code{grid} to get a regular set of event times (i.e. newdata would \emph{not} include the event times). } \item{type}{specify the type of prediction: \describe{ \item{"surv"}{survival probabilities} \item{"cumhaz"}{cumulative hazard} \item{"hazard"}{hazard} \item{"density"}{density} \item{"hr"}{hazard ratio} \item{"sdiff"}{survival difference} \item{"hdiff"}{hazard difference} \item{"loghazard"}{log hazards} \item{"meansurv"}{mean survival} \item{"meansurvdiff"}{mean survival difference} \item{"odds"}{odds} \item{"or"}{odds ratio} \item{"margsurv"}{marginal (population) survival} \item{"marghaz"}{marginal (population) hazard} \item{"marghr"}{marginal (population) hazard ratio} \item{"meanhaz"}{mean hazard} \item{"meanhr"}{mean hazard ratio} \item{"af"}{attributable fraction} \item{"fail"}{failure (=1-survival)} \item{"margfail"}{marginal failure (=1-marginal survival)} \item{"meanmargsurv"}{mean marginal survival, averaged over the frailty distribution} \item{"uncured"}{distribution for the uncured} \item{"rmst"}{restricted mean survival time} \item{"rmstdiff"}{restricted mean survival time difference} \item{"probcure"}{probability of cure} \item{"lpmatrix"}{design matrix} \item{"lpmatrixD"}{design matrix for the derivative with respect to time} } } \item{grid}{whether to merge newdata with a regular sequence of event times (default=FALSE)} \item{seqLength}{length of the sequence used when \code{grid=TRUE}} \item{type.relsurv}{type of predictions for relative survival models: either "excess", "total" or "other"} \item{scale}{scale to go from the days in the \code{ratetable} object to the analysis time used in the analysis} \item{rmap}{an optional list that maps data set names to the ratetable names. See \code{survexp}} \item{ratetable}{a table of event rates used in relative survival when \code{type.relsurv} is "total" or "other"} \item{se.fit}{whether to calculate confidence intervals (default=FALSE)} \item{link}{allows a different link for the confidence interval calculation (default=NULL, such that switch(type,surv="cloglog",cumhaz="log",hazard="log",hr="log",sdiff="I", hdiff="I",loghazard="I",link="I",odds="log",or="log",margsurv="cloglog", marghaz="log",marghr="log"))} \item{exposed}{a function that takes newdata and returns a transformed data-frame for those exposed or the counterfactual. By default, this increments \code{var} (except for cure models, where it defaults to the last event time).} \item{var}{specify the variable name or names for the exposed/unexposed (names are given as characters)} \item{keep.attributes}{Boolean to determine whether the output should include the newdata as an attribute (default=TRUE)} \item{use.gr}{Boolean to determine whether to use gradients in the variance calculations when they are available (default=TRUE)} \item{level}{confidence level for the confidence intervals (default=0.95)} \item{n.gauss.quad}{number of Gauassian quadrature points used for integrations (default=100)} \item{full}{logical for whether to return a full data-frame with predictions and \code{newdata} combined. Useful for \code{lattice} and \code{ggplot2} plots. (default=FALSE)} \item{\dots}{additional arguments (for generic compatibility)} } \value{ A data-frame with components \code{Estimate}, \code{lower} and \code{upper}, with an attribute "newdata" for the \code{newdata} data-frame. } \details{ The confidence interval estimation is based on the delta method using numerical differentiation. } \seealso{\code{\link{stpm2}}} \keyword{methods} %%\keyword{ ~~ other possible keyword(s)} rstpm2/man/colon.Rd0000644000176200001440000000323713416410275013665 0ustar liggesusers\name{colon} \Rdversion{1.1} \alias{colon} \docType{data} \title{ Colon cancer. } \description{ Diagnoses of colon cancer. } % cat(mapply(function(name,label) sprintf("\\item{\\code{%s}}{%s}",name,label), names(colon), attr(colon, "var.labels")),sep="\n") \usage{data(colon)} \format{ A data frame with 15564 observations on the following 13 variables. \describe{ \item{\code{sex}}{Sex (1=male, 2=female))} \item{\code{age}}{Age at diagnosis} \item{\code{stage}}{Clinical stage at diagnosis (1=Unknown, 2=Localised, 3=Regional, 4=Distant)} \item{\code{mmdx}}{Month of diagnosis} \item{\code{yydx}}{Year of diagnosis} \item{\code{surv_mm}}{Survival time in months} \item{\code{surv_yy}}{Survival time in years} \item{\code{status}}{Vital status at last contact (1=Alive, 2=Dead: cancer, 3=Dead; other, 4=Lost to follow-up)} \item{\code{subsite}}{Anatomical subsite of tumour (1=Coecum and ascending, 2=Transverse, 3=Descending and sigmoid, 4=Other and NOS)} \item{\code{year8594}}{Year of diagnosis (1=Diagnosed 75-84, 2=Diagnosed 85-94)} \item{\code{agegrp}}{Age in 4 categories (1=0-44, 2=45-59, 3=60-74, 4=75+)} \item{\code{dx}}{Date of diagnosis} \item{\code{exit}}{Date of exit} } } \details{ Caution: there is a \code{colon} dataset in the \code{survival} package. We recommend using \code{data(colon,package="rstpm2")} to ensure the correct dataset is used. } %% \source{ %% %% ~~ reference to a publication or URL from which the data were obtained ~~ %% } %% \references{ %% %% ~~ possibly secondary sources and usages ~~ %% } \examples{ data(colon,package="rstpm2") # avoids name conflict with survival::colon ## maybe str(colon) ; ... } \keyword{datasets} rstpm2/man/brcancer.Rd0000644000176200001440000000234614363600352014331 0ustar liggesusers\name{brcancer} \Rdversion{1.1} \alias{brcancer} \docType{data} \title{ German breast cancer data from Stata. } \description{ See \url{https://www.stata-press.com/data/r11/brcancer.dta}. } \usage{data(brcancer)} \format{ A data frame with 686 observations on the following 15 variables. \describe{ \item{\code{id}}{a numeric vector} \item{\code{hormon}}{hormonal therapy} \item{\code{x1}}{age, years} \item{\code{x2}}{menopausal status} \item{\code{x3}}{tumour size, mm} \item{\code{x4}}{tumour grade} \item{\code{x5}}{number of positive nodes} \item{\code{x6}}{progesterone receptor, fmol} \item{\code{x7}}{estrogen receptor, fmol} \item{\code{rectime}}{recurrence free survival time, days} \item{\code{censrec}}{censoring indicator} \item{\code{x4a}}{tumour grade>=2} \item{\code{x4b}}{tumour grade==3} \item{\code{x5e}}{exp(-0.12*x5)} } } %% \details{ %% %% ~~ If necessary, more details than the __description__ above ~~ %% } %% \source{ %% %% ~~ reference to a publication or URL from which the data were obtained ~~ %% } %% \references{ %% %% ~~ possibly secondary sources and usages ~~ %% } \examples{ data(brcancer) ## maybe str(brcancer) ; plot(brcancer) ... } \keyword{datasets} rstpm2/man/cox.tvc.Rd0000644000176200001440000000255114706157711014143 0ustar liggesusers\name{cox.tvc} \alias{cox.tvc} \title{Test for a time-varying effect in the \code{coxph} model} \description{ Test for a time-varying effect in the \code{coxph} model by re-fitting the partial likelihood including a time-varying effect, plot the effect size, and return the re-fitted model. The main advantage of this function over the \code{tt()} special is that it scales well for moderate sized datasets (cf. \code{tt} which expands the dataset and scales very poorly). } \usage{ cox.tvc(obj, var=NULL, method="logt") } \arguments{ \item{obj}{A \code{coxph} object. Currently restricted to right censoring with Breslow ties and without stratification, etc.} \item{var}{String for the effect name. Currently assumes simple continuous effects.} \item{method}{A string representing the possible time transformations. Currently only "logt".} } \value{ Returns a \code{tvcCoxph} object (which inherits from the \code{mle2} class) of the re-fitted model. } \seealso{ \code{\link[survival]{coxph}}, \code{\link[survival]{cox.zph}} } %% \references{ %% } \examples{ ## As per the example for cox.zph: fit <- coxph(Surv(futime, fustat) ~ age + ecog.ps, data=ovarian) temp <- rstpm2:::cox.tvc(fit, "age") print(temp) # display the results plot(temp) # plot curves } \keyword{time-varying} \keyword{Cox} rstpm2/man/predictnl.Rd0000644000176200001440000001210415040650720014524 0ustar liggesusers\name{predictnl} \alias{predictnl} \alias{predictnl.default} \alias{predictnl.lm} \alias{predict.formula} \alias{confint.predictnl} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Estimation of standard errors using the numerical delta method. } \description{ A simple, yet exceedingly useful, approach to estimate the variance of a function using the numerical delta method. A number of packages provide functions that analytically calculate the gradients; we use numerical derivatives, which generalises to models that do not offer analytical derivatives (e.g. ordinary differential equations, integration), or to examples that are tedious or error-prone to calculate (e.g. sums of predictions from GLMs). } \usage{ \method{predictnl}{default}(object, fun, newdata=NULL, gd=NULL, ...) \method{predictnl}{lm}(object, fun, newdata=NULL, ...) \method{predict}{formula}(object,data,newdata,na.action,type="model.matrix",...) \method{confint}{predictnl}(object, parm, level=0.95, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{object}{ An object with \code{coef}, \code{vcov} and \code{`coef<-`} methods (required). } \item{fun}{ A function that takes \code{object} as the first argument, possibly with \code{newdata} and other arguments (required). See notes for why it is often useful to include \code{newdata} as an argument to the function. } \item{newdata}{ An optional argument that defines newdata to be passed to \code{fun}. } \item{gd}{ An optional matrix of gradients. If this is not specified, then the gradients are calculated using finite differences. } \item{parm}{ currently ignored } \item{level}{ significance level for 2-sided confidence intervals } \item{data}{ object used to define the model frame } \item{na.action}{ passed to \code{model.frame} } \item{type}{ currently restricted to \code{"model.matrix"} } \item{\dots}{ Other arguments that are passed to \code{fun}. } } \details{ The signature for \code{fun} is either \code{fun(object, ...)} or \code{fun(object, newdata=NULL, ...)}. The different \code{predictnl} methods call the utility function \code{numDeltaMethod}, which in turn calls the \code{grad} function for numerical differentiation. The \code{numDeltaMethod} function calls the standard \code{coef} and \code{vcov} methods, and the non-standard \code{`coef<-`} method for changing the coefficients in a regression object. This non-standard method has been provided for several regression objects and essentially mirrors the \code{coef} method. One potential issue is that some \code{predict} methods do not re-calculate their predictions for the fitted dataset (i.e. when \code{newdata=NULL}). As the \code{predictnl} function changes the fitted coefficients, it is required that the predictions are re-calculated. One solution is to pass \code{newdata} as an argument to both \code{predictnl} and \code{fun}; alternatively, \code{newdata} can be specified in \code{fun}. These approaches are described in the examples below. The \code{numDeltaMethod} method called by \code{predictnl} provides a warning when the variance estimates are zero, which may be due to this cause. For completeness, it is worth discussing why the example \code{predictnl(fit,predict)} does not work for when \code{fit} is a \code{glm} object. First, \code{predict.glm} does not update the predictions for the fitted data. Second, the default \code{predict} method has a signature \code{predict(object, ...)}, which does not include a \code{newdata} argument. We could then either (i) require that a \code{newdata} argument be passed to the \code{fun} function for all examples, which would make this corner case work, or (ii) only pass the \code{newdata} argument if it is non-null or in the formals for the \code{fun} function, which would fail for this corner case. The current API defaults to the latter case (ii). To support this approach, the \code{predictnl.lm} method replaces a null \code{newdata} with \code{object$data}. We also provide a revised \code{numdelta:::predict.lm} method that performs the same operation, although its use is not encouraged due to its clumsiness. } \value{ Returns an object of class an object with class \code{c("predictnl","data.frame")} elements \code{c("fit","se.fit","Estimate","SE")} and with methods \code{print} and \code{confint}. Note that the Estimate and SE fields are deprecated and their use is discouraged, as we would like to remove them from future releases. } %% \references{ %% %% ~put references to the literature/web site here ~ %% } \author{ Mark Clements } %% \note{ %% %% ~~further notes~~ %% } %% %% ~Make other sections like Warning with \section{Warning }{....} ~ %% \seealso{ %% %% ~~objects to See Also as \code{\link{help}}, ~~~ %% } \examples{ df <- data.frame(x=0:1, y=c(10, 20)) fit <- glm(y ~ x, df, family=poisson) predictnl(fit, function(obj,newdata) diff(predict(obj,newdata,type="response"))) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. %% \keyword{ ~kwd1 } %% \keyword{ ~kwd2 }% __ONLY ONE__ keyword per line rstpm2/man/vuniroot.Rd0000644000176200001440000002067014363600352014437 0ustar liggesusers\name{vuniroot} \title{Vectorised One Dimensional Root (Zero) Finding} \alias{vuniroot} \usage{ vuniroot(f, interval, \dots, lower, upper, f.lower = f(lower, \dots), f.upper = f(upper, \dots), extendInt = c("no", "yes", "downX", "upX"), check.conv = FALSE, tol = .Machine$double.eps^0.25, maxiter = 1000, trace = 0, n = NULL) } \arguments{ \item{f}{the function for which the root is sought.} \item{interval}{a matrix with two columns containing the end-points of the interval to be searched for the root.} \item{\dots}{additional named or unnamed arguments to be passed to \code{f}} \item{lower, upper}{the lower and upper end points of the interval to be searched.} \item{f.lower, f.upper}{the same as \code{f(upper)} and \code{f(lower)}, respectively. Passing these values from the caller where they are often known is more economical as soon as \code{f()} contains non-trivial computations.} \item{extendInt}{character string specifying if the interval \code{c(lower,upper)} should be extended or directly produce an error when \code{f()} does not have differing signs at the endpoints. The default, \code{"no"}, keeps the search interval and hence produces an error. Can be abbreviated.} \item{check.conv}{logical indicating whether a convergence warning of the underlying \code{\link{vuniroot}} should be caught as an error and if non-convergence in \code{maxiter} iterations should be an error instead of a warning.} \item{tol}{the desired accuracy (convergence tolerance).} \item{maxiter}{the maximum number of iterations.} \item{trace}{integer number; if positive, tracing information is produced. Higher values giving more details.} \item{n}{integer number; size of input vector to \code{f} (only used if \code{lower} and \code{upper} are of length 1)} } \description{ The function \code{vuniroot} searches the interval from \code{lower} to \code{upper} for a root (i.e., zero) of the vectorised function \code{f} with respect to its first argument. Setting \code{extendInt} to a non-\code{"no"} string, means searching for the correct \code{interval = c(lower,upper)} if \code{sign(f(x))} does not satisfy the requirements at the interval end points; see the \sQuote{Details} section. } \details{ Note that arguments after \code{\dots} must be matched exactly. Either \code{interval} or both \code{lower} and \code{upper} must be specified: the upper endpoint must be strictly larger than the lower endpoint. The function values at the endpoints must be of opposite signs (or zero), for \code{extendInt="no"}, the default. Otherwise, if \code{extendInt="yes"}, the interval is extended on both sides, in search of a sign change, i.e., until the search interval \eqn{[l,u]} satisfies \eqn{f(l) \cdot f(u) \le 0}{f(l) * f(u) <= 0}. If it is \emph{known how} \eqn{f} changes sign at the root \eqn{x_0}{x0}, that is, if the function is increasing or decreasing there, \code{extendInt} can (and typically should) be specified as \code{"upX"} (for \dQuote{upward crossing}) or \code{"downX"}, respectively. Equivalently, define \eqn{S := \pm 1}{S:= +/- 1}, to require \eqn{S = \mathrm{sign}(f(x_0 + \epsilon))}{S = sign(f(x0 + eps))} at the solution. In that case, the search interval \eqn{[l,u]} possibly is extended to be such that \eqn{S\cdot f(l)\le 0}{% S * f(l) <= 0} and \eqn{S \cdot f(u) \ge 0}{S * f(u) >= 0}. \code{vuniroot()} uses a C++ subroutine based on \file{"zeroin"} (from Netlib) and algorithms given in the reference below. They assume a continuous function (which then is known to have at least one root in the interval). Convergence is declared either if \code{f(x) == 0} or the change in \code{x} for one step of the algorithm is less than \code{tol} (plus an allowance for representation error in \code{x}). If the algorithm does not converge in \code{maxiter} steps, a warning is printed and the current approximation is returned. \code{f} will be called as \code{f(\var{x}, ...)} for a numeric value of \var{x}. The argument passed to \code{f} has special semantics and used to be shared between calls. The function should not copy it. } \value{ A list with at least three components: \code{root} and \code{f.root} give the location of the root and the value of the function evaluated at that point. \code{iter} gives the number of iterations used. Further components may be added in future: component \code{init.it} was added in \R 3.1.0. } \source{ Based on \file{zeroin.c} in \url{https://netlib.org/c/brent.shar}. } \references{ Brent, R. (1973) \emph{Algorithms for Minimization without Derivatives.} Englewood Cliffs, NJ: Prentice-Hall. } \seealso{ \code{\link{uniroot}} for the standard single root solver \code{\link{polyroot}} for all complex roots of a polynomial; \code{\link{optimize}}, \code{\link{nlm}}. } \examples{\donttest{ require(utils) # for str ## some platforms hit zero exactly on the first step: ## if so the estimated precision is 2/3. f <- function (x, a) x - a str(xmin <- vuniroot(f, lower=c(0, 0), upper=c(1,1), tol = 0.0001, a = c(1/3,2/3))) ## same example with scalars for lower and upper -- using the n argument str(xmin <- vuniroot(f, lower=0, upper=1, tol = 0.0001, n=2, a = c(1/3,2/3))) ## handheld calculator example: fixed point of cos(.): vuniroot(function(x) cos(x) - x, lower = -pi, upper = pi, tol = 1e-9)$root str(vuniroot(function(x) x*(x^2-1) + .5, lower = -2, upper = 2, tol = 0.0001)) str(vuniroot(function(x) x*(x^2-1) + .5, lower = -2, upper = 2, tol = 1e-10)) ## Find the smallest value x for which exp(x) > 0 (numerically): r <- vuniroot(function(x) 1e80*exp(x) - 1e-300, cbind(-1000, 0), tol = 1e-15) str(r, digits.d = 15) # around -745, depending on the platform. exp(r$root) # = 0, but not for r$root * 0.999... minexp <- r$root * (1 - 10*.Machine$double.eps) exp(minexp) # typically denormalized }% donttest because printed output is so much platform dependent ##--- vuniroot() with new interval extension + checking features: -------------- f1 <- function(x) (121 - x^2)/(x^2+1) f2 <- function(x) exp(-x)*(x - 12) tools::assertCondition(vuniroot(f1, cbind(0,10)), "error", verbose=TRUE) tools::assertCondition(vuniroot(f2, cbind(0, 2)), "error", verbose=TRUE) ##--> error: f() .. end points not of opposite sign ## where as 'extendInt="yes"' simply first enlarges the search interval: u1 <- vuniroot(f1, cbind(0,10),extendInt="yes", trace=1) u2 <- vuniroot(f2, cbind(0,2), extendInt="yes", trace=2) stopifnot(all.equal(u1$root, 11, tolerance = 1e-5), all.equal(u2$root, 12, tolerance = 6e-6)) ## The *danger* of interval extension: ## No way to find a zero of a positive function, but ## numerically, f(-|M|) becomes zero : tools::assertCondition(u3 <- vuniroot(exp, cbind(0,2), extendInt="yes", trace=TRUE), "error", verbose=TRUE) ## Nonsense example (must give an error): tools::assertCondition( vuniroot(function(x) 1, cbind(0,1), extendInt="yes"), "error", verbose=TRUE) ## Convergence checking : sinc_ <- function(x) ifelse(x == 0, 1, sin(x)/x) curve(sinc_, -6,18); abline(h=0,v=0, lty=3, col=adjustcolor("gray", 0.8)) \dontshow{tools::assertWarning(} vuniroot(sinc_, cbind(0,5), extendInt="yes", maxiter=4) #-> "just" a warning \dontshow{ , verbose=TRUE)} ## now with check.conv=TRUE, must signal a convergence error : \dontshow{tools::assertError(} vuniroot(sinc_, cbind(0,5), extendInt="yes", maxiter=4, check.conv=TRUE) \dontshow{ , verbose=TRUE)} ### Weibull cumulative hazard (example origin, Ravi Varadhan): cumhaz <- function(t, a, b) b * (t/b)^a froot <- function(x, u, a, b) cumhaz(x, a, b) - u n <- 10 u <- -log(runif(n)) a <- 1/2 b <- 1 ## Find failure times ru <- vuniroot(froot, u=u, a=a, b=b, interval= cbind(rep(1.e-14,n), rep(1e4,n)), extendInt="yes")$root ru2 <- vuniroot(froot, u=u, a=a, b=b, interval= cbind(rep(0.01,n), rep(10,n)), extendInt="yes")$root stopifnot(all.equal(ru, ru2, tolerance = 6e-6)) r1 <- vuniroot(froot, u= 0.99, a=a, b=b, interval= cbind(0.01, 10), extendInt="up") stopifnot(all.equal(0.99, cumhaz(r1$root, a=a, b=b))) ## An error if 'extendInt' assumes "wrong zero-crossing direction": \dontshow{tools::assertError(} vuniroot(froot, u= 0.99, a=a, b=b, interval= cbind(0.1, 10), extendInt="down") \dontshow{ , verbose=TRUE)} } \keyword{optimize} rstpm2/man/popmort.Rd0000644000176200001440000000161413416410275014250 0ustar liggesusers\name{popmort} \Rdversion{1.1} \alias{popmort} \docType{data} \title{ Background mortality rates for the colon dataset. } \description{ Background mortality rates for the colon dataset. } \usage{data(popmort)} \format{ A data frame with 10600 observations on the following 5 variables. \describe{ \item{\code{sex}}{Sex (1=male, 2=female)} \item{\code{prob}}{One year probability of survival} \item{\code{rate}}{All cause mortality rate} \item{\code{age}}{Age by single year of age through to age 105 years} \item{\code{year}}{Calendar period} } } %% \details{ %% %% ~~ If necessary, more details than the __description__ above ~~ %% } %% \source{ %% %% ~~ reference to a publication or URL from which the data were obtained ~~ %% } %% \references{ %% %% ~~ possibly secondary sources and usages ~~ %% } \examples{ data(popmort) ## maybe str(popmort) ; ... } \keyword{datasets} rstpm2/man/gsm_design.Rd0000644000176200001440000000141414706157711014673 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/read_gsm.R \name{gsm_design} \alias{gsm_design} \title{Extract design information from an stpm2/gsm object and newdata for use in C++} \usage{ gsm_design(object, newdata, newdata0 = NULL, t0 = NULL, inflate = 100) } \arguments{ \item{object}{stpm2/gsm object} \item{newdata}{list or data-frame used for evaluation} \item{newdata0}{list or data-frame used for evaluation at the entry time} \item{t0}{possible delayed entry time (numeric scalar)} \item{inflate}{double value to inflate minimum and maximum times for root finding} } \value{ list that can be read by `gsm ssim::read_gsm(SEX args)` in C++ } \description{ Extract design information from an stpm2/gsm object and newdata for use in C++ } rstpm2/man/gsm.control.Rd0000644000176200001440000000545215053633131015016 0ustar liggesusers\name{gsm.control} \alias{gsm.control} \title{ Defaults for the gsm call } \description{ Set useful default and allow changes for the gsm call. This is meant to make the gsm call simpler. } \usage{ gsm.control(parscale = 1, maxit = 300, optimiser = c("BFGS", "NelderMead"), trace = 0, nodes = 9, adaptive = TRUE, kappa.init = 1, maxkappa = 1000, suppressWarnings.coxph.frailty = TRUE, robust_initial = FALSE, bhazinit = 0.1, eps.init = 1e-5, use.gr = TRUE, penalty = c("logH", "h"), outer_optim = 1, reltol.search = 1e-10, reltol.final = 1e-10, reltol.outer = 1e-05, criterion = c("GCV", "BIC"), old.init=FALSE) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{parscale}{ numeric vector or scalar for the scaling of the parameter values; default 1 } \item{maxit}{ integer for the maximum number of iterations for the optimisation process } \item{optimiser}{ which optimiser to use for the outer optimisation } \item{trace}{ integer indicating the trace level for each optimiser } \item{nodes}{ number of quadrature nodes } \item{adaptive}{ logical for whether to use adaptive or non-adaptive quadrature, Default=TRUE. } \item{kappa.init}{ initial value for the quadratic penalty for inequality constraints } \item{eps.init}{ initial value for epsilon } \item{maxkappa}{ double float value for the maximum value of the weight used in the constraint. } \item{suppressWarnings.coxph.frailty}{ logical } \item{robust_initial}{ Not currently documented. } \item{bhazinit}{ Not currently documented. } \item{use.gr}{ Logical for whether to use gradients. } \item{penalty}{ Not currently documented. } \item{outer_optim}{ Not currently documented. } \item{reltol.search}{ Relative tolerance. Not currently documented. } \item{reltol.final}{ Relative tolerance. Not currently documented. } \item{reltol.outer}{ Relative tolerance. Not currently documented. } \item{criterion}{ Not currently documented. } \item{old.init}{ Use the initial values from version 1.6.8 and earlier, which uses the Shat_old function. } } %% \details{ %% } %% \value{ %% %% ~Describe the value returned %% %% If it is a LIST, use %% %% \item{comp1 }{Description of 'comp1'} %% %% \item{comp2 }{Description of 'comp2'} %% %% ... %% } %% \references{ %% %% ~put references to the literature/web site here ~ %% } %% \author{ %% %% ~~who you are~~ %% } %% \note{ %% %% ~~further notes~~ %% } %% ~Make other sections like Warning with \section{Warning }{....} ~ %% \seealso{ %% %% ~~objects to See Also as \code{\link{help}}, ~~~ %% } %% \examples{ %% } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. %% \keyword{ ~kwd1 }% use one of RShowDoc("KEYWORDS") %% \keyword{ ~kwd2 }% __ONLY ONE__ keyword per line rstpm2/man/grad.Rd0000644000176200001440000000261414721160366013471 0ustar liggesusers\name{grad} \Rdversion{1.1} \alias{grad} %- Also NEED an '\alias' for EACH other topic documented here. \title{gradient function (internal function) %% ~~function to do ... ~~ } \description{ Numerical gradient for a function at a given value (internal). } \usage{ grad(func, x, ..., method=c("fast","richardson")) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{func}{ Function taking a vector argument x (returns a vector of length>=1) } \item{x}{ vector of arguments for where the gradient is wanted. } \item{\dots}{ other arguments to the function } \item{method}{ string argument to determine whether to use the fast two sided calculation or use a Richardson extrapolation. } } \details{ (func(x+delta,...)-func(x-delta,...))/(2 delta) where delta is the third root of the machine precision times pmax(1,abs(x)). } \value{ A vector if func(x) has length 1, otherwise a matrix with rows for x and columns for func(x). } %% \references{ %% %% ~put references to the literature/web site here ~ %% } \author{ Mark Clements. } %% \note{ %% %% ~~further notes~~ %% } %% ~Make other sections like Warning with \section{Warning }{....} ~ \seealso{ numDelta() } %% \examples{ %% } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. %% \keyword{ ~kwd1 } %% \keyword{ ~kwd2 }% __ONLY ONE__ keyword per line rstpm2/man/pstpm2-class.Rd0000644000176200001440000001051615040702457015102 0ustar liggesusers\name{pstpm2-class} \Rdversion{1.1} \docType{class} \alias{pstpm2-class} \alias{plot,pstpm2,missing-method} \alias{lines,pstpm2-method} %\alias{predict,pstpm2-method} %\alias{predictnl,pstpm2-method} \alias{AIC,pstpm2-method} \alias{AICc,pstpm2-method} \alias{BIC,pstpm2-method} \alias{anova,pstpm2-method} \alias{qAICc,pstpm2-method} \alias{update,pstpm2-method} \alias{summary,pstpm2-method} \alias{eform,pstpm2-method} \title{Class "pstpm2" } \description{Regression object for \code{pstpm2}.} \section{Objects from the Class}{ Objects can be created by calls of the form \code{new("pstpm2", ...)} and \code{pstpm2( ...)}. } \section{Slots}{ \describe{ \item{\code{xlevels}:}{Object of class \code{"list"} ~~ } \item{\code{contrasts}:}{Object of class \code{"listOrNULL"} ~~ } \item{\code{terms}:}{Object of class \code{"terms"} ~~ } \item{\code{gam}:}{Object of class \code{"gam"} ~~ } \item{\code{logli}:}{Object of class \code{"function"} ~~ } \item{\code{timeVar}:}{Object of class \code{"character"} ~~ } \item{\code{time0Var}:}{Object of class \code{"character"} ~~ } \item{\code{time0Expr}:}{Object of class \code{"nameOrcall"} ~~ } \item{\code{timeExpr}:}{Object of class \code{"nameOrcall"} ~~ } \item{\code{like}:}{Object of class \code{"function"} ~~ } \item{\code{model.frame}:}{Object of class \code{"list"} ~~ } \item{\code{delayed}:}{Object of class \code{"logical"} ~~ } \item{\code{frailty}:}{Object of class \code{"logical"} ~~ } \item{\code{x}:}{Object of class \code{"matrix"} ~~ } \item{\code{xd}:}{Object of class \code{"matrix"} ~~ } \item{\code{termsd}:}{Object of class \code{"terms"} ~~ } \item{\code{Call}:}{Object of class \code{"character"} ~~ } \item{\code{y}:}{Object of class \code{"Surv"} ~~ } \item{\code{sp}:}{Object of class \code{"numeric"} ~~ } \item{\code{nevent}:}{Object of class \code{"numeric"} ~~ } \item{\code{link}:}{Object of class \code{"list"} ~~ } \item{\code{edf}:}{Object of class \code{"numeric"} ~~ } \item{\code{edf_var}:}{Object of class \code{"numeric"} ~~ } \item{\code{df}:}{Object of class \code{"numeric"} ~~ } \item{\code{call}:}{Object of class \code{"language"} ~~ } \item{\code{call.orig}:}{Object of class \code{"language"} ~~ } \item{\code{coef}:}{Object of class \code{"numeric"} ~~ } \item{\code{fullcoef}:}{Object of class \code{"numeric"} ~~ } \item{\code{vcov}:}{Object of class \code{"matrix"} ~~ } \item{\code{min}:}{Object of class \code{"numeric"} ~~ } \item{\code{details}:}{Object of class \code{"list"} ~~ } \item{\code{minuslogl}:}{Object of class \code{"function"} ~~ } \item{\code{method}:}{Object of class \code{"character"} ~~ } \item{\code{data}:}{Object of class \code{"list"} ~~ } \item{\code{formula}:}{Object of class \code{"character"} ~~ } \item{\code{optimizer}:}{Object of class \code{"character"} ~~ } \item{\code{args}:}{Object of class \code{"list"} ~~ } } } \section{Extends}{ Class for \code{\link[bbmle]{mle2}}, directly. } \section{Methods}{ \describe{ \item{plot}{\code{signature(x = "pstpm2", y = "missing")}: ... } \item{lines}{\code{signature(x = "pstpm2", ...)}: ... } %\item{predict}{\code{signature(object = "pstpm2")}: ... } \item{anova}{\code{signature(object = "pstpm2",...)}: ... } \item{AIC}{\code{signature(object = "pstpm2",...,k=2)}: ... } \item{AICc}{\code{signature(object = "pstpm2",...,nobs=NULL, k=2)}: ... } \item{BIC}{\code{signature(object = "pstpm2",..., nobs = NULL)}: ... } \item{qAICc}{\code{signature(object = "pstpm2",..., nobs = NULL, dispersion = 1, k = 2)}: ... } \item{qAIC}{\code{signature(object = "pstpm2",..., dispersion = 1, k = 2)}: ... } \item{summary}{\code{signature(object = "pstpm2",...)}: ... } \item{update}{\code{signature(object = "pstpm2",...)}: ... } \item{eform}{\code{signature(object = "pstpm2",...)}: ... } %\item{predictnl}{\code{signature(object = "pstpm2",...)}: ... } } } %% \references{ ~put references to the literature/web site here ~ } %% \author{ ~~who you are~~ } %% \note{ ~~further notes~~ } % ~Make other sections like Warning with \section{Warning }{....} ~ %% \seealso{ %% ~~objects to See Also as \code{\link{~~fun~~}}, ~~~ %% or \code{\linkS4class{CLASSNAME}} for links to other classes %% } \examples{ showClass("pstpm2") } \keyword{classes} rstpm2/man/legendre.quadrature.rule.200.Rd0000644000176200001440000000142113416410275017753 0ustar liggesusers\name{legendre.quadrature.rule.200} \Rdversion{1.1} \alias{legendre.quadrature.rule.200} \docType{data} \title{ Legendre quadrature rule for n=200. } \description{ Legendre quadrature rule for n=200. } \usage{data(legendre.quadrature.rule.200)} \format{ A data frame with 200 observations on the following 2 variables. \describe{ \item{\code{x}}{x values between -1 and 1} \item{\code{w}}{weights} } } %% \details{ %% %% ~~ If necessary, more details than the __description__ above ~~ %% } %% \source{ %% %% ~~ reference to a publication or URL from which the data were obtained ~~ %% } %% \references{ %% %% ~~ possibly secondary sources and usages ~~ %% } \examples{ data(legendre.quadrature.rule.200) ## maybe str(legendre.quadrature.rule.200) ; ... } \keyword{datasets} rstpm2/man/stpm2-class.Rd0000644000176200001440000001022715040710045014711 0ustar liggesusers\name{stpm2-class} \Rdversion{1.1} \docType{class} \alias{stpm2-class} \alias{plot,stpm2,missing-method} \alias{lines,stpm2-method} %\alias{predict,stpm2-method} %\alias{predictnl,stpm2-method} \alias{AIC,stpm2-method} \alias{AICc,stpm2-method} \alias{BIC,stpm2-method} \alias{anova,stpm2-method} \alias{qAICc,stpm2-method} \alias{update,stpm2-method} \alias{summary,stpm2-method} \alias{eform,stpm2-method} \title{Class "stpm2" ~~~ } \description{Regression object for \code{stpm2}.} \section{Objects from the Class}{ Objects can be created by calls of the form \code{new("stpm2", ...)} and \code{stpm2( ...)}. } \section{Slots}{ \describe{ \item{\code{xlevels}:}{Object of class \code{"list"} ~~ } \item{\code{contrasts}:}{Object of class \code{"listOrNULL"} ~~ } \item{\code{terms}:}{Object of class \code{"terms"} ~~ } \item{\code{logli}:}{Object of class \code{"function"} ~~ } \item{\code{lm}:}{Object of class \code{"lm"} ~~ } \item{\code{timeVar}:}{Object of class \code{"character"} ~~ } \item{\code{time0Var}:}{Object of class \code{"character"} ~~ } \item{\code{timeExpr}:}{Object of class \code{"nameOrcall"} ~~ } \item{\code{time0Expr}:}{Object of class \code{"nameOrcall"} ~~ } \item{\code{delayed}:}{Object of class \code{"logical"} ~~ } \item{\code{frailty}:}{Object of class \code{"logical"} ~~ } \item{\code{interval}:}{Object of class \code{"logical"} ~~ } \item{\code{model.frame}:}{Object of class \code{"list"} ~~ } \item{\code{call.formula}:}{Object of class \code{"formula"} ~~ } \item{\code{x}:}{Object of class \code{"matrix"} ~~ } \item{\code{xd}:}{Object of class \code{"matrix"} ~~ } \item{\code{termsd}:}{Object of class \code{"terms"} ~~ } \item{\code{Call}:}{Object of class \code{"character"} ~~ } \item{\code{y}:}{Object of class \code{"Surv"} ~~ } \item{\code{link}:}{Object of class \code{"list"} ~~ } \item{\code{call}:}{Object of class \code{"language"} ~~ } \item{\code{call.orig}:}{Object of class \code{"language"} ~~ } \item{\code{coef}:}{Object of class \code{"numeric"} ~~ } \item{\code{fullcoef}:}{Object of class \code{"numeric"} ~~ } \item{\code{vcov}:}{Object of class \code{"matrix"} ~~ } \item{\code{min}:}{Object of class \code{"numeric"} ~~ } \item{\code{details}:}{Object of class \code{"list"} ~~ } \item{\code{minuslogl}:}{Object of class \code{"function"} ~~ } \item{\code{method}:}{Object of class \code{"character"} ~~ } \item{\code{data}:}{Object of class \code{"list"} ~~ } \item{\code{formula}:}{Object of class \code{"character"} ~~ } \item{\code{optimizer}:}{Object of class \code{"character"} ~~ } \item{\code{args}:}{Object of class \code{"list"} ~~ } } } \section{Extends}{ Class \code{\link[bbmle]{mle2}}, directly. } \section{Methods}{ \describe{ \item{plot}{\code{signature(x = "stpm2", y = "missing")}: base graphics plot } \item{lines}{\code{signature(x = "stpm2", ...)}: add lines to a base graphics plot } %\item{predict}{\code{signature(object = "stpm2")}: ... } %\item{predictnl}{\code{signature(object = "stpm2", ...)}: ... } \item{anova}{\code{signature(object = "stpm2",...)}: ... } \item{AIC}{\code{signature(object = "stpm2",...,k=2)}: ... } \item{AICc}{\code{signature(object = "stpm2",...,nobs=NULL, k=2)}: ... } \item{BIC}{\code{signature(object = "stpm2",..., nobs = NULL)}: ... } \item{qAICc}{\code{signature(object = "stpm2",..., nobs = NULL, dispersion = 1, k = 2)}: ... } \item{qAIC}{\code{signature(object = "stpm2",..., dispersion = 1, k = 2)}: ... } \item{summary}{\code{signature(object = "stpm2", ...)}: summarise the object} \item{update}{\code{signature(object = "stpm2", ...)}: update fit } \item{eform}{\code{signature(object = "stpm2", ...)}: ... } } } %% \references{ ~put references to the literature/web site here ~ } %% \author{ ~~who you are~~ } %% \note{ ~~further notes~~ } % ~Make other sections like Warning with \section{Warning }{....} ~ %% \seealso{ %% ~~objects to See Also as \code{\link{~~fun~~}}, ~~~ %% or \code{\linkS4class{CLASSNAME}} for links to other classes %% } \examples{ showClass("stpm2") } \keyword{classes} rstpm2/man/aft-class.Rd0000644000176200001440000000242415040674577014441 0ustar liggesusers\name{aft-class} \Rdversion{1.1} \docType{class} \alias{aft-class} \alias{plot,aft,missing-method} \alias{lines,aft-method} \alias{predict,aft-method} %\alias{predictnl,aft-method} %\alias{summary,aft-method} \title{Class "stpm2" ~~~ } \description{Regression object for \code{aft}.} \section{Objects from the Class}{ Objects can be created by calls of the form \code{new("aft", ...)} and \code{aft( ...)}. } \section{Slots}{ \describe{ \item{\code{args}:}{Object of class \code{"list"} ~~ } } } \section{Extends}{ Class for \code{\link[bbmle]{mle2}}, directly. } \section{Methods}{ \describe{ \item{plot}{\code{signature(x = "aft", y = "missing")}: ... } \item{lines}{\code{signature(x = "aft")}: ... } \item{predict}{\code{signature(object = "aft")}: ... } %\item{predictnl}{\code{signature(object = "aft")}: ... } %\item{summary}{\code{signature(object = "aft", ...)}: ... } } } %% \references{ ~put references to the literature/web site here ~ } %% \author{ ~~who you are~~ } %% \note{ ~~further notes~~ } % ~Make other sections like Warning with \section{Warning }{....} ~ %% \seealso{ %% ~~objects to See Also as \code{\link{~~fun~~}}, ~~~ %% or \code{\linkS4class{CLASSNAME}} for links to other classes %% } \examples{ showClass("aft") } \keyword{classes} rstpm2/man/rstpm2-internal.Rd0000644000176200001440000000304413416410275015610 0ustar liggesusers\name{rstpm2-internal} \Rdversion{1.1} \alias{lhs} \alias{rhs} \alias{lhs<-} \alias{rhs<-} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Internal functions for the rstpm2 package. } \description{ Various utility functions used internally to the rstpm2 package. } \usage{ lhs(formula) rhs(formula) lhs(formula) <- value rhs(formula) <- value } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{ A formula } \item{value}{ A symbolic value to replace the current value. } } %% \details{ %% %% ~~ If necessary, more details than the description above ~~ %% } %% \value{ %% %% ~Describe the value returned %% %% If it is a LIST, use %% %% \item{comp1 }{Description of 'comp1'} %% %% \item{comp2 }{Description of 'comp2'} %% %% ... %% } %% \references{ %% %% ~put references to the literature/web site here ~ %% } %% \author{ %% %% ~~who you are~~ %% } %% \note{ %% %% ~~further notes~~ %% } %% ~Make other sections like Warning with \section{Warning }{....} ~ %% \seealso{ %% %% ~~objects to See Also as \code{\link{help}}, ~~~ %% } %% \examples{ %% ##---- Should be DIRECTLY executable !! ---- %% ##-- ==> Define data, use random, %% ##-- or do help(data=index) for the standard data sets. %% ## The function is currently defined as %% function (formula) %% if (length(formula) == 3) formula[[2]] else NULL %% } %% % Add one or more standard keywords, see file 'KEYWORDS' in the %% % R documentation directory. %% \keyword{ ~kwd1 } %% \keyword{ ~kwd2 }% __ONLY ONE__ keyword per line rstpm2/man/gsm.Rd0000644000176200001440000003475514706157711013360 0ustar liggesusers\name{gsm} \alias{gsm} \alias{pstpm2} \alias{stpm2} \title{ Parametric and penalised generalised survival models } \description{ This implements the generalised survival model g(S(t|x)) = eta, where g is a link function, S is survival, t is time, x are covariates and eta is a linear predictor. The linear predictor can include either parametric or penalised smoothers for the time effects, for time:covariate interactions and for covariate effects. The main model assumption is that the time effects in the linear predictor are smooth. This extends the class of flexible parametric survival models developed by Royston and colleagues. The model has been extended to include relative survival (excess hazards), Gamma frailties and normal random effects. } \usage{ gsm(formula, data, smooth.formula = NULL, smooth.args = NULL, df = 3, cure = FALSE, tvc = NULL, tvc.formula = NULL, control = list(), init = NULL, weights = NULL, robust = FALSE, baseoff = FALSE, timeVar = "", time0Var = "", use.gr = NULL, optimiser=NULL, log.time.transform=TRUE, reltol=NULL, trace = NULL, link.type=c("PH","PO","probit","AH","AO"), theta.AO=0, contrasts = NULL, subset = NULL, robust_initial=NULL, coxph.strata = NULL, coxph.formula = NULL, logH.formula = NULL, logH.args = NULL, bhazard = NULL, bhazinit=NULL, copula=FALSE, frailty = !is.null(cluster) & !robust & !copula, cluster = NULL, logtheta=NULL, nodes=NULL, RandDist=c("Gamma","LogN"), recurrent = FALSE, adaptive = NULL, maxkappa = NULL, sp=NULL, criterion=NULL, penalty=NULL, smoother.parameters=NULL, Z=~1, outer_optim=NULL, alpha=1, sp.init=1, penalised=FALSE, \dots) stpm2(formula, data, weights=NULL, subset=NULL, coxph.strata=NULL, \dots) pstpm2(formula, data, weights=NULL, subset=NULL, coxph.strata=NULL, \dots) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{formula}{ a formula object, with the response on the left of a \code{~} operator, and the parametric terms on the right. The response must be a survival object as returned by the \code{\link[survival]{Surv}} function. Specials include \code{cluster} and \code{bhazard}. [required] } \item{data}{ a data.frame in which to interpret the variables named in the \code{formula} argument. } \item{smooth.formula}{ either a parametric formula or a penalised \code{mgcv::gam} formula for describing the time effects and time-dependent effects and smoothed covariate effects on the linear predictor scale (default=NULL). The default model is equal to \code{~s(log(time),k=-1)} where \code{time} is the time variable. } \item{df}{ an integer that describes the degrees of freedom for the \code{ns} function for modelling the baseline log-cumulative hazard (default=3). Parametric model only. } \item{smooth.args}{ a list describing the arguments for the \code{s} function for modelling the baseline time effect on the linear predictor scale (default=NULL). } \item{tvc}{ a list with the names of the time-varying coefficients. For a parametric model, this uses natural splines (e.g. \code{tvc=list(hormon=3)} is equivalent to \code{smooth.formula=~...+as.numeric(hormon):nsx(log(time),df=3)}), which by default does \emph{not} include an intercept term, hence you should include a main effect. Note that this will convert a logical or factor variable to a numeric value, so the user should use indicators for factor terms. For a penalised model, this uses cubic splines (e.g. \code{tvc=list(hormon=-1)} is equivalent to \code{smooth.formula=~...+s(log(time),by=hormon,k=-1))}, which by default \emph{does} include an intercept (or main effect) term (and this code will remove any main effect from \code{formula}). } \item{tvc.formula}{ separate formula for the time-varying effects. This is combined with \code{smooth.formula} or the default \code{smooth.formula}. } \item{baseoff}{Boolean used to determine whether fully define the model using \code{tvc.formula} rather than combining \code{logH.formula} and \code{tvc.formula}} \item{logH.args}{ as per \code{smooth.args}. Deprecated. } \item{logH.formula}{ as per \code{smooth.formula}. Deprecated. } \item{cure}{logical for whether to estimate a cure model (parametric model only).} \item{control}{list of arguments passed to \code{\link{gsm.control}}.} \item{init}{\code{init} should either be \code{NULL}, such that initial values will be determined using Cox regression, or a numeric vector of initial values.} \item{coxph.strata}{variable in the \code{data} argument for stratification of the \code{coxph} model fit for estimating initial values.} \item{weights}{an optional vector of 'prior weights' to be used in the fitting process. Should be \code{NULL} or a numeric vector.} \item{robust}{Boolean used to determine whether to use a robust variance estimator.} \item{bhazard}{variable for the baseline hazard for relative survival} \item{bhazinit}{ scalar used to adjust the background cumulative hazards for calculating initial values. Default=0.1. Deprecated argument: use of the \code{control} argument is preferred. } \item{copula}{logical to indicate whether to use a copula model (experimental)} \item{timeVar}{variable defining the time variable. By default, this is determined from the survival object, however this may be ambiguous if two variables define the time} % \item{time0Var}{variable defining the entry time variable. By default, this is % determined from the survival object, however this may be ambiguous if % two variables define the entry time} \item{sp}{fix the value of the smoothing parameters.} \item{use.gr}{in R, a Boolean to determine whether to use the gradient in the optimisation. Default=TRUE, Deprecated argument: use of the \code{control} argument is preferred.} \item{criterion}{in Rcpp, determine whether to use "GCV" or "BIC" for for the smoothing parameter selection.} \item{penalty}{use either the "logH" penalty, which is the default penalty from mgcv, or the "h" hazard penalty. Default="logH". Deprecated argument: use of the \code{control} argument is preferred.} \item{smoother.parameters}{for the hazard penalty, a list with components which are lists with components var, transform and inverse.} \item{alpha}{an ad hoc tuning parameter for the smoothing parameter.} \item{sp.init}{initial values for the smoothing parameters.} \item{trace}{integer for trace reporting; 0 represents no additional reporting. Default=0. Deprecated argument: use of the \code{control} argument is preferred.} \item{contrasts}{an optional list. See the \code{contrasts.arg} of \code{\link{model.matrix.default}}. } \item{subset}{an optional vector specifying a subset of observations to be used in the fitting process.} \item{coxph.formula}{additional formula used to improve the fitting of initial values [optional and rarely used].} \item{time0Var}{string variable to determine the entry variable; useful for when more than one data variable is used in the entry time.} \item{link.type}{type of link function. For "PH" (generalised proportional hazards), g(S)=log(-log(S)); for "PO" (generalised proportional odds), g(S)=-logit(S); for "probit" (generalised probit), g(S)=-probit(S); for "AH" (generalised additive hazards), g(S)=-log(S); for "AO" (generalised Aranda-Ordaz), g(S)=log((S^(-theta.AO)-1)/theta.AO).} \item{theta.AO}{theta parameter for the Aranda-Ordaz link type.} \item{optimiser}{select which optimiser is used. Default="BFGS". Deprecated argument: use of the \code{control} argument is preferred.} \item{log.time.transform}{should a log-transformation be used for calculating the derivative of the design matrix with respect to time? (default=TRUE)} \item{recurrent}{logical for whether clustered, left truncated data are recurrent or for first event (where the latter requires an adjustment for the frailties or random effects)} \item{frailty}{logical for whether to fit a shared frailty model} \item{cluster}{variable that determines the cluster for the frailty. This can be a vector, a string for the column, or a name. This can also be specified using a special.} \item{logtheta}{initial value for log-theta used in the gamma shared frailty model (defaults to value from a \code{coxph} model fit)} \item{nodes}{number of integration points for Gaussian quadrature. Default=9. Deprecated argument: use of the \code{control} argument is preferred.} \item{RandDist}{type of distribution for the random effect or frailty} \item{adaptive}{logical for whether to use adaptive or non-adaptive quadrature, Default=TRUE. Deprecated argument: use of the \code{control} argument is preferred.} \item{maxkappa}{double float value for the maximum value of the weight used in the constraint. Default=1000. Deprecated argument: use of the \code{control} argument is preferred.} \item{Z}{formula for the design matrix for the random effects} \item{reltol}{list with components for search and final relative tolerances. Default=list(search=1e-10, final=1e-10, outer=1e-5). Deprecated argument: use of the \code{control} argument with arguments \code{reltol.search}, \code{reltol.final} and \code{reltol.outer} is preferred.} \item{outer_optim}{Integer to indicate the algorithm for outer optimisation. If outer_optim=1 (default), then use Neldear-Mead, otherwise use Nlm.} \item{robust_initial}{logical for whether to use Nelder-Mead to find initial values (max 50 iterations). This is useful for ill-posed initial values. Default= FALSE. Deprecated argument: use of the \code{control} argument is preferred.} \item{penalised}{logical to show whether to use penalised models with \code{pstpm} (\code{penalised=TRUE}) or parametrics models with \code{stpm2} (\code{penalised=FALSE}).} \item{\dots}{ additional arguments to be passed to the \code{\link[bbmle]{mle2}}.} } \details{ The implementation extends the \code{mle2} object from the \code{bbmle} package. The default smoothers for time on the linear predictor scale are \code{nsxs(log(time),df=3)} for the parametric model and \code{s(log(time))} for the penalised model. A frequently asked question is: why does rstpm2 give different spline estimates to flexsurv and Stata's stpm2? The short answer is that rstpm2 uses a different natural spline basis compared with flexsurv and Stata's stpm2 and slightly different knot placement than Stata's stpm2. If the knot placement is the same, then the predictions and other coefficients are expected to be very similar. As a longer answer, the default smoother in rstpm2 is to use an extension of the \code{splines::ns} function (\code{rstpm2::nsx}), which uses a QR projection of B-splines for natural splines. In contrast, flexsurv and Stata's stpm2 use truncated power splines for the natural spline basis (also termed 'restricted cubic splines'). The B-splines are known to have good numerical properties, while Stata's stpm2 implementation defaults to using matrix orthogonalisation to account for any numerical instability in the truncated power basis. Furthermore, rstpm2 allows for any smooth parametric function to be used as a smoother in \code{stpm2}/\code{gsm}, which is an extension over flexsurv and Stata's stpm2. Finally, it may be difficult to get rstpm2 and Stata's stpm2 to return the same estimates: although \code{nsx} includes an argument \code{stata.stpm2.compatible = FALSE} (change to \code{TRUE} for compatibility), the design matrix for rstpm2 is based on individuals with events, while Stata's stpm2 determines the spline knots from the individuals with events and the design matrix is otherwise based on all individuals. } \value{ Either a \code{stpm2-class} or \code{pstpm2-class} object. %% ~Describe the value returned %% If it is a LIST, use %% \item{comp1 }{Description of 'comp1'} %% \item{comp2 }{Description of 'comp2'} %% ... } %% \references{ %% %% ~put references to the literature/web site here ~ %% } \author{ Mark Clements, Xing-Rong Liu, Benjamin Christoffersen. } %% \note{ %% %% ~~further notes~~ %% } %% ~Make other sections like Warning with \section{Warning }{....} ~ %% \seealso{ %% %% ~~objects to See Also as \code{\link{help}}, ~~~ %% } \examples{ \dontrun{ data(brcancer) summary(fit <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3)) ## some predictions head(predict(fit,se.fit=TRUE,type="surv")) head(predict(fit,se.fit=TRUE,type="hazard")) ## some plots plot(fit,newdata=data.frame(hormon=0),type="hazard") plot(fit,newdata=data.frame(hormon=0),type="surv") ## time-varying coefficient summary(fit.tvc <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=3, tvc=list(hormon=3))) anova(fit,fit.tvc) # compare with and without tvc ## some more plots plot(fit.tvc,newdata=data.frame(hormon=0),type="hr",var="hormon", ylim=c(0,2)) lines(fit.tvc,newdata=data.frame(hormon=1),type="hr",var="hormon", col=2) plot(fit.tvc,newdata=data.frame(hormon=0),type="sdiff",var="hormon") plot(fit.tvc,newdata=data.frame(hormon=0),type="hdiff",var="hormon") library(scales) cols <- c(alpha("red",alpha=0.2), alpha("blue",alpha=0.2)) plot(fit.tvc,newdata=data.frame(hormon=0),type="hazard",ci.col=cols[1]) lines(fit.tvc,newdata=data.frame(hormon=1),type="hazard",lty=2,ci.col=cols[2], ci=TRUE) legend("topright",legend=c("No hormonal treatment", "(95% CI)", "Hormonal treatment", "(95% CI)"), lty=c(1,1,2,1), lwd=c(1,10,1,10), col=c("black",cols[1],"black",cols[2]), bty="n") ## compare number of knots hormon0 <- data.frame(hormon=0) plot(fit,type="hazard",newdata=hormon0) AIC(fit) for (df in 4:6) { fit.new <- stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer,df=df) plot(fit.new,type="hazard",newdata=hormon0,add=TRUE,ci=FALSE,line.col=df) print(AIC(fit.new)) } ## compatibility with Stata's stpm2 using the smooth.formula argument (see Details) summary(stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, smooth.formula=~nsx(log(rectime),df=3,stata.stpm2.compatible=TRUE))) summary(stpm2(Surv(rectime,censrec==1)~hormon,data=brcancer, smooth.formula=~nsx(log(rectime),df=3,stata=TRUE)+ hormon:nsx(log(rectime),df=3,stata=TRUE))) } } \keyword{ survival } rstpm2/DESCRIPTION0000644000176200001440000000603215105273072013212 0ustar liggesusersPackage: rstpm2 Type: Package Title: Smooth Survival Models, Including Generalized Survival Models Authors@R: c(person("Mark", "Clements", role = c("aut", "cre"), email = "mark.clements@ki.se"), person("Xing-Rong", "Liu", role = "aut", email = "xingrong.liu@ki.se"), person("Benjamin", "Christoffersen", role = "aut", email = "benjamin.christoffersen@ki.se"), person("Paul", "Lambert", role = "ctb", email="pl4@leicester.ac.uk"), person("Lasse", "Hjort Jakobsen", role = "ctb", email="lasse.j@rn.dk"), person("Alessandro", "Gasparini", role = "ctb"), person("Gordon","Smyth", role="cph"), person("Patrick","Alken", role="cph"), person("Simon","Wood", role="cph"), person("Rhys","Ulerich", role="cph")) Version: 1.7.1 Depends: R (>= 3.0.2), methods, survival, splines Imports: graphics, Rcpp (>= 0.10.2), stats, mgcv, bbmle (>= 1.0.20), fastGHQuad, utils, parallel, mvtnorm, numDeriv, lsoda Suggests: eha, testthat, ggplot2, lattice, readstata13, mstate, scales, survPen, flexsurv, timereg LinkingTo: Rcpp,RcppArmadillo Maintainer: Mark Clements Description: R implementation of generalized survival models (GSMs), smooth accelerated failure time (AFT) models and Markov multi-state models. For the GSMs, g(S(t|x))=eta(t,x) for a link function g, survival S at time t with covariates x and a linear predictor eta(t,x). The main assumption is that the time effect(s) are smooth . For fully parametric models with natural splines, this re-implements Stata's 'stpm2' function, which are flexible parametric survival models developed by Royston and colleagues. We have extended the parametric models to include any smooth parametric smoothers for time. We have also extended the model to include any smooth penalized smoothers from the 'mgcv' package, using penalized likelihood. These models include left truncation, right censoring, interval censoring, gamma frailties and normal random effects , and copulas. For the smooth AFTs, S(t|x) = S_0(t*eta(t,x)), where the baseline survival function S_0(t)=exp(-exp(eta_0(t))) is modelled for natural splines for eta_0, and the time-dependent cumulative acceleration factor eta(t,x)=\int_0^t exp(eta_1(u,x)) du for log acceleration factor eta_1(u,x). The Markov multi-state models allow for a range of models with smooth transitions to predict transition probabilities, length of stay, utilities and costs, with differences, ratios and standardisation. URL: https://github.com/mclements/rstpm2 BugReports: https://github.com/mclements/rstpm2/issues License: GPL-2 | GPL-3 LazyData: yes Encoding: UTF-8 NeedsCompilation: yes Packaged: 2025-11-12 15:48:59 UTC; marcle Author: Mark Clements [aut, cre], Xing-Rong Liu [aut], Benjamin Christoffersen [aut], Paul Lambert [ctb], Lasse Hjort Jakobsen [ctb], Alessandro Gasparini [ctb], Gordon Smyth [cph], Patrick Alken [cph], Simon Wood [cph], Rhys Ulerich [cph] Repository: CRAN Date/Publication: 2025-11-13 06:10:02 UTC