r-gregmisc-users Mailing List for R gregmisc package (Page 11)
Brought to you by:
warnes
You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
(12) |
Apr
(5) |
May
(3) |
Jun
(5) |
Jul
(2) |
Aug
(5) |
Sep
(7) |
Oct
(15) |
Nov
(34) |
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(3) |
Feb
(16) |
Mar
(28) |
Apr
(5) |
May
|
Jun
(5) |
Jul
(9) |
Aug
(50) |
Sep
(29) |
Oct
(9) |
Nov
(25) |
Dec
(7) |
2008 |
Jan
(6) |
Feb
(4) |
Mar
(5) |
Apr
(8) |
May
(26) |
Jun
(11) |
Jul
|
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
(9) |
2009 |
Jan
|
Feb
(1) |
Mar
|
Apr
(2) |
May
(26) |
Jun
|
Jul
(10) |
Aug
(6) |
Sep
|
Oct
(7) |
Nov
(3) |
Dec
(2) |
2010 |
Jan
(45) |
Feb
(11) |
Mar
|
Apr
(1) |
May
(8) |
Jun
(7) |
Jul
(3) |
Aug
(1) |
Sep
|
Oct
(1) |
Nov
(9) |
Dec
(1) |
2011 |
Jan
(2) |
Feb
|
Mar
|
Apr
(3) |
May
(1) |
Jun
|
Jul
|
Aug
(14) |
Sep
(29) |
Oct
(3) |
Nov
|
Dec
(3) |
2012 |
Jan
|
Feb
|
Mar
|
Apr
(7) |
May
(6) |
Jun
(59) |
Jul
|
Aug
(8) |
Sep
(21) |
Oct
|
Nov
|
Dec
|
2013 |
Jan
(1) |
Feb
|
Mar
(10) |
Apr
|
May
(18) |
Jun
(25) |
Jul
(18) |
Aug
(1) |
Sep
(6) |
Oct
(28) |
Nov
(4) |
Dec
(13) |
2014 |
Jan
(7) |
Feb
(5) |
Mar
(4) |
Apr
(36) |
May
(3) |
Jun
(7) |
Jul
(46) |
Aug
(14) |
Sep
(12) |
Oct
(2) |
Nov
|
Dec
(12) |
2015 |
Jan
(4) |
Feb
|
Mar
|
Apr
(80) |
May
(36) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <wa...@us...> - 2014-03-01 20:15:08
|
Revision: 1776 http://sourceforge.net/p/r-gregmisc/code/1776 Author: warnes Date: 2014-03-01 20:15:05 +0000 (Sat, 01 Mar 2014) Log Message: ----------- Fix cut-and-paste error. Modified Paths: -------------- trunk/gtools/tests/test_mixedorder.R Modified: trunk/gtools/tests/test_mixedorder.R =================================================================== --- trunk/gtools/tests/test_mixedorder.R 2014-03-01 20:12:46 UTC (rev 1775) +++ trunk/gtools/tests/test_mixedorder.R 2014-03-01 20:15:05 UTC (rev 1776) @@ -5,7 +5,7 @@ "Asprin 100mg/day", "Acetomycin 100mg/day", "Acetomycin 1000mg/day") -stopifnot( mixedorder(tmp)==c(4, 5, 1, 2, 3 )) +stopifnot( mixedorder(Treatment)==c(5, 6, 2, 3, 4, 1) ) x <- rev(c("AA 0.50 ml", "AA 1.5 ml", "AA 500 ml", "AA 1500 ml", This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2014-03-01 20:12:49
|
Revision: 1775 http://sourceforge.net/p/r-gregmisc/code/1775 Author: warnes Date: 2014-03-01 20:12:46 +0000 (Sat, 01 Mar 2014) Log Message: ----------- Update files for gtools 3.3.1 release Modified Paths: -------------- trunk/gtools/DESCRIPTION trunk/gtools/inst/NEWS Modified: trunk/gtools/DESCRIPTION =================================================================== --- trunk/gtools/DESCRIPTION 2014-03-01 20:02:08 UTC (rev 1774) +++ trunk/gtools/DESCRIPTION 2014-03-01 20:12:46 UTC (rev 1775) @@ -1,8 +1,8 @@ Package: gtools Title: Various R programming tools Description: Various R programming tools -Version: 3.3.0 -Date: 2014-02-11 +Version: 3.3.1 +Date: 2014-03-01 Author: Gregory R. Warnes, Ben Bolker, and Thomas Lumley Maintainer: Gregory R. Warnes <gr...@wa...> License: LGPL-2.1 Modified: trunk/gtools/inst/NEWS =================================================================== --- trunk/gtools/inst/NEWS 2014-03-01 20:02:08 UTC (rev 1774) +++ trunk/gtools/inst/NEWS 2014-03-01 20:12:46 UTC (rev 1775) @@ -1,3 +1,15 @@ +gtools 3.3.1 - 2014-03-01 +------------------------- + +Bug fixes: + +- 'mixedorder' (and hence 'mixedsort') not properly handling + single-character strings between numbers, so that '1a2' was being + handled as a single string rather than being properly handled as + c('1', 'a', '2'). + + + gtools 3.3.0 - 2014-02-11 ------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2014-03-01 20:02:10
|
Revision: 1774 http://sourceforge.net/p/r-gregmisc/code/1774 Author: warnes Date: 2014-03-01 20:02:08 +0000 (Sat, 01 Mar 2014) Log Message: ----------- Fix bug in gtools::mixedorder regular expression for regognizing numbers. (Periods weren't escaped). Modified Paths: -------------- trunk/gtools/R/mixedsort.R Added Paths: ----------- trunk/gtools/tests/test_mixedorder.R Modified: trunk/gtools/R/mixedsort.R =================================================================== --- trunk/gtools/R/mixedsort.R 2014-02-11 17:44:04 UTC (rev 1773) +++ trunk/gtools/R/mixedsort.R 2014-03-01 20:02:08 UTC (rev 1774) @@ -17,7 +17,7 @@ if( is.numeric(x) ) return( order(x) ) - + delim="\\$\\@\\$" numeric <- function(x) @@ -37,7 +37,7 @@ if(length(which.blanks) >0) x[ which.blanks ] <- -Inf - + if(length(which.nas) >0) x[ which.nas ] <- Inf @@ -47,7 +47,7 @@ #### # find and mark numbers in the form of +1.23e+45.67 - delimited <- gsub("([+-]{0,1}[0-9]+.{0,1}[0-9]*([eE][\\+\\-]{0,1}[0-9]+.{0,1}[0-9]*){0,1})", + delimited <- gsub("([+-]{0,1}[0-9]+\\.{0,1}[0-9]*([eE][\\+\\-]{0,1}[0-9]+\\.{0,1}[0-9]*){0,1})", paste(delim,"\\1",delim,sep=""), x) # separate out numbers @@ -90,7 +90,7 @@ t(rank.character) + apply(matrix(rank.numeric),2,max,na.rm=TRUE) ) - + rank.overall <- ifelse(is.na(rank.character),rank.numeric,rank.character) order.frame <- as.data.frame(rank.overall) Added: trunk/gtools/tests/test_mixedorder.R =================================================================== --- trunk/gtools/tests/test_mixedorder.R (rev 0) +++ trunk/gtools/tests/test_mixedorder.R 2014-03-01 20:02:08 UTC (rev 1774) @@ -0,0 +1,27 @@ +library(gtools) + +## Examples from man page +Treatment <- c("Control", "Asprin 10mg/day", "Asprin 50mg/day", + "Asprin 100mg/day", "Acetomycin 100mg/day", + "Acetomycin 1000mg/day") + +stopifnot( mixedorder(tmp)==c(4, 5, 1, 2, 3 )) + + +x <- rev(c("AA 0.50 ml", "AA 1.5 ml", "AA 500 ml", "AA 1500 ml", + "EXP 1", "AA 1e3 ml", "A A A", "1 2 3 A", "NA", NA, "1e2", + "", "-", "1A", "1 A", "100", "100A", "Inf")) + +stopifnot( mixedorder(x)==c(7, 11, 4, 5, 3, 8, 2, 1, 6, 12, 18, 17, 16, 13, 15, 14, 10, 9) ) + +## Bug reported by Aaron Taudt on 2014-03-01 + +tmp <- c("uniresult_simulated_H3k27ac_binsize_200_chr1.RData", + "uniresult_simulated_H3k27me3_binsize_200_chr1.RData", + "uniresult_simulated_H3k36me3_binsize_200_chr1.RData", + "uniresult_simulated_H3k4me3_binsize_200_chr1.RData", + "uniresult_simulated_H3k9me3_binsize_200_chr1.RData") + +stopifnot( mixedorder(tmp)==c(4, 5, 1, 2, 3) ) + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2014-02-11 17:44:06
|
Revision: 1773 http://sourceforge.net/p/r-gregmisc/code/1773 Author: warnes Date: 2014-02-11 17:44:04 +0000 (Tue, 11 Feb 2014) Log Message: ----------- Create and use locate copy of tools:::.split_op_version. Modified Paths: -------------- trunk/gtools/R/clean_up_dependencies2.R Modified: trunk/gtools/R/clean_up_dependencies2.R =================================================================== --- trunk/gtools/R/clean_up_dependencies2.R 2014-02-11 17:25:33 UTC (rev 1772) +++ trunk/gtools/R/clean_up_dependencies2.R 2014-02-11 17:44:04 UTC (rev 1773) @@ -1,5 +1,21 @@ .clean_up_dependencies2 <- function (x, installed, available) { + + .split_op_version <- function (x) + { + pat <- "^([^\\([:space:]]+)[[:space:]]*\\(([^\\)]+)\\).*" + x1 <- sub(pat, "\\1", x) + x2 <- sub(pat, "\\2", x) + if (x2 != x1) { + pat <- "[[:space:]]*([[<>=!]+)[[:space:]]+(.*)" + version <- sub(pat, "\\2", x2) + if (!grepl("^r", version)) + version <- package_version(version) + list(name = x1, op = sub(pat, "\\1", x2), version = version) + } + else list(name = x1) + } + .split_dependencies <- function(x) { .split2 <- function(x) { x <- sub("[[:space:]]+$", "", x) @@ -8,7 +24,7 @@ x <- x[names(x) != "R"] x <- x[nzchar(x)] x <- x[!duplicated(names(x))] - lapply(x, tools:::.split_op_version) + lapply(x, .split_op_version) } if (!any(nzchar(x))) return(list()) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2014-02-11 17:25:36
|
Revision: 1772 http://sourceforge.net/p/r-gregmisc/code/1772 Author: warnes Date: 2014-02-11 17:25:33 +0000 (Tue, 11 Feb 2014) Log Message: ----------- Update for gtools 3.3.0. Modified Paths: -------------- trunk/gtools/inst/NEWS Modified: trunk/gtools/inst/NEWS =================================================================== --- trunk/gtools/inst/NEWS 2014-02-11 17:19:16 UTC (rev 1771) +++ trunk/gtools/inst/NEWS 2014-02-11 17:25:33 UTC (rev 1772) @@ -1,12 +1,21 @@ -gtools 3.2.2 - 2014-01-14 +gtools 3.3.0 - 2014-02-11 ------------------------- +New features: + +- Add the getDependencies() function to return a list of dependencies + for the specified package(s). Includes arguments to control whether + these dependencies should be constructed using information from + locally installed packages ('installed', default is TRUE), avilable + CRAN packages ('available', default is TRUE) and whether to include + base ('base', default=FALSE) and recommended ('recommended', default + is FALSE) packages. + Bug fixes: - binsearch() was returning the wrong endpoint & value when the found value was at the upper endpoint. - gtools 3.2.1 - 2014-01-13 ------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2014-02-11 17:19:19
|
Revision: 1771 http://sourceforge.net/p/r-gregmisc/code/1771 Author: warnes Date: 2014-02-11 17:19:16 +0000 (Tue, 11 Feb 2014) Log Message: ----------- Fix arguments Modified Paths: -------------- trunk/gtools/man/getDependencies.Rd Modified: trunk/gtools/man/getDependencies.Rd =================================================================== --- trunk/gtools/man/getDependencies.Rd 2014-02-11 17:17:42 UTC (rev 1770) +++ trunk/gtools/man/getDependencies.Rd 2014-02-11 17:19:16 UTC (rev 1771) @@ -31,7 +31,7 @@ packages that are included in the R installation. Defaults to FALSE. } - \item{base}{Logical indicating whether to include dependencies on + \item{recommended}{Logical indicating whether to include dependencies on recommended packages that are included in the R installation. Defaults to FALSE. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2014-02-11 17:17:45
|
Revision: 1770 http://sourceforge.net/p/r-gregmisc/code/1770 Author: warnes Date: 2014-02-11 17:17:42 +0000 (Tue, 11 Feb 2014) Log Message: ----------- Update arguments to match code. Modified Paths: -------------- trunk/gtools/man/getDependencies.Rd Modified: trunk/gtools/man/getDependencies.Rd =================================================================== --- trunk/gtools/man/getDependencies.Rd 2014-02-11 17:14:08 UTC (rev 1769) +++ trunk/gtools/man/getDependencies.Rd 2014-02-11 17:17:42 UTC (rev 1770) @@ -8,11 +8,11 @@ } \usage{ getDependencies(pkgs, - dependencies=NA, - installed=TRUE, - available=TRUE, - base=FALSE, - recommended=FALSE) + dependencies = c("Depends", "Imports", "LinkingTo"), + installed=TRUE, + available=TRUE, + base=FALSE, + recommended=FALSE) } \arguments{ \item{pkgs}{character vector of package names} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2014-02-11 17:14:12
|
Revision: 1769 http://sourceforge.net/p/r-gregmisc/code/1769 Author: warnes Date: 2014-02-11 17:14:08 +0000 (Tue, 11 Feb 2014) Log Message: ----------- Add getDependencies() function to return a list of package dependencies. Modified Paths: -------------- trunk/gtools/DESCRIPTION trunk/gtools/NAMESPACE Added Paths: ----------- trunk/gtools/R/clean_up_dependencies2.R trunk/gtools/R/getDependencies.R trunk/gtools/man/getDependencies.Rd Modified: trunk/gtools/DESCRIPTION =================================================================== --- trunk/gtools/DESCRIPTION 2014-01-14 19:43:17 UTC (rev 1768) +++ trunk/gtools/DESCRIPTION 2014-02-11 17:14:08 UTC (rev 1769) @@ -1,8 +1,8 @@ Package: gtools Title: Various R programming tools Description: Various R programming tools -Version: 3.2.2 -Date: 2014-01-14 +Version: 3.3.0 +Date: 2014-02-11 Author: Gregory R. Warnes, Ben Bolker, and Thomas Lumley Maintainer: Gregory R. Warnes <gr...@wa...> License: LGPL-2.1 Modified: trunk/gtools/NAMESPACE =================================================================== --- trunk/gtools/NAMESPACE 2014-01-14 19:43:17 UTC (rev 1768) +++ trunk/gtools/NAMESPACE 2014-02-11 17:14:08 UTC (rev 1769) @@ -13,6 +13,7 @@ even, foldchange, foldchange2logratio, + getDependencies, inv.logit, invalid, keywords, Added: trunk/gtools/R/clean_up_dependencies2.R =================================================================== --- trunk/gtools/R/clean_up_dependencies2.R (rev 0) +++ trunk/gtools/R/clean_up_dependencies2.R 2014-02-11 17:14:08 UTC (rev 1769) @@ -0,0 +1,68 @@ +.clean_up_dependencies2 <- function (x, installed, available) +{ + .split_dependencies <- function(x) { + .split2 <- function(x) { + x <- sub("[[:space:]]+$", "", x) + x <- unique(sub("^[[:space:]]*(.*)", "\\1", x)) + names(x) <- sub("^([[:alnum:].]+).*$", "\\1", x) + x <- x[names(x) != "R"] + x <- x[nzchar(x)] + x <- x[!duplicated(names(x))] + lapply(x, tools:::.split_op_version) + } + if (!any(nzchar(x))) + return(list()) + unlist(lapply(strsplit(x, ","), .split2), FALSE, FALSE) + } + x <- x[!is.na(x)] + if (!length(x)) + return(list(character(), character())) + xx <- .split_dependencies(x) + if (!length(xx)) + return(list(character(), character())) + pkgs <- installed[, "Package"] + have <- sapply(xx, function(x) { + if (length(x) == 3L) { + if (!x[[1L]] %in% pkgs) + return(FALSE) + if (x[[2L]] != ">=") + return(TRUE) + current <- as.package_version(installed[pkgs == x[[1L]], + "Version"]) + target <- as.package_version(x[[3L]]) + eval(parse(text = paste("any(current", x$op, "target)"))) + } + else x[[1L]] %in% pkgs + }) + xx <- xx[!have] + if (!length(xx)) + return(list(character(), character())) + pkgs <- row.names(available) + canget <- miss <- character() + for (i in seq_along(xx)) { + x <- xx[[i]] + if (length(x) == 3L) { + if (!x[[1L]] %in% pkgs) { + miss <- c(miss, x[[1L]]) + next + } + if (x[[2L]] != ">=") { + canget <- c(canget, x[[1L]]) + next + } + current <- as.package_version(available[pkgs == x[[1L]], + "Version"]) + target <- as.package_version(x[[3L]]) + res <- eval(parse(text = paste("any(current", x$op, + "target)"))) + if (res) + canget <- c(canget, x[[1L]]) + else miss <- c(miss, paste0(x[[1L]], " (>= ", x[[3L]], + ")")) + } + else if (x[[1L]] %in% pkgs) + canget <- c(canget, x[[1L]]) + else miss <- c(miss, x[[1L]]) + } + list(canget, miss) +} Added: trunk/gtools/R/getDependencies.R =================================================================== --- trunk/gtools/R/getDependencies.R (rev 0) +++ trunk/gtools/R/getDependencies.R 2014-02-11 17:14:08 UTC (rev 1769) @@ -0,0 +1,96 @@ +## This function determines the dependencies for the specified +## package, exluding only packages found in "base". +getDependencies <- function (pkgs, + dependencies = c("Depends", "Imports", "LinkingTo"), + installed=TRUE, + available=TRUE, + base=FALSE, + recommended=FALSE) +{ + pkgs.in = pkgs + if (is.null(dependencies)) + return(unique(pkgs)) + dep2 <- c("Depends", "Imports", "LinkingTo") + + + if(installed && !available) + all.packages <- installed.packages() + else if (available && !installed) + all.packages <- available.packages() + else + all.packages <- as.matrix(smartbind(## + installed.packages(), + available.packages() + )) + rownames(all.packages) <- all.packages[,"Package"] + + p0 <- unique(pkgs) + miss <- !p0 %in% row.names(all.packages) + if (sum(miss)) { + warning(sprintf(ngettext(sum(miss), "package %s is not available (for %s)", + "packages %s are not available (for %s)"), paste(sQuote(p0[miss]), + collapse = ", "), sub(" *\\(.*", "", R.version.string)), + domain = NA, call. = FALSE) + if (sum(miss) == 1L && !is.na(w <- match(tolower(p0[miss]), + tolower(row.names(all.packages))))) { + warning(sprintf("Perhaps you meant %s ?", sQuote(row.names(all.packages)[w])), + call. = FALSE, domain = NA) + } + flush.console() + } + + ## Whether to exclude base and recommended packages + if(!base || !recommended) + { + priority <- NULL + if(!base) priority <- c("base", priority) + if(!recommended) priority <- c("recommended", priority) + installed <- installed.packages(priority=priority) + } + else + installed <- installed.packages()[FALSE,] + + p0 <- p0[!miss] + + p1 <- p0 + not_avail <- character() + repeat { + deps <- apply(all.packages[p1, dependencies, drop = FALSE], + 1L, function(x) paste(x[!is.na(x)], collapse = ", ")) + + res <- .clean_up_dependencies2( + deps, + installed=installed, + all.packages) + not_avail <- c(not_avail, res[[2L]]) + deps <- unique(res[[1L]]) + deps <- deps[!deps %in% c("R", pkgs)] + if (!length(deps)) + break + pkgs <- c(deps, pkgs) + p1 <- deps + if (!is.null(dep2)) { + dependencies <- dep2 + dep2 <- NULL + } + } + if (length(not_avail)) { + not_avail <- unique(not_avail) + warning(sprintf(ngettext(length(not_avail), + "dependency %s is not available", + "dependencies %s are not available"), + paste(sQuote(not_avail), + collapse = ", ")), + domain = NA, + call. = FALSE, + immediate. = TRUE) + flush.console() + } + pkgs <- unique(pkgs) + pkgs <- pkgs[pkgs %in% row.names(all.packages)] + p0 <- pkgs + + + p0[ ! p0 %in% pkgs.in ] +} + Added: trunk/gtools/man/getDependencies.Rd =================================================================== --- trunk/gtools/man/getDependencies.Rd (rev 0) +++ trunk/gtools/man/getDependencies.Rd 2014-02-11 17:14:08 UTC (rev 1769) @@ -0,0 +1,81 @@ +\name{getDependencies} +\alias{getDependencies} +\title{ + Get package dependencies +} +\description{ + Get package dependencies +} +\usage{ +getDependencies(pkgs, + dependencies=NA, + installed=TRUE, + available=TRUE, + base=FALSE, + recommended=FALSE) +} +\arguments{ + \item{pkgs}{character vector of package names} + \item{dependencies}{character vector of dependency types to include. + Choices are "Depends", "Imports", "LinkingTo", "Suggests", + and "Enhances". Defaults to \code{c("Depends", "Imports", + "LinkingTo")}. + } + \item{installed}{Logical indicating whether to pull dependency + information from installed packages. Defaults to TRUE. + } + \item{available}{Logical indicating whether to pull dependency + information from available packages. Defaults to TRUE. + } + \item{base}{Logical indicating whether to include dependencies on base + packages that are included in the R installation. Defaults to + FALSE. + } + \item{base}{Logical indicating whether to include dependencies on + recommended packages that are included in the R + installation. Defaults to + FALSE. + } +} +\details{ + This function recursively constructs the list of dependencies for the + packages given by \code{pkgs}. By default, the dependency information + is extracted from both installed and available packages. As a + consequence, it works both for local and CRAN packages. +} +\value{ + A character vector of package names. +} +\note{ + If \code{available=TRUE} R will attempt to access the currently + selected CRAN repository, prompting for one if necessary. + } +\author{ + Gregory R. Warnes email{gr...@wa...} based on the non exported + \code{utils:::getDependencies} and + \code{utils:::.clean_up_dependencies2}. +} +\seealso{ + \code{\link{installed.packages}}, + \code{\link{available.packages}} +} +\examples{ +## A locally installed package +getDependencies("MASS", installed=TRUE, available=FALSE) + +\dontrun{ +## A package on CRAN +getDependencies("gregmisc", installed=FALSE, available=TRUE) +} + +## Show base and recommended dependencies +getDependencies("MASS", available=FALSE, base=TRUE, recommended=TRUE) + +\dontrun{ +## Download the set of packages necessary to support a local package +deps <- getDependencies("MyLocalPackage", available=FALSE) +download.packages(deps, destdir="./R_Packages") +} + +} +\keyword{utilities} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2014-01-14 19:43:20
|
Revision: 1768 http://sourceforge.net/p/r-gregmisc/code/1768 Author: warnes Date: 2014-01-14 19:43:17 +0000 (Tue, 14 Jan 2014) Log Message: ----------- Update for bug-fix release Modified Paths: -------------- trunk/gtools/DESCRIPTION trunk/gtools/inst/NEWS Modified: trunk/gtools/DESCRIPTION =================================================================== --- trunk/gtools/DESCRIPTION 2014-01-14 19:37:16 UTC (rev 1767) +++ trunk/gtools/DESCRIPTION 2014-01-14 19:43:17 UTC (rev 1768) @@ -1,10 +1,9 @@ Package: gtools Title: Various R programming tools Description: Various R programming tools -Version: 3.2.0 -Date: 2014-01-11 +Version: 3.2.2 +Date: 2014-01-14 Author: Gregory R. Warnes, Ben Bolker, and Thomas Lumley Maintainer: Gregory R. Warnes <gr...@wa...> -Imports: gdata License: LGPL-2.1 Modified: trunk/gtools/inst/NEWS =================================================================== --- trunk/gtools/inst/NEWS 2014-01-14 19:37:16 UTC (rev 1767) +++ trunk/gtools/inst/NEWS 2014-01-14 19:43:17 UTC (rev 1768) @@ -1,3 +1,20 @@ +gtools 3.2.2 - 2014-01-14 +------------------------- + +Bug fixes: + +- binsearch() was returning the wrong endpoint & value when the found + value was at the upper endpoint. + + +gtools 3.2.1 - 2014-01-13 +------------------------- + +Bug fixes: + +- Resolve circular dependency with gdata + + gtools 3.2.0 - 2014-01-11 ------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2014-01-14 19:37:19
|
Revision: 1767 http://sourceforge.net/p/r-gregmisc/code/1767 Author: warnes Date: 2014-01-14 19:37:16 +0000 (Tue, 14 Jan 2014) Log Message: ----------- Add test file for binsearch() function. Added Paths: ----------- trunk/gtools/tests/ trunk/gtools/tests/test_binsearch.R Added: trunk/gtools/tests/test_binsearch.R =================================================================== --- trunk/gtools/tests/test_binsearch.R (rev 0) +++ trunk/gtools/tests/test_binsearch.R 2014-01-14 19:37:16 UTC (rev 1767) @@ -0,0 +1,64 @@ +library(gtools) + +############################## +### Examples from man page ### +############################## + +### Toy examples + +# search for x=10 +s <- binsearch( function(x) x-10, range=c(0,20) ) +stopifnot(s$where==10) + +# search for x=10.1 +s <- binsearch( function(x) x-10.1, range=c(0,20) ) +stopifnot( s$where==c(10,11) ) + +### Classical toy example + +# binary search for the index of 'M' among the sorted letters +fun <- function(X) ifelse(LETTERS[X] > 'M', 1, + ifelse(LETTERS[X] < 'M', -1, 0 ) ) + +s = binsearch( fun, range=1:26 ) +stopifnot( LETTERS[s$where]=="M") + +################################## +### Test boundary contiditions ### +################################## + +s = binsearch(fun = function(x) x-10, range=c(1,10) ) +with(s, stopifnot(where==10, value==0, flag=="Found") ) + +s = binsearch(fun = function(x) x-1, range=c(1,10) ) +with(s, stopifnot(where==1, value==0, flag=="Found") ) + + +checkWarning <- function( expr ) + { + myEnv <- environment() + + catchWarning <- function(w) { + assign("warningValue", w, pos=myEnv) + invokeRestart("muffleWarning") + } + + retval <- withCallingHandlers(expr = expr, + warning = catchWarning) + + + if( !exists("warningValue", where=myEnv, inherits=FALSE) ) + stop("Expected a warning message") + } + +checkWarning( s <- binsearch(fun = function(x) x-10, range=c(1,9) ) ) +with(s, stopifnot(where==9, value==-1, flag=="Upper Boundary" ) ) + +checkWarning( s <- binsearch(fun = function(x) x-1, range=c(2,10) ) ) +with(s, stopifnot(where==2, value==1, flag=="Lower Boundary" ) ) + + + + + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2014-01-14 15:56:46
|
Revision: 1766 http://sourceforge.net/p/r-gregmisc/code/1766 Author: warnes Date: 2014-01-14 15:56:41 +0000 (Tue, 14 Jan 2014) Log Message: ----------- Fixed bug where binsearch() returned the wrong endpoint & value when the found value was at the upper endpoint. Modified Paths: -------------- trunk/gtools/R/binsearch.R Modified: trunk/gtools/R/binsearch.R =================================================================== --- trunk/gtools/R/binsearch.R 2014-01-13 18:16:51 UTC (rev 1765) +++ trunk/gtools/R/binsearch.R 2014-01-14 15:56:41 UTC (rev 1766) @@ -51,7 +51,7 @@ cat("fun(center)=",val,"\n") } - + if( val==target ) { val.lo <- val.hi <- val @@ -75,9 +75,9 @@ cat("new hi=",hi,"\n") cat("--------------\n") } - + } - + # Create return value retval <- list() retval$call <- match.call() @@ -116,8 +116,8 @@ else if( val.hi==target ) { retval$flag="Found" - retval$where=lo - retval$value=val.lo + retval$where=hi + retval$value=val.hi } else { @@ -125,10 +125,10 @@ retval$where=c(lo, hi) retval$value=c(val.lo, val.hi) } - + return(retval) } - - + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2014-01-13 18:16:54
|
Revision: 1765 http://sourceforge.net/p/r-gregmisc/code/1765 Author: warnes Date: 2014-01-13 18:16:51 +0000 (Mon, 13 Jan 2014) Log Message: ----------- Fix typo Modified Paths: -------------- trunk/gtools/man/smartbind.Rd Modified: trunk/gtools/man/smartbind.Rd =================================================================== --- trunk/gtools/man/smartbind.Rd 2014-01-11 23:39:09 UTC (rev 1764) +++ trunk/gtools/man/smartbind.Rd 2014-01-13 18:16:51 UTC (rev 1765) @@ -1,6 +1,6 @@ \name{smartbind} \alias{smartbind} -\title{Efficient rbind of data framesy, even if the column names don't match} +\title{Efficient rbind of data frames, even if the column names don't match} \description{ Efficient rbind of data frames, even if the column names don't match } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2014-01-11 23:39:12
|
Revision: 1764 http://sourceforge.net/p/r-gregmisc/code/1764 Author: warnes Date: 2014-01-11 23:39:09 +0000 (Sat, 11 Jan 2014) Log Message: ----------- Update for gtools release 3.2.0 Modified Paths: -------------- trunk/gtools/inst/NEWS Modified: trunk/gtools/inst/NEWS =================================================================== --- trunk/gtools/inst/NEWS 2014-01-11 23:38:29 UTC (rev 1763) +++ trunk/gtools/inst/NEWS 2014-01-11 23:39:09 UTC (rev 1764) @@ -1,3 +1,25 @@ +gtools 3.2.0 - 2014-01-11 +------------------------- + +New features: + +- The keywords() function now accepts a function or function name as + an argument and will return the list of keywords associated with the + named function. + +- New function stars.pval() which will generate p-value significance + symbols ('***', '**', etc.) + +Bug fixes: + +- R/mixedsort.R: mixedorder() was failing to correctly handle numbers + including decimals due to a faulty regular expression. + +Other changes: + +- capture() and sprint() are now defunct. + + gtools 3.1.1 - 2013-11-06 ------------------------- @@ -30,7 +52,7 @@ - The function 'addLast()' has been deprecated because it directly manipulates the global environment, which is expressly prohibited by - the CRAN policies. + the CRAN policies. - A new function, 'lastAdd()' has been created to replace 'addLast()'. The name has been changed because the two functions require This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2014-01-11 23:38:32
|
Revision: 1763 http://sourceforge.net/p/r-gregmisc/code/1763 Author: warnes Date: 2014-01-11 23:38:29 +0000 (Sat, 11 Jan 2014) Log Message: ----------- fixes for R CMD check Modified Paths: -------------- trunk/gtools/man/gtools-defunct.Rd Modified: trunk/gtools/man/gtools-defunct.Rd =================================================================== --- trunk/gtools/man/gtools-defunct.Rd 2014-01-11 23:24:20 UTC (rev 1762) +++ trunk/gtools/man/gtools-defunct.Rd 2014-01-11 23:38:29 UTC (rev 1763) @@ -2,20 +2,13 @@ \alias{gtools-defunct} \alias{assert} \alias{addLast} +\alias{capture} +\alias{sprint} \title{Defunct Functions in package \code{gtools}} \description{ The functions or variables listed here are no longer part of package \code{gtools}. } -\usage{ -assert(FLAG) -addLast(fun) -capture( -} -%\arguments{ -% \item{FLAG}{ Expression that should evaluate to a boolean vector} -% \item{fun}{Function to be called.} -%} \details{ \itemize{ \item{ \code{assert} is a defunct synonym for @@ -23,13 +16,13 @@ \item{ \code{addLast} has been replaced by \code{lastAdd}, which has the same purpose but appled using different syntax. } \item{ \code{capture} and \code{capture.output} have been removed in - favor of \code{capture.output} from the \code{base} package.} + favor of \code{capture.output} from the \code{utils} package.} } } \seealso{ \code{\link[base]{Defunct}}, \code{\link[base]{stopifnot}}, \code{\link[gtools]{lastAdd}}, - \code{\link[base]{capture.output} + \code{\link[utils]{capture.output}} } \keyword{misc} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2014-01-11 23:24:23
|
Revision: 1762 http://sourceforge.net/p/r-gregmisc/code/1762 Author: warnes Date: 2014-01-11 23:24:20 +0000 (Sat, 11 Jan 2014) Log Message: ----------- Fixes for gtools release 3.2.0 Modified Paths: -------------- trunk/gtools/DESCRIPTION trunk/gtools/NAMESPACE trunk/gtools/R/keywords.R trunk/gtools/man/gtools-defunct.Rd trunk/gtools/man/stars.pval.Rd Added Paths: ----------- trunk/gtools/R/defunct.R Removed Paths: ------------- trunk/gtools/R/capture.R trunk/gtools/man/capture.Rd Modified: trunk/gtools/DESCRIPTION =================================================================== --- trunk/gtools/DESCRIPTION 2013-12-23 18:48:15 UTC (rev 1761) +++ trunk/gtools/DESCRIPTION 2014-01-11 23:24:20 UTC (rev 1762) @@ -1,9 +1,10 @@ Package: gtools Title: Various R programming tools Description: Various R programming tools -Version: 3.1.1 -Date: 2013-11-06 +Version: 3.2.0 +Date: 2014-01-11 Author: Gregory R. Warnes, Ben Bolker, and Thomas Lumley Maintainer: Gregory R. Warnes <gr...@wa...> +Imports: gdata License: LGPL-2.1 Modified: trunk/gtools/NAMESPACE =================================================================== --- trunk/gtools/NAMESPACE 2013-12-23 18:48:15 UTC (rev 1761) +++ trunk/gtools/NAMESPACE 2014-01-11 23:24:20 UTC (rev 1762) @@ -34,4 +34,3 @@ stars.pval, strmacro ) - Deleted: trunk/gtools/R/capture.R =================================================================== --- trunk/gtools/R/capture.R 2013-12-23 18:48:15 UTC (rev 1761) +++ trunk/gtools/R/capture.R 2014-01-11 23:24:20 UTC (rev 1762) @@ -1,44 +0,0 @@ -# $Id$ -# -# $Log$ -# Revision 1.4 2004/01/21 04:31:25 warnes -# - Mark sprint() as depreciated. -# - Replace references to sprint with capture.output() -# - Use match.arg for halign and valign arguments to textplot.default. -# - Fix textplot.character so that a vector of characters is properly -# displayed. Previouslt, character vectors were plotted on top of each -# other. -# -# Revision 1.3 2003/11/10 22:11:13 warnes -# -# - Add files contributed by Arni Magnusson -# <arnima@u.washington.edu>. As well as some of my own. -# -# Revision 1.2 2003/04/04 13:45:21 warnes -# -# - Allow optional arguments to sprint to be passed to print -# -# Revision 1.1 2003/04/02 22:28:32 warnes -# -# - Added file 'capture.R' containing capture() and sprint(). -# -# - -capture <- function( expression, collapse="\n") - { - .Deprecated("capture.output", "base", ) - - resultText <- capture.output( expression ) - - return( paste( c(resultText, ""), collapse=collapse, sep="" ) ) - # the reason for c(result, "") is so that we get the line - # terminator on the last line of output. Otherwise, it just shows - # up between the lines. - } - - -sprint <- function(x,...) - { - .Deprecated("capture.output", "base") - capture(print(x,...)) - } Copied: trunk/gtools/R/defunct.R (from rev 1761, trunk/gtools/R/capture.R) =================================================================== --- trunk/gtools/R/defunct.R (rev 0) +++ trunk/gtools/R/defunct.R 2014-01-11 23:24:20 UTC (rev 1762) @@ -0,0 +1,6 @@ +capture <- function( expression, collapse="\n") + .Defunct("capture.output", "base") + +sprint <- function(x,...) + .Defunct("capture.output", "base") + Modified: trunk/gtools/R/keywords.R =================================================================== --- trunk/gtools/R/keywords.R 2013-12-23 18:48:15 UTC (rev 1761) +++ trunk/gtools/R/keywords.R 2014-01-11 23:24:20 UTC (rev 1762) @@ -8,6 +8,15 @@ } else { + + ## Local copy of trim.character to avoid cyclic dependency with gdata ## + trim <- function(s) + { + s <- sub(pattern="^[[:blank:]]+", replacement="", x=s) + s <- sub(pattern="[[:blank:]]+$", replacement="", x=s) + s + } + kw <- scan(file=file, what=character(), sep="\n", quiet=TRUE) kw <- grep("&", kw, value=TRUE) kw <- gsub("&[^&]*$","", kw) Deleted: trunk/gtools/man/capture.Rd =================================================================== --- trunk/gtools/man/capture.Rd 2013-12-23 18:48:15 UTC (rev 1761) +++ trunk/gtools/man/capture.Rd 2014-01-11 23:24:20 UTC (rev 1762) @@ -1,51 +0,0 @@ -\name{capture} -\alias{capture} -\alias{sprint} -\title{Capture printed output of an R expression in a string} -\description{ -Capture printed output of an R expression in a string -} -\usage{ -capture(expression, collapse = "\n") -sprint(x,...) -} -\arguments{ - \item{expression}{R expression whose output will be captured.} - \item{collapse}{Character used to join output lines. Defaults to - "\\n". Use \code{NULL} to return a vector of individual output lines.} - \item{x}{Object to be printed} - \item{...}{Optional parameters to be passed to \code{\link{print}} } -} -\details{ - The \code{capture} function uses \code{\link{sink}} to capture the - printed results generated by \code{expression}. - - The function \code{sprint} uses \code{capture} to redirect the - results of calling \code{\link{print}} on an object to a string. -} -\value{ - A character string, or if \code{collapse==NULL} a vector of character - strings containing the printed output from the R expression. -} -\section{WARNING}{R 1.7.0+ includes \code{capture.output}, which - duplicates the functionality of \code{capture}. Thus, \code{capture} - is depreciated.} -\author{Gregory R. Warnes \email{gr...@wa...} } -\seealso{ - \code{\link[session]{texteval}}, - \code{\link{capture.output}} -} -\examples{ - -# capture the results of a loop -loop.text <- capture( for(i in 1:10) cat("i=",i,"\n") ) -loop.text - -# put regression summary results into a string -data(iris) -reg <- lm( Sepal.Length ~ Species, data=iris ) -summary.text <- sprint( summary(reg) ) -cat(summary.text) -} -\keyword{print} -\keyword{IO} Modified: trunk/gtools/man/gtools-defunct.Rd =================================================================== --- trunk/gtools/man/gtools-defunct.Rd 2013-12-23 18:48:15 UTC (rev 1761) +++ trunk/gtools/man/gtools-defunct.Rd 2014-01-11 23:24:20 UTC (rev 1762) @@ -2,29 +2,34 @@ \alias{gtools-defunct} \alias{assert} \alias{addLast} -\title{Deprecated Functions in the gtools package} +\title{Defunct Functions in package \code{gtools}} \description{ - These functions are no longer available in gtools. + The functions or variables listed here are no longer part of + package \code{gtools}. } \usage{ assert(FLAG) addLast(fun) +capture( } -\arguments{ - \item{FLAG}{ Expression that should evaluate to a boolean vector} - \item{fun}{Function to be called.} -} +%\arguments{ +% \item{FLAG}{ Expression that should evaluate to a boolean vector} +% \item{fun}{Function to be called.} +%} \details{ \itemize{ \item{ \code{assert} is a defunct synonym for - \code{\link[base]{stopifnot}}. } + \code{\link[base]{stopifnot}}. } \item{ \code{addLast} has been replaced by \code{lastAdd}, which has - the same purpose but appled using different syntax. } + the same purpose but appled using different syntax. } + \item{ \code{capture} and \code{capture.output} have been removed in + favor of \code{capture.output} from the \code{base} package.} } } \seealso{ - \code{\link[base]{Defunct}} - \code{\link[base]{stopifnot}} - \code{\link[gtools]{lastAdd}} + \code{\link[base]{Defunct}}, + \code{\link[base]{stopifnot}}, + \code{\link[gtools]{lastAdd}}, + \code{\link[base]{capture.output} } \keyword{misc} Modified: trunk/gtools/man/stars.pval.Rd =================================================================== --- trunk/gtools/man/stars.pval.Rd 2013-12-23 18:48:15 UTC (rev 1761) +++ trunk/gtools/man/stars.pval.Rd 2014-01-11 23:24:20 UTC (rev 1762) @@ -36,9 +36,7 @@ } \examples{ p.val <- c(0.0004, 0.0015, 0.013, 0.044, 0.067, 0.24) -stars.pval(x) +stars.pval(p.val) } -% Add one or more standard keywords, see file 'KEYWORDS' in the -% R documentation directory. \keyword{misc} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2013-12-23 18:48:18
|
Revision: 1761 http://sourceforge.net/p/r-gregmisc/code/1761 Author: warnes Date: 2013-12-23 18:48:15 +0000 (Mon, 23 Dec 2013) Log Message: ----------- Extend the keywords() function to return keywords associated with a specified topic via 'keywords(topic)'. Modified Paths: -------------- trunk/gtools/R/keywords.R trunk/gtools/man/keywords.Rd Modified: trunk/gtools/R/keywords.R =================================================================== --- trunk/gtools/R/keywords.R 2013-12-23 16:08:10 UTC (rev 1760) +++ trunk/gtools/R/keywords.R 2013-12-23 18:48:15 UTC (rev 1761) @@ -1,5 +1,33 @@ -keywords <- function( ... ) +keywords <- function( topic ) { + file <- file.path(R.home("doc"),"KEYWORDS") - file.show(file, ...) + if(missing(topic)) + { + file.show(file) + } + else + { + kw <- scan(file=file, what=character(), sep="\n", quiet=TRUE) + kw <- grep("&", kw, value=TRUE) + kw <- gsub("&[^&]*$","", kw) + kw <- gsub("&+"," ", kw) + kw <- na.omit(trim(kw)) + + ischar <- tryCatch(is.character(topic) && length(topic) == + 1L, error = identity) + if (inherits(ischar, "error")) + ischar <- FALSE + if (!ischar) + topic <- deparse(substitute(topic)) + + item <- paste("^",topic,"$", sep="") + + topics <- function(k) help.search(keyword=k)$matches[,"topic"] + matches <- lapply(kw, topics) + names(matches) <- kw + + tmp <- unlist(lapply( matches, function(m) grep(item, m, value=TRUE) )) + names(tmp) + } } Modified: trunk/gtools/man/keywords.Rd =================================================================== --- trunk/gtools/man/keywords.Rd 2013-12-23 16:08:10 UTC (rev 1760) +++ trunk/gtools/man/keywords.Rd 2013-12-23 18:48:15 UTC (rev 1761) @@ -5,21 +5,24 @@ List valid keywords for R man pages } \usage{ -keywords(...) +keywords(topic) } \arguments{ - \item{\dots}{Optional argumenst to pass to show.file()} + \item{topic}{object or man page topic} } \details{ - This function simply determines the path \$RHOME/doc/KEYWORDS and calls - show.file() to display it. + If \code{topic} is provided, return a list of the keywords associated + with \code{topic}. Otherwise, display the list of valid R keywords + from the R doc/KEYWORDS file. } -\value{ - Nothing of interest. -} \author{Gregory R. Warnes \email{gr...@wa...}} \seealso{ \code{\link[utils]{help}} } \examples{ +## Show all valid R keywords keywords() + +## Show keywords associated with the 'merge' function +keywords(merge) +keywords("merge") } \keyword{documentation} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2013-12-23 16:08:13
|
Revision: 1760 http://sourceforge.net/p/r-gregmisc/code/1760 Author: warnes Date: 2013-12-23 16:08:10 +0000 (Mon, 23 Dec 2013) Log Message: ----------- Add keyword. Modified Paths: -------------- trunk/gtools/man/stars.pval.Rd Modified: trunk/gtools/man/stars.pval.Rd =================================================================== --- trunk/gtools/man/stars.pval.Rd 2013-12-23 16:04:03 UTC (rev 1759) +++ trunk/gtools/man/stars.pval.Rd 2013-12-23 16:08:10 UTC (rev 1760) @@ -40,5 +40,5 @@ } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. -\keyword{ ~kwd1 } -\keyword{ ~kwd2 }% __ONLY ONE__ keyword per line +\keyword{misc} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2013-12-23 16:04:06
|
Revision: 1759 http://sourceforge.net/p/r-gregmisc/code/1759 Author: warnes Date: 2013-12-23 16:04:03 +0000 (Mon, 23 Dec 2013) Log Message: ----------- Add stars.pval() function to convert p-values into significance symbols. Modified Paths: -------------- trunk/gtools/NAMESPACE Added Paths: ----------- trunk/gtools/R/stars.pval.R trunk/gtools/man/stars.pval.Rd Modified: trunk/gtools/NAMESPACE =================================================================== --- trunk/gtools/NAMESPACE 2013-12-18 14:33:28 UTC (rev 1758) +++ trunk/gtools/NAMESPACE 2013-12-23 16:04:03 UTC (rev 1759) @@ -31,6 +31,7 @@ setTCPNoDelay, smartbind, sprint, + stars.pval, strmacro ) Added: trunk/gtools/R/stars.pval.R =================================================================== --- trunk/gtools/R/stars.pval.R (rev 0) +++ trunk/gtools/R/stars.pval.R 2013-12-23 16:04:03 UTC (rev 1759) @@ -0,0 +1,8 @@ +stars.pval <- function(p.value) + { + unclass( + symnum(p.value, corr = FALSE, na = FALSE, + cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1), + symbols = c("***", "**", "*", ".", " ")) + ) + } Added: trunk/gtools/man/stars.pval.Rd =================================================================== --- trunk/gtools/man/stars.pval.Rd (rev 0) +++ trunk/gtools/man/stars.pval.Rd 2013-12-23 16:04:03 UTC (rev 1759) @@ -0,0 +1,44 @@ +\name{stars.pval} +\alias{stars.pval} +\title{ +Generate significance stars from p-values +} +\description{ + Generate significance stars (e.g. '***', '**', '*', '+') from + p-values using R's standard definitions. +} +\usage{ +stars.pval(p.value) +} +\arguments{ + \item{p.value}{numeric vector of p-values} +} +\details{ + Mapping from p-value ranges to symbols: + \describe{ + \item{0 - 0.001}{'***'} + \item{0.001 - 0.01}{'**'} + \item{0.01 - 0.05}{'*'} + \item{0.05 - 0.1}{'+'} + \item{0.1 - 1.0}{'' (No symbol)} + } +} +\value{ + A character vector containing the same number of elements as + \code{p-value}, with an attribute "legend" providing the conversion + pattern. +} +\author{ + Gregory R. Warnes \email{gr...@wa...} +} +\seealso{ + \code{\link[stats]{symnum}} +} +\examples{ +p.val <- c(0.0004, 0.0015, 0.013, 0.044, 0.067, 0.24) +stars.pval(x) +} +% Add one or more standard keywords, see file 'KEYWORDS' in the +% R documentation directory. +\keyword{ ~kwd1 } +\keyword{ ~kwd2 }% __ONLY ONE__ keyword per line This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ar...@us...> - 2013-12-18 14:33:31
|
Revision: 1758 http://sourceforge.net/p/r-gregmisc/code/1758 Author: arnima Date: 2013-12-18 14:33:28 +0000 (Wed, 18 Dec 2013) Log Message: ----------- Retain original list order unless sort=FALSE; also stop if unnamed list Modified Paths: -------------- trunk/gdata/R/ll.R Modified: trunk/gdata/R/ll.R =================================================================== --- trunk/gdata/R/ll.R 2013-12-16 19:58:56 UTC (rev 1757) +++ trunk/gdata/R/ll.R 2013-12-18 14:33:28 UTC (rev 1758) @@ -29,13 +29,21 @@ return(size) } + ## 1 Set unit, denominator, original.rank unit <- match.arg(unit, c("bytes","KB","MB")) denominator <- switch(unit, "KB"=1024, "MB"=1024^2, 1) + original.rank <- NULL + ## 2 Detect what 'pos' is like, then get class, size, dim if(is.character(pos)) # pos is an environment name pos <- match(pos, search()) if(is.list(pos)) # pos is a list-like object + { + if(is.null(names(pos))) + stop("All elements of a list must be named") + original.rank <- rank(names(pos)) pos <- as.environment(pos) + } if(length(ls(pos,...)) == 0) # pos is an empty environment { object.frame <- data.frame() @@ -66,6 +74,12 @@ object.frame <- cbind(object.frame, Dim=sapply(ls(pos,...),get.object.dim,pos=pos)) } + + ## 3 Retain original order of list elements + if(!sort && !is.null(original.rank)) + object.frame <- object.frame[original.rank,] + + ## 4 Filter results given class if(!is.null(class)) { include <- object.frame$Class %in% class This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2013-12-16 19:59:00
|
Revision: 1757 http://sourceforge.net/p/r-gregmisc/code/1757 Author: warnes Date: 2013-12-16 19:58:56 +0000 (Mon, 16 Dec 2013) Log Message: ----------- Trim will now remove all types of leading/trailing whitespace by using the [:blank:] character class. Modified Paths: -------------- trunk/gdata/R/trim.R Modified: trunk/gdata/R/trim.R =================================================================== --- trunk/gdata/R/trim.R 2013-12-07 16:12:05 UTC (rev 1756) +++ trunk/gdata/R/trim.R 2013-12-16 19:58:56 UTC (rev 1757) @@ -8,8 +8,8 @@ trim.character <- function(s, recode.factor=TRUE, ...) { - s <- sub(pattern="^ +", replacement="", x=s) - s <- sub(pattern=" +$", replacement="", x=s) + s <- sub(pattern="^[[:blank:]]+", replacement="", x=s) + s <- sub(pattern="[[:blank:]]+$", replacement="", x=s) s } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2013-12-07 16:12:09
|
Revision: 1756 http://sourceforge.net/p/r-gregmisc/code/1756 Author: warnes Date: 2013-12-07 16:12:05 +0000 (Sat, 07 Dec 2013) Log Message: ----------- Remove spurious '<' character Modified Paths: -------------- trunk/SII/vignettes/SII.Rnw Modified: trunk/SII/vignettes/SII.Rnw =================================================================== --- trunk/SII/vignettes/SII.Rnw 2013-12-07 16:00:09 UTC (rev 1755) +++ trunk/SII/vignettes/SII.Rnw 2013-12-07 16:12:05 UTC (rev 1756) @@ -728,7 +728,7 @@ t(round(tab,2)) @ -<<<ComparisonFigure2,fig=TRUE>>= +<<ComparisonFigure2,fig=TRUE>>= compare.plot(sii.right, matlab=matlab, title="Spline method comparison, Right Ear") @ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2013-12-07 16:00:16
|
Revision: 1755 http://sourceforge.net/p/r-gregmisc/code/1755 Author: warnes Date: 2013-12-07 16:00:09 +0000 (Sat, 07 Dec 2013) Log Message: ----------- Move sii.constants out of data/ and into R/sysdata.Rda so it becomes part of the package namespace. Remove the now unneeded 'undocumented' man page that listed it. Modified Paths: -------------- trunk/SII/R/sii.excel.R trunk/SII/vignettes/SII.Rnw trunk/SII/vignettes/SII.pdf Added Paths: ----------- trunk/SII/R/sysdata.rda Removed Paths: ------------- trunk/SII/data/sii.constants.rda trunk/SII/man/undocumented.Rd Modified: trunk/SII/R/sii.excel.R =================================================================== --- trunk/SII/R/sii.excel.R 2013-12-06 22:24:10 UTC (rev 1754) +++ trunk/SII/R/sii.excel.R 2013-12-07 16:00:09 UTC (rev 1755) @@ -10,9 +10,6 @@ if(length(THDI) != length(freq)) stop("THDI must have the same length as freq") - ## Load constants into *this* environment - data(sii.constants, package="SII", envir=parent.frame()) - # Interpolate unobserved frequencies sii.freqs <- sii.constants[,1] Copied: trunk/SII/R/sysdata.rda (from rev 1752, trunk/SII/data/sii.constants.rda) =================================================================== (Binary files differ) Deleted: trunk/SII/data/sii.constants.rda =================================================================== (Binary files differ) Deleted: trunk/SII/man/undocumented.Rd =================================================================== --- trunk/SII/man/undocumented.Rd 2013-12-06 22:24:10 UTC (rev 1754) +++ trunk/SII/man/undocumented.Rd 2013-12-07 16:00:09 UTC (rev 1755) @@ -1,13 +0,0 @@ -\name{undocumented} -\alias{sii.constants} -\docType{data} -\title{Undocuumented objects in package 'SII'} -\description{ - Undocuumented objects in package 'SII' -} -\usage{data(sii.constants)} -\details{ - This page notes objects containied in the 'SII' package that are not - intende for public use, hence are undocumented. -} -\keyword{datasets} Modified: trunk/SII/vignettes/SII.Rnw =================================================================== --- trunk/SII/vignettes/SII.Rnw 2013-12-06 22:24:10 UTC (rev 1754) +++ trunk/SII/vignettes/SII.Rnw 2013-12-07 16:00:09 UTC (rev 1755) @@ -492,10 +492,9 @@ THDI=c(25,25,30,35,45,45,55,60) freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000) -data(sii.constants) -sii.freqs <- sii.constants[,1] +sii.freqs <- SII:::sii.constants[,1] -xlist <- sort(c(sii.constants[, 1], freq)) +xlist <- sort(c(SII:::sii.constants[, 1], freq)) ylist <- rep(NA, length=length(xlist)) names(ylist) <- xlist ylist[ as.character(freq) ] <- THDI @@ -527,15 +526,15 @@ plot(x=freq, y=THDI, col="black", cex=2, log=if(logx) "x" else "", xlab="Frequency (Herz)", ylab="Threshhold of Detection (dB)", xlim=range(sii.freqs), ylim=c(20,60) ) - lines(sii.constants[, 1], sii.constants[, "Ti'.THDN"], col="red", lwd=3) + lines(SII:::sii.constants[, 1], SII:::sii.constants[, "Ti'.THDN"], col="red", lwd=3) abline(v=sii.freqs,lty=3) } tmp() - lines( x=sii.constants[, 1], y=ispl, col="blue", lwd=2) + lines( x=SII:::sii.constants[, 1], y=ispl, col="blue", lwd=2) if(separate) tmp() - lines( x=sii.constants[, 1], y=ispl.l, col="cyan", lwd=2) + lines( x=SII:::sii.constants[, 1], y=ispl.l, col="cyan", lwd=2) if(separate) tmp() lines( spline (x=freq, y=THDI), col="green", lwd=2) @@ -663,12 +662,12 @@ ## comparison of our interpolation and matlab's tab <- cbind( - matlab=sii.constants[,"Ti'.THDN"], + matlab=SII:::sii.constants[,"Ti'.THDN"], R =sii.left$table[,"T'i"], delta =NA ) tab[,3] <- tab[,1] - tab[,2] -rownames(tab) <- sii.constants[,".NFreqLin"] +rownames(tab) <- SII:::sii.constants[,".NFreqLin"] t(round(tab,2)) @ @@ -676,7 +675,7 @@ compare.plot <- function(x, matlab, title) { plot(x) - lines(sii.constants[,".NFreqLin"], + lines(SII:::sii.constants[,".NFreqLin"], matlab, type="l", col="red", lwd=3) @@ -698,7 +697,7 @@ <<ComparisonFigure1,fig=TRUE>>= -compare.plot(sii.left, matlab=sii.constants[, "Ti'.THDN"], title="Spline method comparison, Left Ear") +compare.plot(sii.left, matlab=SII:::sii.constants[, "Ti'.THDN"], title="Spline method comparison, Left Ear") @ @@ -725,7 +724,7 @@ delta =NA ) tab[,3] <- tab[,1] - tab[,2] -rownames(tab) <- sii.constants[,".NFreqLin"] +rownames(tab) <- SII:::sii.constants[,".NFreqLin"] t(round(tab,2)) @ Modified: trunk/SII/vignettes/SII.pdf =================================================================== --- trunk/SII/vignettes/SII.pdf 2013-12-06 22:24:10 UTC (rev 1754) +++ trunk/SII/vignettes/SII.pdf 2013-12-07 16:00:09 UTC (rev 1755) @@ -9,18 +9,15 @@ \xF6\xE7wϡH\xD92\xE2v+\xD0]xL~\xFC\xBEs!)\xFF8~\xF6\xEA܈\x91p\xA5F\x8F\xC6\xD7#!u)\x95Y۔\x95\xAEG\xE3\xD9\xE8\x8F\xEC,Y\xBB\x84\xDB\xF4\xDC\xF0\xA5\xDD-ྂ\xEB&/TUeW\xF7y!M6\xCB|\x9AK\x97ݢ]d\xBE\xB4w\xF3%\x8F]\xDC\xE0 \xAE\xC9"Xv\xB9\xB4\xD9#!]0\xF0\xB1>\x91\xED}e\xAA\xAB\xD1 \xE8\x88=\xC0"h\xA4\xB4\xED\xB1\xD9e\xFE\xE7\xF8\xE7W\xE7\xA2 Q6\xC6H/M\xA8\xB2\xA9\xF4\xA8Ц\xAC+C\xD2~\xDA cd\xB4\x86k\x83@\xC6%\xBC\x97\xF4\xFA[^\x83\xDC -\xE3Ϸp{I\xBF\xBC\xBB\xF5\xBDD\xF6\xDA?a\xC6Q\xD3U\xCE\xC2\xA6\xD2\xEEK\xA7\xF0ֳ5\xB6p\xBE\xE0\xF4\xC4\xE78\x99R%*+\x94.D\xCC\xCF\xF5\xDA\xFB~\x97\xCB:\x9Bxg\xA17\x88h3\xB9Kx\xAD\xDCy\xAA5ec\xA5E?\xA2\xAEK+\x94wT\xE3!\x8Fo9jHO7\xD9l +\xE3Ϸp{I\xBF\xBC\xBB\xF5\xBDD\xF6\xDA?a\xC6Q\xD3U\xCE\xC2\xA6\xD2\xEEK\xA7\xF0ֳ5\xB6p\xBE\xE0\xF4\xC4\xE78\x99R%*+\x94.D\xCC\xCF\xF5\xDA\xFB~\x97\xCB:\x9Bxg\xA17\x88h3\xB9Kx\xAD\xDCy\xAA5ec\xA5E?\xA2\xAEK+\x94wT\xE3!\x8Fo9jHO7\xD9l \xF0.\x9B"\xBF\xBBye\xFC\xB1\xA6\xD8m\xF1\xB7\x8D41\xE1\x91;\xB0 \xD8\x9A\xA6\xF2C\xC9\xF2}\xF7\xF55=1\xFE\xF7\x84V\xFB\xFB\xC5 \x9Ad\xCDJ\x84\x97x\xDBa\xA7G\x81lg8\xE00\xBD\xA02\xCCe\x9C^ \xE5F`r\xF8\x86\xC0\xC1\xB8q\x90\xEF\xD3\xF5&i\xECB\x8E'\x86\xAE\xF2\x99\x89I\xBEE\x98\xDD\xF7\x807\xC4P\xD2;\xCDQA\xAD\xC82G\x80i{\x8F0=\xE8\xF9\x8C:\xB4\xE8a\xA5\xB2\x96\rs\x86b\x8B5[\xEF[rc\xB3\xF6fN}\xBA\xBDC Y\xB9\xEC\xBDP:\xF1\xC6\xF3\@μ\xA4\xE1oџ6yeSF I\xBA݅\xC0.\x89\xA2\xD3\xC0/H\xF4\x8D庝%Z(K$`\xF9\xB7\xEF(Wm\x95$+xRA\xCDI\xAE\xB5\xEF\xF3\xC2HEI\xC0)\xB0\xF1Υ\xE7#\xAD1\xD8".&\x84-G\xCAI[\xC9\xE0\x8A\xCCZ\x87\x8C\xB0>fW\xB8ʠs\x94\xD3\xF82ܵ^\xB7\xBE\xC0\xEE \x93%U\xF4A\x91!oY:\xEB\x92\xEAbr\xD40̭_J\xD3HI\xCA\xC5\xE9\x92\xD7\xAA41\xF5U\xE3\xC9\xE0خ ٛ-zc\x99\xF4\xF4\xF8\x87\x9A\xD7\xE8\xAA\xF5]\x9E\xF7\x87_\xBDn肮S\xB8\xF0\x99B4\x8D#\xE3\x8E\xEA\x89\xE6\x86\xFA\xD0Z\xB1\xAAm\x94\xBC V\xD4\xC1Gf3\xB2<p\xFC\xDA\xE1\x88˦\x90\xA7\xBD_\xD0\xEB\x98> \xA9Gf\xE13ȿ\x9Eq:,\x98.%4\x8DZR\x97 7WD M1c|\xF3\x9EA\xD6<\x98\xE8ST6q\xDA)w \x8B\xF9.\xDE,\xB6'j\xC6}\xC3N\xDD\xE7<\xE3q \xD4'\xA4\xF5\xFEr\xC3\xE8\xB7L\xBAe\xE2\x8C\xFErR,. \x8B0\xA5\xB5\x82\xAB\x91e\\xFBᅨ\xB4㒤w\xDAJ -\xC6"\xB4 -[$\w\xFDp\x84"^\xB09W:\xE4u(\xEA\xBE\xE5-&\x98w\xB8\xAC5&\xFB=!q\xEE\xDFi\xD7fD\xCC\x83\x9BelV\xB1)\xFB͊\xF8=O\xA7؆\xBFkE\xBBN\xC6Y\x82J\xCD\xD2\xED&\xACٌ\xDBy(\xC6Ed\xD3'b\x87\x92KF(sT\x8A:\xAEL\xF2\xDCb@\x81#\x9D=pm\xFC\xBB\x87\xD2yJ\xB7\xA3\xAC\xB9\x8C\xB4<J\xE1}P\xBA \x99\x81\xE4V\x91\xBF9*GW\xE85\xEA\xC4^\xDC\xD2HȈ\xACs"\xDA -\xA0\x89]\xF6\xD5\xE9!u:\xA3rL\x97~\xEA\xCF\xE7\xD4\xA2\xDB\xD9\xB6\xD7\xC47L\x94&k\xA2\xAENr\xDB&\xEA\xEA\xE1\xD8 -\xAA3\x91\xBF;*Dz\x87OT\xA7\xAF\xBBu\xBA\xAFΰYE\xB3a\xF4\xCDER\xE44\xA2'\xB0\xC8\xC5\xED\xFA\xF1\xDAS\xE4\xFA\xF2\x9FX%ٖ&\xA7KJ\xAF9(cƙ\xA4"\x93\x9C -cȺ\x85\x82\xD2\xE2\xD4\xD3\xD8\xD3{\xB3\xF4{\xB3\xC8\xDE\xC0\xF57\xAF\xD9a\xBFY\xFAs\xDB\xC1^\xBAK\xB6\xA9I\xB7̋,\xF9\xC4!\xBC\xA9%q\xEB\xEF\xEC\xE1K2\xC0\xFF\x97c\xC1\xF1\xAD6\xF1\xC0W96\x98S\x8F -\xF3\x9FpTx:\x82*\x9E\xAEކY\xFC\xE8`\xE1\xE3q\xFDX>D\xB0o\xFD\xF0\xB5N\xAA\xFB\x9F<\xAA\xFB\xFD\xB6\e>\xC7U\x87\xD4?\xD7Eo\x93\x91\x9B\xDE\xDA\xD0)~\xD7/_]\xCA0 Z\xB7\xFE\x8A\x93k\xEAt\xB8\xC3\xC3\xF6\xDE:\xFBg<4\xEE\x9C\xFD\xCEqxrF\xA6\x94r'\x8B\xC75\x95\xFAl\xB2\xE5\xABdGr\xC9ɡN\xFA\xD7{8\xD5᧲\x94\xB6\x94u\xE3?\xFB\xEA\xBA\xC7s\xE8\xF7\xEC\xCD\xF8ٿηr +[$\w\xFDp\x84"^\xB09W:\xE4u(\xEA\xBE\xE5-&\x98w\xB8\xAC5&\xFB=!q\xEE\xDFi\xD7fD\xCC\x83\x9BelV\xB1)\xFB͊\xF8=O\xA7؆\xBFkE\xBBN\xC6Y\x82J\xCD\xD2\xED&\xAC\xD9l\xE1j+OGP\xC5\xD3\xD5\xDB\xF0!\x8BL#|<n\xA2߂ˇ\xF6\xAD\xBE։\xC2Cu\xFF\x93Guߣߖ\xAB\xCC\xE7\xB8\xEA\x90\xFA\xE7\xBA\xE8m2r\xD3[:\xC5\xEF\xE0\xFA\xE5\xABK&A\xE2\xD6\xFFAqrM\x9Dwx\xD8\xDE[g\xBF\xE0\xE0\x8C\x87ƽ\x83\xB3\xDF9OΨ\xC0\x94R\xEE\xEFdC\x9FM\xB6|\x95\xECH.99\xD4I\xFFz\xA7:\xFCT\x96Җ\xB2n\xFCg_]\xD7\xE1x\xFD\x9E\xBD?\xFB\xE1\x8Cr endstream endobj 115 0 obj << @@ -277,25 +274,31 @@ /Type /ObjStm /N 100 /First 793 -/Length 1879 +/Length 1877 /Filter /FlateDecode >> stream -xڵX\xDBn\xDBH}\xD7W\xD4c\xBC\xC0\xB0\xD9wr`\xE0\xC8\xF1\xC4\xC0\xDC{\xB0\xB3k\xF8\x81\xA6Z67\xA9%\xA9\xD8\xF3\xF7{\x8A\xBAX\x8Adɑ\xB3\x80$\x92\xDD\xD5\xD5U\xE7\xAB\xAA%)&K:&GVQJ\x89"ワ\xC6ǒ4$\xBDǗ\x94\xC4\B\xCAܒJҁR\xA4!\xA6\xA0\xC0`NpI\xC9ȔU\x8DM\xC6y̓I$iOZt\x82\xCD0!\xC9Z;0\x8A\xAC\x87\xB4%+H㒐I\xC9\x98ì%\xAB\xC9%\xB0А\x8FY\x9A<\xF4ڄ\xBC\x85\x98$\x9F\x9A\x81S\x94`[g)\x81\x98s\x94\xA4P\x98R -C\xA0=\x85&\xAF)\x85\xDE\xE0\x92;+hLp\xC5f\xA4\x94z\xC0H\x8C'\xF0]:\\xAE\x9E\xF5\x91TRR -h\xB4\xA5\xC0GA(@;\xA7\x9E\xF1\xC28\xF4i\xEC\x9FB^\xA7\xC9@\xC64,C\xD2j\xB8\x8F\x8B\xE3ݱ\xA3\x8BY=c{\xD8\xB8\x8D\x8DI\xA6\xAC\x81\xE1\x8D5\xDF-\xE2\x96\xC0H\xBF\x81\x96\xCC!\xFB\x8A\xAB\xB7 2~\xE0n\x80\xBD\xECYL\xD8;Cp\xF0\x80?\xED\xD8(\xD0\xEC|\xDAlj\xF6l\x9C\xD1 ױ\xC3I\xC1\x8C\xD4)\xA3-WmF\xDB\xC1\xE9)\x89+?\xD7\xD75\x89sz׆\xBC+\xEA*\x92'\xF4\xD3O\x83wW\x97\x97\x94\xD7U\xDBeUG]vW\x86\xF6\xE4\xC55j\xBEf\x98\x95\xF9\xAC̺\xA2\xBA'\xAC\xDF!?\xBB[-Yn\xF4\xE1)\x9BL\xCB@\xC3HҸ\xA9't\xF6\xDB\xD5%]\xE9\xC8\xFE\x80\xF1tVUቆ\x94\xA9\xAF\x95\xA97(\xD3se\x97U\x9Ai\xCD\xD5-TXjv"A㺡\x8C\xDA\xD0Q=\xA6)\xC6C\xD5\xED\xC03\x9BNC5*\x9E\xA2\xB3g>\x86rJd\xF7{\xF0\xFF\xC7i?L\xB3\xFC3\xA4\xF7۹p\xDE]\x91g\xE5>\xB5X\xDB"\x8F^!\xAE\xE2\xA5x\xB1O*\x9DKͪQ\x9D\xCF&@"\x8C\xF6@\xF1~{ć\xCFȍgU\xBF%\x8D¸\xA8\x8A\xDD\xD7\xD8>\x87dJ\xEAj\xFAD]\x93U\xEDK\x9Bn\xAC]@\xF5 o\xCD(\xD0#\xD0\xEAB5\xC2\xEE!|\x88t-\xF0Ϯ(\x8B\xEE\xEF\x95#\xFB"\xE6|\xBE\xE4:\xB4\xBBkM\xFB\xF9\xD2\xCBa=\x99fM\xA0b#\xCCG\xA1ˊ\xB2\xED#6,ަQ\xD6e\xBBun\xA8]*\xFE%\x8C;\xFA\x905\xAFY\xB2D\xAD\xB8سf\xB5@\xAD\x9B^\xB4\xB0\xF7\xB1\xE8hNX\xC1\xC6r<\xA6\xEB| 1\xE3EY5*\xF9U\xC5\xCB9)ږo\xBFd\xE5,\xEC\xFC\xC3\\xC1EQe%\xE5eȪ\xD9tK\xFC(F\x89\x8B\xA2\xBBe\xF9\xD3Ӂ\xB8\xFE{H\xF0+=\xC3\xE8#p\xA9fɁ\xF8\xDAz\xD6\xE4\xA1\xED\xEBg?\xF4k\xD9\xFB\xFA\x89nb84>U\xB7\xA8h\xB0\x96\xABz/\xB7P\xBF\xB6\xEB_\xFF\xFA7y4\xD6G \xAAH5+\xCBۗĠU\xF5\x80\x88qi\xC4uyC\xEC>;~aQ\xACc\xBB\xF0\x98\xCB%\x8A\xFF\xFC\xA1\xEFA\xF7\x8E\xFB\xAFd\xF9\xC0\xFD\xD8$nd\xDC?@\xB7\xF8\xA3\xA9\xF3+\xE4\xCC\xA0u~A\xE2:<u\xB4\xDAv7\x8C\xD2n\xC1\x88\xE3[`(5T\xDD\xF4\xED -\xDB\xF2Ֆ\xFD\xFC@\xBC\xAF\x9BQhz]\xF2V|\x97b\x88 p˻\xE70\xC5?\x8Aь\xB8DE\xA8\xD4ڡ>\xA0t\xBB\xD4D6f\xB1\xAB\xD9]\x95◢\xFA,\xCENO\xFB -\xC4Y\xA3\xE2J\xFC\xF9钿\xEF\xBAn\xFA\xA3\x8F\x8F\x8FRk\xD4\xD5bxu\xCD/e\xD4=u'\xB0\xED\x99/n<R\xFFL\xD8-\xCF\xE0opt4\xE96\xFE\x98\x806\xA1\xA3ϳ.л\xF3U\x8C\xA6N\xC5Nz\xF4\xAB\xC9 \xD4գ箋i\xF9\xE7&\x9B>yK\xBFϺ\xE9\xAC;\xE9\x9D\xCD\xF2\xD0\xF0\xAC\x8Eb$\x97\xC5^5\x9Dlzǘ\xAD\xA3~P\xC4oل\xE7\xA2!kC\x8F\xAB@\xC1\xFE\xB8Tć -ŀ\xB3 w\xAE\x8Fn\xC4\xE5p\xC8\xD2#\x8C\xF6\xAF\xC7\xED\xDA6\xCBs\x85\xAB\xF5\xE2\x9FEuV\xB5\xC5\xF3\xF4y1\xA0Ÿޠu\x93\xA2\x9A\xB5\x94:\xF1\xDFY݅\x92s\xB04F\x8Cj\xF8\x8F\x94&\xEE\x9B\xECKY>\xEB\x82ȋ\x95w\\x86'\x813 -b\x92\xE5 -B\xEE\xAE \x90\xC1\x92,\xCFA\x84آ-Z!\xE2QEE\x83\xBDE\xF6\xCA2[ ->̪\xFB\xAC\x99M\xCAl։\xFA\xBE\xAE\xC2g\x91g\xAC\xAFE3n7\xC23yUfڔ\xE3\xFEWFƿ\x98w6\x92\xC8kbZ\\xF4\xE7 -\xB9 -\xF0\xBF~\xBF\xFB\xBF\xB3\xAC\xEEr\xC2'%\xF5\xA6\xE0\xD7\xF1V\xF0\xAB\xE4\xD84\xA4\xFC\x9E4\xB4 -IN"\xBB\xB3+\x8CWY\xC9(\xA5|P\xB0\xC8J8\xF6\xED#e\xC8:t'\xCAC\xEE\x8C4\xA6kD\xA9ו\x9AM9\xC5G\x91\xC8\xE3d{Hg\x9E\xC8\xE3\x98\xF5\xF1k,\xEE#~\xA3ƬG,\x96Z-?\xE8\xB7\xD1\xEE\xB7h\xD7\xF6Xڵ\xF9\xAE\xB4\xC7.r\xA0\x99_%v\xD3H\xF5\xD2ĢHɝ\xB4\xD7u\x87\xED¢\xB5[\xE3I\xBB\xD7\xF1\xBE!\x87Y\xEB(I_\xE4s\xB35X\xE7p\x83\xA9u\xA6\xF9\xA4\xAD\x97\xE4b\x85\xD9\xC9\xFAw\xE0֘-n\x8D:\xB2A\xE3\xFF^߆\xED59\xF0\xED\xA5\xDC$ۮ\xBBn\xB7]\xF7\xDFҡlDĺ[\xFC\xB7\x8C}[\xAFh\xB7\xB5\xEAX\xB7\xAC>ڭ5W\xD6}<ڭm\xB6\xEC\xD1l\xD9\xEF\xC1ֱ\x9E8\xBD剓\xDF\xE4\xC9Z:us\x84\xF9ϳ\xB74\xF5\xF93\x85vmP.ѦXGi\xFF\xBF\x9A\x89\x9Cvo\xE9\xEA\xBAI)\xA6M\x8DVm\xD2F\xFC\xB4\xD6\xDC\xA3\x99 \x8E1\xCEȷ\xDENAQ\xE2X\x8D\xAB5\xFF7+9d\x9Cz]nې\xDB}\xFC\xFCZ\xC6\xE1\xFC\xA9K\xC5h\xD4a9>\xCD*#\xCB\xE1g҃bbI\xB2&\xF7?\xA3D8\xB7 +xڵX\xDBn\xDBF}\xD7W\xCCc\\xA0\\xEE\x95dap\xE4\xB81\xD0b\xBD~\xA0\xA9\x95͆"U^b\xF7\xEF{\x86\xBAX\x8AdI\x91S@\xC9\xDD\xD9ٙs\x863\xB3\x92\x92%\x92#\xAB(\xA1X\x91\xF1\xC1W\xE3cI\x92Q\x84/)\x89\xB9\x98\x945\xB8%'\xA5HCLA\x81\xC1\x84#㒐\x91 \xAB4#\x9A\x8C\x8B0O&\x96\xA4#\xB2Тcl\x86 I\xD6ځQd#H[r\xA1\x824.1\x99\x84\x9C\x81i0\xCCZ\xB2\x9A\ +E!KS\xBD6\xA6\xC8BLR\x94\x98\x81Sc[g)\x86\x98s'P\x98PC\xA0=\x81\xA6HS#"\x83KB\xECT\xA8\xA01\xC6S\x98\x91R\xEA# 1\xC3w\xE9pu\xB8F\xAC\x8F\xA4\x92\x92@\xA3\xA0-> +B +?\xF0 +7\xC0^\xF6,\xC6\xEC\x9D!8x\xC0\x9FvlhvQ\xD2lj\x8E\xD88\xA3A\xAEc\x871\x92\x80!\xA9F,\x9B\xA4\x89@<{\x8A\x8D +y\x91\xC3 +\x9E+ΞIx\xEF\x8B)\xFD\x9A\xDE\xEF\xC0\xFF\x9BҾ\x9D\xA6\xD9GH\xEF\xB63\xE1\xAC\xCE\xDB<K\x8B]j\xE7\xB06y \xAE x\xBEK*\x99Iu\xE5\xA8ʺ \x90\xF0\xA3P\xBC\xDDB\xC6\xF1\xE13r\xE3\xAE췤\x91\xE7e\xBE}\xE1 +{\xC3\xE7\x90\xCC|AmE\xA8\xADӲyiӵ\xB5s\xA8>\xE0\xADyzZ\xAD/gA\xD8>\xF8\xCFq\x8F\xAEy+.\xF22-(+|Zv\xD3 +\xF1T\xA0a$.\xF2\xF6\x96\xE5OO\xE2\xFAߩ'\xC1\xAF\xF4@+\xA0\x8F\\xC0\xA5\x9A%\xE2\x83o\xAA\xAE\xCE|\xD3\xD7\xCF~\xE8'?\xCAӷ\xD5݄ph0\xA2D\xDD\xA0\xA2\xC6Z\xAE\xEA\xBD\xDC\\xFDʮ\xFC\xF9EhlĨ"eW\xB7/\x89A)\xAA\xEA㒀\xEB\xF2\x9A\xD8| v\xFC¢X\x87v\xEE1\x97K\xFF\xD9C߃\xCC\xEF\xF7_\xF1\xE2\x81\xFB\xB1H\xDC4Ȱ\x80n\xF1k]eWș7@\xEB\xFC\x82ĵji\xB9\xEDv\xA5݀-Ɨ\xC0(P$*\xA8\xBA\xE9\xDB\xB6\xE5\xB3-\xFB\xF9\x81x[\xD5#_\xF7\xBA\xE4\xADx/.\xC5@\xE0\x96w\xCF`6\x8A\xA2q\xB1 +P\xA9\xB5C}@\xE9v\x89 l\xC8bW\xDD]\x95\xE2Ǽ\xFC(\xCENO\xFB +\xC4Y\xA3\xE2J\xFC\xF6ᒿo\xDAv\xFA\x9D\x8F\x8F\x8FRk\xD0Vbxu\xCD/e\xD0>\xB5'\xB0\xED\x99/n<\xF6R\xFFL\xD8-\xCF\xE0\xAFqt4\xC9&\xD11=\xAC}\xFFF\x9F\xA7\xAD\xA77\xE7ߩM\x9D +\xD1\xF8\xE9P\xCB\xA8\xABF/\xCE]\xE7-2\xD2\xF2u:}ȳ\x86~\xE9\xDAiמ\xF4N\x8D\xBA\xCC\xD7<\xAB\x83\xC9e\xBEW\xC5C'\xEB\xDE1fK¨\x94\xF1s:\xE19\x85hH\xDF\xE3*P\xB0?y.\x95\xF1\xAED1\xE0l\xEBܣq9\xB2\xF4\xA3\xFD\xEBq\xBB\xB2\xCDb\xC5L\xE1r\xBD\xF8=/\xCF\xCA&\x9E>\xCF\xC7c\xB4\xD7\xB4\x8Eb\x92\x97]C\x89\xFFtU\xEB\xCE\xC1\xD21\xAA\xE0?R\x9A\xB8\xAF\xD3O^\xA4Y\xD7z\x91\xE55*\xEF\xB8\xF0O%f\xE4\xC5$\xCDj\x84\xDC]\xED!\x83%i\x96\x811ʱE\x937"@ģ\x8A\x8A{\x8B\xECE\xBA|\xE8\xCA\xFB\xB4\xEE&Eڵ\xA2\xBA\xAFJ\xFFQd)\xEBkЌ\xF8۵\xF0\x8C\xCAL\xEBr\xDC\xFF\xCA\xC0D/杵$rHL\x8B\x8B\xFE\!\x97\xFE\xC7/w\xF3;\xCB\xEA.'|RR\xAF +~n\xBF\x8A\x8FMC*ڑ\x86\x96!\xC9Id{Vb\x85\xE12+ ,\xB2\x8E=FG\x8E2d\xBAA\xEE\x8C\xF64\xA6+D\xA9\xC3Jͺ\x9C\xE2\xA3H\xE1d\xBBOg\x9E \xC21\xEB\xE2WX\xDCE\xFCZ\x8DY\x8DX,\xB5Z,~Я\xA3=ڠ]\xDBci\xD7\xE6\xAB\xD2\xBA\xC0\x81f~\x95\xD8M#u\xD0Hc\x8B"%\xB7\xD2\xFE~\U-\xB6\xF3\xF3\xD6n\x85'\xED\xE3}M/\xB2\xD6A\x9C\xBC\xC8\xE7zk\xB0\xCA\xE1S\xABL\xF3I[/\xC8\xC5 +\xB3\x95\xF5\xAF\xC0\xAD1\xDCud\x83\xC6\xFF#ߚܖ\xED\x90\xF8\xFARn\xE2M\xD7\xDDa\xAE\xDBMף/\xE9P\xD6"b\xD5-\xFE[ƾ\xAEW\xB4\x9B\x8CZu\xAC[V\xED֊+\xAB>\xED\xD6&[\xF6h\xB6\xEC\xD7`\xEBXO\x9C\xDE\xF0\xC4\xC9/\xF2d%\x9D\xBA\xC2\xFC\xE7\xD9k\x9Az\x8D\xFC\x99@\xBB6(\x97hS\xAC \x83\xA4\xFF_\xCDN\xBB\xD7t\xF5\xED\xA4ӺB\xAB6i~Zi\xEE\xBF\xD0\xCCG\x8Fg\xE4\xDB(2\x9C\x82\x828\x8Aa5\xAE\xD6\xFCoVr\xC88uXn[\x93\xDB~\xFC\xFC\\xC6\xE1\xFC\xA9\xF7K\x85h\xD4~9>\xCD*#\xF7\xCB\xE1g\x92\xBDbbq\xBC"\xF7\x8E\xDD8\xA1 endstream endobj 174 0 obj << @@ -846,22 +849,18 @@ /Type /ObjStm /N 100 /First 877 -/Length 1688 +/Length 1687 /Filter /FlateDecode >> stream -x\xDA\xEDYKOI\xBEϯ\xE8c8l\xBF\x9F\x8A\xC4c\xD9 \xED&\xB0\xDAl\x87a<\xC0llk\x8F\xF6\xDF\xEFW\x93ld\x8C\x94C\x82duuwu\xBD\xAB\xBAzP^1\xC9T0L\xA9\x84\xD11\xAD,Fϴ\xA310\x9Dh\x8C\xCC3c\x94̶x\x9AY\x9A92-\xF3Vc\xEE\x98ǚI,h\x9A*<\x8D\x81\xC5v;\xB1dSI\xB2hTLIE--\xE8P\xD5P\xC0S\xE0j\xB0O\xE4-\x88$E\xFC$\xF9l\x89\xA9\x91A'-+\x9A),\x85\xB4\xE1u\xA5\x85\x8CKoz\xF1PA\xB9\x95\xFD|Q~8\xEC><\xE5\x{1F873E}wH\xA7\xD4\xF1U -\x8F\xF2\x95\xD8\x8Fk\x90:m\xBB\x92e\x89e\xBB\x9F\x89\xDDz2('--u&^\x8AC\xB1\x87 \xB49#\xEE\xC4Ƶ\xC6e۾H\x8C\xB8\xFC,\xB7t5`Ўg\xE7 -H\x8A߫\xF1{\xB1\xB3\xBD\xDD2;ES\xD5cq,\xFE<:\xA4߳\xAB\xA6\xB9~.\xC4Ǐ\xF9\xB4\xAAxS\x8B\xBD\xE3\x93A\xDE伹i\xB6 ۜ[R\-\xBCKxp1\xC2\xC6\xF7\xE29\xEB\xF9\xE3su1J6N\-\xDDr0P\xFB\xB5^\xE2R\x97\xB7\x8Ae\xF1(q5\xA7n\xA5\xCF\xD9ĕN\xBDx\xC6\xE2n\xD3\xDF,\xCF\xC4tQ\xE6s\xAD=P41\xB7\xEAPo\x89Q[\xA4\xD4F\xEEP\x9Dր\xDC5ݡVk -\xF1`\xE6踻\xCF\xCCKx\xE8\xB9y\xD8\xCEF휙\xD75\x93V]3\xA55K\xBDHz.lR\xCAL@}\xA0.\xDDcij¡\xA4%\x94G\x97\xD6nRˮ\x9A\xD1P\O\xEA\xCBI>\x9Ar\x9A͕\xB4G\x8A\x97\xB2}0p\xEA\x94R<\xA2=\xB7\xBD\x83\xD7O&%ŏ\x96\xAB\xC5\xE3\xC5c\xE0\xF4L\xE8\xC5Ӂ\xE3uЋg5 -\xB4\xBDx\xC6G\xE3\xF7/Ѻs_\xD3Kt͚\xA0W\xB8\xFC\xE6r\xF8N\xFAo\xD0yh\xD3i\xA6\xE9u\xBC\x8A&x\x88/kbVk\xA6\xF1\xEE\x97\xF1\\xB0\.wk\xF7\xE1)\x8B\xC4\xF9\xEEmuǶV\xAEk[\xABV\xB3\xED\xB5H\xF2A;\xCC?\xBB\xB2\xE5I\xC6\xCDT]\xD5\xDD:\xAA\xEFMʜ\xCA\xDC~ޔ\xEC\xD9\xFEs-\x95\xC1C\x94\xBEa\xE0~\xD9\xB9z\xF0\xE0\xDEI\xD5\xB1s\xC4~\x9B\xE4\xD7WU1e\xAFg\xCD\xF5\xAC\xD9j\x95̊rB\xBB\xB8\xB8\xDE\xFA̫\xA6\xA5\xADE\xED\xC8f_\xAA0kU&^\xE5#\xDA\xB4\x9BO\xCB֮\xE2]~}\xB1_\x8D/\xCF\xF3f\xFAz\x9E\xC6\xCBr\xF8\xA1l\xAA"\xCFį\xE3\xA2\x80\\xFBAi\xCE*+\x904\xF7\x92\xFCe\xB7\xEE\xA7{*\xF7\xF6\xE8\xC8-\x89T`1\xAD\xA6\x82\xE3\x8A\x94bޢ@d -\x87\xF9\x97ū\xD9\xF82\x9F\xCCF\xC3|ֈ\xFA\xB2\x97\xEFE\x91\xBD\xE9u^\x94\x8Bi\xE3S\x84\xE72d\xB9P\xBC}}\xFE\xDD\xEA\x84w8\xC2SԤ\x8D2\xC9u\x9E\xF1\xF4\xE5\xEFg&\xAD\x9DI\xDE=M&\xDDѝ\xCF$\xEF\xB4Lr\xE1Q\xED\xCCW\x92\x87>\xC3ۍ\x92't%>\xFDL\x9E\xF5\x93'ħI\x9E;\xBA\xF3\xC9ҏ\x96<A>\xC95D\xFFIڬ\x97\x8D\xDD^6ʟ\x99\xB4~&\xC5\xF44\x99tGw>\x93\x92\xFC\xD12)\xAAou -9$\xCFf\xAF\xA1\xD4}d\xA7\xD9\xDD\xCF\xA9\xE7\x91\xFD?6Vx +x\xDA\xEDY[OG~\xDF_1\x8F\xE1\xA1s\xBFF(\x97\xD2 \xB5ITM\x83xX\xD6lc{\xA9\xBDN\xE8\xBF\xEFw6!\xD8^\xC8;(I$\xB4gf\xBE9s\xEEs\xC6Q^1\xC9T0L\xA9\x84\xAFcZY|=ӎ\xBE\x81\xE9D\xDFȌ\xA1ob&\xE0%\xB3-N3K\xB8\xA8\x99\xB3!S\xD12o5Ǝy̙Ă\xA6\xA1b\xC1\xD37\xB0\xD8.'\x96L`*I\x96}SR\x81E鈀@2\x81#\x9D\xAE=\x88\x99\xD2B'\xCC\x9C\xA4%\xCEZ\xE0\xE3"\xE0\xE3\xB5el\xBC\x8B\x84\x8D\xB3Z\xB6Z\xB8LKOrH̴\xC7 GD"VDڀ\x91A\xA2h\x85\xE3t\xA4X\xC8h"`"\xE3\x89+\xF6\xF6\xEFw\xA6.\xF0dz\xE1\xF0\xECA\xBC`O\xC0\xF7\xE1\\xF0Aы\xB3>q\x8A\x80>"\x80SY\xE8\xC3)-9tY\xC4\xCDy\xF1\xB1\x8E[\xD7W\xD1t|պ\xBE\x8Az5_-\xE0\xC0V+\x9EP\x9A\xFBp\xDEIN\xB9\xF2\x80͞2\xA4\x91\x983\xF9\xD5̔\\xC7LaE3\x85\xA5\x906<\xA0\xAE\xF4\xE1Pȸ\xF4\xA6\x87 +ʭ\xEC?\xE5\x87S\xC1\xEE\xC3)\xB8\xC7\xE5\xF4\xBDC:\xA5\x8E\xAFRx\x94\xAF\xC4\xCEx\\x83\xD5i\xDB +\x90,KG\xB6\xEB\x99ح'\x83r\xD2\xF2Rg\xE2\xA58{@\x9B3:\xBD\x80ظָl\xDB\x89/.?\xCB-] +\x98F\xC7\xD8\xF1\xEC\xBCK\xF1{5~/v\xB6\xB7\xDB\xC4N\xD1T\xF5X\x8B?\x8F\xE9\xEF\xD9U\xD3\?\xE2\xE3Ǐ|ZU\xBC\xA9\xC5\xDE\xF1\xC9 or\xDE\xDC4[\x90m\xCE-)\xAE^\xB8\xAFd\xE1.F\xD8\xF8^\x9C\xB3\x9E?>W\xA3d\xE3\xC4\xD5\xD2-\xB5_\xEB%.uy\xABXvG\x89\xAB9u+}8gW:\xF5\xE2\x8C\xC5ݦ\xBFY\x9E\x89\xE8\xA2\xCC\xE7Z{\xA0h`nԡ\xDE2\xA3\xB6H\xA9\x8Dܡ:\xAD5\xB8k\xBAC\xAD\xD6,\xE2`\xE6踻\xCF\xCCK8t\x88\xDC<l\xE7\xA3v\xCE\xCC\xEB\x9AI\xAB\xAE\x99Қ%\x8C\xDE$=6)e&\xA0>P\x97\xEE\xF1ų¡\xA4%\x94G\x97\xD6nRˮ\x9A\xD1P\O\xEA\xCBI>\x9Ar͕\xB4G\x8A\x97\xB2}0p\xEA\x94R<\xA2=\xB7\xBD\x83\xD7O&%ŏ\x96\xAB\xC5\xE3\x8E\xE21pz&\xF4\xE2t\xE0x\xF4\xE2\xACF\x81\xF6\xA1g|\xE41~\xFF\xAD;\xF75\xBDD z\x85\xCBo.\x87\xEF\xA4\xFF\x9D\x876\x9Df\x9A^ǫh\x82\x87\xF8\xB2&f\xB5fz\xF7p\x97\xB8\x8Cs\xC1r\xB9ܭ݇S\x89\xF3\xDD*\xDA\xEA\x8Em\xAD\V\xADf\xDB\xB5H\xF2A;\xCC?\xBB\xB2\xE5I\xC6\xCDT]\xD5\xDD:\xAA\xEFMʜ\xCA\xDC~ޔ\xEC\xD9\xFEs-\x95\xC1C4(i\xA4\xD1[`W\;\xA9\x9A!V\x8E\xD8o\x93\xFC\xFA\xAA*\xA6\xEC\x{16CE5E}5[\xADR\x83YQNh\x97'x{VMS[\x8Bڑ;Ta\xD6N\xAAL\xBC\xCAG\xB4j7\x9F\x96\xAD]Ż\xFC\xFAb\xBF_\x9E\xE7\xCD\xF4<\xF4<\x8F\x97\xE5\xF0C\xD9TE\x9E\x89_\xC7E=+D\xD6p\x98\x99\xBC\x9A\x8D/\xF3\xC9l4\xCCg\x8D\xA8/\xEBq\xF9^9\xF1\x9B^\xE7E\xB9\x986\xFE1Ex.C\x96\xC5\xDB\xD7\xE7\xFFЭN\xB8\xC3\x9E\xA2&m\x94I\xAE\xF3\x8C\xA7_\xFE~f\xD2ڙ\xE4\xDD\xD3d\xD2\xDF\xF9L\xF2\xFEG\xCB$\xD5\xCE|%y\xE8gx\xBBQ\xF2\x84\xEE\xA3ħ\x9Fɳ~\xF2\x84\xF84\xC9s\xC7w>yB\xFAђ'\xC8'\xB9\x86\xE8\x926\xEBec\xB7\x97\x8D\xF2g&\xAD\x9FI1=M&\xDD\xF1\x9DϤ$\xB4L\x8A\xEA[]Cɳ\xD9k(u\xD9i\xC5Gv\xF7\xE7\x82\xD4\xF3\xC8\xFEkw\xAC endstream endobj 299 0 obj << @@ -1697,92 +1696,115 @@ endstream endobj 383 0 obj << -/Length1 1811 -/Length2 11002 +/Length1 1813 +/Length2 10947 /Length3 0 -/Length 12140 +/Length 12090 /Filter /FlateDecode >> stream -xڍ\xB4T\xDA-\x8A(\x8A\x97P\x8A\xBB\xBB\x95\xE2\xC5\xDD-\xC1 \xDC\xDD\x8A\xBB\xBB\x8ACq)www\xA7\xC8\xE3\xC8==\xF7\xFE?\xC6{#c$\x99K\xF7\xDCk\xAEMN*\xAFD/\xB46\x89Y\x83\xED\xE9\x99\x98x-\xB2z\xE9hd` P\xB262ٻ\xFCW *>S{{FF'''+;k\x88\x89-\xAA\xBF7\x86\xF0\xDFd\xAD_\xA4P\xFDV\xBE6;\x93\xD1\xCB\xF3\xFF\xB3\xFE\xFFL\xF9\xFF\x93\xFDU\xFEo\xCA\xFF\xDF\x899XZ\xFE\xE9\xA6\xFA\xD3\xFF\xFFqX\x99Y\xBA\xFC\xF0\xA2d\x{35ED431}~\xD9 -\xF0\xFF\x86\xAA\x81\xFE\xDAd\xD0\xCC\xC1\xEA\xBD\x92\xF6/\xDB!6\xB1\xFC\xE7\xCD\xEC\xC4̜A@y3{#ӿ$\xF4\x9F)\xBC\x94\xB74\x83\xE4\xAD\xED\xCC\xFExk-\xFF/9@ //\xE3\x9F;\xFA"\x8F\xFF\xE0?\x9Fa\xC8d\x8447mm\xC4\xEBo^\xE3\xDFr[%L\xE8D\xBF\xF5\x93\x82|K-\x89\x9A\xDEm\xD2\xEAp\x8F\x86O]\x99\xE6\xBB\xB9\x8E\xE8\xC4X\xDC\xA5\xBA\x9A'yt;h\xACEj\x8ASh\xFE\xE5\xFE\xA0\xA38\xB6Ռ4;\xFA\xB6w$\xEF@\xF8k1"\xBD\xB2ж\x{38EDEEA}\x8Fl#t\xBBy\x96\xAD\x9A|֭S\xB7\xB8\xF3מ\x92\x85\xA1\xC0\xE9-\x85\xEDJi䇒q\xFA\x95pm\x9F\xC2I\xF2l\xC3\xF4)\xBC\xF7\xF0\xF6\xF4įiޜ:\xA3O^]O\xBC\xC9y&\x91\x8A\xA1E\xF28\x8C`\xCDw\xD3\e\x89\xBC\x9Br]*Sf\xB1\xFB\x8E\xFF_\x8F\xF6\xEA\xCD\xD0\x85\xDB\xC7\xDD)\xDC\xB7\xA2\xFC\xC8P\xE2\xD4\xDB\xD6\xE15\xAB/̖\xBBT\xAE[\xB2\x8A\xB7\x90\xBDs] -\xF2*|<FXlɰ\xF0\x95&\x89X\xABB\xD2Xx\xB6\xF4\xD3E\xA9g\xC9s\xCEFC;:\xB9X\xB3g9Kί\xEC\x8A\xC8\xDC[\xF7\x99_]w\xA8pj\xD4i\x82Mq⿒\x80\xBB\x88\xA13\xBFR\xA0\xE7n\x99\xF4=D\xE0.k\xF7- -.a\xD75p\xA3\xE9\x8B7\xB6z\xAF\x9B\xA4\xD58\xF9\xEC-)\x93,:\xF7KN\x9EI\xB9\x8E;\xEEm\xD0Xb\x9F^\xA5Z\xF7\xB6o\xDB\xAD\xF0u\xA1\xE3\xC9\xEB\xEA|\xF9w\xAB\x9A\xE23?!\xD3\x86\xBD\xFD\x9AN\xECp\xCD\xDDHGA\x9F\x96\x92\xD5\xC8Z'\x8Fܧ\xA7S\xB3u\x80L\x9DZ\xB9\xDB\xDC\xE3\x84tܳ\xBF\x81]\xA2R\xF2,\Y\x9Eŕ\x86\x99\x87(\x81yW\xB46\xEC\xF0V|t\x8D\xE7\xD3\xF2\x9B\xA05\xA9\xE0\xC8'\xAA\xC0\x9C\xB5\xF2ᶋ\x9D\z&>\x86\xA5\x8F\xE8(\xB2\x96_\xB043\xE4\xA2?\x9FLdG\xB2\xEAr\xD7va?\xF1J7\xD1\xC0\xB9\x8B!\xF9\xFA?\xBBu\x85-\xB4\x9A3\xE9&:$\xD4(\xF4<Q\xAAw\xEDy\xED\x84\xB4\x98\xE1\xA3\xF0\xE2\xBBh\xC8_\xD97\xBC\xDAȁy+\xF0\=\xBBh\xB3\xF3\x8E\xD9GI\xB5 -\xDA#\xAA\x8F\xA7\xE0\xFBr\x89\xC1\x90ɴ{\xC6\xCDˋ\xCF -~\x8A\xC5\xE9h(3\xE1>'\xC0\x84\xBD\xD7\xD67\xA1\xFF -\xE9Ώ\x88\x90[\xDC\xD7\xD4;\xDCs\xE4\xE8b\x92\x9A\x8FUi5-#\xD55\x8D\xFB\xF9\x9D-M\xD8U;9a\xC0\x9F%s\x96\x9Dυ\xAE\xEC'\xC7\xDCo\xE1i\xE2ݵJ\xE0g͓\xE3\xBCط\xAE\xA9\xBFҕ\xC2\xE2d.I\xA8\xF8\xEAÏ\xE5'L\xBD\xC9\xF8\x98%\xC9\xE4\xF4\xB6\xEC\x96\xF2\x9A\xBB\xFB\xC5nL\xAA\xBA6\x8E\xDE\xAE\x9A/\xD0\xDA\xC3\xDE>\xC7\xC5f\x9F\xFEBʹ\x92/\xA5v\xA6\xBC߈\xA2`\xE1pӷ1\x9E6E\xC1\xBDy\xC0@\x880{\xF5hrF,S:\xA2\xDD,\x8BPv\x81v\xF6\xAEZP5\xA5h\xD7y<UtlDhcV0(\x8Dґ\x8C\xBE\x97ȹ\xD8)\xA8\x90D\xF16\x95 -\xA6[\xB3{\x92:\xF1)\x8F\x96 \xC4J\xA1\x9B\x8B\x9BcmV\x92>ǀk\x8B\xF2S\xCC\xD8{u\xA6ܳ\xC1\x86\x94;\xDA\xFD\xE0\x92\xCEǽ\xECqT\xC1\xBEX\x93B\x97o'\xC25c\xBA\x9B\xF5%\xFA\xF0QW\xDCoS\xD8\xF6\xCC\xE2i\xFD\xC2ۤ\xE0\x9C+Qx:r\xB7GN4<wFL\xFA\xB6\xB8=+G\xF7\xEC\xF7,U\xEEq\IKt(\x83 \x82\xBFi\x8CIVnݣ\xA7\xAEǨrD/\xC5;zۅ\xE0\x9AQ0\xC1\xA9\x9E\xAE\xBB\xA0\xA3\xF9О\\xB9k\x81\xAE\xE5 -\xA9\x8C\xF0\xAF\xD4?\x93J\x83\xB4\xBA\xE1\x9B˰S\x88UB\xBA\xF8\xE1\N"\xF0دpl\xBE\x9C6(f\xAA\xDC4\x9CcQ\xF41\xB54aE\xFBR&Я\xA6\xD7paŏ\xD9K>;\xD3\xE5~X#]4!Q\x84œ\xF0V\x82"*\xE5U\xECP\x85:RY\xF5>$\xB5,\x88\x90\x99+c1\xC1\x92\xDB]`\xC0P\xEE\xE6\x8Cû\xFF\xE64\xE7E-\xD8\x9B/\xF2z%+A\xD5\x9BSw\xDD"5\xA3\xF8J\x8A\xB7\xCCI\xF6\xFB\x9AԹq\xA2\xEFy\xABs\x93]\xEF\x82U+Vrv\xD1\x8A,'\xBD\xD6\xE28\xC6MS8\xE0\xB4Y\xE6V\xEAF3\xA3ߑh\xAE:\xAA\\xA6\xAC[\xB6Ȼ\x93S\xAB\xF65\xA0Y\x9D6͔\xA6\xBFy\xC3O\xD1b\x80\xB4S\xF6\xF6R*\xB2\xCB.\xC9_\x8F8w\xA8&6\xCE%\xD2k\x8E\xC0\xDDM\xD17'\x82\xA3\xBB6c0\xF1cb\xA7\xB9\xE4 -\x82n\x90wK"\xC1\xE3W쐇Br\x94\xE7$!N6d\xA1g(\x9C}6\xAAX\xA2~\xE8c\xC00\x89~Ƹ)\xA5M\xD9\xF8\xADs\xBC㰺G`\x8D`\xD8\xA6\xF84+\xE6'b\x9ED_\xDDoQu\xD9\x99\xD14\x8Dlg6\xB3\x90u爇5v컬(]S\xF4T\xA13%\xBD\xA1\xC8-K]]\xF8!\x8F\xF9o\xF4\xB6\xDCBMc+\xA0\xE7eD\xA1\xEA\xE6\xA7\x84\xACz\xF7P'\x99PH\x9C6\xF7\x8A<\xD5f\x9FW3B%o| g\x9Fc\n=[\xA2\xE2\xBC^3{[\xF9\x847\xFC\xF4\x96J\xCE\x9D\x91\xFB0͢_\xB8?,VY\xA8ɖM\x9E\x9F\xACʨ)E9V4\xD1V\xCF/\xF7\xA9+r\xE5\xD6\x8B\xAA\xB5\xD7{\x87\x80* -!ph\xBD\xC3O5}rAt.\xE2K'qVb\xEF'\xDEd`>|â\xE5\xA05\xE20A#\xCB#J\x9C\xCA\xDAŕ\xC3w\x8E\xF5$\x91\xE90r\x82 -\xE5+J\xC5\xCB\xF0>\xF3q\xA8L\xEBifb\x99\xB0\xC7\xE7\xA7(Z\xA8\xD38\xB9\xA7:\xC6!\xFD!\xBF\x9D\x89̉\xC8-(\x9C\xB6\x86\xC8\xDAR)$4\xFF\x8F(aC\xFDJ5\xA6\xAA$p\x85c\xBCL\x98\xDEJ*|\xC1\xBF\xE0[\xE6\x85O\xFC\xE5\xE8\xCEwā0)>\xB7)da\xAB.\xB06e#\x89[N^E\xF5N\xFD\xD21~p\x9BӃ\xB9\x96ڲT\xB8Rz\xBE\xC2\x9A\x84#\xF3uB\x82N\m\xCA\xFDj\xB5e̥\xCEe\xFE\xC1(뢾\x8D2\xCA7\xAA\x8Ab\x9D\x8C.tv\xC5Yz\xAD*\xD1\xF2Ca)RV;8\x8Dp\xCE\xFEb\xEE -\x9C\xE6SI\xBF\xA8]\xAD\xECX\xB8U\xAD\xD1h\xC9\xC3-qPN9\xE3\xB5\xEA}3U=\xA9T]\xBDf\x9B\x8B\xFA -bk\xA9N\xA5\xEB̢\xD0\xC37\xEF\xE2;\xF6\xA3\xA8\xFA\xA8\xB8O\x9Fk\xD9\xF5 s[{\xE5\xB6&\xBE\x85\x95\x8C\xEF ;\x85\xBE\xBB&Õ\xF2\xE4qa2\xE0~{\xC2w\xE7\xACI\xE1G\xA3\x83\x9E\xA4\xC1\xA6\x91\xEC\x9C -\xE0\x95? -OƭuP?8'GX\xE6^\xDE\xD0?<\x90\x9C\xB4Wi\xFF*V\x87\xAC.?\xA4\xD7҄b`T\x94X\x8E\xBE\x9B`\xC8\xC4\xA3\x91Ed\x8FF\xADVQ6\xBD\xC7_\xB2tl\xE7n&ԣ\x86\xBE\x9B\xC4\xFA`#\x92\x9A\xD2{@\x8CA;D\xD5 \x898\xD52/\xFFK5,V\xCE&{\xB0\xCF\xDEHD\xBFi*k\x9D)5\xB2\xBBƻ\x82\x8B\xBDLC\x98\xAA\x87r/6\x98Y*\x99\x85\xA0\xEB\xCB\xFF XP\xD4&2r\xCD\xC03'T\xBB\xF2n\x9F\x92\xFA\x87\xDBq\x9B\x87\xB4Fv%mpZ@\xD7hY5\x8C\xA3\xF7 -\x93\xA8f\xAF=]\xFF#6>u\x99\xD95,\xC8 G\xF2\xB5|"\x93\x8CY@h\xC6\xF5\x91\xFD\x89f\xBB\xD7?\xD1y\xDC*D\xD2!\xFA\xE6\x93\xFC\xB3@S\xE8\xB6\xE4\xD5¡nx\xEE\xBB\xB2F\x89-\x8C\xE9\xF6j\x8FI\xF1P\xA5\xA2]\xFA,\x9C\x88\x8Eb\xCAg~\x8F\x90\xA4J\x9B\xA0\xB7<zqs4\x87\xF9\xF3Ǫґ7dR\x9B5\xD0u\xA7\xDF/\x9E\xBA\xCE\x88mpq\x99p\x86\xD8P?\xD5\xA4\xDE`\xC6Hsj~\xFE\xF4\xDE 7\xFE\xD2x[\x92\xB9\x88Hp\xD2ܾ\x8Br\x80\x8B\x87\x91*\2C<;sj\xB0\x8E#\xB4\xEF~P*\x9FmvM1\xE4p\x9B\xE6\x9C1k\xEE\xF3\x83?\xB8֫\xB2\x99\xBB}˵K\xB2\x8D\xF4UA\xEF7&H\\xB6]]\xD6F8$\x81 -^\xC5Nǐ\xD7$\xFA]\xFDg\x9E\x9D\xF0F\x9C\xB2\xF9\x8A!,\x83ل\xD7\xE8<\xA3\xCC\xCEw}_\xCE\xFB7\xF5c\xE0U\xBFǟQ\x88\x8A\xC2d\xFA~3\xC2\xC0C\x9B\xBE\xC5FYH\xECK\xE6䬡\xD7\xEF\x9B\xFB\xF0\xAA\xB2\\xC6qa\x9Fx\xFF\xAD\xFB\xD7-\xBB\xEE\xF0\x9F(\xEA\xA4\xDD&d`\xE0H\x90V\x9C榿\x98\xCA8\x99h=iMrS\xA8p\xF8Śm\x83o\xA9\xB9&\xB8\x9A\xA8\xB5\xE6]\x90\xB3L\xB4d\xBB.R\xEBe\xB9\xD6\xE0'\xE5}\xCDi\x8C;\x94\xF1.\xF3\xEE\xFAU\xDF83w9\x86Qn'C%\x98&\xBB\x9E\x8F\xAE\xD1k\xD3)\xFD\xB5\xA4u),&\xA70y\xD3\xD8E\xABÆF\x90$\x92\xC6\xF3\x855f4/\xE1\xF7+`\xF5\x9C\xA13\xE6:\xE8f\xB6-o\xB6\x8E\xB5BaZ\x89\xF0\xB4\xE2|\xBD\xE5@\x85\xB8[\xE2\xDD#\xC8\xF9\xAEP\xF7\x95\xE6\xF2?*\xE9\xCC\xD5v|\xBE\xBCU\x9C\xAFpଵE=l\xBE5\xB7\xB2D -Ma\xCD$]<\xC5\xE7\x86\xC4\xFAD\x98!\xEEa\xE8;ts\x91ְ \xF8j\xF4\xAA\xE8NE%\xF9An\x90\xD7\xD3c\xA1\xBD\xF3(\xE0\xDAO\xF0zm(\xE1\x95Ĥ\xA9 -\xDAR\xE5\xC1\xDA1\xFF14\x93\xF3\xEB{rW\xFE\xEEE*P\xD0|\xF58R\x8A\xE2\x89׃\xB5\x8BCA\x8EV˛_qɯ3\xBF\x8Ec\xEB\x94\xF1ˋx\xF8?,\xEA\xB1,\xF6MZ<^acQ\xF4\xC2 \xEF\xF1\x82\xAA\xC59gb\xE1\xF2%n\xC3[\x99\x8C;\x9Bb\xAEC\x91\xA4f\x80H\x95\xD6\xDDY"\xE3\xC4Fy#\xA6\xA3\xC18ެ<W\xE2\xE6\xD1A7Ԟ\xF1)Cs2\x94\xC2a\x85\x8A"DM+2\xBA\xF7:\x81\xC0\xCF\xA8\x9C\x92\xFA{(-\xA3$\xEE;d\xDE\xDD8&c\xB7\xD9\xD8_b\xACĈq~JN`\x8FO\xD5LG\xF7\x97.W\x9B\xC6y~\xDEEi¬\x82\xA2ב\x8A\x99ѠW\xE0\xB6|\xE1\x8CFT\xDC\xE5hU\x88?\xD4B\xC6\xF8\xE7\x82B\xA2+\xC1я\xB5;\xEC\xFAC\xF1\xB9t\xABk\x8C\x93\xA7\xBA^vA\xEE\xC1\xD9St\x854\xD9qM3\xBF\xB2\x95\x9B\xB4\x93\xC4@~\xB7\xC0 =\xF4\xFEd\xA6I\x89a\xAA\xB5j\xAD\xF9\xAE\xEE\xA9\xCAC\xB5\xAA\x922\x95\xC64+\xB9\xFE\x9D8CF;\xF3\xBA|\x89i\x8A\xECÎ\xF4N4[2\xE8\xB3Q\xC1w ̾\xAA9(fA\x82\x9B9\xBER\x8D\xB2\xF0\xD3\x88`\xCC\xDC6%\xC8j\xD9L\x91\xA9\xA0\xB3Mz<[\x90\xB8\xDA\xE8\xA7#g\xF6Z\x87\xB1\x85n\xA9<S\xF1B\xB6\xDF*\xA7\xC1+#\xCB$\xA6\xF9˗W\xFB\xEA\x9F\xD8Lg뻆\xBB=Q\xA6\xA6;\xA3\x84\x9C\xE0Ц\xC4"\xFD\xC0\xE5;泟\x89\xE5\x96M\x99\xEBZ\xB1\x94\x94 \xCEZ\xB2K\xEF\xE2?\xB1\xA1W -\xAD\xBD½\xF6\xCAc\x96\xFAYRL1S\xD5^\xFCY+\xB9\xBE;\xC6\xC8\xE4Jh\xD6\xD3\xCA\xC2رH\x84ki\xB0\xCB?\x95[\xD9FS(J\xD3o\xA8\xB6\xD0?ˌӦ\xBE\x94\xE5[\xBC\xAF\xC2\xE7ү\x9C5y6\xDFQ\xEB\xDF\x85v\xA8u:\x9EM絬l\xC9\x9Ds\x99\xE8^9mZ\xBB~=O\xAD_|-\xB9\xEE \xFBQ\x9D\xF2\xFA\xEBi$n\x8F\xAAZ N8\xA9:\xC7$(E\xBD\xF9\x82\xD1\xCB\xC3\xEE\xD6e8=\xE5\x88j\xC1\x83\x9B9䨕\xE9\xFB\xA6\xDD\Rp7\xFC\x8D\\xC8\xF6%\xEEN\x95]_\xAE8\xAAK\xB0v\xAEȹT\xB5\xC5\xCAw+\x99r\xC2WYC\xED)گ\x84\xDB;F\x87\xCE9mDʲr?\xBEɗ\xFA\xD8\xC8tu\x8Dy\x95\xAA\xE8y\x97k\xF5\xCC\xC1\xEBY\x8E\xE8(\xBFN\x8D%^\xF9\xB0\xB1%\x8FG\x8E^c\xACC%g\xEF\xE3ո\xB5\x81gi\xDC"l\x81\xB0\x9E\xFDF``:3`\xAD\x8E\xC4\xE3\x9BP\xB0\xDEH}\xCD\xC63\\xF1\x856\xC5N5\xD9\xDD\xCF杖\xF0\xE9_\xB4ٸ\xA2Y\xB6\xCD\xF4\x92\x8B?\xA6\xBB:\xBE:\xD1'\xD2\xD9\xEB\xD31\xA2\xDD\xF5\xF6o\xF1\xBC\xAB\xABؒ!djl \xBCɞ\xD1\xEE\x82\xB7\xEE%Y\xB8\x88\xBC\xB0jRE*\xA6\xCBW\xD6j\xB9\x80ϝ\x9B6\xF0?\xA1\xEC\x81Dη\xCD\xD5\xFF\xE4\xA7\xCDbس\xA7\xA3\xF4.蔧\x9E\xBF-̀\xD0L`\xAE\xB1\xA9\xD8\xCC|\xC8B&Rq#\xA6\xFFV4\xE6\xFB1\x84\xF0\x90H`;\x9F\x95\x9C\x83d\xA0/7\xE4n\xBBL\x82\xCB^^\xFBɺG\xFBF\xE0P\xA2UmyNe\xDD2\xF7?\xE9cB\x90l)\x8A~\xE8W\xDF\xD01\xEDO\xEB\xEEes \x9C\xFF\xAAn\x89\xF5I݁;'C\xB9\xF1\x9D!\x8B\xA8u+\x8443s\xBBb\xA6\xB8\xA0\xEE\xCC\xD5(\xBC\x9B( -Vz\xAF\xAD\x88\x93 -\x9F\xE5\x92(:\xB1\x86\xEE\x93\xDA \x9B\xDC\xE9Gh>\xF2\xA0\xCC͌w"W\xA9\xFC6w\xA9\xA3\xEC\xDE=\xE6\xC0\x94캪&\xAA\xB4\xC3_{&\x84^"\xF0\xB7H\xBDK}\xEA\x8Ex -\x9A\x8C\xA0ۍ螺%ΝK\x9F\xB5\xA8e4Ծ\xDAحq\x94\\xBA\xD9\x80\xA9G\x86\xCDVx\xB3\xFC\xE6"\xFAS\xF5\xE4\xFE\xC5/\x8B[\xBB\x84S\x81o)\xFA1\x99\xC5\xF2UT\x9E\xE6\xE4\xF2\x81 -\xFD\xE8Hu\xE2j\x96\xF1\x9F}\xC6a\x92Ӄ6\xEBN\xEF -\xAE_-\xC5St\x84\x9A:\AQ\xB4\xBE\x86\xFC\x80\xEE1I~\xC9m\xA4-\x8F\xF2^\x9C\xEA\xFD2J\xCFz\xC9\xDD\xE3U]\xE0\xDA!\xDC\xC0\xF7\xEC\xF8q(׀WDᙉ\xB4\xEF\xE36\xBD \xB0\xE7\xFCJT\xD7%B\x93c\xAF\xE6\xF1\xEB"\x98\xC5\xE73o$\x9CC\xD75\xD0[\xF6\x94k\x86\xC7K\xA0\xED\xA2\xE9\xBBl\x94\xC2\xE1K;D\xBE\xD6d\xD9\xF2 \xF9\xC2rs;\x83\x8C\xE0u'\xDC\E\xAAa\x83\x9A]䚔\xA6\xB6iW\x95\xC9\xF4\xF4\xDF\xCF|{-b\xD2,X\x84S\xB6(\x88\xFCtk\x96v\xF1]\xC7\xF8\x8D1C\xF6\xA8oM̅\x97\xE2(\x9D\x83?\xCA\xF9*7\xF2u\xC7#\xE9&Hѻ\xB2\xA7\xB6\xACf\x91\xA5Hc\xAAi\xF8*\xAA\x95j`\xFA;a\xF8e\x86\xB8=ԉ\xB5Y\xD7\xEE\x85Yhe\xFD\x80\xEF\xD7\xA1\xC48E\xAFb\xB5NгNh\xCA\xCA\xFA~"$\xDE\xE8\xDC!1\xC5\xC3 \xCFu'ys*\xBD#\xC0>\xC6\xC0N%\xBDv\x8F3!@\x8B\xE8G\xCB\xD6\xEC2%T\x84\xB3\x979\xFAq\xEAXK\x83\xA4\xA1\xE5\xCBb1\xBD\xFEfx|ȗ\x98\xB3\xE1\xD2\xFCBz\xF7\xE2+EU"\xF0\xA6y\xC4M\xA9S\x88 \xB3\xA9<∊\x9CA\x9F\xE1\xFA\xD5\xFE{\x92>\xDEY\xBFWp\xC6\xEEum\x98y\xCB\x80v[-Q\xA0\xB7\x86\xC6hw\x8F\xE9|O7T[\xC9&͑]η\x99\xC31\xE8:f\x8A5\x8Ej\xB1\x8CZ7O \x89~\x8A@\xA9\xB5A\xD8\x81\xF0\x9CU]cnM*`\xBC\xE2\xCF݄\x8A\xD9\xC5^JW\xAB#\x84}\xCB\xE5\xF6.\xC6JDe\xB6\x9E\xB7^\xC1\xFE\x89p#]\xAB"Ts\xA5\xE4 -\xA6yoJ\xAD\xBB\xACI\xFF\xB6\x8E&hd\xF6\xD7zs\xEB\xFES\x80\xBD\xAFb\x9A\xD7\xC4\xC1Z\xE1\xF3Wō*Ubq\xBF3B=\xBC|\xA6!ۍcÂ+\dG\xC2ȱ<\x890\xDCl|\x951'\xE3mo\xF4\xA7u.9\x9A\xED7h\xAD3\xB1\x8E\x81\xB7I\xEE+\x90\xC3k\xD8ze#\x9B\xFA\x93\xB5\xA6Є\xB9\x89Oy\x8D\xE1)\xA6\xEB\xD9z -t\xAB\xF0LWN\xB1\xF3\xE7\x93\xFC\xC9{F\xB1\xFEVYU\x84q\xEBE\x9C]\xC2p\xC8\xD3G\xAF\xFC\x{16D504}\xFB\xE5\x87.#\xD3y\xCA\x93J|_##\xF3eU\xDD\xC2\xCC< -)y\x98\xD5~\xB6)3\xE1?\xF3\xE0\xBB\xE3?\x98\xDC3 \xC4/}\xD6\xD2\xC8\xF5\xF2o\xEA\{gn\xB0\xCF\V \x97g\xD5;T\xEA \xE5\xF8\xA4wܕㆷ%^\xEFZ\xB5\xE0\xCD\xF34\xDEh\x88\xA3<\xB5hSe\xA5S\xF9\xBD\xCBU\xE4\xF3a\xEFs\xA1]j1\xE5h{\xD7b\xEDE\xED\xC7\xD7$\x81\xEF\xC09z\xE2I4Dr\xC8q\x8A`\x89\x92\x9B\xF1\x85֙T\xDE\xF0]8\xF0\xA5u9\xE4^\x81\xE9WN\xD3\xEE\xBAT\xA6 -\xAAY)\xFEA}]ɵ\xA9q\xF7G>\x94R\xFB\xF9{\x83\xF5\xE9\xA8\xDC\xC5E\x8Ba\x96GS\xE8\xEA\xE4\xE9U\xED\xA0\xB7\xF5\xADvR\xD8\xC5\x9F)\xF9\x8E\\x91h\xB3\xF66Ѷ\xEAQ\xF8M\xAF#\x87\xFBv\xAB\x8AZu\xF2D\xAE\xCA\xE4Q#\xC08k\xDBX\xA8懆\x99\xABS جFϱ'd=\xB7,\x88\xE2w\xB8\x86\x9Dl\xC7\xF1\xCBo\xAAo\xD7sޓi\x8C\xCA\xC9 Ju\xE0\xD6\xED\xEC\xEA\xE9\xAC\xD0m\xF3BRڳ\xA8!\xC95\xD5k\xCEc\x96Vt\xE2T\x986|\xEE\xA2\f\xF6;q \x8AtwQ\xE5\xE3\xAE+\xA6\xE0\x98_b\xF8\xC1:f\x87\x9B\xEB+G\xE3\x91[4\xBB\xD9\xE3\xF8$?\xE1\x91\xCE\xFB\x96\x91\x89\xC5\xCB7\xEF\xDC\xCEpI*\xF9\xECM~\x94\xB6\xFA)\x8F`k\x85\xCEuG>\xA3=s\xE1;\xDB\xFFy\xB2 -\x9BL\xA79̛~\xA1\xC6G\xF8\x92\x86?\xDAr\xD7\x9B\xAD\xDB\xF6~\xE9\xD4cx\xD9 ʜ\xBFf\xAAѵ\xB8\xB8\xB2\xC4N\xD8#\xF4\xA4\xBE\xF6K\xFD^KT"F\xF5\x9DSx)\xF7mH\x81?\xFETL\xECUn/y\x93\x8A)\xA7\xD7\xDC (\xBD\x91Jk2e\xA3\x90Kud\xFE9\xBD\xFD\xF9\xD1\xD8s\xE2\xD0O\xDD\xF6\x8C\xB9і\x85i\xDE¯\xBC\xD4\xEEB\xAF\xDA!\xA5Wӽ㫸I*^\x94\xF1F\xDD\xF7\xDE-\xAF\xA3\xEA\xBDoV\xA0\xA2<Fc\xEBؽeم\xD3~\xC1x\xA7R \xFF\xA0P\xA1 \xE0e\xB9;k\xA2\xC5\xCE>R\xB6\xA8\xD1\xC4\xEC\xE4k\x98\x83#\xA49\xA9\x9F\xF9!\xC0̖k\xCFY9\x8C*\xF4C\xEEg\xD3 -\xFC`\x9BV\xA8`|u~\xF5x[\xFA\xCE\xC7\xEE\xC55\xF5}\xB8^Z.\xA5\x94^\xEF\xF8\xA2\xC06\x9Ez\x9F\xB0\xC0\xCA*gP\x95\xEC\xA1\xEA\xC7b\x9DI -8v:L\xF4Dm\xE73ӆe8W\x92hh!O\x84 ޝ\x9E M\xD6\xEF֢\x84Ʉ>\x97b\x93_\xE4>V\xDE\xB4\xE1\x83+m}\xB7 \xDB7\xF7\xA3<\xDEz\x98\xF5\xA3\xA3&\x9D?\x89\xBC\xFA;\xA1r\xB9\xF1\xA2n1\xEC\xF5J7\xCE\\xC29:'\x94\xC7[\xC3\xEF\xA5R\xBC\xB7\xE1^ot4On긢EBe/\x8Cn\xDDMe\xF1.y\xFD\xF1I!E\xA5Q4\xD0\xE7\xB6\xDFu -\xF0]\x8A\xA4P\xE2I]b\xD73\xCBPj0\xF5\xEF\x98&=9Ni\x86`s\xA2\xE5\xCFC\xC0\xE5\xF4)Z\xA71bLi\xA6\x94eL\xF01\x87\xFB\xA8i\xF6\xE2\xED\xDE\xC5\xFA\x81\xD7u\xB7PT˲\xA6M@\xE9.'+&\xF8\xDE]\xA7&\xDE\xEDt\x9E/m\x9E-!\x8F\xE4V\xB7F\xD3!\x9C]\xA6\xBE\xC1d\xC9\xBB\xA4\xE4Z\xA5\xCF?_\xBBn\xA2\xCC\xD1+\xDCy\xABU\x9F\xCFN$\xFB\xA9(`\xB5\xBA\xC6\xEC\x8F\xB5ϵ;!t\x8AnG\xBB\xED\x9C\xDD\xF2\xDA\xDEo\xB5q\xC8l\xF8KM\x8B\xCD\xF7%w\xC1\xF9.\xD1\xEC\xFC\xA9\xF3-\xC2\xDC\xEE6\xB5[ٯT<<\xEF\xD2x>Z\xF4\xB1q\xA7\xF8\xD6\xEB~\x9A*\xA96\x80\x967\xE4\xC9\x90gdp\xC5y\xBEӜ\xD1K^ hɷz)F\xF2P\xA9\x8B/\x89\xA7\xB9\xBE\xEB\x96Rh-\xD7P\xE1)j\xC7l\xBD\xC97\xD6+\xC5<\xE1\xF9\xF0l\xDDR\x9C\xBBt#\xD68X73:Z\xA7_\xEF4\x9F\xDB\xE1cs\xD6q)mY`\xAC\xFA#9\xFD\xB2\xA4 EƂ)\x9D\xA7Vܷ\xEF;p\xF9s\xFD\x99\xB6\xB4\x90;ݦ\xA7\xA3\x8B\xA8\xA9\xAB\xF1:\xB0he \xC6\xE8H)\xB5(Sl\xD9\xC1]Ȅ)\xD0<\x92\xB1\x88ה\xCCD]\xE4{]\xDAݞ(\x9Ad˩\xB9\x91\xEF\xD9-x~jnP\xB3@\xDF.\xB3\x9F \x9D\xFE\xE0\xC2s\xB6\xB2\x98F>P\xEB\xAFF0D=$a\xB8\xCB[U\x83L\xCE\xEA\xA1\xE6\\x93\xB3\xD8$s\xCF{W&\xD9д\xA4\x80\xE2Kq\xD5\xE9yuٝ\xA0U\xB5Y\x9C\xE7ǟ\xB9\xC76\xBD\xFA\xEC\xC6Nܚ!3jr\xB2_A\xF19\xCA\xDF_58\xAD \xDAĠ\xFCښg۰\xC1\x98\xFC\xDA\xE1ۭ\x94\xC1\x9A\x8E\xEB-\x92W.\xC7Vaq\xA8\x95\xF4\xF3.E\xB6\xD4S\xFCi:\xF5L\xE9+\x96\xF8Tڑ\xCA\xE4\xFAcU\xAF9\xEF}:\xC6J\xC5Ko\x9C8\x92M\xA4\xB83\xC2\xFD\x89q\xA26g\x83w\x9C$\xC2C\xB1\xA8\xA5\x8F\x8A\xDBc\xB2\xABt)~\xBE\xD3>\xE8\xD3\xF0#!\xA0\x89*\x97\xBDH\xF3\xBF%\x9D1^\x90{\xAFE\xE54x\x8D\xE3\xFCpmH\xA2\xFB$\x80\x95x\x84C`(m\x96[\xAD?\x86{`By\xD2^\x93\xEB\xABN\xBA\x8A[\xB7\x8CW\xE5A胤\xBCY\xFFdhP\xBBN\xEA\xFA\xEA\xCA\xC2U\xC9:\x9E\xAA\xEAzӻ\xC9|\x97P\xBB\xC5)\xC6\xE2\xD66A\xAE\xFA\xA1ڢB!\xA9d\xA4\xB2\xAFm$S\xB14p\xC0\x8C\xF3}\xE4tZ\xC9)x\xBD\xB0?#\xBB31e+\xC9\xC6ːh\xD22\xA3h\xDF7\x91\xFC) -ړe\xC7\xCEo\xA0Y\xED\xA7\xF0ֺ|\x84\xB7HH<s\x96\xC3|\xE0[/\xAC \xBC;\xF872|\xE56\xE4\x92by\xDA_\x8A\xFC\xC4U7\xE0\xF0\x96\xC5FeI\xEA\xCA\xF8\xD66Y\xDA\\xAF\xC2\xFD:'=>+^\xE6\xFC\xF5\x86\xB7fh\xCEF{\xFB~P\xC1\xDC$\xEE\xE2\xF3\xACoQ\xB6no@\xF4#\xE0$\x82\xAF\xBB9%\xF5\xC0\x97\x8C\xA6\xD1#\xDEg\x9Aay'D\xCE^ -vd\xB9\x99R%3κ\xE7\xE1\xE3\xB8\xCD\xF3Y\xE79^=\xE0\xF1,\x8AVb\x94\xF2\xAF\xDB(\x98)\xE5BRɐΈ,T\xCEv\xA3\xEF\xF12(g\x91퍿\xCB\xFDF-l\x92n\xD5<\x97-\x96\x8COm︀`\x8Dp\x89)T?!\xB9\xBB\xDCi\xF8,f\xE9[\xD3c}\x9D\xD6\x82k\xC6wL\xC9d\xB4d\xF0\xE8\xCD\xCF\xC6LV[\xAA\xD9Ԍ8\x92\x9CUU \xEA\xE0\xF0\xA6\xFC\x93,7\xD7\xE3\x89\xF6̈́\xB4I\xDF\xCE\xED\xB4\xBA\xA7q\xFE\x9Df\xED\xB7\xE8G\xC5C\xE6\xC7<\xDB0\xC5˰nP%\xF6\xE1\xC6\x900v\xBEK]\xD6\xDET}\xF6r\x81tS\xD3ڃ\x8A\xFC\xF7d\x87\xDES\x89\x8E"e5\xE0\xC1\x82\xE6)ٴ\xCD\xEC\xB5\xD3\xD6 \x92\xD9P&\xC1\xDBP\x86\xBA1\xD3\xECldԉ莦\xA3T\xAF\xD7\xCB\xD3#\xB6 -y\x9F\xC0\xD7Se\xBD5ȫ \xD0!\x85\xB9\xECX\xF5Xd\x87\xC9{\xB8d\x892G+\x9BS\x9C`\xFB\xC03\xD1\xA7xP\xE8tK\xD42\xB8\xF9fL\xF6\xC2\xF9\xF8\xFD7`\x89\x89\xEB\x8FE\xFA\x8D\x91-\xA3\x88I\xF4WwLF\xA1-\x85r\xB2\xCDR*ޛf\xA7O#\xF0\x93_1J%Zn\xDB\xF1\x8E\xF50\xBAw'C\x94\xAC\xD4I\xAA\xFB\x85/\xA4\x98SK*\x95:\x98\x9E:\xA8\xF4\xA3zgߋ\xBD/52\xAFmH\xF6\xA0\xFD^ب\xD5\xC6˵\xE8\xE4\xE9\x9C&\xDE'I\xE8%\xF0*\xF35;\xB5\xBCYCg0l\xFD5\x88\x88zܑ\xAFF\xE2 \xAAb\xDE߽Wع\xE4\xCCC-\x99!\xE3\xA5\xE0\xCF\xE0'ﶚn2\xF8\xC2I\xD2*\xD7\xF9\xCF\xC8˦\xCA|\xAA -\kv\xBFx\x84\xEB\xFB\xA0\xC8^#\xE2\x8AD\xEE\xF0\xD2\xCCw@ U\xFC\xD4ZE\xB4\xBBy\xC0k\xFAQC\xAF\xFDi:j\x94\xEA\x88'\xDFHlc\xF5|\xD9|\x8A\xB2\xCC\xF9Y\xBFI23\xB8\xBAĹ-AX\xAE\xB5\xE5Q\xE5]\xC1\xBA\xD26\xE5\x8F%\xB9ݯ\xFC\C#\xA9\xE8\xC8\xC7˭\xD1\ Ӽ\xD8\xFC\xC8!P\xBB\xC3\xFB\x9D,\a)̼xʵ\xA6 F_)\x92\xCE-\xDD\xBF\x9C\xF7\xED\x8A>\xBC\xCE[\x9CGȏ\xF59@ea/ -\x83\x92\xB15\xB7$\xED\xBFJD\xFB\x85W\xDE\xE2\xD7?cSM2D\xA6\xBF\xCD<\x81]W\xB1M\x8AB,\xA8\xCAJȁ"\xC4=\xA3e-\x89CC\xB9)Icȳt\xC5\\xE2\xF0\xE48\xFA3蓌\xB8\x99\xB6D+<\xCA)\xD4G\x87\xEA -\xCF\xF7\xF7U\xD0j\xA8\x89nÞn\xC0\xE7`\x91\x9Bs\xA2\xC1\xB4\x8C\x91\x96s\xBF6\xBB\x95W\xF5o\x99u`K2\xB7_\x95\x92|\xDCna\xBC\xA8\xD6\xCA#:%\xC1'/\x9C\xE3\x8Cv\x9B͘\x9B\xF1\x94\xC8\xD1\xED\xB3'\xCC\xCDG\x83\xFBu\xF65*\xA5\xED]N۴\xFD -ݔI\xA6\x88.2\Px\xE7L\x88\x8E\xEBH\x8E+\xA1\xEC\xF8\xBBS< -\xE2=M7\xE5~\xB6U\xED\xD7\xCD -\xE3\xB6\x8C\xAF\x96\xA2X\xEF\xE2\x85\x99(\xBA\xB7\xA2\x8F\x8A\x98\xF9\xE4k\xF9\xB0x\xA0\xCCk\xFB\x8A`; \x90&\x8F\xABɯ\x80\xAB\x87\x909a\xE9c\x8A\xB5\x8CF -)\xA7\xBC;\x9A\x81]ۄ\xC1\xF2\xD2\xEB/?+\xCE\xEEt\xC8w\xCFa˔\x8D%\xAC6\xF3\x81\xBD4\xDBfI\xC3\xDEZg\xABf\xEC\x91\xBD]\x95\x81\x95qtFb\xB4T\x81i\xD8&\xE1V\xB7\xEAM_\x98\x87=6\x8F(b\x9Dw\xF4;3\xA5V^\xF4!A<f\x92\xC61'l\xF3[Nb\x8B\xF7S\x8AAV\x{1753A2}\xD5C]\xFA.Õ&\xFB\xC48\xEB\xBD\xE6\x83\xD1ߵ\xB6<\xDABx\xA14lץN(\xF5\x93\x87j\xC8\xF7\xE0\xCF*\xA8\xEE\xEE\x93\xE1\xE64\xF6\xDAK\xFCC?\xFB\xAANF\xE9\xFD@\xEB\x8F\xD4n3\xFBU\x94\xB7\xA1\xAC\x9C\xC8BA\xE2\xEA\xB9V\xF1\x96\xC4\xF1\xD2Cx\xF0\xF1\x98\x85|\xDAs\x8B0\xB7\xFCp\xB7\xC9Qq_\xCD\xFDR\xF6IwV\xCB\xC0\xB59\xD4\xF9\xB0\xB4\xECp\xC0\xBDo\xA3}O\xEE+"@\xAF"\x84fk\xCC_\x9E\xFC\xB3\xC1 \x9BQ=ߴߗ\x8F墉P\xBC\x8BXAt\xEA\xD6H\xAB\x82.\x93eq\xA7\xAA\x9E\xEE%\xE2RI\xCD\xEA\x93\xF5c\xDAw`\xDFߝ\xF0\xE6\x80\xE6\xA3\xF1\xB1\xAD6\xC6U\xC5\xA9h>\x95\xD1(Qt+\xE9S\xFFY\xB81\x83I\xA3\x91|\xB4\xE5\xC076\x85\xA6\xB3\xEF\xDA'i2\x8F9@\GO\xAA\xE7N?X\xED\xDE\xC7oH=z\x9D\xFD*\xA8BqwQY\xF6\xE3B\x96\xF2\x84\xD5F\xB38\xC1i\xB0:)\xF1<Dڜ\xC4\xA5\xA1E\xC5\xE3\xBF+xڍ\xB6P\xDA-\x8CS\xBC\xB8Cp\xD7w\x97\xE2\xEER$@\xEE^(Nq\x8A\xD3R\\x8B\xBBSܭ\xB8K\xA1\xB8G\xEE\xE9\xB9\xF7\xFFgޛ̐\xACO\xF7\xDA\xDF\xFA\xF6@G\xA5\xA6\xC9&a\xE9\xF8(\xEB\x86\xB2q\xB1s +\xA4\x945\xB8\xB8\x9C\x9C\xAF\xD899\xB9Q\xE9\xE8\xB4@P{\xE0\xDFfT: \xC4\xE4\xFCW\x80h}\xB6I\x9BC\x9F\xE3\x94\xC1+u\xE4\xE0pwwg7wpaw\x84X\x8B2\xB1\xDCAP\x80\xD0qZ\xFE P1w+\xB6B+J+0[\xFEhn\xEF\xE2\xF8\x9Co\xEEf\xB27\xFB\xF0\xE7\xC9\xCD\xB2\xEA+\xB6\xB4\x{20C496B}\x876\xE4\xEC +T\x90\xFE;\xE4ل\xFA\xDBf +\x84x899\xF9^\x80\xCE+\xF4\xF5\xFE\xB7\xE3\xBF*\xC0d\xBCZ\x83\xC0\xA8\xBF\xAB?\x9B\x81V\xE1\xE7\xE1C@+ƿ7\x86 \xF0\xDFT\x9F\xA50\xFEV\xBE'\xA7\xC5\xF3\xAE\xFFg\xFD\xFF\x99\xF2\xFF'\xFB?\xAA\xFCߔ\xFF\xBF\x92u\xB5\xB7\xFF\xD3\xCD\xF8\xA7\xFF\xFF\xE36w+\xB9\x92H\xECz\xB9\xBC)\xC3x)\xBEH\xF9\xCB\xFB\xB0\xB19\xBC)Q\xBD\xF9\xDE\xE7\xC14^cb\xBBu~\x9C\xA0o\xAC\xE0P\xA2\xA6\x97\x85\x8CMK|\xC7痳\x8FN\xA0|#l\xBB"]\x8E\xB3+?\xA6Z\xEE\x8D{\x8F\x9CGMo\xF1\xD2p\xD8\xEC\xB6\xFAN\xEF\xB4\x87\xE2I\xB6h\xED(\xA3\xC0\xCF\xD3t\xB9o?\xCEQ#A\xD9\xC8_0\xE3\x9Cz`M_^M\xE1d\x8F=Q*Ƴ\xA0\xFAE\xBF*\xF46X㎹\x9D\xF1\xFA^\xAA\xC5\xED\xD2ALKl@D\x893<A\xEF-\xB9\x97\xACH8\xE7]T\xB8 +N\x99!hYw\xF8\xC0e\xBF\xC7赭\xA2q\xD9?3\xA1\xA7d$&\xE2\x80\xC7Sx\xB5\xDA$\x9F\xE0\xF0\x99*\xE9\xF5\xC7\xD3e\xC5U\x853\xBEƷ.\xAC\xAA \xA0'U{\xBE +4\x81\xEDλ\xEC\xAF=dF\xFCj=\xE6p +\xFC\xA4Jp7O89lv +=\xE6\xBB\xFCm\xEB\xFE\x87h\xC2\xA3~\x8B\xEFC\xDF\xF1\xEA0\xCDd\xC8[6\xAC3\xAB\xDD\xF7\xBFkQ +.{(L\xFFT\xF4\x9A|綿\xC9l\x8Fwza\x91\xE1\xD83\xE2b\xE9@l\x9BDWW$\xB2Wٔ\x94-\x8D\xC6B\xFA\x9E\xA0\xE6#\xB9\xEB\x95@#)"I4MRfzN\xE3\xAB:5\xB4~S\xE3\xEA\xEDC4\xA6\x8C\x8A\xBD\xE6^wԛw\xBD\x9Bx\xC5\xDA\xC5Oe9\xFC\x99\xD8(\xF2ȱ1\xB7\xF5p\xE1\xEB#\xAEr\xE3\xEB\x82\xD2+8\xE1\xEB\x8A\xEFb\xC3\xF2\xCEu˺\xCEG\xDA\xCEO\x8C\xF3\xD98\x85ً\xAD5%\xB1\xD0U\xEC?\xE0d\xA9\xC6)\x9DL\xE5\xC6\xF0\x90\x9A\xD4v\xE3= +~~\xD3Č\xE8\xF3C5(\xE4ɻ;\xB0P<+úJ\x9Cu\xEF\xDCG(\xDAj\xCBi\x92\xE2q\x98\\xAD\xDE\xFBȠ\xEC\xBF\xD1"F"\xF64T\xBB\x846 l\xE6\xC1\x88>U\xCD/;\xEDRpj\xEAT\xC2\xFA\xC6\xF6~\xEAX)6?\xB7\xE4\xB4\xE9\x99\xF3\xF6\xF7v@\x9A\xE1v?\xCEN\xBE\xC3\xB5\xE6\xE9\xF3\x83J8\x81A\xBD +&#\x90\xB2 \x88\xF2;>\x9Ff~\xA59A\x84j\xD9^\xA7\xD8 +3K\xA8D\xE1\xCC\xFC\xFE\xB2\x9D\x8E4tS؝\x81+\xC7%\xF0\xDCDE\xDA-\xFFkT\xD6\xCBLv\xB9\x9EZMp\x8B\x87\xC1ɏ\x82\xAF\xA9\x8C{\xF6\x8F\x9A\xEF\x95/(\x99\x84\xEB\xA3~\xB8\xFDR\x9B\xB2 \xA0\xE6R\xA0Q5\xDDv\xF9^\xD0\xDC3 {m\xEDZٽyL\xF0v\xCDv\x89\x8Av{z\x8F\x91\xED\xA0V\xC2\xE4\xC1p\xB7K\xCF\xCD\xEBm\xE6d5k\x83Ax=\xF6\xF09\x84\xF0\xCB\xFA'\xB9rɘQ\xB3 +r\xE99\xE6O\x8A*1\x9D\xF4\xA2IB\x8F\xC9=\xE0R'Ч\xA17\xE8\x9DiX\xFB)|\xCB]b\xEA\xA9\xF4\xAF\xE1zz\xA6\x99RXH"\xD4{px\xD7\xE7\xF8\x90\xF2\xCC\xF9\xB7\xA43\xE1&\xA8)\xF58\xF35\xA4߲\x8CY~7\x96\xDCOƛ\xC4\xEBO\xB0\xFEl\xEE\xF9\xF5D\xE2S\xF5\x84\xC9V}\xB1R\xEC\xA5+\xEA\x88υW\x84\x90R\xEE\xDD|\x84\x8Fy\x91\xA7\xE5\xB6ġ\xD1\xCEzaQ\xA2냱N +\x84et\x95\x8CznIC;|\xBE\\xB5\xB0\xF6%o\xCB`)y\xB1_$''v\xBEdI\xBF[\xAB\xB2\x8F\xBF0\xE5\xC5?gH&>\xB5lfǬ\x85\xFE\x95\xB1\xFC\x8BqV7/\x8F\xC6<\x9Ba'\xA3Lّ\x84"\xD5+AD \xB3D\xDE\xC1r\xFE0:\xA2\xC1c\xF1\x80\x8CK\xAD\xCAD\x94C\xAD\xC5x\xF1Ov\xF6\xA5[Q\xF4\xF0\xAEwSg\x99\xA2\xEA\xED\xE1\xF4\x8D\xA4\xC9\xFD\xE5ۇÍ^\xE0T\xCC\xF6wavRE\x95VκlI\xBF\x82y\x9D#\x91\x99S\x9DXد\xACm\xED +r 6P\xD2\xD8Q\xB1W\x82܅Ѕ\x9F\x9E\xF4\xA4\xB2iT\xEE\xC2WΔ'\x98ǕͲ\xEC\xCAS\x98\xDED_օ\xD2%8\xC1wo\xCA\xC5\xDCzp\xF5UFYS\xFA6+p{y\xE9sh\x8F2\xEE\xE3\x84\xD1<qh\x9C\xB0\xAE\xC7*\xE1\xC1$\xC1\xB6\x95\xECZ[Ih0\x97\xE1D{\xF4%\xD8\xE1\xFC\xDB\xD3\xD9^U\xBD\xE5\xDF tOS\x9B\x96\xDDh\xBC,\xC0\xF5\xF71\xA02\xE9\xC5js\x971\x9F\xB3\xAA\x9A\xFC1Xrxʌ~\xFD\x9A\x94\xE3m\xB9\xCA\xD3I\xDA\xFC\x9B\xA5\xAEWۭ\xD8?\xCF\xF6\xABKTm\xC6%\xFA\xD3\xD2kZDM>\xE3\xB8eO\xC5y2\x93"3(8@\xA6\xCA-UhNR\x82\xF2?(M\x91\xEE\x98kx\xE4tS\x85>XR\xB5j\xA0\xC1~\xC8\xF0\x97^\xC7\xFC3)\xB0}K`'\x87P\xB3\xBCW\xDA\xD7n\xBE\x9B$\xE1-m\xE5\x9D\xCE\xCF\xFE\xB0bh\xF2k_`\xFC\x8A\xBC\xCA;H\x8F|\x99B!\xABj=2/\xC3Z!\xF1\xFA\xB6}^ +eXj\xC8S\x98\x8A\xEA\xD1"\x8D\x879ʐ\xAAV\xD6\x9Dm\xB6f\xC6z*źz\x836O\xBDU\x94\xD6"*\xE3 +\xAF\xB9e\xF19\xF6\xAF_n\xF1\xD1y\x8E#`\xC6\xD8b\xA5\x95jyL!\xF2\xDB\xFBe\xCE\xD6A\x9F+8( \xBB\x9F\x83^\xEEY\x8FT\xA8\xD1%\xBE\xF7+\xDCS"C`1\xA7\x98\x98usg\xEC\xBCH\xA3\x8A\xDB\xA6o\xA6\xAF\xC8\xDB|\xDF\xE8\xE7V\xB0\xD4YΊ\x9AX\xAC\xE8\xBC\xE7\xED\xC3\xE1\x941胲\xFC\xC2\xC3%f*]\xC1\xFD\xAA\x945eS\xD9<`\xECO\xA4 ~I\x9EG松\x90\x8F5p\xAB8e\xA7\xCC=\x9C\xB4ړhS\x90O\xE1r\xE9Ȥ\xBC\xD0a\x8E\xA6_,\x8A\x93\x9BgG\xB3V\xEE.\xD6\xE9Խ^\xFB4\x92\xD8\xFDkZ\xF7\x91\x80|\xA9\x83ʔ\xD02\xD5c \xA9\xF6.|\xB0DO\xD8dM\x9C?3f\x99\xFF\xDF)\xB5\x84\xE5\xD5x \xC6\xF6F\xD8\xE7\xD48\xD2.o\xF33\x8A\x8C\x95~&pq\x9F\x94\xB2҈\xA4\xAF,nyk<\x8FKI\xB2\xB2d\x87Fq\xAB\xB6\xEE\xB4\xE3\xFC\xB1\xFBg\xB9!!'\xFE+p\x93\xE9\x915o\xF8M\xE4]\xADE\xB3@\xFB\xB6W\xB7B§\xBE\xAFl\xA0\x9CJ\xBB\x9E\x8A\x93DD\xF2k$m\xE3\xB7B\xD6\xF1\xB0\xD1lJ\x82\xBBQ\xD7\xF8\xA5\x8B\xE5\xC3N\xB8\xE6\xF3\xC9/\xB07ǹ<n\xFB?\x9C +l\x99\xC5#\xE9t$\xFD\xA4\x97\x91\x81\xCB\xFBj\xF1\x92s\xF6]j)\xA5?\x8D\x8F\xAF\x9Aͬ\x81\xA1\xA2L\xD9m\xF9\x80\xFC\x80\xC0\xA7&\x94ޥ'j\xBD\x9CW\x8F\xAAǚl9n\x98莽f\xB1\\x88Iq\x9Cv\xA4\xBC\xFElz\xF4\xC1\x91sS\xF8{s1 +ܻ*\xB2~\x8CN,8\x8Ap\xE58\x85v\xD42CZKi\xAD\x83ٗ\xB7\xE8\x93ݶ=\xF5kA\x89 U\xF6]\xF7\xB7\x9ApM.\xBD\x92\xC8^q\xEB\xB3\xE9\xB5Tu\xE9\xDC֧p\xB3x\xBCE/זF\xDE"[@R)ϖ\xE2uI\xB80\xFD%\xA8W\xC1zy\xC3?\xB9\xEA`\x9B_\x87\x82\xE3ߐw\xAAJ\xB1\xA8H|Y \xB4\xE69\xD65\xF1fD\xF4\xAC\xEDyZ̒\xF1\xA7\xA8\xEC\\x84\xF2\xBE\xF4Uɾ\x98U\x88\x91 +\xF9\x90\x90\xD1^\x92^H\xD9NG4\xB7\x82@m\xEC\xFBU\xAF\xBD\xB7#~AF\x97{\xC0A$\x8C\xF2\xA9\xF2ʜ\x80\xB3\xFF\xB0\x97\x8A\xC2j#\xA1\xB19R3\x93^\xDF[\x87t\xA6i\xC9\xF4 \xA3s\xAD\xE7sGJ\x9A\xAEj \xC66W\xE2<O\xB6g< +)z\xD3,\x92N\xD3f\xC5狅ύ\xDDg\x81A_2\x9B\xC8\xFA\x92P҈\xA1\xAB\x91\xEE\xC44\xB0!=\x9C\xF8%\x938t\xFBٞ~\xC8Lx!\xEBF\xA6\xD3\xA0\x8Cxs:\xCF\xFEوA?\xEF\xAA/\xE6\xC2 (27\x9A<\xE2ݬ\xCF\x8E+\xFCL\xF8 \xBA-\xD73\x86V\xE8sWa\xAB\xF6\xAD\x82\xD5Vw7\xF0\x81\xC6b\xB9+_\xAD3\xC6Q=jXd\xFA\xABl\xAA\xE5SbHB\xC8!I4e\xFF\xA5\x99k?U5-I\x8DBѭ\xB6vڃꐐ\x9F\xEFRV\xF6\x8D\xA5hH\xE4+\xC97Q\xAD\x9C\xEAV\x9DM\xF1W(\x91\xF7\x94ī'Y@*\xCD +\xEE\x98D\xD9q\xA1\xE8\xD980~\xC0+\xC1K9۸\xF0k&?\xBB\xA4\xF4\xE1e\x89\xF7\x9F\x974D\xA5ȚV\x95M|\xEF\x8C\xC3,\x95$]\xDDSz\xE93r\x8A\xCCX'\xD3m\x9Aќ>x{R}\x8E\xED\x85 \x95\xA8\x807\xE2*\xE2\xA9Q\x87x\xA9\xD7V=[\xDFo\x83\xB9W*\xBA@\xB3\x90\\xBE \xC40:\xB2<\\x8Fȉ\x91ׅ|\xEF\x8F\xF9\xBF\xD5\x87T\x85\xE4\xF1\xD8\xF9\xCD>\xB6~\x94vw\xA2.\xB2\xFDY)\x81pW\x862j\xA6\xA9a\xF4U\xB3\x8A}\xD2]e\x8D\xF0\x97TU\xBCݶ'n\x89ߊ\xAB<\xCD>#?\xE6\x98 +_ +\xC0 +k\x95C\x81\x90\xCDZh/\x91Sي\xC4{>\xE1^\xF69Jbt\xB0\xA6\xBB<\xD8\xC9W\xBA\x8A\xF3\xF9\xEE\xF0\xC2\xF3r\xCBܪ 8\xA0(S╘\xCCU\xBB\xC6\xCBlIL\xD8U\xC4\xED\xC0D\x8B1mճ"\x96Fmr\xDAZȄ\xC8BxD\9)8\xEEW\xED.\x8F\xD9pR>\xEB\xDA:\xC7\xF4\xA9 D\x88G\x8CD`h\xFEKT=SeN\xCE+\xA4_\xEDpP\x8E\xA0#E\xD8\xCCnGN7B\x90h\xEF>\xE3s\x92*\xCD\xC9W\xFA\x8CS\xA8(\xD9\xC8yy\x85}\x99\xA1\xE1w\x9B\xEF\xF0\xC4+S\x86⦶\xC1\x84+WFD\x87UmeL\xAB -Tq\xBC\x86\xFDz\xF7k\x95o\x86U\xAB:\x89\xBBޘ\x9Fd@\xAC\x8CJT\x939\xBB\xD4&6\xB3./\x84\xE2\xEEZƸ\xFDF\x89\xD3A`\xEF4;\xF3\xD0W\xA5\x86t\x9E\xC8x\xCB\xF2\xB4\xBE\xBE\xDD0K0\x886\xFD\xE3\x87xa\x96\xCB\xEA\x927\x9E\x8D\xD85\x859\x96Y\xD1\xCD\xF1ҹ\xCA\x98Fۨ -TP'ε\x93Se\xF1\x88\x8E\x9A\xB9B\x87K\xF1"\x9Bf\x9F\xD4~ŔQo\xE2;\xEC\xCA -H\x89\x90V5\xF0\xCAf\xEE\xD6*Z;k\x96y\xC0ƞL["\xE6iw>\xB1\xEE\x93/GH{\xD9:nX\xC1b4\xCC\xD9\xE4%\x9C\xD8\xCBG\x82>4\xF7 .o\xF43 -\x88%l#{\xEE\xCB\xF9H5\x8Cc\xD0\xFD|\xF8f\x9ED\xA4x\xB0\x9F\x86t\x8A\xFF&\x9A\x86\xDA\xDBxzrDz\xE2Mu{\xA7\xC5S\xF3\xCEǷ?y\x9FS\x997ڼ\xE6\xE3\xEBJ\x9DSb%\xE0\xC3\xDF\xD3mhn\x9D\xA6)\xD0\xF9\xD1\xE9\xD8\xE6{V]\xC5\xB2\xA1d\xA6hȬ8\x82n\xFC\x81\xC6;\xD5#IVj\xB7RT0\x9Aq\xF3\x8D>?\xEBj\x97\xE4\x8A3 \x89O\x98\x9AYʐHWz\x8B\xAB\x9F\xAC\xEBM@\xA4\xB1\xA2\xC7ź]q\xF0\xC2Љ\x9A\xC4=\x81\x8C\xAF1\xFCH\xDDB\x963\xDB --r\xB7ʤ0]\xAA\x98\xF2\x9A\x90\xE7\xB4G -f\xE5.`t-^\xEE\xFF\xF2A\xBB\xF3\xE6\xF6\xB1+\xB3ޔ4䊓\xA9\xD9I\x8Fl\x9C\x99\xAF߭\x90\\xAE9ʸo\xB8\x9F-\x99\xB9ʯ\xBB(In\x84fPMzR\xABE^I\xB8\xD3^7\xE03\V7\xC5..\xEB\xD2\xF7\xE0\xC1\x98\xBB\xB1\xB9\x9D\xAD\x9B\xA8\xDE\xA3 SW\xA7\xB5\xBFDV9\xCB\xE4\xBB\xC0\xD7˚P\xA5v"\xF8\x9F/\xBF\xAC>\xA6\x86\xB7\xA8*\x82f\x9D\xF7u\xB4`\x9B\xE4\xCBYmry\xDCL\xA7\x91d\xE4\x85ٍ\x8Cwo\x96\x9F\xCCzy\xFA\xBAU|=\xE9\xE2Pd.\xBE߮Y\x99\xC1d6GS?g:\x960\xF2\xDC\xF0M\xF85\xE6\x88z -\xF9\xB7\xBB!\x8C\xC7\xD0)V.X\x90'\xD2\xC6H\xD4e\xE4ʲiRʤ-W(FݩY!x4Q8Q\x87\xA0qE\x90J\xFCpe\xBC\x89 +\xF4\x8Fm\xDC\xDE$\xB2\xB7j\x91\xB0C\xDE\xC8\xC5\x9C\xCD]\xAF\xA3\xF4\xFD*\xFE\xCEt\xAC\xBEz\xF3 \xF1˹.\xFDn"\xCD\xED\xE8\@ez\xD4\xEC=K.!\xED`\xF7\xC84\xED\x8B\xE4G/7\x8432c\xA9\xFD~c\x96\xBD\x80\xC0\x89\xA8\xA6\x90ZD\xE6\xE0\xA1ۺ\xF2meR\xCEƖ\xB0\xEB\xDC9\xA3\x91\x81G$\xC7>ʥ\xF3\x98s\x87&\xD4/\xAC\x85Z\x86-\xE7H\xF9\xB3\xE6!'\xBD\x90\x98Ŷ\x85\xFAQ\x96\xF6}\xA8i\xDD$+C\xC0\xA7.5\xA6\xC5\xF3\xF1\xCFY\xE6)\xEC\xF5\xA1Ns\xB49hd\xDA\xDE\xE4lQ_\x8B&\x82$#H\xCF\xD9Qa$9iy\xA8\xE6f\xAA\xC3>Λ\x96\xA9\x88\xB9+룯\xF6I৺\x9Bh\xD78\xCE}&\x955\xEE\xEA\xD9̢H\xD7*п\xF1\xEE(\xDF\xF9\xF4fw[\xFB\x9D\\xEB\\x8B +\xAB\xEC\xCF[\x9E\x90\xA6\xADI\xD2\xECe\xB0\x8E\xDC\xEB:gCX\xA2\xFC\x9D.,k\xF4\xEC\xF1b\xA5\xF5\)\xF1\xF2\xB2\xE4\xD0)\xDEr+\xC3\xCB0\xB6#\x98\x81ss7\xAB \x8D%=\xFEF\x89\xBD\xB0&N\x92\x91~.R\x8Eg\x8A\xCC\xD4:V`F|ZW0\xA9\xED\x96+\xAB;\xD7mf\xDBaM\x91*\xBE\x8AY\xB8\xBC\x8AC\xB3n\xA0NDyX\xC0W\x8F\xDCpI\xE3\xD5\xFA\x9D7\x8BJ\xB0\xE5!\xF5\x86\x8C,/\x8A\xCCe\x82\xE1 ;V\xEE蔁\x8AJ\x904)\xF9f\xD7.\xA5 +~T\xBE%\xCE\xE9\x9B]Q\x9E\xC9\xF7\xEC<\x8Co\xD6\xEF\xF0\xA7DY\x90ÂY^7{Έ\xE1\xAF ~\x8C\x97\x9C\xF9a\xA8O\xD9\xD0\xF2\xE1\xA5\x94\x9C\xCD\xEC;*)\xE2C\xFCϑx\xAA\xC2\xCFl>_.5t\x94!\xBC(\x96\xB4ض\xD1\xD7%\xEE\xE5@\x92즲\xE8cF:v3\xF6\xAB3hG"\xAA\xD1\xCF\xFFwY{W\xB5\xB1`\xAEm+\x9D\xF0ͻp&XŶ\xD8\xC7~7O\xA1\xCAHG\xA3\xD7:!\xEFIAV\x9E\x93coO\xA9\xBFD\xC9߂\x89\xDF\xC3\xDB\xFE\xA8[G +O\xC0\xEFM\xEF \xA5=_/T\xAF}$\xDD\xFChXi\xB0Z\x8C\x83mۗ^\xEB\xA3\xAF\xFE\x9Ar`GJ\xDF+\xFC\xAC6N\xED\xDA\xF4t"\xE2+:\xBA\xBD\xA4\x94\x8E +\x84\x9E>\xBBd|ao\xEF^\xAE=\xAF\x95|AF\xCE5\x95\x9BJe&SEK\xD4+M\x81\xA4U\xD3W\xAD{L\xD8;\xB0\xCA1b; \xFB\xC8\xF0\x83\xA0\xBB\x89\xC9\xAC\xB7\xB1e\xA1\x93^\xAB6\xE0\xF8{\xD9P\xE2wƴ\xF3#\xCDu)\xCBn\xE3Ih-=<\x89\xC2\xC9 +C\xD2DT_\x82Jid\x93\xD4$\x9Awo\xE6\xF8\xD4\xC3\xF7\xA7%\xDF8\x8C\xAA!;;`\xF1\xDF\xD2\xCD͝\xCD(MW\xE2\xD17\xBFBZ\xAA\x94\xB8`)\x9C +\x84\xDC6\xC1皴Q?\xF5ݲ\xBCh\x90\xE1*\\xB7\xD1\xEF^^^\x89\xF8\xCEC\xDA+\xFE\xA8\xB7~\xAFwg(#\xAFC\xE1U"p\xF1)\x84x&>\xE12\xBF\x8F\xAEIۆ\xCF\xE1\x9B<\x8C\xE9X\x85#\x8D\x96Eą\x9A\xB5Ȃ\xE9\xC1\xE2\xE7\xEA\xF1h\xF83\xF2H\xE9(G\xFER\x9C}\xF9\xE7\xCC+$\x8E\xB5\xEC\xAA +\xB0\xBB\x84I\x99O\xEA\xA7Ǿ\x89r\xBDηF\xE2\xAB\xC1\xFF\xA6:\xDAt\x8D4\xD4f)\x96TUX5\xD9\xF6qw\x89w\xEF\xFC\x8A\xE9.\\xFFF1\xBD\x84\xCD\xF4\xC7\xF9'\xE7$\xA6\xD2\xC0\xABW\xAA\xE6\x95i\x96\xBD\x8C\x96f \xB8\x96T漻 +\x9D֦R(ٙ#\xCA|\xAB\xA9\xCCK,\x90GR\xA0\xD0no\xB8\xA7\xC1\xABG\xD24\xD2\xC0\xD9\xE9\xAA\x927\x87m\xC4\xE0 +砝A\xC8\xCE\xF5ݸ`\x80\xA9/v\xFD\xF8\xB8u\xD7h#Y\xC0\xD1\xE1@L\xBE+\xFD6\xB4\xFE\xBC\x9B\xCE\xF6.\xC8J\xE20i7\xE8\xFBb#\x82\x95 +\xEEU\xAF\xD3\xD2Y\xAE\xF4\x8B\xAFt \xBA\xBD,<ljZ\xEB\xCFl\xEF\x9Bmm\xA3\xF6\x90\xE2\xC9}\xD7D\xA4p; TM]\x8B%C\xB3\x8B\xBA\x86\xAE\xB5y.\xBD\xB2\xF1\xBFth̊룔\xA8;\x99NZ2[\x85VȈW +\xA2¾\x99\x87\xF7\xA3!s\xBD7\xBB\xB6\x9A\xBF4o\xBAh\xB3\xC9F(\xDD \xA0\xD7\xEBS2\xB0\x80\xD7>\f\xB9\x99\xBCR\x87\xFA3f;^\xB42\xBB\xA5YE*\xC4\xC88\xE7\xB1\xFD`\xA0\x9AQ*.~\xEAk\xADe\x81\xC5}\xDC\xE4VG\x8B\x85\xE4\x9C,|oѥk\xA31\xC7\xDF%=1|\x9D!Z\xC2\xE4fU\xD0BO<\x9F+W\xC6\xE3\x89I\x9E@\xB7\xFD\xA9\xAB\xD6/$D#\xCE\xA4LoQ\x87\xB7\xBB>YHL\xD9x\xA5\x9A\xAB\x90;n\xD1wv\x97\x80n\x99\xF9\x8D\x93\xE3M\xDC]\xB2h +\xA1\xCER\x94m\xF0j\xEA\xE8\x8B4\xC1e\x8B߰J4c"c\xF2\xCC\xD4̑\xFB\x8FX\xF7\xBC\xBE}\xDD\xF1D_d\xBAHyhd]\xA4\xF8;\xB2\x9E\xBD\x835\xA5oA\xD4sR\xA3ʷt\xC1\xE5\xE5\xBDK\x81\xD2\xF1A\xF1\xD49\xCD\xF1\x85\xBDS{\xF4V|xu](LI\x80\x86|\xDF\xEE\xB8\xF7\xEFe\xBA\x87\xF5p7\x9C0\xE0\xF5\xFAM6\x95\xD7\xCF?B\xA4t\x8C\xA6\xEA0\x8F\xEEbOp\x9DS\xFBoe41\xD3:\xBA\xF1\xC6$BG%7\xC4\xEE\x8Fn\x93\xAC\x8A܉\xB8\xA2\xD0\xEF\xED2\xE6\xCCR! +\xFB2ۣ\x81n\xE5UO\xF4\xA7'!k\xC2fmN\xB8\x82\xF5\xC7ǺM\xF8d\x84\xA8\xF5VM%\xB2\xC0\xA074\xBD\xB116\xA6~\x9Em\xCC\xB8\xF3tw\xAF7 \xC7?\xE2\xE9'+\xA8\xBD\xF7\xE0urɊ\x91Ȳ\xCF\xEC=7\xCD&N\xEA{o\xBD~)\xADX\xD4&\xB4T\xC0\xF4\xF2r\x89x\xA6=\xB9vg$1Hu\x9D\xF9\xFEK݁B\xA5\xCAK\xED\xE9\xEDH\xCBoD\x87|b*\xA8鈁\x8C\xC8"+\xEC\x98j\x8Eʫ\xEF\xA5H\xBFS. +\xF1-\x96z.i\xFF\xAA"\xFFBg\x9E% +\x8A83\xFE\xB4\xF3ý?")q\x8C\xCFç\xBB2\x8C0\xA7\x82\xC0\xBAQ1\xA7s\xF7#\xF8\xF3\xA27\xF1\xF5Ua%S\xC6\xF7\xA0(%)F\xCAl\x8D\xFD8#\xAD\xC1\xAF\x89\xC6\x9C\xD2\xF8\xFBJ\x8A\xB2\x87\xEE\xB8\xC6n\xE9v\xBAmɹI\xF9\xA0\x96\xDCbFS\xDCÞ招k3\xD2=Sɚ\xE1\xF7\xEA\xE7=\xB5\xCB\xCD\xF7\xEE\xA6\xFB\xD8,\xF0\x84\xAA\xDD.)\x938e\xA0\x81ڝLW\xB8\xC9Y\xADՙ\xE6\xE6\xB7_\xAAcn;\x85\x94V]\\x8EK,3\xBE\xEB\xD5\xC3^\x83|.\xEE\xE8J\xE9\x89\xFFd\xCA\xF5\xFCov\xB8\xA0\xAB\xE4h\xD0\xFEX\xBA@\xA8 \x8C\xA9\x92\xF3\ACÓ3\xC5\xD9]r\xA2Y +\xFA\x9DOLǻ\xACTMkN\xF6\xA8\xA4n\xE3P݁s\x82H\xE8\xF8\x89\xAC\x86'\xD2$\xD2Vgw\xA1($\xEA\xE4ir\x91\xEE\xBD,3\xB6U\xA6\x8C\xE7m\xD9A(\xCFRoz\xEF\xB1M\x86,\xA9z[{s嶅h\xF1W\xEF0\xBB\x9B\\xE2hܖ\x88\xF9\xFC|і\xB6\xC0u+=E\xF8\xD9*~\xFC'~3G\xD3(B\xE1=}ҕ\xB6Z\xCBXO\xA5\xDD/\x95\xF7\x9D/\x9E\xE2\xE8\x9Doz\x92S;:m\xF8\xC8 \xEC\xC6Z\xA2\xDFP\xCC\xC6\xDA⒵\xBF4G\x93blm\xF3\x88s\xC6:\xBB\xB5\xA6\xC9\xE4Q\xD2\xFE\xA4\xA9\xCF\xED4\xBE\x8E2\xEB\xAFJ>\xD0?GQ;\xB8+ai\xA1R\xB6ܔU\xC1\xEAk\xE1pC>a\xBF\xF1\x90TՒ$\xCD\xF4\xD2|\x8A\xFE\xF6PK S\x80L\xFC6\xE4s;\x9A\xBE&\xCEh\xDF\xC2K\xECy\xB5\xE1\xFC\xD1\xB2\xF5 +'\x83ᗣNn\x99>\xEE\x9F\xD4GmDij\xBA\x86ګ\xE29;\xBAR\xBB>mj:\xB5?PoJP\x9CY\xF1%\xB5\xFB\x87^\xCF&\xDFQ\x8B\x9D/4\xA8\xBD?\xA0\xC7s"!9W\x93-IE;D\xD04Cz\xABIx\x8B6\xE4\xF1\x8A8\xC6\xD2f\x88Z\xE8VL:\xA8\x8E\xCC+!\xF8(\xCC\xFE\x94\x85\xCD&\xA3-\x93\xA4\xD1 +^\xE1\xA7z(MW\xE0\x99\xE6bR\x81N\x9E\xA0\xE1)\xAD^\xFC2\xBErna\xFC\xAC\xB9\x99߯\xB1\xDD1\x92 +\xF9\xFDZ\xEE\xECj\xA1_(9/~U~À\xC6\xC5;w-\xDDמ\xD0\xD9M\xFBP\xA0h\xA5cD=\x88\x8F0kYj\x84t\xC9>%r\xC4\xC9>>R\x9F;\xAB\xE22D;\xC8\xCC +\xF5\x8B\xCB\xFE|3&\x87\x86\x88\xF8 +;DzsҐ_#\x9944C줅\xEA\xB2\xDF9&\x86kce&\xAF0\xCA\x83\xB8x~ۺ\xD5uu\xD9\xFB\xD1/\xD5\xFA\x9EMC,\xD0j\xA3*\xA8\xCDB +7\s\xA5\x91w|\xF6\xA4n\xD5\xE4\xED\x81\xC4\xE4A\xAFn!2\xB2ؑ\x98\xBF\x8AfYfB62'\x9D$\xBF-\x9DN:\x93Z\x952wr+\xB7\xF7N\x8A)l\x98!\xFC\xB5o`ԃ\xD1C\xCE?\xB0O{\x87\xBC\xF6 \x9CC\x80\xC4\xCCh\x99+\x9C\xE6\xF0\x94\x95\xD5\xE5/r\xF5"\x9F\xB9\xEF\xC61\xFC\x8A\xE7\xA5\xF2\xEE\\x8D\xA5\xC6ɭ\xBE#\x9B\xC2:#\xC6q4c\xF0\xA3Iɠ\xD2\xED\xA1+\x9Az-w_Op%_V+k\x93#N\x84̲Ƚו\x94\xE1,z\x9A\x83T>W\xB7\xC8Lt\x9E\xC7,/Dfv\\xAE\xD4\x8D\x80ւ\x848\xD8Na}\xB1:5T&\xA8O\xFA +m\x96\x85\xA6\xBE\xEC\x95r\x82/=\xE8PV+\xF3ʷ\xCFw(\xDB\xA4{P|\x97{\xBF\xEB\x9Cloÿ~X\xEE\xE7N\xEC"1A\x8Do\xA4\xA3\x83\xE9\x88H\xFC^\x8F\xF0\xA1kÞ\x9F\xE9\xC9c\x88i$\x9F-t\xFEp+\x99\xD2#Ŀ1Ґsz\xB0\x85'\xAE\xA6e\xD3oI\xB9\xF0\x8C\x89\xEF\xCE\xC4P;\\x95Wc\xAE\xEF%e\xE1\xD4k\xEA\x86d\xA4^\xE0\xE7\x89߶r\xAF:ȋ\x94<\xA7y\x9F>\xF8\xD8\xEA\xA92\xBDx\x89\x99ݳfJ\x94\xE7\xBFg\xC1s\xF9Nq\x88zo\x83\xE9 +K\xD4/ Qk\x97)m6M<3K\xD3\xEF\x8C\xF29\x9B}\x8D\xA2\x8F\xF9p\xBCH\xF4 +\xA7\xAFjd(!\xE3ͺA\xFEq\x8Ci\xB6\xE6e\xB2\xCDs\xB5\xC9#\xB9twu\xBC3\xE2\xA9G@%'ք\xC7S\xCCRY\x9A]F\xFE\xB3\xDE\xE4z\xB6\x90\xE1\x93_$a\xCDG\xF66Iy\x89\xE8\x8B\xFB\xA79_K\xAFD8ɶ\xAE\xA9c\xE6\xBAI\x8CK2mQ*^,t+\xCED*\x9E\xACo\xDD\xF6\xF5\xB9\xC4I92\xEE4f\xB6=\x9A?v\x9A\xCEh]6^\xAC\xBF\xE2C2!\xD3ڞ\x83+t<\x92\xD5-(hP\xB8\xAB`\xE0\xAB\xD5\xEA}(\xE3\x9F0\xE7\xD3`\xBE\xFC|\xE8~\x95\xFCSH\xFApS_\xFC\xC9dE\xE1\xEB\xD0\xFD\x8FΗ\xC4\xE3Y\xED\xE1_\xED\xD8\x89C\xC2\xD8YC\xD2Q\x88\x88\xC9\xC6\xEE\xEE8\xB7\x80\xA8\xAE\xD8W\xED\i*\xFC\xFD\xB3h\xB1\x97\x88\x{127845}\xB6P\xD2!=\x8BW\x83\x8D\x8C\x9FE\xE46'\xBA<\xBD\xEB\xF6k\x9DwW\xE6P\xDB}q\xA8 \x89\xB0=֑(\xADR5\xD9X\xBB\x9DR\x98h\x87\xC3A\xAB\x97 \x9C\x989\xE5f\xBCę\xB6\xA9F\xF3\xDEwU\x8A\xF6\xC1H\xB1lhfC8D\x8F\x98X+\xE3\xA6#-$1C/\\xBCm\xB0\x86 +F;\xF7/g\xBE +\x97\xB6\xA8 +\xDF/\x8B\xA4\x8E :\xD8ѣ\xE05\xEB\x98\xEB\x89V\xA7\x9D\x8FW\xCEh\xBB%\x96\xCA]\xDB\xF6\xBB?\xC2\xF1`\xB1j\xBD\xCF]@\x8C\x83\x9C\xD4\xD6o +\x9D쟖\xE5lF\x93j\xB1\x9F\xD7@\xE0\xE2\x88\x94\xD9\xE8x!\xC2\xDA.j\xD01u\xEDP\xE4\xCB98x\xF7\x8F'|*+\x85ĴCί\x8D\xF7\xF0# +ڳ\x92\xDC\xF3\xB6\xECt7\xA9\xB9N\s\xC7 J\xC29\xD5\xD8RO\xF5\xB7>\xECګ\xF9\xC0\xCE\xF8\x94\xFD\xF2"\xF03\x80\xC4GZ\xD9\xC6K˻\xF1\xD1\xE8L\xB0\x91봛\x99c>G\xC4\xD3&Z\xED\xD7S\xCA\xD9|\xBA\xDEx\x94\xAF\x93$\x84(\xB6\xA3\x8D\xFAǃ\xAD\x9B\xEEʱ_\xBF\xC3'\xAD\xA8\xA4O\x97\xC3{1 ~A\x95\x87n\xC9k\x88e\xA1Z\xA5\xC9n\xEA\xCF\xF4\xBFl\xE6\xAD\xE1W\xB2U\x8E)\xA1Ir\xB5\xC2}\xD27\xAB\xC2B\xC8-Px\xFD\xD1s\x83\xF4\x91\xD5K\xDB\xDE\x9E\x96\x8F\xD0$\xA4<\xC5d\x8D\x987\xE4\xFD\xA0\xAD\xC1kyP\x82*P'|\x95\x95\xB7-ѣ\xFD\xA8\xA2\x83?NR\xCF\xD6\xEC#\xACC\xCE}\xE9k\xF0M |\xA7'"XF\xA93\x9D\xFAÏ\x83I\x87\xE0&\x97+0\xC8|Wiacީ`\x99}\x92\xEE}\xAE"\xBF\xCA{\xDCZ\\xA3\xD7\xFD\xCB)\xA9þ\xDBI\x92TQ\x96'k3\xC9c\xCCSWׄ|\xFC\xF0\x82(<\d\xF2\xA6܃\xFB\xF6\e\xFE\x91\x8Bc\xBEZ\xD3\xFD\xEFB\x90_\x9Ai\xB4u\xD3p\xAB\xF0 +br\xB8\xCFk׆\x8AE\xB2O\xDE\xC9\xFDg\xB9\x83\xA1 endstream endobj 385 0 obj << @@ -2667,38 +2689,48 @@ /Type /ObjStm /N 100 /First 890 -/Length 3802 +/Length 3801 /Filter /FlateDecode >> stream -x\xDA\xED[\xDBr7}\xE7W\xCCc\[&w`˕*Y\x97؎-;\x96l\xF9R~\x91#i\x8ATxq\xEC|\xFD\x9E\x86$f(\xDA$\xA5T\xB6vSe\x82\\xBAѧ\x8D\xADu\x96g\xDAg\xD2dFf\xA5\xCD87\x99\xF0<㚾]&\x8C\xC8d\x9EgR\xDB\xCC\xF2Lz|\xE9LI|\xF9LY\xDBh\xD1\xDCb\x90̌\x90\xF8\xD6\xE8\xF0-0\x92\xBEm\xE64f\xF2<\xF3\xCA\xE0\xC2s\x8B\x81\@\x9B\xA2\x99q!**\xE3h\xEEH\xAEQ\x91\xA4\xD9c%\x90\xE20D{\x92f2n$*=\x96/ \xCFi\x9A\xEDP\xF1\xA8`\xDC;,I\xD8L\xE4b\xB9\xEFH\xE1Q\xB1\xE8\x92y&\xA4\x81]\x92gB)\x84:\xA1*B\xC3jȁa%\xC9C\x8F\xB5\xA8H\xF4\xF8\x9Cƒ\xBD0XRw\xAEdG\xAA\x9C\x96\x8F\xE5(R\xA7T\xA1\x96&y\x92\x8D\x8A -L"4l\xF0\x9A`\x858j4\xB4|B\xC3r\x9A\x89!Vh\xC8E\xB7\xF6\x92d{C3\xF3L\xE5\xC0NT\x95HZ\xA0BВ*\x988\x94"\xA8h\xB0s\xD4b\xE0%\xFD\x88 -\xA04\xC6\xE1f\xAAx7\xB7\xA6\xBD\xA9\xFD)J뢤e;\xA3\xA4WPRrg\x94Ԇ(\xA9\xE6\xE5\xC0ڮwr\xA3\xB3\xABٚ]\xF6m,>\xFA\xF9\x8Cj\xFA\xE9ۤ*\xA4\x8A\xEBw𢘎+B\xA4\x9B\xD3\xC5:\xA3\x95$\xF5Oq\xD4\xE3\x80Z\xA63zU\x80;='-O\xD0\xA4ۥ\xA8\u\xE0D\xDFU\xF8\xD6\x96\xFE\xF3\xF9+?\x84vn\xBA\xF4\xD2\xC6u}]jλ\xD8e\x86\xDAc\xAF\xA4W\xD7c\xEF]\xCAZfRF]\xE9\x98\xD8b\x95\xEC\xCA\xCC\xE6\xB2K/\xBDt\xD7`\xEF\xEB\xCCX\x87V\xA3\xD6d\xAD\xA4\xD60N:A\x96YCva\xBB"s>\x91\xA4\xC6\xF9\xB5\x8A\xB5L\x81\x91\xB5\x8682\x94ޓ\x9C\xB4\xC5\xF0\xA0\xA9FBuU\x95Ԧآ\xC02\xF4Y>\xD5x/\xDA\xD29\xD4*4\xAD9-\xE9\x97DDo\x93\xF5\xEF\xD2ΰ8?\xBE}g\xB1m\x99\xCE\xF3\xA4\xA6eNQR\xB4\xDAu\xE9M\xBD\x827\xA2\xAD\xC8\xE7Df\xB04Ĵ3\x88'9J%=ŪV\xC8r9Z\xBC\xCD1\xD2!\xE2)\x8A)\xA22\xB1\xEF\xEB\x84ǝ"\x8E\xDCԷ|\xDFrzUO\xFF\xFE -\xDF\xD9\xF6\xADQ+\xBE5\xFA~|k\x96w\xDCoi(b\x86Xj\xF8\xB0\x93C\x9Fta\x87\x87:\xF5m\xFA\xA9g\xC7\xB1e\xEA\xE0\xF9X\xC6gh\x84\xE3\x8EZ$\xF9\xD59\xE2'\xB0\x8F >\xF3t\xD2+|ĉ\xA1\xF9a\xA6\xCF9J\xE3i\xF7#?\xA1/\xE2\xC2f\xA7\xE0\xE2u\xC9\xC2\xC7H"G#\Ƞ\x98s\x9A\xE3*Bis\x8A\xB3\xB8r\x93\xD4\xDBVix -\x8D\T\xD7\xE7\x9C\xFEpRψ\xADs\xC1m\xF3\xAFwǙ\x8B\xD1q\x84 -\\xAEt(\x83o\xD2ވU\xA8\xFF\x93\xFCM\xB9\x82A\x8D>^\xDA\x9C\x82 -\xD9=\x9Dy!\xF0֕\xC4s:2\xA6U\xACa\xA6\xB3\xF3~\x9Es\xA2O\xCEi\xB3\x87\xF6\xB9lA\\xE9x\xAD1\x8E\x8E\xF5\xE5(\x9EU2"\x91\xB0\xA8}{\x85\x9B\x94\xB5\xC4de\xC1\xB0\xBA\xA8Kz\x8E\xB6Zﱛj;1[\x86\xF3\x80v\\xC8L\xB0-qX: \xF7\xC1B\x87S-.X\x82.Xq\xA44FY^K\xA0\xE4DF\xDB'\xF4\xD7R\xC3\xEC\xBAl踣\xCB\\xD4P\xEB\xA5W\xB5\xB4EJ\xEAS$V\xEBiK\x94\xACr -\xFB\xB4.pػƘznl\x8CRccE\xE0\x9407\x95\xC6\xCC\xFDo\xB5z\xA3E\xB1\xCA\xF6\xE5\xF1\xA0\x9C\xF4\xC6\xD5\xCDt4\x8E\xB7\xC0xu|~\xBCw\xB8\xFF\xEA_\xFB/\xBF\xE39:\xC5\xE5$S\xE9=\xF1!\xAE\xE9\xB1\xC7\xFC\x84\xBB\xE2ބ\xFE\xAA\x9C0r\xBF\xB8yRV\x97Wxt\x97\xB52\xF6=\xE4\xD4\xF9tZ\xAA\xDE\xDE\xF0rPf2-\xAF\xDFR\xD8a\xEF\xEAI\xA0\x8Dx'\xA4\xDB\xE6l\x8F=f\xFB\xEC\x80\xB2#\xF6\x94=c?\xB3\xE7옽f'씽ao\xD9;\xF6\x81\xAC\xC7z\xA3\xEB\xEB\x82\xF5Y\xC9.\xD8%\xBBb\xB0k6d#6\x96\xEC\x86\xDD\xD0\xCBf\xF... [truncated message content] |
From: <wa...@us...> - 2013-12-06 22:24:14
|
Revision: 1754 http://sourceforge.net/p/r-gregmisc/code/1754 Author: warnes Date: 2013-12-06 22:24:10 +0000 (Fri, 06 Dec 2013) Log Message: ----------- Update pdf file Modified Paths: -------------- trunk/SII/vignettes/SII.pdf Modified: trunk/SII/vignettes/SII.pdf =================================================================== --- trunk/SII/vignettes/SII.pdf 2013-12-06 22:09:14 UTC (rev 1753) +++ trunk/SII/vignettes/SII.pdf 2013-12-06 22:24:10 UTC (rev 1754) @@ -1,1418 +1,304 @@ -%PDF-1.4 +%PDF-1.5 %\xD0\xD4\xC5\xD8 -1 0 obj -<< /S /GoTo /D (section.1) >> +102 0 obj << +/Length 1415 +/Filter /FlateDecode +>> +stream +x\xDA\xCDX[o\xDB6~\xEF\xAF0\xDA \xA8T\xF1.\xEDa\xC0\x966C\x86a-\xB0\xEEA\xBE$1\xE6ؙ\xED\xA6 +\xF6\xE7wϡH\xD92\xE2v+\xD0]xL~\xFC\xBEs!)\xFF8~\xF6\xEA܈\x91p\xA5F\x8F\xC6\xD7#!u)\x95Y۔\x95\xAEG\xE3\xD9\xE8\x8F\xEC,Y\xBB\x84\xDB\xF4\xDC\xF0\xA5\xDD-ྂ\xEB&/TUeW\xF7y!M6\xCB|\x9AK\x97ݢ]d\xBE\xB4w\xF3%\x8F]\xDC\xE0 +\xAE\xC9"Xv\xB9\xB4\xD9#!]0\xF0\xB1>\x91\xED}e\xAA\xAB\xD1 +\xE8\x88=\xC0"h\xA4\xB4\xED\xB1\xD9e\xFE\xE7\xF8\xE7W\xE7\xA2 Q6\xC6H/M\xA8\xB2\xA9\xF4\xA8Ц\xAC+C\xD2~\xDA cd\xB4\x86k\x83@\xC6%\xBC\x97\xF4\xFA[^\x83\xDC +\xE3Ϸp{I\xBF\xBC\xBB\xF5\xBDD\xF6\xDA?a\xC6Q\xD3U\xCE\xC2\xA6\xD2\xEEK\xA7\xF0ֳ5\xB6p\xBE\xE0\xF4\xC4\xE78\x99R%*+\x94.D\xCC\xCF\xF5\xDA\xFB~\x97\xCB:\x9Bxg\xA17\x88h3\xB9Kx\xAD\xDCy\xAA5ec\xA5E?\xA2\xAEK+\x94wT\xE3!\x8Fo9jHO7\xD9l +\xF0.\x9B"\xBF\xBBye\xFC\xB1\xA6\xD8m\xF1\xB7\x8D41\xE1\x91;\xB0 \xD8\x9A\xA6\xF2C\xC9\xF2}\xF7\xF55=1\xFE\xF7\x84V\xFB\xFB\xC5 +\x9Ad\xCDJ\x84\x97x\xDBa\xA7G\x81lg8\xE00\xBD\xA02\xCCe\x9C^ \xE5F`r\xF8\x86\xC0\xC1\xB8q\x90\xEF\xD3\xF5&i\xECB\x8E'\x86\xAE\xF2\x99\x89I\xBEE\x98\xDD\xF7\x807\xC4P\xD2;\xCDQA\xAD\xC82G\x80i{\x8F0=\xE8\xF9\x8C:\xB4\xE8a\xA5\xB2\x96\rs\x86b\x8B5[\xEF[rc\xB3\xF6fN}\xBA\xBDC Y\xB9\xEC\xBDP:\xF1\xC6\xF3\@μ\xA4\xE1oџ6yeSF +I\xBA݅\xC0.\x89\xA2\xD3\xC0/H\xF4\x8D庝%Z(K$`\xF9\xB7\xEF(Wm\x95$+xRA\xCDI\xAE\xB5\xEF\xF3\xC2HEI\xC0)\xB0\xF1Υ\xE7#\xAD1\xD8".&\x84-G\xCAI[\xC9\xE0\x8A\xCCZ\x87\x8C\xB0>fW\xB8ʠs\x94\xD3\xF82ܵ^\xB7\xBE\xC0\xEE +\x93%U\xF4A\x91!oY:\xEB\x92\xEAbr\xD40̭_J\xD3HI\xCA\xC5\xE9\x92\xD7\xAA41\xF5U\xE3\xC9\xE0خ ٛ-zc\x99\xF4\xF4\xF8\x87\x9A\xD7\xE8\xAA\xF5]\x9E\xF7\x87_\xBDn肮S\xB8\xF0\x99B4\x8D#\xE3\x8E\xEA\x89\xE6\x86\xFA\xD0Z\xB1\xAAm\x94\xBC +V\xD4\xC1Gf3\xB2<p\xFC\xDA\xE1\x88˦\x90\xA7\xBD_\xD0\xEB\x98> \xA9Gf\xE13ȿ\x9Eq:,\x98.%4\x8DZR\x97 7WD +M1c|\xF3\x9EA\xD6<\x98\xE8ST6q\xDA)w \x8B\xF9.\xDE,\xB6'j\xC6}\xC3N\xDD\xE7<\xE3q \xD4'\xA4\xF5\xFEr\xC3\xE8\xB7L\xBAe\xE2\x8C\xFErR,. \x8B0\xA5\xB5\x82\xAB\x91e\\xFBᅨ\xB4㒤w\xDAJ -\xC6"\xB4 +[$\w\xFDp\x84"^\xB09W:\xE4u(\xEA\xBE\xE5-&\x98w\xB8\xAC5&\xFB=!q\xEE\xDFi\xD7fD\xCC\x83\x9BelV\xB1)\xFB͊\xF8=O\xA7؆\xBFkE\xBBN\xC6Y\x82J\xCD\xD2\xED&\xACٌ\xDBy(\xC6Ed\xD3'b\x87\x92KF(sT\x8A:\xAEL\xF2\xDCb@\x81#\x9D=pm\xFC\xBB\x87\xD2yJ\xB7\xA3\xAC\xB9\x8C\xB4<J\xE1}P\xBA \x99\x81\xE4V\x91\xBF9*GW\xE85\xEA\xC4^\xDC\xD2HȈ\xACs"\xDA +\xA0\x89]\xF6\xD5\xE9!u:\xA3rL\x97~\xEA\xCF\xE7\xD4\xA2\xDB\xD9\xB6\xD7\xC47L\x94&k\xA2\xAENr\xDB&\xEA\xEA\xE1\xD8 +\xAA3\x91\xBF;*Dz\x87OT\xA7\xAF\xBBu\xBA\xAFΰYE\xB3a\xF4\xCDER\xE44\xA2'\xB0\xC8\xC5\xED\xFA\xF1\xDAS\xE4\xFA\xF2\x9FX%ٖ&\xA7KJ\xAF9(cƙ\xA4"\x93\x9C +cȺ\x85\x82\xD2\xE2\xD4\xD3\xD8\xD3{\xB3\xF4{\xB3\xC8\xDE\xC0\xF57\xAF\xD9a\xBFY\xFAs\xDB\xC1^\xBAK\xB6\xA9I\xB7̋,\xF9\xC4!\xBC\xA9%q\xEB\xEF\xEC\xE1K2\xC0\xFF\x97c\xC1\xF1\xAD6\xF1\xC0W96\x98S\x8F +\xF3\x9FpTx:\x82*\x9E\xAEކY\xFC\xE8`\xE1\xE3q\xFDX>D\xB0o\xFD\xF0\xB5N\xAA\xFB\x9F<\xAA\xFB\xFD\xB6\e>\xC7U\x87\xD4?\xD7Eo\x93\x91\x9B\xDE\xDA\xD0)~\xD7/_]\xCA0 Z\xB7\xFE\x8A\x93k\xEAt\xB8\xC3\xC3\xF6\xDE:\xFBg<4\xEE\x9C\xFD\xCEqxrF\xA6\x94r'\x8B\xC75\x95\xFAl\xB2\xE5\xABdGr\xC9ɡN\xFA\xD7{8\xD5᧲\x94\xB6\x94u\xE3?\xFB\xEA\xBA\xC7s\xE8\xF7\xEC\xCD\xF8ٿηr +endstream endobj -4 0 obj -(SII constant tables) -endobj -5 0 obj -<< /S /GoTo /D (section.2) >> -endobj -8 0 obj -(Calculating SII) -endobj -9 0 obj -<< /S /GoTo /D (subsection.2.1) >> -endobj -12 0 obj -(Example C.1 from ANSI S3.5-1997 Annex C) -endobj -13 0 obj -<< /S /GoTo /D (subsection.2.2) >> -endobj -16 0 obj -(Example C.2 from ANSI S3.5-1997 Annex C) -endobj -17 0 obj -<< /S /GoTo /D (subsection.2.3) >> -endobj -20 0 obj -(Interpolation Example) -endobj -21 0 obj -<< /S /GoTo /D (subsection.2.4) >> -endobj -24 0 obj -(Calculating SII for a set of patients) -endobj -25 0 obj -<< /S /GoTo /D (appendix.A) >> -endobj -28 0 obj -(SII Help Pages) -endobj -29 0 obj -<< /S /GoTo /D (section*.1) >> -endobj -32 0 obj -(SII-package) -endobj -33 0 obj -<< /S /GoTo /D (section*.5) >> -endobj -36 0 obj -(critical) -endobj -37 0 obj -<< /S /GoTo /D (section*.12) >> -endobj -40 0 obj -(sic.critical) -endobj -41 0 obj -<< /S /GoTo /D (section*.20) >> -endobj -44 0 obj -(sii) -endobj -45 0 obj -<< /S /GoTo /D (section*.29) >> -endobj -48 0 obj -(undocumented) -endobj -49 0 obj -<< /S /GoTo /D (appendix.B) >> -endobj -52 0 obj -(Interpolation) -endobj -53 0 obj -<< /S /GoTo /D (appendix.C) >> -endobj -56 0 obj -(SII function definition) -endobj -57 0 obj -<< /S /GoTo /D (subsection.C.1) >> -endobj -60 0 obj -(Excel to R translation) -endobj -61 0 obj -<< /S /GoTo /D (subsection.C.2) >> -endobj -64 0 obj -(R code written from the ANSI S3.5-1997) -endobj -65 0 obj -<< /S /GoTo /D (subsection.C.3) >> -endobj -68 0 obj -(Utility functions) -endobj -69 0 obj -<< /S /GoTo /D (appendix.D) >> -endobj -72 0 obj -(Tests) -endobj -73 0 obj -<< /S /GoTo /D (subsection.D.1) >> -endobj -76 0 obj -(Compare interpolation details for example data) -endobj -77 0 obj -<< /S /GoTo /D (subsubsection.D.1.1) >> -endobj -80 0 obj -(Left Ear) -endobj -81 0 obj -<< /S /GoTo /D (subsubsection.D.1.2) >> -endobj -84 0 obj -(Right Ear) -endobj -85 0 obj -<< /S /GoTo /D (subsection.D.2) >> -endobj -88 0 obj -(Comparison with Excel implementation) -endobj -89 0 obj -<< /S /GoTo /D (subsection.D.3) >> -endobj -92 0 obj -(Test handling of missing values) -endobj -93 0 obj -<< /S /GoTo /D (appendix.E) >> -endobj -96 0 obj -(Final cleanup) -endobj -97 0 obj -<< /S /GoTo /D [98 0 R /Fit ] >> -endobj -101 0 obj << -/Length 1626 +115 0 obj << +/Length 1434 /Filter /FlateDecode >> stream -xڥX[o\x9CF~ϯX\xE5 \xA4@\x98y\xA8ԸM\xE5*\xAA\xAAx\xA5Vj\xFA@v\xB1\xBD\xEAzq\x97\xB5+\xBE\xE760\xAC\xD9\xC4I\x80\xE10\xF3\x9D\xFB\x999\xBC^>{\xF9Ʃ\x85\xF2\xB9V\xCE.\x96\x97\xA5m\xAE\x8DY\x94\xA5\xCFU]-\x96\xEB\xC5_\xC9Y\xAA\x92f\xB7\xD5\xDCp\xD06p\xDF\xC1u\x95f\xA6(\x92\x8B\xDB4\xD3.i\x81ҮR\xED\x93k\xA4\xAB䜦\xC1\xFB\xA1\xDD\xCA\xDA\xCD\xDE\xE0\xFA\xB0 \x94C\xAA\xCB䁑\xCEx\x8DX\x9F\x98\xF6\xBEp\xC5E\x8AhL\xC4@Q\xCCE\xEA'Ҩ\xE4]\xFA\xF7\xF2חoT\xBDP*\xAF\x9DӤ\x9A2y]\xD8Ef]^\x8EU\xFBe\x8F\xA3D\{\x94\xD4x㜇\xA4\xA8\xBB\xFC\xB6\x87\xDB\xFE\xF2\xFB5\xCDR\xC9O\xF4\x8E\x8BL\xE7U\xE5r\xB2\x9E9 VC - \x93^\xBED\xE0`+F\xEF\xC4\xF8\xBC\xDA0;\x9A\xFB\xC6o\xCF6\xDA\xE4e\xE9\x99\xB1\xB91\x96٠y\xDA[\xB8pp\x93\xEA*\xF9@\xD6j\xF7\x8C\xA1F\xC9ucE٩Z\xD4y]\xEA\xAD\x94\xA9\xAA\xCCk\xE8\xD6\xE7\x95f\xF0嵸\xE5\xB1u\xB2\xEE-2ʖZ\xC0\xAD\x81t7AD((\x8E\xC9\xC59\x964\x8E\xF1\xBFC -\xE9m\xE5-Uv\xFEF>o\x84\xD6Hh>\x8F"\xE083\x9D\xBD\xC3K\xD6#\xFAא\xA3\xB8\xF2\x91\xCAA\xEDV\xB8%3\xBA\xA4\xE5\x99*\xAC\x97\xE8\xE51W]0\x96⺵a\x81\xC2V\xB1\xA7\xCD$p\xA4O!V\xB3\xDC\xEB\xB9\x91\xC3\xD3{\xA9Ɓ|\xC0 -P\xBB\xE4\xCFH\x8874\xA6\xDD-\xC8NF*\x87\xBC@$\xDCM\\xC5\xF8Z\x8C\xAFz\xFAZ\xC8\xC6\xB6!|ag\x84\x86\xDF-]#\xDDF\xEBJ\x86\x8Aɚ\x96+!\x97pՀ\xE2\xFC\x88즂\x94s\xEE\xD7#\x94;\xA9\x8A9\xAD\x99\xDEjF\xCF2\xF4 kMc\x82\xB2i,\xEE \xB2\xE4|\x8BP2\xB2a@\x9C\xC0\xC2\xCChgF\xF9\xDDIu\xECi\xED\x82x\xF5\x8Cv\xEA\xC8o\xB1'\xF4\x88l"r\xA4\xB4\x9FA\xC9"\xBA\x9Ejg紳#\x9C;\xA9\x8E\xC2\xEF\x91vN\xF8\xF9\xED\x8B;\xD0k\xA1W,o`k\xA4]\xC5viW\xCD\xFBnV;7\xCA\xEFO\xAAS\x8A\x85\x9F\xA8\x9D\x89\xAC\xEEg\xB4\xB3S휐\xCDHv\x82\xA1 9\x8B\x92\x9CWL\xAC\xE7\x94\xE4\xF6Si\xE4\xA7\xEAM\xC1"\x8A\xB688}\x94z\xF5c\xF5q.\xCA\xC8(f\xB3\xE10,5 -\x8B\xA7\\xBE\xB0\x8Da\xFFW\x8A\xF47l]_@\xECBG#\x9F\xC3 /\xBB\xDC\xFFG_E\x9F\xEE\x85\xD3,j\xF9-\xA8iYb+\xA6\xEE\xA9Kx\xB2u\x9E\xF7x?\xF2\xE0wlɸm\xC9\x93\x8F\xF7d\xD4\xC0\xE5Z\xE7ȸ\x98h;)\xA3bb\xA2X\xF7QM\xAA\xA2\xF9\xD5N1\xD32\xF7\xF8\xC8r\x8EgKe\xF8\x8Cߓ\xB8\xF0n\xB9X\x89\xEF֡\x87\x85\x99\xABnl\xA4k#\xFA\xE3\xD3)/\xBB}\x84O\xC7\xCBЂs?u\x8F\xED\x88@V\xA6\xE3\xEF%\xBB\x93a\xEE\x828ᄆGdg/\xCB\xDA^\x9AKϽ\xCC:\xFE\x99-d\xDA\xFB\x83\\xB7\xD4Ǫ\xE4\xA5\\xA3+\x9C\x8D\\xB9\xAC\xE9d\xADK\xA9\xCFq\x89s?\x85r1M_\xE5Tnj$\x9A\xF6gm\xDC#nŚ\xFDwvl\xAF\xB8Opx(\xE0\xA3C\x9F+x\xDA\xEDXKs\xDB6\xBE\xFBWh\x925 i\x82\xE03S\xF7`\xB7\x9E&7Ө\x93C\x92-Q\x8F\x8BT\xF5p\xAC\xF6\xCF\xFB+\x85\xD3fm\xD8\x95j +\x96A\xDE\xF7`\xA1\xEA,\xAC\xD1,+֞\xED\xA5m\xEC͔\xFE\x97⦜U\xC3/\xA3w\x83p\xE0IB9\x85a^\xA6\xF6\xE95 +\x8D,qJ\xA38\xF2.\xD5s \xE8\xF9/J&\x83\xA1+w#\xF5<G\x97\xF5Z\xAD\xCCA1蜂\xF0\xF3Q%Q*\xBB\xD9\xF2+J\xE9\xCD+\xF2\x8COq\xB8\x85E\x82\\x8B\x8D\xDEo\xD4\xF3 +\xCE_\x84q\x86$\x80\xFE\x9FT\x8B\xB0uz\xBF\xAB\x96\xF2;\xF4\xFF\x86\xF3\x83\xFA\xC0K\x89ɀ\xF7\x8Cvíĵ\xD9 \x92\x8C\xA6\xDD{vw\xC3f\xBB\xE9 \xF4u4f\xB1y\xE2&\xAA\x85\xF4r\xDAB\xE64\xFC\xCB~W\xD7z] \xFFg\xFD\xAE\x8D /\xB6\xFB\xE2<\xC94\xCDz}\xF5نI;\x8E\x94\xB1\xC46\xB1\xA9\xC8|\xC4&\x84;\x87\xD3\xCC\xBC\xE4\xEEԞ\xB2\x84\xDD^\xB6\xC9\xE9 +\x8B\xD9Yn\xC7A\xA3-Ӕ\xEB)\xDD\xC1\xC7m֭a\xE48\xD2\xEA4\xB6\xA7,\xE1\xB49\xF8\x92Ө^\xF0E[+\xC4\xC4\xEE,k\xFF-\xC13\xF7bw\xF0\x89\xBB\x86q;+\x9C5\x8Cܤ8\xDEu\xBC8\xA8\xBE\xB3\xF2Gp\xA4\xB6\xE0\xB9h\xC9\xF1\xE1G\x82\x97\xF6\xE5@\xE3\x89\xEDJ7Is\x82ѫ|\xC6\xC37\x978\xC2ޜ\xE7\xE0\x99D\xD9\xF1\xA5\xEBH\xF0\x99{\xA6\xF6\xF7\x9CO\xDB\xEA\xF7\x83O\x99\x8E\x89T\xB8\x97\xA5[\x97\xF2\x97,{\xE2\xF6&\xEA\xB67\xBF\xEAͭj>\xA2\xE6\xFCa]w\xFB\x99\xC6\x94\xB89m\x8D\xFE\xBF\xFB1\xE0V\xD6Zv?\xC9K'K\xF7\xA9I\xFAԚ\xF4\xF3c\xEEs˜bW\x8DM&\x9C\xE2¤=j\xC2\xF3ɛַ\xDC\xA8L0f\xB7\xBB)\xE0\x83\xD8\xAA\xE3\x9DSL\x82\xEE\xCA\xE25\x9C\xEDC8+\xDD\xD889\x8F\x9B\xA5\xBE\xFFP6\xAA|\xEE; +=ΪZ\x83.)\xED\xECR\xFD\xA5f\x90\xC53\xD4[i2\x8FU\xD4(\x87\xAC6K\xA8f\xB9^\xE8+\x99\x9A\xFA\x9A\xA9\x8D\xE7ơ\xCEp\xB6l\x90\xD9\xF6\xC5\xCEr\xDF\xE7Tr\xE8\xA5\xE6\xCD\xF9\xDA\xE0\xF3\x8A\xBA~\xC0\xB3\xD5\xB3\xC6ݿ\x86eiD\xBC\xE2! +\xBF\xB3G8\x92_<\xC1\xF3'$}\xA5\xBE\xC9\xC0\xE3\xFE\x99\xE6\xFC\x93\x96\xC8^ +\xFD8Dн\xB1>\x80\xD3ދS\x83\xF4\xE1ES\xBE\xD67n\xAA\xFD\xC1\xB5\xAB\x8CUm\xDF\xFA\x8Bz\xFC\xF31\xBE\xF6_\xD9\xF6\x82\xF9\xA2\xEFa\xFA\xD3C\x83\xBA\x883\xC3\xD8\xC3c\x90\xE8\xF5G\xD7H\xF0m\x8F\x9D\xB1'\x8C\x99\xE4\xBDЫ\x96\xBE8\xE3P\xBE:b\xAA\xB9\xFC\xB8H\xFC\x8A2}\x82\xE3\xFAJhfԪ\xBD +p +J\x97\xBE\xBFZ\xEC|t-\xC0\x88\xCB\xF9\x85^\xE1\xF9\xAA?Uϙ\xE64I5A+\xD1^2(ų\x9FGg8BK\xF1 endstream endobj -98 0 obj << -/Type /Page -/Contents 101 0 R -/Resources 100 0 R -/MediaBox [0 0 612 792] -/Parent 110 0 R -/Annots [ 99 0 R ] ->> endobj -99 0 obj << -/Type /Annot -/Border[0 0 1]/H/I/C[0 1 1] -/Rect [209.084 70.557 362.469 82.418] -/Subtype/Link/A<</Type/Action/S/URI/URI(http://www.sii.to/CSTdata.txt)>> ->> endobj -102 0 obj << -/D [98 0 R /XYZ 71 757.862 null] ->> endobj -103 0 obj << -/D [98 0 R /XYZ 72 720 null] ->> endobj -2 0 obj << -/D [98 0 R /XYZ 72 463.255 null] ->> endobj -100 0 obj << -/Font << /F51 104 0 R /F19 105 0 R /F8 106 0 R /F60 107 0 R /F62 108 0 R /F67 109 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -114 0 obj << -/Length 1265 +119 0 obj << +/Length 1881 /Filter /FlateDecode >> stream -x\xDA\xC5XQ\x8F\xDB6~ϯ0\xEE\xC9\xC1jג-\xC9\xB6\xEBu\xC5n\x87n\x97\xA1]|\x8E\x93H\xE24\x97\xF4z\xFD\xF5\xA3(\xCAvf)\xC1\xAD+\x86\x83N\xB2I\x91\xFCHʤ\xF2j6y\xF9F&A\x92\xCB`\xB6K\xE2$U\xC1l\xBC\x9AF\x82\xA7\xE1|\xCA\xC2Ɓ\xE6\xBF\x91\xC0\xF4-Xjb\x9F\xBD\x80\xA6И\x88\xA5dAċX\xB2\xDC(^\xE0\xF6\x88'\x85\xEF`}\x83\xC3<\xDF\xC2Z\x8F\xBBiĒL\x85\xD7D -\x83\xE3\xE8\xF9\xFE\x84!\xE9Y\xD3\xFF\x8013\xA0\xB4X -\xAC%\xAB\xB5\xC5o\xC9\xDAz\xBDD\xF0\x8Aិ\xA4\xEE\x96\xC4^O\xCD\xFB:0\xB2h\x86ndF#.#1\x8F \xB9Mό\xE6tL\xEALj$hVcGa,\xCCܺ\xC8O\xA9\x94jD+͵-u\xDB!ɖ̕C$\x8A\xFB\xC1s\xC1\xFC0<J\x95|Jd\xE9v\x990\x8E\x81O;猶e\xA4,w\xDBav;\xC0S<S?\xF8\xAC\xF3\xBAF\x8E;\x9DJ3\xB7\xCB\xB9͓/\xB9\xD95_t\x81p\x9A(\xDC\xCAT7\xC1K\x9Er/\xF3\x83\xFEfݩ\xF0Ɛ\xFB\x93\xE2<\xE9<;\x89\xBE7\xF2g쐮\xC8S\xD0\xC4\xF9\xEDg\xC0\xA7\xEEρ\xB5's#L\xFDI\x9A3F\x91W\xB4M\xF8s\xC9cG\xE2;\xF3\x94D\xEA\xFC\xA7\xEBx\xE5?\x86ҍP\xF8ϼ\xEC\xA2?/)<\xA9\xF0\x96 -\xA6\x9C -+urZɞW\xA8u1\xDAR\xB5=P\x81j\xA8@\xCD/\xEAgh\xA9l\x9FHc_\xA0s?\xA0w\x83 -\xBF\x8F&\xC2,k\xB3.\xD7D\xAB\xF7\x84\xA5\xC4^\xE0Ӕ\xE7a\xDD\xF3kj\xB9Ֆ-j|D\x8A\xAE\xFBG\xBD\xA9\xB2 -D\xBBE-QU\xEDF\x9BC2\xEAR\xEB|\xEA -i\xCDrYo\xAD\xD1h\xB0\x85\xA3'\x898Ѓ\xF4z\x89|;\x9E -P\xE3{\xED\xD5v\xB3\xD3\xC4}C\x9EHk\xAE\xC8\xD9(k\xC1i\xEAt\x80\xF2\xBD'\xD3\xF2\x98\xAB\xFCh \xB7\xD4\xED)\x9D\x8E0v\x86\xF4,\xA3\x9E\xAB"\x8E\xF57\xB3e3@\xBC\xA3--=\x93\xC6φ\xF3G3=W\xFF{\x93^\xB6\x87\xFB\xD0?>\xFDWr#\xFA -d0O -\xA4\xFAD\xCF\xBCBf\x87c\xBE\x83䗬-n\xE17\xBA\x8A\xC1\xCD\xD7\xD5\xA4<V\x92~\x99\x98\x99j\xE6\xB8\xE7Òg\xC0\x8El6\xFF\x9A\xB1@\x96\xC7Y\xC7\xE7\xEC\xA0\xB4\xE7a\xA3\xB3zg\xC1\xEA7t\xD3-pU\x84?\xDF\xDEѯ𠗩\xCEC\xB1\xA2P\xE6e\xF9`$\xCD\xF1lT6\xFDu\xEB \xC3zNjHݠP\xEB\xBD\xB6\xC4n\xB1\xE0\xEE\xE7&}x^\x84\x8F͠{k\x8F\xB3\xBFD\xFB\x9E\xE8\xE1`S\x9B\x85C\xAF\xA25\xE2 -\x80F\xD9|\xB1>_\xE7q*3\x81\xA7h<\x8BV\xFFߔ\xF6\x9B^\xC7\xD3(\xCB%`\xE7~G\x9A\xCE -\xFB`\x9B[\xEBt/e\xFA-H\x9AU;\x857\x8FSj\xB6L\x9B\xB7\xEF\xE9\x98CZ\xF3\xFAH;2\xF26\xD7\xF4\xDDG\xA7`\xCFgc\xADuk\xB8Xu._ۣ\xB84\xF0\xD0"\xE58̖\xAE﴿c\x95\xFB~\xA3v(OY,\x92\x9B\xDC<\xCF푠c\xFA7\x83)!\xD4 +xڍXYo\xDBF~\xF7\xAF\xFCD\xE6\x9A\\xDER \xCE\xB8(\x8C\xB4Vч\xA64II$Q\xAD\xA4ɯ\xEFε\J\x94c\xA4\xC8\xDD\xD9\xD99\xBE9\x96\xE1,0\xBFp\x96\xE9Y\x9C'\xAA(\xF2Y\xB5\xBD\xFAr\xA5\x928L3\x9Ctq*\xE4%<p{\xBF +gﻫ?\xCCO\xA6|\xC3\xCEw\xF8\xDD-\xAEn?\xA6z\xC6*\x8A\xCD\xFFb\x89\xC6Z%y8[Գ<=\xF7\xC3P\xC7rz\x9B\xEA\xB81\xF0\xF8ܚ\xDBn5\xF7\xA3,\xF1\xEF\xCD\xE0\xDD\xCF\xFF]\xFCv\xFB1\x9F\xAAHu +삙i\x959\x91\xDBbmV5Df\xC6\xBA\xD0<\xEAؐ#Yo\xA8Z\xBC\xCE\x86\xB9\x8A-\xDD\xD2\xD0w\xE6V=\xF3\x8An7\xF7u\x96{\xEDּ\xEC7\xB8[\xE8m\x9B\xDD\\xE7\xF50_xo\xCD\xCB=\xBD\xC0c\xA4\xCC-\xF1â\xC8h\xB0\xEC\x89S +\xFA\xEA\xC0<\x99\xD1\xD4kjކ\xB7Τ\xAE\xF9a\xA8\xDC\xD5p?\xC0\xFD\xC6L\xE5\x85\xF7\xAD\xE59 \xEF\x8Eϴ\xBED\xF9\xBE\xF3\xCB3\x934\xDB=>\xD9-:b\xDF\xED\xC5\xA0e\xFBCljl\x9D\xAB(\x8Dg\xC6e\xAAH2\x92#[\xA4#oO +\x80>\xCB\xEE\xDB-j\xEE\xC7q ^2\xE4\xFA\xB2!Q\xCA\xEC +d\xB5H\xE75=)Ь\xBB\xB9\xF97X\xFD\xD6\xE2\xCE<\x8F\x82\x9D7Gs\xAB!Od\x86\xC5\xFF\x89Q@\xDA^| +{\x83\xF8\xB0\xB6&߰\xB7\xA0\x86A\x85\xE40st\xD1B nW\x86\x85`\xD0`lJ`\xDB\xF5\xB1\xBC%\xD0v[x \xBD\xB7 Վ\xE4\xA4\xFA\xFB$\xEF*\x9Bn\xE0>ka͊\xE8\x85\xE1\xB5\xDB;\x806Jm\xA6B&/\x94ε\xC4ʆ+vI:\xA0\xFB\x80~ŗ +\xBE\xFAQM'\xF4HH%\x84\(t= +\xDD:fV3\x8B\xCFA\xE1-k +/6ӘB R&\xED\x96\x87\x9B +\xE8֢\x89\xC6\%R\xA2\xA3tEf\xAE\x89\x84\xE4\xC6\xC7fa\xE0n +\xF3d\xED{q\xAE߳\x84ĸb\xBB\xC4\xCE.O\xE8\x91\xE1\xFD\xB2\xB3\x815\x98b!\x92\xD5lG\xE3\x94+Ӛ&m~3U\xEFy=,\xEA\x87\xB4\xF0\x86ٚH\xD9֠i\x85\xAC>/\xE7\xD8G\x94\x8Eh +q(\xAB\xE3\x89n8\xCDs\x95\xA4\xB1\x8BӝdY\xDEP0k\xDB2\x9E{c\xAE\x85\xB9\xFE4\xD7_\xE6\xFAp\x8E\xDF<R\x89\xCE\xCE\xF0\x8B\xE2\xDD\xFF\xC4\xF3\x8C;Њ\xF1 +\x8F%D\x8A\xCF\x90i\xE1\xD8OUg\xBB \\xB6f\x9BFEN\xF9EJbTT'w\\x95\x91\xA4\xB59\xB49Xu\x9Bq(\x98\x95l~zͽM\xB7\xF2\xB1\x87+\xA5\x8D\xA9\x89\x9B\xB3\xE7\x92\xF3ha{,\x984\xC0\xF3RP\x830j\xA4ii%\xBEɀ\xB2V\xA0\xC0zQw\x9Df^%\x99WCe\x89\xD9l{J]\xF5)\xE2\xA9li\xB3\x90R\xF5pz\xF0\xA7\xB62 \xB3*\xD2yg\xE8dt\xB6)\x90s5\xC2\xCAQq\xD1\xF2\xEFNu\xA5\xAEl\xD2q\xA4\xF2L\xBB\x8D\xFE\x9E\x9D\xD2p\xAA]\x9FC5 +\x95\xE9\xEFd\xD1\xCD\xDF\xD4\xEDnv-\xB7C\xC9[\xA7*^\xCFQ|w`9{i\xE09\xF4\xEA\xF3\xE2Ty<\xEC@\xE5iWO%Qq\xBF\xB6\x91T>t}\o\xE2 UY2.7\xCFZ\x86C\x9CF\xAF;kY\xF1\xF2a\xB4Z\x97\\xC8mР\xFF7l:\xB8\xB5\x9Cz\xEDZ\xC0\xF98{\x9B 0=s\5\x954 +\xE1\x9F\x98V\xBDdO\xAC\xD8J\x8C\xCDA\xC6\xE1\xB9\xEAp +T\x98d\x8EJN\x95\xB7\x8AQ\x93{9\xBCρ\x8Ao\xE8\xAF\xB9f\x96\xD2Ll99ox\xEE\x86V\K\xCDA\x95\xCEA'd\x82\x89\xE3\xF4\xB4Gi\xA4\xAE\xC5 +\x96\xF2<,BB\xBE`j\xF2\xD8x\xF2\x96\xF1\xB1vx\xE9\xAC\xFE2oy\xE8\xD9aX\xBFd\xCAJ\x9As\xC7C\xD5e\x93\xDAD\xED\x90\xF8\xBC\xA4sJ\xE8\xD0"\x8F\xCFg;F\xD6\xF5\xD8<'\xA5\xEC\xDA\xE1\xD6\xF0nw\xB4\xEAt\x95\xDC4\xE7r\xBFD6v\xE4\xEB\xD6,JŅ\xAEA\xCD`|\xB2\x82\x89\xBE\xCF\xC5}\xC7\xEBߛK\xF3uB\xF2\xC0\xCDGz>\xF5\x9E{\x93\xC5\xF9ԣ\x83\xD1\xECk'+\xD9G\xCD\xF4\xF2O,\xDBä~\x8E\xDF\xF1\x82\xC5E;\xBF\xAE\xE1rm\xFDq\xA7\xFF\xD0\xFB\x9Dypґ\xC9ԡ\xCAL\xF2I"v\xFA\xAF\xC9ohN\xD2\xFA\x9B\xDAH\xDBp\xDA\xC3Qs\xF1dOZ%\xB61\x9Co\xE3p\xBC\x89\x9Bi\xB9\x8E<mF\xD3U9S\xD9p\x8Az +\xE5\x90\xE1GI4ju$\xF2\x8Ep\xE4HbOZ\xB2\xAFrB\xDC\xF0\x91(\xA1Op\xB0\xBE$\xD2\xFEٞ*K\xAFpծܲ\x81\xD1 endstream endobj -113 0 obj << -/Type /Page -/Contents 114 0 R -/Resources 112 0 R -/MediaBox [0 0 612 792] -/Parent 110 0 R ->> endobj -111 0 obj << +112 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./SII-sicplot.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 116 0 R +/PTEX.InfoDict 122 0 R /BBox [0 0 864 432] /Resources << /ProcSet [ /PDF /Text ] -/Font << /F2 117 0 R>> +/Font << /F2 123 0 R>> /ExtGState << +>>/ColorSpace << +/sRGB 124 0 R >>>> -/Length 17107 +/Length 3011 +/Filter /FlateDecode >> stream -1 J 1 j q -Q q 59.04 73.44 774.72 299.52 re W n -1.000 0.000 0.000 RG -0.75 w -[] 0 d -1 J -1 j -10.00 M -87.73 112.24 m -178.50 154.74 l -238.28 197.24 l -282.94 239.74 l -324.94 239.74 l -361.44 239.74 l -393.84 239.74 l -424.82 239.74 l -452.71 239.74 l -480.75 239.74 l -508.33 239.74 l -534.12 239.74 l -560.83 239.74 l -587.62 239.74 l -614.00 239.74 l -642.26 239.74 l -671.14 239.74 l -703.53 208.27 l -737.16 176.80 l -770.57 145.33 l -805.07 114.12 l -S -BT -1.000 0.000 0.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 84.40 108.02 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 175.16 150.52 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 234.95 193.02 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 279.60 235.53 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 321.60 235.53 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 358.11 235.53 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 390.50 235.53 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 421.48 235.53 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 449.38 235.53 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 477.42 235.53 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 504.99 235.53 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 530.79 235.53 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 557.49 235.53 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 584.29 235.53 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 610.66 235.53 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 638.92 235.53 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 667.80 235.53 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 700.19 204.05 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 733.82 172.58 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 767.23 141.11 Tm (1) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 801.73 109.90 Tm (1) Tj -ET -Q q -0.000 0.000 0.000 RG -0.75 w -[] 0 d -1 J -1 j -10.00 M -59.04 73.44 m 710.78 73.44 l S -138.85 73.44 m 138.85 66.24 l S -301.66 73.44 m 301.66 66.24 l S -424.82 73.44 m 424.82 66.24 l S -547.98 73.44 m 547.98 66.24 l S -710.78 73.44 m 710.78 66.24 l S -BT -0.000 0.000 0.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 128.84 47.52 Tm (200) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 291.65 47.52 Tm (500) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 411.47 47.52 Tm (1000) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 534.63 47.52 Tm (2000) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 697.44 47.52 Tm (5000) Tj -ET -59.04 84.53 m 59.04 353.53 l S -59.04 84.53 m 51.84 84.53 l S -59.04 138.33 m 51.84 138.33 l S -59.04 192.13 m 51.84 192.13 l S -59.04 245.93 m 51.84 245.93 l S -59.04 299.73 m 51.84 299.73 l S -59.04 353.53 m 51.84 353.53 l S -BT -/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 72.86 Tm (0.00) Tj -ET -BT -/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 126.66 Tm (0.02) Tj -ET -BT -/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 180.46 Tm (0.04) Tj -ET -BT -/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 234.25 Tm (0.06) Tj -ET -BT -/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 288.05 Tm (0.08) Tj -ET -BT -/F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 341.85 Tm (0.10) Tj -ET -59.04 73.44 m -833.76 73.44 l -833.76 372.96 l -59.04 372.96 l -59.04 73.44 l -S -Q q -BT -0.000 0.000 0.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 407.99 18.72 Tm [(Frequency) 100 (, Hz)] TJ -ET -BT -/F2 1 Tf 0.00 12.00 -12.00 0.00 12.96 204.71 Tm [(W) 30 (eight)] TJ -ET -Q q 59.04 73.44 774.72 299.52 re W n -1.000 0.667 0.000 RG -0.75 w -[ 2.25 3.75] 0 d -1 J -1 j -10.00 M -87.73 84.53 m -178.50 146.40 l -238.28 188.10 l -282.94 194.82 l -324.94 201.01 l -361.44 211.50 l -393.84 211.77 l -424.82 210.96 l -452.71 223.60 l -480.75 228.98 l -508.33 241.09 l -534.12 267.18 l -560.83 284.93 l -587.62 286.28 l -614.00 268.79 l -642.26 262.61 l -671.14 255.61 l -703.53 247.81 l -737.16 221.99 l -770.57 142.64 l -805.07 84.53 l -S -BT -1.000 0.667 0.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 84.40 80.32 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 175.16 142.18 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 234.95 183.88 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 279.60 190.60 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 321.60 196.79 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 358.11 207.28 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 390.50 207.55 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 421.48 206.74 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 449.38 219.39 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 477.42 224.77 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 504.99 236.87 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 530.79 262.96 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 557.49 280.72 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 584.29 282.06 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 610.66 264.58 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 638.92 258.39 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 667.80 251.40 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 700.19 243.59 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 733.82 217.77 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 767.23 138.42 Tm (2) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 801.73 80.32 Tm (2) Tj -ET -0.667 1.000 0.000 RG -0.75 w -[ 0.00 3.00] 0 d -87.73 220.91 m -178.50 266.64 l -238.28 256.96 l -282.94 233.02 l -324.94 212.04 l -361.44 210.42 l -393.84 209.88 l -424.82 219.57 l -452.71 242.16 l -480.75 243.51 l -508.33 242.16 l -534.12 248.35 l -560.83 244.85 l -587.62 250.77 l -614.00 219.30 l -642.26 202.62 l -671.14 184.06 l -703.53 156.62 l -737.16 138.60 l -770.57 134.57 l -805.07 128.11 l -S -BT -0.667 1.000 0.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 84.40 216.81 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 175.16 262.54 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 234.95 252.85 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 279.60 228.91 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 321.60 207.93 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 358.11 206.32 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 390.50 205.78 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 421.48 215.46 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 449.38 238.06 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 477.42 239.41 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 504.99 238.06 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 530.79 244.25 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 557.49 240.75 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 584.29 246.67 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 610.66 215.20 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 638.92 198.52 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 667.80 179.96 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 700.19 152.52 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 733.82 134.50 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 767.23 130.46 Tm (3) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 801.73 124.01 Tm (3) Tj -ET -0.000 1.000 0.000 RG -0.75 w -[ 0.00 3.00 2.25 3.00] 0 d -87.73 147.48 m -178.50 182.99 l -238.28 224.41 l -282.94 265.30 l -324.94 256.15 l -361.44 236.78 l -393.84 219.84 l -424.82 209.62 l -452.71 229.52 l -480.75 239.47 l -508.33 257.23 l -534.12 283.86 l -560.83 275.25 l -587.62 251.58 l -614.00 233.29 l -642.26 220.38 l -671.14 196.70 l -703.53 162.81 l -737.16 134.57 l -770.57 122.46 l -805.07 114.93 l -S -BT -0.000 1.000 0.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 84.40 143.26 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 175.16 178.77 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 234.95 220.19 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 279.60 261.08 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 321.60 251.93 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 358.11 232.57 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 390.50 215.62 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 421.48 205.40 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 449.38 225.30 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 477.42 235.26 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 504.99 253.01 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 530.79 279.64 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 557.49 271.03 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 584.29 247.36 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 610.66 229.07 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 638.92 216.16 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 667.80 192.49 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 700.19 158.59 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 733.82 130.35 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 767.23 118.24 Tm (4) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 801.73 110.71 Tm (4) Tj -ET -0.000 1.000 0.667 RG -0.75 w -[ 4.50 3.00] 0 d -87.73 117.35 m -178.50 233.29 l -238.28 240.82 l -282.94 265.30 l -324.94 267.45 l -361.44 263.95 l -393.84 242.43 l -424.82 231.67 l -452.71 235.98 l -480.75 239.21 l -508.33 252.65 l -534.12 245.39 l -560.83 233.83 l -587.62 224.68 l -614.00 213.65 l -642.26 203.70 l -671.14 180.30 l -703.53 159.85 l -737.16 148.29 l -770.57 139.68 l -805.07 125.69 l -S -BT -0.000 1.000 0.667 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 84.40 113.34 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 175.16 229.27 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 234.95 236.81 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 279.60 261.28 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 321.60 263.44 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 358.11 259.94 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 390.50 238.42 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 421.48 227.66 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 449.38 231.96 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 477.42 235.19 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 504.99 248.64 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 530.79 241.38 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 557.49 229.81 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 584.29 220.67 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 610.66 209.64 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 638.92 199.68 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 667.80 176.28 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 700.19 155.84 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 733.82 144.27 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 767.23 135.66 Tm (5) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 801.73 121.68 Tm (5) Tj -ET -0.000 0.667 1.000 RG -0.75 w -[ 0.75 2.25 3.75 2.25] 0 d -87.73 136.18 m -178.50 168.46 l -238.28 333.62 l -282.94 361.87 l -324.94 282.24 l -361.44 248.89 l -393.84 217.69 l -424.82 202.89 l -452.71 202.89 l -480.75 216.34 l -508.33 215.26 l -534.12 217.15 l -560.83 216.34 l -587.62 231.67 l -614.00 233.83 l -642.26 217.15 l -671.14 181.10 l -703.53 188.63 l -737.16 153.40 l -770.57 143.44 l -805.07 96.10 l -S -BT -0.000 0.667 1.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 84.40 132.08 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 175.16 164.36 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 234.95 329.52 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 279.60 357.76 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 321.60 278.14 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 358.11 244.78 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 390.50 213.58 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 421.48 198.79 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 449.38 198.79 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 477.42 212.24 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 504.99 211.16 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 530.79 213.04 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 557.49 212.24 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 584.29 227.57 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 610.66 229.72 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 638.92 213.04 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 667.80 177.00 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 700.19 184.53 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 733.82 149.29 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 767.23 139.34 Tm (6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 801.73 92.00 Tm (6) Tj -ET -0.000 0.000 1.000 RG -0.75 w -[] 0 d -87.73 119.50 m -178.50 213.11 l -238.28 205.85 l -282.94 210.96 l -324.94 225.22 l -361.44 243.51 l -393.84 243.51 l -424.82 219.84 l -452.71 219.84 l -480.75 234.09 l -508.33 272.56 l -534.12 252.65 l -560.83 246.47 l -587.62 268.53 l -614.00 256.15 l -642.26 247.28 l -671.14 228.18 l -703.53 190.52 l -737.16 162.81 l -770.57 120.04 l -805.07 84.53 l -S -BT -0.000 0.000 1.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 84.40 115.37 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 175.16 208.98 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 234.95 201.72 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 279.60 206.83 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 321.60 221.09 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 358.11 239.38 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 390.50 239.38 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 421.48 215.71 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 449.38 215.71 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 477.42 229.97 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 504.99 268.43 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 530.79 248.53 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 557.49 242.34 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 584.29 264.40 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 610.66 252.02 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 638.92 243.15 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 667.80 224.05 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 700.19 186.39 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 733.82 158.68 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 767.23 115.91 Tm (7) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 801.73 80.41 Tm (7) Tj -ET -0.667 0.000 1.000 RG -0.75 w -[ 2.25 3.75] 0 d -87.73 260.46 m -178.50 246.74 l -238.28 274.71 l -282.94 234.09 l -324.94 193.21 l -361.44 164.96 l -393.84 167.11 l -424.82 217.42 l -452.71 238.13 l -480.75 266.64 l -508.33 265.03 l -534.12 257.77 l -560.83 248.89 l -587.62 226.83 l -614.00 216.34 l -642.26 205.04 l -671.14 185.68 l -703.53 171.15 l -737.16 154.47 l -770.57 146.67 l -805.07 123.81 l -S -BT -0.667 0.000 1.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 84.40 256.35 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 175.16 242.63 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 234.95 270.61 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 279.60 229.99 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 321.60 189.10 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 358.11 160.86 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 390.50 163.01 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 421.48 213.31 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 449.38 234.03 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 477.42 262.54 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 504.99 260.92 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 530.79 253.66 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 557.49 244.78 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 584.29 222.73 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 610.66 212.24 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 638.92 200.94 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 667.80 181.57 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 700.19 167.05 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 733.82 150.37 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 767.23 142.57 Tm (8) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 801.73 119.70 Tm (8) Tj -ET -0.000 0.000 0.000 RG -0.75 w -[] 0 d -717.35 372.96 116.41 -129.60 re S -1.000 0.000 0.000 RG -720.59 358.56 m 742.19 358.56 l S -1.000 0.667 0.000 RG -0.75 w -[ 2.25 3.75] 0 d -720.59 344.16 m 742.19 344.16 l S -0.667 1.000 0.000 RG -0.75 w -[ 0.00 3.00] 0 d -720.59 329.76 m 742.19 329.76 l S -0.000 1.000 0.000 RG -0.75 w -[ 0.00 3.00 2.25 3.00] 0 d -720.59 315.36 m 742.19 315.36 l S -0.000 1.000 0.667 RG -0.75 w -[ 4.50 3.00] 0 d -720.59 300.96 m 742.19 300.96 l S -0.000 0.667 1.000 RG -0.75 w -[ 0.75 2.25 3.75 2.25] 0 d -720.59 286.56 m 742.19 286.56 l S -0.000 0.000 1.000 RG -0.75 w -[] 0 d -720.59 272.16 m 742.19 272.16 l S -0.667 0.000 1.000 RG -0.75 w -[ 2.25 3.75] 0 d -720.59 257.76 m 742.19 257.76 l S -BT -1.000 0.000 0.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 728.05 354.34 Tm (1) Tj -ET -BT -1.000 0.667 0.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 728.05 339.94 Tm (2) Tj -ET -BT -0.667 1.000 0.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 728.05 325.66 Tm (3) Tj -ET -BT -0.000 1.000 0.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 728.05 311.14 Tm (4) Tj -ET -BT -0.000 1.000 0.667 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 728.05 296.95 Tm (5) Tj -ET -BT -0.000 0.667 1.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 728.05 282.46 Tm (6) Tj -ET -BT -0.000 0.000 1.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 728.05 268.03 Tm (7) Tj -ET -BT -0.667 0.000 1.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 728.05 253.66 Tm (8) Tj -ET -BT -0.000 0.000 0.000 rg -/F2 1 Tf 12.00 0.00 -0.00 12.00 752.99 354.25 Tm (SII) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 752.99 339.85 Tm (NNS) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 752.99 325.45 Tm (CID22) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 752.99 311.05 Tm (NU6) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 752.99 296.65 Tm [(DR) 30 (T)] TJ -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 752.99 282.25 Tm [(Shor) -40 (tP) 40 (assage)] TJ -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 752.99 267.85 Tm (SPIN) Tj -ET -BT -/F2 1 Tf 12.00 0.00 -0.00 12.00 752.99 253.45 Tm (CST) Tj -ET -Q +x\x9C\xA5\x9BMo]\xB7\x86\xF7\xF7W\x9C\xA5ԧ~s\xA7im\xA0F\xA9\xC8\xC2\xC8"Hդ\x86\x9C\xC2v\x8A\xA2\xFD\xF5\x9D!gȹҵ\xA29Y\xC4 +E\xBD\xBC<\x87\xE4<|ɹ\xB0\xBD\xDE`{\xB7}8}\xB3}\xD8R\xDB]\xDCJ\xD8#\xFE[\xE2^\xFC\xE6[ۓ\xDF>\xDEm\xDFm\xBF\x9C\xFE\xF8\xE9\xDB?\xB1\xBD\xBC9\xC1\xEE\x9Cۜ\xFA\xF7\xE6囓\xDBK\xDA\xFEsz\xFB\xFD涿\x9F`{\x8D\xFF\xBD;\xFD\xC1\xF6\xD7S-{ \x80\xDF}\xDCޟ\xA0\xD4=\xB9 +~N\xDC\xEEO>\xD4\xDD\xD7 +Z\xA1z,W\xBF\xB7\xB8\xF9\xD0F}\xF0\xFA\xB9\xCA-\xECU\x95#\xFE}\xF5\xAA\x9C\xFC^@\x95k\xEF\xEE,'W\xF7T9\xC4\x94>e\xB7W]\x8FϓU}\x86HϹ\xCA4\xABr\x81T\xFF\x8A{\xC2\xF6\xF0c}\xA1r(;\xE4 +Jޫ\xA3rq{*\xC4Dݺ?U\x97v\x87e\xE8ݺ?ݜ\xBE\xB8\xE5\xF9\xF1Ӆ\xF9\xF4#\x8E\xD7W\x87\xF7\xF6\xBEt\xAE\xFF\x8Cr\x8D{\xC4\xFF\xC78\xBFݾ߮\xE0z\xBB}w\xFA\xD3mo\xFAi-\x94Ի\x9B\xCD\xA3\xD8\xE3\xBBm \xC7:\xF8d_ڞ\xA9\x8DD\xEF\xCF(~\x878\xD5ਸ9\x9A\xEF\xC7\xC4\xBB\xEBQql{8,.e\x8F\xFE\xA089\xE7vTp\x81'\xEC\xF6a1.T\x9C1\xDE\xE5|T\x8CA\xB0}\xDB9 +\xC7\xC4Ź\xF0\x99q\xC4\2\x8BC\xA0X\xC5署\xC5\xD8m\x8F`\x88@\x8B\xCB(\xAE:U\ۛ;#\xD1\xB0td|.\xB04\xDFo]*\xEF7d \x8EUM\xB3\x9E\x8B9w|a}\xC0\xAE\xE1D\x90z.\xAEz\x94\xD4sqէX\xF6Vg=W\xFDY\x87f\xFFV\xBD\xC6\xC3\xE3\xC7\xC0W"*~.Gx\xEF\x9C!L7|ޤ\xD4ɢ\x8E\x80\xAF(58\x8B\x9C\xE0\x9D\xC3y\xD7 +\xCF\xFB>\xE5cZ`\x88\xC0E\xF6\x9E\xF7L!u\x98\xF7a;\xAFz\x85\xA3\xB4ji\xAE\x84U\xCDEU\xDF\xFC\xAA~W\xBD\xC7MA[\xF5\T\xF5\xB8k+\xAA~W=wW\xEAU\xEF\xF5\xBBQ/\xE4\x85zO\xB8NNk\xBF\xD7\xDC\xDF +\xFD\xF2ҫ}R>\xD3j`\xBD\xB7\xEBq\xF7\xA7>\x9A\xF5\xB4\xF1I\xF4ٮ\xAFU\xE2$\xFE\xB6\x9A\xF5T\xD1Ã\xB9\xC5K\xFAT1\xAC\x89 \xF7R\xF8\xEA[\xA6\xE8\xCB\xF3\xA2\xFC\xF1M\x8F\xBF;DW\x88\xE0P\xC9`o\xDF^}\xF5\xF1\xEEÿ\xEF~\xF9\xF1\xBF\xD7u\xDDv\xF5\x87\xED/\xFF\xBB\xFE~\xBB}\xFD\xCC\xE7\x87\xDE]\xE2L\x81\xD1\xE2w\xD7\xB7\xAB\xBB\xFE\xF4c~x!\xBCo\x9E\xC6_^zʙ\xF0\x92\x9D\xC6$f\xDA/c\x82#nh=^/c\x82\xF1݁2&\xC1\x92S\xC6˥(c\x82\x9F\xDE\xC7M\x8C\x89\xB43]\xC6\xA3/\xC6\xFBeLpƸ\xA6\x8C b\xAA2&\xD8 +Ә\xD4L\xDD^\xC6$W\xDAN-c\x92\xFD\x9EA\x93\x94FY\x8C F\xBF +˘x܂\xB6\xA6\x8D \xEA\xE32&\xE3>\xE3K\xD6\xC0<ۗ\xE0k\xBC\xED\xB6;\xD5*[Rq\xC0\xEC\xE2aK+M4\xA0\xD1\xC4\x{142988}\xBFN +M1\xD2fg\xA1)\xB9\x81BA\x85+\xB0\x88\x85I\x89\xADQ,L\x82$\xC1"\x96\xA3\xB2*!\xD6"\x96\xA3\xB2\xB6G\xF3۞L:\xF2\xC9¤8M\x8DE\xCCL\x8A}m[\xC5\xCC$\xDC,\xE7b\x93p\xA8\xBC3\x8B\x93\xA0U1\xE9\xF1`\xE0\xFAh\xE6\xB7\xCDL\\x92\xF6O\x96\xA32 +Q\xE6g\x9ELr\xE6\xB6\x95a\x8Cw\xA6\xE7\x83\xBF +%1R\xE7xt +\xB8\xE2\x96s" +5\x85'\xFC\xC4 +O9\x8Dp/x\xC2pI_\xE9dZ\xF7\xCA95\xFA\xB1\xF0\x84\xB8\xEA\xE1:\xA7\xEE ϮtbQxJ\xFD\xAD-<\xD1\xFE>+<a|\xF6gx\xDA#\xA9+\x9D@s|\xE1 q\xAA\xC2\xEDڝ\xC2z\xED\x9C&\x8EO\xDE\xD3\xF0\x9D]鴰\xF0\xF4p,\x9E\x93\x83\\xF6c^\<y\xDA2\xE1\xE0\xF1.\xC9 <\xF9\xBE$\xACb\xC6\xBB\xABV\xB1\xE0 \x8B\xF1d\xCBM\x8E\xA7\xB1\x8AO\xB6\xB2\xB7\x8A\xA7eJ\xB2\xB6\x88O\xBE/ \xABx\xDD\xE4\xD8'\x89\xE0) 1㉆;\x9AŌ'\k\xCE<\xCEOe\xE6g<axq\xE6I"\x96 w\x8C`\xFFd\xC6S\xF3\xF4\xE8F\xF1\xC4S\xCBd\x9E\xED\xE0\xADb\xC6T\xBA\x830\x8AOt\x8D\xF1`\x86\x9D\x87Dڽ\x9Fᩓ\xF4\x94\xD0\xF4\xE1,\xCF$A\\xA0\x84~|\xF79(\xE1\xB3D +\xA5(\xD0-(!b\xD0y@; \x95g\x90\xC6מ \xFF,'\xED\x99yk\x95g\xE8ǂ~L\xD6P\x820\xF4\xD33\x85\xA1\xE9\x99\xDCx\x9E\xE9\x99\xDA\xF0`%\xF4h^\xE7a\xFFz\xFB\xD33atk\x97\xA1D#\xF0|(aGØ +\xC9\xEE\x99p\xED\xF9b\x94\xC2tk\xF1\x82\x9F\xA6\xC4\xA5\xDCϬ\xADb\x86\x8ET\xB3\x8B%\xBD`W\xC4%_\xE4R\xC6"\xCF\xB2\x97\xB6\x88\x94x\xFF`\x94p*g\xF3\x9B\x9E \xA8\xF7V1C \xA7\xA7}\x86 \x94pϔ\xCDs[\xA0\xE4ځg\x9E\x9E\xA9\xAFu\xABX<S>\xB00&\x94O\xAB\x98\xA1D\xF6\xD6\xFC¦gJ\xE6\xF6\xF4L\xF0\xE8\x859G`|\xE0\x99(\xE8˽S\xFF\xBF3<al\xED\x99r\x9E\x80\xF1\xF0\x91\xB3\xC2Q\xA8\x85\xA7\xEAG\x9A\x9C\xE0 \xD7@m\xDA3\x95\xBE\xA7g\xF2\xA3^\xF04ˌ'ܧ\x9D}\x97\xB8\xF0\x84\xED\x81>қ/ip\x8C?\xE5\x99:\xBEO\xA2\x9Fx\x82q\x9B&x\xAA\x95.\xEC\x9Ep\xA3\xCF\xD2\xE0\xE4t\xE0 -W\x97+:\xE9\xA1x>\x9D\xD0\xB0\xF7\xB8x \xFC\xB4e\xCAQ\xB6\x951\xD3)\xD7j:\x8C?\xC5\xFC\xC9B'\x9Cr\xCDb\xA6.\xC2b~a\xD32\xB9}0\x88\x99Nt\xD2×c\xF1\xA0\xD3A1\xD3 \xBClh +b\xA1\x808+\x88\xE6a\x9Eq\x97v)\xED\xE1\xF1k7\xD8$\xF4c\xBD\xBBMr=W\xC4(\x9BD\xB3ț\xC5l\x93\\xA6Q0\x8AD\xBE\xA7\xB4X\xC5rv\xD7d\xE3n\x8BM:"VWK|DaK\xBA\xC3!\xB1\xA4;\xA054Om1\xCDC5mR\x95\xD0h\xCBՒ\x97\xE8f3\x88r\x94\x93R\x83X@\x84\xD1綀C$\xB3\x98\xD3\xFCL\xA46\x88'\x88\xB2$ZX\xC4"\\xD9<\xB7\xE7\xD9]\x92\xABb\x83x\xA5;\xC4Z\x9D\xF9u\xC1%=H\xCC\xE3t\x87ܯ\xB7\x92b>\xFB\x8A\x90/=wP\xA5;02I\xF4\xB5\xAF2\xF1h\x9B>\x905\x90\x949w\x86\xA42\xD2!\xE6\xD1]\xED\xE9\xB6I\x92n!Hʉ\x8E\xA2\x92\xCAHg\x98Hb/6\x8F\xEE2{!9\xBAc\xEF4\x8F\xEE\xD2@\xCA\xF4Fi\xC5 \x92\xE8\xD7\xFA\xE8.Ł\xBC\xE9\x8D\xF2\xF0^\xF3\xE8.d\xA9t\x87CL"v\xF2)\xF0\xC5ק\x99D\xF9\x81\xC1*&\xE1\x93e0\x8B%ݡQ\xBC3\x8A%\xAF6r\x96V\xF1`\xD0\xC8f\xF1`\xE4y\xB7bO&\x85=\xD8\xC5rt\xE5n\xC5"f&\xAD\xB4\x83x2\xC9Q\xA4\xB5\x8A\x99I)ȑ\x8EE,L\x9A>\xD6"s\xE4)P\xC53\xDDa\xDA2\x8B\x98\x99\x84\x80hv1\x9B\xA3 +\xE2\xE9ba\xB6\xE1\xCC\xC1`2\xC9\xC9\xEE\xD6"\x96o\xF9ݞ\xF7I\x8D\xEEE\xCE\xC4z\x9B\xEEAi\xA0\xA8\x8C\xFB#ήو\xB6\xE0{\x84\xF9x\xB7}\xEE;\xB0\xFDAj= \xA0my\xBFʍ\x9B\xE5\xFB͚\xAB.\xED\xE1t\xDD\xDE(S{\xB6\x8CBi\x8F\xBAno\x94G{ǒA\xA4e22\xBA\xE5Q~\xDC\xF2o\xDD\xE3I{\xAE\xCE\xD5\xDE(\xAF\xF6\xECG\xB0\xDC2e\xC8\xEB1\xE2\xB2n\xF9)\xFF,\xAD62\^#\xF3\xDC͏\xB47\x8E\xF6V{\xA3\xCC_\xCE9\xF4=\xDF\xE2\xFB\x97U\xEEx\xAE\xBFaw(E_\x9A\xF3\xAEJg\xC7J\xB1\x94&\xFD<\xA8gMH\x8B\x91&\xE4\xC03~\xB6\xC9g^jr\x93\xBEeڧ<\xBCNx<# +MV/Y]\xF9B\x93\xA6\xFD\x9B4\x89\x96\xCF=vm\x87\xB6\x84\xD2\xE4e\xE8>\xA9\xCFi2\xF5D1\x9A\x97\x9C\xB6x\xF3\xEA\x95,MRc\xB9\xB1\xCBq\xBE\xC5!\xF9\xEAKo\xC9\xE7pv1\xDF\xFC\xCDr\xF47\xE44\x93r\x97\xBF\xBD\xFA\xF2\xDB\xF1U\xA8ۋ_\xA8z\xBA\x99\xEA\xF9%\xBE\xBD\xBA\xF9\xF9_\xAF\xB7\xB8\x83\xBF\xFA\xF5\xEB\xEB\x8D~\xFE\xF0\xE9\xD3?\xDDh\x96v<6_\xBFzc:\xBA\xC7\xE1\xB7{s+\xF2oN\xFF\xC7\xCE" endstream endobj -116 0 obj +126 0 obj << -/CreationDate (D:20110901175810) -/ModDate (D:20110901175810) -/Title (R Graphics Output) -/Producer (R 2.12.1) -/Creator (R) +/Alternate /DeviceRGB +/N 3 +/Length 2596 +/Filter /FlateDecode >> +stream +x\x9C\x9D\x96wTS\xD9\x87Ͻ7\xBDP\x92\x8A\x94\xD0khRH +\xBDH\x91.*1 J\xC0\x90+\xCC@\x84\x85\xC8R\x87t C\xC8\xB2\x85X\x90\xE4CP\x94%CBH@\xEB\xA0R\xA8\xAA\x86\xEA\xA1f\xE8[\xE8(t\xBA+?\x81\xA7\x80:\xA2\x8B0\xC2FB\x91x$ !\xAB\x90\xA4i@ڐ\xA4\xB9\x8AH\x91\xA7\xC8[EE1PL\x94\xCA\x85⢖\xA1V\xA16\xA3\xAAQP\x9D\xA8>\xD4U\xD4(j +\xF5MFk\xA2\xCD\xD1\xCE\xE8+{{{;\x8E}\x83#\xE2tp\xB68_\<N\x88+\xC4U\xE0Zp'pWp\xB8\xBC\xDE\xEF\x8C\xC5\xF3\xF0\xCB\xF1e\xF8F|~?\x8E\x9F!(\x8C \xAE\x84HB*a-\xA1\x92\xD0F8K\xB8KxA$\xF5\x88N\xC4p\xA2\x80\xB8\x86XI<D<O%\xBE%QHf$6)\x81$!m!\xED'\x9D"\xDD"\xBD \x93\xC9Fdr<YL\xDEBn&\x9F!\xDF'\xBFQ\xA0*X*(\xF0V+\xD4(t*\Qx\xA6\x88W4T\xF4T\\xAC\x98\xAFX\xA1xDqH\xF1\xA9^\xC9H\x89\xAD\xC4QZ\xA5T\xA3tT\xE9\x86Ҵ2U\xD9F9T9Cy\xB3r\x8B\xF2\xE5G,ň\xE2C\xE1Q\x8A(\xFB(g(cT\x84\xAAOeS\xB9\xD4u\xD4F\xEAY\xEA8 +C3\xA6\xD0Ri\xA5\xB4oh\x83\xB4)\x8A\x8A\x9DJ\xB4J\x9EJ\x8D\xCAq)\xA1\xD1\xE8\xE9\xF42\xFAa\xFAu\xFA;U-UOU\xBE\xEA&\xD56\xD5+\xAA\xAF\xD5\xE6\xA8y\xA8\xF1\xD5J\xD4\xDA\xD5F\xD4ީ3\xD4}\xD4\xD3Է\xA9w\xA9\xDF\xD3@i\x98i\x84k\xE4j\xEC\xD18\xAB\xF1tm\x8E\xCB9\x87\xE7\xDCք5\xCD4#4Wh\xEE\xD3М\xD6\xD2\xD6\xF2\xD3\xCAҪ\xD2:\xA3\xF5T\x9B\xAE\x{D85D}\xAA\xBDC\xFB\x84\xF6\xA4U\xC7MG\xA0\xB3C\xE7\xA4\xCEc\x86 +Ó\x91Ψd\xF41\xA6t5u\xFDu%\xBA\x{17A0FA}3z\xC6zQz\x85z\xEDz\xF7\xF4 \xFA,\xFD$\xFD\xFA\xBD\xFAS:!\xAD\xB7 +\xF1\x86,\xC3\xC3]\x86\x{46BCD30D}b\x8C6u=2V30\xCE7n5\xBEkB6q7Yf\xD2`r\xCDc\xCA2M3\xDDmz\xD96\xB37K1\xAB12\x87\xCD\xCC\xE6\xBB͇-\xD0NB\x8B\x8BLӓ\x99\xC3le\x8EZ\xD2-\x83--\xBB,\x9FYX\xC5[m\xB3\xEA\xB7\xFAhmo\x9Dn\xDDh}džbhSh\xD3c-\xC6\xF6\xDA\\xF2\߹\xAB\xE7v\xCF}ngnǷ\xDBcwӞjb\xBF\xC1\xBE\xD7\xFE\x83\x83\xA3\x83ȡ\xCDa\xD2\xD1\xC01ѱ\xD6\xF1\x8B\xC6 +cmf\x9DwB;y9\xADv:\xE6\xF4\xD6\xD9\xC1Y\xEC|\xD8\xF9\xA6K\x9AK\x8Bˣy\xC6\xF3\xF8\xF3獹\xEA\xB9r\\xEB]\xA5n\xB7D\xB7\xBDnRw]w\x8E{\x83\xFB}\x9EG\x93DŽ\xA7\xA9g\xAA\xE7A\xCFg^\xD6^"\xAF\xAF\xD7lg\xF6J\xF6)o\xC4\xDBϻ\xC4{Ї\xE2\xE5S\xEDs\xDFW\xCF7ٷ\xD5w\xCA\xCF\xDEo\x85\xDF)\xB4\x90\xFF6\xFFZ܀怩@\xC7\xC0\x95\x81}A\xA4\xA0A\xD5A\x82͂E\xC1=!pH`\xC8\xF6\x90\xBB\xF3 +\xE7\xE7w\x85\x82Ѐ\xD0\xED\xA1\xF7Ö\x85}\x8E \xAF aQѿ\x80\xBA`ɂ\x96\xAF"\xBD"\xCB"\xEFD\x99DI\xA2z\xA3\xA3\xA2\x9B\xA3_\xC7xǔ\xC7Hc\xADbW\xC6^\x8Aӈ\xC4u\xC7c\xE3\xA3\xE3\x9B\xE2\xA7\xFA,ܹp<\xC1>\xA18\xE1\xFA"\xE3Ey\x8B.,\xD6X\x9C\xBE\xF8\xF8\xC5%\x9C%Gщ1\x89-\x89\xEF9\xA1\x9C\xCE\xF4Ҁ\xA5\xB5K\xA7\xB8l\xEE.\xEE\x9Eoo\x92\xEF\xCA/\xE7O$\xB9&\x95'=JvMޞ<\x99\xE2\x9ER\x91\xF2T\xC0T\x9E\xA7\xFA\xA7֥\xBENM۟\xF6)=&\xBD=\x97\x91\x98qTH\xA6 \xFB2\xB53\xF32\x87\xB3̳\x8A\xB3\xA4˜\x97\xED\6% +5eCً\xB2\xBB\xC54\xD9\xCFԀ\xC4D\xB2^2\x9A\xE3\x96S\x93\xF3&7:\xF7H\x9Er\x9E0o`\xB9\xD9\xF2M\xCB'\xF2}\xF3\xBF^\x81Z\xC1]\xD1[\xA0[\xB0\xB6`t\xA5\xE7\xCA\xFAUЪ\xA5\xABzW\xEB\xAF.Z=\xBE\xC6ó\xB5\x84\xB5ik(\xB4.,/|\xB9.f]O\x91Vњ\xA2\xB1\xF5~\xEB[\x8B\x8AE\xC576\xB8l\xA8ۈ\xDA(\xD88\xB8iMKx%K\xADK+J\xDFo\xE6n\xBE\xF8\x95\xCDW\x95_}ڒ\xB4e\xB0̡l\xCFV\xCCV\xE1\xD6\xEB\xDBܷ(W.\xCF/\xDB\xB2\xBDscGɎ\x97;\x97\xEC\xBCPaWQ\xB7\x8B\xB0K\xB2KZ\\xD9]eP\xB5\xB5\xEA}uJ\xF5H\x8DWM{\xADf\xED\xA6\xDAy\xBB\xAF\xEC\xF1\xD8\xD3V\xA7UWZ\xF7n\xAF`\xEF\xCDz\xBF\xFA\xCE\xA3\x86\x8A}\x98}9\xFB6F7\xF6\xCD\xFA\xBA\xB9I\xA3\xA9\xB4\xE9\xC3~\xE1~遈}͎\xCD\xCD-\x9A-e\xADp\xAB\xA4u\xF2`\xC2\xC1\xCB\xDFx\xD3\xDD\xC6l\xABo\xA7\xB7\x97\x87$\x87\x9B\xF8\xED\xF5\xC3A\x87{\x8F\xB0\x8E\xB4}g\xF8]m\xB5\xA3\xA4\xEA\\xDE9Օ\xD2%\xED\x8E\xEB>x\xB4\xB7ǥ\xA7\xE3{\xCB\xEF\xF7\xD3=Vs\\xE5x\xD9 \xA2\x9FN柜>\x95u\xEA\xE9\xE9\xE4\xD3c\xBDKz=s\xAD/\xBCo\xF0l\xD0\xD9\xF3\xE7|ϝ\xE9\xF7\xEC?y\xDE\xF5\xFC\xB1\xCE\x8E^d]\xEC\xBA\xE4p\xA9s\xC0~\xA0\xE3\xFB:;\x87\x87\xBA/;]\xEE\x9E7|\xE2\x8A\xFB\x95\xD3W\xBD\xAF\x9E\xBBp\xED\xD2\xC8\xFC\x91\xE1\xEBQ\xD7o\xDEH\xB8!\xBDɻ\xF9\xE8V\xFA\xAD\xE7\xB7sn\xCF\xDCYs}\xB7\xE4\x9Eҽ\x8A\xFB\x9A\xF7~4\xFD\xB1]\xEA =>\xEA=:\xF0`\xC1\x83;cܱ'?e\xFF\xF4~\xBC\xE8!\xF9ań\xCED\xF3#\xDBG\xC7&}'/?^\xF8x\xFCI֓\x99\xA7\xC5?+\xFF\\xFB\xCC\xE4\xD9w\xBFx\xFC20;5\xFE\\xF4\xFCӯ\x9B_\xA8\xBF\xD8\xFF\xD2\xEEe\xEFt\xD8\xF4\xFDW\xAFf^\x97\xBCQs\xE0-\xEBm\xFF\xBB\x98w3\xB9\xEF\xB1\xEF+?\x98~\xE8\xF9\xF4\xF1O\x9F~\xF7\x84\xF3\xFB +endstream endobj -117 0 obj -<< -/Type /Font -/Subtype /Type1 -/Name /F2 -/BaseFont /Helvetica -/Encoding 118 0 R +130 0 obj << +/Length 1788 +/Filter /FlateDecode >> +stream +x\xDA\xCDXm\x8F\xDB6\xFE\xDE_t\xE6`\x8Dkɖe\xEB\x80\xEB\xF5\x8A\xDE6\x86&\x8A\xB5\xFD\xE0&\xCE]\x80\xCBK\xF3\xD2v\xFF~Iْ\xAD\xE4z]\xEC\x83\x99\xA2ȇ/"%?\x9B<x\xFC"\x832.s\x99&\xF3\x81\x96-\x928I\xF5`2\xBC\x8D\xF67Cm\xE1\xA9wf\xB4\x86\xE7\x9E\xD9\xF0\xFD\xE4\xB7\xC7/ +g\xA5q\xA1\xD5 \xA1u/\xEBʬZ\xC0\xB3\x82\xE7z8J\xD3ԕ?7kS2\xBA\xADa\xFCi(\x8B\xA86\xD4GD]\xAC\xE8\xA4g\xA4Ӄ;b\xAD#4\xA9H\xF7\xADA\xB9ç\x87RʸL2\x8B\xF2|m\xC0\xCD\xF03\xDD3\\xC2@x +\\xC7\xB6\xC2\xE0[\x93\xFC\xE6\xBD\xE6e\xE0M'\xF4A\xE8Ń>G\xE7|\xE0\xCE\xE2L\xF7\x8Ba\x91E\xCC*\xA2\x83Q\xBB\x9A2ʚQU{R\xFE\xF9\x86'\xA6C\xA9\xC1"$~\xAA<\xAAn\xEDb\xBBE\xD2xc"\xB56K>\xF1z\x83\x9A\xA3\xF5.Q 1\x8B\xE8\xE3\x81\xB6\xC3b\xEEz\xA4\xEC\x99{\xBB\x8Eda\xE8+$>\x85\x9F\xC9+\xC3\xF3\xFA\x86 Z\xDDE\xF0ܵ\xAC\x8DJ\xCCQ\x9A\x84\xD22/\xE7\x8D\xE3\xC6\xC0z M\xE2\xE7\xF1\xCFÑ.T\x89\xBCޣ5\x9EwL\xF4FBi=%qS+\x81'a\xDD 5Ñ\x9C\x86ɲOI\xA6=Z\xD3NX\xB4\xE2\xF7\x82{\x84L&\xA5 +X\xA3\xC3@r64`\x8D +\xC3V\xD8£\x99\xD8\xA4\xA9{\x9Ac\xB7\x93=8\x9B\xBDT\xF4\x85ow\xF9\xF2{ӾƘ%\xB1w\x8C \xB0_\xE2\xBB=\xB4Tx\xAD|\xA6r\x85\xE6\xBE\xD0\xDA`\xE0\xC1\x863z\xCDN\xB3\xB2V,\xBBv\xF4\xD1\xC1\x82\x9E\x87\xA7\x80\xA3\x8Ec\xF6\xFC\xC8:\xA7t~\xA3M\xE7l\xD7\xE4.\x9B\xEC\xE1\xA2;ϵf\xCB\xFA\xACg\xD6n\x9Cp"\xB3,\xB4\xB6\xEB\xC0\xF3\xD6\xD9\x9Dj\xF2\x84\xF7\xE1#\x91\xB6\x99\xF4\x9E\xC9һ\xDF\xF8\xFD\xC4t@S\xBE%\hu{\x94Y\x90 \xB4D\x8B\xEEa\xCBO\xA1*\x96\xB29f\xB3\xA4\xAB\x80$\xA1\xE2\xFA\xC9=%M\x8EI\xBA&\xDC}\x91\xA5X\xDD\xDE\xD0\xEB\xF6\x9B\x80 +]\xC4i\x92\xDFK\x85\xF5\xDCQ\xF1\xDAQ\xF1\x873\xFE\xDD\x9F9\xE3\xCB6\x97\x9C,gMΏ\x84\x96\x80\xA8\xF0SO\xB0e\xB2\xE95\xF4\xEE\x8E5\x8F\x8D\x8A.͌G\x9CE&1\xCB0\xCD@\xF2\x8BӘ2&iD\xE0Rn\xDF\xDDښ|\xA9q6\x9F\xF4,n\xADʜ15(\xDF\x96f\xAD-;\x82\xB4~\x9F\xEBy@\xB6\x9C\xE2\xDE\xE6vH\xE2H[\x9D\xC9 'd'dm\xD0l\xBB\x95\xAC\xEE49뻢\xDB\xD7ŝɐ\xE2\xD3#ɾ+\xF2\xBE+T\xA8\xC3e\xFE\xC9\xC8uE\xEA\x8Ce\xC0\xB2o\xB3\xF6\xC3\x84,\xFB\xAEp\xB9W>)\xEF{'\xEF\xF6E\xCB +\xE5)\x93\x8E\xF9\xB6 \xC7 +\xFCnmu ++\x8F\x92;g7z/\xFBl\x89\xAF#\xB9yP\x84H\xE3\xD9oE\xC7x6\xD4 +\xA6:N\xB6U@7ڂ4\xBB\xAC\xCB&\x90\xE9\x9D\xD6i,$w\x91\x92\xBEL\x93\xE0u\xC8m\xF2'\xEFCt\xE9\.\xBD^g\xA5\xF1>{\xCB\xCB\xDE\xFBX2\x84G\xC8Sg\xB7\xA8\xFEu\xB5or\xD3އ\xBD\xEFx\xBD\xE6/\xE6:\xAA\xED\xD5ջź\xB7\xEEq\xF3m\xAE\xFD\xA8\xC6_\x88\xF9\xFBsBh\x84\xA0(c81\xD9n\xFE$\xF0i<\xD6\xED^\x95d\xE1\xFB\xB1\xC8E\\x882p?\x96wߏ\xE5\xFF\xE3~,\xFF\xEB\xFB\xB1\xBD\x99m\xFC\x93mֿ+ +N\xA8\xEF{\x8D\xFD\xD7\xD7\xEC#F\x80\x8F\xDC:\xCEMɿ\xF9 +{F\xE8r\xDDud'\xBFS\xAB\xA4ďdY\xDE\xF4S\xE0{p1y\xF0߃\xE3\xFB +endstream endobj -118 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] +137 0 obj << +/Length 1424 +/Filter /FlateDecode >> +stream +x\xDA\xC5X\xEBo7\xFF\xEE\xBF\xE2\xD0\xC8\x8B5\xBD\xC1:\xA0\xE9R \xDBP`\x88Wy|H\x93l5\x90\xA4]\x9C>\xFE\xFCQu\xA7;Ɏ\xBDd\xD8\xC2<\x9A\xA2HJ\xFA\x89\xD4\xFE|\xF2\xC3kMG\x9C溙\xFF\xD9\xDEF \xA6\x99_6'\xED\xF7ә\xB1ʵ7S\xD6^\xDD}+\xA2\x94\xAE\x8B\xA3}\x965\x9D\xCE\x95\xA6U\xC0K\xE4%ʕ \xBF^]L;V\xF6\xEC,\x8A\x86\xFCr+\6T<\x9F\x8D\x88*\xB4\xA0\xCAn\xE2q\xEFtJ\xC5Z\xC5\xD0G\x85\xDB0w@\xA1!QE\xE3ߦ\xE3+>\x8A\xDEG\xB5\xC2G\xBE\xAD\x8F\x90\xE8\xAFD\x99Ε\xC2H\xA9\xB7\xE1\xF4\xC4 +\x94\xA3\x92 +\xCEh\xFF_\xB9G\xD6\xD2\xD1=\x8BV\xD3\xFA\xDA,\x819\xF4~\xBAh\xD1V\xEAhp\xFE!\x80\xC2L\x88\xE8c\xC0\x8B[\x8FH\xE7w\x97^\xCC\xDBe\xC44nگ\xCB( +w\xA4i4q\xD0\xDB\xE2D[\xD5\xA2Y\x87\x96\x85-\xA6\x89\xE4\xFE\xFE\xE9\xB5r\xF7\x9Fp\xE2\xA8+ -D\xC2\xE9\x8A\\x88Ms!\xD6\xE5BŷH\x85\xE2\xC1VZ(\\xD2\xE3\xE0\xB0/\xB4+`/ơV\xC4\xC1\xFF\x978X\x80\xCD.\xC9*\x98\x96k\x{1BC113}Ʒ\xDE\xF2pa\xC7dp\xAC\xC2$\x83m\xE0dZc\xC0@\x9F \xC6e{J-8v\xE5A\xE7\x9CH\x80\x9Ek,\x82\xEE=\xCA~\xF4\xD8c\x94,\xAC\xFD楾|\xFBt}U\x87r"9^\xEF?\x86\xAFЂ\xF2\x8D\xAE+\xEF\x96\xC1\xD3X\x9By\xBAo\xB0\xD1\xDCE2\x93\xEE\xBD\xFE>ڭ_\xF7\xEBŢ.\xE6\xA58ܩ\xB9,\xA3\xFE\xAF5\xDDbջ\xC0\xDB +\x9DS\xA7*ј\xBA#zt\xE9fѨ\xBA۪\xE26\xC8b\xF1\xCDF\xBA\x9B\x84\xD3\xDDi\xB8@ˬп\xEE\x8A\xFDah\x83\xFByU.\x9FZV +Fo߭\d\x9D\xC3\xD4_ۡ|\xD7/\xC6")\xB4u\x97ٺE\xDBW\xD9|G@\x87H\xFF\xC5\xAB\xE2y\x8Es.\xD6\xCD\xF9/cz\x85q\xCD\xD9\xD9\xDD\xE1|\x9Fq\x9E\xCB\xFE\xE0\xD4ah}ӗ\xCE\xC0M\xF6\xF0\xEEf$\xEE\xA43\xF3$*+Tl\xF3\xB6\xEEٓu\x86\xFC\xC9:í| +\xA7\xEFkD\x8Fn\xEF\xB0D\xF4\xB8\xFD\xAE2\x85\xB1DP\xBD\xD5\xDE\xD4\xCF\xD9dS\xFC\x96\xF1\xBFf\xFCˌ?\xEC\xE27\xCB˾S\x85\xC2<\xB2E\xAB\xDA\xF5Q\xE3+\xF1f\xD8c +d\x9E\x9F\xE1."\xA1\xA9ʼKC\xF0/:B<+1/S\x91kU"r\xFD\xBB\xCD\xDESL)\xD2evF\x85\xAF:jXR\xD2Q\xF8 X\x96\xFCN\xB1恹\x95\xE2Q\xED\xBF]\xB9#\xB1\x99(\xDF\xB6&\xAA\x8Fy\xB3\xA3\xE0\xB3W\xA6\xBE\xBA\)N(`\xBA٪\xB24l\xAC\xC62'Ń\xD1\xC5G\xA0\x87D\xB4\xCC +\xDB\xE41/[\xEC\xC9^\xB6d\xF6\xB8)\xB2Ӣ\xB6z\xD9\xFA2U\xBA=\xF7\xA5\xD0g|\\xFAkJAnBqt\xD5\x89\xBEL\xC5G1\xAC\xBF\xBAw\xB1\xD8܄\x81\xA9\x9D\x8E@Ŕn\xF3\xBD\xD2aN\x8C\xB6]3M\xA1\xA3\xF7\xFBN;\xE2\xDB\xC1\x88\x84\xAB\xB6\xD4\xFF+endstream endobj -115 0 obj << -/D [113 0 R /XYZ 71 757.862 null] ->> endobj -6 0 obj << -/D [113 0 R /XYZ 72 145.614 null] ->> endobj -112 0 obj << -/Font << /F60 107 0 R /F67 109 0 R /F8 106 0 R /F62 108 0 R >> -/XObject << /Im1 111 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -122 0 obj << -/Length 2476 +144 0 obj << +/Length 1180 /Filter /FlateDecode >> stream -xڝY[o\xDB\xC6~ϯ\x8C>P8Cry-N\x90\xB8\xEA\xA20\x8AZA\xDA>0\xE4\xCA \x91\xAA(\xC5N~}w.{)\xDB=\x94\xB4\xDC\xD9ٙ\xD9o\xE7\xA6\xCB7\xEF>\x96\xB3*\xAC\xF2$\x9F-W\xB3"\x99qF\xA2\x98-\xDB\xD9\xC1v\xFD0\xCCi\xAB\x8Cv0\x88\x83\xF7\x9DtR}<\xF1\xFA\xFA3\xCA"\xF5z6\xEA\xD9\xC2\xC77\xC0\x9A\xA2\x83ɵz$ -\xFB\xBD\xA6\xDE\xCE\xFFZ\xFE\xFC\xEEc^8\xC2\xC5e&e2\x8B\xD9\xD43\xE0\x83\xE4\xAE*IFE\xA1\x89k\x90\xFDᴃ\xBByR\xE2\xFEo\xD5ީjر%9V\xC0\xF4@\xFA\x9E\x8C\xFC\xFD ->:V\xA0\x8AX\xA3\xD0H\xFF\xB8K\xE2\xF0\xD9e\xFD8O\x8A@2\xAB\x875\x8C\x8E(:\x92\x82\xDD`"\x8E!\xA83[$q\x8A\xAC\x9A-\xE28\xAC\xB2\x8C4\x815\xB0c݁\xE2+\x89Åe?\xC1\x86\x8DgK\xC59&\x82z\xAF\x86\xF0\xFA=s٠\xD0\xD22\xE8\x99Y\xCB,\xFE\x8Cb\x81{lX\xCB\x98O\xB4$\x9A\xBE~\xE0\xE5 -\xED\xC8zY34\xCDȐ\xA0\xE1C\xA6Oմ\xA2\xF9\x8AR-\x92"i\xBF\x82\xEF$\xF8\xB5l\x80n\xAD5I\x82z\xB0R\xA2́\xE5\xFD\xACV\x90\x99["!\xB9\xF1\xA7\x87Yx\xF1\xED\xF9&$\xC1iЇ\xBBXBbܰ]Rg\x97\xCFx"v|\xF9\xB0\x815\x98»!\xF0\xFD\x8D\xDD\xB1pn\xDAd\xAF\xE8B\x96``KT\xB7ߜ\xA4\xC8ü*\xF5e\x80]v\x85\x9E\x81 \xB2\x98\x80t*²0I\xCB\xC0\x96\xFC4h\xA3TE\x8A\xC4,z;\xC17w\xB3\x9B\x8E/ņӡ \xE7\x9D\xE4a\xBD\x9E\xA3>\xBB\xCB9\xF0X_\xBDv\xBCC\x9A\x87U\x99\xDA(<u\xED\x94Q\xB20\xE9k\xB9(,m\xD6\xC7\xF1&\x8D\xF2\xB0\xC8\xFCp\xB3\[\xD5\xFD\xED\xA20ͅ{|F[\xC5*\x88\x95&\x9ÇP\xABú\xDC\<\xFF-\x83ңˑ\xACn58\xBFg!#gou \xC24M\xD47\xE8\xCB*\xFDo\xBE\xC8\x81\x8E\xE3<[\x89\xB1i5a\x8EU\x8F 4+-\x86r|-bB\xBE\xC6\xD4(\xA6>y\xC3\xD8G\xACy\xBDrV\xFFm_\xEF\xF8\xD5\xD1a\xD8>g\xCAF'\xE7\xCE 5\x97Mj\xB5C\xB2\xE0%\xBDBm\x8A\xEC\xD7g#\xEB\xCA7\xCFY(\xBBr\xB8I\xDE\xC1M\xE1V\xAB\xDEAW\xCDi\x81\xCB\xFD\x99\x90\xAFKX\x9F\xB1(z\xAC\x9A\xD1X\xC3;~\xEE\xC7\xE2^\xF3\xFAՓ\xF0sFr\xC7\xC9G>\x9E\xFA\x91s\x93\xE5x\xEA\xDE\xC1\x85\xD6\xECW\xD6N#\xAC\xE63\x92\xD3\xCBe\xD9\xEE^\xD2\xEF\x9A,/\xDA\xF9u \x97k\xEB\x8Fs\xA8\xFE\xE3\xE0\xE6}\xE3\xB8#\xE5\xA9\xE3\xB0P\xCEדD\xDB\xE9|Fn\xF8\xCCi\xFDNi\xA4I8Mq$/\x96@\xA6Ҫ1\x8Da\x9B\xC6g\x9B8\x9E\x96`a\xB5)\xA6\xA3r\xB6\x8A\xBA\xF7\x8AB]d,D&\xBCTG\x94Y\xE8\x94싮\xB7\e\x95\xB5\x99\xC0\xE2E\x91GSU\xD6|\xBD.p\xC0U]\xBDc)"\xFE$:\xCAn\xEA\xADy\x83\x96<@\x9F\x8Ce\x91l}\x8A\x8A\xE8\xF0\xD0{\xCB1\xD3\xCBav۟\x8E\x86\x83KS\xB1VFl\xAB\x944)x\xA87\xD93\xE7|\xBA -@\xE5Ӗݖt -\xE9\xF7I\xD0~\x988\xE4E\x92\xAA\xB2\xB4Plջ$;˖.\xA5J\xEAge2\xA1\xBBÇ\xF4;\x8D9V]LRT\x90\xD4\xFE\xD1g\xCA\xF9fg\xBB\xD3RҎ\x9E\x94G\x8B\x86\xAF,Vw\xC5\xD4\xE5?\xC9\xFAp^\x86 -\x97[\x9D\xE8&\xC1\x96\xB1t&\xB66\xEB%\x99yWO\xE6\xEDsi\x9C\xCA\xD4"\x93\xF3]c\xCBH\x93]\xE9ΙM\x98g-jG\xDAޱ8\x98\xE7\xDC\xE2AA\xA2\x90茵4c\xB9\xD30-̥ǖ\x86\xAD}liD\xA6\xA56ۑ6\\x9B\xD8ͮ\x81\xB0\x9C3\x96\xA5U\xA4v\W:n_CWW\xDC:29\xC6ɉ\xBD\x9A`\xB3r\xAD\xF0\Q+\xB1f\xFE -h>\xDDx)\xE4\xE8\x81\xBC\x93\xDEI\x9B̀Ӝ\xAA\x94\x95s\xCF[\xEAh\x84\xE6\xA4C\x8B\x9Fc\xAAŨ\xB9\x81\xCBZ\x8B;\xE3\xDBHB\xFB\x936\x99\x9C\xE9\xCC\xE1\xA940\xED$X4\xBD\xA9q\xBD\x97 \xE1%\x9A\xE0\xD1c9\xB80)\xD0\xC1\xDE(.S)C\xC1s\x84N\xF1\x98$42\x87S\xA7\xC1f\xF5Nc\xB33\xD1\x93\x88#\x8Df·\xE5q\x98Ŧ\xC2Y\xCEK\xC1\xCDd\xC0\xE2\x8A꓅\xC8c[)4N\xDBQ\xCDDna\xBC\xE3\xE6\x97\xC9\xC7x[\xE4\xF0\x88ʜ\xF7?ݔC\xE4%\x85\xBC[F\xF05Nث8\xB4\xB4\xE7\xFD-b\xF7\x96\x88v\xB2L\xF9\xEF\xB6\xF4q\xBB\xA3;i\x85%c:-\xBF\xD9*\xB4CU\x8B8\xB0x\xA2\xFB9\xD5V%\xAB -\xD6\xC672)x\xEB\x92\xAA\xAD\xB9\x8BGי+s<\xAE\xCD -\xD7b\x94\xC2t\xA4\xCA\xD74d%\xEA\xBA\xFE\x9B\x82\xB1\xDBxRC\xFD_\x87\x{169B5E}\xCFaI\xCDNxk\xC5\xD04\xFA\xC5\xCAk\xB7\xCAN\xFF? Rfi5ٽ5y\xAC\xEE\xDE\x8B\xDD[\xFA\x97\xFF.\xA1փ\x93Z\xB707\xF6\xA3\xF4\xDF\x9F\xBE\x9Bcp\xD3@\xAA9g\xC1\xE5\xA6w\xAD\xB9\xD2/\xC6\xE3\xEE\xDD^B\xE7\xFF\x89\xF3\xDAT}\x90g\xE9\xFD\xA5n\x8E\xBD\xB4M\xE2\x97\xDA9&\xEDj<ٓ\xFE\xE7d\x8FP\x95\xA3D\xB25;\xBD\x9B'\x9Ax\xCF\xFE8Oft\x9A \xDF#\x96ظ)\xC32\xA9h3(\xC3x\xAE\x8E=I\x83\x9B'\xAE\x9Dv{\xDD\xF6/\xD4\x85?\xC2b\xFA\xED!\xB8H\x83\xF7X\x83\xDE\xD2\xE0^-\xC3i\xA2\xFEs\a\xB5\x9E\xF9\xB2e\xBE0\xCEБb\x81\x86\xA3Y_\xBE\x97[I\xE4=\xD3\xFA\xDF\xFC\xF4%x\xB9\xE7\xF4R\xE6Y\x93\xFD\xFB\x86\xCC\xC5\xE6\xC3D\xAF\x9F\x81zp|\xFA.Nt>-\x86\xE3\xE0;G\xFB/[\xFC\xE1\x9F\xDAN\xBFg\xA48G,\xACE\xFF\xF2\xB1`éW%\x95XE\xCA\xCF\xE7iX(\x81z\xA0{s\xB3|\xF3\xB9\xA1 +x\xDA\xD5X\xDBn\xDBF}\xF7WN\x82\x92\xA8H\xF3"^T4Z#FFѨ@\x81\xC4\xB4H\xC9l)R\xA5\xA88F~>;;\xB3ˡHJΥ}Xq/\xC3ٙ9\xB3\xB3\x87\xFAeqvqz\xE7A\xE0M\xABI\xE4M"ױ?\x9A,\xD2\xC9[\xC33]Þ\x99\x96\xEBz3\xE32\xA3b\xB9/\xC4\xBAM.~ʵi\xF9Q`\xBC\xB9Oǀ\xDFhf\xAC\xC4J%Z\x8D\x8B \xCE\xEE\xC4L\xD6`\xBFZ\xE1s\xAB5e\xA5鋮\xE8\xED\xCC\xDB\xC5닫x2\xB7\xE7\xA1\x82a\xCE\xC4\xF2\xE6\xB6?C\xB3\xAE\x84\xBCR\x83Fxc*\x94\xF9\xBE\xF1`z\xB1\x91a\xBF\x95Y +O\xCAT8\xD6WI\x8A\x98\xBFAn\xC1\xB3\x86\x94{\x84\xB6\xE4\xA0NzUo\xB4PU\xB6ړ\xBBBꑖ\x87N\xD7t߱\x839\x85\xF4'\xD3 +<4v\xB9\x93Q\xC2\xF3Q\xB4wN\xE0\x88\xC7Z\xB4TŚ\x9EbɅ=@+\xE2\xD6Ѻe\xE2׀\x8E\xB2\x97]\xBB\xB5\xB4\xA5a[\xB4\x80\xAF\x8C\xBF\xB6\xA0]\x88\xF6\xB3T,5\x80Ԟ<\xF8\x9B\xB4-\xE5\xDED\x87\x9C3ozXˀ\xC5\xE8ڥh `\xFC\xD3E-!p쑂p]5-(\xDAT\xA1\x96\xD4\x80jkZ^hd5\xD9\xF5\x88k:6\x94%9E\xF2\x87#\xE8\xC6\x9E \xE9g\xD8\xED oL9͗(\x9EPD+\x8A.E\xF3=K\x91\x9C\xFAwdu\xA6\x8E\xCCHR(\xEA\xD6\xF1<馘\xEFف;\xEA\x9A>\x86f9\xB6\xFAz\xE6\x85\x85\xF7\x99\xF8&\xF6\xF3\x86\xD9{)a\x94\x98g\x98\xBBjC\xBD\xBD,E\xA0NT39\xF3\xDEB#i\xC3k\xB1\xF8\xEE\xBE\xFB +sM\x95\)\x8A\xAC\xD8Կ$\x92\x91\xBBKU\x89N+\x94@ +\x9D\xEB\xDA)v\xE5\xDFaB\x83|)\xD2u\x8D\xDB-\xE5\xBBK\xBC\x89\xFBV\x96\x81\xEEN\xEAEQ\x87ډ\xA1\xBC\xB5ײ\xF8+ή7#j8+S\xFEȹ# +\xEAh\xE6t\xEB2\xAA\x9D\xC5\xA8Y\xA8\xCE1\xF4/\xF1|\xD1rԂq!\xF6\xF9ݞt +ґ\xCAqP\xDA\xEF +V|n\xE8#\xFET\xCAإ\x96}\xC5~=z7\x9E\xE7\xBBv\xE0\xCC\xE5<qL\xB56\xB9\xB3W\x8B\xB3O\x8D\xE5 endstream endobj -121 0 obj << -/Type /Page -/Contents 122 0 R -/Resources 120 0 R -/MediaBox [0 0 612 792] -/Parent 110 0 R -/Annots [ 119 0 R ] ->> endobj -119 0 obj << -/Type /Annot -/Subtype /Link -/Border[0 0 1]/H/I/C[1 0 0] -/Rect [427.931 207.98 437.395 218.819] -/A << /S /GoTo /D (appendix.A) >> ->> endobj -123 0 obj << -/D [121 0 R /XYZ 71 757.862 null] ->> endobj -10 0 obj << -/D [121 0 R /XYZ 72 195.054 null] ->> endobj -120 0 obj << -/Font << /F8 106 0 R /F67 109 0 R /F60 107 0 R /F41 124 0 R /F62 108 0 R >> -/ProcSet [ /PDF /Text ] ->> endobj -128 0 obj << -/Length 1501 +148 0 obj << +/Length 1111 /Filter /FlateDecode >> stream -x\xDA\xEDY\xDDo7\xF7_q(\xF4\x8CŪD}ۀ&K\x80vC\x81!^1\xB4\xCDC\x9B\xB8\xAB\x81\xC4\xE9\xEC\xF4\xE3ϟ>(\x9Ft:\xDBq`{\xE8\xC3%\x8F\xA2H\x8A":MGON\x95n,\xB1 -T3}\xDFX \xC6@\xA3%\x94\xEBfzټnOǬ\x9D\x8F'x{2>\x9F>r\xAAi6\xA8\x9B\xC2\x85G\x89B\xA9$-\xC9.\xADc@C\x9A\xC4\xEE\x94\xF7/\x84 #\xF2K\x9C\xB5¾2\xC7\xD9\xC7h\xE0\xEE\xE9\xDEս\xAE\xA7\xED5N;/m\xC1\xBCh9\xCFN\x8B\x8C\xCDf\x85\xD3Nl6\x9Ep\xCE\xDB\xCFc\xA9ڷW\x8E\xF1)p\xA0\xFDۛ\xF5yډ\xB0v\xC5扄\xF6֑P\xF6\xCC\xDE.ܟKO,/#{i\xB4\x86\xB1PXB\xE5Q\xD6\xD1ʤ\xF7\x92 -\x82Q\x82&&x\xA1 S\x8Cf\x9Ds\x86h\xCAS\x8Br\xE1\xF1}\x8A\x81hO\xBEz\xB3\xDCs\xFD\xF1 -}ֲ=\x8Eg9\xD0\xEF\xB9t\xCF͵\x8B\xF6\xE978{g<T\xE1IhXS\xFD$\x8B\xD9\xD7(u<\x9C` ;\xF3\xAB\xD5O\x8E\x9C\xD4Ro\xA8\xA4\x98,\x83\xFD\xF1\xB9\xF0[\xA5\x8E\xFF\x96\xF8\xE6c7Ib\x8Et\xC7\xC1ķ\xAC\xE3\xFA\xAD\xBB\xC1\xC5V1B\x99N[*m]+ΆP\xAC\x89o\xAAǏ\xBF)f\xF3\x8A3\xE9\xD6@kK\xA3C\xE2\xBE\xCD\xD0\xF0\xE8\xC8U\xC8\xC5\xA1\xA1\xBB\xC2r\x8Dsn3ͥ\xD6G\xC8]\xA0\xE4$\x93\x9E\xA3m\xFEL<J\xBA\ߚ\xB1L\xDCb\xFE\xBEC\xD7\xFCR\xA9\xE2\xC1\xCF<9Do\xCE\xAA -\xC2\xF8\xA2\xDC\xE56vav\xD9ۦ\x97\x9D\xA3G\x91\xCC\xC6P;\x9A+\x95\xEE+\xFDN\xA4\xE4\xF8OQV=\xEC/z-_\xE3\xFA\xF6\xE9\xE6\xABT2E?^\xC5\xE6Z\xFA\x97U\xDD\xC4\xDFP&|\xB9Z\xDDf\xEF| \x9Bu\x8A\x97}\xF34V~\x97\xADc\xBC]y\xEBG'\xD3\xD1?#\xF8i\xC3B\xF3\x90 -(A\x98k\xDEף\xD7紹t/]\xAEnM\xF3%\x88^7`\xDD9\xFE(_5g\xA3?FG\xFEK f41`\x90\xD2ز\xA6hO\xE3\xC0\xDD\xE7\xDB8`\x9A2WZX\xFBؿ¶/\xE1\xEA\xC1\x91/J\xB4Ǟ#\x8Di_ͷ\xB8 \x99\xC3)\xF2~.(W\xAEv\xC1 \xB3\xBA\xFB\xD0-h\xE7ڟX\xC5]%\x9B-n\x9B8\xFA\xE6 -\x91Э\xAF\xB37\x8B\xC4O\xFD5\xE0{/x5\xBBg\x83\xC4/J\x9EAM\xB1u\xB8Q\xD3oG\xEE\xFA.\xE8;\xB5\xEE\x83\xF2\x8B\xD3A\xD9@3\xA4yп\xC2\xDF\xA4_\x82\xF3}\xC9o\xF1\xD2\xFE\x8C\xB3U!Se\xC8\xE6)\xEDP\xC92S\xB2@\xA5\xB3j9\x9Fig\xE3\xD8\xEEp7X\xA2\xF2O\xA8\xF4\xB2L\xC5M_6]\xB2]\xEB\xE5\xE9!fJ\xB6\xC5\xD9\xFD\xEB\xBC̅dt\xE9\xE0ua\xEF\xC6\xF7\xDF;\xBE\xFF\xDE\xF1\xFF\xF8\xBD\xA3\xF7\x8A3\xD7\xEBlh Ƙ\xF4\xD5{㿧'\xAA4 +xڽXmo\xD30\xFE\xBE_Q$Z\xB1f\xB1\xD3$ +bHC\xDA\xC4\xD04!(\x9F\xB6}H\xDFYR\x9An!\xFE;~9Ǘ\xC4I\xD3m\xF0\xE1Z\xD7/\xE7\xE7\xEE\x9E;\xDB}?>8:\xF3\xECN`\xF5:\xE3Eǧ\x9Fؖ\xED\xF8\x9D\xF1\xACs\xD5{\xDD\xD7'\xBD?\xFD\x9B\xF1ǎ\xDDb\xAE+\xDF\xF5.uz/\xFA\x84\x89h\x8EYs\xCE$c\xB2\x95]\x91h֯^\xB0\xF1;& \x93k۵e\xEFF\xAC"=\x8B\xC9=\x93\x90I\x8A\xAF\x98&\x87Ln\xE4t\xB6\x90\xF0=\x8E\xCEF\xC8\xB6\xA1c[\x94P\xB9\xE1eڧ~\xEF\xA1?p\xA7\xAE\xD9\xEA5W\xF9\x8BwP\xC0)\x9A\x8Bt#\xC1J\x98$\xD6pP\xD1rէ#53\xE4\xA8gr\x94\xEB\x9A/\xB4\x96y\xC8\xE7go$\xAE\x82\x970R\xF0\xB7-\xE1vo\xA0\xBD\xE0з\xAC9\x90M\xEE\x955\x884|Hx(W\xDD\xD4A(\xB8\xB3&de\xA01D\x8C'\xF6\xD0o\x892~\x94{}\xA6Õ\xC76\x93"f\x93pʣ\xFB]NIj\xD2K\xA1\xE3#\x9Cp\xB0\xDC\xEE\xF6!^\x83\x8D|\xFD9\x90~!\xF4\x93\xDEK&]&_`켖|^\x99 +\xBBɃ\xE3\xE9=U1\xE6mWԳkh"XTi\xD9\xCC\xC1 \xCA\xD5L(cĸ\xE7sTt(\xBF\xAEm2T\xB0\x9B\x82L... [truncated message content] |
From: <wa...@us...> - 2013-12-06 22:09:18
|
Revision: 1753 http://sourceforge.net/p/r-gregmisc/code/1753 Author: warnes Date: 2013-12-06 22:09:14 +0000 (Fri, 06 Dec 2013) Log Message: ----------- rename package directories to match current CRAN standards Added Paths: ----------- trunk/SII/tests/ trunk/SII/vignettes/ trunk/SII/vignettes/SII.Rnw Removed Paths: ------------- trunk/SII/inst/doc/ trunk/SII/test/ trunk/SII/vignettes/SII.Rnw Deleted: trunk/SII/vignettes/SII.Rnw =================================================================== --- trunk/SII/inst/doc/SII.Rnw 2013-10-21 23:33:29 UTC (rev 1744) +++ trunk/SII/vignettes/SII.Rnw 2013-12-06 22:09:14 UTC (rev 1753) @@ -1,913 +0,0 @@ -% \VignetteIndexEntry{Calculate ANSI S3.5-1997 Speech Intelligibility Index} -% \VignetteDepends{SII, gdata, xtable, splines} -% \VignetteKeyword{Speech Intelligibility Index} -% -\documentclass[letterpaper]{article} -\usepackage{Rd} -\usepackage{Sweave} -\usepackage[margin=1.0in]{geometry} -\usepackage{hyperref} -\parskip=11pt -\parindent=0mm -\usepackage{graphicx} - -%\usepackage{makeidx} -%\makeindex{} - -%------------------------------------------------------------ -% newcommand -%------------------------------------------------------------ -\newcommand{\scscst}{\scriptscriptstyle} -\newcommand{\scst}{\scriptstyle} -\newcommand{\Robject}[1]{{\texttt{#1}}} -\newcommand{\Rfunction}[1]{{\texttt{#1}}} -\newcommand{\Rclass}[1]{\textit{#1}} -\newcommand{\Rpackage}[1]{\textit{#1}} -\newcommand{\Rexpression}[1]{\texttt{#1}} -\newcommand{\Rmethod}[1]{{\texttt{#1}}} -\newcommand{\Rfunarg}[1]{{\texttt{#1}}} -%--- - - -\setkeys{Gin}{width=\textwidth} - -\title{ - Calculating Speech Intelligibility Index (SII) using R -} -\author{ - Gregory R. Warnes, Ph.D. \\ - Random Technologies LLC. - } - -\begin{document} -\maketitle - -This document describes the calculation of Speech Intelligibility -Index (SII) using R. The core calculations have been encapsulated as -an R add-on package named ``SII'', which, once installed, can be -loaded thusly: - -<<load.package>>= -library(SII) -@ - -\section{SII constant tables} - -The R package includes constant tables 1 -- 4 from the ANSI S3.5-1997 -text. These can be loaded via -<<load.data>>= -## Table 1: Critical band SII procedure constants -data("critical") -head(critical) - -## Table 2:Equally contributing (17 band) critical band SII -## procedure constants -data("equal") - -## Table 3: One-third octave band SII procedure constants -data("onethird") - -## Table 4: Octave band SII procedure constants -data("octave") - -## Overall SPL constants -data("overall.spl") -overall.spl -@ - -It also includes constant tables for alternative transfer functions -corresponding to different types of message content, tables B.1 -- -B.3. These tables have been augmented with the corresponding values -for the Connected Speech Test (CST) as given by -\url{http://www.sii.to/CSTdata.txt}. These tables can be loaded via: -<<load.alternative.data>>= -## Table B.1: Critical band importance functions for various speech tests. -data(sic.critical) -head(sic.critical) - -## Table B.2: One-third octave band importance functions for various speech tests. -data(sic.onethird) - -## Table B.3: Octave band importance functions for various speech tests. -data(sic.octave) -@ - -With the alternative transfer functions available, it becomes easy to -generate a nice graphical comparison of the functions: -<<sicplot,fig=TRUE,width=12,height=6>>= -data(sic.critical) -ngroup <- ncol(sic.critical) -matplot(x=sic.critical[,1], y=sic.critical[,-1], - type="o", - xlab="Frequency, Hz", - ylab="Weight", - log="x", - lty=1:ngroup, - col=rainbow(ngroup) -) -legend( - "topright", - legend=names(sic.critical)[-1], - pch=as.character(1:ngroup), - lty=1:ngroup, - col=rainbow(ngroup) - ) - -@ - -\section{Calculating SII} - -The \code{sii} function implements ANSI S3.5-1997 as described in the -standard, without any attempt to optimize the performance. The -implementation does, however, include the extension for handling -conductive hearing loss from Annex A (utilizing the optional -\code{loss} argument, and for utilizing alternative band weights (i.e. -transfer function) appropriate for differing message contents (e.g. -types of speech) as described in Annex B or user-specified band -weights (utilizing the optional argument \code{importance}). - -Further, this implementation provides a mechanism for -interpolating/extrapolating available measurements to those required -for the specified procedure (via the argument -\code{interpolate=TRUE}). Interpolation is accomplished using linear -interpolation (on log-scaled data) to the frequencies required for the -specified SII procedure. Interpolation is performed (if necessary) -for \code{speech}, \code{noise}, \code{threshold}, and \code{loss}. - -The \code{sii} function has the following header: -<<header>>= -args(sii) -@ - -Where the arguments are: -\begin{description} - \item[speech] Speech spectrum level, as a standard level name - ("normal", "raised", "loud", or "shout")or a vector of values, in dB - \item[noise] Noise spectrum level, in dB - \item[threshold] Hearing threshold level, in dB - \item[loss] Conductive hearing loss level, in dB - \item[freq] Frequencies at which values are provided (required if - interpolate=TRUE) - \item[method] SII calculation method, one of "critical", - "equal-contributing", "one-third octave", "octave". - \item[importance] Transfer function (importance weights), as a - standard SII measurement name ("SII", "NNS", "CID22", "NU6", "DRT", - "ShortPassage", "SPIN", or "CST") - \item[interpolate] Flag indicating whether to interpolate - from the provide measurement values and frequencies to those - required by the specified method -\end{description} - -For a detailed description of the arguments see the \Rfunction{sii} -manual page in appendix \ref{man.pages}. - -\subsection{Example C.1 from ANSI S3.5-1997 Annex C} - -<<ExampleC.1>>= -sii.C1 <- sii( - speech = c(50.0, 40.0, 40.0, 30.0, 20.0, 0.0), - noise = c(70.0, 65.0, 45.0, 25.0, 1.0,-15.0), - threshold= c( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), - method="octave" - #, importance="SII" - #, importance=octave$Ii - , importance="CST" - ) -round(sii.C1$table[,-c(5:7,13)],2) -sii.C1$sii -@ - -The value given in the Standard is $0.504$. - -\subsection{Example C.2 from ANSI S3.5-1997 Annex C} - -<<ExampleC.1>>= -sii.C2 <- sii( - speech = rep(54.0, 18), - noise = c(40.0, 30.0, 20.0, rep(0, 18-3) ), - threshold= rep(0.0, 18), - method="one-third" - ) -sii.C2$table[1:3,1:8] -sii.C2$sii -@ - -The standard shows the first three rows in the table as - -\begin{center} -\begin{tabular}{rrrrrrrrr} - \hline - & Fi & E'i & N'i & T'i & Vi & Bi & Ci & Zi \\ - \hline - 1 & 160 & 54.00 & 40.00 & 0.00 & 30.00 & 40.00 & $-$46.59\footnote{Typo in the standard document} & 40.00 \\ - 2 & 200 & 54.00 & 30.00 & 0.00 & 30.00 & 30.00 & $-$52.01 & 34.66 \\ - 3 & 250 & 54.00 & 20.00 & 0.00 & 30.00 & 30.00 & $-$51.42 & 25.04 \\ - \hline -\end{tabular} -\end{center} - - -\subsection{Interpolation Example} - -<<ExampleC.1>>= -sii.C1 <- sii( - speech = c(50.0, 40.0, 40.0, 30.0, 20.0, 0.0), - noise = c(70.0, 65.0, 45.0, 25.0, 1.0,-15.0), - threshold= c( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), - method="octave" - #, importance="SII" - #, importance=octave$Ii - , importance="CST" - ) -round(sii.C1$table[,-c(5:7,13)],2) -sii.C1$sii -@ - -The value given in the Standard is $0.504$. - - -\subsection{Calculating SII for a set of patients} - -First, we need to load the patient information table -<<LoadData, eval=FALSE>>= -library(gdata) -patInfo <- read.xls("../AI subject list.xls") -@ - -Check that we got the data properly read in: -<<ExamineData, eval=FALSE>>= -## Information about variables -str(patInfo) -@ - -<<ExamineData, eval=FALSE>>= -## First 6 rows -head(patInfo) -@ - -Create some useful variables: -<<vars, eval=FALSE>>= -## measured frequencies -freq <- c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000) - -## columns containing frequencies for the right/left ear -rt.cols <- paste("PTR",freq, sep="") -lt.cols <- paste("PTL",freq, sep="") - -rt.vals <- patInfo[,rt.cols] -lt.vals <- patInfo[,lt.cols] -@ - -Handle missing value encoding -<<missing, eval=FALSE>>= -rt.vals[rt.vals==-888] <- NA -lt.vals[rt.vals==-888] <- NA -@ - -Now, construct a utility function to handle an individual patient's -SII calculation using the arguments we want. -<<fun, eval=FALSE>>= -fun <- function(X) - { - ret <- try( - sii(X, - speech="raised", - threshold=c(15,15,20,25,35,35,45,50), - freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), - importance="SII", - interpolate=TRUE - )$sii - ) - if("try-error" %in% class(ret)) - return(NA) - else - return(ret) - } - -## Test it -fun( rt.vals[1,] ) -@ - - -Now apply it for the right and left ears: -<<CalculateSII, eval=FALSE>>= -sii.right <- apply(rt.vals, 1, fun ) - -sii.left <- apply(lt.vals, 1, fun ) -@ - -Now add theses back onto our table: -<<AddSIIToTable, eval=FALSE>>= -patInfo$"SII.right" <- sii.right -patInfo$"SII.left" <- sii.left - -tail(patInfo) -@ - -And save to a file: -<<SavePatInfo, eval=FALSE>>= -write.table(patInfo, - file="../AI subject list-SII.xls", - row.names=FALSE, - sep="\t" - ) -@ - -Now define a function to do all of this with a single call - -<<SIIFileFun, eval=FALSE>>= -sii.dina <- function(infile, outfile, verbose=TRUE) - { - if(verbose) - cat("\nLoading data file '", infile, "'...\n", sep="") - ## Load the data - library(gdata) - patInfo <- read.xls(infile) - - ## measured frequencies - freq <- c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000) - - if(verbose) - cat("\nExtracting hearing thresholds...\n") - - ## columns containing frequencies for the right/left ear - rt.cols <- paste("PTR",freq, sep="") - lt.cols <- paste("PTL",freq, sep="") - - rt.vals <- patInfo[,rt.cols] - lt.vals <- patInfo[,lt.cols] - - ## Handle missing code '-888' - rt.vals[rt.vals==-888] <- NA - lt.vals[rt.vals==-888] <- NA - - ## define function to compute SII with our defaults - fun <- function(X) - { - ret <- try( - sii(X, - speech="raised", - threshold=c(15,15,20,25,35,35,45,50), - freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), - importance="SII", - interpolate=TRUE - )$sii #$ - ) - if("try-error" %in% class(ret)) - return(NA) - else - return(ret) - } - - ## Calculate SII - if(verbose) - cat("\nCalculating right ear SII...\n") - sii.right <- apply(rt.vals, 1, fun ) - if(verbose) - cat("\nCalculating left ear SII...\n") - sii.left <- apply(lt.vals, 1, fun ) - - ## Add back onto the table - patInfo$"SII.right" <- sii.right - patInfo$"SII.left" <- sii.left - - if(verbose) - cat("\nWriting new data table as '", outfile, "'...\n", sep="") - - ## Save file - write.table(patInfo, - file=outfile, - row.names=FALSE, - sep="\t" - ) - - if(verbose) - cat("\nDone.\n\n") - } -@ - -Try it out: - -<<RunFun, eval=FALSE>>= -sii.dina(infile="../AI subject list.xls", - outfile="../AI subject list-SII.xls") -@ - - -Just for kicks, compare the original AI, and our computed sii values: -<<CompareAItoSII,results=tex, eval=FALSE>>= -library(xtable) -xt <- xtable(patInfo[,c("AI","SII.right","SII.left")], - caption="Comparison of original AI and new right and left SII values \\label{table}", - digits=2) -print(xt) -@ - -<<PlotAIandSII,fig=TRUE, eval=FALSE>>= -## put histograms on the diagonal -panel.hist <- function(x, ...) - { - usr <- par("usr"); on.exit(par(usr)) - par(usr = c(usr[1:2], 0, 1.5) ) - h <- hist(x, plot = FALSE) - breaks <- h$breaks; nB <- length(breaks) - y <- h$counts; y <- y/max(y) - rect(breaks[-nB], 0, breaks[-1], y, col="cyan", ...) - } -pairs.2 <- function(x) - pairs(x, - panel=panel.smooth, - cex = 1.5, - pch = 24, - bg="light blue", - diag.panel=panel.hist, - cex.labels = 2, - font.labels=2 - ) - - -pairs.2(patInfo[,c("AI","SII.right","SII.left")]) -@ - - -\clearpage -\appendix - -\section{SII Help Pages}\label{man.pages} - -<<echo=FALSE,results=tex>>= -latexhelp <- function(topics, package=NULL) - { - if(missing(topics) && missing(package)) - stop("Help on what?") - else if (missing(topics)) - { - callObj <- call("library", help=package) - topicStrings <- eval(callObj)$info[[2]] - topicStrings <- lapply( topicStrings, strsplit, split=" ") - topicStrings <- sapply( topicStrings, function(x) x[[1]][1]) - topicStrings <- topicStrings[topicStrings > " "] - topics <- topicStrings - } - - for(topic in topics) - { - if(!is.character(topic)) - topic <- deparse(substitute(topic)) - - callObj <- call("help", topic=topic, package=package) - - ## Get the file path - help.file<- as.character(eval(callObj)) - - ## Get R to translate it to latex and display it - tools::Rd2latex(utils:::.getHelpFile(help.file)) - - ## new page - cat("\n") - cat("\\clearpage") - cat("\n") - } - } - - -tmp <- function (x, ...) -{ -} - -latexhelp(package="SII") - -@ - -\clearpage - -\section{Interpolation} - -Do some experimentation to determine how to best perform -interpolation/extrapolation from the small set of frequencies where -hearing sensitivity was measured to the set of frequencies necessary -for the calculation of SII: -<<splineFit>>= - -THDI=c(25,25,30,35,45,45,55,60) -freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000) - -data(sii.constants) -sii.freqs <- sii.constants[,1] - -xlist <- sort(c(sii.constants[, 1], freq)) -ylist <- rep(NA, length=length(xlist)) -names(ylist) <- xlist -ylist[ as.character(freq) ] <- THDI -@ - -<<interSpline>>= -library(splines) -ispl <- interpSpline( THDI ~ freq ) -ispl <- predict(ispl, sii.freqs)$y - -ispl.l <- interpSpline( THDI ~ log(freq) ) -ispl.l <- predict(ispl.l, log(sii.freqs) )$y - -approx.l <- function(x,y,xout,...) - { - retval <- approx(log(x), y, log(xout), ...) - retval$x <- xout - retval - } - -@ - -<<Spline_comparison_function, echo=FALSE>>= -doplot <- function(logx=FALSE, separate=FALSE) - { - if(separate) - layout( cbind( c(1,2,3,7), c(4,5,6,7) )) - tmp <- function() { - plot(x=freq, y=THDI, col="black", cex=2, log=if(logx) "x" else "", - xlab="Frequency (Herz)", ylab="Threshhold of Detection (dB)", - xlim=range(sii.freqs), ylim=c(20,60) ) - lines(sii.constants[, 1], sii.constants[, "Ti'.THDN"], col="red", lwd=3) - abline(v=sii.freqs,lty=3) - } - - tmp() - lines( x=sii.constants[, 1], y=ispl, col="blue", lwd=2) - - if(separate) tmp() - lines( x=sii.constants[, 1], y=ispl.l, col="cyan", lwd=2) - - if(separate) tmp() - lines( spline (x=freq, y=THDI), col="green", lwd=2) - - if(separate) tmp() - lines( spline (x=freq, y=THDI, method="natural", xout=sii.freqs), col="orange", lwd=2) - - if(separate) tmp() - lines( approx (x=freq, y=THDI, method="linear", xout=sii.freqs, rule=2), col="magenta", lwd=2) - - if(separate) tmp() - lines( approx.l(x=freq, y=THDI, method="linear", xout=sii.freqs, rule=2), col="brown", lwd=3) - - if(separate) plot.new() - legend(if(separate) "center" else { if(logx) "topleft" else "bottomright" }, - legend=c( - "Measured data", - "Matlab INTERP1(X, Y, XI, 'spline', 'extrap')", - "R's predict( interSpline(X,Y), XI )", - "R's predict( interSpline(log(X),Y), log(XI) )", - "R's spline(x, y)", - "R's spline(x, y, method='natural')", - "R's approx(x, y, method='linear')", - "R's approx(x, y, method='linear') (on log scale)", - "Frequencies used for SII calculation" - ), - col=c("black", "red", "blue","cyan","green","orange","magenta","brown", "black"), - pch=c( 1, NA, NA, NA, NA, NA, NA, NA, NA), - lty=c( NA, 1, 1, 1, 1, 1, 1, 1, 3), - lwd=c( NA, 3, 2, 2, 2, 2, 2, 2, 1), - bg="white", - cex=if(separate) 1.25 else 0.75, - ncol=if(separate) 2 else 1 - ) - if(separate) - layout( 1 ) - title(paste("Spline method comparison\n", if(logx)"(log scale)"else"(natural scale)", "\n")) - - } -@ - -<<natural_scale_one_plot, fig=TRUE, width=8, height=8>>= -doplot(FALSE, FALSE) -@ - -<<natural_scale_separate_plots, fig=TRUE, width=8, height=11>>= -doplot(FALSE, TRUE) -@ - -<<log_scale_one_plot, fig=TRUE, width=8, height=8>>= -doplot(TRUE, FALSE) -@ - - -<<log_scale_separate_plots, fig=TRUE, width=8, height=11>>= -doplot(TRUE, TRUE) -@ - - - -\section{SII function definition} - -\subsection{Excel to R translation} - -First, I have defined an R function that simply translates the Excel -code into R: - -<<SII:::sii.excel>>= -args(SII:::sii.excel) -@ - -\subsection{R code written from the ANSI S3.5-1997} - - -Second, I implemented the SII calculation following the text of the -standard. This code is more general and quite a bit more complex. - -<<sii>>= -args(sii) -@ - -\subsection{Utility functions} - -I also defined a utility function to nicely print the output. - -<<sii.print>>= - -@ - -In order to make it easy to maintain the SII contants. A single -Microsoft Excel file, \verb+\data\SII_Constants.xls+ is included in the -SII \verb+data+ directory containing the complete set of SII contants, -where each tab corresponds to one Table from the standard. - -<<show.reload.constants>>= -SII:::reload.constants -@ - -The package mainainer may use it as : -<<run.reload.constants, eval=FALSE>>= -SII:::reload.constants(xls.path="./SII/extdata") -@ - -The SII package must then be rebuilt and reinstalled for the updated -contants to become available. - - -\section{Tests} - - -\subsection{Compare interpolation details for example data} - - -\subsubsection{Left Ear} - -<<ComparisonTable1>>= -sii.left <- sii( - speech="raised", - threshold=c(25,25,30,35,45,45,55,60), - freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), - importance="NU6", - interpolate=TRUE - ) - - -## comparison of our interpolation and matlab's -tab <- cbind( - matlab=sii.constants[,"Ti'.THDN"], - R =sii.left$table[,"T'i"], - delta =NA - ) -tab[,3] <- tab[,1] - tab[,2] -rownames(tab) <- sii.constants[,".NFreqLin"] -t(round(tab,2)) -@ - -<<<plot.sii, show=FALSE>>= -compare.plot <- function(x, matlab, title) - { - plot(x) - lines(sii.constants[,".NFreqLin"], - matlab, - type="l", col="red", lwd=3) - - legend("topleft", - legend=c( - "Measured data", - "Matlab INTERP1(X, Y, XI, 'spline', 'extrap')", - "R's approx(X,Y, XI, xout=XI,\n method='linear', rule=2)" - ), - col=c("black", "red","blue","green","orange","magenta"), - pch=c( 1, NA, 2, NA, NA, NA), - lty=c( NA, 1, 1, 1, 1, 1), - lwd=c( NA, 3, 2, 2, 2, 2), - bg="white" - ) - title(title) - } -@ - -<<ComparisonFigure1,fig=TRUE>>= - -compare.plot(sii.left, matlab=sii.constants[, "Ti'.THDN"], title="Spline method comparison, Left Ear") - -@ - -\subsubsection{Right Ear} - -<<ComparisonTable2>>= -# comparison of our interpolation and matlab's - -matlab <- c(15.00, 15.00, 13.34, 14.27, 16.06, 17.82, 19.18, 20.00, - 20.26, 20.54, 21.44, 23.36, 26.93, 31.38, 34.63, 35.13, - 35.00, 38.29, 43.98, 48.80, 49.58) - -sii.right <- sii( - speech="raised", - threshold=c(15,15,20,25,35,35,45,50), - freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), - importance="NU6", - interpolate=TRUE - ) - -tab <- cbind( - matlab=matlab, - R =sii.right$table [,"T'i"], - delta =NA - ) -tab[,3] <- tab[,1] - tab[,2] -rownames(tab) <- sii.constants[,".NFreqLin"] -t(round(tab,2)) -@ - -<<<ComparisonFigure2,fig=TRUE>>= -compare.plot(sii.right, matlab=matlab, title="Spline method comparison, Right Ear") -@ - - -\subsection{Comparison with Excel implementation} - -Test the SII function using the example data from the Excel worksheet: - -\begin{itemize} - \item Left ear example - - Excel code: $0.43$. - - ``Translated'' R code: -<<<sii.left.old>>= -SII:::sii.excel( - c(25,25,30,35,45,45,55,60), - c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000) - ) -@ - - - New R code: -<<sii.left>>= -sii.left <- sii( - speech="raised", - threshold=c(25,25,30,35,45,45,55,60), - freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), - importance="NU6", - interpolate=TRUE - ) -sii.left -@ - - - \item Right ear example - - Excel worksheet: $0.72$. - - ``Translated'' R code: -<<<sii.right.old>>= -SII:::sii.excel( - c(15,15,20,25,35,35,45,50), - c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000) - ) -@ - - New R code: -<<sii.right>>= -sii.right <- sii( - speech="raised", - threshold=c(15,15,20,25,35,35,45,50), - freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), - importance="NU6", - interpolate=TRUE - ) -sii.right -@ - - \item Best possible score (No detectible threshold) - - Excel Spreadsheet: $0.9887$ - - ``Translated'' R code: -<<<sii.best.old>>= -SII:::sii.excel( - rep(0,8), - freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000) - ) -@ - - - New R code: -<<sii.best>>= -sii.best <- sii( - threshold=rep(0,8), - freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), - interpolate=TRUE - ) -sii.best -@ - - \item Worst possible score (No detectible threshold) - - Excel Spreadsheet: $0.00$ - - ``Translated'' R code: -<<<sii.worst.old>>= -SII:::sii.excel( - rep(100,8), - c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000) - ) -@ - - - New R code: -<<sii.worst>>= -sii.worst <- sii( - threshold=rep(100,8), - freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), - interpolate=TRUE - ) -sii.worst -@ - - -\end{itemize} - -\subsection{Test handling of missing values} - -<<sii.missing>>= -sii.worst <- sii( - threshold=c(NA, rep(100,7)), - freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), - interpolate=TRUE - ) -sii.worst -@ - -<<sii.missing>>= -sii.right <- sii( - speech="raised", - threshold=c(0,15,15,20,25,35,35,45,50), - freq=c(NA, 250, 500, 1000, 2000, 3000, 4000, 6000, 8000), - importance="NU6", - interpolate=TRUE - ) -sii.right -@ - -<<sii.all.missing>>= -## This should fail, because there is no data! -sii.NONE <- try( - sii( - threshold=rep(NA,8), - freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), - interpolate=TRUE - ) - ) -sii.NONE -@ - - - -<<sii.missing>>= -sii.right <- sii( - speech="raised", - threshold=c(15,15,20,NA,35,35,45,50), - freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), - importance="NU6", - interpolate=TRUE - ) -sii.right -@ - -<<missing.C.1>>= -sii.C1.NA <- sii( - speech = c(50.0, 40.0, 40.0, NA, 20.0, 0.0), - noise = c(70.0, 65.0, 45.0, 25.0, 1.0,-15.0), - threshold= c( 0.0, 0.0, 0.0, 0.0, NA, 0.0), - freq = c( 250, 500, 1000, 2000, 4000, 8000), - method="octave", - importance="CST", - interpolate=TRUE - ) -sii.C1 -sii.C1.NA -@ - - - -\section{Final cleanup} - -Save the data we created here for debugging purposes: -<<save data>>= -save.image("SII-Code.Rda") -@ - -%\printindex{} - -\end{document} Copied: trunk/SII/vignettes/SII.Rnw (from rev 1750, trunk/SII/inst/doc/SII.Rnw) =================================================================== --- trunk/SII/vignettes/SII.Rnw (rev 0) +++ trunk/SII/vignettes/SII.Rnw 2013-12-06 22:09:14 UTC (rev 1753) @@ -0,0 +1,913 @@ +% \VignetteIndexEntry{Calculate ANSI S3.5-1997 Speech Intelligibility Index} +% \VignetteDepends{SII, gdata, xtable, splines} +% \VignetteKeyword{Speech Intelligibility Index} +% +\documentclass[letterpaper]{article} +\usepackage{Rd} +\usepackage{Sweave} +\usepackage[margin=1.0in]{geometry} +\usepackage{hyperref} +\parskip=11pt +\parindent=0mm +\usepackage{graphicx} + +%\usepackage{makeidx} +%\makeindex{} + +%------------------------------------------------------------ +% newcommand +%------------------------------------------------------------ +\newcommand{\scscst}{\scriptscriptstyle} +\newcommand{\scst}{\scriptstyle} +\newcommand{\Robject}[1]{{\texttt{#1}}} +\newcommand{\Rfunction}[1]{{\texttt{#1}}} +\newcommand{\Rclass}[1]{\textit{#1}} +\newcommand{\Rpackage}[1]{\textit{#1}} +\newcommand{\Rexpression}[1]{\texttt{#1}} +\newcommand{\Rmethod}[1]{{\texttt{#1}}} +\newcommand{\Rfunarg}[1]{{\texttt{#1}}} +%--- + + +\setkeys{Gin}{width=\textwidth} + +\title{ + Calculating Speech Intelligibility Index (SII) using R +} +\author{ + Gregory R. Warnes, Ph.D. \\ + Gregory R. Warnes Consulting + } + +\begin{document} +\maketitle + +This document describes the calculation of Speech Intelligibility +Index (SII) using R. The core calculations have been encapsulated as +an R add-on package named ``SII'', which, once installed, can be +loaded thusly: + +<<load.package>>= +library(SII) +@ + +\section{SII constant tables} + +The R package includes constant tables 1 -- 4 from the ANSI S3.5-1997 +text. These can be loaded via +<<load.data>>= +## Table 1: Critical band SII procedure constants +data("critical") +head(critical) + +## Table 2:Equally contributing (17 band) critical band SII +## procedure constants +data("equal") + +## Table 3: One-third octave band SII procedure constants +data("onethird") + +## Table 4: Octave band SII procedure constants +data("octave") + +## Overall SPL constants +data("overall.spl") +overall.spl +@ + +It also includes constant tables for alternative transfer functions +corresponding to different types of message content, tables B.1 -- +B.3. These tables have been augmented with the corresponding values +for the Connected Speech Test (CST) as given by +\url{http://www.sii.to/CSTdata.txt}. These tables can be loaded via: +<<load.alternative.data>>= +## Table B.1: Critical band importance functions for various speech tests. +data(sic.critical) +head(sic.critical) + +## Table B.2: One-third octave band importance functions for various speech tests. +data(sic.onethird) + +## Table B.3: Octave band importance functions for various speech tests. +data(sic.octave) +@ + +With the alternative transfer functions available, it becomes easy to +generate a nice graphical comparison of the functions: +<<sicplot,fig=TRUE,width=12,height=6>>= +data(sic.critical) +ngroup <- ncol(sic.critical) +matplot(x=sic.critical[,1], y=sic.critical[,-1], + type="o", + xlab="Frequency, Hz", + ylab="Weight", + log="x", + lty=1:ngroup, + col=rainbow(ngroup) +) +legend( + "topright", + legend=names(sic.critical)[-1], + pch=as.character(1:ngroup), + lty=1:ngroup, + col=rainbow(ngroup) + ) + +@ + +\section{Calculating SII} + +The \code{sii} function implements ANSI S3.5-1997 as described in the +standard, without any attempt to optimize the performance. The +implementation does, however, include the extension for handling +conductive hearing loss from Annex A (utilizing the optional +\code{loss} argument, and for utilizing alternative band weights (i.e. +transfer function) appropriate for differing message contents (e.g. +types of speech) as described in Annex B or user-specified band +weights (utilizing the optional argument \code{importance}). + +Further, this implementation provides a mechanism for +interpolating/extrapolating available measurements to those required +for the specified procedure (via the argument +\code{interpolate=TRUE}). Interpolation is accomplished using linear +interpolation (on log-scaled data) to the frequencies required for the +specified SII procedure. Interpolation is performed (if necessary) +for \code{speech}, \code{noise}, \code{threshold}, and \code{loss}. + +The \code{sii} function has the following header: +<<header>>= +args(sii) +@ + +Where the arguments are: +\begin{description} + \item[speech] Speech spectrum level, as a standard level name + ("normal", "raised", "loud", or "shout")or a vector of values, in dB + \item[noise] Noise spectrum level, in dB + \item[threshold] Hearing threshold level, in dB + \item[loss] Conductive hearing loss level, in dB + \item[freq] Frequencies at which values are provided (required if + interpolate=TRUE) + \item[method] SII calculation method, one of "critical", + "equal-contributing", "one-third octave", "octave". + \item[importance] Transfer function (importance weights), as a + standard SII measurement name ("SII", "NNS", "CID22", "NU6", "DRT", + "ShortPassage", "SPIN", or "CST") + \item[interpolate] Flag indicating whether to interpolate + from the provide measurement values and frequencies to those + required by the specified method +\end{description} + +For a detailed description of the arguments see the \Rfunction{sii} +manual page in appendix \ref{man.pages}. + +\subsection{Example C.1 from ANSI S3.5-1997 Annex C} + +<<ExampleC.1>>= +sii.C1 <- sii( + speech = c(50.0, 40.0, 40.0, 30.0, 20.0, 0.0), + noise = c(70.0, 65.0, 45.0, 25.0, 1.0,-15.0), + threshold= c( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), + method="octave" + #, importance="SII" + #, importance=octave$Ii + , importance="CST" + ) +round(sii.C1$table[,-c(5:7,13)],2) +sii.C1$sii +@ + +The value given in the Standard is $0.504$. + +\subsection{Example C.2 from ANSI S3.5-1997 Annex C} + +<<ExampleC.1>>= +sii.C2 <- sii( + speech = rep(54.0, 18), + noise = c(40.0, 30.0, 20.0, rep(0, 18-3) ), + threshold= rep(0.0, 18), + method="one-third" + ) +sii.C2$table[1:3,1:8] +sii.C2$sii +@ + +The standard shows the first three rows in the table as + +\begin{center} +\begin{tabular}{rrrrrrrrr} + \hline + & Fi & E'i & N'i & T'i & Vi & Bi & Ci & Zi \\ + \hline + 1 & 160 & 54.00 & 40.00 & 0.00 & 30.00 & 40.00 & $-$46.59\footnote{Typo in the standard document} & 40.00 \\ + 2 & 200 & 54.00 & 30.00 & 0.00 & 30.00 & 30.00 & $-$52.01 & 34.66 \\ + 3 & 250 & 54.00 & 20.00 & 0.00 & 30.00 & 30.00 & $-$51.42 & 25.04 \\ + \hline +\end{tabular} +\end{center} + + +\subsection{Interpolation Example} + +<<ExampleC.1>>= +sii.C1 <- sii( + speech = c(50.0, 40.0, 40.0, 30.0, 20.0, 0.0), + noise = c(70.0, 65.0, 45.0, 25.0, 1.0,-15.0), + threshold= c( 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), + method="octave" + #, importance="SII" + #, importance=octave$Ii + , importance="CST" + ) +round(sii.C1$table[,-c(5:7,13)],2) +sii.C1$sii +@ + +The value given in the Standard is $0.504$. + + +\subsection{Calculating SII for a set of patients} + +First, we need to load the patient information table +<<LoadData, eval=FALSE>>= +library(gdata) +patInfo <- read.xls("../AI subject list.xls") +@ + +Check that we got the data properly read in: +<<ExamineData, eval=FALSE>>= +## Information about variables +str(patInfo) +@ + +<<ExamineData, eval=FALSE>>= +## First 6 rows +head(patInfo) +@ + +Create some useful variables: +<<vars, eval=FALSE>>= +## measured frequencies +freq <- c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000) + +## columns containing frequencies for the right/left ear +rt.cols <- paste("PTR",freq, sep="") +lt.cols <- paste("PTL",freq, sep="") + +rt.vals <- patInfo[,rt.cols] +lt.vals <- patInfo[,lt.cols] +@ + +Handle missing value encoding +<<missing, eval=FALSE>>= +rt.vals[rt.vals==-888] <- NA +lt.vals[rt.vals==-888] <- NA +@ + +Now, construct a utility function to handle an individual patient's +SII calculation using the arguments we want. +<<fun, eval=FALSE>>= +fun <- function(X) + { + ret <- try( + sii(X, + speech="raised", + threshold=c(15,15,20,25,35,35,45,50), + freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), + importance="SII", + interpolate=TRUE + )$sii + ) + if("try-error" %in% class(ret)) + return(NA) + else + return(ret) + } + +## Test it +fun( rt.vals[1,] ) +@ + + +Now apply it for the right and left ears: +<<CalculateSII, eval=FALSE>>= +sii.right <- apply(rt.vals, 1, fun ) + +sii.left <- apply(lt.vals, 1, fun ) +@ + +Now add theses back onto our table: +<<AddSIIToTable, eval=FALSE>>= +patInfo$"SII.right" <- sii.right +patInfo$"SII.left" <- sii.left + +tail(patInfo) +@ + +And save to a file: +<<SavePatInfo, eval=FALSE>>= +write.table(patInfo, + file="../AI subject list-SII.xls", + row.names=FALSE, + sep="\t" + ) +@ + +Now define a function to do all of this with a single call + +<<SIIFileFun, eval=FALSE>>= +sii.dina <- function(infile, outfile, verbose=TRUE) + { + if(verbose) + cat("\nLoading data file '", infile, "'...\n", sep="") + ## Load the data + library(gdata) + patInfo <- read.xls(infile) + + ## measured frequencies + freq <- c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000) + + if(verbose) + cat("\nExtracting hearing thresholds...\n") + + ## columns containing frequencies for the right/left ear + rt.cols <- paste("PTR",freq, sep="") + lt.cols <- paste("PTL",freq, sep="") + + rt.vals <- patInfo[,rt.cols] + lt.vals <- patInfo[,lt.cols] + + ## Handle missing code '-888' + rt.vals[rt.vals==-888] <- NA + lt.vals[rt.vals==-888] <- NA + + ## define function to compute SII with our defaults + fun <- function(X) + { + ret <- try( + sii(X, + speech="raised", + threshold=c(15,15,20,25,35,35,45,50), + freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), + importance="SII", + interpolate=TRUE + )$sii #$ + ) + if("try-error" %in% class(ret)) + return(NA) + else + return(ret) + } + + ## Calculate SII + if(verbose) + cat("\nCalculating right ear SII...\n") + sii.right <- apply(rt.vals, 1, fun ) + if(verbose) + cat("\nCalculating left ear SII...\n") + sii.left <- apply(lt.vals, 1, fun ) + + ## Add back onto the table + patInfo$"SII.right" <- sii.right + patInfo$"SII.left" <- sii.left + + if(verbose) + cat("\nWriting new data table as '", outfile, "'...\n", sep="") + + ## Save file + write.table(patInfo, + file=outfile, + row.names=FALSE, + sep="\t" + ) + + if(verbose) + cat("\nDone.\n\n") + } +@ + +Try it out: + +<<RunFun, eval=FALSE>>= +sii.dina(infile="../AI subject list.xls", + outfile="../AI subject list-SII.xls") +@ + + +Just for kicks, compare the original AI, and our computed sii values: +<<CompareAItoSII,results=tex, eval=FALSE>>= +library(xtable) +xt <- xtable(patInfo[,c("AI","SII.right","SII.left")], + caption="Comparison of original AI and new right and left SII values \\label{table}", + digits=2) +print(xt) +@ + +<<PlotAIandSII,fig=TRUE, eval=FALSE>>= +## put histograms on the diagonal +panel.hist <- function(x, ...) + { + usr <- par("usr"); on.exit(par(usr)) + par(usr = c(usr[1:2], 0, 1.5) ) + h <- hist(x, plot = FALSE) + breaks <- h$breaks; nB <- length(breaks) + y <- h$counts; y <- y/max(y) + rect(breaks[-nB], 0, breaks[-1], y, col="cyan", ...) + } +pairs.2 <- function(x) + pairs(x, + panel=panel.smooth, + cex = 1.5, + pch = 24, + bg="light blue", + diag.panel=panel.hist, + cex.labels = 2, + font.labels=2 + ) + + +pairs.2(patInfo[,c("AI","SII.right","SII.left")]) +@ + + +\clearpage +\appendix + +\section{SII Help Pages}\label{man.pages} + +<<echo=FALSE,results=tex>>= +latexhelp <- function(topics, package=NULL) + { + if(missing(topics) && missing(package)) + stop("Help on what?") + else if (missing(topics)) + { + callObj <- call("library", help=package) + topicStrings <- eval(callObj)$info[[2]] + topicStrings <- lapply( topicStrings, strsplit, split=" ") + topicStrings <- sapply( topicStrings, function(x) x[[1]][1]) + topicStrings <- topicStrings[topicStrings > " "] + topics <- topicStrings + } + + for(topic in topics) + { + if(!is.character(topic)) + topic <- deparse(substitute(topic)) + + callObj <- call("help", topic=topic, package=package) + + ## Get the file path + help.file<- as.character(eval(callObj)) + + ## Get R to translate it to latex and display it + tools::Rd2latex(utils:::.getHelpFile(help.file)) + + ## new page + cat("\n") + cat("\\clearpage") + cat("\n") + } + } + + +tmp <- function (x, ...) +{ +} + +latexhelp(package="SII") + +@ + +\clearpage + +\section{Interpolation} + +Do some experimentation to determine how to best perform +interpolation/extrapolation from the small set of frequencies where +hearing sensitivity was measured to the set of frequencies necessary +for the calculation of SII: +<<splineFit>>= + +THDI=c(25,25,30,35,45,45,55,60) +freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000) + +data(sii.constants) +sii.freqs <- sii.constants[,1] + +xlist <- sort(c(sii.constants[, 1], freq)) +ylist <- rep(NA, length=length(xlist)) +names(ylist) <- xlist +ylist[ as.character(freq) ] <- THDI +@ + +<<interSpline>>= +library(splines) +ispl <- interpSpline( THDI ~ freq ) +ispl <- predict(ispl, sii.freqs)$y + +ispl.l <- interpSpline( THDI ~ log(freq) ) +ispl.l <- predict(ispl.l, log(sii.freqs) )$y + +approx.l <- function(x,y,xout,...) + { + retval <- approx(log(x), y, log(xout), ...) + retval$x <- xout + retval + } + +@ + +<<Spline_comparison_function, echo=FALSE>>= +doplot <- function(logx=FALSE, separate=FALSE) + { + if(separate) + layout( cbind( c(1,2,3,7), c(4,5,6,7) )) + tmp <- function() { + plot(x=freq, y=THDI, col="black", cex=2, log=if(logx) "x" else "", + xlab="Frequency (Herz)", ylab="Threshhold of Detection (dB)", + xlim=range(sii.freqs), ylim=c(20,60) ) + lines(sii.constants[, 1], sii.constants[, "Ti'.THDN"], col="red", lwd=3) + abline(v=sii.freqs,lty=3) + } + + tmp() + lines( x=sii.constants[, 1], y=ispl, col="blue", lwd=2) + + if(separate) tmp() + lines( x=sii.constants[, 1], y=ispl.l, col="cyan", lwd=2) + + if(separate) tmp() + lines( spline (x=freq, y=THDI), col="green", lwd=2) + + if(separate) tmp() + lines( spline (x=freq, y=THDI, method="natural", xout=sii.freqs), col="orange", lwd=2) + + if(separate) tmp() + lines( approx (x=freq, y=THDI, method="linear", xout=sii.freqs, rule=2), col="magenta", lwd=2) + + if(separate) tmp() + lines( approx.l(x=freq, y=THDI, method="linear", xout=sii.freqs, rule=2), col="brown", lwd=3) + + if(separate) plot.new() + legend(if(separate) "center" else { if(logx) "topleft" else "bottomright" }, + legend=c( + "Measured data", + "Matlab INTERP1(X, Y, XI, 'spline', 'extrap')", + "R's predict( interSpline(X,Y), XI )", + "R's predict( interSpline(log(X),Y), log(XI) )", + "R's spline(x, y)", + "R's spline(x, y, method='natural')", + "R's approx(x, y, method='linear')", + "R's approx(x, y, method='linear') (on log scale)", + "Frequencies used for SII calculation" + ), + col=c("black", "red", "blue","cyan","green","orange","magenta","brown", "black"), + pch=c( 1, NA, NA, NA, NA, NA, NA, NA, NA), + lty=c( NA, 1, 1, 1, 1, 1, 1, 1, 3), + lwd=c( NA, 3, 2, 2, 2, 2, 2, 2, 1), + bg="white", + cex=if(separate) 1.25 else 0.75, + ncol=if(separate) 2 else 1 + ) + if(separate) + layout( 1 ) + title(paste("Spline method comparison\n", if(logx)"(log scale)"else"(natural scale)", "\n")) + + } +@ + +<<natural_scale_one_plot, fig=TRUE, width=8, height=8>>= +doplot(FALSE, FALSE) +@ + +<<natural_scale_separate_plots, fig=TRUE, width=8, height=11>>= +doplot(FALSE, TRUE) +@ + +<<log_scale_one_plot, fig=TRUE, width=8, height=8>>= +doplot(TRUE, FALSE) +@ + + +<<log_scale_separate_plots, fig=TRUE, width=8, height=11>>= +doplot(TRUE, TRUE) +@ + + + +\section{SII function definition} + +\subsection{Excel to R translation} + +First, I have defined an R function that simply translates the Excel +code into R: + +<<SII:::sii.excel>>= +args(SII:::sii.excel) +@ + +\subsection{R code written from the ANSI S3.5-1997} + + +Second, I implemented the SII calculation following the text of the +standard. This code is more general and quite a bit more complex. + +<<sii>>= +args(sii) +@ + +\subsection{Utility functions} + +I also defined a utility function to nicely print the output. + +<<sii.print>>= + +@ + +In order to make it easy to maintain the SII contants. A single +Microsoft Excel file, \verb+\data\SII_Constants.xls+ is included in the +SII \verb+data+ directory containing the complete set of SII contants, +where each tab corresponds to one Table from the standard. + +<<show.reload.constants>>= +SII:::reload.constants +@ + +The package mainainer may use it as : +<<run.reload.constants, eval=FALSE>>= +SII:::reload.constants(xls.path="./SII/extdata") +@ + +The SII package must then be rebuilt and reinstalled for the updated +contants to become available. + + +\section{Tests} + + +\subsection{Compare interpolation details for example data} + + +\subsubsection{Left Ear} + +<<ComparisonTable1>>= +sii.left <- sii( + speech="raised", + threshold=c(25,25,30,35,45,45,55,60), + freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), + importance="NU6", + interpolate=TRUE + ) + + +## comparison of our interpolation and matlab's +tab <- cbind( + matlab=sii.constants[,"Ti'.THDN"], + R =sii.left$table[,"T'i"], + delta =NA + ) +tab[,3] <- tab[,1] - tab[,2] +rownames(tab) <- sii.constants[,".NFreqLin"] +t(round(tab,2)) +@ + +<<<plot.sii, show=FALSE>>= +compare.plot <- function(x, matlab, title) + { + plot(x) + lines(sii.constants[,".NFreqLin"], + matlab, + type="l", col="red", lwd=3) + + legend("topleft", + legend=c( + "Measured data", + "Matlab INTERP1(X, Y, XI, 'spline', 'extrap')", + "R's approx(X,Y, XI, xout=XI,\n method='linear', rule=2)" + ), + col=c("black", "red","blue","green","orange","magenta"), + pch=c( 1, NA, 2, NA, NA, NA), + lty=c( NA, 1, 1, 1, 1, 1), + lwd=c( NA, 3, 2, 2, 2, 2), + bg="white" + ) + title(title) + } +@ + +<<ComparisonFigure1,fig=TRUE>>= + +compare.plot(sii.left, matlab=sii.constants[, "Ti'.THDN"], title="Spline method comparison, Left Ear") + +@ + +\subsubsection{Right Ear} + +<<ComparisonTable2>>= +# comparison of our interpolation and matlab's + +matlab <- c(15.00, 15.00, 13.34, 14.27, 16.06, 17.82, 19.18, 20.00, + 20.26, 20.54, 21.44, 23.36, 26.93, 31.38, 34.63, 35.13, + 35.00, 38.29, 43.98, 48.80, 49.58) + +sii.right <- sii( + speech="raised", + threshold=c(15,15,20,25,35,35,45,50), + freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), + importance="NU6", + interpolate=TRUE + ) + +tab <- cbind( + matlab=matlab, + R =sii.right$table [,"T'i"], + delta =NA + ) +tab[,3] <- tab[,1] - tab[,2] +rownames(tab) <- sii.constants[,".NFreqLin"] +t(round(tab,2)) +@ + +<<<ComparisonFigure2,fig=TRUE>>= +compare.plot(sii.right, matlab=matlab, title="Spline method comparison, Right Ear") +@ + + +\subsection{Comparison with Excel implementation} + +Test the SII function using the example data from the Excel worksheet: + +\begin{itemize} + \item Left ear example + + Excel code: $0.43$. + + ``Translated'' R code: +<<<sii.left.old>>= +SII:::sii.excel( + c(25,25,30,35,45,45,55,60), + c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000) + ) +@ + + + New R code: +<<sii.left>>= +sii.left <- sii( + speech="raised", + threshold=c(25,25,30,35,45,45,55,60), + freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), + importance="NU6", + interpolate=TRUE + ) +sii.left +@ + + + \item Right ear example + + Excel worksheet: $0.72$. + + ``Translated'' R code: +<<<sii.right.old>>= +SII:::sii.excel( + c(15,15,20,25,35,35,45,50), + c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000) + ) +@ + + New R code: +<<sii.right>>= +sii.right <- sii( + speech="raised", + threshold=c(15,15,20,25,35,35,45,50), + freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), + importance="NU6", + interpolate=TRUE + ) +sii.right +@ + + \item Best possible score (No detectible threshold) + + Excel Spreadsheet: $0.9887$ + + ``Translated'' R code: +<<<sii.best.old>>= +SII:::sii.excel( + rep(0,8), + freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000) + ) +@ + + + New R code: +<<sii.best>>= +sii.best <- sii( + threshold=rep(0,8), + freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), + interpolate=TRUE + ) +sii.best +@ + + \item Worst possible score (No detectible threshold) + + Excel Spreadsheet: $0.00$ + + ``Translated'' R code: +<<<sii.worst.old>>= +SII:::sii.excel( + rep(100,8), + c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000) + ) +@ + + + New R code: +<<sii.worst>>= +sii.worst <- sii( + threshold=rep(100,8), + freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), + interpolate=TRUE + ) +sii.worst +@ + + +\end{itemize} + +\subsection{Test handling of missing values} + +<<sii.missing>>= +sii.worst <- sii( + threshold=c(NA, rep(100,7)), + freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), + interpolate=TRUE + ) +sii.worst +@ + +<<sii.missing>>= +sii.right <- sii( + speech="raised", + threshold=c(0,15,15,20,25,35,35,45,50), + freq=c(NA, 250, 500, 1000, 2000, 3000, 4000, 6000, 8000), + importance="NU6", + interpolate=TRUE + ) +sii.right +@ + +<<sii.all.missing>>= +## This should fail, because there is no data! +sii.NONE <- try( + sii( + threshold=rep(NA,8), + freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), + interpolate=TRUE + ) + ) +sii.NONE +@ + + + +<<sii.missing>>= +sii.right <- sii( + speech="raised", + threshold=c(15,15,20,NA,35,35,45,50), + freq=c(250, 500, 1000, 2000, 3000, 4000, 6000, 8000), + importance="NU6", + interpolate=TRUE + ) +sii.right +@ + +<<missing.C.1>>= +sii.C1.NA <- sii( + speech = c(50.0, 40.0, 40.0, NA, 20.0, 0.0), + noise = c(70.0, 65.0, 45.0, 25.0, 1.0,-15.0), + threshold= c( 0.0, 0.0, 0.0, 0.0, NA, 0.0), + freq = c( 250, 500, 1000, 2000, 4000, 8000), + method="octave", + importance="CST", + interpolate=TRUE + ) +sii.C1 +sii.C1.NA +@ + + + +\section{Final cleanup} + +Save the data we created here for debugging purposes: +<<save data>>= +save.image("SII-Code.Rda") +@ + +%\printindex{} + +\end{document} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wa...@us...> - 2013-12-06 22:03:20
|
Revision: 1752 http://sourceforge.net/p/r-gregmisc/code/1752 Author: warnes Date: 2013-12-06 22:03:18 +0000 (Fri, 06 Dec 2013) Log Message: ----------- Add comment Modified Paths: -------------- trunk/SII/R/sii.excel.R Modified: trunk/SII/R/sii.excel.R =================================================================== --- trunk/SII/R/sii.excel.R 2013-12-06 21:40:11 UTC (rev 1751) +++ trunk/SII/R/sii.excel.R 2013-12-06 22:03:18 UTC (rev 1752) @@ -10,6 +10,7 @@ if(length(THDI) != length(freq)) stop("THDI must have the same length as freq") + ## Load constants into *this* environment data(sii.constants, package="SII", envir=parent.frame()) # Interpolate unobserved frequencies This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |